fix: prevent duplicate A2A replies after message delivery#111012
Conversation
|
ClawSweeper status: review started. I am starting a fresh review of this pull request: fix: prevent duplicate A2A replies after message delivery This is item 1/1 in the current shard. Shard 0/1. This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking. Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted. |
|
Codex review: needs maintainer review before merge. Reviewed July 18, 2026, 7:27 PM ET / 23:27 UTC. Summary PR surface: Source +5, Tests +30. Total +35 across 3 files. Reproducibility: yes. The linked issue gives a focused current-main reproduction using Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Keep one canonical delivery-evidence classifier, retain both focused classifier and terminal-recovery coverage, and merge only after the responsible reviewer confirms that nested provider Do we have a high-confidence way to reproduce the issue? Yes. The linked issue gives a focused current-main reproduction using Is this the best way to solve the issue? Yes, based on the supplied diff and QA evidence. Extending the existing delivery-evidence classifier is narrower and less error-prone than changing empty-response recovery or introducing a parallel gateway-specific path. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 0483001ef65c. Label changesLabel justifications:
Evidence reviewedPR surface: Source +5, Tests +30. Total +35 across 3 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
239488d to
b981c31
Compare
b981c31 to
5d47341
Compare
|
Merged via squash.
|
Closes #110996
What Problem This Solves
Fixes an issue where an agent-to-agent reply delivered through the message tool could appear twice when a gateway plugin returned its provider message ID inside a nested
messageobject. The first send succeeded, but empty-response recovery treated it as invisible and asked the agent to send again.Why This Change Was Made
Recognize a non-empty nested provider
message.idas the same delivery evidence as existing top-level message, poll, and receipt IDs. Existing dry-run, suppressed, no-op, and error guards still run before the result can complete a message-tool-only source reply.User Impact
Agent-to-agent visible replies through gateway-backed channel plugins are delivered once instead of being repeated by empty-response recovery.
Evidence
a2a-message-tool-mirror-dedupeshowed onesessions_send, two successfulmessagesends, and two requester-visible markers.a2a-message-tool-mirror-dedupepassed through a real QA Gateway child, qa-channel bus, and mock OpenAI provider with the eight-second duplicate window: https://github.com/openclaw/openclaw/actions/runs/29663908097