Coordina con tawasuyu/03_ukupacha/arje/PLAN-ATESTACION-Y-HAMMER.md: - arje (init from-scratch ya existente, PID1 + supervisión real) cubre el CRASHED diferido de la Fase 5 en vez de escribir init nuevo. - frontera: PID1 fino, un solo bus (arje-bus + hammer-core::proto), CAS unificado en BLAKE3, confianza en capas (procedencia hammer + atestación arje; el expected_hash del .swm = el blake3 que arje atesta). - caveat: la cage glibc es del mundo hammer/Linux, fuera de PID1. Puntero añadido en docs/10-roadmap.md §Track posterior.
4.1 KiB
ADR 0007 — arje como init propio del track posterior
- Estado: propuesta
- Fecha: 2026-06-10
Contexto
El roadmap (SDD 10 §Track posterior) deja un ítem abierto: "reemplazar el
init de Alpine por tu init (bus por pipes nativo) — habilita el CRASHED real que la Fase 5
dejó diferido". Construir ese init de cero sería meses de trabajo contra una pieza que ya
existe en el monorepo tawasuyu: arje (03_ukupacha/arje), un init/bootloader from-scratch
en Rust con PID 1 (arje-zero), supervisión real de servicios (RestartTracker +
sandokan-lifecycle::Backoff, restarts visibles end-to-end), bus interno por socket Unix
(arje-bus, postcard, SO_PEERCRED), CAS (arje-cas), snapshot (arje-snapshot), runtime WASM
(arje-soma+arje-wasm) y absorción de sistemas existentes (arje-absorb).
Al revisar arje contra hammer aparece que ambos convergieron en los mismos primitivos por
caminos distintos: CAS direccionado por contenido, bus de agente sobre socket Unix con
SO_PEERCRED, firma Ed25519, y el principio "la IA propone, el humano dispone". Mantenerlos
separados duplicaría bus, CAS y modelo de confianza.
Decisión
- arje es el init del track posterior de hammer. No se escribe un init nuevo. arje aporta
PID 1 + supervisión, lo que entrega el
CRASHEDreal que la Fase 5 dejó diferido. - Frontera de responsabilidades (PID 1 fino):
- arje = boot, PID 1, supervisión/restart, mount del overlay, snapshot, CAS, atestación al arranque.
- hammer = laboratorio de build determinista, diario de mutaciones (
fanotify),.swmreproducible + firma, bucle agéntico con IA.hammerdcorre como servicio supervisado por arje.
- Un solo bus. El control de ciclo de vida de
hammerdva porarje-bus. Elagent.sock(JSON-líneas) de hammer queda como API de IA de alto nivel encima, no como segundo plano de control del init.hammer-core::protose comparte; el transporte esarje-bus. - CAS unificado en BLAKE3. hammer ya usa BLAKE3 (prefijo
b3:). arje migraarje-casde SHA-256 a BLAKE3 para hablar el mismo hash. El store pasa a ser un crate compartido. - Modelo de confianza en capas. hammer garantiza procedencia (reproducir desde fuente
pública →
expected_hashBLAKE3). arje/agora atesta autorización (verificar_capacidadsobre(blake3, permisos)al boot). Elexpected_hashde un.swmES el BLAKE3 que arje atesta. Unhammer commitpromovido emite una concesión firmada quearje-absorbintegra al seed → el binario mutado por la IA queda atestado en el próximo arranque.
Razones
- No reinventar lo resuelto (coherente con ADR 0004): arje es un init
supervisor maduro; el
CRASHEDreal sale gratis. - Bajar entropía, no subirla: dos buses y dos CAS con la misma semántica son deuda. Un wire, un hash, una política de capacidades.
- El modelo de confianza se refuerza: "verificar, no confiar" (procedencia) + "atestar al boot" (autorización) cubren amenazas distintas y se encadenan por el hash sin acoplarse.
Consecuencias
- Track posterior deja de necesitar "init propio from-scratch": adopta arje. El bootstrap Stage 0/1 (toolchain semilla) sigue siendo de hammer; el init lo pone arje.
- hammer asume BLAKE3 como hash único del store (ya lo es) y arje se alinea.
- Surge una dependencia de coordinación entre repos (
hammer↔tawasuyu/03_ukupacha/arje): el wire dearje-busyhammer-core::proto, y el formato de la concesión de capacidad.
Caveat estratégico
arje también es "the natural bootloader for wawa-kernel" (un SO nativo sin glibc/TCP-IP). La
cage glibc para software propietario (Steam/NVIDIA) es feature del mundo hammer/Linux, no
de arje core — arje declara de sí mismo "for boot, not for governing the running system".
Mantenerla fuera de PID 1 preserva tanto el init fino como el norte nativo de wawa.
Coordinación
Plan completo (lado arje, con los puntos de inserción en el código y los primitivos de agora a
reusar): tawasuyu:03_ukupacha/arje/PLAN-ATESTACION-Y-HAMMER.md.