feat(bus): B.2 sink del CRASHED — hammerd::crashes traduce eventos de arje

Nuevo módulo hammerd::crashes: traduce la señal de ciclo de vida normalizada
(fuente = arje-bus BusEvent) a proto::Event::Crashed y la bombea al EventBus →
agent.sock (capa de IA). Traducción + bucle de bombeo desacoplados del
transporte y testeados (3 tests). Resta sólo el adaptador de transporte
arje-bus ↔ hammerd. Roadmap B.2 actualizado.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-06-14 02:51:43 +00:00
co-authored by Claude Opus 4.8
parent e9f535a1bb
commit 7c099afe4f
4 changed files with 149 additions and 4 deletions
+13 -2
View File
@@ -285,8 +285,19 @@ Diseño completo en [SDD 11 — Bootstrap from-scratch](11-bootstrap.md). Resume
`SWAP_BWRAP=1`. **Pendiente:** correr in-VM acumulando los swaps
(`KVM=1 MEM=24576 SWAP_MAKE=1 SWAP_BUSYBOX=1 SWAP_LINUX_HEADERS=1 SWAP_BWRAP=1 ./scripts/selfhost-verify.sh`)
para el `✓ REPRODUCIBLE`, y seguir con la última pieza: rust/llvm (la grande — ya hay infra de deps).
- ⏭️ **También pendiente (Stage 1):** bus único (B.2: exponer el `CRASHED` a la capa de IA) y
atestación arje (A1/A2).
- 🔨 **B.2 — `CRASHED` real a la capa de IA (en progreso):** el `Event::Crashed` del bus de
agente ya no es sólo declarativo. **Fuente (lado arje, ✅):** `arje-bus` ganó
`BusRequest::Subscribe` + `BusPayload::Event(BusEvent)`; arje-zero difunde en `on_death`
`EnteCrashed{id,label,status}` / `EnteRestarting{delay_ms}` / `EnteExited` a las conexiones
suscritas, purgando las muertas (4 tests). **Sink (lado hammer, ✅):** `hammerd::crashes`
traduce la señal normalizada → `Event::Crashed` y la bombea al `EventBus`
`/run/agent.sock` (3 tests). **Falta el último tramo:** el *adaptador de transporte* —un
thread que conecte a `$ARJE_BUS_SOCK`, mande `Subscribe` y reenvíe cada `BusEvent` a
`crashes::pump` (vía `BusClient::{subscribe,next_event}`)— y la decisión de cómo los dos
repos comparten el wire (dep directa a `arje-bus` vs. proto compartido vs. relectura del
frame postcard). Es el único paso que necesita un init vivo para validarse end-to-end.
- ⏭️ **También pendiente (Stage 1):** atestación arje (A1/A2 — ya cableada en el repo arje,
resta sólo enchufar su veredicto de boot a este roadmap).
## Notas de entorno
- Desarrollo principal: laptop del autor.