Skip to content

fix: suppress duplicate visible message.send deliveries#80445

Closed
anyech wants to merge 7 commits into
openclaw:mainfrom
anyech:fix/duplicate-visible-message-send
Closed

fix: suppress duplicate visible message.send deliveries#80445
anyech wants to merge 7 commits into
openclaw:mainfrom
anyech:fix/duplicate-visible-message-send

Conversation

@anyech

@anyech anyech commented May 10, 2026

Copy link
Copy Markdown
Contributor

Summary

  • track same-turn current-channel message.send calls in agent run context
  • suppress automatic final delivery only when its normalized visible text exactly matches a same-turn explicit send to the same channel/target
  • keep near-duplicate final replies with added warning/correction text, cross-target sends, media/interactive payloads, and normal final deliveries unchanged

Review notes

  • narrowed the duplicate predicate by removing substring and token-similarity matching; the guard now requires exact normalized visible-text equality
  • added a regression test covering a prior message.send followed by a longer final reply that adds a warning; that final reply is delivered instead of suppressed
  • did not exercise a production Gateway or live Discord channel for proof; validation below is from an isolated source checkout and mocked Discord delivery seam

Tests

  • git diff --check
  • CI=1 vitest run src/agents/command/delivery.test.ts --bail=1 --testNamePattern 'duplicate|warning'

Real behavior proof

  • Behavior or issue addressed: A native assistant turn could explicitly send a visible message.send response and then also produce a final reply with the same visible text, causing duplicate visible delivery. Follow-up review also identified two adjacent safety boundaries: near-duplicate final replies with added warning/correction text must still deliver, and one-sided route metadata must not count as a duplicate route match.
  • Real environment tested: Non-production isolated OpenClaw source checkout on Linux at PR head fcd79f6f32e0309a7d6ca1e712165713868ff91b, using mocked/synthetic Discord and outbound delivery seams. No production/live Gateway, runtime config, runtime state, real Discord channel, or real Discord send was used or claimed.
  • Exact steps or command run after this patch:
git diff --check origin/main...HEAD
node --no-maglev node_modules/vitest/vitest.mjs run --config test/vitest/vitest.agents-support.config.ts src/agents/command/delivery.test.ts --pool=threads --maxWorkers=1 --reporter=verbose --testNamePattern "suppresses duplicate Discord final delivery after same-turn current-channel message.send|keeps Discord final delivery when it adds a warning|keeps Discord final delivery when duplicate message.send had a thread and final route does not|keeps Discord final delivery when duplicate message.send had an account and final route does not"
node --no-maglev node_modules/vitest/vitest.mjs run --config test/vitest/vitest.infra.config.ts src/infra/outbound/deliver.test.ts --pool=threads --maxWorkers=1 --reporter=verbose --testNamePattern "dedupes replayed identical idempotent explicit sends to the same route|dedupes replayed split batch content as one idempotent send|keeps non-idempotent repeated sends visible"
node --no-maglev node_modules/vitest/vitest.mjs run --config test/vitest/vitest.agents-tools.config.ts src/agents/tools/message-tool.test.ts --pool=threads --maxWorkers=1 --reporter=verbose --testNamePattern "stamps sends with a stable tool-call idempotency key|preserves caller-provided message idempotency keys"
  • Evidence after fix: Copied terminal output from the non-production isolated checkout:
NON-PRODUCTION PROOF BOUNDARY
repo: openclaw/openclaw PR #80445
head: fcd79f6f32e0309a7d6ca1e712165713868ff91b
scope: isolated source checkout + mocked/synthetic Discord/outbound delivery seams; no production Gateway/runtime config/state or live Discord channel

git diff --check origin/main...HEAD: PASS

src/agents/command/delivery.test.ts:
  ✓ suppresses duplicate Discord final delivery after same-turn current-channel message.send
  ✓ keeps Discord final delivery when it adds a warning to a prior message.send
  ✓ keeps Discord final delivery when duplicate message.send had a thread and final route does not
  ✓ keeps Discord final delivery when duplicate message.send had an account and final route does not
  Test Files 1 passed; Tests 4 passed | 21 skipped

src/infra/outbound/deliver.test.ts:
  ✓ dedupes replayed identical idempotent explicit sends to the same route
  ✓ dedupes replayed split batch content as one idempotent send
  ✓ keeps non-idempotent repeated sends visible
  Test Files 1 passed; Tests 3 passed | 82 skipped

src/agents/tools/message-tool.test.ts:
  ✓ stamps sends with a stable tool-call idempotency key
  ✓ preserves caller-provided message idempotency keys
  Test Files 1 passed; Tests 2 passed | 48 skipped
  • Observed result after fix: Exact normalized visible-text duplicates from same-turn current-channel message.send are suppressed at final delivery; warning/correction final replies still deliver; one-sided threadId/accountId route metadata mismatches still deliver; replayed explicit sends with the same idempotency scope/content/route dedupe while non-idempotent repeated sends remain visible.
  • What was not tested: No production/live Gateway/runtime/config/state or real Discord channel was exercised. This is non-production seam proof, not live Discord proof; if maintainers require live proof specifically, a maintainer override or live validation by someone with an approved non-sensitive environment is still needed.

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

clawsweeper Bot commented May 10, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge.

Workflow note: Future ClawSweeper reviews update this same comment in place.

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.

Summary
The PR adds same-turn explicit message.send tracking, suppresses exact duplicate final deliveries to the same route, and propagates tool-call idempotency keys through outbound sends with regression tests.

Reproducibility: yes. source-reproducible: current main has documented duplicate assistant-confirmation suppression expectations but final delivery still sends through sendDurableMessageBatch without a same-turn explicit-send tracker. I did not run a live Discord/Gateway reproduction in this read-only review.

PR rating
Overall: 🧂 unranked krab
Proof: 🦪 silver shellfish
Patch quality: 🦐 gold shrimp
Summary: The patch is directionally useful and tested at seams, but it is not merge-ready because real behavior proof is missing and a P2 message-loss edge remains.

Rank-up moves:

  • Fix in-flight idempotent replay handling and add a regression for original-send failure with a concurrent replay.
  • Add redacted live Gateway/Discord proof, or get an explicit maintainer override if live proof is intentionally not required.
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.

PR egg
🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat.

Where did the egg go?
  • The egg game starts only after the PR passes the real-behavior proof check.
  • Before that, no creature, rarity, or ASCII portrait is rolled. The treat waits for real proof.
  • This is still just collectible flavor: proof affects review readiness, not creature quality.

Real behavior proof
Needs real behavior proof before merge: The PR body supplies copied terminal output from mocked/synthetic Discord and outbound seams, and explicitly says no production/live Gateway, runtime config, real Discord channel, or real Discord send was exercised. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Mantis proof suggestion
A live Gateway/Discord duplicate-suppression transcript would materially prove the user-visible behavior, and no dedicated Discord duplicate-message lane fits better. A maintainer can ask Mantis to capture proof by posting a new PR comment that starts with the OpenClaw Mantis account mention, followed by:

visual task: verify a live Gateway/Discord turn that calls message.send and returns the same final text shows only one visible message.

Risk before merge
Why this matters: - A matching replay that arrives while the original explicit send is still in flight can be reported as suppressed; if the original platform send then fails, no replay reaches the queue or platform and the visible message is lost.

  • The PR changes generic outbound idempotency behavior for any channel path receiving an idempotency key, so the failure mode is broader than Discord-only duplicate-final suppression.
  • The supplied proof is terminal output from mocked/synthetic seams; it does not show the live Gateway/Discord user-visible behavior that this PR changes.

Maintainer options:

  1. Repair in-flight replay handling (recommended)
    Store/share the in-flight promise or suppress only after a successful send is remembered, and add a regression where the original send fails while a replay is waiting.
  2. Accept seam proof only with owner signoff
    Maintainers can explicitly accept mocked seam proof for this transport-visible change, but that should be a conscious override after the idempotency bug is fixed.
  3. Pause if live proof is unavailable
    If no approved environment can provide redacted Gateway/Discord proof and maintainers do not want to override, pause the PR rather than landing a visible delivery change blind.

Next step before merge
This PR needs contributor or maintainer action for real behavior proof plus a code revision; it should not be routed to ClawSweeper repair while the proof gate remains contributor-owned.

Security
Cleared: The diff changes TypeScript delivery/idempotency logic and tests without adding dependencies, workflows, scripts, package metadata, or credential-handling changes.

Review findings

  • [P2] Wait for in-flight sends before suppressing replays — src/infra/outbound/send-idempotency.ts:119-120
Review details

Best possible solution:

Keep the exact normalized route/text duplicate-final predicate, but make outbound idempotency share or await the in-flight send result, then add a concurrent-failure regression and redacted live Gateway/Discord proof or an explicit maintainer override.

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

Yes, source-reproducible: current main has documented duplicate assistant-confirmation suppression expectations but final delivery still sends through sendDurableMessageBatch without a same-turn explicit-send tracker. I did not run a live Discord/Gateway reproduction in this read-only review.

Is this the best way to solve the issue?

No, not yet. Exact route/text suppression is the right shape, but the outbound idempotency helper must not report an in-flight replay as suppressed before the original send has succeeded.

Label justifications:

  • P2: This is a normal-priority user-visible message delivery fix with a concrete but limited blast radius.
  • merge-risk: 🚨 message-delivery: The patch changes duplicate suppression and idempotent send routing in a way that can suppress a visible message if an in-flight original send fails.

Full review comments:

  • [P2] Wait for in-flight sends before suppressing replays — src/infra/outbound/send-idempotency.ts:119-120
    When a matching key is already in flight, this returns the duplicate value immediately. If the original send later fails before any platform result, the replay has already been reported as suppressed and no retry reaches the queue or platform, dropping the visible message; await/share the in-flight result or suppress only after a successful send is remembered.
    Confidence: 0.86

Overall correctness: patch is incorrect
Overall confidence: 0.86

What I checked:

Likely related people:

  • Peter Steinberger: History shows repeated work on outbound delivery, message-tool introduction, mirroring, delivery seams, and agent delivery tests. (role: frequent delivery and message-tool area contributor; confidence: high; commits: fdaeada3ec76, db222070143a, 21df9ebd9283; files: src/infra/outbound/deliver.ts, src/infra/outbound/message.ts, src/agents/tools/message-tool.ts)
  • Vincent Koc: History shows recent work splitting delivery seams, adding message action capabilities, and narrowing channel plugin reads near the affected routing and outbound layers. (role: recent outbound and channel-runtime contributor; confidence: medium; commits: 543c14a4edd1, 92bea9704e17, c1846000ddbc; files: src/infra/outbound/deliver.ts, src/agents/tools/message-tool.ts, src/agents/command/delivery.ts)
  • Gustavo Madeira Santana: History shows message action discovery, cross-channel message discovery, and outbound/media-root work adjacent to the affected message tool contract. (role: message-tool discovery and outbound contributor; confidence: medium; commits: a14ad01d66f8, a32c7e16d204, 144b95ffcec6; files: src/agents/tools/message-tool.ts, src/infra/outbound/message.ts, src/infra/outbound/deliver.ts)
  • joshavant: History includes centralizing outbound payload normalization, which is directly adjacent to the idempotency fingerprint and rendered-batch behavior changed here. (role: outbound normalization contributor; confidence: medium; commits: c4764095f859, 646817dd808b; files: src/infra/outbound/deliver.ts, src/infra/outbound/message.ts)
  • MertBasar0: The PR discussion says they were mentioned because the change touches durable final delivery, and their review shaped the exact-duplicate predicate and proof requirements. (role: durable final-delivery reviewer; confidence: medium; files: src/agents/command/delivery.ts, src/infra/outbound/deliver.ts)

Codex review notes: model gpt-5.5, reasoning high; reviewed against 46d53d3b593a.

@MertBasar0

Copy link
Copy Markdown
Contributor

Thanks. I was mentioned because this touches the durable final-delivery path.

Before this can move forward, I’d like to see the duplicate predicate narrowed to exact normalized
duplicates, or another structural duplicate check that cannot suppress near-duplicate final replies
with added warning/correction text.

Please also add a regression test for the near-duplicate case, update the PR body with redacted real
gateway/Discord behavior proof, and fix the current lint/type failures. After that, we can re-run
review.

@anyech

anyech commented May 11, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the duplicate predicate/test/proof requests:

  • narrowed suppression to exact normalized visible-text duplicates only (removed substring/token-similarity matching)
  • added a regression test where a prior message.send is followed by a longer final reply with an added warning; the final reply is delivered
  • updated the PR body with the validation/proof boundary

Validation run in an isolated source checkout:

CI=1 vitest run src/agents/command/delivery.test.ts --bail=1 --testNamePattern 'duplicate|warning'

Result: the targeted duplicate/warning cases passed. I did not use a production Gateway or live Discord channel; the proof is at the mocked Discord delivery seam.

@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 11, 2026
@anyech

anyech commented May 12, 2026

Copy link
Copy Markdown
Contributor Author

Follow-up update: I added one more commit to cover a second duplicate-delivery shape observed after the original PR work.

Reviewer map:

  • Existing PR scope: suppress duplicate visible final delivery when an assistant turn both calls message.send and emits the same final text to the same route.
  • New commit scope: make explicit message(action="send") itself idempotent across same tool-call replay/retry windows.

Fresh validation update:

  • New commit: 5db736123d Deduplicate replayed explicit message sends
  • The recurrence that motivated this was a live Discord duplicate where session history showed a single explicit message.send tool call, but the same visible split message batch appeared twice. This is distinct from the original message.send + final-text dual-owner shape.

Root-cause seam:

  • Direct durable delivery previously gave a replayed explicit send a fresh queue/platform send path.
  • The old final-text suppression guard did not apply because there was no matching final assistant text to suppress.

Patch shape:

  • Stamp message(action="send") calls with a stable tool-call scoped idempotency key unless the caller already supplied one.
  • Propagate that key through direct outbound delivery.
  • Build a route + content + rendered-batch fingerprint before queue/platform send.
  • Suppress replayed identical sends for a short in-process window, including split/chunked batches.
  • Keep non-idempotent repeated sends and different follow-up text visible.

Validation commands run in an isolated source checkout:

node scripts/run-vitest.mjs run --config test/vitest/vitest.infra.config.ts src/infra/outbound/deliver.test.ts src/infra/outbound/message.test.ts
node scripts/run-vitest.mjs run --config test/vitest/vitest.agents-tools.config.ts src/agents/tools/message-tool.test.ts
node scripts/run-vitest.mjs run --config test/vitest/vitest.auto-reply-reply.config.ts src/auto-reply/reply/agent-runner-payloads.test.ts src/auto-reply/reply/followup-delivery.test.ts
node_modules/.bin/oxfmt --check src/agents/tools/message-tool.ts src/agents/tools/message-tool.test.ts src/infra/outbound/deliver.ts src/infra/outbound/deliver.test.ts src/infra/outbound/message.ts src/infra/outbound/message.test.ts src/infra/outbound/outbound-send-service.ts src/infra/outbound/send-idempotency.ts
node_modules/.bin/oxlint src/agents/tools/message-tool.ts src/agents/tools/message-tool.test.ts src/infra/outbound/deliver.ts src/infra/outbound/deliver.test.ts src/infra/outbound/message.ts src/infra/outbound/message.test.ts src/infra/outbound/outbound-send-service.ts src/infra/outbound/send-idempotency.ts
git diff --check

Observed results:

  • targeted infra tests: 96 passed
  • targeted agent-tool tests: 48 passed
  • targeted auto-reply reply tests: 48 passed
  • format/lint/diff checks passed

Scope boundary / caveat:

  • This is still an isolated source-checkout validation, not a production Gateway patch.
  • The new guard covers the direct durable outbound path used by visible sends. Plugin-local paths that bypass this outbound path would need to honor the propagated idempotency key separately.

@anyech
anyech force-pushed the fix/duplicate-visible-message-send branch from 5db7361 to dac0771 Compare May 12, 2026 07:18
@anyech

anyech commented May 16, 2026

Copy link
Copy Markdown
Contributor Author

Updated this PR head to address the remaining ClawSweeper route-matching finding.

Reviewer map:

  • Current head: 23c1f4db9d
  • Patch scope: duplicate-final suppression now requires normalized accountId and threadId equality, so one-sided route metadata no longer counts as a match.
  • Added regressions for same-text final delivery when a prior message.send had a thread or account route field that the final-delivery route did not.

Validation run in an isolated source checkout:

node --no-maglev node_modules/vitest/vitest.mjs run --config test/vitest/vitest.agents-support.config.ts src/agents/command/delivery.test.ts --pool=threads --maxWorkers=1
node --no-maglev node_modules/vitest/vitest.mjs run --config test/vitest/vitest.agents-tools.config.ts src/agents/tools/message-tool.test.ts --pool=threads --maxWorkers=1
node --no-maglev node_modules/vitest/vitest.mjs run --config test/vitest/vitest.infra.config.ts src/infra/outbound/deliver.test.ts src/infra/outbound/message.test.ts --pool=threads --maxWorkers=1
node --no-maglev node_modules/vitest/vitest.mjs run --config test/vitest/vitest.auto-reply-reply.config.ts src/auto-reply/reply/agent-runner-payloads.test.ts src/auto-reply/reply/followup-delivery.test.ts --pool=threads --maxWorkers=1
node_modules/.bin/oxfmt --check src/agents/command/delivery.ts src/agents/command/delivery.test.ts
node_modules/.bin/oxlint src/agents/command/delivery.ts src/agents/command/delivery.test.ts
git diff --check HEAD~1..HEAD

Observed result: delivery command tests passed (25 tests), message-tool tests passed (49 tests), focused infra outbound tests passed (97 tests), focused auto-reply tests passed (49 tests), focused format/lint passed, and diff/conflict-marker checks passed.

Caveat: GitHub currently reports this PR as conflict-bearing against current main, with the conflict outside this small route-matching fix. I did not resolve that broader merge conflict in this pass.

