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 1345Shell 122Rust 77Markdown 692253 Sutichaykuna

⎇ 2a8bab70c84ac433174c087fd544522b116a1c39 docs/HANDOFF-noche-kde-2026-07-14.md Markdown · 111 siq'ikuna · 7.9 KB Ñawpa willay ch'uya

kde/Plasma: handoff nocturno — plasma-desktop en construcción + comandos de mañana para H-shell 2a8bab70c · sergio ·

1# HANDOFF — sesión nocturna autónoma KDE (2026-07-13→14)
2
3Trabajo desatendido continuando la campaña KDE Plasma 6 tras cerrar H-QML. Estado y próximos pasos.
4
5## Lo logrado esta noche (todo committeado+pusheado a main)
6
71. **Hidratación FHS del escritorio COMPLETO, rebuild-free** (commit d6944b2). `hammer hydrate <hash>
8   --into` proyecta artefactos SELLADOS del store sin reproduce (el `install`-reproduce rebuildеa qtbase
9   por consumidor — hashing frágil bajo régimen dinámico). `scripts/kde/hydrate-from-store.sh` →
10   `work/kde-store-rootfs`: 137 pkgs, hashes = los sellados de la campaña (kwin 3a674cb6, plasma-workspace
11   284c862f, libplasma 963403fe, etc.).
12
132. **Cierre runtime COMPLETO + zlib soberano shared** (commit a7449a0).
14   - `scripts/kde/complete-closure.sh`: escanea DT_NEEDED de todos los ELF del rootfs y proyecta del store
15     lo que falte (libmount.so.1/util-linux, libltdl, libzstd, libQt6UiTools). **1269 .so, 0 faltantes.**
16   - `recipes/incoming-kde/zlib-shared.toml` (bd559f41): el stack GUI NEEDED `libz.so.1` por soname y
17     ningún artefacto lo proveía → caía al de Alpine (fuga de soberanía). `.so` fabricado del `libz.a`
18     PIC vía `--whole-archive`.
19   - **kwin_wayland ahora resuelve TODAS sus libs** y carga su plugin QPA (antes fallaba por libs faltantes).
20
213. **mesa-swrast construido** (softpipe/swrast, GL por software SIN LLVM, sello c59738eb; la receta
22   `recipes/mesa-swrast.toml` ya existía). Provee `swrast_dri.so` + `kms_swrast_dri.so` + libEGL/GLESv2
23   software, para render sin GPU.
24
254. **`scripts/kde/run-plasma-headless.sh`**: lanzador de la sesión Plasma headless (software EGL/softpipe
26   sobre el KMS del worker). NO funciona aún (ver abajo).
27
28## 🎉 LANDMARK: kwin + plasmashell CORREN HEADLESS end-to-end (software, rootfs soberano)
29
30El hack `loader --library-path` rompía el `dlopen` de plugins de kwin (QPA `create()` → core dump). **Fix
31= bwrap con el rootfs merged como `/`** (`--overlay-src .dev-fs/alpine --overlay-src kde-store-rootfs
32--tmp-overlay /` + `LD_LIBRARY_PATH=/usr/lib64:/usr/lib/qt6:/usr/lib:/lib`), paths FHS nativos. Con eso:
33- **`kwin_wayland --virtual --width 1280 --height 800` LEVANTA el compositor** (backend virtual, framebuffer
34  en memoria; gbm sobre renderD128 falla pero cae a compositing por software y sigue) → **`Accepting client
35  connections on sockets: QList("wayland-0")`**, socket `/run/wayland-0` creado.
36- **`plasmashell` CONECTA a wayland-0 y arranca** (proceso vivo, frameworkintegration/QtQuick-software
37  cargados). El stack Plasma 6 SOBERANO (musl/zig-cc) EJECUTA end-to-end sin GPU real.
38- Se traba en `starting invalid corona "org.kde.plasma.desktop"` → **falta el paquete SHELL
39  `org.kde.plasma.desktop`, que provee `plasma-desktop` (NO construido aún)**. plasma-workspace da el
40  binario plasmashell, no el shell/corona. Ese es el único gran gap a "escritorio prende" (H-shell).
41
42Env que funciona (bwrap): `GALLIUM_DRIVER=swrast LIBGL_ALWAYS_SOFTWARE=1 LIBGL_DRIVERS_PATH=/usr/lib/dri
43MESA_LOADER_DRIVER_OVERRIDE=swrast QT_QUICK_BACKEND=software` + mesa-swrast hidratado. Gaps menores
44detectados (no-fatales para arrancar, sí para un desktop limpio): D-Bus session (crear `/run/dbus` antes de
45`dbus-daemon --session`), xkeyboard-config (`/usr/share/X11/xkb`), breeze-icons (icon theme), fuentes.
46
47## Próximo directo a H-shell: plasma-desktop (EN CONSTRUCCIÓN al cierre de la noche)
48`plasma-desktop` (shell org.kde.plasma.desktop) es lo único que falta para H-shell. Progreso nocturno:
49- **Receta `recipes/incoming-kde/plasma-desktop.toml` DRAFTED** (patrón KF6, WITH_X11=OFF wayland-puro).
50  **Configura OK y COMPILA** (155 objetos). Deps nuevas que pedía: `qt5compat`, `knotifyconfig`,
51  `plasma5support` (las 2 últimas: qt5compat/plasma5support ya sellados; knotifyconfig lo SELLÉ, ver abajo).
52- **`knotifyconfig` 6.27.0 SELLADO** (7db820f8, commit 726b309) — framework KF6 nuevo, dep de plasma-desktop.
53- **Al cierre**: el build de plasma-desktop está en una **cascada de rebuild de deps** (qtdeclarative se
54  rebuildea, fragilidad de hashing dinámico — ~30-60 min). Está nohup'd en el worker, **sellará solo**.
55
56### Comandos de la mañana (retomar plasma-desktop → intentar H-shell)
57```
58W="ssh -i ~/.ssh/github5 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@95.217.179.242"
59# 1) ¿selló plasma-desktop?
60$W 'cd /opt/hammer; grep -E "sealed.*plasma-desktop|PD_EXIT=" work/build-plasma-desktop.log | tail -3'
61#    si NO selló y no hay build vivo (ps), relanzar:
62#    $W 'cd /opt/hammer; nohup sh -c "NO_PROXY=localhost NIX_STORE=\$HOME/.nixstore ./target/release/hammer --store ./store build recipes/incoming-kde/plasma-desktop.toml; echo PD_EXIT=\$?" > work/build-plasma-desktop.log 2>&1 &'
63# 2) al sellar: hidratar plasma-desktop al rootfs headless + su cierre
64$W 'cd /opt/hammer; H=$(ls -dt store/*-plasma-desktop|head -1|sed -E "s|store/([0-9a-f]+)-.*|\1|"); \
65    ./target/release/hammer --store ./store hydrate $H --into work/kde-store-rootfs --link static; \
66    RFS=work/kde-store-rootfs scripts/kde/complete-closure.sh'
67# 3) correr la sesión (¿carga la corona org.kde.plasma.desktop ahora?):
68$W 'cd /opt/hammer; SECS=40 scripts/kde/run-plasma-headless.sh 2>&1 | tail -40'
69#    Buscar en client.log: ¿desapareció "invalid corona"? ¿aparecen containments/panel?
70```
71Posibles blockers restantes de plasma-desktop (si el build falla más adelante): más frameworks KF6 no
72construidos (mismo método: configure delata `Could NOT find KF6Xxx` → draftar receta clonando
73knotifyconfig.toml → sellar → añadir a deps). Candidatos: kpeople, baloo (→lmdb), kaccounts, libxkbfile.
74Opcionales pesados a apagar por flag si aparecen REQUIRED: ibus, packagekit, pulseaudio/pipewire.
75
76### Piezas de datos que faltan para un desktop LIMPIO (no bloquean el arranque)
77- **fuentes**: `xkeyboard-config-2.44.tar.xz` sha `54d2c33eeebb031d48fa590c543e54c9bcbd0f00386ebc6489b2f47a0da4342a`
78  (para `/usr/share/X11/xkb`, quita el error xkb); una receta de fuentes dejavu (Qt ya no las trae).
79- **breeze-icons** (icon theme "breeze not found").
80
81## Camino paralelo: METAL (tu laptop TigerLake/Intel)
82
83El rootfs está hecho para **GPU Intel real (`iris_dri.so`)**, no software. Donde kwin renderiza de verdad
84es tu laptop. Para probar H-shell mañana:
85
861. **Regenerar el rootfs de producto con Mesa IRIS** (NO swrast — esta noche se le hizo swap a swrast para
87   el intento headless; revertir):
88   ```
89   # en el worker (o local con el store):
90   RFS=work/kde-metal-rootfs TARGETS="plasma-workspace kwin kscreenlocker breeze frameworkintegration \
91     qqc2-desktop-style plasma-integration" scripts/kde/hydrate-from-store.sh
92   RFS=work/kde-metal-rootfs scripts/kde/complete-closure.sh   # cierra libmount/libz/etc.
93   # asegurar iris (mesa canónico) hidratado, NO mesa-swrast
94   ```
952. **Fuentes**: falta desplegar TTFs (dejavu) — Qt ya no las trae (`QFontDatabase: Cannot find font
96   directory`). Cosmético pero necesario para texto. (Pendiente: receta dejavu-fonts.)
973. **Empaquetar como imagen booteable EFI** (`scripts/install-image-efi.sh` / `disk-image.sh`) con
98   kernel-metal ([[etapa-metal-usb]]) + un init que lance `startplasma-wayland`, y bootear en el laptop
99   (Secure Boot OFF).
100
101## Alternativa productiva (si se prefiere seguir en el worker)
102
103- **Capa 2 KF6 / apps núcleo**: importar+construir `konsole`/`dolphin`/`kate` vía granja (extiende el
104  escritorio usable). Verificable (sellan o no).
105- **Seguir debug headless**: correr kwin bajo gdb en el worker para el backtrace del core dump del QPA;
106  probar `KWIN_DRM_NO_AMS=1`, `WLR_RENDERER=pixman`-equivalentes, o el backend `--virtual` con distinto
107  EGL (`EGL_PLATFORM=surfaceless`).
108
109## Comandos útiles
110- Worker: `ssh -i ~/.ssh/github5 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@95.217.179.242` (cd /opt/hammer). zsh: `${=VAR}` para splitear.
111- Rootfs actual: `work/kde-store-rootfs` (con mesa-swrast swapped). Rehidratar limpio con los scripts de arriba.

