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

Etapa G (granja): watchdog protege árboles calientes — cura corrupción de deps transitivas

El watchdog de disco purgaba work/sources/* protegiendo solo árboles bind-montados
por bwrap (prot.1) o cuyo nombre coincide con la receta en vuelo (prot.2). Una dep
transitiva (cairo bajo pango/gtk4) se extrae host-side ANTES del bwrap y con nombre
que no coincide con la receta ⇒ el rm -rf competía con el tar y dejaba el árbol a
medias: 'Cannot mkdir' durante la extracción, luego 'Directory not empty' para
siempre (falla rápido antes de bwrap, nunca se recupera). Prot.3: no purgar árboles
modificados hace <2 min (extrayéndose ahora); los fríos se purgan y re-extraen limpio.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

114a02b597d53ba0e0bf9bb3b114945dacdfbf9d · ruwaq sergio · (3 killa ñawpaq) · tayta 80a9cacd0 · kay commitpi sach'ata qhaway

Semántico sayk'uy

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

1 qillqakuna · +6 −0

diff --git a/scripts/farm/farm-worker-loop.sh b/scripts/farm/farm-worker-loop.sh
index 1ada8a8a..0bf6bf83 100755
--- a/scripts/farm/farm-worker-loop.sh
+++ b/scripts/farm/farm-worker-loop.sh
@@ -38,6 +38,12 @@ DISK_HIGH="${DISK_HIGH:-82}"
       printf '%s\n' "$active" | grep -qxF "$dd" && continue
       nm=$(basename "$dd"); nm=${nm%-*}   # work/sources/<name>-<sha40> → <name> (el sha no trae '-')
       printf '%s\n' "$building" | grep -qxF "$nm" && continue
+      # Protección 3: árbol CALIENTE (modificado hace <2 min) ⇒ se está extrayendo AHORA. Una dep
+      # transitiva (p.ej. cairo bajo pango/gtk4) se extrae host-side ANTES del bwrap y con un nombre
+      # que NO coincide con la receta en vuelo ⇒ protecciones 1 y 2 no la cubren. Sin esto, el rm -rf
+      # compite con el tar y deja el árbol a medias ("Cannot mkdir" / luego "Directory not empty" para
+      # siempre). Un árbol en frío (extracción ya fallida/terminada) queda purgable ⇒ se re-extrae limpio.
+      [ -n "$(find "$dd" -mmin -2 -print -quit 2>/dev/null)" ] && continue
       rm -rf "$dd"
     done
     use=$(df --output=pcent "$HAMMER_DIR" 2>/dev/null | tr -dc '0-9')