Skip to content

[codex] fix image completion duplicate sends#87991

Closed
compoodment wants to merge 3 commits into
openclaw:mainfrom
compoodment:codex/fix-image-completion-duplicate-send
Closed

[codex] fix image completion duplicate sends#87991
compoodment wants to merge 3 commits into
openclaw:mainfrom
compoodment:codex/fix-image-completion-duplicate-send

Conversation

@compoodment

@compoodment compoodment commented May 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes generated-media completion delivery so successful image_generate / music_generate / video_generate completions with expected media URLs are delivered directly and idempotently before waking the requester agent.

Root Cause

The completion path already had deterministic generated-media direct delivery, but only as a fallback after the requester-agent/message-tool handoff. That left successful media completions dependent on prompt obedience: the requester agent was told to call message.send once, then remain silent. If the completion session context already contained repeated historical message tool calls, the model could copy that pattern and send the same media attachment multiple times.

Changes

  • Prefer direct generated-media delivery when expected media URLs are present.
  • Treat generated-media direct delivery failures as terminal after the send is attempted, so a partial platform send cannot fall back into the requester-agent/message-tool path and duplicate media.
  • Update completion-delivery and dispatch tests for direct-first media delivery, active requester sessions, legacy group routes, topic thread IDs, terminal direct failures, and fallback behavior.

Fixes #87995.

Follow-up to closed #87989; GitHub did not allow reopening the closed issue, and the bug reproduced on 2026.5.28-beta.1.

Validation

  • OPENCLAW_TEST_FAST=1 node_modules/.bin/vitest run src/agents/run-wait.test.ts src/agents/subagent-announce-dispatch.test.ts src/agents/subagent-announce-delivery.test.ts --reporter=dot (214 passed)
  • node_modules/.bin/oxfmt --write --no-error-on-unmatched-pattern src/agents/run-wait.test.ts src/agents/subagent-announce-delivery.ts src/agents/subagent-announce-delivery.test.ts src/agents/subagent-announce-dispatch.ts src/agents/subagent-announce-dispatch.test.ts
  • git diff --cached --check

Real behavior proof

  • Behavior or issue addressed: Generated-media completion delivery for image_generate / music_generate / video_generate could wake the requester agent and cause repeated message.send calls with the same media attachment. This proof verifies the fixed direct delivery path on a real OpenClaw instance.
  • Real environment tested: Dicky VPS, OpenClaw 2026.5.28-beta.1 (84fd629), patched with this PR's runtime change.
  • Exact steps or command run after this patch: Patched Dicky's installed runtime file, restarted Dicky's gateway, verified the gateway RPC probe, then triggered from Discord: @Dicky make an image of the last hour of this channel.
  • Evidence after fix: Copied live output from Dicky/Discord after the patched run:
Patched file: /home/dicky/.npm-global/lib/node_modules/openclaw/dist/subagent-announce-delivery-meOMMrhe.js
Patched sha256: 54be39526423c74139c17b32c4e73c287b83dc9bda7ea8d2f73066289a77f3b0
Backup: /home/dicky/.openclaw/state/backups/openclaw-pr87991-runtime/20260529T110329Z/subagent-announce-delivery-meOMMrhe.js
Gateway: running, RPC probe ok

Prompt: @Dicky make an image of the last hour of this channel
Run: image_generate:26e54be5-8afb-4736-8534-d8c6fb52b902:ok
Media path: ~/.openclaw/media/tool-image-generation/image-1---815ea96c-e360-4b6e-9b0a-5522e5c730cb.jpg
Public Discord posts with that attachment filename: 1
Discord message id: 1509876170701799486
Attachment id: 1509876164879974593
Caption/content: The generated image is ready.
Requester session message tool calls with that image: 0
Requester session message tool results with that image: 0
Delivery mirrors: 1
Delivery mirror idempotency key: image_generate:26e54be5-8afb-4736-8534-d8c6fb52b902:ok:generated-media-direct
  • Observed result after fix: The generated image was posted exactly once, via deterministic direct delivery. The requester session did not call the message tool for that image, so the previous repeated-send path was not entered.
  • What was not tested: A real partial platform upload failure was not forced on Dicky; that edge is covered by the regression tests added in this PR because inducing a live half-successful Discord upload is not deterministic.

