gioser

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 1182Shell 87Rust 63Markdown 541592 Definitions

descargas: el guardián estaba ROJO hace dos días y nadie lo corría

La barrida de regresión del frente (14 guardianes tras rehacer host y navegador) encontró uno en
rojo: `test-atuq-descargas.py` buscaba el CAS en `<estado>/descargas-cas` y el host lo escribe en
`<estado>/cas` desde el commit del archivo personal (357791a85, 2026-09-10) — el §6.3 UNIFICÓ los dos
CAS, que es justo lo que hace que una página archivada y un fichero bajado con el mismo contenido
sean un solo objeto. Lo renombré yo y no actualicé este guardián.

Lo que importa no es el renombre: es que el guardián estuvo rojo dos días sin que nadie se enterara,
porque **un guardián que no se ejecuta no protege de nada** — la misma familia que el cache-hit que
congela regresiones. Los otros 13 pasan.

Arreglado el path, y el README dice ahora por qué el directorio se llama `cas` y no `descargas-cas`.

29831e6296a6816874c32705e9d6231bcaf085f8 · by Sergio · (1 month ago) · parent 432a0e256 · browse the tree at this commit

Semantic delta · 1

scripts/test-atuq-descargas.py

  • body changed fn main

2 files · +12 −3

diff --git a/recipes/atuq/README.md b/recipes/atuq/README.md
index e0281861..e2e0ca8b 100644
--- a/recipes/atuq/README.md
+++ b/recipes/atuq/README.md
@@ -179,11 +179,15 @@ No es un almacén nuevo: es `arje-cas`, el mismo formato y el mismo hash que usa
 
 ⚠ **Tres cosas que hay que saber, y las tres están medidas:**
 
-1. **La raíz del CAS de descargas NO es la del sistema.** `arje_cas::gc` borra todo blob que no esté
+1. **La raíz del CAS del navegador NO es la del sistema.** `arje_cas::gc` borra todo blob que no esté
    en el set `reachable` de su llamador, y el único que existe hoy (`arje-brain`, `GcCas`) lo arma con
    la cadena de audit y las raíces vivas del grafo. Una descarga no está en ninguno: **el primer
-   `GcCas` se la llevaría, en silencio.** Por eso van a `<estado>/descargas-cas`. El precio, dicho:
+   `GcCas` se la llevaría, en silencio.** Por eso van a `<estado>/cas`. El precio, dicho:
    `tejido` sirve el CAS por defecto, así que compartir una descarga hoy exige apuntarlo a esa raíz.
+   ⚠ Se llamaba `descargas-cas` hasta que entró el §6.3: ahora el archivo personal y las descargas
+   comparten **un** CAS, que es lo que hace que una página archivada y un fichero bajado con el mismo
+   contenido sean **un solo objeto**. El guardián de descargas se quedó mirando el nombre viejo y
+   estuvo rojo dos días sin que nadie lo corriera.
 2. **El fichero que bajaste no se toca.** Se copia al CAS y se deja donde estaba. El guardián lo
    comprueba byte a byte.
 3. **La extensión observa, no intercepta.** Se entera cuando la descarga terminó. Meterse en el medio
diff --git a/scripts/test-atuq-descargas.py b/scripts/test-atuq-descargas.py
index edab148f..609a4997 100755
--- a/scripts/test-atuq-descargas.py
+++ b/scripts/test-atuq-descargas.py
@@ -247,7 +247,12 @@ def main():
             return None
 
         uno, dos = ingerido(bajadas[0]), ingerido(bajadas[1])
-        cas = os.path.join(salida, "hogar", ".local", "state", "puriy-costura", "descargas-cas")
+        # ⚠ El directorio es `cas` y no `descargas-cas` desde que el §6.3 entró: el archivo personal
+        # y las descargas comparten UN CAS, que es justo lo que hace que una página archivada y un
+        # fichero bajado con el mismo contenido sean un solo objeto. Este guardián se quedó mirando
+        # el nombre viejo y estuvo ROJO dos días sin que nadie lo corriera — la prueba de que un
+        # guardián que no se ejecuta no protege de nada.
+        cas = os.path.join(salida, "hogar", ".local", "state", "puriy-costura", "cas")
         indice = os.path.join(salida, "hogar", ".local", "state", "puriy-costura", "descargas.json")
 
         if uno["dedup"] != "false" or uno["veces"] != "1":