From 5a6d18886924f3fea0f09fbd2d15db99ceaeb710 Mon Sep 17 00:00:00 2001 From: Sergio Date: Thu, 11 Jun 2026 11:41:35 +0000 Subject: [PATCH] docs: CRASHED real demostrado en VM (cierra el diferido de la Fase 5) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- docs/10-roadmap.md | 8 +++++--- docs/runbooks/stage1-vm-boot.md | 24 ++++++++++++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) 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 -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 -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`