@openclaw-barnacle openclaw-barnacle Bot added agents Agent runtime and tooling size: M triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 29, 2026
@clawsweeper

clawsweeper Bot commented May 29, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed May 29, 2026, 3:10 PM ET / 19:10 UTC.

Summary
The PR sends generated-media completion attachments directly before requester-agent handoff, marks generated-media direct failures terminal, and updates agent delivery/dispatch tests plus one run-wait timing test.

PR surface: Source +21, Tests +52. Total +73 across 5 files.

Reproducibility: yes. The linked issue and PR comments give a concrete shipped-beta Discord reproduction with one image_generate completion producing 12 posts, and current main source still routes active generated-media completions through requester wake before fallback direct delivery; I did not run the live repro locally.

Review metrics: 1 noteworthy metric.

  • Fallback semantics changed: 1 generated-media failure path made terminal. This is the maintainer-visible behavior change behind the message-delivery risk: failed direct attempts no longer fall back to requester-agent delivery.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦀 challenger crab
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

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

Rank-up moves:

  • [P2] Have maintainers explicitly accept the direct-send failure tradeoff, or request the artifact-idempotency alternative before merge.

Mantis proof suggestion
A Telegram Desktop run would add useful sibling proof that generated-media completions post once in a topic and do not duplicate through requester wake. A maintainer can ask Mantis to capture proof by posting a new PR comment that starts with the OpenClaw Mantis account mention, followed by:

telegram desktop proof: verify a generated-media completion in a Telegram topic posts one media message and does not duplicate or wake requester message.send.

Risk before merge

  • [P2] If direct media upload fails before posting anything, generated-media completion now fails instead of falling back to requester-agent delivery; that prevents partial-send duplicates but can turn a recoverable channel failure into a missed completion message.
  • [P1] The generic generated-media completion path affects visible delivery across Discord, Slack, Telegram, and other message channels; the PR has strong Discord live proof and sibling unit coverage, but maintainers may still want transport-specific proof before accepting the delivery tradeoff.

Maintainer options:

  1. Accept terminal direct-send semantics
    Merge as-is if maintainers prefer preventing duplicate generated media over requester-agent rescue after any attempted direct media send fails.
  2. Preserve fallback with artifact idempotency
    Revise the PR to add an artifact-and-target idempotency guard so confirmed or possible partial sends cannot duplicate while clear pre-send failures may still use requester-agent fallback.
  3. Pause for sibling transport proof
    Hold merge until a real Telegram or other sibling transport run proves the same direct-once behavior on the generic path maintainers care about most.

Next step before merge

  • [P2] No narrow automated repair remains; maintainers need to accept or reject the message-delivery fallback tradeoff before merge.

Security
Cleared: The diff only changes agent completion delivery logic and tests; it does not touch dependencies, workflows, permissions, secrets, lockfiles, or package execution surfaces.

Review details

Best possible solution:

Land this only after maintainers accept the fail-closed generated-media direct-delivery tradeoff, or replace it with an artifact-level idempotency guard that preserves safe fallback without allowing duplicate media posts.

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

Yes. The linked issue and PR comments give a concrete shipped-beta Discord reproduction with one image_generate completion producing 12 posts, and current main source still routes active generated-media completions through requester wake before fallback direct delivery; I did not run the live repro locally.

Is this the best way to solve the issue?

Yes, with a maintainer caveat. Direct-first deterministic generated-media delivery is the narrowest fix for prompt-driven duplicate sends, while terminal failed direct attempts are the unresolved policy tradeoff because fallback can either rescue a failed upload or duplicate a partially posted artifact.

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 7aca07072323.

