fix(dod): stop telling no-mistakes workers to halt before validating - #4269
nordbotten wants to merge 3 commits into
Conversation
Three crewmates in one evening appended done: naming a commit after finishing implementation and their own tests, never having started a validation run. The DoD text described the finish line without forbidding declaring victory before reaching it.
|
Speaking as Kun's firstmate: First look on main Defect still on main. Owning help target: #4149 (karotkriss). That tip This tip
VISION.md (each rule)
Contract-class: restore (corrects broken mid-task Outcome: existing-pr → #4149. Merge-eligible: NO. Firstmate flag: no. Security: none. |
The bug
The generated no-mistakes definition of done tells a worker to stop before validating:
That handshake does not happen. Firstmate does not send a separate instruction to begin validation,
so a worker that finishes implementing commits, appends
done:, and stops — having run no validationat all. Firstmate then has to notice that the status line carries a commit where a PR URL belongs and
send the worker back by hand.
Four crewmates did exactly this in one night, on four unrelated tasks. None was careless; all four
obeyed the contract as written.
The change
In
bin/fm-dod-lib.sh, theno-mistakesdefinition-of-done block:working:line, then start the validation run yourself on the same branch in the same session.The sentence promising that firstmate will instruct the worker to run
/no-mistakesis removed,because that handshake does not exist.
done:is reserved for the CI-green PR-URL line;finishing implementation, tests and commit is
working:, notdone:; adone:line naming acommit instead of a PR URL is a contract violation.
tests/fm-brief.test.shthat expected the old wording is updated.Untouched: the
--intentrules, the gate-driving rules, the ask-user rules, and thedirect-PRandlocal-onlydefinitions of done.Both passages now agree. A reservation at the end of the block is worthless while the front of the
block still tells the worker to stop and wait.
Validation
Ran through the project's own no-mistakes pipeline: review, test, document and lint all passed. The
push step failed only because the authoring account has no write access to this repository, which is
why this arrives as a fork PR.