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 1574Shell 204Rust 111Markdown 993763 Definiciones

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>

a232bcc0af3bbed875f00a4e54ad1cf23d7826ce · por sergio · (hace 2 meses) · padre 3f502afe9 · ver el árbol en este commit

Delta semántico

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

3 archivos · +56 −18

diff --git a/docs/evidencia/cosmic-super-w-workspaces-qemu-2026-08-04.png b/docs/evidencia/cosmic-super-w-workspaces-qemu-2026-08-04.png
new file mode 100644
index 00000000..b43b0219
Binary files /dev/null and b/docs/evidencia/cosmic-super-w-workspaces-qemu-2026-08-04.png differ
diff --git a/docs/runbooks/cosmic-desktop.md b/docs/runbooks/cosmic-desktop.md
index 37be2abe..d50b1c29 100644
--- a/docs/runbooks/cosmic-desktop.md
+++ b/docs/runbooks/cosmic-desktop.md
@@ -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.
-
-**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.
+| fichero | lo instala | qué liga |
+|---|---|---|
+| `…Shortcuts/v1/defaults` | `cosmic-comp` | tecla → acción |
+| `…Shortcuts/v1/system_actions` | `cosmic-settings-daemon` | acción → comando |
+
+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
 
diff --git a/recipes/incoming-cosmic/cosmic-settings-daemon.toml b/recipes/incoming-cosmic/cosmic-settings-daemon.toml
index 31085834..b783b368 100644
--- a/recipes/incoming-cosmic/cosmic-settings-daemon.toml
+++ b/recipes/incoming-cosmic/cosmic-settings-daemon.toml
@@ -43,7 +43,15 @@ mkdir -p /out/usr/bin \
          /out/usr/share/polkit-1/rules.d
 cp target/release/cosmic-settings-daemon /out/usr/bin/cosmic-settings-daemon
 chmod 755 /out/usr/bin/cosmic-settings-daemon
-cp data/system_actions.ron /out/usr/share/cosmic/com.system76.CosmicSettings.Shortcuts/v1/system_actions
+# ⚠ SE FILTRA LA LÍNEA DE `ScreenReader`, Y ES LA QUE DEJA EL ESCRITORIO SIN TECLADO.
+# `system_actions` es la tabla acción→comando: `Launcher: "cosmic-launcher"`, `Terminal: …`. La
+# entrada `ScreenReader` nombra una variante que el enum de `cosmic-settings-config` (rev 8c54bbbc,
+# la que pinea cargo) todavía no tiene, y **RON no ignora lo que no conoce**: falla el mapa COMPLETO.
+# Resultado medido: `Super` tiene su ligadura en `defaults` y no pasa nada, porque el compositor sabe
+# QUÉ acción disparar y no CON QUÉ comando. Dos ficheros, dos preguntas: `defaults` liga tecla→acción,
+# `system_actions` liga acción→comando, y hay que sanear los dos —los dos traen la misma entrada.
+grep -v 'ScreenReader:' data/system_actions.ron \
+  > /out/usr/share/cosmic/com.system76.CosmicSettings.Shortcuts/v1/system_actions
 cp data/polkit-1/rules.d/cosmic-settings-daemon.rules /out/usr/share/polkit-1/rules.d/
 '''