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 188Rust 55Shell 30Markdown 281211 Sutichaykuna

estado-granja: tres números que mentían — la barra KDE clavada por un ajeno, el latido medido en el clon viejo, y el load del anfitrión leído como del worker

35cc75be0c1c2c503a5c411497328afd9fdd65f0 · ruwaq Sergio · (1 killa ñawpaq) · tayta 0d0f16981 · kay commitpi sach'ata qhaway

Semántico sayk'uy

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

1 qillqakuna · +37 −5

diff --git a/scripts/farm/estado-granja.sh b/scripts/farm/estado-granja.sh
index 2ec57b06..84d6d9af 100755
--- a/scripts/farm/estado-granja.sh
+++ b/scripts/farm/estado-granja.sh
@@ -14,7 +14,16 @@ if [ -s "$FLEET" ]; then
     [ -n "${name:-}" ] || continue
     echo "▶ $name ($ip)"
     $SSH "root@$ip" '
-      echo "   $(uptime | sed "s/.*load average/load/")"
+      # ⚠ EL `load average` DE UN LXC ES EL DEL ANFITRIÓN, no el nuestro. /proc/loadavg no está
+      # virtualizado acá (sin lxcfs), así que ese número cuenta lo que muelen los OTROS inquilinos
+      # del Proxmox de gioser. Medido 2026-09-21: «load 5.31» con el 4º campo en `1/1546` —UN hilo
+      # ejecutable de 1546— y presión de CPU en 0.00, o sea el worker IDLE leído como «compilando»,
+      # que es justo la conclusión cara (se espera a que «termine» algo que no corre). Los dos
+      # números de abajo SÍ son del contenedor.
+      echo "   $(uptime | sed "s/.*load average/load del ANFITRIÓN/")"
+      run=$(cut -d" " -f4 /proc/loadavg)
+      psi=$(sed -n "s/^some avg10=\([0-9.]*\).*/\1/p" /proc/pressure/cpu 2>/dev/null)
+      echo "   nuestro: $run ejecutables/hilos · presión CPU avg10=${psi:-(sin PSI)}"
       n=$(ls /opt/takana/store 2>/dev/null | wc -l); echo "   store: $n artefactos"
       # ⚠ LOS DOS NOMBRES. El renombre hammer→takana (ADR 0016) dejó esta sonda ciega: el worker
       # invoca `./target/release/takana` y acá se buscaba `release/hammer`, así que «moliendo»
@@ -37,11 +46,20 @@ if [ -f docs/state/build-state-kde.json ]; then
 import json,os,time
 f="docs/state/build-state-kde.json"
 d=json.load(open(f)); q=d["by_queue"].get("incoming-kde",{})
-tot=sum(q.values()); s=q.get("sealed",0)
+# ⚠ EL DENOMINADOR NO INCLUYE A LOS AJENOS. Un `ajeno` (qorpa-ajenos.toml) no tiene receta y NO SE
+# SELLA NUNCA: está declarado fuera de alcance a propósito. Sumándolo, la barra se clavaba en
+# «197/198 sellado» con el árbol TERMINADO, y se lee «falta una receta» — durante días (medido
+# 2026-09-21: el 198 era `xwayland`, y X11 está fuera de alcance para toda la distro). Un informe
+# que dice que falta trabajo cuando no falta manda a buscar un build que no existe. Se descuentan
+# del total, pero se NOMBRAN: descontar en silencio es la otra forma de mentir.
+aj=sorted(k for k,v in d["nodes"].items()
+          if v.get("queue")=="incoming-kde" and v.get("state")=="ajeno")
+tot=sum(v for k,v in q.items() if k!="ajeno"); s=q.get("sealed",0)
 age=int(time.time()-os.path.getmtime(f))
 bar=int(30*s/tot) if tot else 0
+cola=f"  · {len(aj)} ajeno ({', '.join(aj)} — fuera de alcance, sin receta)" if aj else ""
 print(f"   [{'#'*bar}{'.'*(30-bar)}] {s}/{tot} sellado  "
-      f"(deuda {q.get('debt',0)}, nunca {q.get('never',0)})")
+      f"(deuda {q.get('debt',0)}, nunca {q.get('never',0)}){cola}")
 print(f"   grafo regenerado hace {age//60}m {age%60}s  (lo actualiza el cron o `scripts/build-state.py --kde`)")
 PY
 else
@@ -53,11 +71,25 @@ echo; echo "══ LATIDO DE COSECHA ══"
 # — cierto y RUIDOSO a la vez: desde el 2026-09-18 el latido lo sostiene el cron de root del
 # ANFITRIÓN, y un agente enjaulado no ve ese crontab ni lo verá nunca. Un aviso que salta siempre es
 # un aviso que nadie lee. Lo que sí prueba que el latido vive son sus commits, que están acá.
-ult=$(git log -1 --format=%ct --grep="cosecha granja" 2>/dev/null)
+# ⚠ Y SE MIDE SOBRE origin/main, NO SOBRE EL LOCAL. El cron del anfitrión commitea en SU clon y
+# empuja a gitea; este árbol no se entera hasta un `fetch`. Sin él, `git log` local da un latido
+# viejo y el aviso de abajo salta con el latido SANO — falso positivo medido dos veces el
+# 2026-09-21 (decía «hace 40m» con el ciclo de las 01:01 ya en gitea). El fetch es barato y va con
+# techo: si la red falla, se degrada al local en vez de romper la foto.
+timeout 20 git fetch -q origin main 2>/dev/null || true
+# Se elige la ref con el latido MÁS NUEVO y se usa ESA para la fecha y para el asunto: sacarlos de
+# refs distintas daba un «hace 3m» con el asunto de un ciclo viejo.
+REF=HEAD
+if git rev-parse -q --verify FETCH_HEAD >/dev/null 2>&1; then
+  a=$(git log -1 --format=%ct --grep="cosecha granja" HEAD       2>/dev/null || echo 0)
+  b=$(git log -1 --format=%ct --grep="cosecha granja" FETCH_HEAD 2>/dev/null || echo 0)
+  [ "${b:-0}" -gt "${a:-0}" ] && REF=FETCH_HEAD
+fi
+ult=$(git log -1 --format=%ct --grep="cosecha granja" "$REF" 2>/dev/null)
 if [ -n "$ult" ]; then
   edad=$(( $(date +%s) - ult ))
   printf '   último ciclo: hace %dm %ds — %s\n' $((edad/60)) $((edad%60)) \
-    "$(git log -1 --format=%s --grep='cosecha granja' 2>/dev/null)"
+    "$(git log -1 --format=%s --grep='cosecha granja' "$REF" 2>/dev/null)"
   # dispara en :00 y :30 ⇒ más de 40 min sin commit es un latido perdido, no una pausa
   if [ "$edad" -gt 2400 ]; then
     echo "   ⚠ hace más de 40m que no commitea — el latido dispara en :00 y :30"