Skip to content

fix(tasks): recover terminal lost cron rows#86088

Merged
altaywtf merged 3 commits into
openclaw:mainfrom
liaoandi:fix/tasks-recover-terminal-lost-cron-narrow
Jun 29, 2026
Merged

fix(tasks): recover terminal lost cron rows#86088
altaywtf merged 3 commits into
openclaw:mainfrom
liaoandi:fix/tasks-recover-terminal-lost-cron-narrow

Conversation

@liaoandi

@liaoandi liaoandi commented May 24, 2026

Copy link
Copy Markdown
Contributor

Replaces closed #75036 with the same task-registry fix on a narrow branch.

This keeps only the terminal lost cron recovery change and focused regression coverage. The previous PR branch had accumulated unrelated generated/runtime changes, so this branch was rebuilt from current main.

Real behavior proof

  • Behavior or issue addressed: Terminal lost cron task rows that were marked lost by a backing-session-missing false positive are recovered from durable cron run logs, and stale terminal errors are cleared when recovery has no error. Errorless terminal lost rows and rows with unrelated lost errors are not recovered.

  • Real environment tested: Local OpenClaw source checkout on macOS, branch fix/tasks-recover-terminal-lost-cron-narrow, head 445af4a, Node /opt/homebrew/opt/node/bin/node. The CLI proof used an isolated OPENCLAW_HOME and OPENCLAW_STATE_DIR under /private/tmp, with bundled plugins disabled. Commands were run from the current PR head through the source CLI entrypoint: node --import tsx src/entry.ts.

  • Exact steps or command run after this patch:

  1. Seeded an isolated state directory with one durable task-registry sqlite row:
    • runtime: "cron"
    • status: "lost"
    • error: "backing session missing"
    • runId: "cron:proof-terminal-lost-cron:1764072000000"
  2. Seeded the matching durable cron run log entry:
    • action: "finished"
    • status: "ok"
    • summary: "done"
    • runAtMs: 1764072000000
    • durationMs: 1250
  3. Ran current-head CLI list/preview/apply/list against the isolated state:
    • node --import tsx src/entry.ts tasks list --json
    • node --import tsx src/entry.ts tasks maintenance --json
    • node --import tsx src/entry.ts tasks maintenance --apply --json
    • node --import tsx src/entry.ts tasks list --json
  • Evidence after fix:

Seed output, with the temp path redacted:

{
  "stateDir": "<isolated-state>",
  "taskId": "task-proof-terminal-lost-cron",
  "jobId": "proof-terminal-lost-cron",
  "runId": "cron:proof-terminal-lost-cron:1764072000000",
  "seededStatus": "lost",
  "seededError": "backing session missing",
  "cronRunLog": "<isolated-state>/cron/runs/proof-terminal-lost-cron.jsonl"
}

Before maintenance, tasks list --json showed the durable row was terminal lost and still had the backing-session error:

{
  "count": 1,
  "tasks": [
    {
      "taskId": "task-proof-terminal-lost-cron",
      "runtime": "cron",
      "sourceId": "proof-terminal-lost-cron",
      "runId": "cron:proof-terminal-lost-cron:1764072000000",
      "status": "lost",
      "endedAt": 1764072060000,
      "lastEventAt": 1764072060000,
      "error": "backing session missing",
      "terminalSummary": "stale lost summary"
    }
  ]
}

Preview mode projected exactly one recovered task without mutating by command intent:

{
  "mode": "preview",
  "maintenance": {
    "tasks": {
      "reconciled": 0,
      "recovered": 1,
      "cleanupStamped": 0,
      "pruned": 0
    }
  },
  "tasks": {
    "total": 1,
    "terminal": 1,
    "byStatus": {
      "succeeded": 1,
      "lost": 0
    },
    "byRuntime": {
      "cron": 1
    }
  }
}

Apply mode recovered the persisted task:

{
  "mode": "apply",
  "maintenance": {
    "tasks": {
      "reconciled": 0,
      "recovered": 1,
      "cleanupStamped": 0,
      "pruned": 0
    }
  },
  "tasks": {
    "total": 1,
    "terminal": 1,
    "byStatus": {
      "succeeded": 1,
      "lost": 0
    },
    "byRuntime": {
      "cron": 1
    }
  }
}

After --apply, tasks list --json showed the row persisted as succeeded, used the durable run-log finish time, set the durable summary, and cleared the stale error field:

