plan de apps: el orden mpv → OBS → Firefox del ADR 0015 no sobrevive a la medición
Al ir por la segunda app del montón A salió que la premisa del ADR —«no lo bloquea nada
estructural, falta escribirlas»— vale para mpv y no para el resto. Medido contra el catálogo real
(1079 recetas) cruzando los makedepends del APKBUILD de Alpine de cada candidata:
· firefox → pide gtk+3.0-dev. Firefox NO tiene backend GTK4. Más X11 y un toolchain wasi que
no existe acá. La memoria decía «le falta subir el techo MSRV»: eso es cierto y es
LO MENOR. ⇒ NO es montón A.
· obs → pide qt6-qtbase/qtsvg, y Qt6 vive SÓLO en incoming-kde. Una receta del corpus no
alcanza una cola hermana ⇒ OBS hoy sólo puede ser una app DE KDE, no de las cuatro
imágenes. Más X11 y 20 recetas.
· chromium, libreoffice, gimp → peores, y los tres con GTK3 encima.
La consecuencia estratégica, que es lo que hay que decidir despierto: TODOS los navegadores Linux
son GTK3 (Firefox y derivados) o Chromium (que arrastra GTK3 y Qt6). «Tener navegador» no es un
ticket de recetas: es elegir entre autorar GTK3 o darle el navegador a qorpa (ADR 0015). La segunda
es coherente con lo ya decidido, y el navegador es justamente el proceso al que menos ganas dan de
darle el sistema entero.
Lo que SÍ está a mano, y es el hallazgo útil: `wf-recorder` sale con CERO recetas faltantes y cero
muros —su cierre quedó completo cuando entró mpv— y cubre el caso de uso principal por el que uno
instala OBS. Después `imv` (7 faltantes, todos cargadores de formato opcionales).
El método incluye su propio control: mpv, que YA ESTÁ SELLADA, aparece con 16 faltantes, que son
exactamente las perillas que su receta apaga a propósito. La columna que decide no es «cuántas
faltan» sino «cuántos MUROS», porque un muro no se paga escribiendo una receta sino cambiando una
decisión.
Semantic delta
No definition changed: this change is text, documentation or data.
1 files · +104 −0
- docs/plan-apps-usuario-final.md +104 −0
diff --git a/docs/plan-apps-usuario-final.md b/docs/plan-apps-usuario-final.md
new file mode 100644
index 00000000..997a4c62
--- /dev/null
+++ b/docs/plan-apps-usuario-final.md
@@ -0,0 +1,104 @@
+# Plan — apps de usuario final (montón A del ADR 0015), MEDIDO
+
+**Fecha de la medición:** 2026-09-03 · **Catálogo contra el que se midió:** 1079 recetas
+(corpus + las cuatro colas) · **Instrumento:** `makedepends`+`depends` del APKBUILD de Alpine de
+cada candidata, cruzados contra los nombres de receta que existen en el disco.
+
+## Por qué existe este documento
+
+El [ADR 0015](adr/0015-imagenes-ajenas.md) parte las apps que faltan en tres montones y dice del
+**A** —Firefox, Chromium, LibreOffice, mpv, GIMP, Inkscape, Blender, OBS— que no lo bloquea *«nada
+estructural: son Wayland-nativos y compilables. Falta escribirlas»*, y propone el orden
+**mpv → OBS → Firefox**.
+
+`mpv` se escribió el 2026-09-03 y esa parte se confirmó. Al ir por el segundo, la medición
+**desmiente la premisa para el resto del montón**: OBS y Firefox no están a una receta de distancia,
+están detrás de muros que esta distro levantó a propósito. Este documento deja el dato escrito para
+que la decisión se tome mirándolo y no de memoria.
+
+## Cómo leer la tabla
+
+Dos columnas, y **la que importa es la segunda**:
+
+- **recetas que faltan** — cuántos `makedepends` de Alpine no tienen receta acá. Es una **cota
+ superior floja**: Alpine construye con todo activado y nosotros no. El control lo da `mpv`, que
+ YA ESTÁ SELLADA y aun así aparece con 16 faltantes — son exactamente las perillas que su receta
+ apaga a propósito (jack, sndio, libbluray, zimg, rubberband…). O sea: un número alto no prueba
+ que sea caro.
+- **muros de diseño** — dependencias que NO son «una receta más», sino decisiones ya tomadas de
+ esta distro: GTK3 aparcado, X11 al tacho, Qt6 que vive sólo en `incoming-kde`, toolchain wasi
+ inexistente. **Un muro no se paga escribiendo una receta: se paga cambiando una decisión.**
+
+## La tabla
+
+| app | faltan | muros | veredicto |
+|---|---:|---|---|
+| **wf-recorder** | **0** | — | **construible HOY.** Grabar pantalla en Wayland. |
+| **imv** | 7 | — | barato: los 7 son cargadores de formato opcionales (heif, jxl, freeimage…). Visor de imágenes. |
+| **zathura** | 8 | — | lector de PDF; `girara` es su propia lib y ya usa GTK4 en Alpine. |
+| **mupdf** | 9 | X11 | el X11 es del visor `mupdf-x11`; el motor y `mupdf-gl` no. Requiere mirar. |
+| **inkscape** | 14 | — | sin muros, pero `gtkmm3` en la lista hay que verificarlo (¿GTK3 encubierto?). |
+| *mpv* | *16* | *X11* | *YA SELLADA — es el control del método, no una candidata.* |
+| **gimp** | 18 | **GTK3**, X11 | GIMP 2.10 es GTK2/3. Fuera de alcance mientras GTK3 esté aparcado. |
+| **obs-studio** | 20 | **Qt6**, X11 | ver abajo. |
+| **firefox** | 26 | **GTK3**, X11, **wasi** | ver abajo. |
+| **chromium** | 38 | **GTK3**, **Qt6**, X11 | peor que Firefox por todos lados. |
+| **libreoffice** | 59 | **GTK3**, **Qt6**, X11 | 59 recetas y tres muros. No es un ticket, es un año. |
+
+## Los dos veredictos que corrigen al ADR
+
+### Firefox NO es montón A
+
+Su APKBUILD pide `gtk+3.0-dev` — **Firefox no tiene backend GTK4 ni lo va a tener a corto plazo**, y
+GTK3 es una de las tres deudas que el frente GNOME aparcó por diseño. Además pide `libxt`,
+`libxcomposite` (X11) y un **toolchain wasi** (`wasi-sdk`, `wasi-compiler-rt`) que no existe en el
+corpus, más `nodejs`, `icu`, `nss/nspr`, `clang/llvm/lld` versionados y `cbindgen`.
+
+La memoria del repo decía que a Firefox «le falta subir el techo MSRV». Eso es cierto **y es lo
+menor**: el bloqueo real es GTK3.
+
+**Consecuencia estratégica, que es la decisión que hay que tomar despierto:** todos los navegadores
+del mundo Linux son o GTK3 (Firefox y derivados) o Chromium (que además arrastra Qt6 y GTK3 en
+Alpine). Entonces **«tener navegador» no es un ticket del montón A**: es elegir entre
+
+1. **autorar el stack GTK3** —revierte una decisión de diseño y reabre GIMP/Inkscape de paso—, o
+2. **darle el navegador a [qorpa](adr/0015-imagenes-ajenas.md)**, o sea tratarlo como montón B: el
+ navegador corre en la imagen ajena, hablando Wayland por socket.
+
+La opción 2 es coherente con todo lo demás que ya se decidió, y tiene una ventaja que conviene
+nombrar: el navegador es *justamente* el proceso al que menos ganas dan de darle el sistema entero.
+
+### OBS no puede ser una app del corpus
+
+Pide `qt6-qtbase-dev`, `qt6-qtbase-private-dev` y `qt6-qtsvg-dev`, y **Qt6 vive sólo en
+`incoming-kde/`**. Una receta resuelve sibling-first y después el catálogo padre: desde el corpus no
+se alcanza una cola. O sea que OBS hoy sólo puede existir **dentro de la cola de KDE**, y entonces
+no es una app de las cuatro imágenes sino una app de KDE. Súmese X11 (`libx11`, `libxcb`,
+`libxcomposite`, `libxinerama`) y 20 recetas nuevas (`libdatachannel`, `librist`, `libsrt`,
+`mbedtls`, `rnnoise`, `x264`, `luajit`, `swig`, `vlc`…).
+
+**Si lo que se quiere es grabar la pantalla** —que es el 80% de para qué se instala OBS— eso ya está
+al alcance de la mano: **`wf-recorder` sale con CERO recetas faltantes y cero muros**, porque su
+cierre (wayland, ffmpeg, libdrm) quedó completo cuando entró mpv.
+
+## Orden propuesto, en reemplazo del del ADR
+
+1. ✅ **mpv** — hecho (2026-09-03).
+2. **wf-recorder** — 0 faltantes. Cubre el caso de uso principal de OBS por una receta.
+3. **imv** — visor de imágenes; los 7 faltantes son opcionales y se puede entrar con los mínimos.
+4. **zathura** (+ backend PDF) — verificar antes que su cadena sea GTK4 y no GTK3.
+5. **Decisión de navegador** — no es trabajo de recetas, es la elección de arriba. No debería
+ entrar a una cola de build hasta que esté tomada.
+
+OBS, Firefox, Chromium, GIMP y LibreOffice **salen del montón A** hasta que se decida GTK3 o qorpa.
+Que se llame montón A y no se pueda construir es peor que no tenerlo en la lista: es deuda fantasma,
+la misma figura que la terna de GNOME que había que sacar de `targets.toml` para que el grafo dejara
+de mentir.
+
+## Reproducir la medición
+
+`/tmp/.../triaje-apps.py` fue un script de una sola vez; si hace falta repetirlo, lo que hace es:
+bajar el APKBUILD de cada candidata, extraer `makedepends`/`depends`, quitarles el sufijo `-dev`, y
+cruzar contra `recipes/*.toml` + `recipes/incoming-*/*.toml`, separando una lista fija de nombres
+que son muros de diseño (gtk+3.0, qt6-*, lib X11, wasi-*). No se guarda en `scripts/` porque la
+lista de candidatas es del momento, no un invariante que valga la pena vigilar.