Skip to content

fix(tasks): deliver ACP completions to bound Discord threads#89279

Merged
clawsweeper[bot] merged 1 commit into
openclaw:mainfrom
anyech:fix/bound-thread-acp-terminal-delivery-20260602
Jun 19, 2026
Merged

fix(tasks): deliver ACP completions to bound Discord threads#89279
clawsweeper[bot] merged 1 commit into
openclaw:mainfrom
anyech:fix/bound-thread-acp-terminal-delivery-20260602

Conversation

@anyech

@anyech anyech commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes #84022 by delivering successful parent-review ACP task terminal updates to the explicitly bound Discord thread that originated the request.

This is a narrow replacement shape after #86672 and #88251 were closed:

  • does not reopen or reuse fix(discord): allow marked room_event final fallback delivery #86672;
  • does not change broad room_event suppression behavior;
  • does not add a Discord-owned inbound/run timeout;
  • does not use Promise.race or leave the underlying ACP run alive in the background;
  • only permits direct visible terminal delivery when the task requester origin is an explicit Discord bound thread target.

Behavior change

Before:

  • delegated ACP parent-review tasks owned by a Discord channel/group session were always routed back through the requester session;
  • for the Discord room events can suppress final assistant replies into transcript-only mode #84022 thread-bound ACP shape, the ACP/session transcript could contain the terminal answer while the Discord thread stayed silent;
  • task delivery could remain session_queued even though the originating Discord thread was explicit and deliverable.

After:

  • existing parent-session routing is preserved for ordinary group/channel ACP completions;
  • a successful ACP parent-review terminal update is delivered directly only when all of these are true:
    • requester origin channel is discord;
    • requester origin target starts with channel:;
    • requester origin has a concrete threadId;
    • the channel is deliverable.

The direct visible text uses the parent-review wording (Background task ready for review...) so the thread receives a terminal update without incorrectly implying the child result was fully verified/finalized by the parent.

Real behavior proof

  • Behavior addressed: A delegated ACP parent-review completion with an explicit Discord bound-thread requester origin sends the terminal update directly to that threadId; non-bound/non-qualifying paths remain queued through the parent session.

  • Real setup tested: Disposable checkout of PR branch anyech/openclaw:fix/bound-thread-acp-terminal-delivery-20260602 under tmp/github-open-work/real-proof-20260603T073207Z/pr-89279. Two non-production checks were run: (1) the focused task-registry runtime slice for the real ACP terminal delivery path with synthetic delivery runtime, and (2) a one-off harness over the real ACP spawn bootstrap delivery-plan code with synthetic Discord binding metadata. No production Gateway/config/runtime/state or private deployment proof was used.

  • Exact steps or command run after this patch: Terminal commands run in the disposable checkout were pnpm install --frozen-lockfile --ignore-scripts, node scripts/run-vitest.mjs run --config test/vitest/vitest.tasks.config.ts src/tasks/task-registry.test.ts -t 'bound Discord thread|without an explicit bound Discord thread|routes .* ACP completion through the parent session|delivers non-delegated ACP completion' --reporter=verbose --pool=forks --maxWorkers=1, and node --import tsx proof-89279-direct.ts; full command transcript is in review/real-proof-build-20260603T073207Z/messaging/exact-commands-used.txt.

  • Evidence after fix: Terminal output / runtime log excerpts from review/real-proof-build-20260603T073207Z/messaging/evidence/proof-89279-task-registry.log and review/real-proof-build-20260603T073207Z/messaging/evidence/proof-89279-direct.log:

    ✓ delivers delegated ACP completion directly to an explicitly bound Discord thread
    ✓ keeps delegated ACP completion queued without an explicit bound Discord thread ('missing-thread')
    ✓ keeps delegated ACP completion queued without an explicit bound Discord thread ('non-channel-target')
    ✓ keeps delegated ACP completion queued without an explicit bound Discord thread ('non-discord-channel')
    ✓ routes 'room channel' ACP completion through the parent session
    ✓ routes 'group' ACP completion through the parent session
    ✓ routes 'group topic' ACP completion through the parent session
    ✓ routes 'legacy Discord channel' ACP completion through the parent session
    ✓ routes 'legacy WhatsApp group' ACP completion through the parent session
    Test Files  1 passed (1)
    Tests       10 passed | 68 skipped (78)
    
    {
      "boundSession": {"channel":"discord","to":"channel:thread-bound-child","accountId":"acct-proof","threadId":"thread-bound-child","deliver":true},
      "nonBoundRun": {"deliver":false},
      "streamedRun": {"deliver":false}
    }
  • Observed result after fix: The bound Discord ACP path delivers to the explicit synthetic threadId and marks/sends the direct update in the task registry; missing thread, non-channel target, non-Discord, and ordinary parent-session ACP routes stay session_queued / deliver:false and do not send direct visible thread output.

  • What was not tested: No live production Gateway, live Discord workspace, real bot token, or private deployment state was used. The outbound provider/transport was substituted at the boundary to keep proof non-production and sanitized. The one-off ACP spawn harness temporarily exported an internal helper only inside the disposable checkout and restored the file afterward; no code was pushed.

