Verificando que las extensiones de la tanda anterior llegaran al rootfs apareció algo bastante peor que lo que fui a buscar: **`scripts/gnome/hydrate-gnome.sh` no lee `targets.toml`**. Arma el rootfs desde una lista de 14 raíces escrita a mano dentro del propio script, y de las 28 raíces que el perfil declaraba sólo DOS coincidían. MEDIDO recorriendo la clausura de esa lista (123 recetas) contra la membresía del perfil: **21 paquetes declarados en `escritorio-gnome` no llegaban al rootfs hidratado**. No son accesorios — son las hojas, que es justo lo que un perfil declara porque no es dep de build de nadie: atuq (el navegador) · foot (la terminal) · helix (el editor) · mpv · swayimg (el visor) zathura + zathura-pdf-poppler (el lector de PDF) · dejavu-fonts y dejavu-fonts-nerd (las FUENTES) xdg-desktop-portal-gnome · libnotify · desktop-file-utils bzip2-shared, expat-shared, libffi-shared, ncurses-shared, xz-shared (las .so que se cazaron el 2026-09-03 recorriendo NEEDED, justamente para que el rootfs no resolviera contra el lab) y las cuatro de ayer: las tres extensiones y gnome-tweaks O sea que el trabajo de descubrir que la imagen no tenía terminal, ni editor, ni una sola fuente —con su análisis largo escrito en este mismo fichero— estaba DECLARADO y no llegaba. Y la divergencia iba en los dos sentidos: 11 raíces de RUNTIME vivían sólo dentro del script y el perfil no las conocía (accountsservice, geoclue, libgdm, libgweather, upower, librsvg, ibus, los dos gi-*-typelibs, gsd-schemas y wireplumber). Sin ellas el shell no arranca: las carga por `imports.gi.*`, que es invisible para la clausura de deps. ARREGLO: las 11 se mueven a `targets.toml` con la justificación que el script ya traía bien escrita, y el script queda marcado como SUPERADO por `scripts/hydrate-profile.py`, que hidrata desde el perfil — la única declaración que existe. Su propia cabecera ya advertía de este modo de fallo («DOS fuentes de verdad para lo mismo, y divergen sin que nada lo diga»); esto es esa advertencia cumpliéndose. El perfil pasa de 28 a 39 raíces y de 190 a 204 nodos, deuda 0. VERIFICADO HIDRATANDO DE VERDAD, no leyendo: `hydrate-profile.py escritorio-gnome` proyecta 210/210 nodos (27993 ficheros, 3,5 G) y ahí están las tres extensiones, `gnome-tweaks` con su módulo `gtweak`, y los tres gschemas en el directorio GLOBAL. Después se corrió el bloque nuevo del lanzador contra ESE árbol: enumeró las tres, escribió el override y `glib-compile-schemas` salió 0 con stderr vacío. ⚠ DOS COSAS QUE APRENDÍ MIDIENDO Y CONVIENE QUE ESTÉN DICHAS: 1. **El hub NO puede hidratar GNOME hoy.** `gjs`, `gnome-shell` y `spidermonkey` salen «no sellado» localmente. No es deriva ni un grafo mintiendo: sus hashes vigentes SÍ están en `work/farm-sellados.txt` — o sea sellados EN EL WORKER — y la cosecha baja el manifiesto y no el store, a propósito (bajarlo deshacía la poda). `build-state` los cuenta bien porque mira también el manifiesto; `hydrate-profile.py` mira sólo el disco local. Los dos tienen razón. 2. **EXDEV entre bind-mounts, otra vez.** Hidratar a `work/` o a `work/out` falla con «Invalid cross-device link» AUNQUE `work/out` esté en el mismo /dev/sdb que el store: son bind-mounts distintos y `linkat()` no cruza montajes. Hay que hidratar accediendo al store por su montaje raíz (`--store /mnt/cosecha/store --into /mnt/cosecha/escritorios/…`). El mensaje de error del script lo dice y aun así me costó dos intentos. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LCt3ettR4Z7b6wPCBmbvEV
71 lines
1.4 KiB
JSON
71 lines
1.4 KiB
JSON
{
|
|
"schema": "hammer-drenaje/1",
|
|
"nota": "DERIVADO del grafo de estado por scripts/drenar.py — no editar a mano.",
|
|
"perfiles": {
|
|
"base": {
|
|
"grafo": "docs/state/build-state.json",
|
|
"nodos": 58,
|
|
"en_deuda": 0,
|
|
"ondas": 0,
|
|
"profundidad": 0,
|
|
"construibles_ya": [],
|
|
"olas": []
|
|
},
|
|
"cli": {
|
|
"grafo": "docs/state/build-state.json",
|
|
"nodos": 81,
|
|
"en_deuda": 0,
|
|
"ondas": 0,
|
|
"profundidad": 0,
|
|
"construibles_ya": [],
|
|
"olas": []
|
|
},
|
|
"escritorio-cosmic": {
|
|
"grafo": "docs/state/build-state-cosmic.json",
|
|
"nodos": 160,
|
|
"en_deuda": 0,
|
|
"ondas": 0,
|
|
"profundidad": 0,
|
|
"construibles_ya": [],
|
|
"olas": []
|
|
},
|
|
"escritorio-gnome": {
|
|
"grafo": "docs/state/build-state-gnome.json",
|
|
"nodos": 204,
|
|
"en_deuda": 0,
|
|
"ondas": 0,
|
|
"profundidad": 0,
|
|
"construibles_ya": [],
|
|
"olas": []
|
|
},
|
|
"escritorio-kde": {
|
|
"grafo": "docs/state/build-state-kde.json",
|
|
"nodos": 299,
|
|
"en_deuda": 0,
|
|
"ondas": 0,
|
|
"profundidad": 0,
|
|
"construibles_ya": [],
|
|
"olas": []
|
|
},
|
|
"escritorio-mirada": {
|
|
"grafo": "docs/state/build-state.json",
|
|
"nodos": 41,
|
|
"en_deuda": 0,
|
|
"ondas": 0,
|
|
"profundidad": 0,
|
|
"construibles_ya": [],
|
|
"olas": []
|
|
},
|
|
"escritorio-sway": {
|
|
"grafo": "docs/state/build-state-wlr.json",
|
|
"nodos": 205,
|
|
"en_deuda": 0,
|
|
"ondas": 0,
|
|
"profundidad": 0,
|
|
"construibles_ya": [],
|
|
"olas": []
|
|
}
|
|
},
|
|
"sin_medir": []
|
|
}
|