Skip to content

fix(planner): deploy-config instructions were cloud-only + legacy schema (#2392) - #2394

Merged
kevinthelago merged 3 commits into
developfrom
2392-deploy-instructions
Jul 6, 2026
Merged

fix(planner): deploy-config instructions were cloud-only + legacy schema (#2392)#2394
kevinthelago merged 3 commits into
developfrom
2392-deploy-instructions

Conversation

@kevinthelago

Copy link
Copy Markdown
Owner

The planner's always-loaded process doc (data/planner/process.md, "Record the Deploy stage's config") taught a deploy-config JSON example that was wrong three ways, and Claude follows the concrete example over the (correct) mode-aware prose in data/stages/deployment.json:

  1. Legacy top-level schema (pre-Deployment stage rework: per-repo deployment cards (Claude Design) #1421) — environments/pipeline/secrets/release hoisted above the services, not per-service.
  2. Cloud-only — both example services were platform/workload; no mode:"local" example, so a local (CLI/desktop/library) build copied workload/host/build and never wrote localKind/buildTargets/artifact.
  3. Wrong gate description — claimed the gate needs platform + release.strategy on every service; that's the cloud gate. serviceChecks() is mode-aware.

Observed: a real local Tauri project stored {mode:"local", workload:"application"} with no localKindserviceReady=falsedeploymentDefined=false → the Deployment gate blocked permanently with no obvious cause.

Fix

Rewrote the block: per-service, mode-aware, with both a cloud and a local example, explicit mutual exclusivity, and a corrected mode-aware gate description. Both example services evaluate deploy-ready by the frontend's own serviceReady logic (verified). Adds a regression test (planner/mod.rs) asserting the example covers both modes.

Closes #2392.

🤖 Generated with Claude Code

…ema (#2392)

The planner's always-loaded process doc (data/planner/process.md, "Record the
Deploy stage's config") taught a deploy-config JSON example that was wrong three
ways, and Claude follows the concrete example over the (correct) mode-aware prose
in data/stages/deployment.json:

  1. Legacy top-level schema (pre-#1421) — environments/pipeline/secrets/release
     hoisted above the services, not per-service.
  2. Cloud-only — both example services were platform/workload; no mode:"local"
     example, so a local (CLI/desktop/library) build copied workload/host/build
     and never wrote localKind/buildTargets/artifact.
  3. Wrong gate description — claimed the gate needs platform + release.strategy on
     every service; that's the cloud gate. serviceChecks() is mode-aware: local
     needs localKind + (buildTargets+artifact | publishRegistry+packageName), no
     platform/release.

Result: a real project (a local Tauri app) stored {mode:"local", workload:
"application"} with no localKind → serviceReady=false → deploymentDefined=false →
the Deployment gate blocked permanently with no obvious cause.

Rewrite the block: per-service, mode-aware, with BOTH a cloud and a local example,
explicit mutual exclusivity, and a corrected mode-aware gate description. Both
example services evaluate deploy-ready by the frontend's own serviceReady logic.

Adds a regression test (planner/mod.rs) asserting the example covers both modes.

Closes #2392
@kevinthelago
kevinthelago merged commit 2798ae9 into develop Jul 6, 2026
7 checks passed
@kevinthelago
kevinthelago deleted the 2392-deploy-instructions branch July 6, 2026 19:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant