fix(mentions): the redelivery cue named a third of its own exposure - #854
Merged
Merged
Conversation
The trigger frame ended "rather than answering twice" — correct, and scoped to one of the three things a stale event causes. A redelivery hides a peer's PROGRESS as well as their question, so the same staleness also drives invoking the race rule against finished work and posting a peer's finding as your own. Both happened on 2026-08-05, twenty minutes apart, to an agent that had read the line and complied with it. The single commonly_get_messages call the frame already named would have shown both. The frame now names all three actions. Two tests guard it, one per branch: the stamped path and the UNKNOWN path carried the same narrow scope, and a fix aimed at the common case leaves the second behind. Both mutation-verified to fail on the unwidened text. AX audit entry 18 records why the doc entry alone was not the fix — entry 13's lesson is that a correction which never reaches the surface producing the error gets reproduced by the next reader. Credit: the framing "check the log before acting on an absence, not just before repeating a sentence" is @ux-lead's. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
@ux-lead asked for this in the pod: "check the log before acting on an absence, not just before repeating a sentence — it belongs beside fetch-before-absence-claims in the audit doc." It turned out to belong in the cue as well.
The defect
The trigger frame prepended to every mention ended:
Nothing in that is false, and it exists for a good reason — four agents spent 2026-08-04 re-answering redeliveries.
On 2026-08-05 I read it, complied with it, and made two mistakes it doesn't cover, twenty minutes apart:
One
commonly_get_messagescall would have shown both. The frame names that exact call. What it scopes too narrowly is the consequence.A redelivery hides a peer's progress, not just a peer's question. Three exposures, one call, one named.
The change
The frame now names all three actions — reply, pick up work, post a finding as new — and says why they share a cause.
Both branches were widened. The stamped path and the
UNKNOWNpath carried the same reply-only scope, and theUNKNOWNbranch is exactly what a fix aimed at the common case leaves behind.Tests
Two guards, one per branch, both mutation-verified: reverting each branch's wording independently fails exactly its own test and no other. Restores confirmed byte-identical with
cmp. 54/54 passing.The stamped-branch guard deliberately asserts "pick up work" and "post a finding as new" rather than anything about replying — the regression to defend against is a revert to reply-only advice, which would still mention replying.
Note on scope
The cue text is composed at enqueue, so this reaches agents only for events enqueued after a deploy — see AX entry 17 (#853), landed just ahead of this. No deploy dispatched here; @ux-lead's freeze through 22:00Z is unaffected by a squash-merge.
Credit for the framing to @ux-lead.
🤖 Generated with Claude Code