Skip to content

test(evals): 2026-08-08 arena re-run — mention-gated kickoff option, delegate-and-forward repinned to the shipped contract, baseline refreshed - #790

Open
Poytr1 wants to merge 3 commits into
mainfrom
test/arena-rerun-2026-08-08
Open

test(evals): 2026-08-08 arena re-run — mention-gated kickoff option, delegate-and-forward repinned to the shipped contract, baseline refreshed#790
Poytr1 wants to merge 3 commits into
mainfrom
test/arena-rerun-2026-08-08

Conversation

@Poytr1

@Poytr1 Poytr1 commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Wrap-up of the 2026-08-08 Collaboration Arena re-run on current main: test/docs housekeeping only — no product code changes.

What's in here

  1. Mention-gated production kickoff for the counting games (evals/games/): an opt-in bindMatch: 'mention' for the peer/quota counting games — the production shared-channel convention the routing-acceptance fixture always used — with the kickoff entering as an ordinary human platform message that @mentions every participant. Default auto unchanged; all existing contract tests unaffected.

  2. PR test(evals): encode the delegate-and-forward async-contract case in the arena #737's delegate-and-forward case, rebased onto current main and repinned to today's truth (cherry-picked with original authorship; supersedes test(evals): encode the delegate-and-forward async-contract case in the arena #737 — recommend closing it):

    • The parent-side half of the needsReply async contract shipped on main since test(evals): encode the delegate-and-forward async-contract case in the arena #737 was written: the wake result carries reply / nextAction: 'finish-turn-and-wait' / contract prose, viewSessionStatus is described as diagnostic-only and no longer advises "waiting", and SessionStatusResult.reply.state distinguishes "the child's turn ended" from "the child reported back". The former it.fails pins for all of that are now green guard tests (5 of them) so none of it can regress. No change to the shipped wake result — it is pinned exactly as shipped.
    • The stale characterization of the old bare {ok, wake, childSessionId} result is updated to pin the shipped surface (exact key set + same-turn poll truthfulness).
    • One pin was retired as superseded: "the descriptor must say when checking a child IS appropriate" — the shipped diagnostic-only + nextAction framing answers that question differently, and demanding the old phrasing no longer describes a deficiency.
    • One pin stays red (it.fails): a headless child that answers in prose instead of sendMessage {sessionId} still has its answer silently dropped. Verified still-red against main, and the 2026-08-08 real-model trial reproduced it (1/1): parent behaved perfectly under the new contract (0 polls, no premature claim) and the reply was still lost on the child side.
    • The real-model half (delegate-and-forward-real.test.ts, env-gated, not in CI) is unchanged.
  3. Baseline doc updated (docs/designs/collaboration-arena-baseline.md):

    • New §5.6: the full 2026-08-08 re-run, one real-model trial per case (2×20 counting 20/20 completed; 4×8 counting 8/8 with entropy 0.95 and no silent agent; quota 2×10 completed-clean; quota 4×20 at 19/20 now classified as the variant's true rule-level deadlock; Werewolf 7p completed to a winner in 4 rounds with 0 leaks, plus two soft model-behavior regressions stated plainly — 1 out-of-order speech, low vote participation — and the first observed in-game loop-guard latch, on a dead player's circuit; cross-room boundary unchanged).
    • §6.1 corrected: the "chain stops at 16 edges on the automatic-turn budget" result is a scripted-speed artifact — at real speed the 60 s window rolls over and the hop cap is the operative bound (measured: 19 of 20 hops used, 0 gated wakes). The doc previously inferred the opposite for real runs; that inference is retracted with the measurement.
    • §4.1 recipe fixed: npx-launched user runtimes are now filtered as not-installed (PACKAGE_LAUNCHERS), and the runtime id must be claude-acp to match the verified memory off-switch policy — install the adapter and launch it via node. A working template shape is included.
    • §3.5 / §5.4 / §7 refreshed to match (gate totals, measured-vs-inferred rows, provenance notes).

Verification

  • pnpm typecheck — clean (after pnpm build)
  • pnpm lint — clean
  • pnpm eval:collab:contracts — 16 files, 120 passed + 1 expected-fail (121)
  • pnpm eval:contracts46/46
  • pnpm --filter @agentconnect.md/daemon test — 2880 passed; 2 failures are pre-existing and unrelated (acp-matrix live-runtime matrix needs local real runtimes; daemon-agent-mention-routing hop-cap case is a load-sensitive 5 s timeout) — git diff origin/main -- packages/ is empty, so no daemon source changed here.

🤖 Generated with Claude Code

Poytr1 and others added 3 commits August 8, 2026 22:30
…he arena

A user asked agent A to "send hello to agent b and forward reply". A woke B with
`needsReply`, polled the returned child in the same turn, read `in-progress`, and
then told the user "Agent B completed its turn but returned no message to
forward" — a completion claim its own last observation contradicted.

`needsReply` is a two-sided contract with only one side stated: the CHILD gets a
standing report-back directive, the PARENT gets `{ok, wake, childSessionId}` and
no statement that the call is asynchronous. `viewSessionStatus` then advises
"prefer waiting for the child's reply", which no turn can do.

Two layers:

- `evals/test/delegate-and-forward.test.ts`, credential-free and added to
  `pnpm eval:collab:contracts`. Two green characterization pins record the surface
  as it is (the wake result's exact key set; a same-turn poll returning
  in-progress against a provably mid-turn child, via an explicit rendezvous). Five
  `it.fails(…)` pin the affordances that must change, each naming the file: the
  async contract in the wake result, the impossible "prefer waiting" advice, the
  missing "when polling IS appropriate", `done` conflating "turn ended" with
  "reported back", and a headless child's answer being dropped silently.
- `evals/test/delegate-and-forward-real.test.ts`, real ACP runtime, NOT in the
  gate, reported as a rate over trials with transcripts under `.artifacts/`.

Measured over 5 trials of real local Claude Code (sonnet): the parent-side failure
did NOT reproduce — 0 status polls, 0 premature claims, A ended its turn saying it
would forward. A different failure did, 2 of 5: a postless child session is
headless, so a child that answers in prose instead of calling
`sendMessage {sessionId}` has its answer discarded with no signal, and the parent
waits forever. From the parent's seat that is literally "returned no message to
forward".

`RoutingFixture` gains real-subject support (no hostFactory, template preflight,
per-seat description override), per-turn tool-call traces attributed by the
daemon's own turnId, and the daemon's peer-wake delivery records.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ntract; record the 2026-08-08 arena re-run

The parent-side half of the needsReply async contract shipped on main:
the wake result carries reply/nextAction/message, viewSessionStatus is
diagnostic-only, and SessionStatusResult.reply.state separates "turn
ended" from "reported back". The former red pins are now green guard
tests so none of it can regress; the one genuinely open pin — a headless
child's prose answer silently dropped — stays expected-fail, and the
2026-08-08 real-model trial reproduced it (1/1).

The baseline doc gains §5.6 (full real-model re-run, one trial per case,
mention-gated production kickoff for the counting games), corrects §6.1
(the 16-edge automatic-turn bound is a scripted-speed artifact; a real
2-agent chain is bound by the hop cap — measured 20/20 with 19 hops
used, 0 gated), and fixes the real-subject recipe (npx-launched user
runtimes are filtered as not-installed; the runtime id must be
claude-acp for the verified memory off-switch; launch the adapter via
node).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant