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 1572Shell 203Rust 109Markdown 993728 Definitions

fix(granja): el diagnóstico mostraba el PRINCIPIO del log, no el fallo

La línea que existe para nombrar la causa de un fallo no reintentado imprimía `head -c 120` del log,
y con eso salía así el 2026-10-11:

```
· obs-studio  no reintentado (firma no reconocida: … INFO takana_build: caché: artefacto ya…)
```

una línea de cache-hit del arranque, mientras el fallo verdadero —`ProcessFdQuotaExceeded` al
enlazar libavcodec— estaba al FINAL. **Un diagnóstico que muestra el principio del log no diagnostica
nada**: hay que abrir el fichero igual, que es justo el paso que esa línea debía ahorrar. Me costó
ese paso hoy. Pasa a `tail`.

Y entra `ProcessFdQuotaExceeded` / `Too many open files` / `no space left on device` a la lista de
razones del `.fail`: esas dos recetas sanas se anotaron como «fallo (ver log)», y **un fallo sin
nombre se anota como deuda y se diagnostica leyendo la receta, que es donde no está**. El límite de
fds ya se sube en este guion; esto es para el día que algo lo vuelva a tocar.

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

2d935c7e3d954cffe4d453729ecbf489dbefcfca · by Sergio · (9 d ago) · parent 7119d3f21 · browse the tree at this commit

Semantic delta

No definition changed: this change is text, documentation or data.

1 files · +14 −2

diff --git a/scripts/build-farm.sh b/scripts/build-farm.sh
index 2767ab4d..6c90331f 100755
--- a/scripts/build-farm.sh
+++ b/scripts/build-farm.sh
@@ -133,7 +133,12 @@ printf '%s\n' "$queue" | xargs -P"$JOBS" -I '{}' sh -c '
   if [ "${H#b3:}" != "$H" ] && [ -n "$H" ]; then
     echo "$H" > "'"$FARM"'/status/$n.ok"; printf "  ✓ %-18s %s\n" "$n" "$H"
   else
-    r=$(grep -oiE "requires rustc [0-9.]+|cannot find -l[a-z0-9]+|could not find .[a-z0-9_-]+.|error\[E[0-9]+\]|not found|unsupported|no such file" "$log" | head -1)
+    # `ProcessFdQuota`/`Too many open files` en la lista porque el 2026-10-11 dos recetas sanas
+    # (`obs-studio`, `spectacle`) murieron por el límite de descriptores y la razón salió como
+    # «fallo (ver log)» — un fallo sin nombre se anota como deuda y se diagnostica leyendo la
+    # receta, que es donde no está. El límite ya se sube en este guion, así que esto es para el día
+    # que algo lo vuelva a tocar: que el informe lo DIGA en vez de callarlo.
+    r=$(grep -oiE "requires rustc [0-9.]+|cannot find -l[a-z0-9]+|could not find .[a-z0-9_-]+.|error\[E[0-9]+\]|ProcessFdQuotaExceeded|Too many open files|no space left on device|not found|unsupported|no such file" "$log" | head -1)
     echo "${r:-fallo (ver log)}" > "'"$FARM"'/status/$n.fail"; printf "  ✗ %-18s %s\n" "$n" "${r:-fallo}"
   fi
 ' _ '{}'
@@ -161,8 +166,15 @@ for s in "$FARM"/status/*.fail; do
     # 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.
+    # ⚠ LA COLA DEL LOG, NO LA CABEZA — y esto costó un paso real el 2026-10-11. Con `head` el
+    # mensaje salía así:
+    #   · obs-studio  no reintentado (firma no reconocida: … INFO takana_build: caché: artefacto ya…)
+    # o sea una línea de CACHE-HIT del arranque, mientras el fallo verdadero
+    # (`ProcessFdQuotaExceeded` al enlazar libavcodec) estaba al FINAL. Un diagnóstico que existe
+    # para nombrar la causa y muestra el principio del log no nombra nada: hay que ir a abrir el
+    # fichero igual, que es justo el paso que esta línea debía ahorrar.
     printf "  · %-18s no reintentado (firma no reconocida: %s)\n" "$n" \
-      "$(head -c 120 "$log" 2>/dev/null | tr '\n' ' ' | tr -s ' ')"
+      "$(tail -c 200 "$log" 2>/dev/null | tr '\n' ' ' | tr -s ' ')"
     continue
   fi
   H=$("$HAMMER" --store "$STORE" build "$f" 2>"$log" | tail -1 || true)