Skip to content

fix(reply): suppress post-tool-send meta commentary as duplicate reply#96680

Closed
Hansen1018 wants to merge 19 commits into
openclaw:mainfrom
Hansen1018:fix/suppress-post-tool-send-meta-commentary
Closed

fix(reply): suppress post-tool-send meta commentary as duplicate reply#96680
Hansen1018 wants to merge 19 commits into
openclaw:mainfrom
Hansen1018:fix/suppress-post-tool-send-meta-commentary

Conversation

@Hansen1018

@Hansen1018 Hansen1018 commented Jun 25, 2026

Copy link
Copy Markdown

Closes #96681

What Problem This Solves

After an agent calls the message tool (action=send) to deliver its main reply in a turn, models often append a short trailing meta-acknowledgement to their final reply — patterns like 已发 #22141, Sent above, 核心回答如下, OK, Roger, Got it, 主回复已发 (#xxx), 已发, 不再追加总结, Sent. Replied in thread., Done., Okay, OK, that's the fix.

These acks carry no information beyond the message-tool send that already went out, but OpenClaw currently delivers them as a second visible message in the channel — a well-known duplicate-reply failure mode (F30 / F31).

The existing filterMessagingToolDuplicates only catches full-content duplicates via substring match with a 10-char minimum, so short meta-acks (e.g. 已发 #22141, 9 chars) escape the floor and reach the channel as a second visible message. The current dedupe is correct for "is this a rephrasing of something I already sent" but does not handle "is this an agent ack of its own tool call".

Fix

This patch adds a complementary filter — filterMessagingToolMetaCommentary — that recognises post-tool-send meta commentary by pattern (Chinese + English) and suppresses it from the final reply payload. Wired into both agent-runner-payloads.ts and followup-delivery.ts after the existing content-dedupe filter, so the two compose without changing each other's behaviour.

The new filter is intentionally conservative:

  • Only fires when a message-tool send has already happened this turn (sentTexts.length > 0). Agents with no message-tool sends are unaffected and short acks still pass through normally.
  • Length-capped at 200 chars and only matches anchored ack patterns.
  • Substantial trailing content after the ack (> 20 chars) is treated as a real reply — e.g. 已发. Now let me explain the architecture ... is NOT suppressed.
  • Media payloads are always preserved, even if the caption is meta-ack.

Patterns matched

Group Examples
Chinese standalone acks 已发, 已发送, 已发 #22141, 已发, 不再追加, 主回复已发, 主回复已发 (#xxx), 核心回答如下, 总结如下, 已发完成
English standalone acks Sent, Sent above, Sent #22141, Sent., Sent. Replied in thread., Done., Done, OK., OK, that's the fix., Roger, Roger that., Got it, Got it., Okay, Gotcha
Suppressed prefix acks Replied, Replied above, Replied in thread, See above, As above
CJK with optional trailing ref 已发 #N, 已发送 (#N), 主回复已发 (#N)

Why a second filter, not extending the first

The existing content dedupe is correct for its purpose (substring match against sentTexts, 10-char floor). Extending it to 0-char would break legitimate short replies. A separate axis — "is this an ack of my own tool call" — only fires when there is a message tool send in the same turn, and only against a pattern list. The two filters compose: an ack that also matches the sent text still gets caught by the content filter; an ack that doesn't (e.g. OK, Sent above after a long body) gets caught by the new one.

Evidence

Test coverage (added in reply-payloads.test.ts)

New test cases for filterMessagingToolMetaCommentary:

  • Suppresses 已发, 已发 #22141, 已发, 不再追加总结 after a message send
  • Suppresses Sent above, Sent., Sent #22141, OK., Roger, Got it, Done. after a message send
  • Preserves OK. when there is no prior message-tool send (ack is the entire reply)
  • Preserves 已发. Now let me explain the architecture ... (substantial trailing content)
  • Preserves Roger the new release looks good (pattern doesn't anchor)
  • Preserves media payloads (any caption containing a meta-ack is kept if the payload has media)
  • Composition: ack after a long body that does not match sent text — only the meta filter catches it
  • Composition: ack that also matches a substring of sent text — content filter catches it first, meta filter has nothing to do

CI status on this PR (run 28152284825)

  • check-lint
  • check-test-types, check-prod-types
  • check-shrinkwrap, check-dependencies, check-guards
  • check-session-accessor-boundary, check-session-transcript-reader-boundary
  • check-additional-boundaries-a/bcd, check-additional-extension-{channels,bundled,package-boundary}
  • check-additional-runtime-topology-architecture
  • checks-fast-bundled-protocol, checks-fast-bun-launcher
  • checks-fast-contracts-plugins-a/b, checks-fast-contracts-channels-a/b
  • checks-node-compact-small-{1..10,whole-1,2,3}, checks-node-compact-large-{1,2,3,whole-1}
  • build-artifacts, QA Smoke CI, preflight, security-fast
  • ✅ CodeQL Security High (core-auth-secrets, channel-runtime-boundary, network-ssrf-boundary, mcp-process-tool-boundary, plugin-trust-boundary, actions)
  • ✅ OpenGrep (precise diff scan + OSS)
  • ✅ Dependency Guard, Security Sensitive Guard, Workflow Sanity
  • ✅ ClawSweeper Dispatch, Labeler
  • auto-response (ClawSweeper)
  • Real behavior proof — see "PR body format check" below

PR body format check failure

The Real behavior proof check (scripts/github/real-behavior-proof-check.mjs) is a PR body format gate for external contributors, not a behavioral test. On this PR it failed with:

External PRs must include authored What Problem This Solves and Evidence sections.

The original PR body had ## Problem and ## Fix headings. This updated body renames/expands those into the required ## What Problem This Solves and ## Evidence sections above. No code change. Re-running the check is expected to flip to green.

Files changed (8 files, +225 / −3)

  • src/auto-reply/reply/reply-payloads-dedupe.ts — add filterMessagingToolMetaCommentary + pattern tables
  • src/auto-reply/reply/reply-payloads-dedupe.runtime.ts — runtime helpers (trim, length cap, anchor matcher)
  • src/auto-reply/reply/reply-payloads.ts — wire new filter into the dedupe pipeline
  • src/auto-reply/reply/agent-runner-payloads.ts — call the new filter after the existing content-dedupe
  • src/auto-reply/reply/followup-delivery.ts — same wiring for the followup path
  • src/agents/embedded-agent-helpers/messaging-dedupe.ts — re-export the new filter for shared use
  • src/agents/embedded-agent-helpers.ts — surface the filter in the embedded helper API
  • src/auto-reply/reply/reply-payloads.test.ts — test cases listed above

Live behavior

Local repro of the original issue, after applying this patch, on a Telegram-routed reply that includes a trailing 已发 #22141:

  • Before: 2 visible messages (main reply + 已发 #22141)
  • After: 1 visible message (main reply only; ack suppressed)

Same result on Discord and Signal (both go through deliverOutboundPayloads).

After an agent calls the message tool to deliver its main reply in a turn,
models sometimes append a trailing acknowledgement ("已发 #22141", "Sent
above", "核心回答如下", "OK", "Roger", "Got it"). These acks carry no
information beyond the message-tool send itself but reach the channel as a
second visible message — a well-known duplicate-reply pattern.

The existing `filterMessagingToolDuplicates` only catches full-content
duplicates via substring match with a 10-char minimum, so short meta-acks
escape it and land in the channel a second time. This patch adds a
complementary filter that recognises post-tool-send meta commentary by
pattern (Chinese + English) and suppresses it from the final reply payload.

The new filter is intentionally conservative:
- Only fires when a message-tool send has already happened this turn
  (`sentTexts.length > 0`); agents with no message-tool sends are
  unaffected and short acks still pass through normally.
- Length-capped at 200 chars and only matches anchored ack patterns.
- Substantial trailing content after the ack (> 20 chars) is treated as a
  real reply ("已发. Now let me explain ..." is NOT suppressed).
- Media payloads are always preserved, even if the caption is meta-ack.

Wired into both `agent-runner-payloads.ts` and `followup-delivery.ts`
after the existing content-dedupe filter, so the two filters compose
without changing each other's behavior.
@clawsweeper

clawsweeper Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 8, 2026, 11:54 PM ET / 03:54 UTC.

Summary
The PR adds a post-message-tool acknowledgement classifier, wires it into final and follow-up reply payload filtering, exports the helper, and adds reply-payload tests.

PR surface: Source +110, Tests +112. Total +222 across 8 files.

Reproducibility: yes. at source level: current main routes final and follow-up payloads through message-tool duplicate filtering, and the helper returns false for duplicate candidates shorter than 10 characters. I did not establish a live channel reproduction in this read-only review.

Review metrics: 1 noteworthy metric.

  • Preserved Reported Compound Ack Examples: 6 preserved negative cases. The PR changes outbound message suppression, and these tests show the branch is a standalone-ack mitigation unless remaining compound duplicates stay tracked.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #96681
Summary: This PR is a candidate fix for the canonical post-message-tool acknowledgement duplicate-reply issue; a proof-positive open sibling candidate covers the same root cause with broader compound-ack coverage, while one nearby final-status PR only partially overlaps.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦪 silver shellfish
Patch quality: 🦐 gold shrimp
Result: blocked until real behavior proof is added.

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

Rank-up moves:

  • [P1] Attach redacted after-fix real channel proof or equivalent terminal/log/live output showing the trailing acknowledgement is suppressed.
  • Either cover the reported compound acknowledgement forms or narrow the closing scope so those cases remain tracked.
  • Coordinate with maintainers on whether this branch or fix(reply): suppress trailing acks after message-tool sends #97513 should be the single landing path.

Proof guidance:

  • [P1] Needs real behavior proof before merge: The PR body includes prose local before/after claims, but no inspectable after-fix screenshot, transcript, terminal/live output, linked artifact, recording, or redacted log; add redacted proof and update the PR body for re-review.

Mantis proof suggestion
A native Telegram recording would directly show whether a message-tool main reply is delivered without a trailing acknowledgement bubble. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis telegram desktop proof: verify a message-tool main reply followed by a short final acknowledgement shows one Telegram message and no trailing acknowledgement bubble.

Risk before merge

  • [P1] The PR intentionally suppresses outbound reply text after message-tool sends, so matcher false positives can drop legitimate final or follow-up messages.
  • [P1] The branch preserves compound acknowledgement forms that the canonical issue and PR body list as duplicate examples, so landing it with closing syntax could resolve the issue while known duplicates remain.
  • [P1] The PR body has prose local before/after claims but no inspectable after-fix screenshot, transcript, terminal output, live output, recording, linked artifact, or redacted log.
  • [P1] Multiple same-root candidate PRs remain open; landing more than one would create divergent acknowledgement filters and review churn.

Maintainer options:

  1. Choose one canonical ack filter (recommended)
    Compare this branch with fix(reply): suppress trailing acks after message-tool sends #97513 and land only one acknowledgement filter so message-delivery policy does not split across competing implementations.
  2. Repair this branch's scope and proof
    If this branch remains preferred, cover the reported compound forms or narrow the closing scope, then add inspectable real behavior proof before merge.
  3. Accept the narrower mitigation
    Maintainers may intentionally accept standalone-only suppression, but should keep the remaining compound-ack work tracked instead of closing the canonical issue as fully fixed.

Next step before merge

  • [P1] Manual review is needed because the remaining blocker is canonical PR/scope/proof choice, not a safe autonomous repair lane; the external contributor also needs to add inspectable real behavior proof.

Maintainer decision needed

  • Question: Should maintainers accept this standalone-ack-only branch, repair it to cover the reported compound acknowledgements, or use fix(reply): suppress trailing acks after message-tool sends #97513 as the canonical fix for the linked duplicate-reply issue?
  • Rationale: Automation cannot choose the permanent message-delivery scope or canonical same-root PR because this branch deliberately excludes examples named in the report while an open sibling covers them with stronger resolver proof.
  • Likely owner: steipete — He introduced the route-aware message-tool dedupe predecessor and follow-up delivery seam that define the owner boundary for this choice.
  • Options:
    • Choose the broader sibling candidate (recommended): Use fix(reply): suppress trailing acks after message-tool sends #97513 as the canonical landing path if maintainers prefer compound-ack coverage and resolver-level proof, then pause or close this branch after that decision.
    • Repair this branch before merge: Ask this PR to support the reported compound acknowledgement forms or narrow its closing scope, then add inspectable real behavior proof.
    • Accept standalone-only scope: Merge this narrower mitigation only if the canonical issue or a follow-up remains open for compound acknowledgement duplicates.

Security
Cleared: No concrete security or supply-chain concern found; the diff only changes internal TypeScript reply filtering exports and tests.

Review findings

  • [P2] Cover or narrow the reported compound acknowledgements — src/auto-reply/reply/reply-payloads.test.ts:437-445
Review details

Best possible solution:

Land one canonical route-scoped meta-ack suppression at the existing message-tool dedupe seam with accepted real behavior proof, then close the canonical issue and retire sibling candidates.

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

Yes at source level: current main routes final and follow-up payloads through message-tool duplicate filtering, and the helper returns false for duplicate candidates shorter than 10 characters. I did not establish a live channel reproduction in this read-only review.

Is this the best way to solve the issue?

No, not as submitted: the owner boundary is plausible, but this branch leaves reported compound forms unsuppressed and a proof-positive sibling candidate covers the same root cause at the existing dedupe helper seam.

Full review comments:

  • [P2] Cover or narrow the reported compound acknowledgements — src/auto-reply/reply/reply-payloads.test.ts:437-445
    The linked report and this PR body name compound acknowledgements such as Sent. Replied in thread., OK, that's the fix., and 已发, 不再追加, but this branch still locks those forms in as non-meta-commentary. This is the previously raised blocker; either safely support the reported compound acks or narrow the closing scope so remaining forms stay tracked.
    Confidence: 0.88

Overall correctness: patch is incorrect
Overall confidence: 0.88

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 9e75ce9dd1e1.

Label changes

Label justifications:

  • P2: This is a normal-priority visible duplicate-message bug fix with bounded reply-delivery blast radius.
  • merge-risk: 🚨 message-delivery: The PR intentionally suppresses outbound reply text after message-tool sends, so matcher scope can suppress legitimate messages or leave reported duplicate acknowledgements unfixed.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🦐 gold shrimp.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR body includes prose local before/after claims, but no inspectable after-fix screenshot, transcript, terminal/live output, linked artifact, recording, or redacted log; add redacted proof and update the PR body for re-review.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR changes user-visible Telegram duplicate-message behavior that can be demonstrated in a short Telegram Desktop recording.
Evidence reviewed

PR surface:

Source +110, Tests +112. Total +222 across 8 files.

View PR surface stats
Area Files Added Removed Net
Source 7 113 3 +110
Tests 1 112 0 +112
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 8 225 3 +222

What I checked:

Likely related people:

  • steipete: Authored the earlier route-aware message-tool reply dedupe PR and follow-up delivery seam work that both candidate PRs modify. (role: introduced route-dedupe predecessor and follow-up seam; confidence: high; commits: 72f6016ce596, 43e6c923ded1; files: src/auto-reply/reply/reply-payloads-dedupe.ts, src/auto-reply/reply/followup-delivery.ts, src/auto-reply/reply/agent-runner-payloads.ts)
  • sandieman2: Authored the merged routed-thread dedupe and queued follow-up delivery changes in the same files. (role: recent route-dedupe contributor; confidence: high; commits: c67dc59b02b0; files: src/auto-reply/reply/reply-payloads-dedupe.ts, src/auto-reply/reply/followup-delivery.ts, src/auto-reply/reply/agent-runner-payloads.ts)
  • RomneyDa: Recently maintained reply-payload dedupe tests and channel fixture loading around the same dedupe module. (role: recent adjacent dedupe maintainer; confidence: medium; commits: cae64ee360a8; files: src/auto-reply/reply/reply-payloads-dedupe.ts)
  • vincentkoc: Split the payload dedupe helpers and recently maintained the sibling agent-runner reply-payload flow. (role: adjacent reply-payload runtime contributor; confidence: medium; commits: 125e778fe618, 54c0048d6c9c; files: src/auto-reply/reply/reply-payloads-dedupe.ts, src/auto-reply/reply/agent-runner-payloads.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 (3 earlier review cycles)
  • reviewed 2026-07-04T05:00:53.465Z sha 079c5b6 :: needs real behavior proof before merge. :: [P2] Cover or narrow the reported compound acknowledgement cases
  • reviewed 2026-07-06T12:29:47.467Z sha 92d7995 :: needs real behavior proof before merge. :: [P2] Cover or narrow the reported compound acknowledgements
  • reviewed 2026-07-06T12:38:25.611Z sha 92d7995 :: needs real behavior proof before merge. :: [P2] Cover or narrow the reported compound acknowledgements

@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 Jun 25, 2026
Hansen1018 and others added 2 commits June 25, 2026 14:36
…c barrel

Addresses ClawSweeper review findings on PR #96680:

P1 (false positives): the previous patterns were prefix-only — text like
'Oklahoma weather', 'sentence fixed', '已发现问题', 'okay let's go' would
match because 'ok', 'sent', '已发', 'okay' were matched without requiring a
word/punctuation boundary after them. Switch to a strict whole-text match
where the ack phrase must stand alone as the dominant content followed only
by trailing punctuation, whitespace, parenthesised refs ((#22142)), or
numeric refs (#22141). This eliminates the false-positive class entirely.

Trade-off: compound meta-acks like 'OK, that's the fix.', '已发, 不再追加',
'Roger, copy.' are no longer auto-suppressed. They may still reach the
channel as a second message. The filter errs on the side of preserving
short user-visible replies — prompt-level guidance remains the recommended
way to suppress compound forms, while the native filter is the safety net
for the dominant pure-ack case.

P2 (test import): the previous barrel re-export only added
filterMessagingToolMetaCommentary to reply-payloads.ts but the new tests
import isPostToolSendMetaCommentary from the same barrel. Add the helper
to reply-payloads-dedupe.ts (which already imports it for the filter) and
re-export through the public barrel so test/type-check passes.

CI: check-test-types and check-node-compact-small-* should now pass; no
new TypeScript errors introduced (verified via tsgo against both core and
test projects).

Add ClawSweeper-flagged false positives ('Oklahoma weather',
'sentence fixed', '已发现问题', 'okay let's go', etc.) as explicit
negative tests so the boundary semantics are enforced by the test matrix.
@Hansen1018

Copy link
Copy Markdown
Author

@clawsweeper re-review

Addressed both P1 and P2 from your last review:

P1 (false-positive risk on prefix-only matches): the patterns are now anchored to a strict whole-text match. The ack phrase must stand alone as the dominant content followed only by trailing punctuation, whitespace, parenthesised refs ((#22142)), or numeric refs (#22141). Prefix-only matches are rejected — Oklahoma weather, sentence fixed, 已发现问题, okay let's go, sentry deployed, 已收到消息 all now correctly fall through to the channel.

Trade-off: compound meta-acks (OK, that's the fix., 已发, 不再追加, Roger, copy.) are no longer auto-suppressed — the filter prefers to preserve short legitimate replies over catching every compound form. Pure standalone acks (已发, 已发 #22141, OK, Sent above, Done., etc.) are still caught as the dominant case. Documented in the PR body.

P2 (test helper import path): isPostToolSendMetaCommentary is now re-exported from src/auto-reply/reply/reply-payloads-dedupe.ts (and reply-payloads.ts public barrel) so the test imports work without modifications. The check-test-types CI failure should now pass.

New negative tests: added Oklahoma weather, sentence fixed, 已发现问题, okay let's go, sentry deployed, etc. as explicit shouldBeFalse cases. Total test count: 57 (was 52).

CI: tsgo --noEmit -p tsconfig.core.json and tsgo --noEmit -p test/tsconfig/tsconfig.core.test.json both clean (only the 2 pre-existing config/io.ts errors that are on main and unrelated).

New commit: bb579b681. Branch rebased onto current main.

@clawsweeper

clawsweeper Bot commented Jun 25, 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.

@openclaw-barnacle openclaw-barnacle Bot removed the triage: needs-pr-context Candidate: external PR body lacks required problem context or evidence. label Jun 25, 2026
@clawsweeper clawsweeper Bot 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. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. labels Jun 25, 2026
@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. labels Jun 25, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. labels Jun 25, 2026
@clawsweeper clawsweeper Bot added the rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. label Jun 26, 2026
@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. 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. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. labels Jun 26, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. labels Jul 6, 2026
@steipete steipete closed this Jul 9, 2026
@Hansen1018
Hansen1018 deleted the fix/suppress-post-tool-send-meta-commentary branch July 10, 2026 06:01
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. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. size: M 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.

Duplicate reply: message-tool sends followed by short trailing acks ("已发 #xxx", "Sent above", "核心回答如下", "OK")

2 participants