Skip to content

fix: A2A handoffs can duplicate message-tool replies#97259

Merged
steipete merged 5 commits into
openclaw:mainfrom
cavit99:fix/a2a-pingpong-visible-reply
Jul 10, 2026
Merged

fix: A2A handoffs can duplicate message-tool replies#97259
steipete merged 5 commits into
openclaw:mainfrom
cavit99:fix/a2a-pingpong-visible-reply

Conversation

@cavit99

@cavit99 cavit99 commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Related: #39476
Related: #91161
Related: #93293

What Problem This Solves

Fixes duplicate visible output from an A2A handoff when the target session replies through message(action="send") and the waited A2A path later mistakes the resulting assistant-shaped transcript mirror for a new reply.

This was triggered by a real duplicate delivery in a local WhatsApp/Main Merid thread. Private message content is omitted, but the observed sequence was one correct requester-visible reply followed by a second visible delivery from the same A2A/source-reply flow.

This is a narrow companion to #39476. It does not replace #91161's reverse sessions_send guard or change the compaction replay behavior covered by #93293.

Why This Change Was Made

chat.history can project visible message-tool mirrors and forwarded sessions_send rows as assistant messages. The existing waited-reply selector accepts those rows after only stripping tool messages, so A2A announce delivery can treat an already-delivered transcript artifact as a fresh model reply.

This patch keeps waited A2A reply extraction on model-authored assistant replies by rejecting inter-session input rows, raw OpenClaw delivery mirrors, externally delivered message-tool mirrors, and Gateway-injected assistant rows. Internal source replies remain eligible only when the successful message-tool result proves the internal-ui sink and its originating transcript sequence follows the current request boundary. At a blocking artifact boundary the selector stops instead of falling back to an older reply. Structured non-presentational incomplete_turn failures stay silent, while trusted terminal presentation remains deliverable.

No production config, secrets, channel contract, tool schema, delivery API, runtime permission, dependency, package metadata, or changelog file changes.

User Impact

A2A handoffs that reply visibly through the message tool no longer turn already-delivered source replies or forwarded sessions_send transcript rows into a second visible message. Normal model-authored replies retain the existing waited-reply, ping-pong, and announce behavior.

Evidence

Exact reviewed head: ae7c8b1c2b8e03760c0a985e1465612c451b70a6, based on 0b9c2e6f9532b14e1eacd88737768897989d4736. Fresh whole-branch autoreview found no remaining findings (confidence 0.82).

Redacted Gateway/channel proof using the repository QA suite:

OPENCLAW_BUILD_ALL_NO_PNPM=1 \
OPENCLAW_RUN_NODE_SKIP_DTS_BUILD=1 \
OPENCLAW_TSDOWN_TIMEOUT_MS=180000 \
OPENCLAW_HOME=/tmp/openclaw-home-pr97259-land \
OPENCLAW_STATE_DIR=/tmp/openclaw-state-pr97259-land \
OPENCLAW_CONFIG_PATH=/tmp/openclaw-state-pr97259-land/openclaw.json \
node scripts/run-node.mjs qa suite --provider-mode mock-openai --transport qa-channel \
  --scenario a2a-message-tool-mirror-dedupe \
  --output-dir .artifacts/qa-e2e/a2a-message-tool-mirror-dedupe-pr97259-land

Passed: 1
Failed: 0
outbound=group:qa-a2a-mirror-room:QA-A2A-MESSAGE-TOOL-MIRROR-OK
source sessions_send calls=1
target message(action=send) calls=1
duplicateWindowMs=8000

The scenario runs a real Gateway child with qa-channel and mock-openai, exercises the A2A source-reply path, and observes exactly one requester-visible marker after the duplicate window.

Exact-head Blacksmith Testbox proof (tbx_01kx6e4n27jw4gjfqw75ynzceb, run 29107923271):

corepack pnpm test \
  src/agents/run-wait.test.ts \
  src/agents/tools/agent-step.test.ts \
  src/agents/tools/sessions-send-tool.a2a.test.ts \
  src/agents/tools/sessions.test.ts \
  src/gateway/server-methods/server-methods.test.ts \
  src/gateway/server.chat.gateway-server-chat.test.ts \
  src/gateway/server.sessions-send.test.ts \
  extensions/qa-lab/src/scenario-catalog.test.ts \
  extensions/qa-lab/src/providers/mock-openai/server.test.ts

Gateway:     256 passed
Agents:      112 passed
Extension QA: 159 passed
Total:       527 passed

