review: per-trigger effort is dead on the claude-subagent path (config says medium, cad-reviewer pins high) #64
Labels
No labels
already-shipped
bug
documentation
duplicate
enhancement
good first issue
help wanted
in progress
invalid
needs-decision
proposal
question
wontfix
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: crenshawdev/cadence#64
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?
What happened
On the shipped default configuration, the per-trigger
effortvalue is read from config, passed nowhere, and silently discarded. Every review trigger runs athighregardless of what the config says.fire(trigger)resolves{ gate, tier, effort }(cadence-core/references/review-triggers.md:20).effortis then consumed in exactly one place, step 4's cross-model branch, where it becomes a seam argument:The
claude-subagentbranch immediately above it dispatchescad-reviewerthrough the spawn-agent seam and passes no effort at all. That agent's frontmatter pins it:The shipped default is
review.reviewers: ["claude-subagent"]with no provider keys configured, so on a stock install every trigger takes the branch that ignoreseffort. That includesdiff, whichcadence-core/templates/config.jsonsets tomediumand which fires at every plan completion.What you expected
Either the configured effort reaches the reviewer, or the config key does not exist. A key that is read, resolved, and then dropped with no warning is the worst of the three.
DESIGN.md's "Per-trigger cognitive fit" documents the intent the code drops, so the design is on record and only the wiring is missing.Reproduction
review.reviewersis the default["claude-subagent"].medium.difftrigger fires.cad-reviewerruns athigh, from its own frontmatter. Nothing reports the discrepancy.Static confirmation, no run required:
Every hit is inside the cross-model provider arm.
effort: high, pinned.Environment
node --version: v26.4.0fba5879review.reviewers: ["claude-subagent"](default),review.triggers.diff.effort: medium(template default)Notes
The fix folds into the reviewer row of the effort-as-rigor-lever proposal, which makes reviewer effort per-trigger by construction. Filed separately so the defect stays on the record if that proposal stalls or is rejected. Cross-link both ways.
Worth deciding as part of the fix: whether a resolved-but-undeliverable
effortshould warn rather than pass silently. Cadence already treats a silently-degraded path as a bug class of its own, and this is one.The fix folds into the
cad-reviewerrow of #63, which makes reviewer effort per-trigger by construction. Filed separately so the defect stays on the record if #63 is rejected.Scheduled into v2.0.0 rather than a patch, because #63 rewrites the exact dispatch path this fix lands on and doing it twice is waste.
Standing contingency, written down so it does not have to be reconstructed: if v2.0.0 slips or #63 is rejected, pull this forward into its own patch immediately. It is a live defect on the shipped default path, and that is why it was filed separately from #63 in the first place.