fix(agents): preserve pending subagent completion announces#94349
Conversation
|
@clawsweeper review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
Codex review: needs maintainer review before merge. Reviewed June 18, 2026, 7:11 PM ET / 23:11 UTC. Summary PR surface: Source -12, Tests +38. Total +26 across 2 files. Reproducibility: yes. at source level: current main and Review metrics: 1 noteworthy metric.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land the narrow consistency fix if maintainers accept accepted-status delivery credit for this branch, while leaving broader durable queue and session-state work to separate canonical follow-ups. Do we have a high-confidence way to reproduce the issue? Yes, at source level: current main and Is this the best way to solve the issue? Yes for the narrow reported branch: deleting the inconsistent pending-status failure case aligns plain completions with the existing pending direct/media behavior. A durable queue remains the safer broader design only if maintainers want stronger persistence semantics. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against bb44c5326ee2. Label changesLabel justifications:
Evidence reviewedPR surface: Source -12, Tests +38. Total +26 across 2 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
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
|
Signed-off-by: sallyom <[email protected]>
|
Merge-ready after the remaining queued CI completes. This is the best narrow fix for #93323: the PR fixes the concrete delivery bug where a non-terminal/accepted direct announce for a plain subagent completion was counted as failed delivery, consuming retry budget and losing the completion. The change keeps scope tight by removing only that failed-delivery branch and adding focused regression coverage. Will merge this narrow fix rather than broaden the PR now. The broader delivery/lifecycle cluster should stay follow-up work; widening this PR would mix a proven #93323 fix with less-bounded behavior and increase merge risk. Verification is clean: local focused tests passed, PR review/ClawSweeper state is clean, and Real Behavior Proof is sufficient. No backward-incompatible or breaking changes are expected; this only treats an already accepted/pending Gateway announce as accepted delivery instead of retryable failure. |
* 'main' of https://github.com/openclaw/openclaw: (82 commits) fix(e2e): validate chat tools body limit fix(e2e): honor chat tools body limit fix(e2e): validate chat tools timeout fix(e2e): give cleanup smoke build heap headroom fix(e2e): validate plugin lifecycle limits refactor(auto-reply): add lifecycle storage seams (#93685) fix: preserve pending subagent completion announces (#94349) fix(e2e): validate plugin log limits before setup fix(e2e): validate codex media timeout fix(e2e): validate fixture log limits fix(e2e): validate cleanup log limits fix(e2e): validate docker log limits fix(live): validate docker pids limits fix(e2e): validate docker pids limits test: fold channel message flows into qa e2e (#93174) fix(e2e): validate docker build limits Prevent Codex thread rotation from losing next-step context (#94093) fix(e2e): validate fixture cleanup interval fix(agents): correct claw-score validation workflow fix(e2e): validate log tail limits ...
Signed-off-by: sallyom <[email protected]>
Signed-off-by: sallyom <[email protected]>
* 'main' of https://github.com/openclaw/openclaw: (82 commits) fix(e2e): validate chat tools body limit fix(e2e): honor chat tools body limit fix(e2e): validate chat tools timeout fix(e2e): give cleanup smoke build heap headroom fix(e2e): validate plugin lifecycle limits refactor(auto-reply): add lifecycle storage seams (openclaw#93685) fix: preserve pending subagent completion announces (openclaw#94349) fix(e2e): validate plugin log limits before setup fix(e2e): validate codex media timeout fix(e2e): validate fixture log limits fix(e2e): validate cleanup log limits fix(e2e): validate docker log limits fix(live): validate docker pids limits fix(e2e): validate docker pids limits test: fold channel message flows into qa e2e (openclaw#93174) fix(e2e): validate docker build limits Prevent Codex thread rotation from losing next-step context (openclaw#94093) fix(e2e): validate fixture cleanup interval fix(agents): correct claw-score validation workflow fix(e2e): validate log tail limits ...
Signed-off-by: sallyom <[email protected]>
Summary
Fixes #93323 by treating non-terminal direct announce responses as accepted delivery for subagent completion handoffs.
Previously
subagent-announce-deliverymappedaccepted/started/in_flightgateway responses todelivered: falsefor the plain completion-message branch, which let the registry retry budget exhaust and abandon the announce. The fix removes that inconsistent special case so pending direct announces returndelivered: trueconsistently with the existing media completion path.Root cause
sendSubagentAnnounceDirectlyalready classifies gatewayaccepted,started, andin_flightas non-terminal pending states. For completion handoffs with no media and no required message-tool delivery, it nevertheless returnedcompletion_handoff_pendingas a failed delivery. That turned a healthy accepted gateway run into a retryable/final failure at the registry layer.Changes
completion_handoff_pendingfailure branch for non-terminal direct announce responses.Real behavior proof
Behavior addressed: Subagent completion announce delivery no longer treats a non-terminal gateway response as a failed delivery when there are no media URLs and no message-tool delivery requirement.
Real environment tested: Direct AWS Crabbox on Linux, provider
aws, leasecbx_7b5a3efee072(violet-shrimp), runrun_ee5d6664b84e, portal https://crabbox.openclaw.ai/portal/runs/run_ee5d6664b84e. The run synced the production-only PR head021466b57025fef7e1b7677ef9cfc945b650c750and ran the QA Lab scenario against a real Gateway child withprovider-mode live-frontier,openai/gpt-5.5,qa-channel, and fast mode enabled.Exact steps or command run after this patch:
Evidence after fix:
Observed result after fix: The live QA scenario ran through QA Lab, a real Gateway child,
qa-channel, and live OpenAI frontier model routing. The parent launched a native subagent, yielded, and the requester received the child completion markerQA-SUBAGENT-DIRECT-FALLBACK-OKthrough the completion fallback path. The focused regression still covers the exact pending direct-announce branch by asserting a gatewayacceptedresponse now reportsdelivered: trueand does not trigger direct fallback delivery for the plain completion-handoff branch.What was not tested: Mantis Telegram proof remains unreliable for this PR, and this does not claim to close the broader delivery-loss trackers in #44925 or #52249. The live proof targets the implicated Gateway/subagent completion path for #93323.
Additional verification
Notes
No agent transcript is included in this PR body.