@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 2, 2026
@clawsweeper

clawsweeper Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Codex review: passed. Reviewed June 19, 2026, 2:30 AM ET / 06:30 UTC.

Summary
The branch adds a bounded task-registry predicate and tests so successful delegated ACP parent-review completions with a Discord channel target and threadId send the parent-review terminal message directly to that thread.

PR surface: Source +24, Tests +142. Total +166 across 2 files.

Reproducibility: yes. at source level. Current main queues successful ACP parent-review completions through the requester session for channel/group owner keys, and the linked canonical issue includes matching Discord thread-bound ACP evidence.

Review metrics: 1 noteworthy metric.

  • Visible delivery route: 1 direct-send exception added. The diff changes one ACP parent-review terminal route from session queueing to visible Discord thread delivery, which maintainers should notice before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #84022
Summary: This PR is the focused candidate fix for the bound Discord thread ACP slice of the canonical Discord transcript-only delivery issue; broader room_event policy work remains partially overlapping.

Members:

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

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

  • none.

Risk before merge

  • [P1] Merging intentionally changes one successful ACP parent-review terminal path from requester-session queueing to direct visible Discord thread delivery.
  • [P1] The exception is Discord-specific inside core task-registry logic; the maintainer automerge command is a positive acceptance signal, but this remains a message-delivery policy boundary.
  • [P1] The PR body closes Discord room events can suppress final assistant replies into transcript-only mode #84022, which also tracks broader room_event visibility policy work, so that broader work should stay explicitly tracked if this narrow fix lands.

Maintainer options:

  1. Accept Narrow Bound-Thread Delivery (recommended)
    Maintainers can merge this exact head as the intended narrow exception for successful ACP parent-review completions with an explicit Discord thread binding.
  2. Keep Broader Issue Scope Explicit
    Before or immediately after merge, maintainers can ensure the broader room_event visibility policy remains tracked outside this narrow bound-thread ACP fix.
  3. Refactor To Generic Thread Capability
    If core should not special-case Discord, pause this PR and replace the predicate with a generic thread-capable delivery contract.

Next step before merge

  • No automated repair is needed; the PR is already opted into automerge and the remaining gates are exact-head checks, mergeability, and maintainer risk acceptance.

Security
Cleared: The diff only changes task delivery logic and tests; it does not add dependencies, workflows, scripts, lockfiles, permissions, credentials handling, or supply-chain-sensitive surfaces.

Review details

Best possible solution:

Land the exact head if deterministic merge gates pass, while preserving the broader #84022 room_event policy work through an open tracker if GitHub closes it.

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

Yes at source level. Current main queues successful ACP parent-review completions through the requester session for channel/group owner keys, and the linked canonical issue includes matching Discord thread-bound ACP evidence.

Is this the best way to solve the issue?

Mostly yes. The task registry has the terminal outcome, owner, requesterOrigin, and idempotency context needed for this narrow fix; a generic thread-capable channel contract would be cleaner only if maintainers reject the Discord-specific exception.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add status: 🚀 automerge armed: This PR is in ClawSweeper's automerge lane. Sufficient (logs): The latest proof comment shows a current-head task-registry lifecycle path sending the terminal update through a real Discord sandbox send with redacted IDs and an observed delivered marker.
  • remove status: 👀 ready for maintainer look: Current PR status label is status: 🚀 automerge armed.

Label justifications:

  • P2: This is a bounded Discord/ACP message-delivery bug fix with limited blast radius rather than a core runtime outage.
  • merge-risk: 🚨 message-delivery: The PR changes where a terminal ACP parent-review message is delivered, which can alter visible Discord thread behavior and parent-session wakeups.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 🚀 automerge armed: This PR is in ClawSweeper's automerge lane. Sufficient (logs): The latest proof comment shows a current-head task-registry lifecycle path sending the terminal update through a real Discord sandbox send with redacted IDs and an observed delivered marker.
  • proof: sufficient: Contributor real behavior proof is sufficient. The latest proof comment shows a current-head task-registry lifecycle path sending the terminal update through a real Discord sandbox send with redacted IDs and an observed delivered marker.
Evidence reviewed

PR surface:

Source +24, Tests +142. Total +166 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 1 28 4 +24
Tests 1 143 1 +142
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 171 5 +166

What I checked:

  • Current main behavior: Current main still routes successful ACP parent-review terminal updates through the requester session when shouldUseParentReviewTaskTerminalMessage is true, so the requested direct bound-thread delivery is not implemented on main. (src/tasks/task-registry.ts:1345, 5d6ac2308657)
  • PR implementation: The PR adds canDeliverParentReviewTaskToBoundDiscordThread, gated on parent-review terminal message, discord channel, channel: target, concrete threadId, and normal deliverable-origin checks. (src/tasks/task-registry.ts:1245, 04ad66b23dc3)
  • PR delivery call: The direct-send path passes the preserved requester channel, target, accountId, threadId, parent-review message text, and mirror metadata to sendMessage. (src/tasks/task-registry.ts:1382, 04ad66b23dc3)
  • Regression coverage: The PR tests direct delivery to an explicit Discord thread and keeps missing-thread, non-channel target, and non-Discord parent-review completions queued through the session path. (src/tasks/task-registry.test.ts:1340, 04ad66b23dc3)
  • Discord thread contract: Discord outbound already resolves a supplied threadId to channel:, matching the PR's use of the parent channel plus threadId for delivery. (extensions/discord/src/outbound-send-context.ts:29, 5d6ac2308657)
  • Documented ACP expectation: ACP docs say bound follow-up messages route to the ACP session and ACP output is delivered back to the same channel/thread/topic, which supports classifying this as a bug fix. Public docs: docs/tools/acp-agents.md. (docs/tools/acp-agents.md:635, 5d6ac2308657)

Likely related people:

  • 100menotu001: Authored commit 21244d9, which added the parent-review terminal message helper and adjusted task-registry completion routing around delegated ACP completions. (role: introduced behavior; confidence: high; commits: 21244d979334; files: src/tasks/task-executor-policy.ts, src/tasks/task-registry.ts, src/tasks/task-registry.test.ts)
  • funmerlin: Authored commit 16c27c1, which introduced shouldRouteCompletionThroughRequesterSession and the group/channel requester-session routing policy this PR narrows. (role: introduced routing policy; confidence: high; commits: 16c27c145958; files: src/auto-reply/reply/completion-delivery-policy.ts, src/tasks/task-registry.ts)
  • steipete: Recent task-registry and Discord outbound history ties steipete to requester attribution and thread-capable outbound delivery surfaces relevant to this route. (role: feature-history owner; confidence: medium; commits: 1fef20c96bdc, c9a0f03dd734; files: src/tasks/task-registry.ts, extensions/discord/src/outbound-adapter.ts)
  • vincentkoc: Recent commit history touches the central task delivery files, and the same account provided the current automerge signal on this PR. (role: recent area contributor; confidence: medium; commits: 2e27a37791c9; files: src/tasks/task-registry.ts, src/tasks/task-executor-policy.ts, src/auto-reply/reply/completion-delivery-policy.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. 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 2, 2026
@openclaw-barnacle openclaw-barnacle Bot added triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels Jun 3, 2026
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Jun 3, 2026
@anyech

anyech commented Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

proof: override request

I rechecked this proof blocker with a disposable checkout only. I did not run live Gateway/Discord delivery because the merge-relevant behavior is an external bound-thread delivery route and should not use a private/operator deployment as public proof. In the disposable setup, the focused task-registry regression tests passed and an additional runtime-seam check confirmed the narrow bound Discord thread exception, direct threadId delivery, and the non-bound parent-review guard that remains session-queued.

Deterministic non-production coverage observed:

  • focused task-registry tests: 1 file passed, 10 tests passed
  • runtime-seam check: delivery runtime override seam, bound Discord predicate, direct thread delivery, and non-bound guard all present

Since the remaining evidence would require a real external messaging route, is maintainer proof: override acceptable for this PR?

@openclaw-barnacle openclaw-barnacle Bot added triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels Jun 3, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Jun 3, 2026
@anyech

anyech commented Jun 13, 2026

Copy link
Copy Markdown
Contributor Author

Current-head non-production proof refresh for reviewers:

  • Current head: 04ad66b23dc3ef0ced004d91b00709d0bfd6fb5a.
  • Focused task-registry proof passed in a disposable checkout with synthetic OpenClaw home/config/state: 1 file passed, 10 tests passed, 68 skipped.
  • Covered the explicit bound Discord thread route and the non-bound/non-Discord guards that stay queued or parent-session routed.
  • No production Gateway, live Discord workspace/thread, bot token, or private runtime state was used.

The remaining fully-real proof would require exercising an external Discord/Gateway delivery route. Could a maintainer please decide whether this current-head non-production boundary proof is acceptable, or whether you want a maintainer-controlled live delivery run before merge?

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 13, 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:

@anyech

anyech commented Jun 14, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Behavior addressed:

  • Delegated ACP terminal completions should deliver directly to an explicitly bound Discord thread when requesterOrigin includes a Discord channel target plus threadId.
  • Without that explicit bound Discord thread, the completion should stay queued/parent-reviewed rather than leaking to an ambiguous outward target.

Real setup tested:

  • Current PR head source checkout.
  • Throwaway Discord sandbox thread approved for this proof run.
  • A temporary PR-head task-registry proof case executed the actual delegated ACP terminal completion path.
  • The proof case used the task registry lifecycle event path and replaced only the outbound sendMessage seam with a real Discord bot API send to the sandbox thread.
  • All channel/thread/message IDs, local paths, and token-bearing details are redacted here.

Exact steps or command run after this patch:

PROOF_TARGET='channel:<sandbox-thread>' \
PROOF_MARKER='89279-real-20260614T1057Z' \
node scripts/run-vitest.mjs run \
  --config test/vitest/vitest.tasks.config.ts \
  src/tasks/task-registry.test.ts \
  -t 'proof: delivers delegated ACP completion to real sandbox Discord thread'

Evidence after fix:

stdout: {"marker":"89279-real-20260614T1057Z","sandboxSend":{"to":"channel:<sandbox-thread>","messageId":"<redacted>","rawMessageIdLength":19}}
✓ proof: delivers delegated ACP completion to real sandbox Discord thread
Test Files  1 passed (1)
Tests       1 passed | 78 skipped (79)

Sanitized runtime evidence from the proof case:

{
  "marker": "89279-real-20260614T1057Z",
  "taskStatusAfterLifecycleEnd": "succeeded",
  "deliveryStatusAfterLifecycleEnd": "delivered",
  "sendMessageCall": {
    "channel": "discord",
    "to": "channel:<parent-channel>",
    "threadId": "<sandbox-thread>"
  },
  "visibleSandboxMessage": {
    "contains": "Background task ready for review: ACP background task",
    "containsMarker": true,
    "messageId": "<redacted-message-id>"
  }
}

Observed result after fix:

  • The PR-head delegated ACP lifecycle path marked the task succeeded and delivered.
  • The direct send call retained the parent channel plus explicit sandbox thread binding.
  • The sandbox thread received exactly the completion-style message containing the terminal summary marker.

What was not tested:

  • This was intentionally non-production. It did not restart or patch the live Gateway.
  • The proof used the PR-head task-registry harness plus a real Discord sandbox send, rather than the production Gateway process.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 14, 2026
@vincentkoc

Copy link
Copy Markdown
Member

/clownfish automerge

@openclaw-clownfish openclaw-clownfish Bot added clownfish:automerge Maintainer opted this Clownfish PR into bounded ClawSweeper-reviewed automerge clawsweeper:automerge Maintainer opted this PR into bounded ClawSweeper-reviewed automerge labels Jun 19, 2026
@openclaw-clownfish

Copy link
Copy Markdown
Contributor

Clownfish is on the reef for this PR. 🐠

I tagged clownfish:automerge and sent ClawSweeper over this exact head. If the sweep finds rough coral, failing checks, or needs-human, I will take another bounded repair lap and ask for a fresh review.

A maintainer can call /clownfish stop any time and I will drift this back to human review.

@clawsweeper clawsweeper Bot added status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane. and removed status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jun 19, 2026
@clawsweeper
clawsweeper Bot merged commit 5697ab8 into openclaw:main Jun 19, 2026
344 of 385 checks passed
@clawsweeper

clawsweeper Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

🦞✅
ClawSweeper merged this PR after the passing review.

Source: clawsweeper[bot]
Feedback: structured ClawSweeper verdict: pass (sha=04ad66b23dc3ef0ced004d91b00709d0bfd6fb5a)
Merge status: merged by ClawSweeper automerge
Merged at: 2026-06-19T06:31:43Z
Merge commit: 5697ab810e4f

What merged:

  • The branch adds a bounded task-registry predicate and tests so successful delegated ACP parent-review comple ... with a Discord channel target and threadId send the parent-review terminal message directly to that thread.
  • PR surface: Source +24, Tests +142. Total +166 across 2 files.
  • Reproducibility: yes. at source level. Current main queues successful ACP parent-review completions through ... annel/group owner keys, and the linked canonical issue includes matching Discord thread-bound ACP evidence.

Automerge notes:

  • No ClawSweeper repair was needed after automerge opt-in.

The automerge loop is complete.

Automerge progress:

  • 2026-06-19 06:31:07 UTC review passed 04ad66b23dc3 (structured ClawSweeper verdict: pass (sha=04ad66b23dc3ef0ced004d91b00709d0bfd6f...)
  • 2026-06-19 06:31:47 UTC merged 04ad66b23dc3 (merged by ClawSweeper automerge)

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 20, 2026
…w#89279)

Summary:
- The branch adds a bounded task-registry predicate and tests so successful delegated ACP parent-review comple ... with a Discord channel target and threadId send the parent-review terminal message directly to that thread.
- PR surface: Source +24, Tests +142. Total +166 across 2 files.
- Reproducibility: yes. at source level. Current main queues successful ACP parent-review completions through  ... annel/group owner keys, and the linked canonical issue includes matching Discord thread-bound ACP evidence.

Automerge notes:
- No ClawSweeper repair was needed after automerge opt-in.

Validation:
- ClawSweeper review passed for head 04ad66b.
- Required merge gates passed before the squash merge.

Prepared head SHA: 04ad66b
Review: openclaw#89279 (comment)

Co-authored-by: anyech <[email protected]>
cxbAsDev pushed a commit to cxbAsDev/openclaw that referenced this pull request Jun 23, 2026
…w#89279)

Summary:
- The branch adds a bounded task-registry predicate and tests so successful delegated ACP parent-review comple ... with a Discord channel target and threadId send the parent-review terminal message directly to that thread.
- PR surface: Source +24, Tests +142. Total +166 across 2 files.
- Reproducibility: yes. at source level. Current main queues successful ACP parent-review completions through  ... annel/group owner keys, and the linked canonical issue includes matching Discord thread-bound ACP evidence.

Automerge notes:
- No ClawSweeper repair was needed after automerge opt-in.

Validation:
- ClawSweeper review passed for head 04ad66b.
- Required merge gates passed before the squash merge.

Prepared head SHA: 04ad66b
Review: openclaw#89279 (comment)

Co-authored-by: anyech <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clawsweeper:automerge Maintainer opted this PR into bounded ClawSweeper-reviewed automerge clownfish:automerge Maintainer opted this Clownfish PR into bounded ClawSweeper-reviewed automerge 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: S status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Discord room events can suppress final assistant replies into transcript-only mode

2 participants