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 Definiciones

atuq: la serie con UNA sola tarjeta — 2 de 10, y el hueco resulta real

Con -vga none la captura ya no tiene punto ciego, asi que un ✗ significa
«la ventana no esta». Clasificado el ultimo cuadro de las 10: 2 con la
pagina pintada, 1 con la ventana en blanco y 7 con SOLO el escritorio.
Las dos salidas explicaban los ✗ inflados de las series VGA=1, no el
fenomeno.

El MOZ_LOG separa los dos regimenes: las que tienen ventana escriben
952-1505 lineas hasta el apagado; las 7 sin ventana se cortan a los ~40s
y quedan 6 minutos de silencio, sin crash (WebRender arranca). Quedan
como hipotesis NO medida los frame callbacks que el compositor no manda.

Ademas: tasa-primera-pintura.sh nombra el log por VGA (la serie nueva
habia sobrescrito los crudos de la anterior).

21381b598fbea84afcda61f7ec2b845b93eebc73 · por Sergio · (hace 1 mes) · padre 52fea61cb · ver el árbol en este commit

Delta semántico

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

3 archivos · +230 −5

diff --git a/docs/26-atuq-envoltorio-gecko.md b/docs/26-atuq-envoltorio-gecko.md
index 9eab1405..b143bec3 100644
--- a/docs/26-atuq-envoltorio-gecko.md
+++ b/docs/26-atuq-envoltorio-gecko.md
@@ -1855,7 +1855,67 @@ cada corrida, y `scripts/vigia-imagen.py` **no cuenta las ciegas** — las nombr
 
 **Lo que sigue**, y ahora es otra pregunta: no «por qué no pinta» sino **por qué el escritorio abre la
 ventana en la salida que no tiene el foco** —y si con una sola salida (`-vga none`, que es como se va
-a usar la imagen de verdad) eso desaparece—. Es barato: la misma serie con una tarjeta.
+a usar la imagen de verdad) eso desaparece—. Es barato: la misma serie con una tarjeta. **Hecha: §6.10.nonies — y el hueco es real, 2 de 10.**
+
+#### 6.10.nonies Con UNA sola salida: **2 de 10** — y el hueco resulta ser real (2026-09-14)
+
+El §6.10.octies cerró pidiendo exactamente esta serie: las mismas diez corridas pero con `-vga none`,
+una sola tarjeta (`drm: card0`), que es como se usa la imagen de verdad. Con una sola salida la
+captura es COMPLETA, así que por primera vez **un ✗ significa «la ventana no está»** y no «no está en
+la que fotografié».
+
+| vídeo | pintaron | qué dice el ✗ |
+|---|---|---|
+| `vga+virtio-gpu` (dos DRM) | 4 de 14 | nada: la cámara miraba una de dos pantallas |
+| **`virtio-gpu` solo (`-vga none`)** | **2 de 10** | **concluyente** |
+
+Y como la captura ya no tiene punto ciego, se puede clasificar **el último cuadro de cada corrida** por
+su color dominante, que separa dos fallos que hasta ahora eran el mismo ✗:
+
+| último cuadro | corridas | qué es |
+|---|---|---|
+| `#ff00ff` 68 % | 2 | ✓ la página, pintada |
+| `#f9f9fb` 68 % | 1 | la **ventana está** —misma geometría que la que pinta— pero **en blanco** |
+| `#214a87` 91 % | 7 | **sólo el escritorio**: fondo, panel y dock. **No hay ventana** |
+
+⇒ **el hueco del §6.10.ter existe y no era la cámara.** Las dos salidas explicaban el número inflado
+de ✗ de las series con `VGA=1`, no el fenómeno.
+
+**Y el `MOZ_LOG` separa los dos regímenes con un número, no con una impresión:**
+
+| | líneas de `moz.moz_log` | último apunte del log |
+|---|---|---|
+| las 3 con ventana | 952 – 1505 | sigue escribiendo hasta que se apaga la VM |
+| las 7 sin ventana | 573 – 727 | **se corta a los ~40 s del lanzamiento**, y quedan **6 minutos de silencio** |
+
+No es que dibuje invisible: **deja de trabajar**. Y no muere por un crash — `atuq.log` de una fallida
+llega hasta `WebRender - OpenGL version new 3.2` / `Renderer: Software WebRender` sin una sola línea
+de error. Las últimas líneas que escribe son justo el bucle de vsync emulado:
+
+    WaylandSurface::VSyncCallbackHandler() marked as visible & has buffer
+    WaylandSurface::SetVSyncCallbackLocked(), enabled 1 mapped 1
+    WaylandSurface::Commit() allowed [1] needs commit 1
+      fire VSync callback aEmulated [0] cb.mEmulated [1]      ← y aquí se acaba
+
+Que es la forma que tiene Gecko de decir «commiteo a ciegas porque **nadie me devuelve frame
+callbacks**». La hipótesis que queda —**no medida todavía**, y hay que decirlo así— es que
+`cosmic-comp` nunca le da a esa superficie el estado de visible, así que el cliente se queda sin
+callbacks y se detiene. Lo contesta el log del compositor, no el del navegador.
+
+⚠ **Condición de la medida:** anfitrión a **load ~15** (la tanda de KDE del otro agente más VMs de
+otra sesión, en 4 cores) — más alta que el ~10 de la serie anterior. Las dos que pintaron lo hicieron
+a **+175 s** y **+319 s**, en línea con los +184…+312 de antes. Y hay un orden sospechoso que la serie
+no puede resolver sola: las 3 con ventana son las corridas 1-3 y las 7 sin ventana las 4-10, todas
+seguidas. Eso puede ser la carga subiendo o puede ser estado que dejan las corridas entre sí; **con
+diez corridas no se separa**.
+
+⚠ **Dos deudas del arnés que esta serie dejó a la vista**, ninguna barrida:
+· la cuenta de «procesos atuq» **nunca volvió**: el eco del serial se come la salida, así que no se
+  puede afirmar si el proceso seguía vivo en las fallidas (el `atuq.log` sin crash es evidencia
+  indirecta, no la misma cosa);
+· `tasa-primera-pintura.sh` quedó parametrizado por `VGA` pero **el nombre del log no**: la serie
+  nueva sobrescribió los crudos de la anterior (se salvaron 9 de 10 en `work/serie-dos-tarjetas/`).
+  Arreglado después de la serie — no durante: bash lee el guion a medida que lo ejecuta.
 
 ### 6.11 Y ahora la pregunta que faltaba: ¿REPRODUCE? (2026-09-07)
 
