Skip to content

perf(agents): run the sized effort replay sweep for the pinned agents #10253

Closed

Description

@kyle-sexton

Parent: #5682 (slice 2 of 3). Blocked by #10214 (slice 1).
Runs in: HOST. Same capability as slice 1 (agent replays with model runs); the host runner works it.

Problem

#5682's first done-when: "A replay sweep of merged PRs at medium and at high effort for each pinned agent is posted here with per-agent results." The scope sizes the sweep only after the pilot (slice 1). The effort pins under test are recorded in #5767.

Fix

Run the sweep at the size slice 1 proposed: each pinned agent from #5767 at medium and high over the chosen merged PRs, plus the implementer Sonnet 5.5 vs Opus 5.5 arm, graded as in slice 1. Show each run's cost estimate first. Change no pin here.

Done when


Split by the backlog HITL session (2026-10-25, owner rule Q93: split large work before a run picks it up). This was generated by AI.

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 26, 2026
  2. github-actions commented on Oct 26, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: read-only
    Basis: automated intake triage; the lanes App applied this class.

    Size: Medium
    Complexity: Medium
    Uncertainty: Knowable
    Flags: none
    Blocked by: #10214

    Understood: this is slice 2 of #5682. It runs the effort replay sweep for each agent pinned in #5767, at medium and high effort, plus the implementer Sonnet 5.5 vs Opus 5.5 arm. It posts per-agent results and a keep-or-change recommendation on #5682, and changes no pin. The sweep size depends on what the pilot in #10214 proposes, so it can't start until that pilot is done. No likely duplicates found.

    Automated triage, applied by the lanes App.

  3. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 26, 2026
  4. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: read-onlyAudits, research, reports. No repository mutation; tracker and queue writes only.
    on Oct 26, 2026
  5. melodic-automation-lanes commented on Oct 26, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane yet: blocker #10214 is not closed by a listed human or a merge.

  6. github-actions commented on Oct 30, 2026

    @github-actions
    Contributor
    No description provided.
  7. github-actions commented on Oct 30, 2026

    @github-actions
    Contributor
    No description provided.
  8. added
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 30, 2026
  9. melodic-automation-lanes commented on Oct 30, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue lane stopped on this issue (host-only): the run reports the work needs a host run the lane cannot make.
    It added host-run and removed agent-ready: an agent run on a host builds it, and it waits on no decision from a person.

    In the run's words:

    host-only: the issue body says 'Runs in: HOST' and the work is an agent replay sweep that makes model runs (each pinned agent from #5767 at medium and high effort, plus the implementer Sonnet 5.5 vs Opus 5.5 arm), with each run's cost estimate shown before it starts. This lane cannot launch agent replays or model runs, and cannot post the results comment on #5682. The issue is also blocked by slice 1 (#10214), whose pilot sets the sweep size and grading.

    What the run says it did not do:

    • The replay sweep, per-agent results comment on #5682, and pin recommendations were not done: they need host model runs this lane cannot make
    • Did not confirm from this lane whether blocker #10214 (slice 1) has landed; no tracker access here
    • tidy, review, verify and checks pipeline steps skipped: no change was made

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41131122652

    To hand it back to the lane, remove host-run and add agent-ready again.

  10. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor

    Claimed by host lane 4 (melo-lap-001 WSL), 2026-11-01T04:15Z: running the slice-2 sweep at the size the slice-1 pilot proposed on #5682 (5 PRs, about 80 runs). Cost estimates are written before each run.

  11. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor

    Host run. I ran slice 2 of #10253: the effort replay sweep at the size the slice-1 pilot proposed. It covers 5 PRs, 12 implementer arms and 68 phase-verifier runs. The verifier runs cover each reference diff and each arm diff, at medium and high effort, twice each. All 80 runs finished and returned a result. None needed a retry.

    Replayed PRs

    I selected them with the pilot's rule: the newest merged PRs whose squash-commit record shows a dispatch run plus a phase-verifier verdict, that do not edit the implementation plugin, and whose deterministic tests pass on Linux at the reference commit. Each reference passed its own tests on this host before any arm ran.

    PR Base (squash parent) Reference Replayed scope Brief source Reference tests here
    #8786 f2aa201de 933f0b279 whole PR reconstructed from Fix and Verification; this repeats the pilot node 113/113, drift 123/0
    #7039 71485ed4e 7b4c40b87 plan Phase 4 (the dispatched worker phase) the PLAN.md embedded in the PR body detect 57/0, defaults 3/0, routing 16/0
    #6984 b00604400 ec8c7029b plan Phases 2 and 3 the PLAN.md embedded in the PR body yaml-subset 30/0, config-cascade 40/0, three user-experience suites pass
    #6427 d02954e5a 2c706e65e whole PR original implementer brief and verifier prompt from the session transcript, minimally edited 286 cases, 0 failures
    #6303 eaf6c024f 107b19c0e whole PR reconstructed from Summary and Fix 23 guardrails suites pass

    Setup

    • Version and login: Claude Code 2.1.316, claude -p, subscription login. apiKeySource is none in every run's init event.
    • Agents: the implementer and phase-verifier bodies from current origin/main, passed through --agents, with --model and --effort on the command line. The implementer's Agent tool is removed.
    • Arm command: claude -p <brief> --agents agents.json --agent replay-implementer|replay-verifier --model opus|sonnet --effort medium|high --permission-mode auto --disallowedTools "Bash(git push:*)" "Bash(git commit:*)" "Bash(git add:*)" "Bash(gh:*)" Agent [Edit Write for the verifier] --output-format stream-json --verbose. Each runs under timeout 2700 in its own systemd-run --user --scope unit.
    • Isolation:
      • Every run got a fresh standalone clone at the base, with its origin remote removed. A push therefore has no destination, including through the git -C form that the deny list does not match.
      • GH_CONFIG_DIR pointed at an empty directory, and GH_TOKEN and GITHUB_TOKEN were unset.
      • After every run, HEAD still equalled the base. No arm committed.
      • Nothing was committed or pushed by me either. That is a change from the pilot, which made local commits.
    • Blinding: each verifier run got its own clone with the diff applied as uncommitted changes. Its directory name is a random token. The prompt was identical for the reference and for every arm diff of a PR.
    • Project settings: each copy is an untrusted workspace, so Claude Code ignored the 15 project permissions.allow entries. Arms ran on auto mode alone. No arm reported a denial that stopped it.
    • Grading:
      • Own tests: the PR's test commands run on the arm's diff.
      • Holdout: the arm's diff plus the reference's test and fixture files checked out over it, then the same commands. Each reference passes its own holdout.
      • Phase verifier: Opus at medium and at high, two runs each, on the reference diff and on every arm diff.
      • Not run: check-affected and CI, because nothing was committed.
    • Opus high arms: they went to the two smallest PRs by reference diff size (fix(wizard): confirm before writing ENV_FILE into git metadata #6427 and fix(ci): reopen a monitor's closed issue for its key instead of filing a recurrence #8786). I set that rule before any arm ran.
    • Concurrency:
      • Batch 1 ran 3 arms at once.
      • At 05:53Z the kernel OOM-killed a process at the shared 8G claude.slice cap, in the orchestrating session's own scope (run-p2579220-i51288554.scope, pid 16615). No arm died in it. Each arm peaked at about 0.9 to 1.3G, so the arms added to the pressure.
      • From then on, runs went 2 at a time. Wall times include contention.

    Cost estimates, written before each batch

    Basis: judgment, scaled from the pilot's per-arm actuals. Token figures are input, output, cache read and cache creation summed from each run's cumulative modelUsage for its own model. Nearly all of it is cache reads.

    Batch Estimate before launch Actual
    1: 12 implementer arms 41-92M tokens. Opus medium 4-14M at 35-90 turns per arm; Sonnet medium 0.7-5M at 15-50 turns; Opus high 2-9M at 20-60 turns 66.6M. Two arms were over their range: #6303 Opus medium (20.9M) and #6303 Sonnet medium (15.1M)
    2: 20 verifier runs on references 9-35M, 10-30 turns per run 16.8M
    3: 48 verifier runs on arm diffs 30-55M, 3-40 turns per run 32.9M
    Total pilot proposal: about 105M 116.3M

    Results per implementer arm

    Verifier (4 runs) lists the medium, medium, high, high verdicts, with the failed criteria in brackets.

    Rework counts what a fix round would have to address at first return:

    • verifier criteria that failed in at least 3 of the 4 runs, plus
    • failing holdout tests.
    PR Arm Own tests Holdout failures Verifier (4 runs) Tokens Time (min) Turns Rework
    #8786 Opus medium pass 14 node / 15 drift PASS, FAIL(C4), FAIL(C4), PASS 4.58M 11.0 30 29 tests; 0 verifier (C4 split 2/2)
    #8786 Opus high pass 14 / 15 PASS ×4 5.60M 9.0 35 29 tests; 0 verifier
    #8786 Sonnet medium pass 14 / 15 FAIL(C6), FAIL(C4,C6), FAIL(C4,C6), FAIL(C4,C6) 2.79M 4.0 24 29 tests; 2 verifier
    #7039 Opus medium pass detect 13, defaults 1, routing suite fails to load FAIL(C7) ×3, FAIL(C6,C7) 5.94M 10.9 45 15 tests; 1 verifier
    #7039 Sonnet medium pass detect 17, defaults 1, routing fails to load PASS ×4 2.66M 5.3 44 19 tests; 0 verifier
    #6984 Opus medium pass yaml-subset 2, config-cascade 30 of 32 PASS ×4 3.28M 8.9 44 32 tests; 0 verifier
    #6984 Sonnet medium pass yaml-subset 2, config-cascade fails to load FAIL(C7) ×4 1.05M 1.7 11 3+ tests; 1 verifier
    #6427 Opus medium pass 6 PASS ×4 1.21M 1.8 17 6 tests; 0 verifier
    #6427 Opus high pass 6 PASS ×4 2.49M 3.8 25 6 tests; 0 verifier
    #6427 Sonnet medium pass 6 PASS ×4 0.90M 1.3 15 6 tests; 0 verifier
    #6303 Opus medium pass 358 across 14 suites PASS ×4 20.93M 23.8 113 358 tests; 0 verifier
    #6303 Sonnet medium pass 359 across 14 suites PASS, FAIL(C8), PASS, FAIL(C5) 15.12M 18.9 81 359 tests; 0 verifier (split 2/2)

    Verifier runs on the reference diffs:

    PR Verifier (medium, medium, high, high) Tokens (4 runs)
    #8786 FAIL(C4) ×4 1.79M
    #7039 PASS, PASS, FAIL(C1), PASS 2.06M
    #6984 FAIL(C1,C2) ×4 1.62M
    #6427 PASS ×4 0.77M
    #6303 FAIL(C4,C8), FAIL(C8), FAIL(C4,C8), FAIL(C4,C8) 10.55M

    What the holdout columns measure:

    Verifier agreement

    The 17 diffs are 5 references and 12 arms.

    Measure Medium High
    Repeat runs agree on PASS or FAIL 15/17 14/17
    Repeat runs agree on PASS or FAIL and on the failed criteria 13/17 13/17
    Mean turns per run 10.8 15.4
    Mean wall time per run 1.4 min 2.9 min
    Tokens, all 34 runs 18.0M 31.7M

    Findings

    1. Implementer, Opus medium vs Opus high (2 PRs):
    2. Implementer, Sonnet medium vs Opus medium (5 PRs):
    3. Verifier effort:
      • High did not change the verdict pattern. On 16 of 17 diffs, the medium pair and the high pair give the same set of verdicts.
      • Repeat disagreement occurred at both efforts: 2 of 17 diffs at medium, 3 of 17 at high.
      • One exception: where a defect needs a cross-file trace, both runs that caught it were split across efforts. That is the observedAt default in fix(ci): reopen a monitor's closed issue for its key instead of filing a recurrence #8786 Opus medium, caught by one high run and one medium run. The other two runs passed it.
    4. Candidate defect in merged fix(ci): reopen a monitor's closed issue for its key instead of filing a recurrence #8786 (UNVERIFIED as a bug, repeated): all 4 reference verifier runs FAILed C4 because the merged audit-lane planFiling has no closed-unchanged skip. It is the same finding as the pilot's finding 4. I filed nothing, as the scope of this row is the sweep record.
    5. Brief and criteria defects that produced FAILs (my reconstructions, not the code):
    6. Environment artifact (INVALID evidence):
    7. Original brief versus reconstructed:
      • With the original brief (fix(wizard): confirm before writing ENV_FILE into git metadata #6427), all three arms passed every verifier run, and each holdout failure traces to one gap the brief did not state.
      • On the reconstructed PRs, verifier FAILs on criterion wording and fence gaps (finding 5) were as common as FAILs on missing behaviour.
      • This supports the pilot's finding 5: reconstruction is the largest source of noise.

    Recommendation for keep or change

    This sweep supports no pin change:

    • Opus high over medium for the implementer: 1 of 2 PRs favoured high, the pilot's single PR favoured neither, and high cost 22% to 106% more.
    • Sonnet over Opus for the implementer: mixed results at 63% of the tokens.
    • Verifier high over medium: the same verdict pattern on 16 of 17 diffs at about 1.8 times the tokens.

    A sharper test needs PRs whose original brief and criteria survive. Only 1 of these 5 had them.

    Criteria status

    • Per-PR, per-arm results: done.
      • CI and check-affected were not run, because nothing was committed.
      • Holdout and own tests were run for every arm.
    • Verifier medium and high, each run twice, on the reference and every arm diff: done (68 runs).
    • Cost estimates written before each batch, with actuals: done.
    • Run artifacts on the host: /home/kyle/worktrees/host-run-10253/ holds notes.md, logs/ (stream-json per run), grades/, patches/, vkey.txt (the blinding key) and specs/ (briefs and criteria).
    • No Haiku arm was run (#6901 owns that).
  12. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor

    Owner decision (2026-11-01, in the lane 4 session): option (a). The 18 effort pins this sweep did not exercise keep their current values, recorded as "keep, no data". They are the discovery, review, planning, user-experience, performance and songwriting agents listed in 5682#issuecomment-6556136118. No slice 3 is filed. Their agents do not run in dispatch replays, and a replay design for each one would be new work.

    Done-when status:

    Closing as complete. No pin changes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.work-class: read-onlyAudits, research, reports. No repository mutation; tracker and queue writes only.

    Type

    Fields

    No fields configured for Task.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions