diff --git a/scripts/build-farm.sh b/scripts/build-farm.sh index c3e9aede..47851bfc 100755 --- a/scripts/build-farm.sh +++ b/scripts/build-farm.sh @@ -106,7 +106,21 @@ for s in "$FARM"/status/*.fail; do [ -f "$s" ] || continue n=$(basename "$s" .fail); log="$FARM/log/$n.log"; f="$QUEUE/$n.toml" [ -f "$f" ] || continue - grep -qiE "Some other Meson process|already using this build directory|Directory not empty|No such file or directory|gdkconfig\.h" "$log" 2>/dev/null || continue + # ── `File name too long` TAMBIÉN es colisión (2026-08-09) ──────────────────────────────────── + # `vulkan-loader` fallaba con «io: File name too long (os error 36)» en TODOS los ciclos de la + # granja y sella sin una queja ejecutado en serie — comprobado a mano en el worker. La firma no + # estaba en esta lista, así que nunca se reintentaba: fallaba, se contaba como deuda, y al ciclo + # siguiente volvía a fallar igual. Un fallo que se repite idéntico cada vez no es un fallo + # intermitente, es uno que nadie está reintentando. + if ! grep -qiE "Some other Meson process|already using this build directory|Directory not empty|No such file or directory|gdkconfig\.h|File name too long|os error 36" "$log" 2>/dev/null; then + # ── Y LO QUE NO SE REINTENTA, SE DICE ──────────────────────────────────────────────────────── + # El defecto de fondo no era la firma que faltaba sino que faltarla fuese MUDO: la lista sólo + # puede crecer si alguien se entera de que se quedó corta. Sin esta línea, la única señal de que + # una receta es reintentable era que a alguien se le ocurriera correrla a mano. + printf " · %-18s no reintentado (firma no reconocida: %s)\n" "$n" \ + "$(head -c 120 "$log" 2>/dev/null | tr '\n' ' ' | tr -s ' ')" + continue + fi H=$("$HAMMER" --store "$STORE" build "$f" 2>"$log" | tail -1 || true) if [ "${H#b3:}" != "$H" ] && [ -n "$H" ]; then rm -f "$s"; echo "$H" > "$FARM/status/$n.ok"; printf " ✓ (reintento serial) %-18s %s\n" "$n" "$H" diff --git a/scripts/farm/farm-up.sh b/scripts/farm/farm-up.sh index de500e0c..858b41a4 100755 --- a/scripts/farm/farm-up.sh +++ b/scripts/farm/farm-up.sh @@ -74,7 +74,18 @@ for k in $(seq 1 "$N"); do until $SSH root@"$ip" true 2>/dev/null; do sleep 3; done echo " alineando cola con el laptop (rsync código + recipes)…" + # ── EL MANIFIESTO VIAJA ACÁ TAMBIÉN, Y ESTE ERA EL AGUJERO ──────────────────────────────────── + # `farm-sync.sh` ya mandaba `work/farm-sellados.txt` para que el worker no rehiciera lo que el hub + # tiene. Este fichero NO, así que un worker recién creado arrancaba con el manifiesto RANCIO que + # venía horneado en la golden. Medido el 2026-08-09: worker 1172 vs hub 1241 ⇒ el worker construía + # `vulkan-loader` en TODOS los ciclos aunque el hub ya lo tenía sellado, y encima fallaba. + # + # Es literalmente el error de método que este repo ya se documentó a sí mismo en `farm-sync.sh`: + # «lo puse allí, di el bucle por cerrado, y la churn siguió porque hay DOS rutas». Había dos rutas + # otra vez —`farm-sync` y `farm-up`— y sólo una estaba arreglada. Si aparece una tercera, va con + # el mismo include. rsync -az --delete -e "$SSH" \ + --include '/work/' --include '/work/farm-sellados.txt' \ --exclude /work --exclude /store --exclude '/store-*' --exclude /target \ --exclude /dist --exclude /.dev-fs --exclude /.git --exclude /.scratch \ --exclude '*.png' --exclude '/content*' \