Skip to content

feat(tasks): explain stale-running maintenance decisions#84691

Merged
galiniliev merged 5 commits into
openclaw:mainfrom
efpiva:efpiva/task-maintenance-stale-running-diagnostics
May 21, 2026
Merged

feat(tasks): explain stale-running maintenance decisions#84691
galiniliev merged 5 commits into
openclaw:mainfrom
efpiva:efpiva/task-maintenance-stale-running-diagnostics

Conversation

@efpiva

@efpiva efpiva commented May 20, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR adds task-maintenance diagnostics explaining why stale running tasks are retained or would be reconciled.

This is intentionally independent from the session-store cache PR stack. It addresses the next memory/operations pressure point that became visible after the session-store clone storm was fixed: thousands of retained task records and several stale-running task/task-flow findings.

Changes:

  • Add getTaskRegistryMaintenanceDiagnostics() output for stale running tasks.
  • Include per-task decisions/reasons such as:
    • backing_session_present
    • backing_session_missing
    • active_cli_run
    • cron_runtime_not_authoritative
    • lost_grace_pending
  • Surface diagnostics in openclaw tasks maintenance --json.
  • Reuse durable cron recovery when building diagnostics so recoverable stale cron tasks are not reported as stale-running retained/reconcile candidates.

Real behavior proof

  • Behavior or issue addressed: make openclaw tasks maintenance --json explain why stale running tasks are retained or would be reconciled, instead of only showing stale-running audit counts with zero maintenance changes.

  • Real environment tested: live CodeClaw/OpenClaw codeclaw-triage deployment with the real task registry and session stores; this is the same production-like setup used for the memory RCA.

  • Exact steps or command run after this patch: inspected the live task registry with openclaw tasks list --json, openclaw tasks audit --json, and openclaw tasks maintenance --json, then validated the new diagnostic shape in tests including durable cron recovery cases.

  • Evidence after fix: live task registry output and the new diagnostic shape are below.

    openclaw tasks list --json / audit / maintenance summary from live codeclaw-triage:
    total tasks: 3356
    running: 12
    terminal: 3344
    succeeded: 2744
    failed: 300
    lost: 275
    timed_out: 25
    stale_running findings: 9
    missing_cleanup: 0
    
    openclaw tasks maintenance --json diagnostics sample after this change:
    decision=retained
    reason=backing_session_present
    runtime=subagent
    status=running
    childSessionKey=agent:generalist:subagent:...
    runId=...
    
  • Observed result after fix: the diagnostics make retained stale-running work explainable, e.g. a stale subagent task reports decision="retained", reason="backing_session_present", childSessionKey, and runId; recoverable cron tasks are excluded from stale-running diagnostics and counted as recovered by maintenance preview.

  • What was not tested: this PR does not prune or compact task registry records and does not claim task-registry memory is fixed; it adds operator diagnostics so a follow-up retention/reconciliation policy can be reviewed safely.

Validation

Worktree:

/home/edpiva/repos/openclaw-worktrees/task-maintenance-diagnostics

TDD note:

  • Added a failing regression expectation for stale cron diagnostics: a cron task recoverable from durable run logs should be counted as recovered by maintenance preview and should not also appear in stale-running diagnostics.
  • The test failed before the fix and passed after reusing durable cron recovery in diagnostics.

Commands/results:

node scripts/run-vitest.mjs \
  src/commands/tasks.test.ts \
  src/tasks/task-registry.test.ts \
  src/tasks/task-registry.maintenance.issue-60299.test.ts \
  --run

Test Files 3 passed
Tests 89 passed
corepack pnpm build
PIPE_EXIT:0
git diff --check
# no output
codex review --base origin/main
# first pass found P2: diagnostics did not account for durable cron recovery
# fixed by reusing cron recovery context in diagnostics
# final pass EXIT:0 — no actionable correctness issues

Evidence logs:

/tmp/openclaw-session-store-evidence/split-prs/pr3-targeted-tests-after-codex-fix.log
/tmp/openclaw-session-store-evidence/split-prs/pr3-pnpm-build-after-codex-fix.log
/tmp/openclaw-session-store-evidence/split-prs/pr3-codex-review-after-fix.log

@openclaw-barnacle openclaw-barnacle Bot added commands Command implementations size: S triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 20, 2026
@clawsweeper

clawsweeper Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

Workflow note: Future ClawSweeper reviews update this same comment in place.

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.

Summary
The PR adds JSON-only stale-running task maintenance diagnostics plus regression tests for backing sessions, session-sweep ordering, cron recovery, and wedged subagent decisions.

Reproducibility: not applicable. as a strict bug reproduction; this is an additive diagnostics feature. Source inspection confirms current main lacks the JSON diagnostics and the PR body supplies live output showing the intended after-patch diagnostic fields.