Label changes

Label changes:

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

Label justifications:

  • P2: This is a normal-priority generated-media delivery bugfix for bounded duplicate posts and spam, with limited blast radius but real user-visible impact.
  • merge-risk: 🚨 message-delivery: Merging changes completion delivery fallback behavior, so some generated-media sends may fail closed instead of being retried through the requester-agent path.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦀 challenger crab and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR supplies after-fix live output from a patched OpenClaw 2026.5.28-beta.1 Discord instance showing exactly one generated image post and zero requester-session message-tool calls for that image.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR supplies after-fix live output from a patched OpenClaw 2026.5.28-beta.1 Discord instance showing exactly one generated image post and zero requester-session message-tool calls for that image.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The generic generated-media delivery change includes visible Telegram topic behavior in tests, so a short Telegram Desktop proof would materially exercise a sibling transport path.
Evidence reviewed

PR surface:

Source +21, Tests +52. Total +73 across 5 files.

View PR surface stats
Area Files Added Removed Net
Source 2 22 1 +21
Tests 3 197 145 +52
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 5 219 146 +73

What I checked:

  • Root policy read: Root AGENTS.md was read fully; its ClawSweeper guidance treats fallback behavior and channel delivery changes as merge-risk-sensitive and asks reviewers to inspect sibling channel surfaces. (AGENTS.md:1, 7aca07072323)
  • Scoped agents policy read: The touched files are under src/agents, and the scoped guide emphasizes deterministic routing and delivery-context normalization without expensive runtime discovery in agent paths. (src/agents/AGENTS.md:1, 7aca07072323)
  • Current main behavior: Current main still skips generated-media direct delivery while the requester session is active, so the active requester wake/message-tool path remains reachable before fallback direct delivery. (src/agents/subagent-announce-delivery.ts:1088, 7aca07072323)
  • PR direct-first change: The PR head adds primary generated-media direct delivery before the active requester wake and returns immediately after any direct attempt, preventing requester-agent duplication after expected media URLs are known. (src/agents/subagent-announce-delivery.ts:1134, 19dfdad770ef)
  • PR terminal failure change: The PR head marks generated-media direct delivery exceptions terminal and makes the dispatcher stop instead of fallback-steering after a terminal direct result. (src/agents/subagent-announce-dispatch.ts:93, 19dfdad770ef)
  • Regression coverage: The PR adds coverage for active requester sessions, terminal partial direct failures, handoff-failure avoidance, pending announce fallback avoidance, and dispatcher terminal behavior. (src/agents/subagent-announce-delivery.test.ts:2769, 19dfdad770ef)

Likely related people:

  • steipete: Authored prior async media generation direct-delivery and hardening commits and is the largest recent contributor in the subagent announce surface sampled by shortlog. (role: feature-history owner; confidence: high; commits: 7cd813139be7, 2cb057fcd90f, 4258a3307f5a; files: src/agents/tools/media-generate-background-shared.ts, src/agents/subagent-announce-delivery.ts, src/agents/subagent-announce-dispatch.ts)
  • shakkernerd: The current main delivery/dispatch files blame to the recent split commit, so this person is relevant for current file shape even though the behavior predates the split. (role: recent area contributor; confidence: medium; commits: efffb42ef9fd; files: src/agents/subagent-announce-delivery.ts, src/agents/subagent-announce-dispatch.ts)
  • vincentkoc: Recent history shows the shared media background task lifecycle refactor in the same generated-media completion area that feeds this delivery path. (role: adjacent media lifecycle contributor; confidence: medium; commits: 363c2bc17139; files: src/agents/tools/media-generate-background-shared.ts)
  • Max P: Authored the completion announce delivery target inheritance fix that affects how completion delivery targets are resolved before this PR's direct-send path runs. (role: adjacent delivery-target contributor; confidence: medium; commits: 8262078ee50c; files: src/agents/subagent-announce-delivery.ts, src/agents/subagent-announce.test.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.

