mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-14 13:46:27 +00:00
* fix(agents): apply stale-run liveness to aborted subagent orphan recovery Skip stale unended subagent runs during orphan recovery and registry restore, even when they carry abortedLastRun. Previously, restart-aborted runs were exempt from the stale-unended age check, allowing hours-old aborted child sessions to be resurrected after long downtime. Fixes #90766 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(agents): finalize stale aborted runs instead of only skipping them Previously the stale-run check in recoverOrphanedSubagentSessions only incremented the skipped counter. Stale active runs were left unended because scheduleOrphanRecovery only retries failedRuns, not skipped runs. Now stale runs are finalized via finalizeInterruptedSubagentRun so they don't remain orphaned in the registry. Ref: #90766 review feedback Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(agents): await stale-run finalization in orphan recovery Await finalizeInterruptedSubagentRun for stale aborted runs and report failedRuns when finalization does not update the registry, so the scheduler retry path can recover from finalization failures. Co-authored-by: Cursor <cursoragent@cursor.com> * test(agents): faithful restart-path proof for stale orphan recovery Drive the real recoverOrphanedSubagentSessions against the real subagent registry, the real isStaleUnendedSubagentRun policy, and a real on-disk session store, mocking only the outbound gateway transport and transcript reader. Proves finalizeInterruptedSubagentRun actually ends the stale aborted run in the registry (endedAt set, outcome error) instead of resuming it, while a fresh aborted run still resumes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * chore: amend author email * fix(agents): scope orphan finalization to run generation * fix(agents): preserve stale restart recovery ownership * test(agents): isolate restart recovery scheduling * fix(agents): make stale restart finalization durable * fix(agents): keep stale retries generation-scoped * test(agents): await restart recovery scheduling * fix(agents): verify interrupted finalization * fix(agents): defer interrupted finalization during restart * fix(agents): preserve lifecycle type narrowing * style(agents): use nonmutating recovery ordering * chore: keep release note in PR body --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Pick-cat <266665499+Pick-cat@users.noreply.github.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>