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
Semantic delta
No definition changed: this change is text, documentation or data.
1 files · +16 −3
- scripts/store-gc.sh +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"