gnome onda-1: cola aislada incoming-gnome-onda1 para el worker
Las 3 raíces de la onda 1 (gsettings-desktop-schemas, gobject-introspection, gnome-desktop) copiadas a una cola propia + añadida al QUEUES del worker-loop. Aislar evita que el worker dispare rebuilds de spidermonkey/mutter (onda 2/3). El cierre real de RECETAS de las 3 es 39 nodos, 0 en incoming-kde: el "gap del resolver" que temía era de seed-edges (.pc cairo→libX11), NO de deps declaradas. El espinazo corpus (38 nodos: gtk4/cairo/pango/gdk-pixbuf en recipes/) está 100% sellado ⇒ el worker cachea todo e sólo construye las 3. Hashes byte-idénticos a los sellos de incoming-gnome (base_dir no entra al hash). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Semantic delta
No definition changed: this change is text, documentation or data.
4 files · +106 −1
diff --git a/recipes/incoming-gnome-onda1/gnome-desktop.toml b/recipes/incoming-gnome-onda1/gnome-desktop.toml
new file mode 100644
index 00000000..bde74a4e
--- /dev/null
+++ b/recipes/incoming-gnome-onda1/gnome-desktop.toml
@@ -0,0 +1,43 @@
+# gnome-desktop (libgnome-desktop) 44.5 — utilidades compartidas del escritorio GNOME:
+# info de monitores (GnomeRR/BG), thumbnails (thumbnailer sandboxeado con bwrap+seccomp),
+# idioma/locale (GnomeLanguage vía iso-codes). meson static.
+#
+# OJO VERSION: no existe "gnome-desktop 48". Upstream dejó de cortar releases estables tras 44.5
+# y saltó directo a 51.alpha (verificado en download.gnome.org y en los tags de gitlab.gnome.org:
+# ...44.3, 44.4, 44.5, 51.alpha — sin 45..50). Las distros que envían GNOME 45/46/47/48 shippean
+# esta misma 44.5 porque es la ÚLTIMA estable de la librería compartida. Por eso 44.5 es la versión
+# correcta para un escritorio GNOME 48. sha256 REAL de `curl -sL <url> | sha256sum`.
+#
+# Feature-minimal: build_gtk4=true, legacy_library=false (SIN libgnome-desktop-3/gtk3 — no está en
+# el corpus), introspection/docs/debug_tools/installed_tests OFF, udev/systemd disabled (Wayland-only,
+# el logind/udev lo cubre arje). backend GL vía gtk4 (ya wayland-only, sin X11).
+name = "gnome-desktop"
+version = "44.5"
+
+[source]
+tarball = "https://download.gnome.org/sources/gnome-desktop/44/gnome-desktop-44.5.tar.xz"
+sha256 = "20e0995a6e3a03e8c1026c5a27bc3f45e69ffcc392ad743dcab6107a541d232f"
+
+[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 -Dbuild_gtk4=true -Dlegacy_library=false -Dintrospection=false -Ddesktop_docs=false -Ddebug_tools=false -Dgtk_doc=false -Dinstalled_tests=false -Dudev=disabled -Dsystemd=disabled -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"
+
+# deps = tools meson + gtk4 y su cierre .pc transitivo completo (static ⇒ pkg-config resuelve
+# Requires.private). libxkbcommon aporta xkbregistry (dep opcional, required:false en meson.build).
+#
+# FRONTERA: gsettings-desktop-schemas sin receta — REQUERIDA (schemas_dep, sin opción que la apague).
+# La autoran otros agentes hacia recipes/incoming-gnome/; añadir a [deps].build cuando aterrice.
+# FRONTERA: iso-codes sin receta — REQUERIDA (GnomeLanguage lee su prefix vía pkg-config).
+# FRONTERA: xkeyboard-config sin receta alcanzable — REQUERIDA (xkb_config_dep, lee xkb_base). Existe en
+# recipes/incoming-kde/ pero el resolver sólo mira incoming-gnome/ + recipes/ (no incoming-kde/):
+# promover a recipes/ o duplicar a incoming-gnome/ para que resuelva.
+# FRONTERA: libseccomp sin receta — REQUERIDA INCONDICIONAL en linux (sandbox bwrap+seccomp del
+# thumbnailer; no hay opción meson para desactivarla).
+[deps]
+build = ["meson", "samurai", "python3", "pkgconf", "gtk4", "glib", "gdk-pixbuf", "fontconfig", "libxkbcommon", "cairo", "pango", "graphene", "libepoxy", "wayland", "wayland-protocols", "libdrm", "harfbuzz", "fribidi", "libpng", "pixman", "freetype", "expat", "libffi", "pcre2", "zlib", "libjpeg-turbo", "libtiff", "mesa"]
diff --git a/recipes/incoming-gnome-onda1/gobject-introspection.toml b/recipes/incoming-gnome-onda1/gobject-introspection.toml
new file mode 100644
index 00000000..17314f23
--- /dev/null
+++ b/recipes/incoming-gnome-onda1/gobject-introspection.toml
@@ -0,0 +1,36 @@
+# gobject-introspection 1.84.0 — el escáner de metadata de GNOME (g-ir-scanner + typelibs).
+# Es dep de casi toda lib GNOME (gtk4/libadwaita/etc. lo declaran cuando -Dintrospection=enabled).
+# meson static, backend feature-minimal: doctool/gtk_doc/tests off, PERO build_introspection_data=true
+# (los .gir/.typelib SON su razón de ser).
+#
+# BORRADOR PARA EL MAPA — dificultad conocida: g-ir-scanner NO es puro metadata. Para cada lib
+# COMPILA y EJECUTA un pequeño binario "dumper" enlazado contra el target para volcar los GTypes en
+# runtime. En un lab cross/hermetico static-musl esto es el palo largo del stack GNOME:
+# 1) ejecutar un binario del target dentro del sandbox (aquí target==host x86_64-linux-musl, así que
+# NO hay emulación — a favor nuestro; el escenario cross real necesitaría qemu/exe_wrapper).
+# 2) el dumper enlaza estático contra glib+libffi; el scanner invoca al compilador (CC/zig-cc) y al
+# linker en runtime ⇒ necesita el toolchain + el cierre .pc COMPLETO visible en PKG_CONFIG_PATH.
+# 3) suele pelear con -static / musl (símbolos de introspección, gi-dump). PROBABLEMENTE NO selle a
+# la primera — dejar como frontera medida, no como sellado asumido.
+name = "gobject-introspection"
+version = "1.84.0"
+
+[source]
+tarball = "https://download.gnome.org/sources/gobject-introspection/1.84/gobject-introspection-1.84.0.tar.xz"
+sha256 = "945b57da7ec262e5c266b89e091d14be800cc424277d82a02872b7d794a84779"
+
+[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 -Ddoctool=disabled -Dgtk_doc=false -Dtests=false -Dbuild_introspection_data=true -Dcairo=disabled -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"
+
+[deps]
+# glib + su cierre .pc estático (pkgconf resuelve Requires.private: pcre2, zlib, libffi).
+# flex/bison: el parser de anotaciones del scanner. libffi: además lo enlaza el dumper.
+build = ["meson", "samurai", "python3", "pkgconf", "flex", "bison", "glib", "libffi", "pcre2", "zlib"]
+# FRONTERA: cairo omitida a propósito (-Dcairo=disabled) — feature-minimal, evita el typelib Cairo-1.0.
diff --git a/recipes/incoming-gnome-onda1/gsettings-desktop-schemas.toml b/recipes/incoming-gnome-onda1/gsettings-desktop-schemas.toml
new file mode 100644
index 00000000..14c856f8
--- /dev/null
+++ b/recipes/incoming-gnome-onda1/gsettings-desktop-schemas.toml
@@ -0,0 +1,26 @@
+# gsettings-desktop-schemas 48.0 — los schemas GSettings compartidos de GNOME (org.gnome.desktop.*):
+# fondo, interface, wm, a11y, sound… Casi todo el escritorio los lee en runtime. Receta LIVIANA:
+# compila XML de schemas + una libcita de enums; meson static. sha256 REAL de curl|sha256sum.
+#
+# Feature-minimal: introspection=false (el typelib no lo exige el runtime de schemas; si mutter/gjs
+# lo pidieran vía typelib, se re-activa). Sin docs/tests.
+name = "gsettings-desktop-schemas"
+version = "48.0"
+
+[source]
+tarball = "https://download.gnome.org/sources/gsettings-desktop-schemas/48/gsettings-desktop-schemas-48.0.tar.xz"
+sha256 = "e68f155813bf18f865a8b2c8e9d473588b6ccadcafbb666ab788857c6c2d1bd3"
+
+[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=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 gio (compila los schemas) + su cierre .pc. gobject-introspection sólo si introspection=true.
+[deps]
+build = ["meson", "samurai", "python3", "pkgconf", "glib", "libffi", "pcre2", "zlib"]
diff --git a/scripts/farm/farm-worker-loop.sh b/scripts/farm/farm-worker-loop.sh
index 04c4b957..940a7ef2 100755
--- a/scripts/farm/farm-worker-loop.sh
+++ b/scripts/farm/farm-worker-loop.sh
@@ -86,7 +86,7 @@ DISK_HIGH="${DISK_HIGH:-82}"
# aparcadas con diagnóstico, p.ej. git con muro en libgit.a) NO se muele — es un subdir a propósito.
# incoming-clib: libs C (toolkit/foundational) que el worker SELLA pero el cron de cosecha-go IGNORA
# (son build-deps, se usan vía catálogo; no tienen binario que el gate Go pueda smoke-testear).
-QUEUES="${QUEUES:-recipes/incoming recipes/incoming-go recipes/incoming-clib recipes/incoming-kde}"
+QUEUES="${QUEUES:-recipes/incoming recipes/incoming-go recipes/incoming-clib recipes/incoming-kde recipes/incoming-gnome-onda1}"
# REBUILD DEL BINARIO AL ARRANCAR (2026-07-18): el hammer horneado en la imagen golden ENVEJECE.
# Caso real que costó una noche de KDE: la golden del 29-jun traía un hammer sin el fix del overlay