Tagout

auto-dev run — tagout, 2026-10-28

Supervisor: one session on the top tier, phase-1 workers on the mid tier, phase-2 landers on the small tier. The queue was three issues filed the same day from ideas borrowed from task-observer (#723, #724, #725); all three edit skills/review-sessions/, so they ran one at a time. The run filed two more (#728, #731) and landed them too.

Outcome

   
PRs merged 5 — #726, #727, #730, #729, #732
Issues closed #725, #723, #724, #728, #731
Filed during the run #728 (supervisor, from the workers’ own reports), #731 (at the owner’s request)
Blocked none
Base after each merge green (clear) ×5, every one re-derived by the supervisor

What the run found about itself

The review was skipped, twice, and that became the run’s main output. The phase-1 workers for #725 and #723 both skipped implement-issue Step 7 and said so in their report lines (“the change is small”); the second had been told in its dispatch prompt to run it. #725, merged an hour earlier, had just written the rule for exactly this: a rule broken a second time while in context needs a barrier, not better wording. #728 is that barrier — post-review-check.sh records the review in git config and guarded-ready.sh refuses the ready-flip without it — and #731 closes the same hole in merge-pr, with a tree-wide test banning a bare gh pr ready. The #731 worker was the first to flip through the guard (guarded-ready: OK — review recorded at 183f0c6). #723’s new user-correction signal would not have caught this: the owner’s remark opened with no lexicon token, and a worker announcing its own skip is not a failure record.

No lander could verify the base. All five phase-2 landers reported a free-text BASE: unverified (timeout | in-progress). #732’s lander named the cause: the harness moves base-run-verdict.sh to the background because its wait outlives the foreground Bash limit. Two landers left that background work running and were stopped. The supervisor re-derived each verdict itself.

#729 took three CI runs. Each time main moved (#730, and one unrelated commit), merge-pr’s sync rule merged it in and pushed, so the lander stopped as the push-and-land split requires, and the supervisor waited again — although GitHub reported CLEAN and the moving commits touched other files.

Cost

$121.96 list-price equivalent over 16 sessions, $24.39 per merge. The orchestrator is 83% of it, but this session also did the task-observer analysis and wrote all five issues before the fleet started, so the figure is not a fleet-only share. Workers and landers together: $21.22 over 15 sessions, $1.41 each.

Lessons

decision verdict events distinct inputs programs flag
tracker.capable capable 1 1 1  
ci.verdict pending 79 5 1 repeat-poll
ci.verdict clear 5 5 1  
lessons:
  - category: steering
    evidence: "PHASE1 | ISSUE: 725 … skipped the separate code-review pass"; "PHASE1 | ISSUE: 723 … skipped the separate code-review step", after the prompt required it
    candidate: filed and merged as #728 and #731; the next run should show a RECORD line on every ready-flip.
  - category: tool-economy
    evidence: 5 of 5 landers reported a free-text unverified BASE; the harness auto-backgrounds base-run-verdict.sh
    candidate: bound the lander's base-verdict call under the harness foreground limit, or move it supervisor-side like wait-ci.
  - category: no-ops
    evidence: PR #729 needed 3 CI runs and 3 landers while GitHub reported CLEAN
    candidate: merge-pr syncs whenever a branch is behind, even when the base does not require up-to-date branches.
  - category: steering
    evidence: "#724 … post-review-check.sh refused, but only because my own fix commit moved HEAD during the review"
    candidate: none — with #728 merged that order now fails at guarded-ready and corrects itself.

Needs manual sweep

Nine retired agent trees under .claude/worktrees/agent-*, each released (detached) before any re-dispatch onto its branch; none holds unpushed work.