Fix Workflow
Change wrong behavior to right, in one place. The bug is unknown — you
believe it is broken in way Y — until a failing repro test proves it. RED
first is the parse: it demonstrates the test actually captures the bug. GREEN is
the fix. The test stays as a regression lock so the bug cannot recur silently.
The loop (the feature-workflow spine, fix instance)
- STEP 0 classified this as a fix.
change_new.py --kind fix --name "...". - Parse the unknown: write the repro test and watch it FAIL for the right
reason. A repro that does not fail first is not a repro. (See
references/repro.md.) - Gate:
change_check.py --kind fix <manifest>— blocks until the RED repro is declared. - Find the root cause, fix at the right home — the boundary that owns the invariant, not the symptom site. Patching downstream of the real cause is how one bug becomes three.
- Verify obligation: repro RED → GREEN and stays green; full suite still
green (no neighbor broken).
verify.pygates ship. - Record/ratchet: a bug shipped without a regression test is friction RIPE
AT ONE OCCURRENCE — the
knowledge-ratchetpromotes the missing-test habit into a gate.
The one law here
A fix changes the smallest set that makes the repro pass at the right home, and nothing else. Scope creep means a misclassification — reclassify, don't smuggle.
Files
references/repro.md— how to write a repro that fails for the right reason.