The plan lifecycle
A plan is a YAML description of a topology. The lifecycle takes it from an interview answer to reconciled infrastructure, with verifiable hand-offs in between.
1. Generate
pdctl plan generateA short interview produces a plan in three cost archetypes:
- ECONOMY — smallest viable footprint.
- BALANCED — sensible production defaults.
- PERFORMANCE — headroom and redundancy.
2. Inspect before you spend
pdctl plan estimate plan.yaml # monthly costpdctl plan inspect plan.yaml # node-by-node analysispdctl plan validate plan.yaml # schema checkCompare alternatives, or diff two plan files or two Git refs:
pdctl plan compare a.yaml b.yamlpdctl plan diff a.yaml b.yaml # two filespdctl plan diff --git-a main --git-b feature/bigger-db \ --path plan.yaml # two Git refsOnce a topology is live, project its cost against a budget:
pdctl plan budget <topology-id>3. Customise
pdctl plan customise plan.yaml # interactive editorpdctl plan inspect plan.yaml --ai # AI-explained breakdown4. Apply and watch
pdctl plan apply plan.yamlpdctl plan watch <topology-id> # live SSE rolloutpdctl plan dashboard <topology-id> \ --tail-logs --ai # live TUI + AI summarypdctl plan show <topology-id>If something looks wrong:
pdctl plan rollback <topology-id>5. Publish, sign, verify, replay
For repeatable deploys across clusters, bundle the plan. plan publish writes
manifest.sha256 plus provenance.json and, when cosign is on PATH, signs
the manifest:
pdctl plan publish plan.yaml # bundle + manifest + provenance + cosignpdctl plan publish plan.yaml --keyless # Sigstore keyless (Fulcio + Rekor)In CI the --keyless flow auto-detects the GitHub Actions OIDC token, so bundles
are signed without managing keys. The bundle is content-addressed; anyone with it
can verify and re-apply without trusting the channel it arrived on:
pdctl plan verify ./bundle # check files against manifest.sha256pdctl plan replay ./bundle # re-apply on another clusterThis is how the same topology reaches many clusters without drift: publish once, verify everywhere, replay deterministically. For multi-cluster plans, the publish step can also emit per-cluster slices for a GitOps controller (ArgoCD / Flux) and render cross-cluster federation — see Kubernetes & Mesh.