PR rating
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Summary: The PR has strong real-environment proof and a focused implementation with no blocking findings from this review.

Rank-up moves:

  • none
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.

Real behavior proof
Sufficient (live_output): The PR body includes copied live output from a production-like task registry showing the new maintenance diagnostic fields and observed after-fix behavior; private identifiers are partially redacted.

Risk before merge

  • This read-only review did not run the targeted tests or build; merge should still depend on CI or maintainer verification for the current PR head.

Maintainer options:

  1. Decide the mitigation before merge
    Land the additive JSON diagnostics after normal CI/current-head verification, keeping text output lazy and leaving actual task retention or pruning policy to a follow-up decision.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge
No repair lane is needed because the latest PR head resolves the prior focused blocker and no new actionable patch defect was found.

Security
Cleared: The diff adds local CLI diagnostics and tests without new dependencies, CI/workflow changes, network access, credential handling, or broader execution surfaces.

Review details

Best possible solution:

Land the additive JSON diagnostics after normal CI/current-head verification, keeping text output lazy and leaving actual task retention or pruning policy to a follow-up decision.

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

Not applicable as a strict bug reproduction; this is an additive diagnostics feature. Source inspection confirms current main lacks the JSON diagnostics and the PR body supplies live output showing the intended after-patch diagnostic fields.

Is this the best way to solve the issue?

Yes. The current PR direction is the narrow maintainable path: add JSON-only decision diagnostics beside the existing maintenance preview/apply output without changing reconciliation policy or text-mode cost.

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes copied live output from a production-like task registry showing the new maintenance diagnostic fields and observed after-fix behavior; private identifiers are partially redacted.
  • add rating: 🐚 platinum hermit: Current PR rating is 🐚 platinum hermit because proof is 🦞 diamond lobster, patch quality is 🐚 platinum hermit, and The PR has strong real-environment proof and a focused implementation with no blocking findings from this review.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body includes copied live output from a production-like task registry showing the new maintenance diagnostic fields and observed after-fix behavior; private identifiers are partially redacted.
  • remove rating: 🦐 gold shrimp: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove merge-risk: 🚨 availability: Current PR review selected no merge-risk labels.
  • remove status: ⏳ waiting on author: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P2: This is a focused operator-diagnostics improvement for task maintenance with limited runtime blast radius and existing focused tests.
  • rating: 🐚 platinum hermit: Current PR rating is 🐚 platinum hermit because proof is 🦞 diamond lobster, patch quality is 🐚 platinum hermit, and The PR has strong real-environment proof and a focused implementation with no blocking findings from this review.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body includes copied live output from a production-like task registry showing the new maintenance diagnostic fields and observed after-fix behavior; private identifiers are partially redacted.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes copied live output from a production-like task registry showing the new maintenance diagnostic fields and observed after-fix behavior; private identifiers are partially redacted.

What I checked:

  • Current main behavior: openclaw tasks maintenance --json currently emits mode, maintenance summaries, task summary, and auditBefore/auditAfter, but no diagnostics object explaining stale-running retention or reconciliation decisions. (src/commands/tasks.ts:675, b79effefee92)
  • PR command integration: The latest PR patch adds getTaskRegistryMaintenanceDiagnostics() only when opts.json is true and places it before the session-registry sweep so backing session rows are still available for the JSON diagnostic snapshot. (src/commands/tasks.ts:665, 7ea32f0b5394)
  • PR diagnostics helper: The patch adds a typed TaskRegistryMaintenanceDiagnostics payload, filters stale running tasks on the documented 30-minute threshold, skips durable cron recoveries, and classifies retained/would-reconcile reasons using the same backing-session, cron, CLI, and subagent-wedged concepts as maintenance. (src/tasks/task-registry.maintenance.ts:983, 7ea32f0b5394)
  • Regression coverage in PR: The PR adds tests for retained backing sessions, apply-mode diagnostics before session pruning, avoiding diagnostics construction for text output, excluding recoverable cron tasks, and surfacing wedged subagent reconciliation reasons. (src/commands/tasks.test.ts:141, 7ea32f0b5394)
  • Documented task-maintenance contract: The docs define stale_running as running for more than 30 minutes and describe maintenance as runtime-aware across backing sessions, subagent recovery tombstones, cron durable recovery, and CLI run identity, which matches the PR's diagnostic scope. Public docs: docs/automation/tasks.md. (docs/automation/tasks.md:230, b79effefee92)
  • Feature history and routing: Remote path history shows recent task-maintenance work by steipete on stale cron recovery, subagent orphan recovery, maintenance speedups, and task-reload blockers, plus adjacent task command/audit work by vincentkoc and detached recovery hook work by garrytan. (src/tasks/task-registry.maintenance.ts:424, 1fae716a04e5)