diff --git a/docs/state/primera-pintura.json b/docs/state/primera-pintura.json
index c761244c..e0a658f6 100644
--- a/docs/state/primera-pintura.json
+++ b/docs/state/primera-pintura.json
@@ -256,6 +256,166 @@
       "pantallas_fotografiadas": 2,
       "pantalla": "vga0",
       "nota": "la ventana apareció en vga0 mientras gpu0 seguía mostrando el escritorio sin navegador"
+    },
+    {
+      "medido": "2026-09-14T19:14:09Z",
+      "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+      "segundos_primera_pintura": null,
+      "pantalla": null,
+      "pantallas_fotografiadas": 1,
+      "presupuesto_s": 420,
+      "ventana_s": 480,
+      "cadencia_s": 30,
+      "lanzamiento": "perfil del usuario",
+      "video": "virtio-gpu solo (-vga none)",
+      "mem_mb": 2560,
+      "vcpus": 2,
+      "acel": "tcg",
+      "guion": "scripts/cosmic/atuq-en-imagen.py"
+    },
+    {
+      "medido": "2026-09-14T19:23:09Z",
+      "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+      "segundos_primera_pintura": 175,
+      "pantalla": "gpu0",
+      "pantallas_fotografiadas": 1,
+      "presupuesto_s": 420,
+      "ventana_s": 480,
+      "cadencia_s": 30,
+      "lanzamiento": "perfil del usuario",
+      "video": "virtio-gpu solo (-vga none)",
+      "mem_mb": 2560,
+      "vcpus": 2,
+      "acel": "tcg",
+      "guion": "scripts/cosmic/atuq-en-imagen.py"
+    },
+    {
+      "medido": "2026-09-14T19:34:16Z",
+      "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+      "segundos_primera_pintura": 319,
+      "pantalla": "gpu0",
+      "pantallas_fotografiadas": 1,
+      "presupuesto_s": 420,
+      "ventana_s": 480,
+      "cadencia_s": 30,
+      "lanzamiento": "perfil del usuario",
+      "video": "virtio-gpu solo (-vga none)",
+      "mem_mb": 2560,
+      "vcpus": 2,
+      "acel": "tcg",
+      "guion": "scripts/cosmic/atuq-en-imagen.py"
+    },
+    {
+      "medido": "2026-09-14T19:47:56Z",
+      "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+      "segundos_primera_pintura": null,
+      "pantalla": null,
+      "pantallas_fotografiadas": 1,
+      "presupuesto_s": 420,
+      "ventana_s": 480,
+      "cadencia_s": 30,
+      "lanzamiento": "perfil del usuario",
+      "video": "virtio-gpu solo (-vga none)",
+      "mem_mb": 2560,
+      "vcpus": 2,
+      "acel": "tcg",
+      "guion": "scripts/cosmic/atuq-en-imagen.py"
+    },
+    {
+      "medido": "2026-09-14T20:02:02Z",
+      "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+      "segundos_primera_pintura": null,
+      "pantalla": null,
+      "pantallas_fotografiadas": 1,
+      "presupuesto_s": 420,
+      "ventana_s": 480,
+      "cadencia_s": 30,
+      "lanzamiento": "perfil del usuario",
+      "video": "virtio-gpu solo (-vga none)",
+      "mem_mb": 2560,
+      "vcpus": 2,
+      "acel": "tcg",
+      "guion": "scripts/cosmic/atuq-en-imagen.py"
+    },
+    {
+      "medido": "2026-09-14T20:15:20Z",
+      "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+      "segundos_primera_pintura": null,
+      "pantalla": null,
+      "pantallas_fotografiadas": 1,
+      "presupuesto_s": 420,
+      "ventana_s": 480,
+      "cadencia_s": 30,
+      "lanzamiento": "perfil del usuario",
+      "video": "virtio-gpu solo (-vga none)",
+      "mem_mb": 2560,
+      "vcpus": 2,
+      "acel": "tcg",
+      "guion": "scripts/cosmic/atuq-en-imagen.py"
+    },
+    {
+      "medido": "2026-09-14T20:28:09Z",
+      "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+      "segundos_primera_pintura": null,
+      "pantalla": null,
+      "pantallas_fotografiadas": 1,
+      "presupuesto_s": 420,
+      "ventana_s": 480,
+      "cadencia_s": 30,
+      "lanzamiento": "perfil del usuario",
+      "video": "virtio-gpu solo (-vga none)",
+      "mem_mb": 2560,
+      "vcpus": 2,
+      "acel": "tcg",
+      "guion": "scripts/cosmic/atuq-en-imagen.py"
+    },
+    {
+      "medido": "2026-09-14T20:41:17Z",
+      "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+      "segundos_primera_pintura": null,
+      "pantalla": null,
+      "pantallas_fotografiadas": 1,
+      "presupuesto_s": 420,
+      "ventana_s": 480,
+      "cadencia_s": 30,
+      "lanzamiento": "perfil del usuario",
+      "video": "virtio-gpu solo (-vga none)",
+      "mem_mb": 2560,
+      "vcpus": 2,
+      "acel": "tcg",
+      "guion": "scripts/cosmic/atuq-en-imagen.py"
+    },
+    {
+      "medido": "2026-09-14T20:53:55Z",
+      "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+      "segundos_primera_pintura": null,
+      "pantalla": null,
+      "pantallas_fotografiadas": 1,
+      "presupuesto_s": 420,
+      "ventana_s": 480,
+      "cadencia_s": 30,
+      "lanzamiento": "perfil del usuario",
+      "video": "virtio-gpu solo (-vga none)",
+      "mem_mb": 2560,
+      "vcpus": 2,
+      "acel": "tcg",
+      "guion": "scripts/cosmic/atuq-en-imagen.py"
+    },
+    {
+      "medido": "2026-09-14T21:06:15Z",
+      "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+      "segundos_primera_pintura": null,
+      "pantalla": null,
+      "pantallas_fotografiadas": 1,
+      "presupuesto_s": 420,
+      "ventana_s": 480,
+      "cadencia_s": 30,
+      "lanzamiento": "perfil del usuario",
+      "video": "virtio-gpu solo (-vga none)",
+      "mem_mb": 2560,
+      "vcpus": 2,
+      "acel": "tcg",
+      "guion": "scripts/cosmic/atuq-en-imagen.py"
     }
   ]
 }