corepack pnpm check:changed passed every selected lane on Testbox, including all-project tsgo, core/extensions/scripts lint, runtime import cycles, dependency and boundary guards. Exact-head hosted CI is green in run 29109056235, including production/test types, lint, build artifacts, QA smoke, contract shards, and changed-surface checks.

The proof cycle caught and fixed two test-quality gaps before landing: an over-strict whole-history assertion was replaced with an exact singleton visible-assistant assertion, and two OutboundPayloadJson fixtures received their required mediaUrl field. The focused suite, all-lanes gate, QA scenario, and autoreview were rerun after those fixes.

No live production WhatsApp message was sent for this proof. The behavior proof uses the repository's deterministic QA Gateway/channel harness with redacted markers.

AI-assisted: yes. Prepared with Codex, and I understand the code change.

@openclaw-barnacle openclaw-barnacle Bot added agents Agent runtime and tooling size: M labels Jun 27, 2026
@clawsweeper

clawsweeper Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 10, 2026, 8:23 AM ET / 12:23 UTC.

Summary
The PR filters assistant-shaped transcript artifacts from waited replies, prevents duplicate A2A announce delivery, normalizes aliased requester keys, suppresses exact incomplete-turn fallbacks, and adds focused plus QA Gateway coverage.

PR surface: Source +106, Tests +650, Other +140. Total +896 across 11 files.

Reproducibility: yes. Current main can select assistant-shaped transcript artifacts, while the branch's focused tests and real Gateway/qa-channel scenario construct that path and observe one visible delivery after the fix.

Review metrics: none identified.

Stored data model
Persistent data-model change detected: serialized state: extensions/qa-lab/src/providers/mock-openai/server.test.ts, serialized state: src/agents/tools/sessions-send-tool.a2a.test.ts, serialized state: src/agents/tools/sessions-send-tool.a2a.ts, serialized state: src/agents/tools/sessions-send-tool.ts, serialized state: src/agents/tools/sessions.test.ts, unknown-data-model-change: src/agents/tools/sessions-send-tool.a2a.test.ts, and 2 more. Confirm migration or upgrade compatibility proof before merge.

Merge readiness
Overall: 🦞 diamond lobster
Proof: 🦞 diamond lobster
Patch quality: 🦞 diamond lobster
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Risk before merge

  • [P1] Merging intentionally makes transcript artifacts a hard boundary for centralized waited-run reply extraction; owners should confirm that returning no older assistant reply is the desired contract across agent-step, subagent-control, and A2A callers.

Maintainer options:

  1. Accept the shared artifact boundary (recommended)
    Merge after normal exact-head gates if the owners agree artifacts terminate waited reply extraction across centralized callers.
  2. Split caller semantics before merge
    Introduce explicit caller policy if agent-step or subagent-control waits should continue past artifacts.
  3. Pause for broader A2A lifecycle work
    Hold only if maintainers want this mirror subtype coordinated with reverse-send, requester-path, and compaction changes.

Next step before merge

  • No automated repair is indicated; the remaining action is owner acceptance of the shared artifact boundary and normal exact-head merge gates.

Maintainer decision needed

  • Question: Should centralized waited-run reply extraction treat inter-session and OpenClaw transcript artifacts as a hard boundary, returning no older assistant reply?
  • Rationale: The implementation and evidence are strong, but this deliberately defines shared delivery semantics for agent-step, subagent-control, and A2A callers; repository history does not independently establish that boundary.
  • Likely owner: Ayaan Zaidi — They most recently maintained both the centralized wait helper and A2A flow on current main.
  • Options:
    • Accept shared artifact boundary (recommended): Land after exact-head gates because already-delivered artifacts should not resurrect stale assistant text across waited-run callers.
    • Make caller policy explicit: Keep the PR open and split hard-stop versus skip-artifact behavior by caller if generic waited runs require different semantics.
    • Request live channel proof: Ask for a redacted live WhatsApp or equivalent run only if the deterministic Gateway and qa-channel proof is insufficient.

Security
Cleared: The diff changes runtime selection logic and QA coverage without dependency, workflow, package, secret, permission, lockfile, or downloaded-code execution changes.

Review details

Best possible solution:

Land the centralized artifact-aware reply boundary with its regression and QA scenario once the run-wait/A2A owners confirm that already-delivered transcript artifacts must terminate waited reply extraction.

Do we have a high-confidence way to reproduce the issue?

Yes. Current main can select assistant-shaped transcript artifacts, while the branch's focused tests and real Gateway/qa-channel scenario construct that path and observe one visible delivery after the fix.

Is this the best way to solve the issue?

