tawasuyu

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 1471Shell 174Rust 105Markdown 943556 Definitions

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>

8bc349afa994288c0e0bcd6649fb9f3d508e2a1e · by sergio · (2 months ago) · parent f857843a2 · browse the tree at this commit

Semantic delta

No definition changed: this change is text, documentation or data.

6 files · +225 −19

diff --git a/docs/state/build-state-gnome.json b/docs/state/build-state-gnome.json
index c65d4889..ec341635 100644
--- a/docs/state/build-state-gnome.json
+++ b/docs/state/build-state-gnome.json
@@ -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",
diff --git a/recipes/incoming-gnome/gnome-session.toml b/recipes/incoming-gnome/gnome-session.toml
index 2fc4edb5..5f57e246 100644
--- a/recipes/incoming-gnome/gnome-session.toml
+++ b/recipes/incoming-gnome/gnome-session.toml
@@ -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"]
diff --git a/recipes/incoming-gnome/hwdata.toml b/recipes/incoming-gnome/hwdata.toml
new file mode 100644
index 00000000..e8cc8ced
--- /dev/null
+++ b/recipes/incoming-gnome/hwdata.toml
@@ -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"]
diff --git a/recipes/incoming-gnome/json-glib.toml b/recipes/incoming-gnome/json-glib.toml
new file mode 100644
index 00000000..44812cf1
--- /dev/null
+++ b/recipes/incoming-gnome/json-glib.toml
@@ -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"]
diff --git a/recipes/incoming-gnome/lcms2.toml b/recipes/incoming-gnome/lcms2.toml
new file mode 100644
index 00000000..ccec5fb8
--- /dev/null
+++ b/recipes/incoming-gnome/lcms2.toml
@@ -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"]
diff --git a/recipes/incoming-gnome/libdisplay-info.toml b/recipes/incoming-gnome/libdisplay-info.toml
new file mode 100644
index 00000000..4b39558a
--- /dev/null
+++ b/recipes/incoming-gnome/libdisplay-info.toml
@@ -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"]