diff --git a/scripts/cosmic/tasa-primera-pintura.sh b/scripts/cosmic/tasa-primera-pintura.sh
index 36f50720..6b69da2b 100755
--- a/scripts/cosmic/tasa-primera-pintura.sh
+++ b/scripts/cosmic/tasa-primera-pintura.sh
@@ -2,6 +2,7 @@
 # tasa-primera-pintura.sh — corre N veces `atuq-en-imagen.py` y saca la TASA, no una anécdota.
 #
 #   scripts/cosmic/tasa-primera-pintura.sh [N]      (def 10)
+#   VGA=0 scripts/cosmic/tasa-primera-pintura.sh 10   una sola salida (así se usa la imagen de verdad)
 #
 # ── POR QUÉ UNA TASA ───────────────────────────────────────────────────────────────────────────
 # El §6.10.sexies del SDD 26 midió cinco corridas sobre la MISMA imagen: pintó en tres (+197, +197,
@@ -18,13 +19,17 @@ set -u
 ROOT="$(cd "$(dirname "$0")/../.." && pwd)"; cd "$ROOT"
 N="${1:-10}"
 WAIT="${WAIT:-480}"; CADENCE="${CADENCE:-30}"
+# ⚠ Con `VGA=1` hay DOS salidas y la ventana cae en cualquiera (§6.10.octies): la serie de diez del
+# 2026-09-14 midió con eso puesto y su «2 de 10» era dónde apuntaba la cámara. Con `VGA=0` hay una
+# sola salida y la captura es completa ⇒ el ✗ sí significa «no está».
+VGA="${VGA:-1}"
 ok=0; fallo=0; aborto=0; i=1
-echo "== $N corridas · --as-user · VGA=1 · ventana ${WAIT}s · cadencia ${CADENCE}s"
+echo "== $N corridas · --as-user · VGA=$VGA · ventana ${WAIT}s · cadencia ${CADENCE}s"
 while [ "$i" -le "$N" ]; do
-  log="work/tasa-$i.txt"
-  VGA=1 MEM="${MEM:-2560}" SMP="${SMP:-2}" timeout 2400 \
+  log="work/tasa-vga$VGA-$i.txt"
+  VGA="$VGA" MEM="${MEM:-2560}" SMP="${SMP:-2}" timeout 2400 \
     python3 scripts/cosmic/atuq-en-imagen.py --as-user --until-paint \
-      --wait "$WAIT" --cadence "$CADENCE" --out "work/tasa-corrida-$i" > "$log" 2>&1
+      --wait "$WAIT" --cadence "$CADENCE" --out "work/tasa-corrida-vga$VGA-$i" > "$log" 2>&1
   if grep -qa "PRIMERA PINTURA" "$log"; then
     t=$(grep -a "primera pintura:" "$log" | head -1)
     ok=$((ok+1));    echo "  [$i/$N] ✓ ${t#*✓ }"