Yes, subject to maintainer acceptance of the shared boundary. Centralized artifact-aware extraction is narrower and more maintainable than channel-specific dedupe, and avoids stale fallback as well as duplicate delivery.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 831f4630faff.

Label changes

Label changes:

  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • remove rating: 🐚 platinum hermit: Current PR rating is rating: 🦞 diamond lobster, so this older rating label is no longer current.

Label justifications:

  • P1: The PR fixes duplicate user-visible A2A message delivery observed in a real channel workflow.
  • merge-risk: 🚨 message-delivery: The shared selector determines whether assistant-shaped transcript rows are delivered again, skipped, or treated as a terminal boundary.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body includes after-fix output from a real Gateway child using qa-channel and mock-openai, showing exactly one requester-visible marker through the eight-second duplicate window.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix output from a real Gateway child using qa-channel and mock-openai, showing exactly one requester-visible marker through the eight-second duplicate window.
Evidence reviewed

PR surface:

Source +106, Tests +650, Other +140. Total +896 across 11 files.

View PR surface stats
Area Files Added Removed Net
Source 5 136 30 +106
Tests 5 656 6 +650
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 1 140 0 +140
Total 11 932 36 +896

What I checked:

  • Current main remains affected: Current main still scans backward to the latest assistant text without excluding inter-session rows, delivery mirrors, message-tool mirrors, or gateway-injected transcript artifacts. (src/agents/run-wait.ts:163, 831f4630faff)
  • Artifact-aware reply boundary: The PR classifies OpenClaw transcript rows, message-tool mirrors, and inter-session inputs as artifacts, skipping them for ordinary reads and returning no older reply when a waited caller requests the hard boundary. (src/agents/run-wait.ts:167, b9a871dd8f2c)
  • A2A delivery handling: The waited A2A path uses the hard artifact boundary, compares against the pre-run baseline, rejects exact incomplete-turn fallbacks, and avoids re-running same-session announce logic when no valid target exists. (src/agents/tools/sessions-send-tool.a2a.ts:90, b9a871dd8f2c)
  • Real behavior proof: The PR body reports a real Gateway child using qa-channel and mock-openai that observed exactly one requester-visible marker, one source sessions_send call, and one target message send through an eight-second duplicate window. (qa/scenarios/channels/a2a-message-tool-mirror-dedupe.yaml:1, b9a871dd8f2c)
  • Exact-head validation: The current head has successful lint, type, build, transcript-boundary, agent-runtime, and security checks; no failing required patch check was observed. (b9a871dd8f2c)
  • Current-main merge check: A three-way merge against current main reports merged results for the changed run-wait, A2A, requester-key, test, and artifact-helper files without conflict markers. (b9a871dd8f2c)

Likely related people:

  • Ayaan Zaidi: Most recently changed both the centralized run-wait helper and A2A flow on current main. (role: recent area contributor; confidence: high; commits: f12ad4a38e9f; files: src/agents/run-wait.ts, src/agents/tools/sessions-send-tool.a2a.ts)
  • steipete: Introduced and centralized the waited-run reply helpers shared by agent-step, subagent-control, and A2A delivery. (role: introduced shared helper architecture; confidence: high; commits: 7b6334b0f41d, 3dda75894b80; files: src/agents/run-wait.ts, src/agents/tools/agent-step.ts, src/agents/subagent-control.ts)
  • vincentkoc: Added the delivery-mirror transcript artifact identity that the PR's selector consumes. (role: introduced adjacent artifact provenance; confidence: high; commits: db7286187f16; files: src/shared/transcript-only-openclaw-assistant.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

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
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (9 earlier review cycles; latest 8 shown)
  • reviewed 2026-07-04T21:26:59.686Z sha 0a88f03 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-04T21:33:26.522Z sha 0a88f03 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-05T23:15:08.032Z sha 18856d1 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-05T23:22:11.192Z sha 18856d1 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-06T13:34:33.041Z sha 97d3b93 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-06T13:46:16.537Z sha 97d3b93 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-07T14:11:00.172Z sha 6576b4f :: needs maintainer review before merge. :: none
  • reviewed 2026-07-07T15:32:40.062Z sha 8221d42 :: needs maintainer review before merge. :: none

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. labels Jun 27, 2026
@cavit99
cavit99 force-pushed the fix/a2a-pingpong-visible-reply branch from da1a789 to cf7726e Compare July 2, 2026 12:58
@clawsweeper clawsweeper Bot added status: 🛠️ actively grinding The PR author has acted after the latest ClawSweeper review and work remains. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 2, 2026
@clawsweeper clawsweeper Bot removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. status: 🛠️ actively grinding The PR author has acted after the latest ClawSweeper review and work remains. labels Jul 4, 2026
@cavit99

