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`.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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":
|
||||
|
||||
Reference in New Issue
Block a user