HANDOFF-noche-kde-2026-07-14.md

HANDOFF — sesión nocturna autónoma KDE (2026-07-13→14)

Trabajo desatendido continuando la campaña KDE Plasma 6 tras cerrar H-QML. Estado y próximos pasos.

Lo logrado esta noche (todo committeado+pusheado a main)

  1. Hidratación FHS del escritorio COMPLETO, rebuild-free (commit d6944b2). hammer hydrate <hash> --into proyecta artefactos SELLADOS del store sin reproduce (el install-reproduce rebuildеa qtbase por consumidor — hashing frágil bajo régimen dinámico). scripts/kde/hydrate-from-store.sh → work/kde-store-rootfs: 137 pkgs, hashes = los sellados de la campaña (kwin 3a674cb6, plasma-workspace 284c862f, libplasma 963403fe, etc.).

  2. Cierre runtime COMPLETO + zlib soberano shared (commit a7449a0).

    • scripts/kde/complete-closure.sh: escanea DT_NEEDED de todos los ELF del rootfs y proyecta del store lo que falte (libmount.so.1/util-linux, libltdl, libzstd, libQt6UiTools). 1269 .so, 0 faltantes.
    • recipes/incoming-kde/zlib-shared.toml (bd559f41): el stack GUI NEEDED libz.so.1 por soname y ningún artefacto lo proveía → caía al de Alpine (fuga de soberanía). .so fabricado del libz.a PIC vía --whole-archive.
    • kwin_wayland ahora resuelve TODAS sus libs y carga su plugin QPA (antes fallaba por libs faltantes).
  3. mesa-swrast construido (softpipe/swrast, GL por software SIN LLVM, sello c59738eb; la receta recipes/mesa-swrast.toml ya existía). Provee swrast_dri.so + kms_swrast_dri.so + libEGL/GLESv2 software, para render sin GPU.

  4. scripts/kde/run-plasma-headless.sh: lanzador de la sesión Plasma headless (software EGL/softpipe sobre el KMS del worker). NO funciona aún (ver abajo).

🎉 LANDMARK: kwin + plasmashell CORREN HEADLESS end-to-end (software, rootfs soberano)

El hack loader --library-path rompía el dlopen de plugins de kwin (QPA create() → core dump). Fix = bwrap con el rootfs merged como / (--overlay-src .dev-fs/alpine --overlay-src kde-store-rootfs --tmp-overlay / + LD_LIBRARY_PATH=/usr/lib64:/usr/lib/qt6:/usr/lib:/lib), paths FHS nativos. Con eso:

Env que funciona (bwrap): GALLIUM_DRIVER=swrast LIBGL_ALWAYS_SOFTWARE=1 LIBGL_DRIVERS_PATH=/usr/lib/dri MESA_LOADER_DRIVER_OVERRIDE=swrast QT_QUICK_BACKEND=software + mesa-swrast hidratado. Gaps menores detectados (no-fatales para arrancar, sí para un desktop limpio): D-Bus session (crear /run/dbus antes de dbus-daemon --session), xkeyboard-config (/usr/share/X11/xkb), breeze-icons (icon theme), fuentes.

Próximo directo a H-shell: plasma-desktop (EN CONSTRUCCIÓN al cierre de la noche)

plasma-desktop (shell org.kde.plasma.desktop) es lo único que falta para H-shell. Progreso nocturno:

