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: el 117x70 lo pide el CLIENTE, no el compositor

Ordenando el protocolo numerado en los dos sentidos: cosmic-comp manda
configure_bounds(0,0)+configure(0,0) («elegi vos»), el cliente contesta
set_min_size(117,37), set_max_size(348,16332) y set_window_geometry(117,70),
y RECIEN ahi el compositor devuelve configure(117,70) teniendo 1280x692
para dar. No hay nada que arreglar en COSMIC.

El MOZ_LOG dice como: «Initial resize to 1 x 1» — Gecko crea la ventana de
1x1 y nunca la agranda; 117x70 es lo que queda cuando el chrome se mide a
si mismo. El frente se mueve a Gecko.

798cfab7e8958664ce4203d786c562db3cce9e16 · por Sergio · (hace 1 mes) · padre 5c83e906e · ver el árbol en este commit

Delta semántico · 1

scripts/cosmic/atuq-en-imagen.py

  • cambió por dentro fn main

2 archivos · +49 −0

diff --git a/docs/26-atuq-envoltorio-gecko.md b/docs/26-atuq-envoltorio-gecko.md
index f417a7e8..393be936 100644
--- a/docs/26-atuq-envoltorio-gecko.md
+++ b/docs/26-atuq-envoltorio-gecko.md
@@ -1994,6 +1994,43 @@ llevan `#id` en el medio (`wl_surface#30.commit`), así que `wl_surface.commit`
 grep que devuelve 0 puede ser una ausencia o puede ser un patrón mal escrito, y las dos se ven
 igual.**
 
+#### 6.10.duodecies **El 117×70 lo pide el CLIENTE** — el compositor sólo obedece (2026-09-15)
+
+El §6.10.undecies dejó abierto quién elige el tamaño, y dijo cómo medirlo: mirar, **en orden y en los
+dos sentidos**, dónde aparece por primera vez. `create_buffer` trae el tamaño (el `attach` no), y
+`set_window_geometry` es lo que el cliente DECLARA querer. Numerado, sale así:
+
+    590  xdg_toplevel#58.configure_bounds(0, 0)                  ← compositor: «elegí vos»
+    592  xdg_toplevel#58.configure(0, 0, array[0])
+    629  → xdg_toplevel#58.set_min_size(117, 37)                 ← EL CLIENTE
+    630  → xdg_toplevel#58.set_max_size(348, 16332)
+    631  → xdg_surface#57.set_window_geometry(26, 23, 117, 70)   ← EL CLIENTE pide 117×70
+    664  xdg_toplevel#58.configure_bounds(1280, 692)
+    665  xdg_toplevel#58.configure(117, 70, array[16])           ← el compositor ACATA
+
+⇒ **`cosmic-comp` no impone nada.** Tiene 1280×692 para dar y devuelve exactamente lo que el cliente
+pidió. La ventana de 117×70 la elige **`atuq`**.
+
+Y el `MOZ_LOG` de la misma corrida dice cómo:
+
+    nsWindow::Create()
+      nsWindow::Create() Initial resize to 1 x 1     ← nace de 1×1
+      nsWindow::Create() Toplevel
+    nsWindowWayland::CreateNative()
+
+**Gecko crea la ventana de 1×1 y nunca la agranda.** El 117×70 no es un tamaño elegido: es lo que
+queda cuando el chrome se mide a sí mismo sin que nadie le diga de qué tamaño tiene que ser. Lo
+confirma el `set_max_size(348, 16332)`: ancho máximo 348 px y alto 16332 — las restricciones de una
+caja que se dimensiona por su contenido, no las de una ventana de navegador. (Y el buffer que
+commitea es de 157×110 para una geometría de 117×70: los ~20 px de margen son la sombra del CSD.)
+
+⇒ **el frente se mueve de COSMIC a Gecko.** No hay nada que arreglar en el compositor. Lo que falta
+saber es por qué el `nsWindow` se queda en su tamaño mínimo, y la sospecha —**todavía sin medir**— es
+que cuando dimensiona no tiene la geometría de la salida: el primer `configure` llega con
+`bounds(0,0)`, o sea que en ese instante ni el compositor se la puede dar. Se comprueba ordenando en
+la MISMA lista los eventos `wl_output` contra el `set_window_geometry`; con dos greps separados no se
+puede, porque no se pueden intercalar.
+
 ### 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/scripts/cosmic/atuq-en-imagen.py b/scripts/cosmic/atuq-en-imagen.py
index 082c0a6a..1705c74c 100755
--- a/scripts/cosmic/atuq-en-imagen.py
+++ b/scripts/cosmic/atuq-en-imagen.py
@@ -383,6 +383,18 @@ def main():
                 # por `->` es leer otra vez al cliente, que es justo la mitad que ya sabemos que
                 # miente. Y los nombres llevan `@id` en el medio, así que `wl_surface.commit` no
                 # engancha: hay que anclar en el método.
+                # QUIÉN ELIGE EL TAMAÑO. `attach` no lo dice: el tamaño del buffer está en
+                # `create_buffer(…, W, H, stride, fmt)`, y lo que el cliente DECLARA querer está en
+                # `set_window_geometry`. Puestos en orden y en los DOS sentidos, se ve si el 117×70
+                # lo propone el cliente (y el compositor lo repite) o lo impone el compositor.
+                print("---- protocolo: el tamaño, en orden (→ = pedido del cliente) ----")
+                # Va `wl_output` en la MISMA lista y numerada: la pregunta es si la geometría de
+                # la salida (`mode`) llega ANTES o DESPUÉS de que el cliente fije su tamaño. Con dos
+                # greps separados eso no se puede ordenar.
+                print(ser.cmd("grep -a -n -E 'create_buffer|set_window_geometry|configure|ack_configure|"
+                              "get_toplevel|set_min_size|set_max_size|\\.attach|wl_output|\\.mode\\(|"
+                              "\\.geometry\\(|\\.done\\(\\)' "
+                              "/var/log/cosmic/atuq.log | head -70", 240))
                 print("---- protocolo: EVENTOS del compositor (sin flecha) ----")
                 print(ser.cmd("grep -av ' -> ' /var/log/cosmic/atuq.log | "
                               "grep -a -E 'xdg_surface|xdg_toplevel|wl_callback|wl_output|wl_surface' | "