@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. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. labels May 29, 2026
@compoodment compoodment reopened this May 29, 2026

Copy link
Copy Markdown
Contributor Author

Reopened because #87989 reproduced again after updating the affected instance to 2026.5.28-beta.1 (84fd629).

New evidence: one image_generate:5e66cfd7-9cff-4edd-86b5-85d5aec8e2fe:ok completion produced 12 successful message.send calls and 12 visible Discord posts for the same generated file, image-1---34799bf3-36d1-462a-8e08-3490a7e58a28.jpg.

The bot closure pointed at the message-tool terminal guard, but the reproduced tool calls all had explicit route keys (channel, target, or both), and current main returns false for hasExplicitMessageRoute(args). That guard is present but bypassed by this delivery path. See #87989 for the full receipt list and source citations.

Copy link
Copy Markdown
Contributor Author

Live Dicky validation

2026.5.28-beta.1 (84fd629) patched with this PR's runtime change on Dicky:

Patched file: /home/dicky/.npm-global/lib/node_modules/openclaw/dist/subagent-announce-delivery-meOMMrhe.js
Patched sha256: 54be39526423c74139c17b32c4e73c287b83dc9bda7ea8d2f73066289a77f3b0
Backup: /home/dicky/.openclaw/state/backups/openclaw-pr87991-runtime/20260529T110329Z/subagent-announce-delivery-meOMMrhe.js
Gateway: running, RPC probe ok

Retest result:

Prompt: @Dicky make an image of the last hour of this channel
Run: image_generate:26e54be5-8afb-4736-8534-d8c6fb52b902:ok
Media path: ~/.openclaw/media/tool-image-generation/image-1---815ea96c-e360-4b6e-9b0a-5522e5c730cb.jpg
Public Discord posts with that attachment filename: 1
Discord message id: 1509876170701799486
Attachment id: 1509876164879974593
Caption/content: The generated image is ready.
Requester session message tool calls with that image: 0
Requester session message tool results with that image: 0
Delivery mirrors: 1
Delivery mirror idempotency key: image_generate:26e54be5-8afb-4736-8534-d8c6fb52b902:ok:generated-media-direct

This proves the patched path delivered the generated image directly and did not wake the requester session into the old message.send loop.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed 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. labels May 29, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. label May 29, 2026
@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels May 29, 2026
@compoodment compoodment marked this pull request as ready for review May 29, 2026 11:23

Copy link
Copy Markdown
Contributor Author

@clawsweeper please re-review.

Addressed the P2 fallback edge in e6e0569:

  • generated-media direct delivery failures are now marked terminal
  • completion dispatch now stops on terminal direct failures instead of fallback-steering into the requester-agent path
  • added regression coverage for partial media-send failure, active-requester wake fallback, requester handoff lock/error fallback, pending announce fallback, and the dispatcher terminal path

Validation:
OPENCLAW_TEST_FAST=1 node_modules/.bin/vitest run src/agents/subagent-announce-dispatch.test.ts src/agents/subagent-announce-delivery.test.ts --reporter=dot

Result: 4 files passed, 174 tests passed.

@openclaw-barnacle openclaw-barnacle Bot added triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. labels May 29, 2026
@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. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. labels May 29, 2026
@clawsweeper clawsweeper Bot added status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels May 29, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. label May 29, 2026
@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 May 29, 2026
@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. labels May 29, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper please re-review latest head 7d2ed55.

Follow-up changes:

  • Added exact ## Real behavior proof section fields to the PR body using the Dicky live evidence, and locally verified the proof policy now returns passed.
  • Stabilized the unrelated CI failure in src/agents/run-wait.test.ts: the NaN drain-timeout test normalized to a 1ms deadline and could race on loaded CI runners. The test now uses fake time for that deadline assertion.

