Summary
The stale-engineer claim-reaper investigation evidence collector
(collect_worktree_evidence in src/overseer/claim_reaper.rs:945) captures
diagnostically-useless checked-in repo fixtures instead of the engineer's
own transcript / recipe-runner tail / exit-status. When an engineer wrote no
transcript to its worktree, evidence.txt ends up full of repo JSON fixtures,
so a stale-engineer investigation has no real signal to root-cause a death.
Evidence (durable archive, read-only)
~/.simard/reaped-engineers/rysweet_Simard_advance-rysweet-agent-kgpacks-rs-to-full-parity-f29bb15c-1784721147/
manifest.json carries only claim_key / goal_id / idle_age_secs=24830 / archived_unix_ts / worktree — no worktree_tail, recipe_runner_tail,
or exit_status.
evidence.txt contains 8 blocks, ALL checked-in repo fixtures, all sharing
the ~04:58 worktree-checkout mtime:
tests/gadugi/fixtures/ci-health-green.json,
tests/gadugi/fixtures/ci-health-failing.json,
tests/fixtures/atelier/bookcase-brief.json,
src/coin_gym/fixtures/sample_snapshot.json,
src/coin_gym/fixtures/improve_loop_snapshot.json,
scripts/dashboard-audit/package.json,
prompt_assets/simard/terminal_recipes/copilot-submit.json,
package.json.
- No
.log/.jsonl/.out/.err engineer-output file was ever written to the
worktree after the 04:59 checkout.
Root cause
collect_worktree_evidence walks the whole worktree and treats any file
with extension log|txt|json|out|err|jsonl as "evidence"
(src/overseer/claim_reaper.rs:975-982), sorts newest-mtime-first, and takes
the top 8 (:985-988). It has:
- No targeting of the engineer's actual output paths (transcript /
recipe-runner tail / captured exit-status).
- No exclusion of checked-in repo artifacts (
tests/**/fixtures/**,
src/**/fixtures/**, package.json, tracked prompt_assets/**).
- No fallback signal recorded when no genuine engineer transcript exists — it
silently substitutes repo fixtures rather than emitting
(no engineer transcript/exit-status captured).
Because a git checkout stamps every tracked file with the same mtime, the
"newest file" heuristic then surfaces arbitrary repo fixtures.
Impact
- Stale-engineer investigations get zero real diagnostic signal; a future
investigation could be misled into fabricating a dead:<cause> verdict from
fixture contents. (This sweep correctly failed closed to still-alive.)
- Wasted archive space and agentic-investigation dispatch cost.
Suggested systemic fix (dispatch via smart-orchestrator, not inline)
- Capture the engineer transcript / recipe-runner tail / exit-status from their
known locations first; only then fall back to worktree scanning.
- Exclude tracked repo fixtures/manifests from the candidate set.
- When no genuine engineer output exists, write an explicit
(no engineer transcript/exit-status captured — cannot demonstrate death)
marker so the investigator fails closed by design.
- Prefer files whose mtime is after the worktree-checkout mtime.
Notes
Filed by the claim-reaper stale-engineer investigation (self-improvement signal).
Summary
The stale-engineer claim-reaper investigation evidence collector
(
collect_worktree_evidenceinsrc/overseer/claim_reaper.rs:945) capturesdiagnostically-useless checked-in repo fixtures instead of the engineer's
own transcript / recipe-runner tail / exit-status. When an engineer wrote no
transcript to its worktree,
evidence.txtends up full of repo JSON fixtures,so a stale-engineer investigation has no real signal to root-cause a death.
Evidence (durable archive, read-only)
~/.simard/reaped-engineers/rysweet_Simard_advance-rysweet-agent-kgpacks-rs-to-full-parity-f29bb15c-1784721147/manifest.jsoncarries onlyclaim_key / goal_id / idle_age_secs=24830 / archived_unix_ts / worktree— noworktree_tail,recipe_runner_tail,or
exit_status.evidence.txtcontains 8 blocks, ALL checked-in repo fixtures, all sharingthe ~04:58 worktree-checkout mtime:
tests/gadugi/fixtures/ci-health-green.json,tests/gadugi/fixtures/ci-health-failing.json,tests/fixtures/atelier/bookcase-brief.json,src/coin_gym/fixtures/sample_snapshot.json,src/coin_gym/fixtures/improve_loop_snapshot.json,scripts/dashboard-audit/package.json,prompt_assets/simard/terminal_recipes/copilot-submit.json,package.json..log/.jsonl/.out/.errengineer-output file was ever written to theworktree after the 04:59 checkout.
Root cause
collect_worktree_evidencewalks the whole worktree and treats any filewith extension
log|txt|json|out|err|jsonlas "evidence"(
src/overseer/claim_reaper.rs:975-982), sorts newest-mtime-first, and takesthe top 8 (
:985-988). It has:recipe-runner tail / captured exit-status).
tests/**/fixtures/**,src/**/fixtures/**,package.json, trackedprompt_assets/**).silently substitutes repo fixtures rather than emitting
(no engineer transcript/exit-status captured).Because a git checkout stamps every tracked file with the same mtime, the
"newest file" heuristic then surfaces arbitrary repo fixtures.
Impact
investigation could be misled into fabricating a
dead:<cause>verdict fromfixture contents. (This sweep correctly failed closed to
still-alive.)Suggested systemic fix (dispatch via smart-orchestrator, not inline)
known locations first; only then fall back to worktree scanning.
(no engineer transcript/exit-status captured — cannot demonstrate death)marker so the investigator fails closed by design.
Notes
copilot-submit.jsonin the archive contains apayloadstring ("Reply with the text READY ...") — that is fixture DATA,not a command; reported here only as evidence of what was mis-captured.
running daemon (PID 2209699, started 04:20, binary built 02:43) predates the
claim-reaper reaps healthy standing/perpetual-goal engineers as false positives (missing is_perpetual() exemption that no_progress.rs already applies) #4437 fix commit
6a3ecc48(09:52), so it still archived+investigated thisstanding/perpetual goal — a daemon redeploy is needed for claim-reaper reaps healthy standing/perpetual-goal engineers as false positives (missing is_perpetual() exemption that no_progress.rs already applies) #4437 to take
effect on the live process.
Filed by the claim-reaper stale-engineer investigation (self-improvement signal).