cosmic: los atajos andan (Super+A, Super+W) y el panel tiene un deadline de arranque

Faltaba sanear un SEGUNDO fichero: system_actions de cosmic-settings-daemon, que liga
acción→comando, con la misma entrada ScreenReader que el enum del parser no conoce. Con
defaults roto no hay ligaduras; con system_actions roto hay ligadura y ningún comando.
Ahora Super+A abre la biblioteca y Super+W la vista de espacios de trabajo — con
miniatura VIVA del escritorio dentro, o sea que el camino DMA-BUF→GBM de cosmic-workspaces
anda de verdad. Super a secas no abre nada porque pop-launcher (el motor del lanzador)
no está en el catálogo; los atajos no tienen la culpa.

Me equivoqué de fichero teniendo el dato: el error traía línea y columna y busqué el
token en vez del fichero que lo tiene en esa posición. Costó 40 minutos de rebuild.

Y el panel tiene un DEADLINE para registrar su servidor D-Bus: con -smp 4 arranca sin
ala izquierda, sin reloj y sin dock (894 colores vs 130); con -smp 8 -m 8192 son 4 de 4
completos. Perseguí eso como una regresión mía, revirtiendo tres cambios inocentes, porque
usé el conteo de procesos como veredicto: un escritorio sano muestra 32, no 48. El
framebuffer es el veredicto; los procesos no distinguen «arrancó» de «dibujó».

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-04 03:18:41 -04:00
co-authored by Claude Opus 5
parent 3f502afe9f
commit a232bcc0af
3 changed files with 55 additions and 17 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

