diff --git a/docs/26-atuq-envoltorio-gecko.md b/docs/26-atuq-envoltorio-gecko.md index cc62f26e..9fe71004 100644 --- a/docs/26-atuq-envoltorio-gecko.md +++ b/docs/26-atuq-envoltorio-gecko.md @@ -2660,6 +2660,17 @@ Los caros son `sct` (242 s), el archivo semántico (238 s), la instalación (180 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`. +**Y al día siguiente, el mismo comando: 19 en verde y 0 en rojo** (2026-09-16, 32,1 min). Los dos +rojos se apagaron subiendo el pin de `puriy-costura` (§7.quinquies.bis) — no se tocó ningún guardián. +Que la suite existiera antes del arreglo es lo que permite decir eso: el cuadro de ayer y el de hoy +son el mismo instrumento. + +⚠ **Lo que hay que cuidar ahora es el control del propio runner.** Mientras hubo un rojo conocido, el +número esperado distinguía solo «producto sano» de «runner que no corre nada». Con todo en verde ya +no, así que lo que sostiene la corrida son la **puerta del sello** (contra un store sin el artefacto +no corre nada y devuelve 1, verificado a propósito) y el **control interno de cada guardián**. El +runner no los reemplaza: los junta. + 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, @@ -2925,6 +2936,60 @@ commitea ni con pathspec: se avisa. el guardián de METAL de la bóveda —servidor, navegador real, login real, el diálogo de consentimiento a la vista—, que es lo que el commit de la unidad 12 dejó anunciado. +#### 7.quinquies.bis DESTRABADO (2026-09-16): el lock, el pin, y el mismo `strings` leyendo al revés + +Las tres cosas que el párrafo de arriba dejaba pendientes están hechas, y en ese orden porque cada +una destrababa a la siguiente. + +**1. El lock de tawasuyu, publicado** (`23a292863`). Regenerado en un árbol LIMPIO del `HEAD` de allá +—`git archive | tar -x`, que no toca el `.git` compartido— y verificado en los dos sentidos, que es +lo que lo convierte en evidencia: `cargo metadata --locked --offline` **moría antes** de regenerarlo +y **pasa después**. El diff son 215 líneas y **todas de contabilidad de deps por ruta: cero +`checksum` movidos, cero `source` movidos**, ninguna versión de registry tocada. Lo que aparece es +`llimphi-registro`, los cuatro crates de la bóveda y `umbral` dentro de `pacha-boveda`. + +⚠ **Commiteado con un índice TEMPORAL, no con `git commit`.** El `Cargo.lock` seguía en vuelo en el +clon compartido, y la regla 2 ya está medida: `git commit -- Cargo.lock` se lleva **el árbol** y deja +el índice ahí, o sea que borra lo que el otro agente tuviera stageado en ESA ruta. El camino que no +toca nada es plumbing: + +```sh +export GIT_INDEX_FILE=/tmp/…/tw.index # un índice PROPIO: el compartido no se abre +git read-tree HEAD +blob=$(git hash-object -w ) +git update-index --cacheinfo 100644,$blob,Cargo.lock +git commit-tree $(git write-tree) -p HEAD -F msg # ⇒ commit sin tocar índice ni árbol +git push origin :main +``` + +Con su control puesto: `git diff-tree -r --name-only HEAD ` tiene que decir **un solo fichero**. + +⚠ **Y la sorpresa que ordena el resto: el lock publicado resultó ser BYTE A BYTE el que la otra +sesión ya tenía en su árbol** —mismo blob `b2f0b9eb`—. No era una versión rival de la reparación: era +la suya, que llevaba horas sin commitear. O sea que lo que bloqueó a `atuq` tres semanas no fue un +problema técnico sino **un fichero correcto que nadie había publicado**, y del que ningún guardián de +ninguno de los dos repos podía hablar. + +**2. El pin, subido** a ese commit ⇒ `b3:7d63655a`. El artefacto se construyó **en el worker**: el +vendoreo son 2,4 G y el disco del hub estaba al 99% (lo llena `tawasuyu/target`, 148 G), así que +construir acá habría sido el cuadro de «disco lleno = ✗ falso». Bajar el artefacto son 2,3 M. + +**3. La misma medición que diagnosticó el problema, leída al revés.** El §7.quinquies lo cerró con +`strings` sobre el binario sellado: `vault` 0 veces, `cas` 5 —el control que tenía que dar positivo—. +Sobre el binario nuevo, con el mismo comando: + +| | antes (`e19bb0e5`) | ahora (`23a29286`) | +|---|---|---| +| `vault.` | **0** | **10** | +| `cas.` / `sct.` (control) | presentes | presentes | + +Y del lado del navegador, `scripts/vigia-atuq-verbos.py` pasa de **3 verbos sin dueño** a **cero**, con +su control positivo intacto (`sct.observe` sigue apareciendo ⇒ el grep mide). + +**Lo que queda de la unidad 12** es el guardián de METAL de la bóveda —servidor, navegador real, +login real, el diálogo de consentimiento a la vista—, que ahora sí se puede escribir porque hay con +qué correrlo. + ## 8. Plan, por unidades de trabajo Cada una cierra sola, se commitea y se pushea. El orden no es preferencia: cada una destraba a la @@ -2952,7 +3017,7 @@ siguiente. | 9 | **Medios (6.6) ✅ y torrent (6.9) ✅ — 2026-09-10.** El medio lo abre `mpv`; el torrent lo toma `puriy-costura-torrent`, un daemon **propio, configurable y perezoso** que sobrevive al navegador y cosecha al CAS. Medido antes de decidir: la pila de librqbit compila para musl (226 crates), así que la decisión fue «no ahí» y no «no se puede». **Faltan** el foco (6.5) y la IA local (6.7), ésta bloqueada porque el corpus no tiene modelo ni embeddings | 6.5–6.7, 6.9 | 5 ✅ | | 10 | **Foco (6.5) — 2026-09-10.** Entra al corpus la cadena `nftables` (libmnl + libnftnl + nft 1.1.6), que el grafo pedía y nadie había puesto, con dos arreglos de fábrica: el sello de tiempo que rompía la reproducción y un bashismo. Medido con root: el cgroup en foco no sale y el de al lado sí. Y del lado del navegador, la extensión `foco` MUESTRA el estado y **no tiene verbo para apagarlo**. **Falta** quién pone a `atuq` en un cgroup (delegación, decisión de arje) y quién aplica la política (root) | 6.5 | 6 ✅ | | 11 | **Motor de inferencia local (6.7) — 2026-09-11.** Entra `recipes/llama-cpp.toml` (b10901, estática, 199 M, **REPRODUCE**), que resulta ser **un solo muro para dos pendientes**: el §6.7 y la mitad semántica del §6.3 no eran dos problemas, era que el corpus no tenía con qué correr un modelo (`pluma-llm` sólo tiene backends de nube; `rimay-verbo-fastembed` DESCARGA onnxruntime glibc + el modelo). ⚠ Y dejó medido lo que no se podía deducir: **`SOURCE_DATE_EPOCH` —la variable que nos da reproducibilidad— apagaba las SEIS perillas de ISA de ggml**, y el artefacto sellaba y corría con 0 `%ymm`. Ahora van declaradas y el `install` las comprueba. Guardián `scripts/test-llama-cpp.py` con control negativo vivo. **Faltan** el modelo (fuente pineada, no receta), los verbos del host y quién levanta el servidor | 6.7, y la mitad semántica de 6.3 | 5 ✅ | -| 12 | **La bóveda (SDD-BOVEDA §8) — a medias, 2026-09-15.** La décima extensión: ofrece la credencial del sitio abierto y no puede sacar una contraseña por su cuenta —`vault.match` contesta títulos y usuarios; la contraseña sale por `vault.fill`, que **pregunta en el escritorio**—. La dirección la pone el chrome, nunca la página. El gestor de Gecko se aparta como VALOR DE ARRANQUE y no como política. ⚠ **No funciona todavía**: los tres verbos existen en tawasuyu y la receta pinea un commit ANTERIOR (§7.quinquies), y el pin está bloqueado por un `Cargo.lock` que no cierra. **Falta**: el lock de allá, el pin, el rebuild, y el guardián de METAL | el gestor de contraseñas de la suite dentro del navegador | 5 ✅ | +| 12 | **La bóveda (SDD-BOVEDA §8) — a medias, 2026-09-15.** La décima extensión: ofrece la credencial del sitio abierto y no puede sacar una contraseña por su cuenta —`vault.match` contesta títulos y usuarios; la contraseña sale por `vault.fill`, que **pregunta en el escritorio**—. La dirección la pone el chrome, nunca la página. El gestor de Gecko se aparta como VALOR DE ARRANQUE y no como política. **Destrabada el 2026-09-16** (§7.quinquies.bis): el `Cargo.lock` de tawasuyu publicado —y resultó ser byte a byte el que la otra sesión ya tenía sin commitear—, el pin subido a `23a292863` ⇒ `b3:7d63655a`, construido en el worker (el vendoreo son 2,4 G y el hub estaba al 99%) y medido con el mismo `strings` que había diagnosticado el hueco: `vault` de **0 a 10**, con `cas`/`sct` de control. **Falta**: el guardián de METAL | el gestor de contraseñas de la suite dentro del navegador | 5 ✅ | | 9.a | **Proxy por contenedor ✅ v0.5** — contenedores por política + extensión con `proxy.onRequest` | 6.8, y NO dependía de 5: es API de Firefox | — | Las unidades 2 y 4 son **paralelizables**: la toolchain no toca el chrome y el chrome no toca la diff --git a/scripts/test-atuq-suite.sh b/scripts/test-atuq-suite.sh index 045e29f7..7987d65a 100755 --- a/scripts/test-atuq-suite.sh +++ b/scripts/test-atuq-suite.sh @@ -15,19 +15,25 @@ # 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 **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 -# runner que no corre nada, y se ven igual. +# Hoy (2026-09-16) el resultado CORRECTO es **19 en verde**. Lo fue «17 y dos rojos» hasta esta +# tarde: los dos eran los verbos de la bóveda, y se apagaron al subir el pin de `puriy-costura` +# (SDD 26 §7.quinquies.bis). Si mañana hay un rojo, cambió algo que hay que ir a ver. # -# ⚠ Esta cabecera decía «un rojo» hasta que la primera corrida la desmintió: el segundo guardián -# lleva el mismo chequeo del cable ADENTRO. Queda escrito porque es la trampa de siempre —predecir -# el resultado y no volver a mirarlo—, y porque el número es el control: si mañana hay UN rojo, o -# tres, cambió algo que hay que ir a ver. +# ⚠ **Un cuadro entero en verde puede ser un producto sano o un runner que no corre nada, y se ven +# igual.** Mientras hubo un rojo conocido, el número lo distinguía solo. Ahora no, así que lo que +# sostiene la corrida son otras dos cosas, las dos comprobadas: +# +# · **la puerta del sello** — contra un store sin el artefacto, esto NO corre nada y devuelve 1 +# (verificado a propósito con un store vacío); +# · **el control de cada guardián** — todos traen el suyo (una rotura que TIENE que matarlos, o un +# positivo que TIENE que aparecer). El runner no los reemplaza: los junta. +# +# ⚠ Y la advertencia que este fichero se aplicó a sí mismo dos veces: la cabecera anunció «un rojo» +# y eran dos, y después «dos» cuando ya no quedaba ninguno. **Un número escrito como predicción +# envejece callado.** Si el cuadro no coincide con esto, el sospechoso es esta cabecera. # # ══ LO QUE CUESTA ═════════════════════════════════════════════════════════════════════════════ -# **~32 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 (32,1 min medidos el 2026-09-16, sobre 19 guardianes). 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`).