cavit99 commented Jul 4, 2026

Copy link
Copy Markdown
Contributor Author

I checked current upstream/main after the recent transcript/mirror changes. The adjacent #99855 change marks delivery mirrors as transcript artifacts, but it does not change waited A2A reply extraction.

On current upstream/main, readLatestAssistantReplySnapshot still returns visible text for inter-session rows, projected message-tool mirror rows, and delivery-mirror assistant rows. This PR still suppresses those artifacts, and it still merges cleanly against current main.

Latest PR checks are green.

@cavit99
cavit99 force-pushed the fix/a2a-pingpong-visible-reply branch from cf7726e to 0a88f03 Compare July 4, 2026 21:22
@cavit99

cavit99 commented Jul 4, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jul 4, 2026
@clawsweeper

clawsweeper Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@cavit99
cavit99 force-pushed the fix/a2a-pingpong-visible-reply branch from 97d3b93 to 6576b4f Compare July 7, 2026 14:00
@cavit99

cavit99 commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@cavit99
cavit99 force-pushed the fix/a2a-pingpong-visible-reply branch from 6576b4f to 8221d42 Compare July 7, 2026 15:18
@cavit99

cavit99 commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@cavit99

cavit99 commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Jul 10, 2026
@steipete steipete self-assigned this Jul 10, 2026
@steipete
steipete force-pushed the fix/a2a-pingpong-visible-reply branch from b9a871d to 7633466 Compare July 10, 2026 16:32
@steipete
steipete force-pushed the fix/a2a-pingpong-visible-reply branch from 7633466 to 479495f Compare July 10, 2026 16:46
@steipete
steipete force-pushed the fix/a2a-pingpong-visible-reply branch from 479495f to ae7c8b1 Compare July 10, 2026 16:54

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ae7c8b1c2b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +938 to +939
const details = readRecord(message.details);
return details?.sourceReplySink === "internal-ui" ? "internal-ui" : undefined;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve source-reply details for Codex mirrors

For Codex-backed runs, this new marker is never set because extensions/codex/src/app-server/event-projector.ts:2566-2587 persists tool-result transcript rows with role/tool ids/content/timestamp but no details, while this path only reads message.details. When a message-tool-only source reply is meant for the outer A2A flow, run-wait sees the resulting mirror as a generic openclawMessageToolMirror artifact rather than an internal-ui source reply, so the waited A2A selector drops it and the requester never receives the legitimate reply. Propagate the tool result details into the Codex transcript row or derive the marker from the persisted result content before relying on it here.

Useful? React with 👍 / 👎.

@steipete

Copy link
Copy Markdown
Contributor

Land-ready at exact head ae7c8b1c2b8e03760c0a985e1465612c451b70a6.

  • Fresh whole-branch autoreview: clean, no findings (confidence 0.82).
  • Blacksmith Testbox tbx_01kx6e4n27jw4gjfqw75ynzceb: 527 focused tests passed across the affected agent, Gateway, session-send, and QA-lab surfaces (run).
  • Real repository QA Gateway/channel scenario a2a-message-tool-mirror-dedupe: passed with one source sessions_send, one target message(action="send"), and no duplicate during the 8-second observation window.
  • corepack pnpm check:changed: all selected lanes passed, including all-project tsgo, core/extensions/scripts lint, runtime import-cycle checks, and boundary/dependency guards.
  • Exact-head hosted CI: green, including production/test types, lint, build artifacts, QA smoke, and contract shards (run).
  • Native OPENCLAW_TESTBOX=1 scripts/pr prepare-run 97259: passed with exact PR/local head equality.

The proof cycle caught and fixed an over-strict history assertion plus two incomplete typed payload fixtures before the final rerun. Known proof gap: no production WhatsApp message was sent; the deterministic QA Gateway/channel scenario provides the redacted end-to-end behavior proof.

@steipete
steipete merged commit 5e250aa into openclaw:main Jul 10, 2026
105 checks passed
@steipete

Copy link
Copy Markdown
Contributor

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 11, 2026
* fix: stop A2A source-reply mirror duplicates

* fix(agents): harden A2A reply extraction

* fix(agents): preserve internal A2A source replies

* test(gateway): assert A2A mirror projection precisely

* test(agents): complete A2A payload fixtures

---------

Co-authored-by: Peter Steinberger <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling extensions: qa-lab gateway Gateway runtime merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. size: XL status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants