kcoreaddons: prender el módulo QML — el menú de Plasma ABRE, y detrás de él konsole

`-DKCOREADDONS_USE_QML=OFF` estaba desde que se escribió la receta, con el argumento razonable de
que un framework tier-1 no debería arrastrar QML. El precio no se vio hasta hacer CLIC en el
lanzador dentro de QEMU: `kickoff` importa `org.kde.coreaddons` y ese módulo lo instala esta receta
y ninguna otra ⇒ **el menú de aplicaciones no abría**. La librería C++ salía completa, sus 70
consumidores enlazaban bien y el perfil reportaba 100%.

Es la forma más pura del «sellado ≠ arranca»: no falta una librería, falta una porción OPCIONAL de
una librería que sí está. Ninguna métrica de clausura puede verlo — mide recetas, no features.

`qtdeclarative` ya estaba en `[deps].build`, así que prenderlo no agrega una dep: deja de tirar lo
que ya se podía construir.

VERIFICADO CON UN SOLO BUILD (56 s), a propósito, en vez de pagar la cascada para averiguarlo:
  · panel → menú abre (usuario, buscador, Favoritos/Todas, Aplicaciones/Lugares/Sesión)
  · buscar «konsole» + Enter → la terminal arranca y corre:
        uname -a         → Linux (none) 6.16.12 #1 SMP PREEMPT_DYNAMIC … x86_64
        konsole --version → konsole 25.04.3
Es la cadena completa del escritorio por primera vez: panel → menú → búsqueda → app → shell.

COSTO, medido antes de tocar y confirmado después: `yupana radio kcoreaddons` predijo 71, y el grafo
regenerado da exactamente **71 en deuda** (`escritorio-kde 192/263`). Queda como deuda DECLARADA
para una campaña de granja; la imagen de hoy corre con un kcoreaddons más nuevo que aquel contra el
que enlazaron sus consumidores, lo que es legítimo porque cruza un SONAME (misma ABI, sólo se suma
un módulo QML) — la misma regla que decidió la promoción de pipewire.

De yapa: `export SHELL=/bin/sh` en plasma-start-qemu.sh. El aviso rojo de konsole («Could not find
'', starting '/bin/sh' instead») era real y no venía de /etc/passwd —que dice /bin/sh— sino de que
konsole lee $SHELL y este getty no es un login shell.

Y el barrido que encuentra esto sin hacer clic queda escrito en el runbook: cruzar los `import` de
los `.qml` instalados contra los módulos con `qmldir`. Además de éste destapó `org.kde.kscreenlocker`
y `org.kde.newstuff.core`, sin diagnosticar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YGXe6mShYYw6V8ea1dQ13u
This commit is contained in:
Sergio
2026-09-03 21:57:38 +00:00
co-authored by Claude Opus 5
parent 4a68dfe761
commit 914c1b72af
6 changed files with 1204 additions and 388 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 KiB

