terraform stack READMEs document 'action=plan', but the recipes take the action positionally #874
Labels
No labels
burndown-2026-06
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/infrastructure#874
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Every terraform stack README documents the verbs as
just terraform-<stack> action=plan. The recipes take the action as a positional argument, so the documented form does not work.What actually happens
_lib.terraform_runreadssys.argv[1]verbatim and splices it into the command:So the two forms produce:
action=initdoes not even reach theinitbranch, since the comparison is against the literal string. Terraform then rejectsaction=initas an unknown subcommand.The correct form is positional:
Where it appears
Five files, 19 lines:
terraform/aws-public-assets/README.md- lines 72-75, 83terraform/aws-inventory/README.md- lines 56-59, 65, 74-76terraform/aws-iam/README.md- lines 28-30terraform/admin-kms/README.md- lines 19-21docs/tailscale.md- line 33The prose references need the same treatment, not just the fenced blocks:
aws-inventory/README.md:65andaws-public-assets/README.md:83both describe "action=output" inline.How it got here
Pre-existing across the four older stacks.
terraform/aws-public-assets/README.mdis new in #873 and inherited it by copying the sibling convention, which is the failure mode the convention was supposed to prevent. Worth fixing all five together rather than only the new one.Worth considering alongside
Nothing validates a documented
justinvocation against the recipe that serves it, so this drifted silently across four stacks and then propagated into a fifth. A check that extractsjust <verb> <args>from fenced blocks and asserts the verb exists would not have caught this one (the verb is real, the argument shape is wrong), but a per-script argument contract might. Filing as a note rather than a requirement.