docs(sdd33): el §4 pasa de «se puede ejecutar» a «corre» — faltaba el paso que junta las dos mitades
Ayer dejé el §4 con sus dos mitades construidas y dije que ya se podía ejecutar de punta a punta. Era optimista: **nadie comparaba**. Dos mitades que no se encuentran son dos ficheros, no un disparador, y el §4 seguía siendo prosa aunque cada pieza por separado estuviera probada. Entra `imagen-rancia.py` con sus cinco caminos probados, incluido el que más importa de redactar bien: una imagen que NO declara su clausura es «no se puede saber», no «al día» — tratar la ausencia como conformidad es la forma exacta de que un medio rancio pase por bueno. Y queda escrito el hallazgo lateral del control de rancidez: perturbar el hash en UN grafo hizo saltar la guarda de hashes contradictorios entre los cinco, así que el informe dijo RANCIA y además avisó de que su entrada era inconsistente. Una guarda que nunca había disparado, haciendo su trabajo sobre una inconsistencia real. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
1 qillqakuna · +27 −4
diff --git a/docs/33-versionado-y-relojes.md b/docs/33-versionado-y-relojes.md
index ad3756c8..c2b7f6a4 100644
--- a/docs/33-versionado-y-relojes.md
+++ b/docs/33-versionado-y-relojes.md
@@ -47,7 +47,7 @@ que el sitio empiece a mentir — que es lo que ya pasó con un sha256 pegado a
|---|---|---|---|
| **cosecha** | 30 min | trae del worker lo que se selló, siembra recetas, regenera el estado y commitea | **anda** (`scripts/farm/cosecha-cron.sh`) |
| **río arriba** | 1 día | pregunta a cada fuente si hay algo más nuevo que el pin, y deja un informe | **la pieza implementada hoy** |
-| **medios** | cuando el cierre cambie | rearma imágenes e instaladores y publica | **las dos piezas andan** (§4): el hash de la clausura se publica cada ciclo y la imagen lo declara en su `os-release`. Falta que haya imágenes publicadas con las que comparar |
+| **medios** | cuando el cierre cambie | rearma imágenes e instaladores y publica | **anda el bucle entero** (§4): el cierre se publica cada ciclo, la imagen lo declara en su `os-release` y `imagen-rancia.py` compara. Falta que haya imágenes con las que comparar |
### 2.1 Río arriba — `scripts/fuentes/upstream-vigia.py`
@@ -218,9 +218,32 @@ seguidas dan un `os-release` **byte a byte idéntico**.
cuántos faltan. Un número con pinta de identidad sobre una imagen que no es la clausura que dice
ser es lo peor de los dos mundos, y el §4 compararía contra una mentira.
-⇒ **El §4 ya se puede ejecutar de punta a punta.** Lo que queda no es una pieza que falte: es que
-no hay imágenes publicadas todavía (el sitio no ofrece descargas; en `/srv/repo` hay paquetes
-`.tkn`). El día que se publique una, su `os-release` ya trae con qué compararla.
+✅ **Y el paso que las junta — porque dos mitades que no se encuentran son dos ficheros, no un
+disparador.** `scripts/imagen-rancia.py` lee el `TAKANA_CIERRE` de cada imagen y lo compara con el
+vigente de su perfil; dice cuáles rearmar y no rearma. Cableado al latido con puerta diaria.
+
+Cinco caminos, los cinco probados:
+
+| | |
+|---|---|
+| **al día** | hidratando `metal-tigerlake` de verdad y comparando ⇒ `sha256:5fed4348…` |
+| **rancia** | perturbando el hash de `intel-ucode` en el grafo ⇒ lleva `5fed4348…`, hoy `d6fef70f…` |
+| **rancia** | imagen que declara un digest viejo |
+| **incompleta** | armada con `--allow-missing` ⇒ rearmar |
+| **muda** | imagen anterior al §4 ⇒ «no se puede saber», **no** «al día» |
+
+⚠ Lo último no es un detalle de redacción: **tratar la ausencia de declaración como conformidad es
+la forma exacta de que un medio rancio pase por bueno.**
+
+Y el control de rancidez destapó algo que no se buscaba: saltó la guarda de **hashes contradictorios
+entre grafos** —perturbar uno solo deja a los otros cuatro con el hash viejo— así que dijo RANCIA
+*y* avisó de que la entrada era inconsistente. Una guarda que nunca había disparado, haciendo su
+trabajo.
+
+⇒ **El §4 corre de punta a punta.** Lo que queda no es una pieza que falte: es que no hay imágenes
+publicadas todavía (el sitio no ofrece descargas; en `/srv/repo` hay paquetes `.tkn`). El registro
+`docs/state/imagenes.txt` está vacío a propósito, y existe para que el día que se arme una,
+vigilarla sea **añadir una línea** en vez de acordarse de que esto existe.
## 5. Lo que este documento NO decide