gnome onda 3: json-glib SELLADO + 3 recetas reusadas de KDE + veredicto de gnome-session

json-glib (b3:1b90c876): la dep más compartida de la cima — la piden mutter, gnome-shell
y gnome-session. Feature-minimal, static, sin introspección (con la condición de vuelta
escrita en la receta: si gnome-shell pide Json-1.0.typelib desde JS, pasa a isla dinámica).

Reusadas de incoming-kde SIN construir nada — fichero idéntico ⇒ mismo ArtifactHash ⇒
cache-hit del artefacto que KDE ya selló: libdisplay-info (b3:260f0519) + su dep hwdata,
y lcms2 (b3:07fbf8a1). Tres de la frontera de mutter cerradas a coste cero.

pipewire NO se trajo, y el intento dejó la lección: al resolverse contra la glib de la cola
GNOME cambia de hash (deja de ser cache-hit) y arrastra pulseaudio/libsndfile/alsa-lib a
esta cola. mutter tiene -Dremote_desktop=false, que mata pipewire Y libei de un saque.
El guardián del barrido existe justamente para no pisar variantes homónimas.

gnome-session: medido y APARCADO con diagnóstico en la propia receta. No le falta un
parche: exige gtk+-3.0, gnome-desktop-3.0 (la legacy que apagamos) y libsystemd
required:true sin perilla. Asume systemd y GTK3, los dos ausentes por decisión. No bloquea
el escritorio: gnome-shell no depende de gnome-session — sólo gdm. El camino vivo es
mutter → gnome-shell.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-27 19:24:53 -04:00
co-authored by Claude Opus 5
parent f857843a21
commit 8bc349afa9
6 changed files with 225 additions and 19 deletions
+95 -15
View File
@@ -1,16 +1,16 @@
{
"schema": "hammer-build-state/1",
"totals": {
"recipes": 796,
"nodes": 796,
"sealed": 786,
"recipes": 800,
"nodes": 800,
"sealed": 790,
"never": 8,
"debt": 2
},
"by_class": {
"c": 163,
"c": 166,
"go": 362,
"gui": 39,
"gui": 40,
"kernel": 6,
"rust": 226
},
@@ -26,7 +26,7 @@
"debt": 2
},
"incoming-gnome": {
"sealed": 27,
"sealed": 31,
"never": 6
}
},
@@ -54,7 +54,7 @@
"debt": 2
}
},
"sin_perfil": 649,
"sin_perfil": 653,
"orphan_deps": [],
"topo_ok": true,
"nodes": {
@@ -4656,7 +4656,7 @@
"perfiles": [
"escritorio-gnome"
],
"dependientes_total": 17
"dependientes_total": 18
},
"glib-introspected": {
"iname": "glib-introspected",
@@ -6545,6 +6545,23 @@
"perfiles": [],
"dependientes_total": 0
},
"hwdata": {
"iname": "hwdata",
"version": "0.393",
"link": "dynamic",
"compiler": "gcc",
"deps": [
"pkgconf"
],
"cls": "c",
"queue": "incoming-gnome",
"hash": "b3:bdc36cf9a118a0eb505966cd5132552e51e420c12186694907898fb44873684a",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [],
"dependientes_total": 1
},
"hyperfine": {
"iname": "hyperfine",
"version": "1.20.0",
@@ -6878,6 +6895,30 @@
"perfiles": [],
"dependientes_total": 0
},
"json-glib": {
"iname": "json-glib",
"version": "1.10.8",
"link": "static",
"compiler": "zig-cc",
"deps": [
"meson",
"samurai",
"python3",
"pkgconf",
"glib",
"libffi",
"pcre2",
"zlib"
],
"cls": "gui",
"queue": "incoming-gnome",
"hash": "b3:1b90c87650b775ad60049f7c3c20c9bf4d56f230ca43eec411ce69762d661c9d",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [],
"dependientes_total": 0
},
"jsonnet-bundler": {
"iname": "jsonnet-bundler",
"version": "0.6.0",
@@ -7754,6 +7795,24 @@
"perfiles": [],
"dependientes_total": 0
},
"lcms2": {
"iname": "lcms2",
"version": "2.16",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [
"pkgconf",
"python3"
],
"cls": "c",
"queue": "incoming-gnome",
"hash": "b3:07fbf8a1da5b346fe394bebe512cbc0e8acc9b509c3614b462329fe70b1a73b8",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [],
"dependientes_total": 0
},
"lefthook": {
"iname": "lefthook",
"version": "2.1.5",
@@ -7956,6 +8015,27 @@
],
"dependientes_total": 3
},
"libdisplay-info": {
"iname": "libdisplay-info",
"version": "0.2.0",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [
"meson",
"samurai",
"python3",
"pkgconf",
"hwdata"
],
"cls": "c",
"queue": "incoming-gnome",
"hash": "b3:260f0519727bcf33ce69d05644929558eafb7fae78730e5201345629a3dff42c",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [],
"dependientes_total": 0
},
"libdrm": {
"iname": "libdrm",
"version": "2.4.134",
@@ -8062,7 +8142,7 @@
"escritorio-kde",
"escritorio-mirada"
],
"dependientes_total": 66
"dependientes_total": 67
},
"libgcrypt": {
"iname": "libgcrypt",
@@ -9202,7 +9282,7 @@
"escritorio-kde",
"escritorio-mirada"
],
"dependientes_total": 78
"dependientes_total": 80
},
"micro": {
"iname": "micro",
@@ -10482,7 +10562,7 @@
"escritorio-gnome",
"escritorio-kde"
],
"dependientes_total": 52
"dependientes_total": 53
},
"peco": {
"iname": "peco",
@@ -10665,7 +10745,7 @@
"escritorio-kde",
"escritorio-mirada"
],
"dependientes_total": 291
"dependientes_total": 295
},
"plow": {
"iname": "plow",
@@ -10976,7 +11056,7 @@
"escritorio-kde",
"escritorio-mirada"
],
"dependientes_total": 235
"dependientes_total": 238
},
"qrcp": {
"iname": "qrcp",
@@ -11522,7 +11602,7 @@
"escritorio-kde",
"escritorio-mirada"
],
"dependientes_total": 210
"dependientes_total": 212
},
"sassc": {
"iname": "sassc",
@@ -14277,7 +14357,7 @@
"escritorio-kde",
"escritorio-mirada"
],
"dependientes_total": 90
"dependientes_total": 91
},
"zlib-ng": {
"iname": "zlib-ng",
+25 -4
View File
@@ -22,9 +22,30 @@ configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/s
compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
# gtk4 (+ su cierre .pc) para el diálogo de fallo; glib para gio. login1 = arje-logind-compat (NO frontera).
# FRONTERA: json-glib sin receta — REQUERIDA (perfil de sesión).
# FRONTERA: gnome-desktop → recipes/incoming-gnome/gnome-desktop.toml YA existe; añadir cuando el grafo lo tome.
# FRONTERA: gsettings-desktop-schemas → ya en incoming-gnome/ (runtime).
# ⛔ MURO ESTRUCTURAL, medido el 2026-07-27 — esta receta NO puede sellar tal cual, y no por un
# parche que falte. El primer intento murió en «Unknown option: systemd»: el comentario de arriba
# suponía perillas que gnome-session 48.0 no tiene. Leyendo su meson.build, lo que pide es peor que
# un nombre de opción (líneas del tarball 48.0):
#
# :86 gtk_dep = dependency('gtk+-3.0', '>= 3.22') INCONDICIONAL — es GTK **3**.
# :97 dependency('gnome-desktop-3.0', '>= 3.34.2') la librería LEGACY, la que gnome-desktop
# apaga a propósito con legacy_library=false
# («SIN libgnome-desktop-3/gtk3»).
# :124 dependency('libsystemd', required: true) INCONDICIONAL, sin opción que lo apague.
# (el -Dsystemduserunitdir= sólo esquiva el
# dependency('systemd') de :119, no éste.)
#
# O sea: gnome-session 48 asume systemd Y GTK3. Esta distro no tiene ninguno de los dos por decisión
# —arje-zero es PID1, arje-logind-compat da login1, y el frente es Wayland-only con X11 al tacho—
# así que sellarla exigiría meter GTK3 entero + un shim de libsystemd. Eso no es feature-minimal:
# es traer un toolkit muerto para un gestor de sesión que el escritorio no necesita.
#
# POR QUÉ NO BLOQUEA EL ESCRITORIO: gnome-shell NO depende de gnome-session (su cierre es
# mutter+gjs+gobject-introspection+gnome-desktop). El único que la pide es gdm. El camino vivo es
# mutter → gnome-shell, arrancado por arje como ya arranca mirada. gnome-session/gdm quedan
# APARCADAS con este diagnóstico, no en cola: es la decisión de alcance, escrita donde se busca.
#
# json-glib: frontera CERRADA (b3:1b90c876, en esta cola). No era el problema.
# gsettings-desktop-schemas / gnome-desktop: ya en incoming-gnome/ y selladas.
[deps]
build = ["meson", "samurai", "python3", "pkgconf", "gsettings-desktop-schemas", "gnome-desktop", "gtk4", "glib", "cairo", "pango", "graphene", "libepoxy", "wayland", "wayland-protocols", "libdrm", "harfbuzz", "fribidi", "libpng", "pixman", "freetype", "expat", "libffi", "pcre2", "zlib", "gdk-pixbuf", "libjpeg-turbo", "libtiff", "mesa", "fontconfig"]
+24
View File
@@ -0,0 +1,24 @@
# hwdata 0.393 — bases de datos de IDs de hardware (pnp.ids, pci.ids, usb.ids) + hwdata.pc. Sin código:
# sólo datos. Campaña KDE (ADR 0011): lo exige libdisplay-info en tiempo de build (dependency('hwdata')
# native → pkgdatadir/pnp.ids) y kwin como RUNTIME (find_package(hwdata) TYPE RUNTIME, tabla PNP de EDID).
# `configure` es un script shell propio (no autoconf); no compila nada.
name = "hwdata"
version = "0.393"
[source]
tarball = "https://github.com/vcrhonek/hwdata/archive/refs/tags/v0.393.tar.gz"
sha256 = "322add86944680e99d04468d49de180a7ce0c77fb406f7abde8ab14f2d161051"
[build]
compiler = "gcc"
target = "x86_64-linux-musl"
link = "dynamic"
flags = []
[build.phases]
configure = './configure --prefix=/usr --libdir=/usr/lib --datadir=/usr/share'
compile = 'true'
install = 'make install DESTDIR=/out'
[deps]
build = ["pkgconf"]
+31
View File
@@ -0,0 +1,31 @@
# json-glib 1.10.8 — parser/serializador JSON con el modelo de objetos de GLib (JsonNode/JsonObject).
# La dep MÁS COMPARTIDA de la frontera GNOME: la exigen mutter (config de monitores), gnome-shell y
# gnome-session. Por eso es el primer ladrillo de la onda 3 después de gnome-desktop. meson static.
# sha256 REAL de `curl -sL <url> | sha256sum`.
#
# Feature-minimal: introspection=false, docs/man/tests off, nls=false (las traducciones piden msgfmt
# completo y el corpus sólo tiene gettext-tiny — mismo motivo que iso-codes).
#
# CUÁNDO SE DA VUELTA introspection: si gnome-shell resulta pedir Json-1.0.typelib desde JS
# (`imports.gi.Json`), esta receta tiene que pasar a la ISLA DINÁMICA como glib/gtk4 — el typelib
# exige un .so real que gjs pueda dlopen(). Mientras sólo la enlace mutter en C, static alcanza.
name = "json-glib"
version = "1.10.8"
[source]
tarball = "https://download.gnome.org/sources/json-glib/1.10/json-glib-1.10.8.tar.xz"
sha256 = "55c5c141a564245b8f8fbe7698663c87a45a7333c2a2c56f06f811ab73b212dd"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "static"
[build.phases]
configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload --prefer-static -Ddefault_library=static -Dintrospection=disabled -Ddocumentation=disabled -Dman=false -Dtests=false -Dconformance=false -Dnls=disabled -Dinstalled_tests=false -Dc_args=-Wno-error=date-time"
compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
# glib aporta gobject/gio + su cierre .pc (static ⇒ pkg-config resuelve Requires.private).
[deps]
build = ["meson", "samurai", "python3", "pkgconf", "glib", "libffi", "pcre2", "zlib"]
+26
View File
@@ -0,0 +1,26 @@
# lcms2 2.16 — Little-CMS, motor de gestión de color (liblcms2.so). Campaña KDE (ADR 0011): sustrato de
# kwin (find_package(lcms2) TYPE REQUIRED, color management del compositor). Autotools sobre zig-cc.
# Sólo el core: --without-jpeg/--without-tiff (esas deps sólo las usan los ejemplos, no la lib).
name = "lcms2"
version = "2.16"
[source]
tarball = "https://github.com/mm2/Little-CMS/releases/download/lcms2.16/lcms2-2.16.tar.gz"
sha256 = "d873d34ad8b9b4cea010631f1a6228d2087475e4dc5e763eb81acc23d9d45a51"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
zig_version = "0.13.0"
[build.phases]
configure = '''
PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig \
./configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-static --without-jpeg --without-tiff
'''
compile = "make -j\"$(nproc)\""
install = "make install DESTDIR=/out && find /out -name '*.la' -delete"
[deps]
build = ["pkgconf", "python3"]
@@ -0,0 +1,24 @@
# libdisplay-info 0.2.0 — parseo de EDID/DisplayID (libdisplay-info.so). Campaña KDE (ADR 0011): sustrato
# de kwin (pkg_check_modules(libdisplay-info>=0.2.0) REQUIRED, lectura de EDID de los monitores). Meson.
# En build necesita pnp.ids: usa dependency('hwdata') native → si no está, cae a /usr/share/hwdata/pnp.ids
# y meson `files()` EXIGE que exista ⇒ hwdata es dep de build. Sin di-edid-decode (tool) para evitar más deps.
name = "libdisplay-info"
version = "0.2.0"
[source]
tarball = "https://gitlab.freedesktop.org/emersion/libdisplay-info/-/archive/0.2.0/libdisplay-info-0.2.0.tar.gz"
sha256 = "f7331fcaf5527251b84c8fb84238d06cd2f458422ce950c80e86c72927aa8c2b"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
zig_version = "0.13.0"
[build.phases]
configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig meson setup output --prefix=/usr --buildtype=release"
compile = "ninja -C output"
install = "DESTDIR=/out ninja -C output install"
[deps]
build = ["meson", "samurai", "python3", "pkgconf", "hwdata"]