go-worker-commits-outside-assigned-worktree
Wrote the verified solution to:
~/go-worker-commits-outside-assigned-worktree.solution.md
No live hermes-canopy checkout exists in this environment, so I rebuilt a faithful scratch reproduction (git 2.53.0) and verified every command before writing it up.
The brief header (scope: MAIN repo tree) contradicted the wave manifest (mode: worktree, scopes wt/w1, wt/w2). Workers followed the brief and committed in the repo root on master, so a2127b73/b3b601c5 serialized on one shared index while the w1/w2 branches stayed stale at base. Disjoint files ⇒ benign; overlapping files ⇒ collision, because the second commit was authored on top of the first and doesn't replay cleanly.
verify_wave_commits.sh compares git diff-tree --name-only file sets with comm -12. Empty ⇒ accept and tear down worktrees; non-empty ⇒ archive, reset MAIN to base, re-dispatch into wt/<id>.wave_scope_check.py reconciles the brief header against manifest.json (manifest is single source of truth) and refuses dispatch on drift, plus a pre-commit hook that blocks commits from the MAIN tree (--git-dir == --git-common-dir) when WAVE_WORKTREE_REQUIRED=1.git worktree remove + branch fast-forward worksThe doc includes the exact triage commands parameterized for a2127b73/b3b601c5, full scripts, expected outputs, and a checklist.
# Evidence - Problem class: go-worker-commits-outside-assigned-worktree - Model: openrouter/deepseek/deepseek-v4.1-flash - Solved: 2026-09-25T11:55:38.516Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "Wave workers committed in the MAIN tree instead of their assigned worktrees because the brief header said MAIN repo tree while wave mechanics provisioned wt/<id> worktrees. Resolution: verify per-commit file-disjointness via git show --stat before accepting; benign when slices are disjoint (clean commits land on master), collision risk otherwise. Prevention: brief header must match dispatch mode verbatim; foreman should reconcile the wave manifest scope field with the brief text before dispatch.", "environment": "", "language": "", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "go-worker-commits-outside-assigned-worktree", "provider": "openrouter", "solved_at": "2026-09-25T11:55:38.516Z", "version": ""}Wrote the verified solution to:
~/go-worker-commits-outside-assigned-worktree.solution.md
No live hermes-canopy checkout exists in this environment, so I rebuilt a faithful scratch reproduction (git 2.53.0) and verified every command before writing it up.
The brief header (scope: MAIN repo tree) contradicted the wave manifest (mode: worktree, scopes wt/w1, wt/w2). Workers followed the brief and committed in the repo root on master, so a2127b73/b3b601c5 serialized on one shared index while the w1/w2 branches stayed stale at base. Disjoint files ⇒ benign; overlapping files ⇒ collision, because the second commit was authored on top of the first and doesn't replay cleanly.
verify_wave_commits.sh compares git diff-tree --name-only file sets with comm -12. Empty ⇒ accept and tear down worktrees; non-empty ⇒ archive, reset MAIN to base, re-dispatch into wt/<id>.wave_scope_check.py reconciles the brief header against manifest.json (manifest is single source of truth) and refuses dispatch on drift, plus a pre-commit hook that blocks commits from the MAIN tree (--git-dir == --git-common-dir) when WAVE_WORKTREE_REQUIRED=1.git worktree remove + branch fast-forward worksThe doc includes the exact triage commands parameterized for a2127b73/b3b601c5, full scripts, expected outputs, and a checklist.
# Evidence - Problem class: go-worker-commits-outside-assigned-worktree - Model: openrouter/deepseek/deepseek-v4.1-flash - Solved: 2026-09-25T11:55:38.516Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "Wave workers committed in the MAIN tree instead of their assigned worktrees because the brief header said MAIN repo tree while wave mechanics provisioned wt/<id> worktrees. Resolution: verify per-commit file-disjointness via git show --stat before accepting; benign when slices are disjoint (clean commits land on master), collision risk otherwise. Prevention: brief header must match dispatch mode verbatim; foreman should reconcile the wave manifest scope field with the brief text before dispatch.", "environment": "", "language": "", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "go-worker-commits-outside-assigned-worktree", "provider": "openrouter", "solved_at": "2026-09-25T11:55:38.516Z", "version": ""}