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 1572Shell 203Rust 109Markdown 993728 Sutichaykuna

store-gc: guardián — no reportar «borrado» sin comprobarlo

El script informó «364 artefactos borrados · libres: 24G → 48G» y no había
borrado ninguno: los 364 de su propio manifiesto seguían enteros en el store.
`xargs rm -rf` salió con 0 y el echo se lo creyó. Se reprodujo: corriéndolo en
SEGUNDO PLANO el borrado no se materializa; en primer plano sí.

Da igual la causa: un rm que devuelve 0 no es prueba de que el fichero se fue.
La válvula de escape del disco estaba rota EN SILENCIO y encima reportaba
éxito, que es peor que fallar — el disco llegó al 98% mientras yo creía haber
liberado 24G.

Ahora recuenta sobre el filesystem y sale distinto de cero si sobrevivió algo.

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

514ae4413514d668b585b1cc6794470d853277da · ruwaq sergio · (2 killa ñawpaq) · tayta 85c25619a · kay commitpi sach'ata qhaway

Semántico sayk'uy

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

1 qillqakuna · +23 −1

diff --git a/scripts/store-gc.sh b/scripts/store-gc.sh
index a9e88a92..6638530b 100755
--- a/scripts/store-gc.sh
+++ b/scripts/store-gc.sh
@@ -110,4 +110,26 @@ mkdir -p work; cp "$OBJETIVO" "$MANIFIESTO"
 echo "==> manifiesto de lo borrado: $MANIFIESTO"
 ANTES=$(df -h /home 2>/dev/null | tail -1 | awk '{print $4}')
 sed "s|^|$STORE/|" "$OBJETIVO" | xargs rm -rf
-echo "==> $(wc -l < "$OBJETIVO") artefactos borrados · libres: $ANTES → $(df -h /home 2>/dev/null | tail -1 | awk '{print $4}')"
+
+# ── GUARDIÁN: NO reportar «borrado» sin comprobarlo ─────────────────────────────────────────────
+# 2026-08-07: este script informó «364 artefactos borrados · libres: 24G → 48G» y NO había borrado
+# NINGUNO — los 364 del manifiesto seguían enteros en el store, y los 24G que se liberaron esa vez
+# vinieron de otro lado. `xargs rm -rf` salió con 0 y el `echo` de abajo se lo creyó. (Se reprodujo:
+# corriendo el script en SEGUNDO PLANO el borrado no se materializa; en primer plano sí. Da igual la
+# causa: un `rm` que devuelve 0 no es prueba de que el fichero se fue.)
+#
+# Consecuencia real: la válvula de escape del disco estaba rota EN SILENCIO, y encima reportaba éxito,
+# que es peor que fallar. El disco llegó al 98%.
+#
+# Por eso ahora se RECUENTA sobre el filesystem y el script sale distinto de cero si sobrevivió algo.
+QUEDAN=0
+while IFS= read -r l; do [ -e "$STORE/$l" ] && QUEDAN=$((QUEDAN+1)); done < "$OBJETIVO"
+PEDIDOS=$(wc -l < "$OBJETIVO")
+AHORA=$(df -h /home 2>/dev/null | tail -1 | awk '{print $4}')
+if [ "$QUEDAN" -gt 0 ]; then
+  echo "!!  BORRADO INCOMPLETO: $QUEDAN de $PEDIDOS artefactos SIGUEN en $STORE."
+  echo "!!  No te fíes del espacio libre de abajo. Reintentá en PRIMER PLANO y volvé a verificar."
+  echo "==> libres: $ANTES → $AHORA"
+  exit 1
+fi
+echo "==> $PEDIDOS artefactos borrados y VERIFICADOS (0 sobrevivientes) · libres: $ANTES → $AHORA"