atuq: el 117x70 era un DIÁLOGO — el navegador nunca abría, y el perfil venía envenenado
Cuatro secciones discutiendo por qué la ventana de atuq salía de 117x70, y no era la ventana de atuq.
Lo dice el mismo volcado de protocolo que ya se había leído, dos líneas más abajo de donde paró la
lectura:
558 -> xdg_toplevel#58.set_title("Open atuq in Troubleshoot Mode?")
Es safeMode.xhtml, el diálogo de Modo de resolución de problemas. La cadena, cada eslabón con su
fuente y ninguno deducido:
1. el perfil del usuario traía `toolkit.startup.recent_crashes = 16` (prefs.js del 15-Sep 00:36,
ANTES de las corridas del día; leído con debugfs sobre la partición, sin montar y sin root);
2. el umbral de NUESTRO build es 3 (browser/omni.ja -> defaults/preferences/firefox.js:831);
3. BrowserGlue.sys.mjs:389 abre el diálogo MODAL en `_beforeUIStartup()`, que por su propio
comentario corre «before the first window is opened»: no hay navegador detrás esperando;
4. el `set_max_size(348, 16332)` sale del Fluent del diálogo (`max-width: 400px`);
5. y el proceso se va solo con `ATUQ-EXIT=0` porque el único camino de ese diálogo que termina el
programa es `onCancel()` -> `quit(eForceQuit)`. Quién lo cancela no está medido.
El control, en los dos sentidos, mismo artefacto y mismo perfil: con el contador limpio pinta a
+123 s (704.458 px); fijado en 16, nada en 300 s y vuelve el diálogo. Y una honestidad que cambia la
fuerza del argumento: en la corrida limpia el `--crashes 0` fue un NO-OP —Gecko ya lo había
borrado—, así que la que prueba la causa es la que lo pone de vuelta y rompe de vuelta.
Cae también la sospecha del §6.10.duodecies: con `WidgetScreen:5`, Gecko ve la pantalla completa
(1280x800 de workarea) CINCO SEGUNDOS antes de crear la ventana. No había carrera con wl_output.
Y lo más caro: la serie de primera-pintura.json está contaminada por el propio andamiaje. El arnés
mata la VM con el navegador vivo, cada arranque sin terminar es una caída para Gecko y pasados 3 el
sujeto medido deja de ser el navegador. «3 de 13» y «2 de 10» midieron un perfil que se degradaba
corrida a corrida. Lo que cada corrida sume exactamente NO está medido y así queda escrito.
Queda una decisión de producto que no se mete de paso porque re-sella el artefacto: si atuq debe
traer `toolkit.startup.max_resumed_crashes = -1`.
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
2 qillqakuna · +314 −88
- docs/26-atuq-envoltorio-gecko.md +167 −0
- docs/state/primera-pintura.json +147 −88
diff --git a/docs/26-atuq-envoltorio-gecko.md b/docs/26-atuq-envoltorio-gecko.md
index 393be936..6589e7b2 100644
--- a/docs/26-atuq-envoltorio-gecko.md
+++ b/docs/26-atuq-envoltorio-gecko.md
@@ -2031,6 +2031,173 @@ que cuando dimensiona no tiene la geometría de la salida: el primer `configure`
la MISMA lista los eventos `wl_output` contra el `set_window_geometry`; con dos greps separados no se
puede, porque no se pueden intercalar.
+⚠ **Esa sospecha se midió al día siguiente y es FALSA —y además la pregunta estaba mal hecha: esa
+ventana no era la del navegador (§6.10.terdecies).** Queda escrita porque el orden importa: era una
+hipótesis razonable, y lo que la desmintió fue preguntarle al `ScreenManager` en vez de seguir
+deduciendo del protocolo.
+
+#### 6.10.terdecies **La ventana de 117×70 es un DIÁLOGO: el navegador nunca abrió** (2026-09-15)
+
+Las últimas cuatro secciones discutieron por qué la ventana de `atuq` sale de 117×70. La respuesta es
+que **no era la ventana de `atuq`**, y lo dice el mismo volcado de protocolo que ya se había leído
+—dos líneas más abajo de donde paró la lectura—:
+
+ 556 -> xdg_surface#57.get_toplevel(new id xdg_toplevel#58)
+ 558 -> xdg_toplevel#58.set_title("Open atuq in Troubleshoot Mode?")
+ 559 -> xdg_toplevel#58.set_app_id("atuq")
+ 629 -> xdg_toplevel#58.set_min_size(117, 37)
+ 630 -> xdg_toplevel#58.set_max_size(348, 16332)
+ 631 -> xdg_surface#57.set_window_geometry(26, 23, 117, 70)
+
+Es `chrome://browser/content/safeMode.xhtml`: el **diálogo de Modo de resolución de problemas**. Con
+eso la pregunta cambia de «¿por qué la ventana sale chica?» a «¿por qué `atuq` arranca en modo de
+resolución de problemas?», que tiene respuesta y tiene arreglo.
+
+**La cadena entera, y dónde se lee cada eslabón.** Nada de esto es deducción:
+
+1. el perfil del usuario traía el contador de caídas alto — `prefs.js` con fecha 15-Sep 00:36, o sea
+ **antes** de cualquier corrida de ese día:
+
+ user_pref("toolkit.startup.recent_crashes", 16);
+
+2. el umbral, en **nuestro** build: `browser/omni.ja → defaults/preferences/firefox.js:831` dice
+ `pref("toolkit.startup.max_resumed_crashes", 3)` ⇒ 16 > 3 ⇒ `automaticSafeModeNecessary`;
+3. quién abre el diálogo: `modules/BrowserGlue.sys.mjs:389`, en `_beforeUIStartup()`, cuyo propio
+ comentario dice *«runs on startup, before the first command line handler is invoked (i.e. before
+ the first window is opened)»*:
+
+ if (Services.appinfo.inSafeMode) {
+ Services.ww.openWindow(null, "chrome://browser/content/safeMode.xhtml", "_blank",
+ "chrome,centerscreen,modal,resizable=no", null);
+ }
+
+ **modal y antes de la primera ventana** ⇒ no hay un navegador detrás esperando: no hay navegador;
+4. hasta el `set_max_size(348, 16332)` sale de ahí: el título del diálogo se traduce con Fluent y la
+ traducción trae el tamaño — `localization/en-US/browser/safeMode.ftl`,
+ `troubleshoot-mode-window .style = max-width: 400px`;
+5. y por qué el proceso se MUERE solo (el «`[1]+ Done`» que imprimió el shell del serial): el único camino de
+ ese diálogo que termina el programa es `onCancel()` de `safeMode.js`, que llama
+ `appStartup.quit(appStartup.eForceQuit)`. El log trae `ATUQ-EXIT=0`: se va solo, sin caerse. Quién
+ cancela el diálogo —Escape, el compositor, el cierre de la ventana— **no está medido**.
+
+**Cómo se leyó el perfil sin arrancar la imagen**, que es la única forma honesta de mirar el estado
+*previo* —arrancarla lo cambia—: el disco es un raw con tabla de particiones y `debugfs` lee la
+partición sin montarla y sin root:
+
+ debugfs -R "dump /root/.config/mozilla/firefox/<id>.default-default/prefs.js /tmp/prefs.js" \
+ "/mnt/cosecha/takana-cosmic-qemu.img?offset=$((264192*512))"
+
+##### La sospecha del §6.10.duodecies era falsa: Gecko SÍ ve la pantalla, 1280×800
+
+Se midió agregándole `WidgetScreen:5` al `MOZ_LOG` —el módulo que registra qué monitores arma el
+`ScreenManager`; que el módulo EXISTE en el `libxul` sellado se comprobó con `grep` antes de confiar
+en la variable, porque un módulo que no está se ve igual que un módulo que no tiene nada que decir—.
+La respuesta llega con hora:
+
+ 17:12:29.031 D/WidgetScreen New monitor 0 size [0,0 -> 1280 x 800] depth 24 scale 1.0 … refresh 75
+ 17:12:29.031 D/WidgetScreen workarea [0, 0] -> [1280 x 800]
+ 17:12:31.377 D/WidgetScreen (otra vez, ya en el proceso Parent)
+ 17:12:34.843 D/Widget nsWindow::Create() Initial resize to 1 x 1 ← nace de 1×1
+ 17:12:35.290 D/WidgetScreen GetScreenForWindow() [0] screen (x=0, y=0, w=1280, h=800)
+
+⇒ la pantalla está completa y a tiempo, **cinco segundos antes** de que la ventana se cree, y la
+propia ventana la resuelve bien cuando pregunta. La carrera con `wl_output` queda **refutada** y el
+`configure_bounds(0, 0)` del principio es ruido del protocolo, no información que a Gecko le falte.
+Que el 117×70 resultara ser un diálogo con `max-width` no le quita valor: era la hipótesis viva y
+hacía falta matarla con un instrumento.
+
+##### El control, en los DOS sentidos — y es el contador
+
+Dos corridas seguidas sobre la misma imagen, el mismo artefacto y el **mismo perfil**, cambiando una
+sola cosa: `toolkit.startup.recent_crashes`, fijado en el `user.js` del perfil (que gana sobre
+`prefs.js` en cada arranque). El mando es `atuq-en-imagen.py --crashes N`:
+
+| corrida | contador | qué pasó |
+|---|---|---|
+| **A** 17:31 | ausente (0) | ✓ **primera pintura +123 s**, 704 458 px de la página magenta |
+| **B** 17:44 | fijado en **16** | ✗ nada en 300 s · `set_title("Open atuq in Troubleshoot Mode?")` · `ATUQ-EXIT=0` |
+
+⚠ **Y una honestidad que cambia la fuerza del argumento:** en la corrida A el `--crashes 0` fue un
+**no-op** —el contador ya no estaba en `prefs.js`, porque Gecko lo BORRA después de mostrar el
+diálogo—, así que A sola no prueba nada: prueba tanto «lo arregló el 0» como «el perfil ya estaba
+limpio». **La que prueba la causa es B**, que lo pone de vuelta y rompe de vuelta. Una sola dirección
+habría sido una correlación con suerte.
+
+##### ⚠⚠ La serie de `primera-pintura.json` está CONTAMINADA, y por el propio andamiaje
+
+El arnés mata la VM con el navegador vivo. Un arranque que no llega a terminar es, para Gecko, una
+caída de arranque; pasados 3 el sujeto de la medición **deja de ser el navegador y pasa a ser el
+diálogo**. Con 16 acumulados, todo lo medido desde el 14-Sep cae bajo sospecha: las tasas «3 de 13»
+del §6.10.septies y «2 de 10» del §6.10.nonies no midieron intermitencia del producto sino **un
+perfil que se degradaba corrida a corrida**. El instrumento degradaba al sujeto.
+
+(**Lo que todavía NO está medido**, y se dice para que no se lea como medido: que cada corrida
+matada sume exactamente uno. La medición que lo cerraría es una corrida sin `--crashes`, matada a
+mitad, y leer el contador del arranque siguiente con `debugfs`.)
+
+Qué se hizo con eso, en vez de borrar el fichero:
+
+- **el contador viaja con cada medición**: `recent_crashes_antes`, `recent_crashes_despues` y
+ `recent_crashes_fijado` son campos de cada corrida de `docs/state/primera-pintura.json`. Antes y
+ después porque Gecko lo limpia al mostrar el diálogo: sin el «después», la corrida siguiente parece
+ arreglarse sola y la anterior parece intermitente;
+- **el vigía las APARTA y lo dice**: `scripts/vigia-imagen.py` saca de la tasa las corridas con el
+ contador > 3 y, para las 21 anteriores al campo, informa que **no se pueden clasificar** en vez de
+ contarlas como buenas. Un denominador que se marca, no que se borra.
+
+##### Tres arreglos de instrumento que salieron de la misma corrida
+
+- **el código de salida se escribe**: el lanzamiento va en un subshell que agrega `ATUQ-EXIT=$?` al
+ log. En la corrida de las 17:12 el navegador terminó a los ~25 s y el arnés siguió 420 s
+ fotografiando un escritorio sin navegador para concluir «no pintó en 420 s» — cierto y sin ningún
+ significado. «Se cayó» y «se fue solo» se ven igual en una captura y son frentes distintos;
+- **se lee el log ENTERO**, no `tail -25`: con `WAYLAND_DEBUG=1` esas 25 líneas son protocolo, y los
+ errores de JS del chrome nunca se habían leído. Ahora hay `head` y un `grep` de
+ `JavaScript error|Uncaught|NS_ERROR|###!!!`; y como el disco de la VM es persistente, el log del
+ arranque anterior se copia a `/var/log/cosmic-anterior/` antes de pisarlo;
+- **el perfil se BUSCA y se imprime**: el `find` miraba sólo `/root` a 4 niveles y el perfil está a
+ cinco (`/root/.config/mozilla/firefox/<id>.default-default`), así que la sonda salía muda con un
+ aviso de una línea. Ahora va `find / -xdev -maxdepth 7` e imprime `$HOME`: si el perfil no está
+ donde se supone, lo que hace falta es saber dónde está.
+
+Y la lista ordenada del protocolo tenía su propio agujero: **se ahogaba en los ~60 modos que anuncia
+QEMU** (`wl_output.mode(0, …)`), así que el `head -70` cortaba antes del `set_window_geometry` —la
+lista que existía para ordenar dos cosas se quedaba sin una de las dos—. Ahora excluye los modos no
+actuales y trae `set_title`/`set_app_id`, que es lo que identificó la ventana.
+
+##### ⚠ Dos agentes, una imagen — y lo que nos salvó fue el lock de QEMU
+
+Mientras se medía esto, **dos sesiones distintas** corrieron `atuq-en-imagen.py` sobre el mismo
+`takana-cosmic-qemu.img`. La segunda murió en el arranque:
+
+ qemu-system-x86_64: -drive file=…/takana-cosmic-qemu.img,format=raw,if=virtio:
+ Failed to get "write" lock. Is another process using the image?
+
+Dos VMs escribiendo el mismo raw es corrupción silenciosa del sistema de ficheros del guest, y la
+imagen **no** se abre con `snapshot=on` a propósito (las corridas se acumulan: de ahí salen los logs
+del arranque anterior). Que el candado exista es de QEMU, no nuestro — el mismo patrón del ADR 0012
+con el árbol de fuentes, pero con la mitigación ya puesta. Dos consecuencias:
+
+- **la imagen es de a uno, y quien la usa lo dice**;
+- el arnés ahora **mira si QEMU murió** en el primer segundo y muestra `qemu.log`. Sin eso, el fallo
+ se veía como diez minutos esperando una marca del serial que no iba a llegar nunca: el socket queda
+ creado, el `connect()` funciona y no falla nada.
+
+##### Lo que queda, y una decisión de producto
+
+1. **decidir si `atuq` debe traer el modo automático apagado.** `toolkit.startup.max_resumed_crashes
+ = -1` lo desactiva. A favor: en una distro que se entrega, un diálogo modal en inglés sin
+ navegador detrás es un arranque roto para el usuario, y el diálogo aparece por caídas que pueden
+ no ser suyas. En contra: es una red de seguridad de upstream, y apagarla esconde caídas de
+ arranque reales. **Es una decisión, no un arreglo que se mete de paso** — toca `recipes/atuq/` y
+ por lo tanto re-sella el artefacto (~340 M de store y todas las sondas a repetir);
+2. **rehacer la serie de la tasa con perfil sano**: hoy hay UNA corrida limpia (+123 s) y el resto
+ está marcado. «Cuánto tarda en pintar» vuelve a estar sin medir, y ahora se puede medir bien;
+3. **y la pregunta vieja sigue abierta con otra forma**: cuando el navegador abre ventana de verdad,
+ ¿respeta el `sizemode=maximized` de 1332×852 que el `xulstore.json` de ese perfil recuerda? Para
+ eso está `--xulstore ANCHOxALTO`, que corre una segunda fase en el MISMO arranque (mismo
+ compositor, misma carga) en vez de comparar dos arranques distintos.
+
### 6.11 Y ahora la pregunta que faltaba: ¿REPRODUCE? (2026-09-07)
El §6.10 preguntó «¿qué NO puede hacer?» y contestó leyendo cadenas. Media pregunta. La otra mitad
diff --git a/docs/state/primera-pintura.json b/docs/state/primera-pintura.json
index e0a658f6..7f53c290 100644
--- a/docs/state/primera-pintura.json
+++ b/docs/state/primera-pintura.json
@@ -1,93 +1,5 @@
{
"corridas": [
- {
- "medido": "2026-09-14T14:28:00Z",
- "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
- "segundos_primera_pintura": 197,
- "presupuesto_s": 420,
- "ventana_s": 180,
- "cadencia_s": 63,
- "lanzamiento": "perfil nuevo en tmpfs",
- "video": "virtio-gpu solo (-vga none)",
- "mem_mb": 2560,
- "vcpus": 2,
- "acel": "tcg",
- "guion": "scripts/cosmic/atuq-en-imagen.py",
- "capturas": "work/atuq-imagen-1tarjeta",
- "nota": "reconstruida de las capturas guardadas",
- "pantallas_fotografiadas": 1,
- "pantalla": "desconocida (una sola captura)"
- },
- {
- "medido": "2026-09-14T14:36:00Z",
- "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
- "segundos_primera_pintura": 197,
- "presupuesto_s": 420,
- "ventana_s": 240,
- "cadencia_s": 66,
- "lanzamiento": "perfil nuevo en tmpfs",
- "video": "vga+virtio-gpu (dos DRM)",
- "mem_mb": 2560,
- "vcpus": 2,
- "acel": "tcg",
- "guion": "scripts/cosmic/atuq-en-imagen.py",
- "capturas": "work/atuq-imagen-2tarjetas",
- "nota": "reconstruida de las capturas guardadas",
- "pantallas_fotografiadas": 1,
- "pantalla": "desconocida (una sola captura)"
- },
- {
- "medido": "2026-09-14T14:47:00Z",
- "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
- "segundos_primera_pintura": null,
- "presupuesto_s": 420,
- "ventana_s": 291,
- "cadencia_s": 71,
- "lanzamiento": "perfil del usuario",
- "video": "vga+virtio-gpu (dos DRM)",
- "mem_mb": 2560,
- "vcpus": 2,
- "acel": "tcg",
- "guion": "scripts/cosmic/atuq-en-imagen.py",
- "capturas": "work/atuq-imagen-comousuario",
- "nota": "reconstruida; el MOZ_LOG commiteaba buffers a +330 s, DESPUÉS de la última captura",
- "pantallas_fotografiadas": 1
- },
- {
- "medido": "2026-09-14T15:10:00Z",
- "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
- "segundos_primera_pintura": 204,
- "presupuesto_s": 420,
- "ventana_s": 900,
- "cadencia_s": 66,
- "lanzamiento": "perfil del usuario",
- "video": "vga+virtio-gpu (dos DRM)",
- "mem_mb": 2560,
- "vcpus": 2,
- "acel": "tcg",
- "guion": "scripts/cosmic/atuq-en-imagen.py",
- "capturas": "work/atuq-imagen-usuario-largo",
- "nota": "reconstruida de las capturas guardadas",
- "pantallas_fotografiadas": 1,
- "pantalla": "desconocida (una sola captura)"
- },
- {
- "medido": "2026-09-14T15:58:44Z",
- "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
- "segundos_primera_pintura": null,
- "presupuesto_s": 420,
- "ventana_s": 900,
- "cadencia_s": 30,
- "lanzamiento": "perfil del usuario",
- "video": "vga+virtio-gpu (dos DRM)",
- "mem_mb": 2560,
- "vcpus": 2,
- "acel": "tcg",
- "guion": "scripts/cosmic/atuq-en-imagen.py",
- "capturas": "work/atuq-imagen-medicion",
- "nota": "NO pintó en 900 s y el MOZ_LOG commiteaba WaylandBufferSHM desde ≤ +377 s: «mapped 1» NO prueba que se vea",
- "pantallas_fotografiadas": 1
- },
{
"medido": "2026-09-14T16:17:13Z",
"imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
@@ -416,6 +328,153 @@
"vcpus": 2,
"acel": "tcg",
"guion": "scripts/cosmic/atuq-en-imagen.py"
+ },
+ {
+ "medido": "2026-09-14T21:31:39Z",
+ "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+ "segundos_primera_pintura": null,
+ "pantalla": null,
+ "pantallas_fotografiadas": 1,
+ "presupuesto_s": 420,
+ "ventana_s": 480,
+ "cadencia_s": 40,
+ "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:53:07Z",
+ "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+ "segundos_primera_pintura": null,
+ "pantalla": null,
+ "pantallas_fotografiadas": 1,
+ "presupuesto_s": 420,
+ "ventana_s": 480,
+ "cadencia_s": 40,
+ "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-14T22:17:27Z",
+ "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+ "segundos_primera_pintura": null,
+ "pantalla": null,
+ "pantallas_fotografiadas": 1,
+ "presupuesto_s": 420,
+ "ventana_s": 480,
+ "cadencia_s": 40,
+ "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-14T22:31:36Z",
+ "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+ "segundos_primera_pintura": null,
+ "pantalla": null,
+ "pantallas_fotografiadas": 1,
+ "presupuesto_s": 420,
+ "ventana_s": 480,
+ "cadencia_s": 40,
+ "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-15T00:27:18Z",
+ "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+ "segundos_primera_pintura": null,
+ "pantalla": null,
+ "pantallas_fotografiadas": 1,
+ "presupuesto_s": 420,
+ "ventana_s": 300,
+ "cadencia_s": 60,
+ "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-15T00:37:46Z",
+ "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+ "segundos_primera_pintura": null,
+ "pantalla": null,
+ "pantallas_fotografiadas": 1,
+ "presupuesto_s": 420,
+ "ventana_s": 300,
+ "cadencia_s": 60,
+ "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-15T17:19:09Z",
+ "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+ "segundos_primera_pintura": null,
+ "pantalla": null,
+ "pantallas_fotografiadas": 1,
+ "presupuesto_s": 420,
+ "ventana_s": 420,
+ "cadencia_s": 60,
+ "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-15T17:31:32Z",
+ "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+ "segundos_primera_pintura": 123,
+ "pantalla": "gpu0",
+ "pantallas_fotografiadas": 1,
+ "presupuesto_s": 420,
+ "ventana_s": 420,
+ "cadencia_s": 60,
+ "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-15T17:44:06Z",
+ "imagen": "/mnt/cosecha/takana-cosmic-qemu.img",
+ "segundos_primera_pintura": null,
+ "pantalla": null,
+ "pantallas_fotografiadas": 1,
+ "presupuesto_s": 420,
+ "ventana_s": 300,
+ "cadencia_s": 60,
+ "lanzamiento": "perfil del usuario",
+ "video": "virtio-gpu solo (-vga none)",
+ "mem_mb": 2560,
+ "vcpus": 2,
+ "acel": "tcg",
+ "guion": "scripts/cosmic/atuq-en-imagen.py",
+ "recent_crashes_fijado": 16,
+ "recent_crashes_antes": null,
+ "recent_crashes_despues": 16
}
]
}