iter disc.1: boss-only commits + main-as-quarantine (no branches in implement)
Two project-wide rules are now explicit across every skill: 1. Only the Boss commits. No skill agent (implementer, brainstormer, planner, debugger, fieldtester, docwriter, architect, bencher) runs `git commit`. Agents write their artefacts to the working tree as unstaged changes; the Boss inspects, decides commit shape, and commits. 2. main HEAD is sacrosanct. No actor runs `git reset` or `git revert` on main. Bad work stays in the working tree where it is still discardable via `git checkout -- <paths>`. Implement loses the `iter/<iter_id>` branch mechanic entirely; Phase 0 of the orchestrator-agent now does a clean-tree check and refuses to start on a dirty tree. Per-task agent commits are removed everywhere; reviewers operate against `git diff HEAD` instead of `pre_task_sha..head_sha`. Motivation: 2026-05-11 iter 23.4 stranded prep2/prep3 commits on an iter-branch that never integrated to main, then a corrected spec falsely claimed those commits had shipped. Branch-per-iter + manual-Boss-merge + iter-stacking made the strand structurally possible. See docs/journals/2026-05-11-iter-disc.1.md for the full per-task notes and motivation.
This commit is contained in:
@@ -14,11 +14,14 @@ segfault, wrong stdout, panic, observable misbehaviour.
|
||||
|
||||
## What this role is for
|
||||
|
||||
Bug diagnosis is RED-first. Your output is a *committed failing test* plus a
|
||||
1-2 sentence cause summary. The fix itself is `skills/implement`'s job, run
|
||||
in mini-mode. Splitting RED and GREEN across two dispatches keeps the
|
||||
diagnosis honest: the test is written before any fix is attempted, so it
|
||||
genuinely captures the symptom, not the post-fix code path.
|
||||
Bug diagnosis is RED-first. Your output is a *failing test in the working
|
||||
tree* (uncommitted) plus a 1-2 sentence cause summary. The fix itself is
|
||||
`skills/implement`'s job, run in mini-mode. You never commit anything;
|
||||
the Boss decides whether to commit the RED test separately as an audit-
|
||||
trail commit or to roll it into the final fix commit. Splitting RED
|
||||
and GREEN across two dispatches keeps the diagnosis honest: the test
|
||||
is written before any fix is attempted, so it genuinely captures the
|
||||
symptom, not the post-fix code path.
|
||||
|
||||
## Standing reading list
|
||||
|
||||
@@ -94,8 +97,10 @@ Each phase completes before the next starts.
|
||||
- automated, deterministic — same input always same output
|
||||
- doc comment names the *property* the test protects, not the symptom
|
||||
3. Run the test. Confirm it fails with the symptom the carrier described.
|
||||
4. Commit the failing test as a separate commit:
|
||||
`git commit -m "test: red for <symptom>"`.
|
||||
4. Leave the failing test in the working tree as an unstaged change.
|
||||
You do NOT commit. The Boss decides commit shape; the suggested
|
||||
subject if the Boss elects to commit the RED separately is
|
||||
`test: red for <symptom>`.
|
||||
|
||||
### Phase 4 — Hand off
|
||||
|
||||
@@ -120,9 +125,10 @@ orchestrator escalates.
|
||||
|
||||
End every report with exactly one of:
|
||||
|
||||
- `DONE` — RED test committed, cause documented, ready for `implement`
|
||||
mini-mode. Provide the handoff carrier (see Output format).
|
||||
- `DONE_WITH_CONCERNS` — RED test committed, but during diagnosis you
|
||||
- `DONE` — RED test in the working tree (uncommitted), cause documented,
|
||||
ready for `implement` mini-mode. Provide the handoff carrier (see
|
||||
Output format).
|
||||
- `DONE_WITH_CONCERNS` — RED test in the working tree, but during diagnosis you
|
||||
noticed a related issue the orchestrator should know about (e.g. another
|
||||
test would also fail under this code path; the bug shipped in iteration N
|
||||
but the JOURNAL entry didn't flag the risk).
|
||||
@@ -140,7 +146,7 @@ At most 250 words, structured:
|
||||
- **Symptom:** exact error / wrong output (verbatim).
|
||||
- **Repro:** the one-line command.
|
||||
- **Cause:** file + function + why (1-2 sentences).
|
||||
- **RED test:** path to the new test + commit SHA.
|
||||
- **RED test:** path to the new test in the working tree (uncommitted).
|
||||
- **Handoff carrier for `implement` mini-mode:**
|
||||
- `red_test_path`: absolute path
|
||||
- `cause_summary`: 1-2 sentences
|
||||
@@ -164,7 +170,7 @@ At most 250 words, structured:
|
||||
| "I'll write the fix and the test together" | Test-after proves nothing about whether the test would have caught the pre-fix bug. RED before GREEN — always. |
|
||||
| "The cause is obviously the new tag-extract emit" | Confident guesses paper over real causes. Phase 1 is data-flow tracing, not guessing. |
|
||||
| "Two RED tests both mis-pinned the symptom; third try is the right one" | Two failures means the hypothesis space is wrong. Phase 4.5 fires now, not after the third try. |
|
||||
| "End-of-day, just commit a fix and write the test tomorrow" | End-of-day pressure is the worst time for shotgun fixes. Clean tree + open bug > three speculative half-fixes. |
|
||||
| "End-of-day, just drop a fix into the working tree and write the test tomorrow" | End-of-day pressure is the worst time for shotgun fixes. Clean tree + open bug > three speculative half-fixes. Diagnosis is RED-first; the fix is a separate dispatch. |
|
||||
| "This bug is trivial, the existing tests will catch regressions" | The existing tests already passed while this bug shipped. By definition they don't cover it. |
|
||||
| "I can fix and verify in one go and be done" | The skill explicitly splits RED (you) and GREEN (`implement` mini-mode). Don't collapse them; the split is the whole point. |
|
||||
|
||||
@@ -177,4 +183,4 @@ At most 250 words, structured:
|
||||
- "Pattern says X but I'll adapt it differently"
|
||||
- *"One more hypothesis"* (when ≥ 2 already failed)
|
||||
- About to apply ANY edit outside the new test file
|
||||
- About to commit a fix in this dispatch
|
||||
- About to run `git commit` (anywhere, ever — you never commit)
|
||||
|
||||
Reference in New Issue
Block a user