Boundary: this is still isolated source-checkout validation only. It does not claim production Gateway/runtime or live Discord proof, so the live behavior proof or maintainer-override gate remains.

/clawsweeper review

@clawsweeper

clawsweeper Bot commented May 16, 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 the P2 Normal backlog priority with limited blast radius. label May 16, 2026
@anyech
anyech force-pushed the fix/duplicate-visible-message-send branch 2 times, most recently from 9dfc471 to fcd79f6 Compare May 17, 2026 01:07
@anyech

anyech commented May 17, 2026

Copy link
Copy Markdown
Contributor Author

Non-production proof refresh for PR head fcd79f6f32e0309a7d6ca1e712165713868ff91b.

Reviewer map:

  • Current ClawSweeper state still appears to have no code-repair finding left; the remaining gate is proof/override.
  • GitHub check runs on this head were refreshed with no failed conclusions observed.
  • I updated the PR body with the proof boundary and redacted evidence.

Fresh validation boundary: isolated OpenClaw source checkout with mocked/synthetic Discord and outbound delivery seams only. No production/live Gateway, runtime config/state, real Discord channel, or real Discord send was used or claimed.

Commands run:

git diff --check origin/main...HEAD
node --no-maglev node_modules/vitest/vitest.mjs run --config test/vitest/vitest.agents-support.config.ts src/agents/command/delivery.test.ts --pool=threads --maxWorkers=1 --reporter=verbose --testNamePattern "suppresses duplicate Discord final delivery after same-turn current-channel message.send|keeps Discord final delivery when it adds a warning|keeps Discord final delivery when duplicate message.send had a thread and final route does not|keeps Discord final delivery when duplicate message.send had an account and final route does not"
node --no-maglev node_modules/vitest/vitest.mjs run --config test/vitest/vitest.infra.config.ts src/infra/outbound/deliver.test.ts --pool=threads --maxWorkers=1 --reporter=verbose --testNamePattern "dedupes replayed identical idempotent explicit sends to the same route|dedupes replayed split batch content as one idempotent send|keeps non-idempotent repeated sends visible"
node --no-maglev node_modules/vitest/vitest.mjs run --config test/vitest/vitest.agents-tools.config.ts src/agents/tools/message-tool.test.ts --pool=threads --maxWorkers=1 --reporter=verbose --testNamePattern "stamps sends with a stable tool-call idempotency key|preserves caller-provided message idempotency keys"

Result:

git diff --check: PASS
delivery.test.ts: 4 passed | 21 skipped
  ✓ suppresses duplicate Discord final delivery after same-turn current-channel message.send
  ✓ keeps Discord final delivery when it adds a warning to a prior message.send
  ✓ keeps Discord final delivery when duplicate message.send had a thread and final route does not
  ✓ keeps Discord final delivery when duplicate message.send had an account and final route does not
deliver.test.ts: 3 passed | 82 skipped
  ✓ dedupes replayed identical idempotent explicit sends to the same route
  ✓ dedupes replayed split batch content as one idempotent send
  ✓ keeps non-idempotent repeated sends visible
message-tool.test.ts: 2 passed | 48 skipped
  ✓ stamps sends with a stable tool-call idempotency key
  ✓ preserves caller-provided message idempotency keys

Interpretation: this proves the requested non-production seam behavior only. Exact duplicate final delivery is suppressed; warning/correction final replies and one-sided route mismatches still deliver; replayed explicit sends dedupe through the idempotency key path.

@clawsweeper re-review

@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: supplied External PR includes structured after-fix real behavior proof. labels May 17, 2026
@clawsweeper

clawsweeper Bot commented May 17, 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 the impact:message-loss Channel message delivery can be lost, duplicated, or misrouted. label May 17, 2026
@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 17, 2026
@anyech
anyech force-pushed the fix/duplicate-visible-message-send branch from fcd79f6 to d355e2d Compare May 18, 2026 22:52
@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. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. and removed impact:message-loss Channel message delivery can be lost, duplicated, or misrouted. labels May 18, 2026
@anyech

anyech commented May 30, 2026

Copy link
Copy Markdown
Contributor Author

Closing this PR as superseded/deferred to reduce the open external PR queue.

The duplicate visible message.send delivery problem is still a valid class of bug, but this older XL branch now overlaps heavily with newer, narrower Discord/final-delivery fixes and would need significant rework to be a clean current-main review target.

If maintainers still want this exact behavior, I will re-cut it later as a smaller current-main PR with fresh proof instead of continuing this stale broad branch.

@anyech anyech 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 gateway Gateway runtime merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. P2 Normal backlog priority with limited blast radius. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: XL status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants