← NEWS DESK
operator digest

OpenClaw Main Makes Subagent Restart and Queue Recovery Deterministic

Merged agent fixes preserve queued execution context, fence cold-restart side effects, enforce child limits concurrently and restore missing terminal replies.

Independent reporting and tested guidance for OpenClaw operators · Editorial standards

OpenClaw has merged another material agent-lifecycle wave: cold-restart dispatch is now registry-owned and generation-fenced, queued runs retain their execution context until worker admission, concurrent child launches respect configured limits, and terminal replies survive steering or a failed final tool.

This extends—not replaces—the earlier session-ownership fixes already reported by OpenClaw Academy. The new work addresses persistence across process restarts and sustained queue pressure, where in-memory run ownership is not enough.

The fixes are on main; the supplied source packet does not establish a containing package.

Restart recovery becomes a durable ordered lifecycle

PR #117412 reworks subagent restart recovery around one registry-owned sequence. The upstream record says restart dispatches are reserved, attempted, consumed and accepted durably before replayable side effects. Cleanup, kill, announcement and requester-wake mutations are fenced by both session identity and lifecycle generation.

That matters because a restart creates at least two candidates for authority: stale pre-restart work and the replacement process reconstructing durable state. Session identity alone cannot distinguish two generations of the same logical session.

Interpretation: recovery should behave like a transaction log, not a best-effort callback replay. The durable record decides which generation may complete; late callbacks become evidence, not authority.

A queued run keeps the context it was admitted with

PR #118181 fixes queued runs losing execution context under sustained load. The upstream summary reports queued work that remained admitted for longer periods could lose the context needed when a worker finally became available.

This is a different boundary from restarting. The process can remain alive while queue delay outlives an in-memory scope that was incorrectly treated as request-local. Operators running constrained concurrency should test long queue dwell times, not only immediate execution.

Concurrent child limits are enforced atomically

PR #118201 closes a concurrent-launch gap in child-agent limits. A limit checked independently by several launches can be exceeded if each sees capacity before any reserves it.

The safe acceptance test launches more harmless children than the configured limit at the same instant. The observed active count must never exceed the cap, and rejected or queued children must not leak registry entries.

Final replies regain one authoritative owner

PR #118117 restores missing subagent replies after steering or yield by preserving requester completion ownership across restarts. PR #118344 restores channel and cron replies when the final tool has failed but the turn has otherwise settled.

A failed tool and a failed delivery are not the same outcome. The user may still need the final explanation of what failed. Conversely, a missing chat reply is not proof that a tool did nothing.

PR #118073 also makes requested threads visible in the sidebar while preserving spawn authority, improving the operator’s ability to find the session that owns the work without transferring execution rights merely because it is visible.

Staging matrix

Use no-op tools and unique run markers:

  1. start a parent with several children, persist recovery state and restart the Gateway at different dispatch phases;
  2. delay old-generation callbacks until the replacement has recovered;
  3. confirm cleanup, kill, requester wake and announcement each happen at most once under the current generation;
  4. saturate worker concurrency long enough for a queued run to outlive its initiating request scope;
  5. confirm the admitted model, tools, session and requester context remain intact when it starts;
  6. race more child launches than the configured cap and record the maximum active count;
  7. steer or yield while a child is completing, then verify one final reply reaches the correct requester;
  8. make the final harmless tool fail and verify the channel or cron recipient still receives the settled explanation; and
  9. confirm every requested thread is visible without granting another session authority over it.

Do not replay any test whose tool may already have sent a message, changed state or charged an external service.

Incident response

For lost or duplicated work on an older build:

  • preserve the registry, transcript and Gateway generation before cleanup;
  • separate dispatch reservation from side-effect acceptance;
  • inspect queue admission time and worker start time;
  • reconcile the tool’s external receipt independently from the final reply; and
  • revoke stale process authority before manually waking a requester.

Restarting again without that evidence can convert an availability incident into duplicate execution.

Evidence and limits

Official merged PR and commit records supplied by the repository collector establish the faults and landed fixes. Direct GitHub page extraction returned HTTP 403 and the configured search backend was unavailable. OpenClaw Academy did not run a cold-restart fault matrix or sustain a live worker queue.

Key collector IDs are 34883/34773, 34721/34611, 34928/34818, 34215/34105, 34557/34450 and 34408/34298/34374.

Bottom line

The new recovery contract is stronger because it follows work across both time and process boundaries. Before trusting delegated agents after an upgrade, prove that queued context survives, concurrency caps remain hard and exactly one current generation owns every final reply and side effect.

THE RECEIPTS

Claims should survive the click.

Primary links used for this article are listed openly. If the evidence changes, the verification date changes with it.
  1. 01Make subagent restart recovery deterministic — PR #117412
  2. 02Keep queued run contexts alive through worker admission — PR #118181
  3. 03Restore channel and cron replies after a failed final tool — PR #118344
  4. 04Preserve requester completion ownership across restarts — PR #118117
  5. 05Enforce child-agent limits during concurrent launches — PR #118201

THE OPERATOR BRIEF

One useful email when the signal earns it.

Release impact, security changes and repository intelligence. No daily sludge.