A turn that only repairs the base repo's build is committed, pushed and PR'd as the work item's round-1 work #396

Merged
toasterson merged 1 commit from claude/wi-019fa7c6-a-turn-that-only-repairs-the-base-repo-s into main 2026-07-28 12:01:38 +00:00
Owner

Anima work item 019fa7c6-ec4b-73e1-8b43-dc4deeca8373.

What happened

On 2026-07-24 the eight akh-medu bring-up waves (WI-230…WI-237) were dispatched. Four of them produced no work toward their work item at all — and every one of them still ended with a commit, a pushed branch and an open PR (akh-medu #245–#252).

The four commits are byte-identical in intent: 12 insertions in src/bin/generate_qa_dataset.rs adding ennead_role: None, ocean: None at each AgentDef site. That is a compile repair for someone else's merged struct change — the QA-dataset generator had gone stale against a struct that had gained two fields. Each session hit a base repo that would not build, repaired it to get a green build, ran out of turn, and the runner committed the repair under the work item's own title:

commit 4645f95  Author: Anima Runner
    Wave W1 — Ritual & genesis: pantheon packs, distill+choose ritual, …
    Anima implementation session.
 src/bin/generate_qa_dataset.rs | 12 ++++++++++++

(R1 724b303, R4 b066fd7, W1 4645f95, W2 70e25c6 — all the same 12 lines. R2/R3 did do real work.)

The three consequences

  1. The work item looks like it has a round-1 branch worth continuing. Since WI-368 every re-dispatch clones the WI branch and rebases it onto base, so the junk is carried forward forever instead of being started fresh.
  2. It became undispatchable. main later fixed the same file properly — with the two fields in the opposite order — so the redundant copy now conflicts. Measured on 2026-07-28 against current main: W1, W2, W4 and R2 fail the rebase; R1, R3, R4, W3 collapse cleanly. A wave whose only "work" was redundant repair is now blocked by that repair.
  3. The PR reads as progress. Eight open PRs, four of which contain nothing but a compile fix that is already on main.

Ask

The runner must not turn a diff into the work item's round-1 branch when the turn did not do the work item's work.

  1. Gate on the turn outcome. A turn that ends on the idle watchdog / a non-success stop_reason must not be committed, pushed or PR'd. (Same family as Anima PR #362 item 3, still unmerged.)
  2. Treat base-repo build repair as its own signal. When the captured diff only makes the base build again (it applies cleanly to base and touches no file the WI names), that is "the base is broken", not this WI's deliverable: post it to the thread, or open its own work item — do not commit it under the WI's title.
  3. Cheap backstop: an empty-or-unrelated round produces no branch and no PR at all, so the next dispatch starts from base rather than inheriting a poisoned branch.

Evidence

  • akh-medu branches claude/wi-019f85d6-wave-* / claude/wi-019f85d7-wave-*, commits 724b303, b066fd7, 4645f95, 70e25c6; PRs akh-medu #245–#252.
  • main's own fix of the same file: cdd79c0 (2026-07-24) — plus 8 hand-applied copies of a CI fix on the branches the same evening, which is what surfaced the conflict.
  • Downstream amplifier: WI 019fa7c6-93f4-7d12-b1b0-9880fc80fde8 (rejected assignments re-dispatch every 10s).
Anima work item `019fa7c6-ec4b-73e1-8b43-dc4deeca8373`. ## What happened On 2026-07-24 the eight akh-medu bring-up waves (WI-230…WI-237) were dispatched. **Four of them produced no work toward their work item at all** — and every one of them still ended with a commit, a pushed branch and an open PR (akh-medu #245–#252). The four commits are byte-identical in intent: 12 insertions in `src/bin/generate_qa_dataset.rs` adding `ennead_role: None, ocean: None` at each `AgentDef` site. That is a **compile repair for someone else's merged struct change** — the QA-dataset generator had gone stale against a struct that had gained two fields. Each session hit a base repo that would not build, repaired it to get a green build, ran out of turn, and the runner committed the repair under the work item's own title: ``` commit 4645f95 Author: Anima Runner Wave W1 — Ritual & genesis: pantheon packs, distill+choose ritual, … Anima implementation session. src/bin/generate_qa_dataset.rs | 12 ++++++++++++ ``` (R1 `724b303`, R4 `b066fd7`, W1 `4645f95`, W2 `70e25c6` — all the same 12 lines. R2/R3 did do real work.) ## The three consequences 1. **The work item looks like it has a round-1 branch worth continuing.** Since WI-368 every re-dispatch clones the WI branch and rebases it onto base, so the junk is carried forward forever instead of being started fresh. 2. **It became undispatchable.** main later fixed the same file properly — with the two fields in the *opposite order* — so the redundant copy now conflicts. Measured on 2026-07-28 against current main: W1, W2, W4 and R2 fail the rebase; R1, R3, R4, W3 collapse cleanly. A wave whose only "work" was redundant repair is now blocked *by* that repair. 3. **The PR reads as progress.** Eight open PRs, four of which contain nothing but a compile fix that is already on main. ## Ask The runner must not turn a diff into the work item's round-1 branch when the turn did not do the work item's work. 1. **Gate on the turn outcome.** A turn that ends on the idle watchdog / a non-success `stop_reason` must not be committed, pushed or PR'd. (Same family as Anima PR #362 item 3, still unmerged.) 2. **Treat base-repo build repair as its own signal.** When the captured diff only makes the base build again (it applies cleanly to base and touches no file the WI names), that is "the base is broken", not this WI's deliverable: post it to the thread, or open its own work item — do not commit it under the WI's title. 3. **Cheap backstop:** an empty-or-unrelated round produces no branch and no PR at all, so the next dispatch starts from base rather than inheriting a poisoned branch. ## Evidence - akh-medu branches `claude/wi-019f85d6-wave-*` / `claude/wi-019f85d7-wave-*`, commits `724b303`, `b066fd7`, `4645f95`, `70e25c6`; PRs akh-medu #245–#252. - main's own fix of the same file: `cdd79c0` (2026-07-24) — plus 8 hand-applied copies of a CI fix on the branches the same evening, which is what surfaced the conflict. - Downstream amplifier: WI 019fa7c6-93f4-7d12-b1b0-9880fc80fde8 (rejected assignments re-dispatch every 10s).
A turn that only repairs the base repo's build was being committed,
pushed and PR'd as the work item's own round-1 work. On the akh-medu
bring-up waves, four sessions that produced no WI work at all still
each ended with a commit, a pushed branch and an open PR — a 12-line
compile fix for a stale struct, committed under the WI title. Because
every re-dispatch clones the WI branch and rebases onto base, that
junk is carried forward forever; and once main fixed the same file
itself, the redundant copy conflicted, making the waves undispatchable.

Two gates in the runner's open_or_update_pr, both short-circuiting to
no-branch/no-PR:

1. Turn-outcome gate. Only a turn that ended on end_turn is frozen
   onto the WI branch. max_tokens / max_turn_requests / refusal /
   cancelled / error left the worktree in a partial state — committing
   it poisons the branch (and on a continuation discards good prior
   rounds once main moves). Same family as Anima PR #362 item 3.

2. Content gate (scaffold-only). Parity with the server-side
   SetAgentDiff path the M3/VCS flow bypassed: a staged diff that is
   empty or only .anima/ paths is not this WI's deliverable. The staged
   diff is captured before committing (capture_diff + new commit_staged,
   which does not re-stage, so an agent still editing can't sneak a
   change past the gate).

Either gate failing yields no branch and no PR, so the next dispatch
starts from base rather than inheriting a poisoned round-1 branch — the
cheap backstop.

Anima implementation session.
toasterson changed title from WIP: A turn that only repairs the base repo's build is committed, pushed and PR'd as the work item's round-1 work to A turn that only repairs the base repo's build is committed, pushed and PR'd as the work item's round-1 work 2026-07-28 10:32:39 +00:00
toasterson force-pushed claude/wi-019fa7c6-a-turn-that-only-repairs-the-base-repo-s from 00c9a50042 to 9ebe43755a 2026-07-28 12:01:19 +00:00 Compare
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
toasterson/Anima!396
No description provided.