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 604Rust 56Shell 36Markdown 281227 Definiciones

farm: JOBS=1 en el worker-loop mientras el ADR 0012 esté sin decidir

`build-farm.sh` usa `xargs -P$JOBS`; con >1, dos recetas que comparten dep disparan la carrera del
árbol de fuentes del ADR 0012 y el árbol queda roto para siempre. Se vio a escala: al invalidar
libdrm, 118 de las 205 recetas KDE pasaron de cache-hit a rebuild real y ~93 murieron con
"/src/.zwrap/cc is not a full path to an existing compiler tool" — el wrapper de zig que la receta
deja en el ÁRBOL DE FUENTE, barrido por el fetch concurrente de otra receta sobre el mismo qtbase.
El reintento serial de build-farm tampoco las recupera: el árbol ya quedó inconsistente.

La caché estaba ocultando la carrera, no evitándola. Serializar es la única mitigación correcta
hasta que el ADR 0012 elija salida.

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

25e3878331cf90873ac38b0dcca2f5d2880972b9 · por sergio · (hace 3 meses) · padre 4e9b6327e · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +11 −1

diff --git a/scripts/farm/farm-worker-loop.sh b/scripts/farm/farm-worker-loop.sh
index f5c616fa..04c4b957 100755
--- a/scripts/farm/farm-worker-loop.sh
+++ b/scripts/farm/farm-worker-loop.sh
@@ -12,7 +12,17 @@ set -uo pipefail
 HAMMER_DIR="${HAMMER_DIR:-/opt/hammer}"
 cd "$HAMMER_DIR"
 . "$HOME/.cargo/env" 2>/dev/null || true
-JOBS="${JOBS:-$(nproc)}"
+# JOBS=1 MIENTRAS EL ADR 0012 ESTÉ SIN DECIDIR (2026-07-22). `build-farm.sh` usa `xargs -P$JOBS`, y
+# con >1 dos recetas que compartan dep disparan la carrera del árbol de fuentes: ambas hacen fetch
+# del mismo `work/sources/<dep>-<sha>`, una borra mientras la otra usa, y el árbol queda ROTO PARA
+# SIEMPRE. Se vio a escala: al invalidar libdrm, 118 de las 205 recetas KDE tuvieron que reconstruir
+# de verdad (antes eran cache-hits que ocultaban el problema) y ~93 murieron con
+# "/src/.zwrap/cc is not a full path to an existing compiler tool" — el wrapper de zig que la receta
+# deja EN EL ÁRBOL DE FUENTE, barrido por el fetch concurrente de otra receta sobre el mismo qtbase.
+# El reintento serial de build-farm tampoco las salva, porque el árbol ya quedó inconsistente.
+# Serializar es la única mitigación correcta hasta que el ADR 0012 elija (lock por árbol / árbol
+# privado / caché inmutable + copia). Subirlo otra vez sin resolver eso reintroduce el bug.
+JOBS="${JOBS:-1}"
 IDLE_SLEEP="${IDLE_SLEEP:-300}"
 # Fichero de lock compartido con campana-deuda.sh (mismo path en los dos, o no hay exclusión).
 LOCK_FARM="${LOCK_FARM:-$HAMMER_DIR/work/.farm-build.lock}"