tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1569Shell 203Rust 109Markdown 993728 Definiciones

docs(adr): 0007 — adoptar arje como init del track posterior

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.

ea10c9f7168629a82db03e81d109b539dc9b2349 · por Sergio · (hace 4 meses) · padre bbab5a204 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

2 archivos · +74 −1

diff --git a/docs/10-roadmap.md b/docs/10-roadmap.md
index f5e7bfb0..5e0ee5c0 100644
--- a/docs/10-roadmap.md
+++ b/docs/10-roadmap.md
@@ -184,7 +184,10 @@ Diseño completo en [SDD 11 — Bootstrap from-scratch](11-bootstrap.md). Resume
   musl + busybox/toybox + init + `hammerd`), Stage 2 (rebuild nativo dentro del rootfs y diff
   de hashes ⇒ auto-alojamiento bit-reproducible). ⏭️ **Primer paso del track.**
 - Reemplazar el init de Alpine por **tu init** (bus por pipes nativo) — habilita el `CRASHED`
-  real que la Fase 5 dejó diferido.
+  real que la Fase 5 dejó diferido. **Decisión: adoptar `arje`** (init from-scratch ya existente
+  en el monorepo `tawasuyu`, con PID 1 + supervisión real) en lugar de escribir uno nuevo —
+  ver [ADR 0007](adr/0007-arje-como-init-propio.md). Trae bus único, CAS BLAKE3 compartido y
+  confianza en capas (procedencia hammer + atestación arje).
 - Userland propio (busybox/toybox a elección), `/etc/service/*` propios.
 - Decidir particionado/montaje de `/store` y `/var/lib/hammer`.
 - Log de transparencia para compartir en comunidad ([SDD 09](09-trust-model.md) §4): el
diff --git a/docs/adr/0007-arje-como-init-propio.md b/docs/adr/0007-arje-como-init-propio.md
new file mode 100644
index 00000000..bce519ad
--- /dev/null
+++ b/docs/adr/0007-arje-como-init-propio.md
@@ -0,0 +1,70 @@
+# ADR 0007 — `arje` como init propio del track posterior
+
+- **Estado:** propuesta
+- **Fecha:** 2026-06-10
+
+## Contexto
+
+El roadmap ([SDD 10](../10-roadmap.md) §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
+
+1. **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 `CRASHED` real** que la Fase 5 dejó diferido.
+2. **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`), `.swm`
+     reproducible + firma, bucle agéntico con IA. `hammerd` corre como **servicio supervisado
+     por arje**.
+3. **Un solo bus.** El control de ciclo de vida de `hammerd` va por `arje-bus`. El `agent.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::proto` se comparte; el transporte es `arje-bus`.
+4. **CAS unificado en BLAKE3.** hammer ya usa BLAKE3 (prefijo `b3:`). arje migra `arje-cas` de
+   SHA-256 a BLAKE3 para hablar el mismo hash. El store pasa a ser un crate compartido.
+5. **Modelo de confianza en capas.** hammer **garantiza procedencia** (reproducir desde fuente
+   pública → `expected_hash` BLAKE3). arje/agora **atesta autorización** (`verificar_capacidad`
+   sobre `(blake3, permisos)` al boot). **El `expected_hash` de un `.swm` ES el BLAKE3 que arje
+   atesta.** Un `hammer commit` promovido emite una concesión firmada que `arje-absorb` integra
+   al seed → el binario mutado por la IA queda atestado en el próximo arranque.
+
+## Razones
+
+- **No reinventar lo resuelto** (coherente con [ADR 0004](0004-no-custom-nix.md)): arje es un init
+  supervisor maduro; el `CRASHED` real 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 de `arje-bus` y `hammer-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`.