Skip to content

fix(slack): soften benign search no-result progress#85478

Closed
kesslerio wants to merge 19 commits into
openclaw:mainfrom
kesslerio:fix/slack-benign-tool-failure-ux
Closed

fix(slack): soften benign search no-result progress#85478
kesslerio wants to merge 19 commits into
openclaw:mainfrom
kesslerio:fix/slack-benign-tool-failure-ux

Conversation

@kesslerio

@kesslerio kesslerio commented May 22, 2026

Copy link
Copy Markdown
Contributor

What

Slack progress for optional local context searches no longer presents clean rg no-match results as scary exit-code failures. Direct rg exit 1 and find ... | xargs rg ... exit 123 now carry a narrow benign_no_result classification through exec command-output events, and Slack renders that as No matches found instead of exit 123.

The current head is merged with origin/main and removes the unrelated CI Node setup-helper changes from this PR. The effective diff is now limited to command outcome classification, agent progress metadata, and channel progress rendering.

Why

The user-visible problem was noise: an agent could answer normally while Slack still showed a tool/progress warning for an optional markdown search that simply found nothing. Real failures remain visible because the classifier only downgrades known clean no-match shapes with empty output; missing paths, permission errors, command-not-found, syntax errors, timeouts, and unrelated nonzero exits still render as failures or exit-code statuses.

Real behavior proof

Behavior or issue addressed: Slack-visible progress for a clean local rg no-match should say No matches found, not exit 1, exit 123, or failed.

Real environment tested: Local OpenClaw checkout on the feature branch after this patch, running real shell rg against the repository docs directory and then passing the real result through the production exec classifier and production Slack progress formatter.

Exact steps or command run after this patch: Ran a real no-match command with marker __openclaw_no_such_marker_85478__ against docs, captured its real exit code/stdout/stderr, then invoked the production classifier and production channel streaming formatter via node --import tsx. The current head 1e24f832d68e5fe2149466bd0513063df813bbf4 merges current origin/main; the classifier/formatter behavior proven by the terminal proof is unchanged.

Evidence after fix: Console output from the after-fix run:

{
  "rgExitCode": 1,
  "rgStdoutBytes": 0,
  "rgStderrBytes": 0,
  "outcomeClassification": "benign_no_result",
  "statusLabel": "No matches found",
  "slackProgress": "🛠️ No matches found"
}

Observed result after fix: The real clean no-match shell result is classified as benign_no_result, the Slack progress string is 🛠️ No matches found, and the visible output contains no exit 1, exit 123, or failed wording.

What was not tested: Browser UI rendering was not tested because this change affects backend/tool event metadata and Slack progress rendering, not a browser route.

Tests

  • pnpm test src/agents/bash-tools.exec-outcome-classification.test.ts src/agents/embedded-agent-subscribe.handlers.tools.test.ts src/plugin-sdk/channel-streaming.test.ts extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts
  • pnpm test src/auto-reply/reply/dispatch-from-config.test.ts src/auto-reply/reply/followup-runner.test.ts
  • pnpm test src/auto-reply/reply/dispatch-from-config.test.ts -t "benign no-result progress"
  • pnpm test src/auto-reply/reply/followup-runner.test.ts -t "benign no-result progress"
  • pnpm test:bundled
  • pnpm test src/agents/embedded-agent-runner/model.test.ts -t "builds an openai fallback for gpt-5.5 when the live catalog cache is cold"
  • pnpm test src/auto-reply/reply/directive-handling.model.test.ts -t "reports Codex runtime auth for OpenAI status rows"
  • pnpm exec oxfmt --check --threads=1 extensions/discord/src/monitor/message-handler.process.ts extensions/matrix/src/matrix/monitor/handler.ts extensions/msteams/src/reply-dispatcher.ts extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts extensions/slack/src/monitor/message-handler/dispatch.ts extensions/telegram/src/bot-message-dispatch.ts src/agents/bash-tools.exec-outcome-classification.test.ts src/agents/bash-tools.exec-outcome-classification.ts src/agents/embedded-agent-subscribe.handlers.tools.test.ts src/agents/embedded-agent-subscribe.handlers.tools.ts src/auto-reply/get-reply-options.types.ts src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/agent-runner-execution.ts src/auto-reply/reply/followup-runner.test.ts src/auto-reply/reply/followup-runner.ts src/channels/streaming.ts src/infra/agent-events.ts src/infra/exec-outcome-classification-types.ts src/plugin-sdk/channel-streaming.test.ts
  • git diff --check origin/main

Result: all commands passed locally on head 1e24f832d68e5fe2149466bd0513063df813bbf4. CI is running on the refreshed head. A later CI run hit a slow unrelated src/agents/tools/image-tool.test.ts case in checks-node-agentic-agents; that file is outside this PR diff, and the focused image-tool cases pass locally on both this PR branch and current origin/main (2 passed, about 195s on the PR branch and 133s on current main). The branch was merged with newer origin/main again, then the two long-running iMessage image-root tests were given a larger explicit timeout to stop the false timeout cascade observed in the required agents shard. The previously red checks-fast-bundled-protocol and checks-node-agentic-agents failures were stale-main failures; the local equivalents pass after merging current origin/main. The previous checks-node-auto-reply-reply-dispatch timeout also passes locally on the refreshed branch.

Browser test: skipped; this changes backend/tool event metadata and Slack progress rendering, not a browser route. agent-browser is installed.

Note: earlier versions of this PR included CI Node setup-helper hardening. That unrelated automation scope has been removed from the current head so this PR stays focused on benign command-result progress rendering.

AI Assistance

Implemented with Codex using the repository test wrappers above. Review pass found no residual actionable work.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: slack Channel integration: slack 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 22, 2026
@clawsweeper

clawsweeper Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 24, 2026, 6:23 AM ET / 10:23 UTC.

Summary
The PR adds a narrow rg/xargs rg benign no-result classifier, forwards optional command-output status metadata through agent/reply/channel progress paths, updates bundled channel renderers/tests, and bumps two image-tool test timeouts.

PR surface: Source +291, Tests +611. Total +902 across 22 files.

Reproducibility: yes. Source inspection shows current main and v2026.6.10 render nonzero command-output exits as exit N, while the PR body supplies after-fix terminal proof for a real clean rg no-match through the production classifier and Slack formatter.

Review metrics: 2 noteworthy metrics.

  • Plugin-facing progress metadata: 2 optional fields added. outcomeClassification and statusLabel flow through agent events, reply options, and shared channel rendering, so maintainers should notice the additive contract before merge.
  • Unrelated timeout adjustment: 2 timeout values changed. The image-tool test timeout bump is outside the Slack no-result progress behavior and should be intentionally kept or split.

Stored data model
Persistent data-model change detected: serialized state: src/agents/embedded-agent-subscribe.handlers.tools.test.ts. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: canonical
Canonical: #85478
Summary: This PR is the only open canonical implementation candidate for benign rg no-result progress rendering; the closest alternate attempts are closed unmerged.

Members:

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

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🐚 platinum hermit
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:

  • Resolve current-main conflicts and rerun focused exact-head validation.
  • Have maintainers explicitly accept the two optional command-output metadata fields.
  • Decide whether the image-tool timeout bump belongs in this PR or should be split.

Mantis proof suggestion
A native Telegram Desktop recording would materially prove that benign no-match progress renders as No matches found while real rg errors remain visible. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis telegram desktop proof: verify a clean rg no-match command progress renders as No matches found, and an rg syntax or runtime error still shows failure wording.

Risk before merge

  • [P1] GitHub currently reports this PR as conflicting with current main, so maintainers need a refreshed branch and exact-head validation before merge.
  • [P1] The PR adds two optional command-output metadata fields through plugin-facing progress callback and event surfaces; maintainers should accept that additive contract deliberately.
  • [P1] A classifier false positive could hide real command failure wording as No matches found across visible channel progress, although the current command-shape parser and tests keep the risk bounded.
  • [P2] The branch still includes two iMessage image-tool timeout changes outside the Slack/command-output behavior, so maintainers should intentionally keep or split that test-only scope.

Maintainer options:

  1. Refresh and validate exact head (recommended)
    Resolve the current main conflicts, preserve the benign no-result behavior, and rerun focused agent/channel validation on the refreshed head.
  2. Accept additive progress metadata
    Maintainers can intentionally accept outcomeClassification and statusLabel as optional command-output progress metadata for plugin/channel consumers.
  3. Split timeout-only scope
    If the iMessage image-tool timeout changes are not meant to ride with this Slack/channel fix, move them to a separate maintenance PR before merge.

Next step before merge

  • [P2] The remaining work is maintainer review, branch refresh, and additive SDK/progress contract acceptance rather than a narrow autonomous repair.

Security
Cleared: No concrete security or supply-chain concern was found; the meaningful risk is progress-message misclassification and API compatibility, not credentials, permissions, dependency resolution, or code execution expansion.

Review details

Best possible solution:

Refresh the branch against current main, preserve the narrow classifier and shared channel forwarding, have maintainers accept the additive progress metadata contract, and either keep or split the unrelated image-tool timeout bump.

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

