gioser

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 1347Shell 123Rust 78Markdown 712325 Sutichaykuna

Etapa G: granja Go pesada — watchdog no purga modcache con vendor activo + syncthing main en cmd/

go-12 (terraform/k8s) destapó la race: con árboles de deps de varios GB en paralelo, el disco
cruza DISK_HIGH y el watchdog corría 'go clean -modcache' a mitad de los 'go mod vendor' en vuelo
(.partial: no such file) ⇒ 5 recetas no convergían. Ahora difiere la purga del modcache si hay un
vendor de host activo (la purga de work/sources ya libera lo grueso y es segura). syncthing: main
real en ./cmd/syncthing (la raíz tiene build-constraints que excluyen todo).

06ba41733696dfe4c5881b60213e74ab1292c5bc · ruwaq sergio · (3 killa ñawpaq) · tayta 5fb24e0de · kay commitpi sach'ata qhaway

Semántico sayk'uy

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

2 qillqakuna · +16 −3

diff --git a/recipes/incoming/syncthing.toml b/recipes/incoming/syncthing.toml
index 39c2a4a3..ee2e4052 100644
--- a/recipes/incoming/syncthing.toml
+++ b/recipes/incoming/syncthing.toml
@@ -13,7 +13,9 @@ commit = "c0c401efebf27af58b91309b381d7d3eae870a64"
 compiler = "zig-cc"
 target   = "x86_64-linux-musl"
 link     = "static"
-flags    = []
+# la raíz trae .go con build-constraints (excluyen todos los archivos) ⇒ el main real está en
+# ./cmd/syncthing; lo forzamos (gana sobre detect_go_main, que elige la raíz por heurística).
+flags    = ["./cmd/syncthing"]
 
 # buildInputs de nix (no usados con CGO off): go
 [deps]
diff --git a/scripts/farm/farm-worker-loop.sh b/scripts/farm/farm-worker-loop.sh
index 7ac297ea..07c317ab 100755
--- a/scripts/farm/farm-worker-loop.sh
+++ b/scripts/farm/farm-worker-loop.sh
@@ -34,8 +34,19 @@ DISK_HIGH="${DISK_HIGH:-82}"
     done
     use=$(df --output=pcent "$HAMMER_DIR" 2>/dev/null | tr -dc '0-9')
     if [ -n "$use" ] && [ "$use" -ge "$DISK_HIGH" ]; then
-      echo "$(date -u +%FT%TZ) watchdog: disco ${use}% ≥ ${DISK_HIGH}% ⇒ purgo caches Go"
-      go clean -modcache 2>/dev/null; go clean -cache 2>/dev/null
+      # OJO: `go clean -modcache` borra ~/go/pkg/mod ENTERO. Si lo corre mientras un `go mod vendor`
+      # del fetch está bajando módulos, le arranca el cache bajo los pies (`.partial: no such file`)
+      # y ESE vendor falla — y con tandas pesadas (k8s/azure SDK, varios GB en paralelo) son MUCHOS a
+      # la vez ⇒ el lote no converge. La purga de work/sources de arriba ya liberó lo grueso (segura:
+      # saltea bind-montadas). Sólo purgo el modcache si NO hay vendor de host activo; si lo hay,
+      # difiero al próximo tick (el sandbox `go install` usa GOPATH=/tmp + -mod=vendor ⇒ no toca el
+      # modcache del host, así que purgar durante un build sandbox sigue siendo seguro).
+      if pgrep -f 'go mod vendor' >/dev/null 2>&1; then
+        echo "$(date -u +%FT%TZ) watchdog: disco ${use}% ≥ ${DISK_HIGH}% pero hay vendor activo ⇒ difiero purga modcache"
+      else
+        echo "$(date -u +%FT%TZ) watchdog: disco ${use}% ≥ ${DISK_HIGH}% ⇒ purgo caches Go"
+        go clean -modcache 2>/dev/null; go clean -cache 2>/dev/null
+      fi
     fi
   done
 ) &