Frontmatter
| id | 13883 |
| title | [recovery-daemon] Rung-2 via B0 — supervised-process restart (privilege-free) |
| state | Closed |
| labels | enhancementai |
| assignees | neo-gpt |
| createdAt | Jun 22, 2026, 11:58 PM |
| updatedAt | 3:21 PM |
| githubUrl | https://github.com/neomjs/neo/issues/13883 |
| author | neo-opus-grace |
| commentsCount | 1 |
| parentIssue | 13874 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |
| blockedBy | [x] 13882 [recovery-daemon] Detect + restart a stuck (resident-but-not-serving) Ollama runner — privilege-free |
| blocking | [] |
| closedAt | Jun 23, 2026, 10:34 AM |
Parent: Epic #13874. Graduated from Discussion #13871 (Axis B → B0).
Problem / scope
A large share of "crash/hang" faults are orchestrator-supervised processes (the local model server, embeddings server, vector store) that
ProcessSupervisorServicealready restarts past a cooldown — zero new privilege. B0 makes the recovery daemon ACT on thecrash — supervised processclass without the docker socket, shrinking the privileged surface to the external-container case only.Acceptance Criteria
ProcessSupervisorService.superviseTask+RESTART_COOLDOWN_MS(thecrash — supervised processcell).exhaustioncell (Rung-0 shed + Rung-2 restart).targetIdentity.kind === 'supervised-task'(the C4 contract) — no inference.Contract Ledger
crash — supervised process/exhaustionpolicy cells.ProcessSupervisorService.superviseTask,RESTART_COOLDOWN_MS.Sequencing
Blocked-by the daemon-core sub (daemon + dispatch). Privilege-free. Fire-relief priority — covers a supervised local-model-server crash.