Skip to content

Suppress internal source-reply final statuses#93815

Closed
cloosha wants to merge 1 commit into
openclaw:mainfrom
cloosha:fix/suppress-internal-source-reply-finals
Closed

Suppress internal source-reply final statuses#93815
cloosha wants to merge 1 commit into
openclaw:mainfrom
cloosha:fix/suppress-internal-source-reply-finals

Conversation

@cloosha

@cloosha cloosha commented Jun 17, 2026

Copy link
Copy Markdown

Summary

  • suppress short internal final status text, such as Sent. and Done - posted to #research-tasks., after a group/channel source reply has already been delivered
  • keep substantive group/channel final replies visible
  • keep direct-chat final status text unchanged

Test

  • node scripts/run-vitest.mjs run --config test/vitest/vitest.auto-reply-reply.config.ts src/auto-reply/reply/dispatch-from-config.test.ts
  • Result: 214 passed

@openclaw-barnacle openclaw-barnacle Bot added size: S triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels Jun 17, 2026
@clawsweeper

clawsweeper Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Thanks for the context here. I swept through the related work, and this is now duplicate or superseded.

Close this PR as superseded: it revives heuristic automatic-mode final suppression that a maintainer already rejected because it can drop substantive final replies without a typed terminal source-reply signal and thread identity.

Root-cause cluster
Relationship: superseded
Canonical: #91330
Summary: This PR overlaps the closed automatic-mode source-reply final-suppression behavior and is superseded by the maintainer decision rejecting heuristic suppression without a typed terminal signal.

Members:

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

Canonical path: Close this PR; keep automatic final replies visible by default, use message_tool_only when the message tool owns visible output, and pursue any future suppression only through a maintainer-approved typed terminal source-reply signal with thread identity.

So I’m closing this here because the remaining work is already tracked in the canonical issue.

Review details

Best possible solution:

Close this PR; keep automatic final replies visible by default, use message_tool_only when the message tool owns visible output, and pursue any future suppression only through a maintainer-approved typed terminal source-reply signal with thread identity.

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

Yes for the patch risk: source inspection shows the added branch can drop final replies when hasRepliedRef is true and the text matches the status-like regex. No live after-fix behavior proof was supplied.

Is this the best way to solve the issue?

No. This is not the best fix because it infers terminal source-reply ownership from prose and reply-threading state; the safer path is message_tool_only or a typed terminal source-reply contract with thread identity.

Security review:

Security review cleared: No concrete security or supply-chain concern was found; the diff only changes TypeScript delivery logic and tests.

AGENTS.md: found and applied where relevant.

What I checked:

  • PR adds heuristic final suppression: The PR skips final delivery when a group/channel reply has status-like prose, hasRepliedRef is true, and the payload lacks media. (src/auto-reply/reply/dispatch-from-config.ts:3303, f66800bd3435)
  • Automatic group/channel finals are current supported behavior: Current main resolves normal group/channel visible replies to automatic unless configured for message-tool-only, so final assistant text remains the visible reply path by default. (src/auto-reply/reply/source-reply-delivery-mode.ts:91, d1b917120a47)
  • User-facing docs match automatic final visibility: The Groups docs say automatic group/channel mode posts final assistant text unless the room opts into message-tool-only output. Public docs: docs/channels/groups.md. (docs/channels/groups.md:47, d1b917120a47)
  • hasRepliedRef is threading evidence, not terminal delivery proof: Current main sets hasRepliedRef when reply-threading metadata is consumed for first-reply mode; it does not prove the model's terminal source reply was delivered. (src/infra/outbound/message-action-threading.ts:113, d1b917120a47)
  • Canonical maintainer decision rejects the heuristic: A maintainer closed the canonical behavior request, stating ordinary send receipts do not prove terminal source-reply ownership and heuristic suppression can cause message loss.
  • Earlier broader implementation was closed for the same boundary: The predecessor PR was closed because successful current-conversation sends and target matching could suppress substantive finals without thread identity.

Likely related people:

  • vincentkoc: Authored the maintainer decision closing the canonical automatic-mode suppression request and has recent commits in the auto-reply/source-reply surfaces. (role: decision reviewer and recent area contributor; confidence: high; commits: f90ec6d7bea7, 1380a9e09400, 63825369a24d; files: src/auto-reply/reply/dispatch-from-config.ts, src/auto-reply/reply/source-reply-delivery-mode.ts, docs/channels/groups.md)
  • steipete: Introduced and documented key group visible-reply automatic behavior that this PR would alter in group/channel automatic mode. (role: visible-reply policy contributor; confidence: high; commits: 1e5450f23e1c, 75ea8b509468, 25c0699fe909; files: src/auto-reply/reply/source-reply-delivery-mode.ts, docs/channels/groups.md)
  • sandieman2: Recent thread-aware reply delivery work addressed final delivery and routed-thread identity, the same invariant missing from this heuristic. (role: recent adjacent message-delivery contributor; confidence: medium; commits: c67dc59b02b0; files: src/auto-reply/reply/dispatch-from-config.ts, src/infra/outbound/message-action-threading.ts)

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

@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 17, 2026
@cloosha
cloosha force-pushed the fix/suppress-internal-source-reply-finals branch from 9d0eab2 to 0d84801 Compare June 17, 2026 01:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: S status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants