cosmic: hidratar desde el perfil — su lista a mano se saltaba 17 declarados

Misma divergencia que se encontró ayer en GNOME, medida igual: `hydrate-cosmic.sh` nombra 25 raíces
escritas a mano dentro del script, el perfil `escritorio-cosmic` declara 43, y **17 paquetes
declarados no llegaban al rootfs**:

  adwaita-cursors · xkeyboard-config · bash · atuq (el navegador) · mpv · swayimg
  zathura + zathura-pdf-poppler · dejavu-fonts y dejavu-fonts-nerd · libnotify
  desktop-file-utils · hicolor-icon-theme · y las cinco *-shared de runtime

⚠ EL PRIMERO NO ES UNA COINCIDENCIA: `adwaita-cursors` es EXACTAMENTE el ejemplo con el que la
cabecera de `scripts/hydrate-profile.py` advirtió de esto el 2026-09-04 — «se añadió a las raíces de
cosmic y sway, y los scripts de hidratación, que no la conocen, habrían seguido armando un rootfs
sin cursores». No era hipotético: seguía pasando hoy, cinco días después. Y `xkeyboard-config` es la
cicatriz de sway repitiéndose: sin él el compositor arranca sin mapa de teclado.

Y AL REVÉS NO SE PIERDE NADA, que es lo que hace el cambio barato y lo separa del caso GNOME (donde
primero hubo que mover 11 raíces de runtime al perfil): de las 25 del script, la única que el perfil
no declara es `zlib-shared`, y la clausura del perfil la alcanza igual. O sea que el motivo que
justificaba la lista a mano —los componentes que `cosmic-session` lanza por PATH, que ningún grafo
de build ve— YA ESTÁ RESUELTO en el perfil, que los declara todos como raíces. La lista quedó
redundante sin que nadie lo notara.

VERIFICADO HIDRATANDO, no leyendo: `hydrate-profile.py escritorio-cosmic` proyecta 162/162 nodos
(24166 ficheros, 4,8 G) y ahí están los 17. (Ojo con la sonda: `bash` instala en `/bin/bash`, no en
`/usr/bin` — mi primer chequeo lo dio por ausente y era el chequeo el que miraba mal.)

⚠ Y UN DATO QUE MATIZA EL DIAGNÓSTICO Y LO EMPEORA. El rootfs que hay en disco
(`escritorios/cosmic-rootfs`, 3,9 G) SÍ tiene cursores, xkb y mpv — o sea que no se armó con la
lista por defecto, alguien le pasó raíces a mano. Y aun así le falta `atuq`. El problema real no es
que la lista esté mal: es que **lo que llega a la imagen depende de lo que alguien se acuerde de
teclear**. Derivarlo del perfil quita esa variable.

El script se deja porque su cabecera documenta por qué COSMIC necesita raíces de runtime explícitas
—sigue siendo cierto sobre la naturaleza de cosmic-session—; lo que ya no es cierto es que su lista
sea la verdad. Los dos armadores de imagen (qemu y metal) ahora apuntan a `hydrate-profile.py`.