+23
View File
@@ -158,3 +158,26 @@ como pendiente propio, separado del bug de abajo.
funcione. El barrido barato que sí lo prueba es cruzar los `import` de los `.qml` instalados contra
los módulos QML con `qmldir` que hay en el rootfs; así salió `org.kde.coreaddons` y, de yapa,
`org.kde.kscreenlocker` y `org.kde.newstuff.core`, que también faltan.
### El arreglo, verificado con UN build (2026-09-03)
`-DKCOREADDONS_USE_QML=ON` + **un solo** `hammer build kcoreaddons` (56 s) instala
`usr/lib/qt6/qml/org/kde/coreaddons/{libkcoreaddonsplugin.so,qmldir,…}`. Hidratado ESE artefacto en
el rootfs y rehecha la imagen, el menú **abre**: usuario, buscador, Favoritos / Todas las
aplicaciones, y las pestañas Aplicaciones / Lugares / Sesión
(`../evidencia/plasma6-qemu-2026-09-03-menu-abre.png`). Escribiendo `konsole` en el buscador y Enter,
la terminal arranca y corre — `uname -a` da el kernel 6.16.12 de hammer y `konsole --version` da
25.04.3 (`../evidencia/plasma6-qemu-2026-09-03-konsole-uname.png`).
Es la cadena completa del escritorio por primera vez: **panel → menú → búsqueda → app → shell**.
Se probó con UN build a propósito: la cascada de 71 es de granja y no hacía falta pagarla para saber
si el arreglo era el correcto. Las 71 quedan como **deuda declarada** —`escritorio-kde 192/263`— y la
imagen de hoy corre con un `kcoreaddons` más nuevo que aquel contra el que enlazaron sus
consumidores. Eso es legítimo porque lo que cruza es un **SONAME** (misma versión, misma ABI, sólo se
suma un módulo QML); es la misma regla que decidió la promoción de pipewire. Lo que NO se puede es
hidratar dos artefactos distintos en la misma ruta.
⚠ El aviso rojo `Could not find '', starting '/bin/sh' instead` de konsole era real y NO venía de
`/etc/passwd` (que dice `/bin/sh`): konsole lee **`$SHELL`**, y este getty no es un login shell.
Arreglado exportándolo en `plasma-start-qemu.sh`.
File diff suppressed because it is too large Load Diff
+28 -3
View File
@@ -1,7 +1,32 @@
# kcoreaddons 6.27.0 — framework KF6 tier-1 más fundamental (KAboutData, KFormat, KJob, KProcess…).
# Solo Qt6Core + ECM; base de casi todo KF6. Campaña KDE (ADR 0011), Capa 2. Patrón KF6 = patrón módulo
# Qt (dynamic, wrappers zig, CMAKE_PREFIX_PATH=/usr) + dep extra-cmake-modules. QML bindings / python /
# docs apagados. Core-only ⇒ sin el set Gui (mesa/xkb/wayland).
# Qt (dynamic, wrappers zig, CMAKE_PREFIX_PATH=/usr) + dep extra-cmake-modules. Python bindings y docs
# apagados. Core-only ⇒ sin el set Gui (mesa/xkb/wayland).
#
# ── `KCOREADDONS_USE_QML=ON` (2026-09-03): EL MENÚ DE APLICACIONES NO ABRÍA SIN ESTO ─────────────
# Estuvo en OFF desde que se escribió la receta, con el argumento razonable de que un framework
# tier-1 no debería arrastrar QML. El precio no se vio hasta hacer CLIC en el lanzador del panel
# dentro de QEMU, donde Plasma contesta con el diálogo entero:
#
# qrc:/qt/qml/plasma/applet/org/kde/plasma/kickoff/main.qml:191:25: Type FullRepresentation unavailable
# .../FullRepresentation.qml:69:13: Type Header unavailable
# .../Header.qml:18:1: module "org.kde.coreaddons" is not installed
#
# `kickoff` —el menú, o sea la puerta de entrada del escritorio— importa `org.kde.coreaddons` para
# `KUser`/`KFormat` desde QML, y ese módulo lo instala ESTA receta y ninguna otra. Con el flag en OFF
# la librería C++ sale completa, todos sus 70 consumidores enlazan bien, el perfil reporta 100% y el
# menú no abre. **Es la forma más pura del «sellado ≠ arranca»: no falta una librería, falta una
# porción OPCIONAL de una librería que sí está.**
#
# `qtdeclarative` ya estaba en `[deps].build` (lo pedían otros consumidores del cierre), así que
# prenderlo no agrega una dep: sólo deja de tirar a la basura lo que ya se podía construir.
#
# ⚠ COSTO, medido antes de tocar: `yupana radio kcoreaddons` = **71** recetas KDE que caen a deuda,
# porque el ArtifactHash cambia y con él el de todo lo que cuelga. Es campaña de granja, no ticket.
#
# EL BARRIDO QUE LO ENCUENTRA SIN HACER CLIC, para la próxima: cruzar los `import` de los `.qml`
# INSTALADOS en el rootfs contra los módulos QML que tienen `qmldir`. Además de éste destapó que
# faltan `org.kde.kscreenlocker` y `org.kde.newstuff.core` — dos huecos del mismo tipo, sin diagnosticar.
name = "kcoreaddons"
version = "6.27.0"
license = "LGPL-2.1-or-later OR LGPL-3.0-or-later"
@@ -37,7 +62,7 @@ cmake -B build -G Ninja -Wno-dev \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_PREFIX_PATH=/usr \
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF \
-DBUILD_TESTING=OFF -DBUILD_PYTHON_BINDINGS=OFF -DBUILD_DESIGNERPLUGIN=OFF \
-DKCOREADDONS_USE_QML=OFF
-DKCOREADDONS_USE_QML=ON
'''
compile = "cmake --build build"
install = "DESTDIR=/out cmake --install build"
+4
View File
@@ -24,6 +24,10 @@ export QML_IMPORT_PATH=$QML2_IMPORT_PATH
export XDG_DATA_DIRS=/usr/share
export XDG_RUNTIME_DIR=/run/user/0
export XDG_CONFIG_HOME=/root/.config
# konsole toma el intérprete de $SHELL, NO de /etc/passwd, y este getty no es un login shell ⇒ sin
# esto la terminal abre con «Warning: Could not find '', starting '/bin/sh' instead. Please check
# your profile settings.» en rojo. El shell caía bien de casualidad; el aviso era real.
export SHELL=/bin/sh
export XDG_CACHE_HOME=/root/.cache
export HOME=/root