Comandos de la mañana (retomar plasma-desktop → intentar H-shell)

W="ssh -i ~/.ssh/github5 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@95.217.179.242"
# 1) ¿selló plasma-desktop?
$W 'cd /opt/hammer; grep -E "sealed.*plasma-desktop|PD_EXIT=" work/build-plasma-desktop.log | tail -3'
#    si NO selló y no hay build vivo (ps), relanzar:
#    $W 'cd /opt/hammer; nohup sh -c "NO_PROXY=localhost NIX_STORE=\$HOME/.nixstore ./target/release/hammer --store ./store build recipes/incoming-kde/plasma-desktop.toml; echo PD_EXIT=\$?" > work/build-plasma-desktop.log 2>&1 &'
# 2) al sellar: hidratar plasma-desktop al rootfs headless + su cierre
$W 'cd /opt/hammer; H=$(ls -dt store/*-plasma-desktop|head -1|sed -E "s|store/([0-9a-f]+)-.*|\1|"); \
    ./target/release/hammer --store ./store hydrate $H --into work/kde-store-rootfs --link static; \
    RFS=work/kde-store-rootfs scripts/kde/complete-closure.sh'
# 3) correr la sesión (¿carga la corona org.kde.plasma.desktop ahora?):
$W 'cd /opt/hammer; SECS=40 scripts/kde/run-plasma-headless.sh 2>&1 | tail -40'
#    Buscar en client.log: ¿desapareció "invalid corona"? ¿aparecen containments/panel?

Posibles blockers restantes de plasma-desktop (si el build falla más adelante): más frameworks KF6 no construidos (mismo método: configure delata Could NOT find KF6Xxx → draftar receta clonando knotifyconfig.toml → sellar → añadir a deps). Candidatos: kpeople, baloo (→lmdb), kaccounts, libxkbfile. Opcionales pesados a apagar por flag si aparecen REQUIRED: ibus, packagekit, pulseaudio/pipewire.

Piezas de datos que faltan para un desktop LIMPIO (no bloquean el arranque)

Camino paralelo: METAL (tu laptop TigerLake/Intel)

El rootfs está hecho para GPU Intel real (iris_dri.so), no software. Donde kwin renderiza de verdad es tu laptop. Para probar H-shell mañana:

  1. Regenerar el rootfs de producto con Mesa IRIS (NO swrast — esta noche se le hizo swap a swrast para el intento headless; revertir):
    # en el worker (o local con el store):
    RFS=work/kde-metal-rootfs TARGETS="plasma-workspace kwin kscreenlocker breeze frameworkintegration \
      qqc2-desktop-style plasma-integration" scripts/kde/hydrate-from-store.sh
    RFS=work/kde-metal-rootfs scripts/kde/complete-closure.sh   # cierra libmount/libz/etc.
    # asegurar iris (mesa canónico) hidratado, NO mesa-swrast
    
  2. Fuentes: falta desplegar TTFs (dejavu) — Qt ya no las trae (QFontDatabase: Cannot find font directory). Cosmético pero necesario para texto. (Pendiente: receta dejavu-fonts.)
  3. Empaquetar como imagen booteable EFI (scripts/install-image-efi.sh / disk-image.sh) con kernel-metal ([[etapa-metal-usb]]) + un init que lance startplasma-wayland, y bootear en el laptop (Secure Boot OFF).

Alternativa productiva (si se prefiere seguir en el worker)

Comandos útiles