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 815Rust 56Shell 37Markdown 291229 Sutichaykuna

📂 cosmic: FileChooser ejercido — pero NO desde cosmic-store, y el motivo importa

NO SE PUEDE DESDE LA TIENDA. cosmic-store se compila con la feature
xdg-portal, pero su ÚNICO uso del selector (src/update.rs:505,
Message::RepositoryAddDialog) arranca con
`if backend_name == BackendName::FlatpakUser`: el diálogo sólo se abre para
añadir un repositorio flatpak, y esta imagen no construye el backend
flatpak. La feature está compilada y el punto de llamada es INALCANZABLE.
Tener la feature encendida no es tener el flujo disponible.

El camino que sí ejerce la interfaz es llamarla directo por D-Bus, que
además prueba los tres eslabones sin depender de qué app la use:

  dbus-send --session --print-reply --dest=org.freedesktop.portal.Desktop \
    /org/freedesktop/portal/desktop \
    org.freedesktop.portal.FileChooser.OpenFile \
    string:"" string:Prueba dict:string:variant:handle_token,string:hammer1 &

Medido: el frontend devuelve el objeto Request con NUESTRO token
(/org/freedesktop/portal/desktop/request/1_113/hammer3) y el backend dibuja
el diálogo REAL — título «Prueba», el FS de verdad (run/tmp/dev/proc/sys),
panel de detalles (inode/directory, 963 items), Cancel/Open. La navegación
anda: doble clic en dev cambia la miga a «Filesystem › dev» y lista sus 129
entradas; seleccionar y pulsar Open lo cierra.

⚠ LO QUE NO QUEDÓ CAPTURADO: la URI devuelta. El Response de la spec de
portales es una señal UNICAST al llamador, y dbus-send termina apenas recibe
el method return, así que ya no está para recibirla; dbus-monitor con un
match rule normal tampoco la ve. Pide un cliente que implemente el ciclo
Request/Response, que es lo que hace ashpd dentro de las aplicaciones.
El diálogo está probado; la entrega del fichero a la aplicación, no.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

5f606111d1b16347ead3ecc122382a6e1b310dc3 · ruwaq sergio · (2 killa ñawpaq) · tayta 99e670ee4 · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

3 qillqakuna · +41 −4

diff --git a/docs/evidencia/cosmic-portal-filechooser-2026-08-05.png b/docs/evidencia/cosmic-portal-filechooser-2026-08-05.png
new file mode 100644
index 00000000..53fb313d
Binary files /dev/null and b/docs/evidencia/cosmic-portal-filechooser-2026-08-05.png differ
diff --git a/docs/evidencia/cosmic-portal-filechooser-nav-2026-08-05.png b/docs/evidencia/cosmic-portal-filechooser-nav-2026-08-05.png
new file mode 100644
index 00000000..a7fe4a3b
Binary files /dev/null and b/docs/evidencia/cosmic-portal-filechooser-nav-2026-08-05.png differ
diff --git a/docs/runbooks/cosmic-desktop.md b/docs/runbooks/cosmic-desktop.md
index 7a1c258b..a9eabe2d 100644
--- a/docs/runbooks/cosmic-desktop.md
+++ b/docs/runbooks/cosmic-desktop.md
@@ -901,12 +901,49 @@ que es justamente el eslabón que el `.service` con `@libexecdir@` sustituido ha
 ⚠ **Alcance honesto de esta medición**: prueba DISPONIBILIDAD y ENRUTADO, no los flujos completos.
 La única interfaz ejercida de punta a punta —con fichero en disco— es `Screenshot`.
 
+### 📂 FileChooser EJERCIDO — y por qué NO se puede desde cosmic-store
+
+`docs/evidencia/cosmic-portal-filechooser-2026-08-05.png` y `…-nav-…png`.
+
+**Primero, el camino que NO existe.** `cosmic-store` se compila con la feature `xdg-portal`, pero su
+ÚNICO uso del selector está en `src/update.rs:505`, dentro de
+`Message::RepositoryAddDialog`, y arranca con:
+
+```rust
+if backend_name == BackendName::FlatpakUser {
+    #[cfg(feature = "xdg-portal")]
+    ...file_chooser::open::Dialog::new()...
+```
+
+O sea que el diálogo sólo se abre para **añadir un repositorio flatpak**, y esta imagen no construye
+el backend flatpak (ver arriba: sólo `pkgar`). La feature está compilada y el punto de llamada es
+inalcanzable. **Tener la feature encendida no es tener el flujo disponible.**
+
+**El camino que sí ejerce la interfaz** es llamarla directo, que además prueba los tres eslabones sin
+depender de qué aplicación la use:
+
+```sh
+dbus-send --session --print-reply --dest=org.freedesktop.portal.Desktop \
+  /org/freedesktop/portal/desktop org.freedesktop.portal.FileChooser.OpenFile \
+  string:"" string:Prueba dict:string:variant:handle_token,string:hammer1 &
+```
+
+Resultado medido: el frontend devuelve el objeto Request con el token que le pasamos
+(`/org/freedesktop/portal/desktop/request/1_113/hammer3`) y el **backend dibuja el diálogo real** —
+título `Prueba`, el FS de verdad (`run`, `tmp`, `dev`, `proc`, `sys`), panel de detalles
+(`inode/directory`, 963 items) y botones Cancel/Open. La navegación anda: doble clic en `dev` cambia
+la miga de pan a `Filesystem › dev` y lista sus 129 entradas; seleccionar y pulsar *Open* lo cierra.
+
+⚠ **Lo que NO quedó capturado, y por qué**: la URI devuelta. El `Response` de la especificación de
+portales es una señal **unicast al llamador**, y `dbus-send` termina apenas recibe el *method return*,
+así que ya no está para recibirla; `dbus-monitor` con un match rule normal tampoco la ve. Capturarla
+pide un cliente que implemente el ciclo Request/Response — que es justo lo que hace `ashpd` dentro de
+las aplicaciones. **El diálogo está probado; la entrega del fichero a la aplicación, no.**
+
 ## Lo que falta, en orden
 
-1. **Ejercer los flujos, no sólo sondear**: `FileChooser` desde una aplicación que use el portal
-   (`cosmic-store` se compiló con la feature `xdg-portal`; `cosmic-edit` NO la usa, va con el
-   selector propio de `cosmic-files` como crate) y `ScreenCast`, que es la que ejercita pipewire de
-   verdad.
+1. **`ScreenCast`**, que es la que ejercita pipewire de verdad, y la entrega de URI del `FileChooser`
+   con un cliente `ashpd` real en vez de `dbus-send`.
 2. **Decidir `gvfs`** (ver la corrección de arriba: las piezas ya están selladas, lo que falta es la
    decisión sobre la segunda glib). Destrabaría los montajes remotos de cosmic-files y su applet.
 3. **Enchufar la tienda a `.swm`**: servir `org.freedesktop.PackageKit` y encender la feature