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 1411Shell 141Markdown 85Rust 842918 Sutichaykuna

selfhost-verify: fix CONFIRMADO + re-base EXPECT_REF a 9adefb82 (determinista)

Verificado: arje-zero con CARGO_BUILD_JOBS=1 y TODAS las CPUs del host sale
byte-idéntico al build serial ⇒ el jobserver serializa el backend paralelo de
rustc/LLVM (ThinLTO) independientemente del nº de CPUs. La pieza que faltaba para
la reproducibilidad host↔VM (codegen-units=1 no bastaba).

- EXPECT_REF re-baseado: 0039b2b9 (build paralelo no-fiable) → 9adefb82 (serial,
  determinista, = lo que produce la VM con 1 vCPU).
- Baseline del host refrescado: store/ re-sellado con el arje-zero determinista.
- docs/10-roadmap.md: causa raíz documentada (make inocente; arje-zero/ThinLTO).

Pendiente: re-correr el verify in-VM con el fix para cerrar el ✓ REPRODUCIBLE y
validar de paso la pieza 1 (swap del make).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

004a895829b651fa70692cdddc7f0f0929ca1b4d · ruwaq sergio · (4 killa ñawpaq) · tayta be6f2e6e8 · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

2 qillqakuna · +16 −10

diff --git a/docs/10-roadmap.md b/docs/10-roadmap.md
index 354eb780..c3af3c32 100644
--- a/docs/10-roadmap.md
+++ b/docs/10-roadmap.md
@@ -237,14 +237,18 @@ Diseño completo en [SDD 11 — Bootstrap from-scratch](11-bootstrap.md). Resume
   montan el `make` hammer sobre `/toolchain/usr/bin/make` (pisando el de Alpine) y lo anclan en el
   **hash lógico** del builder ⇒ la procedencia deja de ser "todo Alpine" y se vuelve auditable
   (pura `b3:8a370f5d…` vs swapped `b3:e7e2282c…` en el host). El verify lo expone con `SWAP_MAKE=1`.
-  **Stage 2 in-VM con el swap corrido (2026-06-13):** dio `✗ DIVERGENTE` (`of_tree(stage1')=9adefb82… ≠
-  0039b2b9…`). **Pero el make es inocente:** el diagnóstico en host (musl+busybox con hammer-make en un
-  store desechable ⇒ byte-idénticos al baseline vía `diff -r`, y el ensamblado completo ⇒ `of_tree`
-  EXACTO `0039b2b9…`) prueba que hammer-make reproduce el baseline. La divergencia es **no-determinismo
-  in-VM** que coincidió con una corrida bajo presión de memoria fuerte (97 min wall para ~27 min de
-  compute, swap thrashing), no el swap. Pendiente: re-correr el verify **sin** swap (control) para
-  confirmar la flakiness in-VM independiente del make (sospechoso: arje-zero o la presión de memoria),
-  cerrarla, y *después* validar la pieza 1; luego make/autotools → linux-headers → bwrap → rust/llvm.
+  **Stage 2 in-VM con el swap (2026-06-13): `✗ DIVERGENTE` → causa raíz hallada y arreglada, make
+  inocente.** El swap dio `of_tree(stage1')=9adefb82… ≠ 0039b2b9…`, pero el control **sin** swap dio el
+  *mismo* `9adefb82…` ⇒ el make no era la causa. Bisección (descartando uno a uno: musl/busybox idénticos
+  con hammer-make incluso a `-j1`; hammerd reproduce): el único flaky era **arje-zero**, no-determinista
+  **incluso host-a-host** (~62 KB de diferencia, mismo rustc/commit/flags) — el backend **paralelo** de
+  rustc/LLVM (ThinLTO) que `codegen-units=1` NO serializa. Builds seriales (la VM tiene 1 vCPU, o
+  `taskset -c 0`) reproducían bit-a-bit a `9adefb82…`; los paralelos divergían. El viejo `0039b2b9…` era
+  un build paralelo no-fiable. **Fix:** `CARGO_BUILD_JOBS=1` en el sandbox (serializa el jobserver ⇒
+  backend de 1 hilo, independiente del nº de CPUs) — verificado: arje-zero a todas las CPUs + `JOBS=1`
+  da byte-idéntico al serial. Baseline del host refrescado y `EXPECT_REF` re-baseado a `9adefb82…`.
+  **Pendiente:** re-correr el verify in-VM con el fix para cerrar el `✓ REPRODUCIBLE` (y de paso validar
+  la pieza 1, el swap del make); luego make/autotools → linux-headers → bwrap → rust/llvm.
 - ⏭️ **También pendiente (Stage 1):** bus único (B.2: exponer el `CRASHED` a la capa de IA) y
   atestación arje (A1/A2).
 
diff --git a/scripts/selfhost-verify.sh b/scripts/selfhost-verify.sh
index f1b73d39..4d5d20e8 100755
--- a/scripts/selfhost-verify.sh
+++ b/scripts/selfhost-verify.sh
@@ -40,8 +40,10 @@ TOOLCHAIN="${TOOLCHAIN:-.dev-fs/alpine}"
 TOOLCHAIN_TAG="${TOOLCHAIN_TAG:-alpine-3.23.4-builder}"
 # Referencia conocida-buena (store baseline en el host de dev, runbook §8c). Si tu corrida produce
 # otra, o bien cambió algo del pin (toolchain/recipes/seed) o hay un no-determinismo nuevo.
-# Baseline con codegen-units=1 en el sandbox (reproducibilidad de arje-zero, ver §8c y SDD 09 §2).
-EXPECT_REF="${EXPECT_REF:-b3:0039b2b90fddf62221ad5b804a34df93ef57dc533cb210512cf53752876afdff}"
+# Baseline DETERMINISTA con codegen-units=1 + CARGO_BUILD_JOBS=1 en el sandbox: el segundo serializa
+# el backend paralelo de rustc/LLVM (ThinLTO), sin el cual arje-zero divergía ~62 KB a >1 CPU (el
+# viejo 0039b2b9… era un build paralelo no-reproducible). Ver §8c y SDD 09 §2.
+EXPECT_REF="${EXPECT_REF:-b3:9adefb82b8457c8616cc89e6bb725a787ea52641f65d60d989d819e4872735ac}"
 : "${KVM:=$([[ -w /dev/kvm ]] && echo 1 || echo 0)}"
 
 say() { printf '\n\033[1;36m==> %s\033[0m\n' "$*"; }