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>
This commit is contained in:
@@ -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
|
> 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
|
> sí**. Cuando un número vaya a decidir un gasto, conviene volver a la medición original y comprobar
|
||||||
> QUÉ estaba midiendo.
|
> 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.
|
||||||
|
|||||||
@@ -9,6 +9,16 @@
|
|||||||
# prebuilt, cadenas literales del fuente, rutas de autores en assets SVG). Un grep sobre binarios da
|
# prebuilt, cadenas literales del fuente, rutas de autores en assets SVG). Un grep sobre binarios da
|
||||||
# CANDIDATOS, no veredictos. Ver SDD 23 §1.
|
# 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 ─────────────────────────────────────────────────────────────
|
# ── 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
|
# 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
|
# es sólo el paquete en cuestión, no su cadena — que es lo que hace viable verificar decenas. Después
|
||||||
|
|||||||
Reference in New Issue
Block a user