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 1457Shell 147Markdown 90Rust 853012 Sutichaykuna

SEGUNDA corrección: lo que medía el test era DERIVA, no no-determinismo — el corpus SÍ reproduce

El §1.bis dijo «sí hay no-determinismo» porque appstream y bison divergían. También estaba mal,
y por un fallo de diseño del propio test.

`verificar-repro.sh` compara el artefacto GUARDADO contra una reconstrucción de hoy. Pero el
guardado puede tener meses: se construyó con OTRO estado del lab. El test conflaba dos cosas:
  · NO-DETERMINISMO — mismas entradas, mismo lab, salidas distintas (rompe el invariante);
  · DERIVA — el artefacto viejo no es lo que el lab de hoy produce (el mundo se movió).

LA PRUEBA QUE LAS SEPARA es construir DOS VECES HOY, y se dio sin querer: al reejecutar el
verificador sobre recetas ya reconstruidas, TODAS pasaron a reproducir.
    anew  ✗ diverge → ✓ REPRODUCE
    gron  ✗ diverge → ✓ REPRODUCE
    age   ✗ diverge → ✓ REPRODUCE   (y en la 1ª ni instalaba los mismos ficheros: faltaba age-inspect)

⇒ EL CORPUS ES DETERMINISTA HOY. Lo que hay es deriva contra artefactos viejos.

QUÉ SIGNIFICA, sin adornos:
· El argumento de reproducibilidad para el split de debug SE CAE. El split se justifica por
  ESPACIO (~60%), que sigue siendo real y grande. Nada más.
· Pero la DERIVA es un problema por derecho propio y mayor: el store contiene artefactos que el
  lab de hoy no reproduciría, así que «nuestros artefactos son verificables por terceros» es
  falso para parte del corpus — quien reconstruya no obtendrá lo publicado. `age` es el caso
  feo: la reconstrucción ni siquiera instala los mismos ficheros.
· ⇒ La reconstrucción masiva SIGUE valiendo la pena, pero por otra razón: no para arreglar el
  determinismo sino para PONER EL STORE AL DÍA CON EL LAB y que la promesa sea cierta.

Y otro hallazgo del mismo experimento: en el hub las recetas Go SÍ reconstruyen (0 fallos). Lo
que fallaba en el worker era la RED para bajar los módulos, no las recetas. Eso cambia el
bloqueante de la etapa 4: no es «Go no reconstruye», es «el worker no tiene red para módulos».

LA LECCIÓN, que es la misma tres veces en este documento: un test hay que diseñarlo contra la
PREGUNTA, no contra lo que es fácil de comparar. Comparar con lo que hay en el store es cómodo;
comparar dos builds de hoy es lo que contesta. El script queda anotado con esto en la cabecera.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

102aabd1ffbe3645985a14d90449cab4001e65df · ruwaq sergio · (2 killa ñawpaq) · tayta ca83c2ae6 · kay commitpi sach'ata qhaway

Semántico sayk'uy

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

2 qillqakuna · +58 −0

diff --git a/docs/23-plan-rehasheo.md b/docs/23-plan-rehasheo.md
index 07c33892..efc54b0a 100644
--- a/docs/23-plan-rehasheo.md
+++ b/docs/23-plan-rehasheo.md
@@ -231,3 +231,51 @@ y la diferencia importa para dimensionar el alojamiento del espejo, que es una d
 > midiera otra (tamaño de artefacto), y llegó a tres documentos. El número no era falso; **la unidad
 > sí**. Cuando un número vaya a decidir un gasto, conviene volver a la medición original y comprobar
 > QUÉ estaba midiendo.