Likely related people:

  • steipete: Recent remote history includes stale cron task recovery, subagent orphan recovery, task maintenance speedups, and task reload blocker changes in the same maintenance path. (role: recent area contributor; confidence: high; commits: 1fae716a04e5, 0f120c09ba28, f46c6998870b; files: src/tasks/task-registry.maintenance.ts, src/tasks/task-registry.maintenance.issue-60299.test.ts, src/commands/tasks.ts)
  • vincentkoc: Recent history shows task command/audit and task-flow work adjacent to the JSON maintenance surface and task inspection commands. (role: adjacent tasks command contributor; confidence: medium; commits: f6f8d74419a1, 70defcc04607, f12dedb5c880; files: src/commands/tasks.ts, src/tasks/task-registry.maintenance.ts)
  • garrytan: Introduced the detached task recovery hook before mark-lost, which is part of the maintenance behavior this diagnostic feature must not misrepresent. (role: feature history contributor; confidence: medium; commits: c8086b731a35; files: src/tasks/task-registry.maintenance.ts, src/commands/tasks.ts)
  • galiniliev: The PR timeline shows this person was assigned after the first ClawSweeper review, making them a likely current routing candidate even though this review did not find task-maintenance commit history for them. (role: assigned reviewer; confidence: medium)

Codex review notes: model gpt-5.5, reasoning high; reviewed against b79effefee92.

@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: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. labels May 20, 2026
@clawsweeper

clawsweeper Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

✨ Hatched: 🌱 uncommon Brave Signal Puff

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: 🌱 uncommon.
Trait: hums during re-review.
Image traits: location green-check meadow; accessory proof snapshot camera; palette rose quartz and slate; mood celebratory; pose nestled inside a glowing shell; shell translucent glimmer shell; lighting soft studio lighting; background miniature CI buoys.
Share on X: post this hatch
Copy: My PR egg hatched a 🌱 uncommon Brave Signal Puff 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.

@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 20, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed 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. labels May 20, 2026
@galiniliev galiniliev self-assigned this May 20, 2026

@galiniliev galiniliev 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.

This PR adds openclaw tasks maintenance --json diagnostics for stale running tasks, including why maintenance would retain or reconcile them, and skips stale cron records that durable cron recovery can already resolve.

Findings:

  • src/commands/tasks.ts:671: The new diagnostics snapshot is taken after runSessionRegistryMaintenance(...). In preview mode, session maintenance only prunes a clone, so diagnostics can report backing_session_present even when the same JSON payload says that session would be pruned. In apply mode, session maintenance mutates the store before diagnostics run, so diagnostics can report would_reconcile for a task that the just-run task maintenance pass actually retained because the backing session still existed at that earlier point. That makes the new diagnostic field an explanation of a different state than the maintenance decision it is meant to explain. Capture diagnostics against the same session-store view used for task maintenance, or reorder/prune sessions before task maintenance if that is the intended contract. Add coverage for --apply or preview with a stale session entry older than SESSION_REGISTRY_RETENTION_MS.

Best-fix verdict: good direction, but I would not merge as-is until diagnostics are tied to the same decision point they describe.

@efpiva efpiva force-pushed the efpiva/task-maintenance-stale-running-diagnostics branch from 0d249d3 to 70b501b Compare May 20, 2026 22:54
@openclaw-barnacle openclaw-barnacle Bot added size: M and removed size: S proof: sufficient ClawSweeper judged the real behavior proof convincing. labels May 20, 2026
@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: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. labels May 21, 2026

@galiniliev galiniliev 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.

The updated PR fixes the earlier diagnostics-ordering blocker: openclaw tasks maintenance --json now captures task-maintenance diagnostics before the separate session-registry sweep can prune backing session rows. The added diagnostic payload stays JSON-only, reuses existing task maintenance concepts, skips durable cron recoveries, and covers retained backing sessions, session-prune ordering, text output laziness, wedged subagent recovery, and cron recovery exclusion.

Verification for current head 7ea32f0b5394b5b600eb6bd787472c9dfc24b259:

AUTOREVIEW_AUTO_TESTS=0 .agents/skills/autoreview/scripts/autoreview --mode branch --reviewer codex --fallback-reviewer none
# autoreview clean: no accepted/actionable findings reported

node scripts/run-vitest.mjs src/commands/tasks.test.ts src/tasks/task-registry.maintenance.issue-60299.test.ts
# Test Files 2 passed (2)
# Tests 21 passed (21)

git diff --check origin/main...HEAD
# no output

CI on the current head is green for the relevant checks I inspected; skipped/neutral jobs were expected non-blocking jobs. Changelog can be added during landing if this is merged as a user-visible CLI diagnostics change.

@galiniliev galiniliev force-pushed the efpiva/task-maintenance-stale-running-diagnostics branch from 7ea32f0 to 2a97902 Compare May 21, 2026 02:35
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 21, 2026

