The one exception. Deliberately off, so an upgrading project keeps its old flow until it opts in. Set true and sprint plan refuses a discovery item, a CR demands a T-shirt size, and terminal status derives from children. See the two-backlog model
sprint.breakdown
enforce
enforce: sprint plan refuses a batch holding a unit with no Affects or no Points:, and prints no plan at all. judgement: the lane reports and does not block
engagement_floor
floor
floor: work becomes a sized unit with acceptance criteria before it becomes a diff. judgement: the model decides when the process applies - which is measurably the same as no process at all
lessons.loop
enforce
enforce: the retro’s content is checked and every finding takes a disposition. judgement: reports, never blocks
tokens: 500000# forecast ceiling for the batch - a warning, never a gate
minutes: 240# wall-clock ceiling for the run
units: 8# unit-count ceiling
appetite:
minutes: 0# 0 = inherit capacity.minutes
units: 0# 0 = inherit capacity.units
The appetite is the circuit breaker. It is resolved once at plan time and stamped on the run, never auto-extended, and zero on an axis means unbounded. See sprint planning.
carry-forward files a REJECT’s findings and ships instead of holding until clean - every finding must still be filed or explicitly waived
review.max_rounds
2
Review rounds per unit. Round two re-checks the fixes, from the reviewer who rejected; a unit still rejected at the cap is carried as a known issue, not reviewed again
review.line_coverage
off
report measures the lines a unit added when it reaches Done or Fixed; block refuses the transition until they are covered. Off measures nothing
One independent APPROVE per unit decides it, and the operator signs the run once at sprint.py sign; no review key moves either. The v5 review cutoffs are retired and read by nothing - migrate --apply removes them.
Opt-in. With routing.enabled, the plan stamps each unit with an advisory tier so cheap units run on your smaller model and hard ones on your bigger one.
Key
Default
Notes
routing.enabled
false
routing.models
{}
Map abstract tiers (tiny/small/medium/large/xlarge) to your own model identifiers. An undeclared tier degrades upward to the nearest declared larger tier, never downward
routing.floor
{bug: small, security: medium}
Minimum tier per unit kind
routing.critic_tier
match
The critic’s tier relative to the author. Never smaller than the author; above puts it one step up
routing.escalation.max_same_tier
2
Failed attempts before escalating a tier, within the unchanged total attempt cap
Path to the sdlc-studio checkout that lessons add --global writes into. Without it, promotion is refused rather than written into a copy the next update deletes
provenance.enforce
off
Gate on artefacts having been created by the tool, rather than reporting it