+
+
+---
+
+## 7. 🔴 SEGUNDA CORRECCIÓN: lo que medía el test era DERIVA, no no-determinismo
+
+El §1.bis dijo «sí hay no-determinismo» al ver que `appstream` y `bison` divergían. **También estaba
+mal**, y por un fallo de diseño del propio test.
+
+`scripts/verificar-repro.sh` aparta el artefacto **guardado en el store** y lo compara con una
+reconstrucción de hoy. Pero ese artefacto guardado puede tener meses: se construyó con **otro estado
+del lab** (otro zig, otras flags, otro entorno). Así que el test conflaba dos cosas muy distintas:
+
+- **no-determinismo** — mismas entradas, mismo lab, salidas distintas. Es lo que rompe el invariante.
+- **deriva** — el artefacto viejo no es lo que el lab de HOY produce. No es no-determinismo: es que
+  el mundo se movió.
+
+**La prueba que las separa: construir DOS VECES HOY.** Y se hizo, sin querer al principio: al volver
+a correr el verificador sobre recetas ya reconstruidas, todas pasaron a REPRODUCIR.
+
+| receta | 1ª corrida (viejo vs hoy) | 2ª corrida (hoy vs hoy) |
+|---|---|---|
+| `anew` | ✗ diverge | ✓ **REPRODUCE** |
+| `gron` | ✗ diverge | ✓ **REPRODUCE** |
+| `age` | ✗ diverge (¡y le faltaba `age-inspect`!) | ✓ **REPRODUCE** |
+
+⇒ **El corpus es determinista hoy.** Lo que hay es deriva contra artefactos viejos.
+
+### Qué significa para la campaña, sin adornos
+- **El argumento de reproducibilidad para el split de debug se cae.** El split se justifica por
+  ESPACIO (~60%, §6), que sigue siendo real y grande. Nada más.
+- **Pero la deriva es un problema por derecho propio, y mayor**: el store contiene artefactos que el
+  lab de hoy **no reproduciría**. Mientras eso siga así, la frase «nuestros artefactos son
+  verificables por terceros» es falsa para una parte del corpus — un tercero que reconstruya no
+  obtendrá lo publicado. `age` es el caso feo: la reconstrucción **ni siquiera instala los mismos
+  ficheros** (falta `age-inspect`), o sea que la deriva no es cosmética.
+- ⇒ La reconstrucción masiva **sigue valiendo la pena**, pero por una razón distinta de la que este
+  documento decía: no para *arreglar* el determinismo, sino para **poner el store al día con el lab**
+  y que la promesa de reproducibilidad sea cierta sobre todo el corpus.
+
+### La lección, que es la misma tres veces
+Este documento se equivocó tres veces seguidas y las tres se corrigieron midiendo:
+1. «el `-ffile-prefix-map` no hace falta» — falso, por leer una sola muestra;
+2. «sí hay no-determinismo» — falso, por un test que confundía deriva con no-determinismo;
+3. y de paso, el «79%» que medía contenido binario y se citaba como tamaño de artefacto.
+
+**Un test hay que diseñarlo contra la pregunta, no contra lo que es fácil de comparar.** Comparar
+con lo que hay en el store es cómodo; comparar dos builds de hoy es lo que contesta.
diff --git a/scripts/verificar-repro.sh b/scripts/verificar-repro.sh
index d296f3d0..e6931648 100755
--- a/scripts/verificar-repro.sh
+++ b/scripts/verificar-repro.sh
@@ -9,6 +9,16 @@
 # prebuilt, cadenas literales del fuente, rutas de autores en assets SVG). Un grep sobre binarios da
 # CANDIDATOS, no veredictos. Ver SDD 23 §1.
 #
+# ── ⚠ QUÉ MIDE ESTE SCRIPT, EXACTAMENTE (leer antes de sacar conclusiones) ─────────────────────
+# Compara el artefacto GUARDADO en el store contra una reconstrucción de hoy. Eso NO es lo mismo que
+# medir no-determinismo, y confundirlos costó dos conclusiones equivocadas en el SDD 23:
+#   · si el artefacto guardado es viejo, se construyó con OTRO estado del lab ⇒ una diferencia es
+#     DERIVA («el mundo se movió»), no no-determinismo;
+#   · el no-determinismo es: mismas entradas, MISMO lab, salidas distintas.
+# ⇒ Para medir NO-DETERMINISMO hay que correr el script DOS VECES: la primera pone el artefacto al
+#   día con el lab actual, y es la SEGUNDA la que contesta la pregunta. Medido: anew, gron y age
+#   divergían en la primera corrida y REPRODUCEN en la segunda.
+#
 # ── EL MÉTODO, Y POR QUÉ ES BARATO ─────────────────────────────────────────────────────────────
 # Se APARTA el artefacto (no se borra) y se reconstruye. Como las DEPS siguen en el store, el rebuild
 # es sólo el paquete en cuestión, no su cadena — que es lo que hace viable verificar decenas. Después