tawasuyu

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 1572Shell 203Rust 109Markdown 993728 Definiciones

kde/H-Qt: ADR 0011 → gate PASADO; lecciones durables + snapshot para reanudar

Registra el resultado (qtbase sella b3:7c7c747d, app Qt rc=0 offscreen), las 3
lecciones de-Alpinización (wrapper zig/CMake, tensión estático↔dinámico = deuda
Capa 0, hidratación runtime musl) y el snapshot hammer-kde-qtbase-2026-07-11
(img 407438750) para arrancar futuras farm-up sin re-pagar el build. Próximo:
qtdeclarative/QML (H-QML) + saldar deuda Capa 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

8eb168e168482ad65dff3e23948dc992e4f2455d · por sergio · (hace 3 meses) · padre af5a175e0 · ver el árbol en este commit

Delta semántico

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

1 archivos · +38 −5

diff --git a/docs/adr/0011-escritorio-kde-plasma.md b/docs/adr/0011-escritorio-kde-plasma.md
index 97e0871f..82be06ea 100644
--- a/docs/adr/0011-escritorio-kde-plasma.md
+++ b/docs/adr/0011-escritorio-kde-plasma.md
@@ -1,6 +1,6 @@
 # 0011 — Etapa Escritorio: campaña KDE Plasma 6
 
-Estado: propuesto (roadmap de campaña, no implementación)
+Estado: aceptado · **gate H-Qt PASADO (2026-07-11)**
 Fecha: 2026-07-11
 Relacionado: [[etapa-g-importar-nix]], [[etapa-g-gui-chain-boundary]], [[granja-efimera-hcloud]],
 0003-zig-cc-builder, 0008-bootstrap-stages, 0010-arranque-grafo-mirada
@@ -164,9 +164,42 @@ por demanda.
 - **Adoptar binarios Qt/KDE de Alpine sin rebuild**: viola soberanía del bootstrap; se acepta sólo
   como deuda puntual (ej. GL), no como base del escritorio.
 
+## Resultado H-Qt (2026-07-11) — GATE PASADO ✅
+
+`qtbase 6.11.1` **construye y sella** en la granja (`b3:7c7c747d4d4b609f0d9eddbab5b4bc73e7816ce71c03e0fc53cfebf7ba35cebd`),
+receta `recipes/incoming-kde/qtbase.toml` (de-Alpinizada del APKBUILD, conserva sus parches de musl).
+Produce `libQt6Core/Gui/Widgets/OpenGL.so` **dinámicos** + el plugin QPA `libqwayland.so`. La app de
+prueba `scripts/kde/h-qt-test.cpp` (QApplication+QLabel) compila y linkea contra él, y **corre a rc=0**
+con `QT_QPA_PLATFORM=offscreen` en el rootfs musl del worker: crea la ventana y el event loop sale
+limpio. **El régimen dinámico + zig-cc + musl del ADR queda probado end-to-end en el componente más
+difícil de KDE** — el riesgo #1 (¿sobrevive el toolchain a Qt?) está respondido: sí.
+
+**Snapshot `hammer-kde-qtbase-2026-07-11` (img 407438750)**: worker con qtbase + su cierre de deps ya
+sellados. Arrancar futuras `farm-up` de la campaña KDE desde ESTA imagen (no la golden limpia) evita
+re-pagar ~45 min de build. El worker efímero se destruyó (baseline €0).
+
+### Lecciones durables (patrón de-Alpinización Qt/KDE)
+1. **zig-cc + CMake**: CMake canonicaliza el symlink `cc`→`/opt/zig/zig`, perdiendo el despacho por
+   `argv[0]`; ASM y custom-commands invocan `zig -std=…` (subcomando inválido). Fix: scripts wrapper
+   reales (`$PWD/.zwrap/{cc,cxx}` = `exec zig cc/c++ -mcpu=baseline`), en el ÁRBOL DE FUENTE (no /tmp,
+   que se vacía entre fases), y `-DCMAKE_{C,CXX,ASM}_COMPILER` apuntándolos. Un script no se canonicaliza.
+2. **Tensión estático↔dinámico (la deuda central de Capa 0)**: la capa GUI arma `.so`, pero muchas
+   libs C canónicas están selladas como **archive estático sin -fPIC** (openssl `libcrypto.a`, sqlite)
+   o **incompletas bajo `-Wl,--no-undefined`** (glib) o **sin arrastrar deps transitivas** (fontconfig
+   →expat). `libQt6Core.so` SÍ linkea con glib/pcre2 (PIC-compat) y `zlib` entra como `libz.so`. Para
+   el gate se apagó/bundleó lo problemático (dbus/sql/openssl/glib/fontconfig OFF; freetype/harfbuzz/
+   libpng/libjpeg bundled). **DEUDA para KDE real: reconstruir el closure C shared-PIC + `.pc` con
+   `Requires.private` completo** (SSL/SQL/glib/fontconfig los va a exigir Plasma).
+3. **Hidratación runtime**: correr un binario musl del store exige el rootfs musl (`.dev-fs/alpine`, el
+   host del worker es glibc) + el cierre de `.so` en `LD_LIBRARY_PATH` (mesa/libdrm/…). Varios libs son
+   static-only en el store: se puede fabricar la `.so` desde el `.a` si es PIC
+   (`zig cc -shared -Wl,--whole-archive lib.a`). Falta una hidratación FHS que capture el cierre runtime.
+
 ## Próximo paso concreto
 
-Importar+pinnear la **Capa 0 faltante** a `recipes/incoming-kde/` (empezando por Mesa-completo +
-pila xcb/X11 + elogind/seatd + PipeWire), y correr la primera `farm-run` de la campaña. El gate
-temprano a perseguir es **H-Qt**: si `qtbase` + una ventana Qt no funciona bajo el régimen dinámico,
-todo lo demás se replantea antes de gastar granja en 700 recetas.
+Con H-Qt cerrado, la **Capa 1 (Qt6)** sigue con **qtdeclarative (QML)** — Plasma es QML, es el
+siguiente de-risk (hito H-QML) — más `qtwayland` como módulo completo (ya tenemos su QPA en qtbase,
+pero KDE usa `qtwayland` extendido). En paralelo, **saldar la deuda de Capa 0**: sqlite+openssl
+shared-PIC y glib `.a` completo, para reactivar SSL/SQL/glib en un qtbase "real" (hoy es el qtbase del
+gate, reducido; se rebuildea con features plenas antes de promover a canónico/firmado). Arrancar las
+`farm-up` desde el snapshot `hammer-kde-qtbase-2026-07-11`.