{
  "count": 1,
  "tasks": [
    {
      "taskId": "task-proof-terminal-lost-cron",
      "runtime": "cron",
      "sourceId": "proof-terminal-lost-cron",
      "runId": "cron:proof-terminal-lost-cron:1764072000000",
      "status": "succeeded",
      "endedAt": 1764072001250,
      "lastEventAt": 1764072001250,
      "terminalSummary": "done"
    }
  ]
}

Focused regression output from the same branch still covers the important boundaries:

✓ |tasks| src/tasks/task-registry.test.ts > task-registry > clears terminal errors when explicitly updated without an error
✓ |tasks| src/tasks/task-registry.maintenance.issue-60299.test.ts > task-registry maintenance issue #60299 > recovers terminal lost cron tasks from durable run logs
✓ |tasks| src/tasks/task-registry.maintenance.issue-60299.test.ts > task-registry maintenance issue #60299 > does not recover terminal lost cron tasks without a backing-session error
✓ |tasks| src/tasks/task-registry.maintenance.issue-60299.test.ts > task-registry maintenance issue #60299 > does not recover terminal lost cron tasks with non-backing-session errors

Test Files  2 passed (2)
Tests  90 passed (90)
  • Observed result after fix: The current-head CLI proof recovered the isolated terminal lost cron task from durable cron logs, changed persisted status from lost to succeeded, rewrote endedAt/lastEventAt to the durable finish timestamp, set terminalSummary to done, and cleared the stale error field.

  • What was not tested: I did not run a live scheduled cron job through a full gateway process in this PR. The proof uses an isolated seeded registry plus durable cron run log and then runs the real current-head tasks maintenance CLI preview/apply/list flow against that state.

Review follow-up:

  • Tightened terminal lost cron recovery to require the backing session missing signal.
  • Added coverage proving errorless terminal lost cron rows are not recovered.
  • Removed the direct CHANGELOG.md edit per review; release-note context remains in this PR body for squash/release tooling.

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

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 29, 2026, 7:57 AM ET / 11:57 UTC.

Summary
The PR extends task-registry maintenance to recover terminal lost cron rows with backing-session-missing errors from durable cron state/logs and to clear stale terminal error fields, with focused regression coverage.

PR surface: Source +17, Tests +172. Total +189 across 4 files.

Reproducibility: yes. source-reproducible. Current main and v2026.6.10 only recover active cron tasks from durable cron history, while the PR body supplies after-fix CLI maintenance output for the terminal lost-row path.

Review metrics: 1 noteworthy metric.

  • Persisted terminal recovery path: 1 added. The diff adds a maintenance path that can rewrite already-terminal cron task rows, which is the key state-safety decision before merge.

Root-cause cluster
Relationship: canonical
Canonical: #86088
Summary: This PR is the current narrow landing candidate for terminal lost cron recovery; the predecessor is closed unmerged, related reports are closed or broader, and newer cron restart work is adjacent rather than a replacement.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P2] Get task/session-state owner acceptance for the terminal lost cron rewrite boundary before merge.

Risk before merge

Maintainer options:

  1. Accept Narrow Terminal Recovery (recommended)
    Merge after a task/session-state owner accepts that only terminal lost cron rows with the backing-session-missing signal may be rewritten from durable cron history.
  2. Require Live Gateway Cron Proof
    Ask for a full scheduled-cron gateway proof if seeded CLI maintenance output is not enough evidence for this persisted-state rewrite.
  3. Review With Adjacent Restart Work
    Pause this PR until the adjacent restart recovery work is reviewed if maintainers want both cron task-state boundaries considered together.

Next step before merge

  • [P2] The remaining action is maintainer acceptance of the persisted terminal-row rewrite boundary, not a narrow automated code repair.

Security
Cleared: No concrete security or supply-chain concern was found; the diff changes task-registry reconciliation logic and tests only.

Review details

Best possible solution:

Land the narrowed recovery after task/session-state owner acceptance, or require live gateway cron proof first if seeded CLI proof is not enough.

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

Yes, source-reproducible. Current main and v2026.6.10 only recover active cron tasks from durable cron history, while the PR body supplies after-fix CLI maintenance output for the terminal lost-row path.

Is this the best way to solve the issue?

Yes, subject to owner acceptance. The patch reuses the existing durable cron recovery source of truth and narrows terminal-row recovery to the backing-session-missing false-positive path; pruning would discard durable completion truth.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against db2488b6e3d6.

Label changes

