revert(daemon): drop the #801 tool-precedence bullet after a live in-thread regression - #861
Conversation
There was a problem hiding this comment.
Approved at head f985b0410397ec1271a0ac589fcda727d47c2254. No blocking findings.
The revert is internally consistent: it removes only the over-broad “ONLY channel” precedence guidance and the test that pinned that wording. The resulting collaboration prompt still explicitly instructs agents to use an ordinary reply for the current conversation and states that visible sendMessage calls land at a channel root, matching docs/product-conventions.md. Both touched files are byte-identical to their versions at the parent of #801 (1dccbc26ce432807d2555b531762a2485cf4f0bb), and git diff --check passes.
The known #800 built-in SendMessage collision returns with this revert, but that is an explicit, tracked tradeoff and is non-blocking for this regression fix.
Verification gap: the focused daemon test and daemon typecheck could not run because dependencies are absent and Corepack could not reach registry.npmjs.org (EAI_AGAIN), including after retrying with an isolated cache.
sent by review-bot (Codex · gpt-5.6-sol) · open in session
…thread regression This reverts commit 29feb9b (#801, the prompt-side mitigation for #800). The bullet said AgentConnect MCP tools are the ONLY channel that reaches agents and humans; that over-generalized and taught models that ordinary in-thread replies reach nobody, so a live turn-taking thread degraded into sendMessage hand-offs with meta-narration and a broken count. The standing collaboration guidance returns to its pre-#801 form byte-for-byte; #800 is reopened for scoped follow-ups. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
f985b04 to
44067ce
Compare
There was a problem hiding this comment.
Approved at synchronized head 44067ce926bfb5c099d78331dfdbc7b33d64e37e. No blocking findings.
The head’s source tree is identical to the previously inspected revision, and the merge-base patch remains limited to removing the over-broad “ONLY channel” precedence guidance plus the test that pinned it (33 deletions across two files). The resulting prompt still explicitly instructs agents to use an ordinary reply in the current conversation and states that visible sendMessage calls land at a channel root, matching docs/product-conventions.md.
The target branch advanced to 3d96c5fa6e040022b0dd3af83d0b74fb8a3327ab; git merge-tree confirms this patch merges cleanly with that base, with no intervening changes to either touched file. git diff --check also passes.
The known #800 built-in SendMessage collision returns as an explicit, tracked, non-blocking tradeoff.
Verification gap: focused daemon tests and typecheck were not rerun because dependencies are absent and the pinned package manager could not be downloaded from registry.npmjs.org (EAI_AGAIN).
sent by review-bot (Codex · gpt-5.6-sol) · open in session
…ion gate The A/B matrix's four scenarios each demand one explicit send, so the #801 tool-precedence bullet could score 10/10 on parent-session while breaking ordinary thread play (the live counting-game regression that #861 reverted; issue #800 records the lesson). Scenario 5 is the missing coverage: one plaza thread, BOTH agents on the arm's surface, a human kickoff @-mentioning both, and the count carried by ordinary replies through the platform echo and the #549 continuation ladder. - `THREAD_COUNT_SCENARIO` + `judgeThreadCount` (daemon-judged): hard pass = count reaches 6 via delivered thread replies, ZERO messaging-tool calls by either participant (product surface, other arm's tool, or the runtime built-in — delivered or refused), no rejected participant reply. Soft (reported, never failed on): duplicates, skips, overshoot, meta-narration beyond the bare number, reply length, turns per number. - Wired into the real-run matrix at index 4: same counterbalancing, seed derivation, validity rules (failed/timed-out turn => invalid), artifact layout, and summary; rides the existing scenario/arm env filters. - Contract tests (eval:collab:contracts): the #801 handoff trace scores FAIL, a clean reply-only trace scores PASS, built-in SendMessage and arm-B `post` variants fail identically, soft-metric traces pass while measured; plus a scripted end-to-end fixture test proving a both-mentioned kickoff plus ordinary replies really carries the count peer-to-peer on a real daemon. - Arm-B guidance parity: drop the #800 precedence bullet from POST_COLLAB_GUIDANCE, mirroring the production revert (#861) — both arms are back at the 24-run revision's text (2,718 / 2,394 chars, measured). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nge gate messaging-primitives-ab.md: §8 documents the in-thread turn-taking scenario (the #801 incident, shape, daemon judge, and the 2026-08-11 post-revert baseline — 6/6 clean passes across both arms, zero messaging-tool calls, zero meta-narration) plus the standing rule; §2/§4 updated for the scenario list and the parity revert (guidance back to the 24-run revision, re-measured at 2,718/2,394 chars). collaboration-arena-baseline.md: §4.2 states the prompt-change gate — any change to the standing collaboration guidance or parent-report append must be validated against BOTH the parent-session scenario AND the in-thread scenario before landing, citing #801/#861 as the incident that created the rule. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Reverts #801 (commit 29feb9b) on the user's direct order, after a live in-thread regression traced to the tool-precedence bullet it added to the standing collaboration guidance.
The live regression
In a real Slack channel, a turn-taking counting game was started in a thread ("@test @test2 你们轮流报数, 报到30 停" — take turns counting to 30). The
testagent (Claude Agent runtime) stopped playing through ordinary thread replies and instead routed every turn throughsendMessage, "handing off" each next number to its peer and posting only meta-narration into the thread, e.g.:The visible count skipped and duplicated numbers (1 → 4 → 6 → "8****8") instead of a clean 1..30 alternation.
Mechanism
The bullet said AgentConnect's MCP tools are the ONLY channel that reaches other agents and humans. That over-generalizes: the product convention is that current-thread communication is the ordinary reply —
sendMessagedeliberately has no in-thread form. The bullet taught the model that plain replies reach nobody, so it routed in-thread turns throughsendMessagetoo.The A/B measurements that validated #801 only exercised the parent-session report-back scenario, never an in-thread conversation — which is exactly how this escaped.
What this restores / costs
packages/daemon/src/session/session-manager.tsis byte-identical to its pre-fix(daemon): lead the collaboration guidance with a tool-precedence rule (#800) #801 form (verified against the parent of 29feb9b).session-manager.test.ts).SendMessageswallowing parent reports; measured 10/10 delivery with the bullet vs 4/6 without) returns. Follow-ups are tracked on Claude Code's built-in SendMessage tool collides with the AgentConnect messaging tool and silently swallows parent reports #800: a scoped rewrite of the bullet validated against both scenarios, and the mechanism-level fixes with no prompt blast radius.🤖 Generated with Claude Code