shipped gives a plan no second opinion: the checker and the review each cite the other #171
Labels
No labels
already-shipped
bug
documentation
duplicate
enhancement
external-review
good first issue
help wanted
in progress
invalid
needs-decision
proposal
question
security
wontfix
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: crenshawdev/cadence-archived#171
Loading…
Add table
Add a link
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?
At the
shippedstakes level - the default for every project that never setsstakes- a plan gets NO second opinion at all, and the two decisions thatproduced that each cite the other as the remaining net.
The circle
e0b5448(2026-08-11) moved shippedplanfromadjudicatedtoadvisory.Its stated reason: "A plan at
shippedhas already passed cad-plan-checker,a blocking gate that forces a revision on any BLOCKER and is on by default."
b20fd14(2026-08-12) retuned shipped further;route-table.jsonnow reads"shipped": { "plan": "off", ... }.70007f7(2026-08-12) flippedworkflow.plan_checktodefault: false. Itsschema purpose string, still shipping today: "Gate plans through the checker
before code - opt-in; the plan review trigger remains the default second
opinion" (
config.schema.json:27).The checker is off because the review covers it. The review is off because the
checker covers it. Both cuts landed inside the same cycle, one day apart, and
neither re-read the other's justification. Every one of these is a v3.2.0
cost-cut decision - nothing in v3.3.0 revisited it.
Second, smaller half: the schema disagrees with routing
config.schema.json:70givesreview.triggers.plan.gate"default": "adjudicated", while the route table executesoffat shipped. Soconfig.mjs get review.triggers.plan.gateon an unconfigured project reportsadjudicatedfor a gate that never fires. This is #129's class exactly, and#134's for a different trigger -
planis the third member of that cluster andshould be fixed with them.
Only a global config layer hides this locally: this machine sets
review.triggers.plan.gate: adjudicatedin~/.claude/cadence/config.json, soevery dogfood run has been reviewing plans while the shipped default does not.
A user installing Cadence gets neither pass.
What the fix has to decide
One of these, not both:
shipped.planreturns toadvisoryinroute-table.json- the plan isreviewed and reported, nothing waits, which is what
advisorywas chosenfor in
e0b5448before the later retune took it tooff.workflow.plan_checkreturns todefault: trueand the schema's purposestring is rewritten to stop claiming a net that does not exist.
Option 1 is the cheaper of the two on the measured figures in
e0b5448(checker 8.8 min, reviewer 12.5 min) and keeps the second opinion cross-model.
Whichever lands, the losing justification's prose comes out with it.
Shipped in v3.4.0.
ade091cset the shipped level's plan gate to blocking; cadence-core/route-table.json:52 now reads"shipped": { "plan": "blocking", "diff": "off", "risk_surface": "blocking", "phase_diff": "off" }, and config.schema.json's purpose string for workflow.plan_check stopped claiming a second opinion that was not running. Merged to main in #172 and tagged v3.4.0.