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 Definiciones

feat(granja): el censo de applets al latido — existía, traía su guardián, y nadie lo corría

`busybox-censo-proveedores.py` mide contra los artefactos del store quién provee DE VERDAD cada
applet de busybox, y trae un `--guardian` que sale ≠0 si alguno pierde el proveedor que el TSV
registra. Estaba escrito para esto desde que se escribió y **nunca se cableó**: la medición sólo
existía cuando alguien la lanzaba a mano.

Al correrlo hoy, con cero deuda en los cinco grafos (1158/1158 sellados): de los 401 applets, **215
ya tienen dueño real, 0 están mal atribuidos y 47 los provee SÓLO busybox**.

Y el titular de esos 47 no es «faltan recetas». Faltan DOS —`getty`/`cttyhack` y el `nslookup`— más
un `killall5` que es BORRAR. Lo que hay es algo peor:

    arje-zero   (PID 1)                     sellado · perfiles=[]   ⇒ el init sale del PISO
    brush       (sh, ash, hush)             sellado · perfiles=[]   ⇒ /bin/sh sale de busybox
    busybox                                 sellado · perfiles=[]   ⇒ y aun así viaja, por el piso
    chrony      (rdate)                     sellado · perfiles=[]

**Las dos piezas más básicas del sistema están construidas, sellada cada una, y declaradas por
ningún perfil.** Es `docs/state/piso.json` por el otro lado: allá se vio que el piso tapa 418
caminos de la clausura; acá se ve que la clausura no contiene ni el init ni el shell. Los otros 43
son equivalencias de NOMBRE que el TSV atribuye mal (`ifconfig`/`netstat`/`route`/`arp` son de
net-tools, no de iproute2; `adduser`/`addgroup`/`mkpasswd` son busybox-ismos que shadow no trae).

Una línea por ciclo —`applets ✓ SÓLO lo provee busybox : 47 ← el trabajo que queda`— porque ese
número tiene que BAJAR y para eso hay que verlo todos los días. El detalle sale sólo cuando el
guardián se queja. Probado en los dos caminos: verde con el store real, y rojo apuntándolo a un
store vacío (`✗ REGRESIÓN: 215 applets PERDIERON su proveedor`).

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

c16db9a212fe4949bdce5374de96ed1ceffa47da · por Sergio · (hace 5 d) · padre 11bdea1a2 · ver el árbol en este commit

Delta semántico

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

1 archivos · +24 −0

diff --git a/scripts/farm/cosecha-cron.sh b/scripts/farm/cosecha-cron.sh
index 01eb97fb..48f04525 100755
--- a/scripts/farm/cosecha-cron.sh
+++ b/scripts/farm/cosecha-cron.sh
@@ -461,6 +461,30 @@ if [ -x "$HAMMER" ]; then
   mv work/.subcomandos.tmp docs/state/subcomandos.txt
   echo "   subcomandos.txt ✓ $(grep -m1 'TOTAL:' docs/state/subcomandos.txt || echo '0 inertes')"
 
+  # ── EL CENSO DE APPLETS, QUE EXISTÍA Y NADIE CORRÍA ──────────────────────────────────────────
+  # `busybox-censo-proveedores.py` mide, contra los artefactos del store, quién provee de verdad
+  # cada applet de busybox — y trae un `--guardian` que sale ≠0 si alguno PIERDE el proveedor que
+  # el TSV registra. Estaba escrito para esto y **nunca se cableó**: la medición sólo existía
+  # cuando alguien la lanzaba a mano, o sea casi nunca.
+  #
+  # Medido el 2026-10-16 al correrlo: de los 401 applets, 215 ya tienen dueño real y **47 los
+  # provee SÓLO busybox**. Y el titular no es «faltan recetas» —faltan dos: `getty`/`cttyhack` y
+  # el `nslookup`— sino que **`arje-zero` (PID 1) y `brush` (el shell, `sh`/`ash`/`hush`) están
+  # SELLADOS y en NINGÚN perfil**, igual que `busybox` y `chrony`. O sea que la imagen toma su init
+  # del piso y su `/bin/sh` de busybox, y la clausura no contiene ninguna de las dos piezas más
+  # básicas del sistema. Es el censo del piso (`docs/state/piso.json`) por el otro lado.
+  #
+  # Una línea por ciclo, y el detalle sólo cuando el guardián se queja: lo que el número tiene que
+  # hacer es BAJAR, y para eso hay que verlo todos los días.
+  if python3 scripts/busybox-censo-proveedores.py --guardian > work/.applets.salida 2>&1; then
+    echo "   applets ✓ $(grep -m1 'SÓLO lo provee busybox' work/.applets.salida \
+         | sed 's/^ *//; s/  */ /g' || echo '(sin resumen)')"
+  else
+    echo "   ⚠⚠ un applet PERDIÓ el proveedor que el TSV registra — el reemplazo dejó de instalarlo:"
+    grep -E 'PERDIÓ|perdió|✗' work/.applets.salida | head -6 | sed 's/^/      /'
+  fi
+  rm -f work/.applets.salida
+
   { echo "raíces sucias y symlinks al lab · medido $(date -u +%FT%TZ)"
     python3 scripts/hydrate-profile.py --auditar-raices 2>&1; } > work/.raices.tmp
   mv work/.raices.tmp docs/state/raices.txt