## Что это
Rox Design запускается как sidecar-процесс (Pi-agent-server). При его сбое сейчас embed становится «мёртвым окном» — нет визуального индикатора, нет recovery-пути. Цель: при detected crash показывать banner «Rox Design crashed — recover» с 1-click восстановлением.
Lifecycle states: `starting | ready | degraded | crashed | recovering`. Health-check через WebSocket ping каждые 5s; 3 промаха подряд → `crashed`. Recovery — relaunch sidecar process, restore last session ID, ре-инжект skin. Если 2 recovery подряд fail → fallback на read-only viewer (last snapshot из IndexedDB).
Компоненты: `apps/electron/src/embed/RoxDesignSidecarManager`, `apps/electron/src/embed/RecoveryBanner`. Логирование через structured spans с trace-id, чтобы post-mortem был воспроизводим.
## Зачем
Goal PZD-81: «Sidecar crash recover ≤ 1 click». Без явного visible-state пользователи будут closing/reopening ROX.ONE целиком, что разрывает unsaved-state и убивает доверие к embed как production-surface.
## Источники вдохновения
- [agisota/looper](https://github.com/agisota/looper) — autonomous loop plan→review→fix→ship с checkpoint missions
- [iii-hq/iii](https://github.com/iii-hq/iii) — real-time service composition с lifecycle observability
- [pixlcore/xyops](https://github.com/pixlcore/xyops) — workflow automation + server monitoring с recovery patterns
## 🔗 Linear
- [PZD-446](https://linear.app/kuhjie/issue/PZD-446) — backing ticket