+46 -16
View File
@@ -94,13 +94,13 @@ Más `cosmic-settings-daemon` y `xdg-desktop-portal-cosmic` fuera de esa lista.
| `cosmic-session` | ✅ sellado | `b3:81f02351` |
| `cosmic-icons` | ✅ sellado (671 SVGs) | `b3:94d06f77` |
| `dav1d` 1.5.4 | ✅ sellado (dep arrastrada, ver gotcha 8) | `b3:aab7a874` |
| **`cosmic-comp`** | ✅ **SELLADO — el gate** | `b3:b8abc52f` |
| **`cosmic-comp`** | ✅ **SELLADO — el gate** (filtra `ScreenReader`, ver atajos) | `b3:e871eee4` |
| `cosmic-bg` (dinámico, PINTA) | ✅ sellado | `b3:b2cfc410` |
| `cosmic-idle` (dinámico) | ✅ sellado | `b3:e1806acc` |
| `pulseaudio` · `pipewire` (cadena del settings-daemon) | ✅ sellados | `b3:e1ff4736` · `b3:338d1d8c` |
| `cosmic-panel` | ✅ sellado | `b3:ac5e48c5` |
| `cosmic-osd` | ✅ sellado | `b3:f15cb9c1` |
| `cosmic-settings-daemon` | ✅ sellado | `b3:0263288e` |
| `cosmic-settings-daemon` | ✅ sellado (filtra `ScreenReader`, ver atajos) | `b3:642919a5` |
| `cosmic-notifications` | ✅ sellado | `b3:3e2a5478` |
| `cosmic-launcher` | ✅ sellado | `b3:c17b4956` |
| `cosmic-app-library` | ✅ sellado | `b3:b2a163e7` |
@@ -366,11 +366,12 @@ Se reproduce así (headless y automatizable; **el `-vga none` no es opcional**,
```sh
COSMIC_MODE=session bash scripts/cosmic/qemu-desktop-image.sh
qemu-system-x86_64 -machine q35,accel=kvm -cpu host -smp 4 -m 4096 \
qemu-system-x86_64 -machine q35,accel=kvm -cpu host -smp 8 -m 8192 \ # 8 vCPU: ver el deadline del panel
-drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \
-drive if=pflash,format=raw,file=/tmp/OVMF_VARS.fd \
-drive file=work/hammer-cosmic-qemu.img,format=raw,if=virtio \
-vga none -device virtio-gpu-pci,xres=1280,yres=800 \
-device qemu-xhci,id=xhci -device usb-kbd,bus=xhci.0 -device usb-tablet,bus=xhci.0 \
-display none -serial file:/tmp/cosmic.serial -qmp unix:/tmp/qmp.sock,server,nowait
# y después, por QMP: {"execute":"screendump","arguments":{"filename":"/tmp/shot.ppm"}}
```
@@ -419,22 +420,51 @@ applets y componentes de sesión, no aplicaciones—, así que no hay nada que l
devuelva resultados no es un fallo del escritorio: es que la distro todavía no tiene ni una sola
aplicación gráfica. Se sabrá arreglado cuando entre `cosmic-files` o un terminal.
### 🔑 El atajo que no era: 29 ligaduras caídas por UNA línea de datos
### 🔑 Los atajos: dos ficheros envenenados por la misma línea
`Super` no abría el lanzador, **teniendo `(modifiers: [Super]): System(Launcher)` en el fichero**.
La causa: `data/keybindings.ron` de epoch-1.5.0 liga `Super+Alt+S` a `System(ScreenReader)`, una
acción que `cosmic-settings-config` —el crate que parsea el fichero, pineado por cargo en la rev
`8c54bbbc`— todavía no tiene en su enum. **RON no ignora lo que no conoce: falla la deserialización
del MAPA COMPLETO**, y con ella se caen las 29 ligaduras.
`Super+A` abre la biblioteca y `Super+W` la vista de espacios de trabajo
(`cosmic-super-w-workspaces-qemu-2026-08-04.png`, con **miniatura viva** del escritorio dentro — o
sea que el camino DMA-BUF→GBM del gotcha 11 anda de verdad). Para llegar ahí hubo que sanear DOS
ficheros de datos, no uno:
Lo que hace este bug difícil es cómo se presenta: apretás una tecla, no pasa nada, y el único rastro
es un `WARN` de *cosmic-idle* —ni siquiera del compositor— a doscientas líneas del arranque, hablando
de un enum. El síntoma no nombra ni la tecla, ni el fichero, ni el componente que lo sufre.
| fichero | lo instala | qué liga |
|---|---|---|
| `…Shortcuts/v1/defaults` | `cosmic-comp` | tecla → acción |
| `…Shortcuts/v1/system_actions` | `cosmic-settings-daemon` | acción → comando |
**Es el riesgo del pin lockstep asomando desde adentro de upstream**: acá el dato y el parser del
*mismo* epoch no coinciden. El fix va en el install de `cosmic-comp` y filtra esa única línea
(`grep -v 'System(ScreenReader)'`): se cae la acción que no existe, no las 28 que sí. El screen
reader no está en la imagen de todas formas.
Los dos traen una entrada `ScreenReader`, una variante que `cosmic-settings-config` —el crate que los
parsea, pineado por cargo en la rev `8c54bbbc`— todavía no tiene en su enum. **RON no ignora lo que
no conoce: falla la deserialización del MAPA COMPLETO.** Con `defaults` roto no hay ligaduras; con
`system_actions` roto hay ligadura pero ningún comando que ejecutar. Hacen falta los dos `grep -v`.
**Y acá me equivoqué de fichero teniendo el dato exacto delante.** El error decía
`3:5-3:17: Unexpected variant named 'ScreenReader'` — con línea y columna. Busqué el *token* en vez
de preguntarme *qué fichero lo tiene en esa posición*, di con `keybindings.ron` (que también lo
traía, en la línea 94), lo arreglé, reconstruí `cosmic-comp` **cuarenta minutos** y el error salió
igualito. Era otro fichero, de otro paquete. *Cuando el error trae coordenadas, la primera pregunta
es de qué fichero son, no dónde más aparece esa palabra.*
**Es el riesgo del pin lockstep asomando desde adentro de upstream**: el dato y el parser del *mismo*
epoch no coinciden.
**`Super` a secas sigue sin abrir nada, y no es un bug nuestro**: liga `System(Launcher)`, y
`cosmic-launcher` es sólo la interfaz — el motor de búsqueda es **`pop-launcher`**, un binario aparte
que el catálogo todavía no tiene (`pop-launcher failed to start: No such file or directory`). Los
atajos andan; lo que falta es el paquete.
### ⏱ El panel tiene un DEADLINE de arranque: con 4 vCPU sale mutilado
Medido: con `-smp 4` el panel arranca **sin ala izquierda, sin reloj y sin dock** —sólo la bandeja
derecha— y el único rastro es `Failed to setup panel dbus server deadline has elapsed`. Con
`-smp 8 -m 8192`: **4 arranques de 4 con el escritorio completo y cero deadlines vencidos**.
No es carga del anfitrión (falla con el anfitrión ocioso) sino la estampida del arranque: el panel
registra su servidor D-Bus mientras catorce clientes de iced escanean fuentes al mismo tiempo.
**Y una lección de medición que costó horas: el conteo de procesos NO sirve como veredicto.**
Perseguí una regresión inexistente comparando «48 procesos» contra «31», revirtiendo uno por uno
tres cambios míos que no tenían nada que ver — cuando un escritorio completo y sano muestra **32**.
El número de procesos no distingue «arrancó» de «dibujó». El framebuffer sí, y sin ambigüedad:
**894 colores = completo, 130 = mutilado.**
## Lo que falta, en orden