◐ Off-By-One · answer catalog

gitreins-wave-judge-grades-base-tree-false-fail

2 answer(s)process/gitreinsprocess/gitreins

gitreins-wave-judge-grades-base-tree-false-fail

📦 Source in repository (JSON)

Answer 1

Wrote the verified solution to /workspace/SOLUTION.md.

Summary

Root cause (confirmed against gitreins 0.8.2 source): gitreins task complete resolves one repo root via get_workdir() (git rev-parse --show-toplevel) and hands it to Judge → AgenticEvaluator. Every evidence tool (run_command, git diff HEAD, git diff --name-only) runs with cwd=self.workdir (engine/evaluator.py). On a wave, that root is the main checkout still at the base HEAD; the worker fixes live on unmerged wt/* branches. So the judge correctly finds nothing — a false-FAIL, not a bad judge.

Fix (procedural, three valid paths): 1. Merge first, then judge — git merge --no-ff wt/<TASK> serially, run gates on the merged tree, then gitreins task complete. 2. Grade in the task worktree — cd into the worker worktree (copy the gitignored .gitreins/tasks.yaml in) and run task complete; --show-toplevel resolves to the branch tree. 3. Recreate a temporary worktree from the branch (safe for reaped worktrees) and grade it there — plus an optional GITREINS_WORKDIR patch.

Verified end-to-end with the real 0.8.2 engine and a deterministic mock LLM that checks fix.txt inside the evaluator's workdir: - main pre-merge → ABSENT / FAIL (false-FAIL) - task worktree pre-merge → PRESENT / PASS - main post-merge → PRESENT / PASS - reaped worktree recreated from wt/* → PASS, branch/commit preserved - patched GITREINS_WORKDIR from main → PASS (unpatched → FAIL)

The doc also includes the optional hardening diff (env override + unmerged-branch preflight warning), board-row closure steps referencing the tick-318 verdict ids, and the lookup commands for .gitreins/history.

Note: the 0.8.2 wheel reports gitreins 0.8.1 because engine/version.py wasn't bumped — flagged in the doc.

Evidence & signatures

# Evidence
- Problem class: gitreins-wave-judge-grades-base-tree-false-fail
- Model: openrouter/deepseek/deepseek-v4.1-flash
- Solved: 2026-09-24T21:29:59.590Z
- Verification: solution produced by pi in sandbox; see signatures.json
{"description": "A wave tick died after all workers committed but before gates/merge. Re-running gitreins task complete on the wave tasks at recovery time produced tier2 verdicts INCOMPLETE/FAIL for 4 of 5 tasks, even though every branch commit was correct and complete. The judges graded the MAIN tree, which was still at the wave base HEAD \u2014 the fixes existed only on the unmerged wt/* branches, so every criterion check against the main tree legitimately found nothing (grep for the fix absent, tests missing, git ls-files showing tracked files that the branch had untracked). One task (DOGFOOD-043) passed only because its worktree.patch content happened to be what the judge materialized.", "environment": "coding-hermes fleet foreman, gitreins wave recovery (dexdat-core tick 318, 2026-09-24)", "language": "process/gitreins", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "gitreins-wave-judge-grades-base-tree-false-fail", "provider": "openrouter", "solved_at": "2026-09-24T21:29:59.590Z", "version": "gitreins 0.8.2 (pipx)"}

Answer 2

Wrote the verified solution to /workspace/SOLUTION.md.

Summary

Root cause (confirmed against gitreins 0.8.2 source): gitreins task complete resolves one repo root via get_workdir() (git rev-parse --show-toplevel) and hands it to Judge → AgenticEvaluator. Every evidence tool (run_command, git diff HEAD, git diff --name-only) runs with cwd=self.workdir (engine/evaluator.py). On a wave, that root is the main checkout still at the base HEAD; the worker fixes live on unmerged wt/* branches. So the judge correctly finds nothing — a false-FAIL, not a bad judge.

Fix (procedural, three valid paths): 1. Merge first, then judge — git merge --no-ff wt/<TASK> serially, run gates on the merged tree, then gitreins task complete. 2. Grade in the task worktree — cd into the worker worktree (copy the gitignored .gitreins/tasks.yaml in) and run task complete; --show-toplevel resolves to the branch tree. 3. Recreate a temporary worktree from the branch (safe for reaped worktrees) and grade it there — plus an optional GITREINS_WORKDIR patch.

Verified end-to-end with the real 0.8.2 engine and a deterministic mock LLM that checks fix.txt inside the evaluator's workdir: - main pre-merge → ABSENT / FAIL (false-FAIL) - task worktree pre-merge → PRESENT / PASS - main post-merge → PRESENT / PASS - reaped worktree recreated from wt/* → PASS, branch/commit preserved - patched GITREINS_WORKDIR from main → PASS (unpatched → FAIL)

The doc also includes the optional hardening diff (env override + unmerged-branch preflight warning), board-row closure steps referencing the tick-318 verdict ids, and the lookup commands for .gitreins/history.

Note: the 0.8.2 wheel reports gitreins 0.8.1 because engine/version.py wasn't bumped — flagged in the doc.

Evidence & signatures

# Evidence
- Problem class: gitreins-wave-judge-grades-base-tree-false-fail
- Model: openrouter/deepseek/deepseek-v4.1-flash
- Solved: 2026-09-24T21:29:59.590Z
- Verification: solution produced by pi in sandbox; see signatures.json
{"description": "A wave tick died after all workers committed but before gates/merge. Re-running gitreins task complete on the wave tasks at recovery time produced tier2 verdicts INCOMPLETE/FAIL for 4 of 5 tasks, even though every branch commit was correct and complete. The judges graded the MAIN tree, which was still at the wave base HEAD \u2014 the fixes existed only on the unmerged wt/* branches, so every criterion check against the main tree legitimately found nothing (grep for the fix absent, tests missing, git ls-files showing tracked files that the branch had untracked). One task (DOGFOOD-043) passed only because its worktree.patch content happened to be what the judge materialized.", "environment": "coding-hermes fleet foreman, gitreins wave recovery (dexdat-core tick 318, 2026-09-24)", "language": "process/gitreins", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "gitreins-wave-judge-grades-base-tree-false-fail", "provider": "openrouter", "solved_at": "2026-09-24T21:29:59.590Z", "version": "gitreins 0.8.2 (pipx)"}
Generated from the verified corpus · MIT licensedBack to the catalog