Skip to content

feat(plan): yodel plan --part writes the versioned plan as a chant change-set part (#237) - #272

Merged
lex00 merged 1 commit into
mainfrom
feat/237-plan-part
Oct 13, 2026
Merged

lex00 merged 1 commit into
mainfrom
feat/237-plan-part

Conversation

@lex00

@lex00 lex00 commented Oct 13, 2026

Copy link
Copy Markdown
Contributor

Closes #237

yodel plan <env> --part <file> writes the versioned plan as a chant change-set part (planner sql), through the sql lexicon's sqlVersionedPlanPart (chant 0.124.23). A chant Op reads it with readChangeSetPart, joins it to other members' parts with composeChangeSet, and gates them together; a Cedar policy reads the result as context.plan.

  • One entry per object the pending steps touch, action and disruption from the change classes; steps a partial run already applied are left out; statements redacted as in --json.
  • The member's plan digest is yodel's, the one yodel apply's gate binds. A plan apply would refuse is a failed member.
  • Refused on a declarative project and on a tenant set (plan one tenant).
  • src/pr/part.ts, the flag in src/commands/plan.ts.
  • docs/approval.md: a section with an Op that composes the part with a Terraform plan, and a Cedar rule over it.
  • test/plan-part.test.ts: the entries, the digest, redaction, chant reading the JSON back and composing it, a refused plan. test/pr-cli.test.ts: the declarative refusal.
  • The approval claim's approval part writes the part against the server and checks chant reads it back as planned under the gate's digest. npm run claims -- approval on this branch: ch and pg pass, both caught under BREAK=1.

@lex00
lex00 merged commit b03cb2a into main Oct 13, 2026
8 checks passed
@lex00
lex00 deleted the feat/237-plan-part branch October 13, 2026 02:57
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.

yodel plan writes a chant change-set part

1 participant