── Y de paso, una nota vieja de targets.toml corregida ────────────────────────────────────────────
Decía que el perfil de KDE «son 13 raíces de ARRANQUE EN METAL, no la imagen completa», con
konsole/kate/dolphin y otras 19 apps selladas y sin declarar. Ya no: hoy son 48 raíces, con esas
apps, las fuentes y las *-shared declaradas — el frente KDE lo reordenó y la nota quedó atrás.
De su cola quedan 8 recetas fuera del perfil y son las que corresponde: libICE, libSM, libXtst y los
cinco eslabones huérfanos de xwayland desde que se retiró su receta.
Lo que a KDE le queda es OTRO problema, también medido hoy: su imagen no se hidrata del perfil sino
de un rootfs YA ARMADO (8,4 G) que nadie re-deriva. De las 18 hojas del perfil están 15 — faltan
`obs-studio` y `atuq`, justo las dos añadidas después de esa hidratación. Re-hidratarlo es decisión
del frente KDE.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LCt3ettR4Z7b6wPCBmbvEV
This commit is contained in:
Sergio
2026-09-09 20:54:51 +00:00
co-authored by Claude Opus 5
parent 6735a75d40
commit e1d58cc583
4 changed files with 42 additions and 8 deletions
+15 -5
View File
@@ -366,11 +366,21 @@ paquetes = [
# sobre `xdg-shell` (no pide protocolos de wlroots), así que corre bajo mutter igual que bajo sway;
# su único NEEDED es `libc.so`. helix es TUI y corre dentro de la terminal.
#
# KDE queda fuera de este arreglo A PROPÓSITO, y es un hallazgo aparte: tiene `konsole`, `kate` y
# `dolphin` SELLADAS en su cola y sin declarar, más otras 19 apps y hasta `plasma-desktop`,
# `plasma-nm`, `plasma-pa` y `powerdevil`. Su perfil son 13 raíces de ARRANQUE EN METAL, no la
# imagen de escritorio completa (ésa se hidrató aparte, por hash). Reordenar eso es decisión del
# frente KDE, no de éste.
# ⚠ ESTO ESTABA VIEJO, corregido el 2026-09-09. Decía que KDE quedaba fuera del arreglo y que «su
# perfil son 13 raíces de ARRANQUE EN METAL, no la imagen completa», con konsole/kate/dolphin y
# otras 19 apps selladas y sin declarar. Ya no: el frente KDE lo reordenó y hoy su perfil son **48
# raíces** con konsole, dolphin, kate, okular, ark, spectacle, gwenview, kcalc, las fuentes y las
# `*-shared` de runtime declaradas. De su cola quedan 8 recetas fuera del perfil, y son las que
# corresponde: libICE, libSM, libXtst y los cinco eslabones que sólo servían a xwayland
# (libfontenc, libXfont2, libxkbfile, libxshmfence, xkbcomp), huérfanos desde que la receta se
# retiró.
#
# Lo que a KDE le queda no es este arreglo sino OTRO, medido el mismo día: su imagen no se hidrata
# desde el perfil sino de un rootfs YA ARMADO (`kde-qemu-rootfs`, 8,4 G) que nadie re-deriva, así
# que se queda atrás a medida que el perfil crece. Comprobado contra ese rootfs: de las 18 hojas
# que el perfil declara están 15 — faltan `obs-studio` y `atuq`, justo las dos que se añadieron
# después de aquella hidratación. Re-hidratarlo con `scripts/hydrate-profile.py escritorio-kde`
# es decisión del frente KDE, no de éste.
"foot", "helix",
# ── FUENTES ──────────────────────────────────────────────────────────────────────────────────
# ⚠ Añadida el 2026-09-03 porque este perfil no traía NI UN FICHERO DE FUENTE. Medido recorriendo
+22
View File
@@ -13,6 +13,28 @@
# dep de build de ningún otro, así que el grafo no los ve. La lista autoritativa es
# `cosmic-session/src/main.rs`, no una intuición sobre qué hace falta.
#
# ⚠ SUPERADO POR `scripts/hydrate-profile.py` (2026-09-09). Usar:
#
# scripts/hydrate-profile.py escritorio-cosmic --into <dir>
#
# POR QUÉ, y está MEDIDO. La lista de raíces de abajo es una segunda fuente de verdad frente a
# `docs/state/targets.toml`, y había divergido: el script nombra 25 raíces, el perfil declara 43, y
# **17 paquetes declarados NO llegaban al rootfs**. Entre ellos `adwaita-cursors` —que es
# EXACTAMENTE el ejemplo con el que la cabecera de `hydrate-profile.py` advirtió del problema el
# 2026-09-04: «habrían seguido armando un rootfs sin cursores»—, `xkeyboard-config` (sin él no hay
# mapa de teclado, la cicatriz de sway), `bash`, el navegador `atuq`, `mpv`, `swayimg`, `zathura` y
# su plugin, las dos `dejavu-fonts`, `libnotify`, `desktop-file-utils`, `hicolor-icon-theme` y las
# cinco `*-shared` de runtime.
#
# Y al revés no se pierde NADA, que es lo que hace el cambio barato: de las 25 raíces del script, la
# única que el perfil no declara es `zlib-shared`, y la clausura del perfil la alcanza igual. O sea
# que el motivo que justificaba la lista a mano —el párrafo de abajo: los componentes que
# `cosmic-session` lanza por PATH y el grafo no ve— **ya está resuelto en el perfil**, que los
# declara a todos como raíces. La lista quedó redundante sin que nadie lo notara.
#
# El script se deja porque su cabecera documenta ese porqué, que sigue siendo cierto sobre la
# NATURALEZA de COSMIC; lo que ya no es cierto es que su lista sea la verdad.
#
# Uso: scripts/cosmic/hydrate-cosmic.sh [receta.toml ...]
# Env: RFS (def work/cosmic-rootfs) destino
# STORE (def ./store)
+1 -1
View File
@@ -47,7 +47,7 @@ KERNEL="${KERNEL:-$(ls -dt store/*-linux-metal-dual/boot/bzImage 2>/dev/null | h
MERGED="${MERGED:-work/cosmic-metal-rootfs}"
IMG="${IMG:-work/hammer-cosmic-metal.img}"
for x in "$BASE" "$COSMIC"; do [ -d "$x" ] || { echo "falta $x (corré scripts/cosmic/hydrate-cosmic.sh)" >&2; exit 1; }; done
for x in "$BASE" "$COSMIC"; do [ -d "$x" ] || { echo "falta $x (corré scripts/hydrate-profile.py escritorio-cosmic --into $COSMIC)" >&2; exit 1; }; done
[ -n "$KERNEL" ] && [ -r "$KERNEL" ] || { echo "falta linux-metal-dual (hammer build recipes/linux-metal-dual.toml)" >&2; exit 1; }
echo "==> fundiendo rootfs por hardlinks (base metal + COSMIC)"
+4 -2
View File
@@ -4,7 +4,9 @@
# la base metal, la inyección de mesa-llvmpipe/LLVM/musl y el truco del console-getty.
#
# work/metal-rootfs base: arje-zero PID1 + busybox + kernel(EFI-stub) + firmware
# work/cosmic-rootfs cierre de COSMIC (lo arma scripts/cosmic/hydrate-cosmic.sh)
# work/cosmic-rootfs cierre de COSMIC (lo arma `scripts/hydrate-profile.py escritorio-cosmic`;
# hydrate-cosmic.sh quedó SUPERADO — su lista a mano se saltaba 17 paquetes
# que el perfil declara, entre ellos adwaita-cursors y xkeyboard-config)
# + store/*-mesa-llvmpipe GBM/EGL de software (el cierre trae mesa con iris_dri, que es Intel real)
# + store/*-llvm18 libLLVM que llvmpipe JIT-linkea
# → work/cosmic-qemu-rootfs (hardlinks) → work/hammer-cosmic-qemu.img
@@ -21,7 +23,7 @@ MERGED="${MERGED:-work/cosmic-qemu-rootfs}"
IMG="${IMG:-work/hammer-cosmic-qemu.img}"
[ -d "$BASE" ] || { echo "falta $BASE" >&2; exit 1; }
[ -d "$COSMIC" ] || { echo "falta $COSMIC — corré scripts/cosmic/hydrate-cosmic.sh" >&2; exit 1; }
[ -d "$COSMIC" ] || { echo "falta $COSMIC — corré scripts/hydrate-profile.py escritorio-cosmic --into $COSMIC" >&2; exit 1; }
[ -n "$MESA" ] && [ -d "$MESA" ] || { echo "falta mesa-llvmpipe en store/" >&2; exit 1; }
echo "==> fundiendo rootfs por hardlinks (base metal + cierre COSMIC)"