Label justifications:

  • P2: This is a focused task-registry correctness fix with limited blast radius, but it affects persisted task state and operator audit output.
  • merge-risk: 🚨 session-state: The diff can change persisted terminal cron task status, timestamps, summary, and error fields during maintenance.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The PR body includes copied terminal JSON from a real source CLI maintenance preview/apply/list flow against an isolated seeded state directory, plus focused regression output.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes copied terminal JSON from a real source CLI maintenance preview/apply/list flow against an isolated seeded state directory, plus focused regression output.
Evidence reviewed

PR surface:

Source +17, Tests +172. Total +189 across 4 files.

View PR surface stats
Area Files Added Removed Net
Source 2 23 6 +17
Tests 2 173 1 +172
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 4 196 7 +189

What I checked:

  • Repository policy read and applied: Root AGENTS.md was read fully and its persisted-state/session-state review guidance affected the merge-risk assessment; there is no scoped src/tasks/AGENTS.md. (AGENTS.md:16, db2488b6e3d6)
  • Current main still requires active cron tasks for durable recovery: On current main, resolveDurableCronTaskRecovery() returns early unless the task is runtime: "cron" and active, so an already-terminal lost cron row is not recovered from durable cron history. (src/tasks/task-registry.maintenance.ts:457, db2488b6e3d6)
  • Latest release has the same active-only guard: The latest release tag v2026.6.10 keeps the active-task requirement in the durable cron recovery path, so this PR's behavior is not already shipped. (src/tasks/task-registry.maintenance.ts:456, aa69b12d0086)
  • PR head narrows terminal lost recovery to backing-session-missing rows: The PR adds isRecoverableLostCronTask() and permits inactive cron recovery only for lost rows whose error contains the backing-session-missing signal. (src/tasks/task-registry.maintenance.ts:360, 15a5b023cb75)
  • PR head clears stale terminal errors intentionally: The patch teaches updateTask() and markTaskTerminalById() to distinguish an omitted error from an explicit error: undefined, allowing recovery without a durable error to remove the stale lost error field. (src/tasks/task-registry.ts:1183, 15a5b023cb75)
  • Regression tests cover recovery and exclusion boundaries: The PR tests recovery of a terminal lost cron row with the backing-session-missing error, and non-recovery for errorless or unrelated lost errors. (src/tasks/task-registry.maintenance.issue-60299.test.ts:541, 15a5b023cb75)

Likely related people:

  • steipete: Authored earlier stale cron/chat-backed task reconciliation and durable cron recovery work in the same task-maintenance files. (role: recent stale-cron recovery contributor; confidence: high; commits: 7d1575b5df79, 1fae716a04e5, 606e3d78669a; files: src/tasks/task-registry.maintenance.ts, src/tasks/task-registry.maintenance.issue-60299.test.ts, docs/automation/tasks.md)
  • vincentkoc: Recent commit history shows repeated maintenance of task-registry and task-maintenance internals near the recovery path this PR changes. (role: recent task-registry area contributor; confidence: high; commits: 273eed4c51cb, 29e44f5ebad3, d9a38130b1a8; files: src/tasks/task-registry.maintenance.ts, src/tasks/task-registry.ts)
  • liuhao1024: Recently changed reconcileInspectableTasks() behavior in the same maintenance module, which is one of the user-facing paths affected by projected recovery. (role: recent adjacent contributor of inspection path; confidence: medium; commits: e567986355bc; files: src/tasks/task-registry.maintenance.ts)
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.

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.

@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. P2 Normal backlog priority with limited blast radius. labels May 24, 2026
@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

✨ Hatched: 🥚 common Brave Review Wisp

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: 🥚 common.
Trait: sparkles near resolved comments.
Image traits: location artifact grotto; accessory rollback rope; palette violet, aqua, and starlight; mood determined; pose stepping out of a freshly hatched shell; shell matte ceramic shell; lighting gentle morning glow; background little resolved-comment flags.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Brave Review Wisp 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 removed the triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. label May 24, 2026
@clawsweeper clawsweeper Bot added rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels May 24, 2026

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

Explicitly carrying the error key, then deleting it when recovery.error is undefined, distinguishes "clear this field" from "omit this field". The old conditional spread couldn't express that, so recovered tasks could retain stale lost-state error values.

CI: Real behavior proof gate is failing. Rename Verification:## Real behavior proof and paste verbose vitest output (each test name + result), not just the command, to clear it.

Question on isRecoverableLostCronTask: the !error branch returns true when task.error is absent or empty — not only when it contains "backing session missing". Since markTaskLostById takes error as optional, this branch isn't dead code. Given the durable-completion check, is it intentionally safe to recover errorless terminal lost cron tasks, or should this gate still require the "backing session missing" substring?

@openclaw-barnacle openclaw-barnacle Bot added size: M triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. and removed size: S proof: sufficient ClawSweeper judged the real behavior proof convincing. labels May 25, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. and removed rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels May 25, 2026
@liaoandi
liaoandi force-pushed the fix/tasks-recover-terminal-lost-cron-narrow branch from 6b2b511 to 742e16f Compare May 25, 2026 11:25

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

LGTM on the behavior fix. The previous !error || error.includes(...) path made every errorless lost task recoverable. Requiring the explicit backing session missing signal is a tighter recovery condition, and the new test covers the important boundary: a lost cron task without an error string is not recovered. Real behavior proof is still failing, so that proof section needs to pass before merge.

@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 25, 2026
@liaoandi
liaoandi force-pushed the fix/tasks-recover-terminal-lost-cron-narrow branch from 742e16f to 39e5e07 Compare May 25, 2026 16:33
@clawsweeper clawsweeper Bot added rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels May 25, 2026
@liaoandi
liaoandi force-pushed the fix/tasks-recover-terminal-lost-cron-narrow branch 2 times, most recently from d19d1e6 to 384e1fd Compare May 26, 2026 03:56
@clawsweeper clawsweeper Bot added 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: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 26, 2026
@liaoandi
liaoandi force-pushed the fix/tasks-recover-terminal-lost-cron-narrow branch from 384e1fd to 445af4a Compare May 26, 2026 07:25
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 26, 2026
@liaoandi

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 26, 2026
@liaoandi
liaoandi force-pushed the fix/tasks-recover-terminal-lost-cron-narrow branch from 445af4a to c6b0355 Compare May 29, 2026 10:38
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 29, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 29, 2026
@clawsweeper

clawsweeper Bot commented May 29, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@altaywtf
altaywtf force-pushed the fix/tasks-recover-terminal-lost-cron-narrow branch from c6b0355 to bfcad5e Compare June 29, 2026 11:37
@altaywtf altaywtf self-assigned this Jun 29, 2026
@altaywtf
altaywtf merged commit be94853 into openclaw:main Jun 29, 2026
94 checks passed
@altaywtf

Copy link
Copy Markdown
Member

Merged via squash.

Rorqualx pushed a commit to Rorqualx/cortex that referenced this pull request Jun 29, 2026
* fix(tasks): recover terminal lost cron rows

* fix(tasks): require backing-session lost recovery signal

* fix(tasks): satisfy has-own lint rule

---------

Co-authored-by: Altay <[email protected]>
(cherry picked from commit be94853)
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 30, 2026
* fix(tasks): recover terminal lost cron rows

* fix(tasks): require backing-session lost recovery signal

* fix(tasks): satisfy has-own lint rule

---------

Co-authored-by: Altay <[email protected]>
QiuYuang pushed a commit to QiuYuang/openclaw that referenced this pull request Jul 1, 2026
* fix(tasks): recover terminal lost cron rows

* fix(tasks): require backing-session lost recovery signal

* fix(tasks): satisfy has-own lint rule

---------

Co-authored-by: Altay <[email protected]>
chenyangjun-xy pushed a commit to chenyangjun-xy/openclaw that referenced this pull request Jul 1, 2026
* fix(tasks): recover terminal lost cron rows

* fix(tasks): require backing-session lost recovery signal

* fix(tasks): satisfy has-own lint rule

---------

Co-authored-by: Altay <[email protected]>
chenyangjun-xy pushed a commit to chenyangjun-xy/openclaw that referenced this pull request Jul 3, 2026
* fix(tasks): recover terminal lost cron rows

* fix(tasks): require backing-session lost recovery signal

* fix(tasks): satisfy has-own lint rule

---------

Co-authored-by: Altay <[email protected]>
wheakerd pushed a commit to wheakerd/clawdbot that referenced this pull request Jul 15, 2026
* fix(tasks): recover terminal lost cron rows

* fix(tasks): require backing-session lost recovery signal

* fix(tasks): satisfy has-own lint rule

---------

Co-authored-by: Altay <[email protected]>
(cherry picked from commit be94853)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. 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.

3 participants