Validation:
OPENCLAW_TEST_FAST=1 node_modules/.bin/vitest run src/agents/run-wait.test.ts src/agents/subagent-announce-dispatch.test.ts src/agents/subagent-announce-delivery.test.ts --reporter=dot

Result: 6 files passed, 214 tests passed.

@compoodment compoodment force-pushed the codex/fix-image-completion-duplicate-send branch from 7d2ed55 to 19dfdad Compare May 29, 2026 12:35

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Rebased onto current main and pushed updated head 19dfdad770efb2f60a5486490946ff5487a8afdb. The previous OpenGrep failure was caused by the workflow scanning unrelated base-branch drift from the PR merge ref; the fresh OpenGrep run is now green. Focused local validation after rebase: OPENCLAW_TEST_FAST=1 node_modules/.bin/vitest run src/agents/run-wait.test.ts src/agents/subagent-announce-dispatch.test.ts src/agents/subagent-announce-delivery.test.ts --reporter=dot => 214 passed.

@clawsweeper

clawsweeper Bot commented May 29, 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 the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 29, 2026

Copy link
Copy Markdown
Contributor Author

Follow-up proof for the fallback edge ClawSweeper flagged, plus a live repro of the exact failure mode.

A patched test instance was still running the earlier PR dist shape where primary generated-media direct delivery only stopped fallback when it returned delivered: true:

const generatedMediaDelivery = await tryGeneratedMediaPrimaryDirectDelivery();
if (generatedMediaDelivery?.delivered) return generatedMediaDelivery;

That is not enough. If the platform send posts media successfully and then throws during post-send bookkeeping/mirroring, the direct attempt returns a failed result even though Discord already has the file. The old branch then falls through to active wake/requester handoff and duplicates the generated media.

Live evidence from the same generated artifact:

  • 2026-05-29T15:02:30.466Z: Discord message 1509934971605749963, attachment image-1---6750b96e-9d36-4afe-b472-4a3e74e9b81d.jpg, size 1266775, caption The generated image is ready.
  • 2026-05-29T15:02:34.125Z: gateway log: Active requester session could not be woken for subagent completion; falling back to requester-agent handoff: ... queue_message_failed reason=no_active_run ...
  • 2026-05-29T15:03:10.197Z: Discord message 1509935138249904181, same attachment filename and size, caption The last hour at The Tidepool ...

So this was direct/generated-media delivery followed by requester-agent fallback on the same artifact. The current PR head fixes that by treating any generated-media direct attempt as terminal for this path, and by marking direct delivery failure terminal: true, so a post-send failure cannot hand off and duplicate the artifact.

Local targeted gate on current head:

node_modules/.bin/vitest run src/agents/subagent-announce-delivery.test.ts
Test Files  2 passed (2)
Tests       152 passed (152)

I also deployed the current branch delta to the same test instance and restarted the gateway; the patched dist now has:

if (generatedMediaDelivery) return generatedMediaDelivery;
...
terminal: true

Gateway came back healthy: CLI/Gateway 2026.5.28-beta.1, runtime running, connectivity probe ok, admin-capable.

@clawsweeper please re-review this head.

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 29, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Command router queued. I will update this comment with the next step.

Re-review progress:

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. labels May 29, 2026
@steipete steipete self-assigned this May 29, 2026
@steipete

Copy link
Copy Markdown
Contributor

Thanks for the report and patch. I checked this against today's main history, and this PR is now superseded by the maintainer-side completion-delivery changes that landed after it:

Current main also already has the partial-send terminal guard and dispatch stop behavior this PR was trying to add, while the remaining direct-first generated-media change conflicts with the newer requester-agent contract and the same tests now merge-conflict. Closing this as superseded rather than merging an older delivery shape.

If this still reproduces on current main, please open a fresh issue/PR with a new repro against the current requester-agent media completion path.

@steipete steipete closed this May 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

2 participants