docs: sincronizar roadmap con los frentes cerrados + Etapa A
El roadmap (SDD 10, "Estado actual") estaba detrás de la realidad ya verificada in-VM. Sincroniza: - Auto-alojamiento puro (variante b): 🚧 → ✅ CERRADO (5 swaps in-VM ✓ REPRODUCIBLE, of_tree 9adefb82; binutils 2.45.1 añadido). - Frente rust/llvm: ✅ CERRADO (mrustc→1.91.1, auto-consistencia in-VM 7fa6cb4e). Capstone: los 6 swaps juntos in-VM ✓ REPRODUCIBLE. - Frente kernel-from-source: ✅ CERRADO (6.16.12 hammer-built bootea + rebuild in-VM reproducible; build-deps de-Alpinizados). - Etapa A: ✅ CERRADA (bootstrap all + manifest). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+39
-4
@@ -231,7 +231,7 @@ Diseño completo en [SDD 11 — Bootstrap from-scratch](11-bootstrap.md). Resume
|
|||||||
Stage 0 → Stage 1 (booteado en QEMU, arje-zero como PID 1, `CRASHED` real) → **Stage 2
|
Stage 0 → Stage 1 (booteado en QEMU, arje-zero como PID 1, `CRASHED` real) → **Stage 2
|
||||||
auto-alojamiento bit-a-bit confirmado** (`✓ REPRODUCIBLE`, host↔VM). Baseline reproducible
|
auto-alojamiento bit-a-bit confirmado** (`✓ REPRODUCIBLE`, host↔VM). Baseline reproducible
|
||||||
4/4: `of_tree(stage1)=b3:0039b2b9…` (cu=1).
|
4/4: `of_tree(stage1)=b3:0039b2b9…` (cu=1).
|
||||||
- 🚧 **En curso — auto-alojamiento *puro* (variante b, [SDD 11 §7.2b](11-bootstrap.md)):** que
|
- ✅ **CERRADO — auto-alojamiento *puro* (variante b, [SDD 11 §7.2b](11-bootstrap.md)):** que
|
||||||
hammer construya el toolchain del builder desde fuente (no Alpine), reemplazando piezas una a una
|
hammer construya el toolchain del builder desde fuente (no Alpine), reemplazando piezas una a una
|
||||||
con Stage 2 verificando cada paso. **Pieza 1 hecha:** GNU make `4.4.1` (`recipes/make.toml`) se
|
con Stage 2 verificando cada paso. **Pieza 1 hecha:** GNU make `4.4.1` (`recipes/make.toml`) se
|
||||||
compila desde fuente con el lab — estática musl, sellada `b3:fbad44ac…`, reproducible bit-a-bit.
|
compila desde fuente con el lab — estática musl, sellada `b3:fbad44ac…`, reproducible bit-a-bit.
|
||||||
@@ -297,9 +297,44 @@ Diseño completo en [SDD 11 — Bootstrap from-scratch](11-bootstrap.md). Resume
|
|||||||
y validadas (corren, versión correcta, funcionales). El 4/4 mínimo (musl/busybox/hammerd/arje-zero)
|
y validadas (corren, versión correcta, funcionales). El 4/4 mínimo (musl/busybox/hammerd/arje-zero)
|
||||||
no las invoca, así que no llevan flag `SWAP_*` dedicado: son swapeables con el escape `SWAPS="name=hash:rel"`.
|
no las invoca, así que no llevan flag `SWAP_*` dedicado: son swapeables con el escape `SWAPS="name=hash:rel"`.
|
||||||
Avanzan el "builder reconstruible al completo, no todo-Alpine" aunque el verify no las ejercite hoy.
|
Avanzan el "builder reconstruible al completo, no todo-Alpine" aunque el verify no las ejercite hoy.
|
||||||
**Pendiente:** correr in-VM acumulando los swaps de sandbox
|
**✅ CORRIDA in-VM acumulada (2026-06-14): los 5 swaps de sandbox juntos `✓ REPRODUCIBLE`.**
|
||||||
(`KVM=1 MEM=24576 SWAP_MAKE=1 SWAP_BUSYBOX=1 SWAP_LINUX_HEADERS=1 SWAP_BWRAP=1 SWAP_COREUTILS=1 ./scripts/selfhost-verify.sh`)
|
`KVM=1 MEM=... SWAP_MAKE=1 SWAP_BUSYBOX=1 SWAP_LINUX_HEADERS=1 SWAP_BWRAP=1 SWAP_COREUTILS=1
|
||||||
para el `✓ REPRODUCIBLE`, y la última pieza grande: rust/llvm (ya hay infra de deps; falta python/cmake/ninja en el toolchain).
|
./scripts/selfhost-verify.sh` reconstruyó los 4/4 dentro de la VM con el `/toolchain` hammerizado y
|
||||||
|
el `of_tree(stage1')` igualó `9adefb82…` bit a bit (~46 min, sobrevive presión de memoria). Recetas
|
||||||
|
extra de toolchain desde fuente añadidas después: `recipes/binutils.toml` (GNU binutils 2.45.1, CC=gcc
|
||||||
|
porque zig miscompila → segfault, link dinámico, inerte al of_tree porque zig ya provee as/ld/ar;
|
||||||
|
swapeable vía `SWAPS=`).
|
||||||
|
- ✅✅✅ **CERRADO — frente rust/llvm (la última pieza grande del toolchain):** cadena purista
|
||||||
|
`mrustc → rustc 1.90.0 → 1.91.0 → 1.91.1` con `x.py` real, reusando un LLVM 20.1.8 externo en todo
|
||||||
|
(sin rebuild). `rust-1.91.1-prefix/bin/{rustc,cargo}` corren standalone (rpath, host musl), versión
|
||||||
|
EXACTA de Alpine. **Auto-consistencia VERIFICADA in-VM (2026-06-18):** `SWAP_RUST=1 KVM=1
|
||||||
|
PRESEED=hammerd ./scripts/selfhost-verify.sh` → `✓ REPRODUCIBLE` bit a bit (host y VM dan
|
||||||
|
`of_tree=7fa6cb4e…` = `RUST_EXPECT_REF`, ≠ `9adefb82…` Alpine). Para el rebuild bit-reproducible
|
||||||
|
se committeó el `Cargo.lock` de arje-zero en tawasuyu + se bumpeó la receta (`--locked`); `PRESEED=hammerd`
|
||||||
|
es OBLIGATORIO (arje-zero vendorea ~1973 crates y un rebuild in-VM completo desborda RAM). Artefactos en
|
||||||
|
`scripts/rust-frontier/`.
|
||||||
|
- ✅✅✅ **CAPSTONE (2026-06-19): LOS 6 SWAPS JUNTOS `✓ REPRODUCIBLE` IN-VM** — los 5 tools de sandbox +
|
||||||
|
`SWAP_RUST` a la vez, `of_tree=7fa6cb4e…` bit a bit (~7 min, `MEM=12288 PRESEED=hammerd`, sin swap en el
|
||||||
|
host). El auto-alojamiento del toolchain del builder está COMPLETO; las piezas inertes al 4/4
|
||||||
|
(binutils/pkgconf) quedan salteadas por diseño. Capa de arranque restante (status libc, no vale
|
||||||
|
de-Alpinizar): gcc, m4, libz/libzstd runtime.
|
||||||
|
- ✅✅✅ **CERRADO — kernel-from-source ([SDD 11](11-bootstrap.md), último eslabón de soberanía):** el
|
||||||
|
kernel Linux 6.16.12 construido por hammer (`recipes/linux.toml`, `CC=gcc`, monolítico
|
||||||
|
e1000/overlay/userns=y) **BOOTEA la VM del selfhost-verify** y el rebuild in-VM da `✓ REPRODUCIBLE`
|
||||||
|
bit a bit (`HAMMER_KERNEL=1 KERNEL=<bzImage> KVM=1 MEM=16384 PRESEED=hammerd`). Config lean (build
|
||||||
|
~35→~14 min, bzImage 13→8.7 MB). El muro `pivot_root` (`/` = rootfs absoluto del mount-ns ⇒ bwrap no
|
||||||
|
pivota; quirk que el kernel host enmascaraba) se resolvió con un `/init` wrapper `switch_root` a tmpfs
|
||||||
|
(condicional a `HAMMER_KERNEL=1`, no toca el camino del kernel host). **Build-deps del kernel TODOS
|
||||||
|
de-Alpinizados:** `recipes/{flex,bison}.toml` (kconfig), `recipes/openssl.toml` (3.5.4, certs/extract-cert),
|
||||||
|
`recipes/elfutils.toml` (sólo libelf 0.194 para objtool, con shims musl mínimos). Capa de arranque
|
||||||
|
restante: m4, libz/libzstd, gcc (status libc).
|
||||||
|
- ✅ **Etapa A — orquestador `bootstrap all` + log de transparencia exportable:** `hammer_bootstrap::all`
|
||||||
|
encadena stage0→stage1→stage2 en una corrida del host (`hammer bootstrap all --url … --sha256 … --version …`)
|
||||||
|
y deja el `bootstrap.json` poblado; `hammer bootstrap manifest` lo imprime (la superficie de publicación
|
||||||
|
del log, SDD 11 §4). El veredicto `✓ REPRODUCIBLE` lo sigue sellando el rebuild in-VM (`selfhost-verify.sh`),
|
||||||
|
no el host — `all` ancla la referencia para que ese rebuild la compare. **Pendiente de la Etapa A:** el
|
||||||
|
smoke end-to-end de I3 (bus único) contra un init **vivo** (arje+hammerd corriendo) — no reproducible
|
||||||
|
sin la VM, mismo status que cualquier sello in-VM.
|
||||||
- ✅ **B.2 — `CRASHED` real a la capa de IA (cableado end-to-end):** el `Event::Crashed` del
|
- ✅ **B.2 — `CRASHED` real a la capa de IA (cableado end-to-end):** el `Event::Crashed` del
|
||||||
bus de agente ya tiene fuente real. **Fuente (arje):** `arje-bus` ganó `BusRequest::Subscribe`
|
bus de agente ya tiene fuente real. **Fuente (arje):** `arje-bus` ganó `BusRequest::Subscribe`
|
||||||
+ `BusPayload::Event(BusEvent)`; arje-zero difunde en `on_death` `EnteCrashed{id,label,status}`
|
+ `BusPayload::Event(BusEvent)`; arje-zero difunde en `on_death` `EnteCrashed{id,label,status}`
|
||||||
|
|||||||
Reference in New Issue
Block a user