Yes. Source inspection shows current main and v2026.6.10 render nonzero command-output exits as exit N, while the PR body supplies after-fix terminal proof for a real clean rg no-match through the production classifier and Slack formatter.

Is this the best way to solve the issue?

Yes with a maintainer-acceptance caveat. Classifying at the exec outcome/event boundary and rendering through shared channel progress is the right owner boundary, but the additive progress contract and dirty branch require maintainer review.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: This is a normal-priority user-visible progress-rendering fix with limited blast radius but shared agent/channel surface area.
  • merge-risk: 🚨 compatibility: The diff adds optional command-output metadata through plugin-facing progress callback and event surfaces.
  • merge-risk: 🚨 message-delivery: A bad classifier or forwarding mistake could suppress or misrepresent visible tool-failure progress across bundled channel messages.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body includes after-fix terminal proof from a real clean rg no-match passed through the production classifier and Slack progress formatter, showing No matches found instead of exit-code failure wording.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix terminal proof from a real clean rg no-match passed through the production classifier and Slack progress formatter, showing No matches found instead of exit-code failure wording.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR forwards the same No matches found command-output progress rendering into Telegram-visible progress, which is easy to demonstrate in a short Telegram Desktop proof.
Evidence reviewed

PR surface:

Source +291, Tests +611. Total +902 across 22 files.

View PR surface stats
Area Files Added Removed Net
Source 14 303 12 +291
Tests 8 618 7 +611
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 22 921 19 +902

What I checked:

  • Live PR state: GitHub reports head 772c4a68cfc75ac80171080ec3c39ad29bb4fd69, mergeable: CONFLICTING, and mergeStateStatus: DIRTY, so the exact merge result must be refreshed before landing. (772c4a68cfc7)
  • Current main behavior: Current main still renders nonzero command-output progress as exit ${input.exitCode} and has no benign no-result metadata path. (src/channels/streaming.ts:619, e9720c27fa69)
  • Latest release behavior: The latest release tag v2026.6.10 has the same nonzero exit-code rendering and lacks outcomeClassification/statusLabel, so the central behavior has not shipped. (src/channels/streaming.ts:617, aa69b12d0086)
  • Classifier shape: The PR classifier only downgrades completed empty-output direct rg exit 1 or final-segment xargs rg exit 123 cases to benign_no_result; other nonzero outcomes remain failure. (src/agents/bash-tools.exec-outcome-classification.ts:175, 772c4a68cfc7)
  • Plugin-facing metadata: The PR adds optional outcomeClassification and statusLabel fields to AgentCommandOutputEventData, making this an additive progress contract change rather than only a Slack formatter tweak. (src/infra/agent-events.ts:86, 772c4a68cfc7)
  • History provenance: Current command-output rendering and event payload lines are recently carried by Vincent Koc's current-main commit, while git log -S AgentCommandOutputEventData ties the structured command-output event surface to Peter Steinberger's earlier structured execution item events work. (src/infra/agent-events.ts:82, 996dccb19ca1)

Likely related people:

  • vincentkoc: Live PR metadata shows Vincent assigned, and current-main blame places recent command-output progress/event lines under commit 2ad2e4f2dc6cb11d19f2f5e09303986abf93b782. (role: recent area contributor and assignee; confidence: medium; commits: 2ad2e4f2dc6c, aa69b12d0086; files: src/channels/streaming.ts, src/infra/agent-events.ts, src/agents/embedded-agent-subscribe.handlers.tools.ts)
  • steipete: git log -S AgentCommandOutputEventData points to feat(agents): add structured execution item events, the event contract this PR extends. (role: introduced structured event surface; confidence: medium; commits: 996dccb19ca1; files: src/infra/agent-events.ts, src/agents/embedded-agent-subscribe.handlers.tools.ts, src/auto-reply/reply/agent-runner-execution.ts)
  • mycarrysun: The merged Slack progress PR fix(slack): keep one draft message in progress mode #85612 touched the same Slack progress draft surface and is relevant adjacent ownership context. (role: adjacent Slack progress contributor; confidence: medium; commits: 63d0c1d513eb, 8286d3619272; files: extensions/slack/src/monitor/message-handler/dispatch.ts, extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.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.

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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 218020d701

ℹ️ About Codex in GitHub

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

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

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

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

Comment thread src/agents/bash-tools.exec-outcome-classification.ts Outdated
@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 22, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. labels May 22, 2026
@clawsweeper

clawsweeper Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

✨ Hatched: 🥚 common Sunspot Crabkin

Hatch command

Comment @clawsweeper hatch when this PR is hatchable.

