docs: CRASHED real demostrado en VM (cierra el diferido de la Fase 5)
Desde la consola del Stage 1 booteado: kill $(pidof hammerd) → arje-zero lo supervisa de verdad: Ente disuelto label=hammerd status=Killed(SIGTERM) Restart programado label=hammerd delay_ms=200 Ente encarnado label=hammerd pid=Some(Pid(64)) Detecta la muerte con su ExitStatus, hace backoff y re-encarna hammerd (pid 59→64). Es la supervisión real del init propio (ADR 0007) que la Fase 5 había diferido. Runbook §8 y roadmap actualizados. Pendiente: B.2 (exponerlo a la capa de IA por agent.sock) y atestación A1/A2. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Semantic delta
No definition changed: this change is text, documentation or data.
2 files · +25 −7
- docs/10-roadmap.md +5 −3
- docs/runbooks/stage1-vm-boot.md +20 −4
diff --git a/docs/10-roadmap.md b/docs/10-roadmap.md
index f0951376..eea301c7 100644
--- a/docs/10-roadmap.md
+++ b/docs/10-roadmap.md
@@ -189,9 +189,11 @@ Diseño completo en [SDD 11 — Bootstrap from-scratch](11-bootstrap.md). Resume
stage1` los construye con la semilla, ensambla el rootfs FHS y lo sella. El init es **arje-zero
como PID 1** (`/sbin/init`→arje-zero) con su seed card `/ente/seed.card.json`; al bootear,
arje-zero carga+valida la seed y **supervisa hammerd + getty** (el `agent.sock` y el watcher
- fanotify de hammerd levantan). Diseño en [SDD 12](12-init-real.md); corrida y fixes en el
- [runbook](runbooks/stage1-vm-boot.md). Pendiente: demo del `CRASHED` real (matar hammerd → restart),
- bus único (B.2) y atestación (A1/A2).
+ fanotify de hammerd levantan). El **`CRASHED` real está demostrado**: `kill hammerd` → arje lo
+ detecta (`Killed(SIGTERM)`), programa restart con backoff y lo re-encarna — la supervisión del
+ init propio que la Fase 5 difirió ([ADR 0007](adr/0007-arje-como-init-propio.md)). Diseño en
+ [SDD 12](12-init-real.md); corrida y fixes en el [runbook](runbooks/stage1-vm-boot.md). Pendiente:
+ bus único (B.2: exponer el `CRASHED` a la capa de IA) y atestación (A1/A2).
- **Stage 2** ☐ — rebuild nativo dentro del rootfs y diff de hashes ⇒ auto-alojamiento
bit-reproducible.
- Reemplazar el init de Alpine por **tu init** (bus por pipes nativo) — habilita el `CRASHED`
diff --git a/docs/runbooks/stage1-vm-boot.md b/docs/runbooks/stage1-vm-boot.md
index 11e220c3..904cdb59 100644
--- a/docs/runbooks/stage1-vm-boot.md
+++ b/docs/runbooks/stage1-vm-boot.md
@@ -214,10 +214,26 @@ hammerd::bus: escuchando sock=/run/agent.sock
```
**arje-zero es PID 1**, carga+valida la seed y **supervisa hammerd + getty**; hammerd corre con su
-watcher fanotify y su `agent.sock`. **Stage 1 bootea end-to-end.** Pendiente (demo, no diseño): matar
-hammerd y observar el restart con backoff = el `CRASHED` real (la supervisión `Restart` ya está
-activa). Comando reproducible: `qemu-system-x86_64 -m 512 -no-reboot -nographic -cpu Broadwell
--kernel <vmlinuz> -initrd stage1.cpio.gz -append "console=ttyS0 rdinit=/sbin/init"`.
+watcher fanotify y su `agent.sock`. **Stage 1 bootea end-to-end.** Comando reproducible:
+`qemu-system-x86_64 -m 512 -no-reboot -nographic -cpu Broadwell -kernel <vmlinuz> -initrd
+stage1.cpio.gz -append "console=ttyS0 rdinit=/sbin/init"`.
+
+### ✅ `CRASHED` real demostrado (lo que la Fase 5 difirió)
+
+Desde la shell de la consola, `kill $(pidof hammerd)` y arje-zero lo supervisa de verdad:
+
+```
+kill $(pidof hammerd)
+arje_zero::graph::lifecycle: Ente disuelto label=hammerd status=Killed(SIGTERM)
+arje_zero::graph::lifecycle: Restart programado label=hammerd delay_ms=200
+arje_zero::graph::lifecycle: Ente encarnado label=hammerd pid=Some(Pid(64))
+hammerd: arranque agent_sock=/run/agent.sock …
+```
+
+Detecta la muerte **con su `ExitStatus`** (`Killed(SIGTERM)`), programa el restart con **backoff**
+(200 ms) y **re-encarna** hammerd (pid 59→64). Es la supervisión real del init propio — el `CRASHED`
+que [ADR 0007](../adr/0007-arje-como-init-propio.md) prometía y la Fase 5 había diferido. Exponerlo
+a la capa de IA por `agent.sock` es B.2 (bus único).
## 9. Cross-check opcional — `arje-packager`