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 1373Shell 116Rust 74Markdown 641915 Definitions

store-gc: la poda ocurrio y su registro NO se escribio

Hoy `--aplicar` borro los 256 superados y acto seguido murio con

    scripts/store-gc.sh: line 143: work/store-gc-superados.txt: No such file or directory

Esa combinacion —borrado hecho, ledger sin escribir— es exactamente la que
reabre el bucle churn que 2026-08-07 costo 362 artefactos y 24 G: `farm-sync`
usa ese fichero como --exclude-from, y sin el la proxima cosecha del worker nos
devuelve lo mismo que acabamos de borrar. El sintoma seria «dos podas con el
mismo numero», que ya sabemos leer como señal.

El manifiesto de la linea 109 SI se escribio, y la diferencia entre los dos es
que aquel hace `mkdir -p work` antes. Ahora el ledger usa ruta ABSOLUTA
($ROOT/work), hace mkdir+touch, y si aun asi no puede escribirse el script
FALLA RUIDOSAMENTE diciendo que los borrados van a volver y como reconstruir el
registro a mano — en vez de informar exito como hasta ahora.

El ledger de esta tanda queda reconstruido desde su manifiesto (256 entradas).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xd5DComN9Nu47TBpYMBHBn

86c3cc787e4d968d494846a286abad115c55773f · by Sergio · (2 months ago) · parent 2b4999f68 · browse the tree at this commit

Semantic delta

No definition changed: this change is text, documentation or data.

1 files · +16 −3

diff --git a/scripts/store-gc.sh b/scripts/store-gc.sh
index c8684e06..f7dfd4cf 100755
--- a/scripts/store-gc.sh
+++ b/scripts/store-gc.sh
@@ -138,7 +138,20 @@ fi
 # el store del worker entero; el worker no se poda, así que nos devolvía lo borrado en cada cosecha.
 # Podar → cosechar → vuelven. Este registro es la memoria que le faltaba al sistema: `farm-sync` lo
 # usa como `--exclude-from`. Sin él, el gc es una rueda de hámster que informa éxito cada vez.
-LEDGER="work/store-gc-superados.txt"
-cat "$OBJETIVO" "$LEDGER" 2>/dev/null | sort -u > "$LEDGER.tmp" && mv "$LEDGER.tmp" "$LEDGER"
-echo "==> registro acumulado: $(wc -l < "$LEDGER") artefactos que NO deben volver ($LEDGER)"
+# ⚠ RUTA ABSOLUTA Y `touch` PREVIO. El 2026-08-21 esta línea murió con
+# «work/store-gc-superados.txt: No such file or directory» DESPUÉS de haber borrado ya los 256
+# artefactos — o sea que la poda ocurrió y su registro NO se escribió, que es la combinación exacta
+# que reabre el bucle churn: `farm-sync` no tiene qué excluir y la cosecha los devuelve. El script
+# hace `cd "$ROOT"` al arrancar, así que la ruta relativa DEBERÍA valer; que fallara igual es razón
+# de sobra para no depender de ello en el paso que evita repetir el trabajo de una tanda entera.
+LEDGER="$ROOT/work/store-gc-superados.txt"
+mkdir -p "$ROOT/work" && touch "$LEDGER"
+if cat "$OBJETIVO" "$LEDGER" 2>/dev/null | sort -u > "$LEDGER.tmp" && mv "$LEDGER.tmp" "$LEDGER"; then
+  echo "==> registro acumulado: $(wc -l < "$LEDGER") artefactos que NO deben volver ($LEDGER)"
+else
+  # Ruidoso a propósito: sin ledger la poda es una rueda de hámster que informa éxito cada vez.
+  echo "!!  NO pude escribir el registro $LEDGER — los $PEDIDOS borrados VOLVERÁN en la próxima" >&2
+  echo "!!  cosecha. Reconstruilo con: sort -u $MANIFIESTO > $LEDGER" >&2
+  exit 1
+fi
 echo "==> $PEDIDOS artefactos borrados y VERIFICADOS (0 sobrevivientes) · libres: $ANTES → $AHORA"