Hatchability rules:

  • Merged PRs are hatchable.
  • Open PRs are hatchable when they are status: 👀 ready for maintainer look, status: 🚀 automerge armed, or labeled clawsweeper:automerge.
  • Closed unmerged PRs are hatchable only when one of those hatchable labels is still present in the durable record.

Rarity: 🥚 common.
Trait: polishes edge cases.
Image traits: location proof lagoon; accessory commit compass; palette plum, gold, and soft gray; mood proud; pose sitting proudly on a smooth stone; shell soft speckled shell; lighting gentle morning glow; background miniature CI buoys.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Sunspot Crabkin in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • Hatchability usually comes from sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness. A merged PR is already final, so merge makes the egg hatchable independently.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

@social5h3ll

social5h3ll commented May 22, 2026

Copy link
Copy Markdown

Hey @kesslerio / @clawsweeper hatch - I've implemented an improved version of this feature at social5h3ll/openclaw#1 that fixes a NULL dereference bug in the original implementation and keeps the classifier strictly narrow (only rg exit 1 and xargs-rg exit 123 patterns qualify as benign).

The key improvement: readExecCommandFromArgs was called with startData?.args when startData can be undefined, causing crashes in tests and edge cases. Fixed by making the parameter optional.

All 110 tests pass across the 4 relevant test suites. Happy to close this PR and fold the changes in if preferred, or keep as a reference implementation.

@social5h3ll

Copy link
Copy Markdown

Heads up — I've moved the implementation to a fresh PR with the narrow ripgrep-only classifier: #85498.

Key fixes from our earlier closed attempt:

  • Classifier is now conservative: only direct rg exit 1 and xargs-wrapped rg exit 123 qualify as benign_no_result
  • No broader exit-code-1 softening
  • PR is rebased on latest main and mergeable

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels May 22, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 22, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 22, 2026
@openclaw-barnacle openclaw-barnacle Bot added the scripts Repository scripts label May 22, 2026
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels May 22, 2026
@kesslerio

Copy link
Copy Markdown
Contributor Author

Rebased this PR onto current origin/main and resolved the merge conflicts.

Changes in this refresh:

  • Kept the new shared channel streaming location (src/channels/streaming.ts) and left src/plugin-sdk/channel-streaming.ts as the compatibility shim.
  • Carried the benign rg no-result classification through command-output progress for Slack, Discord, Matrix, MS Teams, and Telegram.
  • Applied the source-side fix so terminal command item summaries render No matches found for benign no-result commands instead of leaking the raw (Command exited with code 123) footer.
  • Added/kept the full Slack regression where the same progress draft receives both the command item event and the command-output event.
  • Hardened the Windows Node fallback helper while rebasing, including native Windows toolcache path normalization, non-empty Node download version resolution, and env-var based Expand-Archive invocation.

Local verification on head c157ff29db56e98da6b490cc2dce9d54fa84b661:

pnpm test \
  src/agents/bash-tools.exec-outcome-classification.test.ts \
  src/agents/embedded-agent-subscribe.handlers.tools.test.ts \
  src/plugin-sdk/channel-streaming.test.ts \
  extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts \
  test/scripts/setup-pnpm-store-cache-ensure-node.test.ts

pnpm check:test-types
pnpm lint --threads=8
pnpm exec oxfmt --check --threads=1 \
  .github/actions/setup-pnpm-store-cache/ensure-node.sh \
  extensions/discord/src/monitor/message-handler.process.ts \
  extensions/matrix/src/matrix/monitor/handler.ts \
  extensions/msteams/src/reply-dispatcher.ts \
  extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts \
  extensions/slack/src/monitor/message-handler/dispatch.ts \
  extensions/telegram/src/bot-message-dispatch.ts \
  src/agents/bash-tools.exec-outcome-classification.test.ts \
  src/agents/bash-tools.exec-outcome-classification.ts \
  src/agents/embedded-agent-subscribe.handlers.tools.test.ts \
  src/agents/embedded-agent-subscribe.handlers.tools.ts \
  src/auto-reply/get-reply-options.types.ts \
  src/auto-reply/reply/agent-runner-execution.ts \
  src/channels/streaming.ts \
  src/plugin-sdk/channel-streaming.test.ts \
  test/scripts/setup-pnpm-store-cache-ensure-node.test.ts

All passed locally. CI is rerunning on the refreshed head now.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 27, 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:

@kesslerio

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Current head 1e24f832d68e5fe2149466bd0513063df813bbf4 is green in CI. I also removed the unrelated CI Node setup-helper scope from this PR, leaving the diff focused on benign command-result classification/progress rendering. The only extra non-feature change is the timeout bump for two existing long-running iMessage image-root tests that were repeatedly timing out in the required agents shard; focused local proof is noted in the PR body.

@clawsweeper

clawsweeper Bot commented May 27, 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:

@kesslerio

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Addressed the two P2 findings from the latest review on head e122fbe94ba865cf8d32039c136ec2732e250088:

  • direct reply suppression now ignores outcomeClassification: "benign_no_result" command outputs even when exitCode is 1/123
  • queued follow-up suppression now does the same
  • added focused direct-reply and queued-follow-up regressions proving benign no-result progress does not suppress later real tool-error warnings

Validation run locally:

  • pnpm test src/auto-reply/reply/dispatch-from-config.test.ts -t "benign no-result progress"
  • pnpm test src/auto-reply/reply/followup-runner.test.ts -t "benign no-result progress"
  • pnpm test src/auto-reply/reply/dispatch-from-config.test.ts src/auto-reply/reply/followup-runner.test.ts
  • pnpm test src/agents/bash-tools.exec-outcome-classification.test.ts src/agents/embedded-agent-subscribe.handlers.tools.test.ts src/plugin-sdk/channel-streaming.test.ts extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts
  • pnpm exec oxfmt --check --threads=1 src/auto-reply/reply/dispatch-from-config.ts src/auto-reply/reply/dispatch-from-config.test.ts src/auto-reply/reply/followup-runner.ts src/auto-reply/reply/followup-runner.test.ts
  • git diff --check origin/main

@clawsweeper

clawsweeper Bot commented May 27, 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:

@kesslerio

Copy link
Copy Markdown
Contributor Author

CI refresh note for head 772c4a68cfc75ac80171080ec3c39ad29bb4fd69:

  • merged current origin/main into the PR branch after main advanced
  • refreshed the generated diffs viewer runtime asset so pnpm build:ci-artifacts leaves the tree clean
  • reproduced the prior red build-artifacts failure mode locally: gateway-watch failed when the artifact build left extensions/diffs/assets/viewer-runtime.js dirty
  • verified locally after the generated asset refresh:
    • pnpm build:ci-artifacts
    • node scripts/check-gateway-watch-regression.mjs --skip-build --ready-timeout-ms 5000
    • pnpm test src/auto-reply/reply/dispatch-from-config.test.ts src/auto-reply/reply/followup-runner.test.ts
    • pnpm test src/agents/bash-tools.exec-outcome-classification.test.ts src/agents/embedded-agent-subscribe.handlers.tools.test.ts src/plugin-sdk/channel-streaming.test.ts extensions/slack/src/monitor/message-handler/dispatch.preview-fallback.test.ts -t "benign no-result|rg no-match|command item|command-output|No matches"
    • pnpm exec oxfmt --check --threads=1 src/auto-reply/reply/dispatch-from-config.ts src/auto-reply/reply/dispatch-from-config.test.ts src/auto-reply/reply/followup-runner.ts src/auto-reply/reply/followup-runner.test.ts
    • git diff --check origin/main

CI is running again now on the refreshed head.

@BingqingLyu

This comment was marked as spam.

@openclaw-barnacle

Copy link
Copy Markdown

This assigned pull request has been automatically marked as stale after being open for 27 days.
Please add updates or it will be closed.

@kesslerio

Copy link
Copy Markdown
Contributor Author

Closing this PR. During reassessment (2026-07-02), the branch is 10,709 commits behind main and CI (build-artifacts) is failing. More fundamentally, main has re-architected the progress/draft rendering path this PR hooks into: the outcomeClassification/statusLabel fields this PR adds to the Slack dispatch and channel-streaming have been replaced by the ChannelProgressDraftLine / resolveChannelProgressDraftConfig system (buildChannelProgressDraftLine, createChannelProgressDraftGate, mergeChannelProgressDraftLine). The files this PR modifies (pi-embedded-subscribe.handlers.tools.ts, bash-tools.exec-outcome-classification.ts, exec-outcome-classification-types.ts) were renamed or removed on main. The feature intent (soften benign search no-result progress) is still not shipped on main, but landing it now requires a rewrite against the new ChannelProgressDraftLine API rather than a rebase. I'll file a fresh PR if I reimplement against the new system. Thanks to the reviewers who looked at the earlier iteration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling channel: discord Channel integration: discord channel: matrix Channel integration: matrix channel: msteams Channel integration: msteams channel: slack Channel integration: slack channel: telegram Channel integration: telegram mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. 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: L stale Marked as stale due to inactivity status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants