mirror of
https://github.com/openclaw/openclaw.git
synced 2026-10-03 17:53:39 +00:00
## What Problem This Solves Fixes progress messages left above the final answer when a requester hands its card to subagents or sends its final through the message tool. ## User Impact A confirmed final reply retires its temporary progress message. Failed or uncertain delivery, silent internal consumption, and further delegated work retain their existing progress ownership. The final answer is not retried when cosmetic cleanup fails. ## Why This Change Was Made The core task presenter already owned the adopted message receipt, but batch retirement only stopped future updates. It now waits for pending edits and removes that exact message after positive source-final delivery evidence and a terminal current batch. Private completion processing preserves final-delivery evidence without exposing its content. Telegram uses the existing observed-delivery callback for foreground drafts and carries the host's live guard through its existing delete action. No new configuration, schema, task framework, or provider harness is introduced. The internal-notification reply-policy fix is separate. ## Evidence - Negative controls reproduced both retained foreground progress and missing adopted-card retirement. - Focused task lifecycle, registered-channel receipt/authority, announcement, Telegram finalization, and physical HTTP mutation suites passed. The HTTP regression also failed before Telegram forwarded the deletion guard; active deletion now succeeds and revoked authority prevents the request. - Real Telegram Test Server userbot against a disposable Gateway with real OpenAI `gpt-5.4`: eight model requests returned HTTP 200; the original progress message received six edits showing the child running and succeeding; a separate final arrived at 44.465 seconds; the original progress message was deleted at 46.403 seconds. No later message or edit appeared in the three-minute recording. No mock inference calls occurred. - The real-provider proof ran with the independent reply-policy correction present. The changes affect disjoint files and are retained in separate branches; proof was not rerun solely for the split. - Test Gateway, credential file, and credential lease were cleaned up. No production Gateway was modified. - Independent P0/P1 review: scoped clean. - Final local lint was blocked by the declaration-isolation guard resolving a dependency through the ancestor checkout's install. The guard was not bypassed and the ancestor install was not changed. Hosted CI must provide the clean-checkout static-check verdict. Measured local wall times (Node 24/macOS, including setup and imports; not estimates of incremental test cost): | Selected suite/group | Tests | Wall time | | --- | ---: | ---: | | Task progress registered-channel runtime | 43 | 26.99 s | | Task progress lifecycle and authority | 51 | 26.05 s | | Subagent announce delivery | 323 | 15.95 s | | Telegram progress/finalization/fallback group | 53 | 22.24 s | | Telegram action runtime | 145 | 20.46 s | | Telegram physical HTTP and action-contract group | 57 | 28.72 s | Recorded hosted job wall times for this head, including runner setup: [production typecheck](https://github.com/openclaw/openclaw/actions/runs/35565702748/job/106227222096) passed in 254 s; [runtime topology/architecture](https://github.com/openclaw/openclaw/actions/runs/35565702748/job/106227222279) passed in 165 s. These completed-job measurements are not a claim that the entire CI run had finished at that snapshot. Before/after screenshots in both chat and GitHub were explicitly waived for this PR. The real Telegram userbot recording is the behavior evidence; it is not presented as visual screenshot verification. Co-authored-by: Ayaan Zaidi <hi@obviy.us> |
||
|---|---|---|
| .. | ||
| active-memory | ||
| model-providers | ||
| qa-e2e-automation | ||
| active-memory.md | ||
| agent-bindings.md | ||
| agent-loop.md | ||
| agent-runtimes.md | ||
| agent-workspace.md | ||
| agent.md | ||
| architecture.md | ||
| compaction.md | ||
| context-engine.md | ||
| context.md | ||
| decision-models.md | ||
| delegate-architecture.md | ||
| dreaming.md | ||
| experimental-features.md | ||
| features.md | ||
| main-session.md | ||
| managed-worktrees.md | ||
| mantis-slack-desktop-runbook.md | ||
| mantis.md | ||
| markdown-formatting.md | ||
| memory-architecture.md | ||
| memory-builtin.md | ||
| memory-honcho.md | ||
| memory-provenance.md | ||
| memory-search.md | ||
| memory.md | ||
| messages.md | ||
| model-failover.md | ||
| model-providers.md | ||
| models.md | ||
| multi-agent.md | ||
| multi-user.md | ||
| oauth.md | ||
| parallel-specialist-lanes.md | ||
| personal-agent-benchmark-pack.md | ||
| presence.md | ||
| progress-drafts.md | ||
| qa-e2e-automation.md | ||
| queue-steering.md | ||
| queue.md | ||
| retry.md | ||
| session-attachment.md | ||
| session-pruning.md | ||
| session-search.md | ||
| session-state.md | ||
| session-tool.md | ||
| session.md | ||
| soul.md | ||
| standing-intents.md | ||
| streaming.md | ||
| subagent-yield-handoff.md | ||
| system-prompt.md | ||
| timezone.md | ||
| typebox.md | ||
| typing-indicators.md | ||
| usage-tracking.md | ||
| user-model.md | ||