atuq: el que estaba «nombrado como hueco» entra a la suite — 17 verdes y 2 rojos en 32 min
La primera version dejaba afuera al guardian de notificaciones (`dunst-headless.sh --via-atuq`) con
la excusa de que vive en el arnes de sway, y lo escribia en la cabecera «para que su ausencia no se
lea como cobertura». Eso dura tres dias: al cuarto la lista ES la cobertura y el parrafo no lo lee
nadie. Corrido aparte: verde en 180 s. Entra.
Es ademas el que mide lo que ningun auditor de ELF puede ver: una pagina llama `new
Notification(...)`, `libxul` hace `dlopen("libnotify.so.4")` —que no es NEEDED de nada—, el bus
activa dunst y dunst DIBUJA. Cinco piezas y la unica forma de saber que estan las cinco es verlo.
Para que entrara, la lista pasa a llevar el COMANDO de cada guardian en vez de su nombre de fichero:
lo que lo tenia afuera era el despacho por extension, no una decision.
Corrida entera de los diecinueve sobre `b3:e556024b`: **17 verdes, 2 rojos, 32,2 min**, que es
exactamente lo que la cabecera predice — y la cabecera es el control, no un adorno.
Los caros: sct 242 s, archivo semantico 238 s, ia 182 s, instalacion 180 s, notificaciones 180 s.
Los cuatro primeros salen en 5 s y no tocan el navegador.
This commit is contained in:
@@ -2629,9 +2629,9 @@ el `BuildID` sea el que `SOURCE_DATE_EPOCH` obliga.
|
||||
**La regla que sale de todo el día:** cuando la duda es «¿llegó al artefacto?», la respuesta no está
|
||||
en el log del build ni en la receta — está **dentro del artefacto**, y hay que ir a buscarla ahí.
|
||||
|
||||
### 2.septies Los dieciocho guardianes, en una corrida — y el sello que se había quedado atrás (2026-09-15)
|
||||
### 2.septies Los diecinueve guardianes, en una corrida — y el sello que se había quedado atrás (2026-09-15)
|
||||
|
||||
Cada afirmación de este documento tiene quién la mida, y son **dieciocho guardianes**. Hasta hoy
|
||||
Cada afirmación de este documento tiene quién la mida, y son **diecinueve guardianes**. Hasta hoy
|
||||
ninguno corría solo: se corrían de a uno, el día que alguien tocaba esa parte. Ya se sabe cómo
|
||||
termina eso —el de descargas estuvo ROJO dos días y nadie lo corrió (`29831e62`)—, así que la corrida
|
||||
entera es ahora **un comando**: `scripts/test-atuq-suite.sh`.
|
||||
@@ -2649,18 +2649,31 @@ control: contra un store vacío sale por ahí y devuelve 1.
|
||||
El re-sello costó **3,7 s** —`atuq` es derivado y el `firefox` vigente estaba en el store— y el ciclo
|
||||
que manda es el de siempre: **editar todo → resellar UNA vez → medir**.
|
||||
|
||||
**El cuadro, sobre `b3:e556024b` (gioser, en serie, 29 min):**
|
||||
**El cuadro, sobre `b3:e556024b` (gioser, en serie, 32,2 min):**
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| **16 en verde** | política, rootfs, inicio, chrome, nativo, foco, instalación, ruteo, archivo, descargas, medios, torrent, `sct`, códecs, IA y archivo semántico |
|
||||
| **17 en verde** | política, rootfs, inicio, chrome, nativo, foco, instalación, ruteo, archivo, descargas, medios, torrent, `sct`, códecs, IA, archivo semántico y notificaciones |
|
||||
| **2 en ROJO** | `vigia-atuq-verbos` y `test-atuq-boveda-coherente`, **los dos por la misma causa**: los tres verbos de la bóveda (§7.quinquies) |
|
||||
|
||||
Los caros son `sct` (242 s), el archivo semántico (238 s), la instalación (180 s, tres sesiones), la
|
||||
IA (182 s, levanta `llama-server`) y las notificaciones (180 s, sway headless). Los cuatro primeros
|
||||
salen en **5 s** y no tocan el navegador: para «¿rompí el cruce política↔XPI?» alcanza `--only`.
|
||||
|
||||
O sea: **el commit de la bóveda no rompió nada más**. Los quince guardianes que no tienen nada que
|
||||
ver con ella siguen verdes sobre el artefacto que la trae adentro, y eso es lo que hacía falta saber
|
||||
antes de seguir — porque la unidad 12 tocó `atuq.cfg`, la política y el empaquetado de extensiones,
|
||||
que es exactamente donde un cambio se lleva puesto algo de al lado sin decirlo.
|
||||
|
||||
⚠ **El decimonoveno entró porque estaba nombrado como hueco, y eso envejece mal.** La primera
|
||||
versión dejaba afuera al de notificaciones (`scripts/wlr/dunst-headless.sh --via-atuq`: una página
|
||||
llama `new Notification(...)`, `libxul` hace `dlopen("libnotify.so.4")` —invisible para cualquier
|
||||
auditor de ELF—, el bus activa `dunst` y dunst DIBUJA) con la excusa de que vive en el arnés de sway,
|
||||
y lo escribía en la cabecera «para que su ausencia no se lea como cobertura». Dura tres días: al
|
||||
cuarto, la lista es la cobertura y el párrafo no lo lee nadie. Se corrió aparte, salió verde en 180 s,
|
||||
y entró. La lista pasó a llevar el COMANDO de cada guardián y no su nombre de fichero, que es lo que
|
||||
lo tenía afuera.
|
||||
|
||||
⚠ **Y el control del runner se corrigió solo en la primera corrida.** La cabecera anunciaba «17 en
|
||||
verde y UN rojo» —predicción escrita antes de correr— y el cuadro dijo dos: el guardián de coherencia
|
||||
de la bóveda lleva el mismo chequeo del cable adentro, que es justamente lo que el §7.quinquies le
|
||||
|
||||
+37
-34
@@ -2,7 +2,7 @@
|
||||
# test-atuq-suite.sh — corre TODOS los guardianes de `atuq`, en orden de coste, y da un cuadro.
|
||||
#
|
||||
# ══ POR QUÉ EXISTE ════════════════════════════════════════════════════════════════════════════
|
||||
# Los guardianes de atuq son dieciocho y ninguno corre solo. Ya pasó lo que tenía que pasar: el de
|
||||
# Los guardianes de atuq son diecinueve y ninguno corre solo. Ya pasó lo que tenía que pasar: el de
|
||||
# descargas estuvo ROJO dos días y nadie lo corrió (commit `29831e62`), y el 2026-09-15 el artefacto
|
||||
# vigente estuvo SIN SELLAR desde el commit de la bóveda hasta que alguien miró — durante esas horas
|
||||
# ningún guardián podía medir nada y el repo se veía igual de sano. Un guardián que nadie corre es
|
||||
@@ -15,7 +15,7 @@
|
||||
# Si falta el sello, esto NO corre nada: dice cómo construirlo y sale.
|
||||
#
|
||||
# ══ EL CONTROL DE ESTA CORRIDA ════════════════════════════════════════════════════════════════
|
||||
# Hoy (2026-09-15) el resultado CORRECTO es **16 en verde y DOS en rojo**: `vigia-atuq-verbos` y
|
||||
# Hoy (2026-09-15) el resultado CORRECTO es **17 en verde y DOS en rojo**: `vigia-atuq-verbos` y
|
||||
# `test-atuq-boveda-coherente`, los dos por la MISMA causa —la receta de `puriy-costura` pinea un
|
||||
# host anterior a los verbos de la bóveda, abierto y medido en el SDD 26 §7.quinquies—. **Si esto
|
||||
# sale todo verde, lo roto es esto**: un cuadro entero en verde puede ser un producto sano o un
|
||||
@@ -27,21 +27,22 @@
|
||||
# tres, cambió algo que hay que ir a ver.
|
||||
#
|
||||
# ══ LO QUE CUESTA ═════════════════════════════════════════════════════════════════════════════
|
||||
# **~29 min** en gioser, en serie (medido 2026-09-15). Los cuatro primeros salen en 10 s y no tocan
|
||||
# **~32 min** en gioser, en serie (medido 2026-09-15). Los cuatro primeros salen en 10 s y no tocan
|
||||
# el navegador: para «¿rompí algo del cruce política↔XPI?» alcanza con `--only` y no hace falta la
|
||||
# media hora. Los caros son `sct` (241 s, seis cargas), `archivo-semantico` (227 s, embeddings),
|
||||
# `instalacion` (180 s, tres sesiones) y `ia` (180 s, levanta `llama-server`).
|
||||
#
|
||||
# ══ QUÉ NO ESTÁ ACÁ ═══════════════════════════════════════════════════════════════════════════
|
||||
# `scripts/wlr/dunst-headless.sh --via-atuq` (una página web notifica y se DIBUJA): vive en el arnés
|
||||
# de sway y se corre desde ahí. Se nombra para que su ausencia no se lea como cobertura.
|
||||
# Nada, hoy. El de notificaciones (`scripts/wlr/dunst-headless.sh --via-atuq`) vive en el arnés de
|
||||
# sway y por eso se había quedado afuera; entra igual, porque una lista con un hueco nombrado en la
|
||||
# cabecera se lee como cobertura al tercer día. Si mañana alguien saca uno, que lo nombre acá.
|
||||
#
|
||||
# NO CONSTRUYE NADA y NO TOMA EL LOCK de la granja: sólo lee artefactos ya sellados, así que se puede
|
||||
# correr con la granja a pleno. Va en SERIE a propósito — cada guardián levanta un navegador y esta
|
||||
# máquina tiene cuatro núcleos sin swap; dos a la vez es un OOM. Y cada uno escribe en SU fichero:
|
||||
# dos corridas sobre el mismo log se MEZCLAN y el resultado parece un pase.
|
||||
#
|
||||
# scripts/test-atuq-suite.sh # los dieciocho, en orden de coste
|
||||
# scripts/test-atuq-suite.sh # los diecinueve, en orden de coste
|
||||
# scripts/test-atuq-suite.sh --list # qué afirma cada uno, sin correr nada
|
||||
# scripts/test-atuq-suite.sh --only sct # sólo los que contengan «sct» en el nombre
|
||||
# scripts/test-atuq-suite.sh --store DIR --logs DIR
|
||||
@@ -63,33 +64,36 @@ while [ $# -gt 0 ]; do
|
||||
esac
|
||||
done
|
||||
|
||||
# nombre|orden de coste implícito|qué AFIRMA. El orden es de barato a caro: lo que se rompe gratis
|
||||
# etiqueta|comando|qué AFIRMA. El orden es de barato a caro: lo que se rompe gratis
|
||||
# se descubre en el primer minuto y no después de media hora de navegadores.
|
||||
GUARDIANES=(
|
||||
"vigia-atuq-verbos.py|el host PINEADO atiende los verbos que mandan las diez extensiones (§7)"
|
||||
"test-atuq-boveda-coherente.py|la bóveda está enchufada en los CINCO lugares (SDD-BOVEDA §8)"
|
||||
"test-atuq-politica.py|el cruce XPI empaquetado ↔ política, con cinco roturas a propósito"
|
||||
"test-atuq-rootfs.py|el rootfs resuelve todos los NEEDED y nada se cae al LAB"
|
||||
"test-atuq-inicio.py|la página de inicio y la pestaña nueva son las NUESTRAS (§4.e)"
|
||||
"test-atuq-chrome.py|el JS de atuq.cfg llega al gBrowser, y la vista dividida (§4.g)"
|
||||
"test-atuq-nativo.py|una extensión habla con un proceso NATIVO y le vuelve la respuesta (§7)"
|
||||
"test-atuq-foco.py|el navegador MUESTRA el foco del sistema y no lo apaga (§6.5)"
|
||||
"test-atuq-instalacion.py|quién instala de verdad las extensiones: el ESCANEO, no la política"
|
||||
"test-atuq-ruteo.py|el contenedor sale por SU proxy — saludo SOCKS5 (§6.8)"
|
||||
"test-atuq-archivo.py|congelar lo leído al CAS y buscarlo; nunca lo privado (§6.3)"
|
||||
"test-atuq-descargas.py|la descarga entra al CAS con su BLAKE3 y el fichero no se toca (§6.2)"
|
||||
"test-atuq-medios.py|el medio lo abre mpv, no una pestaña (§6.6)"
|
||||
"test-atuq-torrent.py|magnet → daemon propio que sobrevive al navegador (§6.9)"
|
||||
"test-atuq-sct.py|la cadena de sct entera: seis cargas y un servidor HTTP real (§6.1)"
|
||||
"test-atuq-codecs.sh|H.264+AAC · VP9+Opus · AV1 · MP3 · FLAC REPRODUCEN (§4.f)"
|
||||
"test-atuq-ia.py|la barra lateral le pregunta a un modelo de ESTA máquina (§6.7)"
|
||||
"test-atuq-archivo-semantico.py|el archivo contesta por PARECIDO, no por palabra exacta (§6.3)"
|
||||
"vigia-atuq-verbos|python3 scripts/vigia-atuq-verbos.py|el host PINEADO atiende los verbos que mandan las diez extensiones (§7)"
|
||||
"test-atuq-boveda-coherente|python3 scripts/test-atuq-boveda-coherente.py|la bóveda está enchufada en los CINCO lugares (SDD-BOVEDA §8)"
|
||||
"test-atuq-politica|python3 scripts/test-atuq-politica.py|el cruce XPI empaquetado ↔ política, con cinco roturas a propósito"
|
||||
"test-atuq-rootfs|python3 scripts/test-atuq-rootfs.py|el rootfs resuelve todos los NEEDED y nada se cae al LAB"
|
||||
"test-atuq-inicio|python3 scripts/test-atuq-inicio.py|la página de inicio y la pestaña nueva son las NUESTRAS (§4.e)"
|
||||
"test-atuq-chrome|python3 scripts/test-atuq-chrome.py|el JS de atuq.cfg llega al gBrowser, y la vista dividida (§4.g)"
|
||||
"test-atuq-nativo|python3 scripts/test-atuq-nativo.py|una extensión habla con un proceso NATIVO y le vuelve la respuesta (§7)"
|
||||
"test-atuq-foco|python3 scripts/test-atuq-foco.py|el navegador MUESTRA el foco del sistema y no lo apaga (§6.5)"
|
||||
"test-atuq-instalacion|python3 scripts/test-atuq-instalacion.py|quién instala de verdad las extensiones: el ESCANEO, no la política"
|
||||
"test-atuq-ruteo|python3 scripts/test-atuq-ruteo.py|el contenedor sale por SU proxy — saludo SOCKS5 (§6.8)"
|
||||
"test-atuq-archivo|python3 scripts/test-atuq-archivo.py|congelar lo leído al CAS y buscarlo; nunca lo privado (§6.3)"
|
||||
"test-atuq-descargas|python3 scripts/test-atuq-descargas.py|la descarga entra al CAS con su BLAKE3 y el fichero no se toca (§6.2)"
|
||||
"test-atuq-medios|python3 scripts/test-atuq-medios.py|el medio lo abre mpv, no una pestaña (§6.6)"
|
||||
"test-atuq-torrent|python3 scripts/test-atuq-torrent.py|magnet → daemon propio que sobrevive al navegador (§6.9)"
|
||||
"test-atuq-sct|python3 scripts/test-atuq-sct.py|la cadena de sct entera: seis cargas y un servidor HTTP real (§6.1)"
|
||||
"test-atuq-codecs|bash scripts/test-atuq-codecs.sh|H.264+AAC · VP9+Opus · AV1 · MP3 · FLAC REPRODUCEN (§4.f)"
|
||||
"test-atuq-ia|python3 scripts/test-atuq-ia.py|la barra lateral le pregunta a un modelo de ESTA máquina (§6.7)"
|
||||
"test-atuq-archivo-semantico|python3 scripts/test-atuq-archivo-semantico.py|el archivo contesta por PARECIDO, no por palabra exacta (§6.3)"
|
||||
"dunst-via-atuq|sh scripts/wlr/dunst-headless.sh --via-atuq|una PÁGINA WEB notifica y la notificación se DIBUJA (§6.10)"
|
||||
)
|
||||
|
||||
if [ "$LISTAR" = 1 ]; then
|
||||
printf '── los guardianes de atuq, de barato a caro ──\n'
|
||||
for g in "${GUARDIANES[@]}"; do printf ' %-32s %s\n' "${g%%|*}" "${g#*|}"; done
|
||||
printf '\n no está acá: scripts/wlr/dunst-headless.sh --via-atuq (vive en el arnés de sway)\n'
|
||||
for g in "${GUARDIANES[@]}"; do
|
||||
IFS='|' read -r etq cmd afirma <<<"$g"
|
||||
printf ' %-30s %s\n %s\n' "$etq" "$afirma" "$cmd"
|
||||
done
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -111,15 +115,14 @@ mkdir -p "$LOGS"
|
||||
verdes=0; rojos=0; saltados=0
|
||||
RESUMEN=()
|
||||
for g in "${GUARDIANES[@]}"; do
|
||||
nombre="${g%%|*}"; afirma="${g#*|}"
|
||||
IFS='|' read -r nombre cmd afirma <<<"$g"
|
||||
case "$nombre" in *"$SOLO"*) : ;; *) continue ;; esac
|
||||
log="$LOGS/${nombre%.*}.txt"
|
||||
printf ' %-32s ' "$nombre"
|
||||
log="$LOGS/$nombre.txt"
|
||||
printf ' %-30s ' "$nombre"
|
||||
t0=$(date +%s)
|
||||
case "$nombre" in
|
||||
*.sh) bash "scripts/$nombre" >"$log" 2>&1 ;;
|
||||
*) python3 "scripts/$nombre" >"$log" 2>&1 ;;
|
||||
esac
|
||||
# Cada guardián a SU fichero: dos corridas sobre el mismo log se MEZCLAN y el resultado parece un
|
||||
# pase — ya pasó (se leyó «✓ SALIDA=0» de la corrida vieja con las cargas de la nueva).
|
||||
$cmd >"$log" 2>&1
|
||||
rc=$?
|
||||
t=$(( $(date +%s) - t0 ))
|
||||
# 77 es «no están las condiciones» (falta un rootfs, falta un modelo), no un fallo del producto.
|
||||
|
||||
Reference in New Issue
Block a user