@galiniliev galiniliev 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.

Landing update: I rebased this PR onto current origin/main and added the maintainer changelog entry for the user-visible CLI diagnostics change.

Verification for current head 2a97902c44489854e86933a54a92021f5399f839:

node scripts/run-vitest.mjs src/commands/tasks.test.ts src/tasks/task-registry.maintenance.issue-60299.test.ts
# Test Files 2 passed (2)
# Tests 21 passed (21)

git diff --check origin/main...HEAD
# no output

The only extra code change after the prior approval is CHANGELOG.md.

@galiniliev galiniliev merged commit 3d3cf96 into openclaw:main May 21, 2026
102 checks passed
@galiniliev

Copy link
Copy Markdown
Contributor

Landed in 3d3cf96 from source head 2a97902.

Verification before merge:

AUTOREVIEW_AUTO_TESTS=0 .agents/skills/autoreview/scripts/autoreview --mode branch --reviewer codex --fallback-reviewer none
# autoreview clean: no accepted/actionable findings reported

node scripts/run-vitest.mjs src/commands/tasks.test.ts src/tasks/task-registry.maintenance.issue-60299.test.ts
# Test Files 2 passed (2)
# Tests 21 passed (21)

git diff --check origin/main...HEAD
# no output

CI checked on 2a97902c44489854e86933a54a92021f5399f839: relevant checks were green before merge. Run IDs observed: 26202068389, 26202068390, 26202068424, 26202069326, 26202069327, 26202069329, 26202069364, 26202069365, 26202077099, 26202077139, 26202077141, 26202159951.

Known proof gaps: no additional packaged/E2E lane was run; this is a JSON CLI diagnostics change covered by focused Vitest, autoreview, and PR CI.

eleboucher pushed a commit to eleboucher/homelab that referenced this pull request May 21, 2026
…026.5.20) (#615)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.5.19` → `2026.5.20` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/567) for more information.

---

### Release Notes

<details>
<summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary>

### [`v2026.5.20`](https://github.com/openclaw/openclaw/blob/HEAD/CHANGELOG.md#2026520)

[Compare Source](openclaw/openclaw@v2026.5.19...v2026.5.20)

##### Changes

- Exec approvals: remove the old `cat SKILL.md && printf ... && <skill-wrapper>` allowlist compatibility path so skill files must be loaded with the read tool and only the real skill executable is auto-allowed.
- Discord: let voice sessions follow configured Discord users into voice channels, with allowed-channel checks, multi-user handoff, bounded reconciliation, and DAVE recovery preservation. ([#&#8203;84264](openclaw/openclaw#84264)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Discord/voice: include bounded `IDENTITY.md`, `USER.md`, and `SOUL.md` profile context in realtime voice session instructions by default, with `voice.realtime.bootstrapContextFiles: []` available to disable it. ([#&#8203;84499](openclaw/openclaw#84499)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Dependencies: bump the bundled Codex harness to `@openai/codex` `0.132.0` and refresh the app-server model-list docs for the new catalog.
- CLI/policy: add the bundled Policy plugin for policy-backed channel conformance checks, doctor lint findings, and opt-in workspace repair. ([#&#8203;80407](openclaw/openclaw#80407)) Thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Agents/config: allow `agents.list[].experimental.localModelLean` so lean local-model mode can be enabled for one configured agent instead of globally.
- Providers/xAI: add device-code OAuth login so remote and headless setups can authorize xAI without a localhost browser callback. ([#&#8203;84005](openclaw/openclaw#84005)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Providers/OpenRouter: honor provider-level `params.provider` routing policy for OpenRouter requests, with model and agent params overriding the defaults. Thanks [@&#8203;amknight](https://github.com/amknight).

##### Fixes

- CLI/tasks: include stale-running task maintenance decisions in `openclaw tasks maintenance --json` so retained and reconcile candidates explain backing-session, cron, CLI, and wedged-subagent state. ([#&#8203;84691](openclaw/openclaw#84691)) Thanks [@&#8203;efpiva](https://github.com/efpiva).
- Codex app-server: keep system-prompt reports working when bootstrap hooks provide workspace files with only a path and content, so hook-supplied SOUL/IDENTITY/TOOLS/USER context still reports injected characters correctly. ([#&#8203;84736](openclaw/openclaw#84736)) Thanks [@&#8203;JARVIS-Glasses](https://github.com/JARVIS-Glasses).
- Providers/MiniMax music: stop advertising `durationSeconds` control and remove prompt-injected duration hints, so `music_generate` reports MiniMax duration as an unsupported override instead of suggesting MiniMax can enforce track length. Fixes [#&#8203;84508](openclaw/openclaw#84508). Thanks [@&#8203;neeravmakwana](https://github.com/neeravmakwana).
- Doctor: warn when sandbox tool policy hides configured MCP server tools before provider requests. ([#&#8203;84699](openclaw/openclaw#84699)) Thanks [@&#8203;nxmxbbd](https://github.com/nxmxbbd).
- WhatsApp: update Baileys to `7.0.0-rc12`.
- Build: suppress per-locale `rolldown-plugin-dts:fake-js` CommonJS dts warnings emitted while bundling the intentionally-inlined `zod/v4/locales/*.d.cts` files, so `pnpm build` output stays readable after the 0.25.1 plugin bump. Thanks [@&#8203;romneyda](https://github.com/romneyda).
- CLI/nodes: route lazy plugin-registration logs to stderr for JSON-mode `openclaw nodes` commands so stdout stays parseable. ([#&#8203;84684](openclaw/openclaw#84684)) Thanks [@&#8203;TurboTheTurtle](https://github.com/TurboTheTurtle).
- Approvals: route manual `/approve` decisions through the trusted approval runtime so active exec and plugin approvals no longer look unknown or expired.
- Mac app: update the About settings copyright year to 2026. ([#&#8203;84385](openclaw/openclaw#84385)) Thanks [@&#8203;pejmanjohn](https://github.com/pejmanjohn).
- Dependencies: update `@openclaw/fs-safe` to `0.2.7` so OpenClaw's default Python-helper-off policy keeps best-effort Node write fallbacks for private stores, secret writes, run logs, and media attachments on Linux/macOS.
- Infra/secrets: restore the fail-closed contract for `tryReadSecretFileSync` so credential loaders that pass `rejectSymlink: true` (Telegram, LINE, Zalo, IRC, Nextcloud Talk tokens) refuse symlinked credential files instead of silently accepting them, and the infra-state CI shard's secret-file symlink test passes again. Thanks [@&#8203;romneyda](https://github.com/romneyda).
- Browser: honor the configured image sanitization limit for screenshots and labeled snapshots so browser-captured images follow the same resize policy as other image results. ([#&#8203;84595](openclaw/openclaw#84595))
- Doctor: remove unrecognized `models.providers.*.models[*].compat.thinkingFormat` values during `doctor --fix` so stale provider model config can validate after upgrade. Fixes [#&#8203;77803](openclaw/openclaw#77803).
- Doctor: warn when `openclaw.json` stores plaintext secret-bearing config fields, including model provider API keys and sensitive provider headers. ([#&#8203;84718](openclaw/openclaw#84718)) Thanks [@&#8203;lukaIvanic](https://github.com/lukaIvanic).
- Status: show the configured default, session-selected model, reason, clear hint, and docs link when a session remains pinned to a model that differs from `agents.defaults.model.primary`.
- WebChat: clear stale typing indicators when session change events mark the active chat run complete.
- Mac app: keep local packaging signed with a stable app identity for permission testing and fix Control UI production builds under current Vite/Highlight.js exports.
- macOS app: update the embedded Peekaboo bridge to 3.2.1 so OpenClaw-hosted UI automation works with current Peekaboo CLI capture flows.
- Cron: deliver preferred final assistant output for successful scheduled runs when trailing plain tool warnings remain in diagnostics instead of marking the run failed.
- fix(mattermost): fail closed on missing channel type \[AI]. ([#&#8203;84091](openclaw/openclaw#84091)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Recheck rebuilt system.run argv \[AI]. ([#&#8203;84090](openclaw/openclaw#84090)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- CLI: keep the private QA subcommand out of exported command descriptors unless `OPENCLAW_ENABLE_PRIVATE_QA_CLI=1`, so root help and subcommand markers match runtime registration. ([#&#8203;84519](openclaw/openclaw#84519))
- CLI/cron: bound `openclaw cron show` job lookup pagination so non-advancing or unbounded `cron.list` responses fail instead of hanging the command. Fixes [#&#8203;83856](openclaw/openclaw#83856). ([#&#8203;83989](openclaw/openclaw#83989))
- Agents/messages: stop message-tool-only turns after a successful source-channel `message` send while keeping transcript mirrors under the session write lock. ([#&#8203;84289](openclaw/openclaw#84289))
- Agents: filter silent heartbeat response-tool transcript artifacts out of embedded context snapshots so later user turns are not polluted by heartbeat no-op messages. ([#&#8203;83477](openclaw/openclaw#83477)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Agents/OpenAI: log repeated strict tool-schema downgrade diagnostics once per provider/model/tool signature, reducing duplicate debug noise while preserving `strict=false` fallback behavior. Fixes [#&#8203;82930](openclaw/openclaw#82930). ([#&#8203;82933](openclaw/openclaw#82933)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Agents/code mode: spell out the `exec` tool's JavaScript/TypeScript, no Node module, and catalog-bridge constraints in model-visible schema text so agents can use enabled tools without trial-and-error. ([#&#8203;84269](openclaw/openclaw#84269)) Thanks [@&#8203;Kaspre](https://github.com/Kaspre).
- Codex: give `image_generate` dynamic-tool calls a 120s default watchdog when no per-call or configured image timeout is set, so image generation no longer falls back to the generic 30s bridge timeout. ([#&#8203;84254](openclaw/openclaw#84254)) Thanks [@&#8203;moritzmmayerhofer](https://github.com/moritzmmayerhofer).
- Codex: avoid duplicate dynamic tool terminal diagnostics while large diagnostic backlogs drain without blocking tool responses. ([#&#8203;82937](openclaw/openclaw#82937)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- CLI/message: include a stable top-level `messageId` in `openclaw message --json` output when channel sends return one. ([#&#8203;84191](openclaw/openclaw#84191)) Thanks [@&#8203;100menotu001](https://github.com/100menotu001).
- Cron: preserve legacy top-level array `jobs.json` stores when loading or adding scheduled jobs so old cron jobs are no longer treated as an empty store during upgrade. Fixes [#&#8203;60799](openclaw/openclaw#60799). ([#&#8203;84433](openclaw/openclaw#84433)) Thanks [@&#8203;IWhatsskill](https://github.com/IWhatsskill).
- Gateway/agents: use an agent's `identity.name` in Gateway agent summaries when `agents.list[].name` is unset, so configured agent labels remain visible in clients. ([#&#8203;84355](openclaw/openclaw#84355); refs [#&#8203;57835](openclaw/openclaw#57835)) Thanks [@&#8203;luoyanglang](https://github.com/luoyanglang).
- Channels/replies: keep normal `/verbose` failed-tool progress compact in message-tool replies and prevent late text-only tool output from appearing after the final answer. ([#&#8203;84303](openclaw/openclaw#84303)) Thanks [@&#8203;VACInc](https://github.com/VACInc).
- Plugins/hooks: apply a default 30-second timeout to `before_compaction` and `after_compaction` hooks so a hung plugin handler no longer blocks compaction completion. ([#&#8203;84153](openclaw/openclaw#84153))
- Discord: preserve disabled presentation buttons when adapting and rendering Discord message controls. ([#&#8203;84188](openclaw/openclaw#84188)) Thanks [@&#8203;100menotu001](https://github.com/100menotu001).
- Twitch: add a test-only client-manager registry reset helper so non-isolated Twitch tests can clear cached managers between cases. Fixes [#&#8203;83887](openclaw/openclaw#83887). ([#&#8203;84244](openclaw/openclaw#84244)) Thanks [@&#8203;hclsys](https://github.com/hclsys).
- Cron: run main-session scheduled work on a cron-owned wake lane while preserving reply delivery context, so background cron turns no longer block human main-session chat. Fixes [#&#8203;82766](openclaw/openclaw#82766). ([#&#8203;82767](openclaw/openclaw#82767)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Cron: use structured embedded-run denial metadata for isolated scheduled tasks so blocked exec requests fail the job without treating ordinary assistant prose as a denial. ([#&#8203;84067](openclaw/openclaw#84067)) Thanks [@&#8203;abnershang](https://github.com/abnershang).
- Cron: keep recovered tool warnings diagnostic for successful scheduled runs so final cron output is delivered instead of being replaced by a post-processing warning. ([#&#8203;84045](openclaw/openclaw#84045)) Thanks [@&#8203;abnershang](https://github.com/abnershang).
- Plugins/perf: thread explicit plugin discovery results through `loadBundledCapabilityRuntimeRegistry`, `resolveBundledPluginSources`, and `listChannelCatalogEntries` so callers that already hold a discovery result skip redundant filesystem walks. Thanks [@&#8203;SebTardif](https://github.com/SebTardif).
- harden update restart script creation \[AI]. ([#&#8203;84088](openclaw/openclaw#84088)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Docker: keep the bundled Codex plugin in official release image keep lists so the default OpenAI agent harness remains available after Docker pruning. Fixes [#&#8203;83613](openclaw/openclaw#83613). ([#&#8203;83626](openclaw/openclaw#83626)) Thanks [@&#8203;YuanHanzhong](https://github.com/YuanHanzhong).
- CLI/channels: preserve the first line of `openclaw channels logs` output when the rolling tail window starts exactly on a line boundary, mirroring the already-fixed `readLogSlice` behavior in `src/logging/log-tail.ts`.
- Control UI: treat terminal session status as authoritative over stale active-run flags so completed terminal runs stop showing abort/live UI. ([#&#8203;84057](openclaw/openclaw#84057))
- CLI: preserve embedded equals signs in inline root option values instead of truncating after the second separator. ([#&#8203;83995](openclaw/openclaw#83995)) Thanks [@&#8203;ThiagoCAltoe](https://github.com/ThiagoCAltoe).
- Matrix/config: accept `messages.queue.byChannel.matrix` queue overrides and keep queue provider schema/type keys aligned for Matrix, Google Chat, and Mattermost. Thanks [@&#8203;bdjben](https://github.com/bdjben).
- CLI: format `openclaw acp client` failures through the shared error formatter so object-shaped errors stay readable instead of printing `[object Object]`. Fixes [#&#8203;83904](openclaw/openclaw#83904). ([#&#8203;84080](openclaw/openclaw#84080))
- Providers/Ollama: default unknown-capabilities models to tool-capable so discovered native Ollama models can use tools when `/api/show` omits capabilities. ([#&#8203;84055](openclaw/openclaw#84055)) Thanks [@&#8203;dutifulbob](https://github.com/dutifulbob).
- Installer/Windows: launch `install.ps1` onboarding as an attached child process so fresh native Windows installs do not freeze visibly at `Starting setup...` or corrupt the wizard's terminal rendering.
- CLI/update: keep restart health checks working across one-version CLI/Gateway protocol skew and use the managed Gateway service Node for all follow-up commands even when the package root is unchanged, so `openclaw update` no longer silently switches the gateway to a different Node binary when multiple Node installations are present. Thanks [@&#8203;amknight](https://github.com/amknight).
- CLI/gateway: include the running Gateway version in `gateway status` JSON output, preserving existing server metadata while falling back to status RPC data for read probes. Fixes [#&#8203;56222](openclaw/openclaw#56222). Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Memory/search: close local embedding providers when active-memory searches time out so pending local model loads and embedding contexts are aborted and released. ([#&#8203;83858](openclaw/openclaw#83858)) Thanks [@&#8203;brokemac79](https://github.com/brokemac79).
- CLI/nodes: request pending node surface approval scopes before `openclaw nodes approve` so exec-capable node approval can use admin-scoped Gateway credentials instead of failing with `missing scope: operator.admin`. ([#&#8203;84392](openclaw/openclaw#84392)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Gateway: reject slow node event sends before outbound buffers grow unbounded and log the rejected payload diagnostic. ([#&#8203;84387](openclaw/openclaw#84387)) Thanks [@&#8203;samzong](https://github.com/samzong).
- Agents: include bounded trajectory queued-writer diagnostics in `pi-trajectory-flush` timeout warnings so flush stalls show pending writes, queued bytes, and append state. Fixes [#&#8203;82961](openclaw/openclaw#82961). ([#&#8203;82962](openclaw/openclaw#82962)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Agents/subagents: recover stale completion announces by retrying unsupported transcript-wait wakes without transcript waiting and forcing a message-tool handoff when the requester run is already stale. Fixes [#&#8203;83699](openclaw/openclaw#83699). ([#&#8203;83700](openclaw/openclaw#83700)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- Agents/subagents: constrain wildcard subagent target allowlists to configured agents while preserving explicitly listed compatibility targets. Fixes [#&#8203;84040](openclaw/openclaw#84040). ([#&#8203;84357](openclaw/openclaw#84357)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Providers/Anthropic: route Anthropic model refs selected with Claude CLI auth through the Claude CLI runtime so shorthand refs such as `anthropic/opus-4.7` no longer fall back to embedded Anthropic billing. Fixes [#&#8203;84222](openclaw/openclaw#84222). ([#&#8203;84374](openclaw/openclaw#84374)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Agents: honor explicit `models.providers.<id>.timeoutSeconds` values above the default idle watchdog for cloud and self-hosted providers, so long first-token waits no longer fall back at \~120s when the provider timeout is higher. ([#&#8203;83979](openclaw/openclaw#83979)) Thanks [@&#8203;yujiawei](https://github.com/yujiawei).
- Agents/Codex: keep encrypted Responses reasoning replay provenance-bound so stale mirrored Codex transcripts drop invalid encrypted content before request assembly while preserving matching same-session replay. Fixes [#&#8203;83836](openclaw/openclaw#83836). ([#&#8203;84367](openclaw/openclaw#84367)) Thanks [@&#8203;joshavant](https://github.com/joshavant).
- Agents/subagents: skip stale embedded-run wake probes for dormant completion requesters, so late subagent completions go straight to requester-agent/direct handoff instead of producing `reason=no_active_run` queue noise. ([#&#8203;82964](openclaw/openclaw#82964)) Thanks [@&#8203;galiniliev](https://github.com/galiniliev).
- CLI: retry config snapshot reads after a transient failure so one rejected read no longer poisons later commands in the same process. ([#&#8203;83931](openclaw/openclaw#83931)) Thanks [@&#8203;honor2030](https://github.com/honor2030).
- Media: decode URL path basenames before using them as remote media fallback filenames, so files like `My%20Report.pdf` are surfaced as `My Report.pdf`. Fixes [#&#8203;84050](openclaw/openclaw#84050). ([#&#8203;84052](openclaw/openclaw#84052)) Thanks [@&#8203;jbetala7](https://github.com/jbetala7).
- WhatsApp: clarify inbound group diagnostics so observed but unregistered groups point to `channels.whatsapp.groups` without changing routing or sender authorization. ([#&#8203;83846](openclaw/openclaw#83846)) Thanks [@&#8203;neeravmakwana](https://github.com/neeravmakwana).
- WhatsApp: drain pending outbound deliveries on a 30s periodic timer in addition to the reconnect handler, so messages enqueued while the provider is already connected no longer wait for the next reconnect to send. ([#&#8203;79083](openclaw/openclaw#79083)) Thanks [@&#8203;Oviemudiaga](https://github.com/Oviemudiaga).
- CLI/TUI: include gateway plugin slash commands in TUI autocomplete, so connected sessions can suggest plugin-owned commands exposed by the running Gateway. ([#&#8203;83640](openclaw/openclaw#83640)) Thanks [@&#8203;se7en-agent](https://github.com/se7en-agent).
- Gateway/mobile: restore QR setup-code handoff of bounded operator tokens for iOS and Android onboarding while keeping admin and pairing scopes out of bootstrap. ([#&#8203;83684](openclaw/openclaw#83684)) Thanks [@&#8203;ngutman](https://github.com/ngutman).
- iOS: repair Release archive compilation for the TestFlight build. ([#&#8203;84255](openclaw/openclaw#84255)) Thanks [@&#8203;ngutman](https://github.com/ngutman).
- Agents/compaction: bound plugin-owned CLI transcript compaction with the host safety timeout so a hung context engine can no longer stall post-turn cleanup. ([#&#8203;84083](openclaw/openclaw#84083)) Thanks [@&#8203;100yenadmin](https://github.com/100yenadmin).
- Control UI/usage: truncate long context skill, tool, and file names in the usage panel while keeping the full name available on hover. ([#&#8203;42197](openclaw/openclaw#42197)) Thanks [@&#8203;Rain120](https://github.com/Rain120).
- Codex: respect explicit `models auth order set` and `config.auth.order` precedence over stale `lastGood` in `/codex account`, and show `no working credential` when every explicit-order profile is ineligible instead of marking a lower-ranked profile as active. Fixes [#&#8203;84386](openclaw/openclaw#84386). ([#&#8203;84412](openclaw/openclaw#84412)) Thanks [@&#8203;openperf](https://github.com/openperf).
- Agents: honor `messages.suppressToolErrors` for mutating tool failures so configured chat surfaces do not receive separate warning payloads. ([#&#8203;81561](openclaw/openclaw#81561)) Thanks [@&#8203;moeedahmed](https://github.com/moeedahmed).
- Agents/fallback: surface billing guidance for mixed rate-limit plus billing fallback exhaustion instead of generic failure copy. Fixes [#&#8203;79396](openclaw/openclaw#79396). ([#&#8203;79489](openclaw/openclaw#79489)) Thanks [@&#8203;aayushprsingh](https://github.com/aayushprsingh).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/615
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
)

Add JSON-only task maintenance diagnostics for stale running tasks and include the maintainer changelog entry.
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
)

Add JSON-only task maintenance diagnostics for stale running tasks and include the maintainer changelog entry.
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 24, 2026
)

Add JSON-only task maintenance diagnostics for stale running tasks and include the maintainer changelog entry.
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 24, 2026
)

Add JSON-only task maintenance diagnostics for stale running tasks and include the maintainer changelog entry.
galiniliev pushed a commit to galiniliev/openclaw that referenced this pull request May 25, 2026
)

Add JSON-only task maintenance diagnostics for stale running tasks and include the maintainer changelog entry.
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
)

Add JSON-only task maintenance diagnostics for stale running tasks and include the maintainer changelog entry.
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
)

Add JSON-only task maintenance diagnostics for stale running tasks and include the maintainer changelog entry.
SebTardif pushed a commit to SebTardif/openclaw that referenced this pull request May 26, 2026
)

Add JSON-only task maintenance diagnostics for stale running tasks and include the maintainer changelog entry.
jameslcowan pushed a commit to jameslcowan/openclaw that referenced this pull request Jun 2, 2026
)

Add JSON-only task maintenance diagnostics for stale running tasks and include the maintainer changelog entry.
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
)

Add JSON-only task maintenance diagnostics for stale running tasks and include the maintainer changelog entry.
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
)

Add JSON-only task maintenance diagnostics for stale running tasks and include the maintainer changelog entry.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commands Command implementations P2 Normal backlog priority with limited blast radius. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M 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.

2 participants