kde: upower — la imagen declaraba powerdevil y no tenía batería
Primero de los dos huecos que dejaban a KDE POR DEBAJO de una instalación estándar. El perfil declaraba `powerdevil` —el gestor de energía de Plasma— pero no a `upower`, que es con quien powerdevil habla para leer la batería y aplicar perfiles. Medido: upower sólo existía en la cola de GNOME, y las colas no se ven entre sí (HERMANO→corpus, nunca de reojo). En un portátil eso es un escritorio sin indicador de batería, y el arranque no falla ⇒ no se ve hasta usarlo. Cuesta TRES recetas y no siete, y la diferencia es una perilla: `-Dintrospection=disabled`. GNOME la necesita ENCENDIDA porque su shell hace `imports.gi.UPowerGlib` desde JavaScript, o sea que carga el typelib. powerdevil NO: habla D-Bus con `org.freedesktop.UPower`. Apagarla saca de la frontera gobject-introspection, gi-foreign-girs, glib-introspected y py3-setuptools, que sólo viven en la cola de GNOME. ⚠ Y NO SE PROMUEVEN AL CORPUS, aunque era lo primero que intenté. Al mover `libgudev` allá su ArtifactHash CAMBIÓ (7404bc8d → 87ca5e73) y eso no es una mudanza: `glib` existe en las DOS colas y son recetas distintas, así que desde `incoming-gnome/` se construye contra la glib de GNOME y desde el corpus contra la del corpus. Promoverla habría arrastrado a GNOME a la glib del corpus — el cuadro de las «dos glib» que este repo ya pagó caro. Revertido y verificado que vuelve al hash de antes (7404bc8d), o sea GNOME intacto. Se COPIAN a la cola de KDE. `udev-pc` sí comparte artefacto (sus deps son sólo pkgconf ⇒ mismo hash desde las dos colas, un solo directorio en el store). `libgudev` es otro a propósito, por la glib. VERIFICADO sobre el artefacto sellado, no supuesto: trae `usr/libexec/upowerd`, el `org.freedesktop.UPower.service` de system-services y su política en `system.d` — que es exactamente lo que powerdevil necesita para que el demonio arranque por activación D-Bus. El perfil pasa a 49 raíces, 301/301 listo, deuda 0. Queda el segundo hueco: KDE no tiene backend de portal (ni `xdg-desktop-portal` en su cola), o sea que no hay compartir pantalla — y en particular la captura de obs-studio, que la imagen ya trae, no tiene con quién hablar en Plasma. Eso es más caro: pide traer el portal a la cola y ESCRIBIR `xdg-desktop-portal-kde`, que no existe como receta en ninguna cola. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LCt3ettR4Z7b6wPCBmbvEV
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
12 qillqakuna · +458 −159
- docs/state/build-state-cosmic.json +13 −13
- docs/state/build-state-gnome.json +12 −12
- docs/state/build-state-kde.json +104 −22
- docs/state/build-state-wlr.json +13 −13
- docs/state/build-state.json +9 −9
- docs/state/drenaje.json +1 −1
- docs/state/duplicados.json +53 −14
- docs/state/keystones.json +77 −75
- docs/state/targets.toml +10 −0
- recipes/incoming-kde/libgudev.toml +39 −0
- recipes/incoming-kde/udev-pc.toml +53 −0
- recipes/incoming-kde/upower.toml +74 −0
diff --git a/docs/state/build-state-cosmic.json b/docs/state/build-state-cosmic.json
index c5212aa1..d997333d 100644
--- a/docs/state/build-state-cosmic.json
+++ b/docs/state/build-state-cosmic.json
@@ -3600,7 +3600,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 10
+ "dependientes_total": 11
},
"ddh": {
"iname": "ddh",
@@ -4527,7 +4527,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 67
+ "dependientes_total": 68
},
"expat-shared": {
"iname": "expat-shared",
@@ -5549,7 +5549,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 107
+ "dependientes_total": 108
},
"gh": {
"iname": "gh",
@@ -6075,7 +6075,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 33
+ "dependientes_total": 35
},
"glib-shared": {
"iname": "glib-shared",
@@ -9785,7 +9785,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 113
+ "dependientes_total": 115
},
"libffi-shared": {
"iname": "libffi-shared",
@@ -10317,7 +10317,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 46
+ "dependientes_total": 48
},
"libunibreak": {
"iname": "libunibreak",
@@ -11402,7 +11402,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 125
+ "dependientes_total": 127
},
"micro": {
"iname": "micro",
@@ -12999,7 +12999,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 85
+ "dependientes_total": 87
},
"pcre2-shared": {
"iname": "pcre2-shared",
@@ -13261,7 +13261,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 397
+ "dependientes_total": 400
},
"plow": {
"iname": "plow",
@@ -13730,7 +13730,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 316
+ "dependientes_total": 318
},
"qrcp": {
"iname": "qrcp",
@@ -14345,7 +14345,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 268
+ "dependientes_total": 270
},
"sassc": {
"iname": "sassc",
@@ -17933,7 +17933,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 115
+ "dependientes_total": 116
},
"zlib-ng": {
"iname": "zlib-ng",
@@ -17975,7 +17975,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 86
+ "dependientes_total": 87
},
"zola": {
"iname": "zola",
diff --git a/docs/state/build-state-gnome.json b/docs/state/build-state-gnome.json
index fa4ad40c..6cf1d719 100644
--- a/docs/state/build-state-gnome.json
+++ b/docs/state/build-state-gnome.json
@@ -3267,7 +3267,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 10
+ "dependientes_total": 11
},
"ddh": {
"iname": "ddh",
@@ -4239,7 +4239,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 67
+ "dependientes_total": 68
},
"expat-shared": {
"iname": "expat-shared",
@@ -5367,7 +5367,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 107
+ "dependientes_total": 108
},
"gh": {
"iname": "gh",
@@ -10225,7 +10225,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 113
+ "dependientes_total": 115
},
"libffi-shared": {
"iname": "libffi-shared",
@@ -11099,7 +11099,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 46
+ "dependientes_total": 48
},
"libunibreak": {
"iname": "libunibreak",
@@ -12226,7 +12226,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 125
+ "dependientes_total": 127
},
"micro": {
"iname": "micro",
@@ -13992,7 +13992,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 85
+ "dependientes_total": 87
},
"pcre2-shared": {
"iname": "pcre2-shared",
@@ -14254,7 +14254,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 397
+ "dependientes_total": 400
},
"plow": {
"iname": "plow",
@@ -14800,7 +14800,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 316
+ "dependientes_total": 318
},
"qrcp": {
"iname": "qrcp",
@@ -15415,7 +15415,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 268
+ "dependientes_total": 270
},
"sassc": {
"iname": "sassc",
@@ -19143,7 +19143,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 115
+ "dependientes_total": 116
},
"zlib-ng": {
"iname": "zlib-ng",
@@ -19185,7 +19185,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 86
+ "dependientes_total": 87
},
"zola": {
"iname": "zola",
diff --git a/docs/state/build-state-kde.json b/docs/state/build-state-kde.json
index a21c5a96..9694e5cf 100644
--- a/docs/state/build-state-kde.json
+++ b/docs/state/build-state-kde.json
@@ -1,14 +1,14 @@
{
"schema": "hammer-build-state/1",
"totals": {
- "recipes": 1045,
- "nodes": 1047,
- "sealed": 1045,
+ "recipes": 1048,
+ "nodes": 1050,
+ "sealed": 1048,
"ajeno": 2
},
"by_class": {
"ajeno": 2,
- "c": 400,
+ "c": 403,
"go": 362,
"gui": 44,
"kernel": 6,
@@ -21,7 +21,7 @@
"ajeno": 1
},
"incoming-kde": {
- "sealed": 193,
+ "sealed": 196,
"ajeno": 1
}
},
@@ -37,9 +37,9 @@
"sealed": 76
},
"escritorio-kde": {
- "raices": 48,
- "clausura": 299,
- "sealed": 298,
+ "raices": 49,
+ "clausura": 302,
+ "sealed": 301,
"ajeno": 1
},
"escritorio-mirada": {
@@ -3383,7 +3383,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 10
+ "dependientes_total": 11
},
"ddh": {
"iname": "ddh",
@@ -4419,7 +4419,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 67
+ "dependientes_total": 68
},
"expat-shared": {
"iname": "expat-shared",
@@ -5604,7 +5604,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 107
+ "dependientes_total": 108
},
"gh": {
"iname": "gh",
@@ -6130,7 +6130,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 33
+ "dependientes_total": 35
},
"glib-shared": {
"iname": "glib-shared",
@@ -13723,7 +13723,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 113
+ "dependientes_total": 115
},
"libffi-shared": {
"iname": "libffi-shared",
@@ -13832,6 +13832,34 @@
],
"dependientes_total": 17
},
+ "libgudev": {
+ "iname": "libgudev",
+ "version": "238",
+ "link": "static",
+ "compiler": "zig-cc",
+ "deps": [
+ "glib",
+ "libffi",
+ "libudev-zero",
+ "meson",
+ "pcre2",
+ "pkgconf",
+ "python3",
+ "samurai",
+ "zlib"
+ ],
+ "cls": "c",
+ "queue": "incoming-kde",
+ "foreign": false,
+ "hash": "b3:87ca5e730612988bf88d04e4a0b50dc0aa7a4ce38845c059bd9e983d2d58b8a8",
+ "state": "sealed",
+ "blocked_by": [],
+ "unblocks": 0,
+ "perfiles": [
+ "escritorio-kde"
+ ],
+ "dependientes_total": 1
+ },
"libinput": {
"iname": "libinput",
"version": "1.28.1",
@@ -14575,7 +14603,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 46
+ "dependientes_total": 48
},
"libunibreak": {
"iname": "libunibreak",
@@ -15848,7 +15876,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 125
+ "dependientes_total": 127
},
"micro": {
"iname": "micro",
@@ -17761,7 +17789,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 85
+ "dependientes_total": 87
},
"pcre2-shared": {
"iname": "pcre2-shared",
@@ -18091,7 +18119,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 397
+ "dependientes_total": 400
},
"plasma-activities": {
"iname": "plasma-activities",
@@ -18919,7 +18947,7 @@
"perfiles": [
"escritorio-kde"
],
- "dependientes_total": 2
+ "dependientes_total": 3
},
"polkit-qt-1": {
"iname": "polkit-qt-1",
@@ -19650,7 +19678,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 316
+ "dependientes_total": 318
},
"qcoro": {
"iname": "qcoro",
@@ -20875,7 +20903,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 268
+ "dependientes_total": 270
},
"sassc": {
"iname": "sassc",
@@ -23225,6 +23253,26 @@
],
"dependientes_total": 0
},
+ "udev-pc": {
+ "iname": "udev-pc",
+ "version": "1.0.4",
+ "link": "dynamic",
+ "compiler": "zig-cc",
+ "deps": [
+ "pkgconf"
+ ],
+ "cls": "c",
+ "queue": "incoming-kde",
+ "foreign": false,
+ "hash": "b3:fa880b5c36fbbaa19be875fc526b833ceb7ad6a1817de92bf6f41f5d4c671d5f",
+ "state": "sealed",
+ "blocked_by": [],
+ "unblocks": 0,
+ "perfiles": [
+ "escritorio-kde"
+ ],
+ "dependientes_total": 1
+ },
"umoci": {
"iname": "umoci",
"version": "0.6.0",
@@ -23297,6 +23345,40 @@
"perfiles": [],
"dependientes_total": 0
},
+ "upower": {
+ "iname": "upower",
+ "version": "1.90.10",
+ "link": "dynamic",
+ "compiler": "zig-cc",
+ "deps": [
+ "dbus-shared",
+ "expat",
+ "gettext-tiny",
+ "glib",
+ "libffi",
+ "libgudev",
+ "libudev-zero",
+ "meson",
+ "pcre2",
+ "pkgconf",
+ "polkit",
+ "python3",
+ "samurai",
+ "udev-pc",
+ "zlib-shared"
+ ],
+ "cls": "c",
+ "queue": "incoming-kde",
+ "foreign": false,
+ "hash": "b3:bf6a8d8f602ccb7ee436443c1098cfdd76d31084346a9b15601d7a67c2f1a8b8",
+ "state": "sealed",
+ "blocked_by": [],
+ "unblocks": 0,
+ "perfiles": [
+ "escritorio-kde"
+ ],
+ "dependientes_total": 0
+ },
"usbutils": {
"iname": "usbutils",
"version": "019",
@@ -25048,7 +25130,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 115
+ "dependientes_total": 116
},
"zlib-ng": {
"iname": "zlib-ng",
@@ -25090,7 +25172,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 86
+ "dependientes_total": 87
},
"zola": {
"iname": "zola",
diff --git a/docs/state/build-state-wlr.json b/docs/state/build-state-wlr.json
index 741c06bb..f3b7a4b8 100644
--- a/docs/state/build-state-wlr.json
+++ b/docs/state/build-state-wlr.json
@@ -3137,7 +3137,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 10
+ "dependientes_total": 11
},
"ddh": {
"iname": "ddh",
@@ -4102,7 +4102,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 67
+ "dependientes_total": 68
},
"expat-shared": {
"iname": "expat-shared",
@@ -5164,7 +5164,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 107
+ "dependientes_total": 108
},
"gh": {
"iname": "gh",
@@ -5690,7 +5690,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 33
+ "dependientes_total": 35
},
"glib-shared": {
"iname": "glib-shared",
@@ -9434,7 +9434,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 113
+ "dependientes_total": 115
},
"libffi-shared": {
"iname": "libffi-shared",
@@ -9940,7 +9940,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 46
+ "dependientes_total": 48
},
"libunibreak": {
"iname": "libunibreak",
@@ -11025,7 +11025,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 125
+ "dependientes_total": 127
},
"micro": {
"iname": "micro",
@@ -12625,7 +12625,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 85
+ "dependientes_total": 87
},
"pcre2-shared": {
"iname": "pcre2-shared",
@@ -12887,7 +12887,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 397
+ "dependientes_total": 400
},
"plow": {
"iname": "plow",
@@ -13312,7 +13312,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 316
+ "dependientes_total": 318
},
"qrcp": {
"iname": "qrcp",
@@ -13927,7 +13927,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 268
+ "dependientes_total": 270
},
"sassc": {
"iname": "sassc",
@@ -17732,7 +17732,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 115
+ "dependientes_total": 116
},
"zlib-ng": {
"iname": "zlib-ng",
@@ -17774,7 +17774,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 86
+ "dependientes_total": 87
},
"zola": {
"iname": "zola",
diff --git a/docs/state/build-state.json b/docs/state/build-state.json
index 339c7a25..819108f7 100644
--- a/docs/state/build-state.json
+++ b/docs/state/build-state.json
@@ -5604,7 +5604,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 33
+ "dependientes_total": 34
},
"glib-shared": {
"iname": "glib-shared",
@@ -9317,7 +9317,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 113
+ "dependientes_total": 114
},
"libffi-shared": {
"iname": "libffi-shared",
@@ -9823,7 +9823,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 46
+ "dependientes_total": 47
},
"libunibreak": {
"iname": "libunibreak",
@@ -10908,7 +10908,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 125
+ "dependientes_total": 126
},
"micro": {
"iname": "micro",
@@ -12508,7 +12508,7 @@
"escritorio-kde",
"escritorio-sway"
],
- "dependientes_total": 85
+ "dependientes_total": 86
},
"pcre2-shared": {
"iname": "pcre2-shared",
@@ -12770,7 +12770,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 397
+ "dependientes_total": 399
},
"plow": {
"iname": "plow",
@@ -13195,7 +13195,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 316
+ "dependientes_total": 317
},
"qrcp": {
"iname": "qrcp",
@@ -13810,7 +13810,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 268
+ "dependientes_total": 269
},
"sassc": {
"iname": "sassc",
@@ -17301,7 +17301,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 115
+ "dependientes_total": 116
},
"zlib-ng": {
"iname": "zlib-ng",
diff --git a/docs/state/drenaje.json b/docs/state/drenaje.json
index 6e483641..bfcf3fdd 100644
--- a/docs/state/drenaje.json
+++ b/docs/state/drenaje.json
@@ -40,7 +40,7 @@
},
"escritorio-kde": {
"grafo": "docs/state/build-state-kde.json",
- "nodos": 299,
+ "nodos": 302,
"en_deuda": 0,
"ondas": 0,
"profundidad": 0,
diff --git a/docs/state/duplicados.json b/docs/state/duplicados.json
index 978e1fc8..5533e06d 100644
--- a/docs/state/duplicados.json
+++ b/docs/state/duplicados.json
@@ -80,7 +80,7 @@
"incoming-kde/dbus"
],
"radio": {
- "corpus/dbus-shared": 10,
+ "corpus/dbus-shared": 11,
"corpus/dbus": 6,
"incoming-kde/dbus": 117
}
@@ -104,7 +104,7 @@
],
"radio": {
"corpus/expat-shared": 2,
- "corpus/expat": 67
+ "corpus/expat": 68
}
},
{
@@ -165,7 +165,7 @@
],
"radio": {
"corpus/glib-shared": 25,
- "corpus/glib": 33,
+ "corpus/glib": 35,
"incoming-gnome/glib-introspected": 30,
"incoming-gnome/glib": 46
}
@@ -204,7 +204,7 @@
],
"radio": {
"corpus/libffi-shared": 10,
- "corpus/libffi": 113
+ "corpus/libffi": 115
}
},
{
@@ -385,7 +385,7 @@
],
"radio": {
"corpus/pcre2-shared": 26,
- "corpus/pcre2": 85
+ "corpus/pcre2": 87
}
},
{
@@ -454,8 +454,8 @@
"corpus/zlib-shared"
],
"radio": {
- "corpus/zlib-shared": 86,
- "corpus/zlib": 115
+ "corpus/zlib-shared": 87,
+ "corpus/zlib": 116
}
},
{
@@ -489,7 +489,7 @@
"corpus/itstool"
],
"radio": {
- "corpus/gettext-tiny": 107,
+ "corpus/gettext-tiny": 108,
"corpus/itstool": 1
},
"carriers": [
@@ -532,14 +532,17 @@
"sha": "10148cfd6047d387",
"nudos": [
"corpus/libudev-zero",
- "incoming-gnome/udev-pc"
+ "incoming-gnome/udev-pc",
+ "incoming-kde/udev-pc"
],
"radio": {
- "corpus/libudev-zero": 46,
- "incoming-gnome/udev-pc": 4
+ "corpus/libudev-zero": 48,
+ "incoming-gnome/udev-pc": 4,
+ "incoming-kde/udev-pc": 1
},
"carriers": [
- "incoming-gnome/udev-pc"
+ "incoming-gnome/udev-pc",
+ "incoming-kde/udev-pc"
]
},
{
@@ -564,6 +567,30 @@
}
],
"sombras": [
+ {
+ "nombre": "libgudev",
+ "colas": [
+ "incoming-gnome",
+ "incoming-kde"
+ ],
+ "redundante": true,
+ "radio": {
+ "incoming-gnome/libgudev": 6,
+ "incoming-kde/libgudev": 1
+ }
+ },
+ {
+ "nombre": "udev-pc",
+ "colas": [
+ "incoming-gnome",
+ "incoming-kde"
+ ],
+ "redundante": true,
+ "radio": {
+ "incoming-gnome/udev-pc": 4,
+ "incoming-kde/udev-pc": 1
+ }
+ },
{
"nombre": "cairo-shared",
"colas": [
@@ -610,7 +637,7 @@
],
"redundante": false,
"radio": {
- "corpus/glib": 33,
+ "corpus/glib": 35,
"incoming-gnome/glib": 46
}
},
@@ -891,7 +918,7 @@
"redundante": false,
"radio": {
"incoming-gnome/polkit": 5,
- "incoming-kde/polkit": 2
+ "incoming-kde/polkit": 3
}
},
{
@@ -908,6 +935,18 @@
"incoming-kde/pulseaudio": 4
}
},
+ {
+ "nombre": "upower",
+ "colas": [
+ "incoming-gnome",
+ "incoming-kde"
+ ],
+ "redundante": false,
+ "radio": {
+ "incoming-gnome/upower": 0,
+ "incoming-kde/upower": 0
+ }
+ },
{
"nombre": "util-linux",
"colas": [
diff --git a/docs/state/keystones.json b/docs/state/keystones.json
index 21623b16..5a0aa020 100644
--- a/docs/state/keystones.json
+++ b/docs/state/keystones.json
@@ -2,134 +2,155 @@
"schema": "hammer-keystones/3",
"nudos": [
{
- "nudo": "corpus/make",
- "gateo_total": 524,
+ "nudo": "incoming-kde/libgudev",
+ "gateo_total": 1,
"gateo_en_deuda": 0,
"exclusivo": 0,
+ "en_deuda": true
+ },
+ {
+ "nudo": "corpus/make",
+ "gateo_total": 526,
+ "gateo_en_deuda": 1,
+ "exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/binutils",
- "gateo_total": 446,
- "gateo_en_deuda": 0,
+ "gateo_total": 448,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/pkgconf",
- "gateo_total": 438,
- "gateo_en_deuda": 0,
+ "gateo_total": 441,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/zlib",
- "gateo_total": 379,
- "gateo_en_deuda": 0,
+ "gateo_total": 381,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/perl",
- "gateo_total": 375,
- "gateo_en_deuda": 0,
- "exclusivo": 0,
- "en_deuda": false
- },
- {
- "nudo": "corpus/go",
- "gateo_total": 362,
- "gateo_en_deuda": 0,
+ "gateo_total": 377,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/xz-shared",
- "gateo_total": 354,
- "gateo_en_deuda": 0,
+ "gateo_total": 356,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/bzip2-shared",
- "gateo_total": 353,
- "gateo_en_deuda": 0,
+ "gateo_total": 355,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/ncurses-shared",
- "gateo_total": 353,
- "gateo_en_deuda": 0,
+ "gateo_total": 355,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/readline-shared",
- "gateo_total": 352,
- "gateo_en_deuda": 0,
+ "gateo_total": 354,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/openssl-threads",
- "gateo_total": 351,
- "gateo_en_deuda": 0,
+ "gateo_total": 353,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/sqlite-shared",
- "gateo_total": 351,
- "gateo_en_deuda": 0,
+ "gateo_total": 353,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/python3",
- "gateo_total": 350,
- "gateo_en_deuda": 0,
+ "gateo_total": 352,
+ "gateo_en_deuda": 1,
"exclusivo": 1,
"en_deuda": false
},
{
"nudo": "corpus/samurai",
- "gateo_total": 335,
- "gateo_en_deuda": 0,
+ "gateo_total": 337,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/meson",
- "gateo_total": 312,
- "gateo_en_deuda": 0,
+ "gateo_total": 314,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/libffi",
- "gateo_total": 246,
- "gateo_en_deuda": 0,
+ "gateo_total": 248,
+ "gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": false
},
{
- "nudo": "corpus/bison",
- "gateo_total": 223,
+ "nudo": "corpus/pcre2",
+ "gateo_total": 220,
+ "gateo_en_deuda": 1,
+ "exclusivo": 0,
+ "en_deuda": false
+ },
+ {
+ "nudo": "corpus/libudev-zero",
+ "gateo_total": 91,
+ "gateo_en_deuda": 1,
+ "exclusivo": 0,
+ "en_deuda": false
+ },
+ {
+ "nudo": "corpus/glib",
+ "gateo_total": 82,
+ "gateo_en_deuda": 1,
+ "exclusivo": 0,
+ "en_deuda": false
+ },
+ {
+ "nudo": "corpus/go",
+ "gateo_total": 362,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
- "nudo": "corpus/pcre2",
- "gateo_total": 218,
+ "nudo": "corpus/bison",
+ "gateo_total": 223,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/expat",
- "gateo_total": 211,
+ "gateo_total": 212,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
@@ -269,20 +290,20 @@
},
{
"nudo": "corpus/gettext-tiny",
- "gateo_total": 130,
+ "gateo_total": 131,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
- "nudo": "corpus/linux-headers",
- "gateo_total": 126,
+ "nudo": "incoming-kde/dbus",
+ "gateo_total": 127,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
- "nudo": "incoming-kde/dbus",
+ "nudo": "corpus/linux-headers",
"gateo_total": 126,
"gateo_en_deuda": 0,
"exclusivo": 0,
@@ -381,7 +402,7 @@
},
{
"nudo": "corpus/zlib-shared",
- "gateo_total": 114,
+ "gateo_total": 115,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
@@ -428,20 +449,6 @@
"exclusivo": 0,
"en_deuda": false
},
- {
- "nudo": "corpus/libudev-zero",
- "gateo_total": 89,
- "gateo_en_deuda": 0,
- "exclusivo": 0,
- "en_deuda": false
- },
- {
- "nudo": "corpus/glib",
- "gateo_total": 80,
- "gateo_en_deuda": 0,
- "exclusivo": 0,
- "en_deuda": false
- },
{
"nudo": "incoming-kde/util-linux",
"gateo_total": 80,
@@ -486,14 +493,14 @@
},
{
"nudo": "corpus/pcre2-shared",
- "gateo_total": 55,
+ "gateo_total": 56,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/glib-shared",
- "gateo_total": 54,
+ "gateo_total": 55,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
@@ -553,21 +560,16 @@
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
- },
- {
- "nudo": "incoming-gnome/glib",
- "gateo_total": 46,
- "gateo_en_deuda": 0,
- "exclusivo": 0,
- "en_deuda": false
}
],
- "en_deuda": 0,
+ "en_deuda": 1,
"camino_critico": {
"con_datos": true,
- "segundos": 0,
- "pasos": 0,
- "cobertura": "0/0",
- "secuencia": []
+ "segundos": 45.0,
+ "pasos": 1,
+ "cobertura": "0/1",
+ "secuencia": [
+ "incoming-kde/libgudev"
+ ]
}
}
diff --git a/docs/state/targets.toml b/docs/state/targets.toml
index 9b3c0e7a..cebc0ab4 100644
--- a/docs/state/targets.toml
+++ b/docs/state/targets.toml
@@ -248,6 +248,16 @@ paquetes = [
# b3:98ad44a5 desde `incoming-gnome`/`incoming-cosmic`, 0 rebuilds en sus 4 consumidores) para que
# la alcancen las cuatro imágenes.
"breeze-icons", "hicolor-icon-theme",
+ # ── ENERGÍA: sin esto la imagen NO TIENE BATERÍA (añadido 2026-09-09) ─────────────────────────
+ # ⚠ El perfil declaraba `powerdevil` —el gestor de energía de Plasma— pero NO a upower, que es
+ # con quien powerdevil habla para leer la batería y aplicar perfiles de energía. Medido: `upower`
+ # no estaba ni en esta cola ni en el corpus, sólo en la de GNOME, y las colas no se ven entre sí.
+ # En un portátil eso es un escritorio sin indicador de batería, y el arranque no falla ⇒ no se ve
+ # hasta usarlo. Es el mismo tipo de hueco que las fuentes de GNOME o el «abrir con» vacío.
+ # La receta es una VARIANTE con `-Dintrospection=disabled`: GNOME la necesita encendida porque su
+ # shell hace `imports.gi.UPowerGlib`, pero powerdevil habla D-Bus con `org.freedesktop.UPower` y
+ # no toca el typelib. Apagarla evita copiar cuatro recetas más de introspección a esta cola.
+ "upower",
]
[perfil.escritorio-gnome]
diff --git a/recipes/incoming-kde/libgudev.toml b/recipes/incoming-kde/libgudev.toml
new file mode 100644
index 00000000..e59e8af2
--- /dev/null
+++ b/recipes/incoming-kde/libgudev.toml
@@ -0,0 +1,39 @@
+# ⚠ COPIA EN LA COLA KDE (2026-09-09), y NO es lo mismo que la de GNOME aunque el texto sea igual.
+# Las colas no se ven entre sí (HERMANO→corpus), así que `upower` en KDE necesita una acá.
+# ⚠ Y el ARTEFACTO ES DISTINTO a propósito: `glib` existe en las DOS colas y son recetas distintas.
+# Desde `incoming-gnome/` esto se construye contra la glib de GNOME; desde acá, contra la del
+# corpus (KDE no tiene glib hermana). Medido: promoverla al corpus le cambiaba el hash y habría
+# arrastrado a GNOME a la glib del corpus — el cuadro de las «dos glib» que este repo ya pagó.
+# Por eso se COPIA y no se promueve.
+# libgudev 238 — envoltorio GObject sobre libudev (GUdevClient/GUdevDevice: enumerar dispositivos y
+# escuchar uevents con el bucle de GLib en vez de a mano).
+#
+# La piden DOS de la onda 3, y por eso va antes que colord: mutter por su opción `udev`, que es la
+# que necesita el backend NATIVO (KMS/DRM) —o sea, la que hace que mutter sea un compositor de
+# verdad y no sólo un cliente anidado— y colord, que la exige incondicionalmente (gudev-1.0).
+#
+# libudev lo provee libudev-zero, ya en el corpus y sellado (libudev.pc + libudev.a). Ojo con el
+# gotcha ya conocido de este frente: eudev y libudev-zero PISAN el mismo .pc y el mismo .so — acá se
+# declara libudev-zero explícitamente para que no haya duda de cuál entra en el cierre.
+#
+# Feature-minimal: introspection/vapi/tests disabled (tests piden umockdev), gtk_doc off.
+name = "libgudev"
+version = "238"
+license = "LGPL-2.1-or-later"
+
+[source]
+tarball = "https://download.gnome.org/sources/libgudev/238/libgudev-238.tar.xz"
+sha256 = "61266ab1afc9d73dbc60a8b2af73e99d2fdff47d99544d085760e4fa667b5dd1"
+
+[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 -Dvapi=disabled -Dtests=disabled -Dgtk_doc=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"
+
+[deps]
+build = ["meson", "samurai", "python3", "pkgconf", "glib", "libudev-zero", "libffi", "pcre2", "zlib"]
diff --git a/recipes/incoming-kde/udev-pc.toml b/recipes/incoming-kde/udev-pc.toml
new file mode 100644
index 00000000..65fbcfa6
--- /dev/null
+++ b/recipes/incoming-kde/udev-pc.toml
@@ -0,0 +1,53 @@
+# ⚠ COPIA EN LA COLA KDE (2026-09-09). El original vive en `incoming-gnome/`, y las colas NO se ven
+# entre sí: una receta resuelve HERMANO→corpus y nunca de reojo a otra cola. `upower` la necesita
+# para que KDE tenga batería y perfiles de energía (powerdevil habla con upower por D-Bus).
+# Sus deps son sólo `pkgconf`, que está en el corpus ⇒ **el ArtifactHash es el MISMO que el de la
+# copia de GNOME** (verificado): un solo artefacto en el store, cero builds nuevos.
+# udev-pc — el `udev.pc` que falta, y nada más.
+#
+# QUÉ ES: mutter pide DOS pkg-config distintos para su backend nativo (meson.build:262-264):
+# `libudev` (la librería, que da libudev-zero) y `udev` (metadata: la variable `udevdir`, dónde van
+# las reglas). libudev-zero provee el primero y no el segundo — no tiene por qué: es una libudev sin
+# udevd. En distros con systemd el `udev.pc` lo pone systemd; en las que no, lo pone eudev.
+#
+# POR QUÉ UNA RECETA APARTE Y NO AGREGARLO A libudev-zero: `yupana radio libudev-zero` da **51
+# sellados cayendo a deuda**, en las cinco imágenes (base, cli y los tres escritorios). Un fichero de
+# 4 líneas no justifica reconstruir medio catálogo. Esta receta instala SÓLO el .pc, así que no pisa
+# nada de libudev-zero y las dos conviven en el mismo cierre.
+#
+# LA FUENTE es el tarball de libudev-zero a propósito, aunque no se compile nada de él: `[source]` es
+# obligatorio en el esquema de receta, y atarla a su upstream natural deja claro de quién es
+# compañera. El .pc se escribe acá porque libudev-zero no lo trae.
+#
+# udevdir=/usr/lib/udev es la ruta real de esta distro: la Semilla de arje arranca /usr/bin/udevd y
+# ahí busca sus reglas. mutter sólo usa el valor para saber dónde instalar las suyas.
+name = "udev-pc"
+version = "1.0.4"
+license = "ISC"
+
+[source]
+tarball = "https://github.com/illiliti/libudev-zero/archive/refs/tags/1.0.4.tar.gz"
+sha256 = "10148cfd6047d387bf71eca72cd19c177084224d96434a118d8def6e0a3d6316"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "dynamic"
+
+[build.phases]
+compile = 'true'
+install = '''
+set -e
+mkdir -p /out/usr/share/pkgconfig
+cat > /out/usr/share/pkgconfig/udev.pc <<'PC'
+prefix=/usr
+udevdir=${prefix}/lib/udev
+
+Name: udev
+Description: udev device manager (metadata; la libreria la provee libudev-zero)
+Version: 252
+PC
+'''
+
+[deps]
+build = ["pkgconf"]
diff --git a/recipes/incoming-kde/upower.toml b/recipes/incoming-kde/upower.toml
new file mode 100644
index 00000000..b9a45267
--- /dev/null
+++ b/recipes/incoming-kde/upower.toml
@@ -0,0 +1,74 @@
+# ⚠ VARIANTE PARA LA COLA KDE (2026-09-09) — el original está en `incoming-gnome/`.
+#
+# POR QUÉ EXISTE. La imagen de KDE declara `powerdevil` pero NO traía upower, y powerdevil es quien
+# habla con él para la BATERÍA y los perfiles de energía. Medido el 2026-09-09: `upower` no está en
+# la cola de KDE ni en el corpus, así que en un portátil la imagen quedaba sin indicador de batería
+# —y sin que nada fallara al arrancar, que es el modo de fallo caro—. Las colas no se ven entre sí
+# (HERMANO→corpus, nunca de reojo a otra cola), de ahí la copia.
+#
+# ⚠ Y LA DIFERENCIA CON LA DE GNOME NO ES COSMÉTICA: `-Dintrospection=disabled`.
+# GNOME la necesita ENCENDIDA porque su shell hace `imports.gi.UPowerGlib` desde JavaScript — o sea
+# que carga el typelib. **powerdevil no**: habla D-Bus con `org.freedesktop.UPower`, que es la
+# interfaz de red del demonio y no tiene nada que ver con la introspección.
+# Apagarla saca CUATRO recetas de la frontera —gobject-introspection, gi-foreign-girs,
+# glib-introspected y py3-setuptools— que sólo viven en la cola de GNOME y habría que copiar acá.
+# Es la diferencia entre 3 recetas y 7.
+# upower 1.90.10 — el servicio de energía (batería, carga, suspensión por batería crítica) y su
+# librería cliente `libupower-glib`, de donde sale el typelib `UPowerGlib-1.0`.
+#
+# POR QUÉ ENTRA: gnome-shell lo importa desde JavaScript sin condicional
+# (`js/misc/dependencies.js`: `import 'gi://UPowerGlib?version=1.0'`). O sea que **es dep de RUNTIME
+# del shell** aunque no aparezca en su meson.build — el indicador de batería del panel se apoya en
+# esto. Se destapó arrancando la sesión, no compilando.
+#
+# FUENTE: el archivo de gitlab.freedesktop.org y no `upower.freedesktop.org/releases/`, que hoy sirve
+# un índice generado por `tree` sin los tarballs de la serie 1.90. Es el mismo patrón que ya usan
+# cairo, libdrm, libinput, pixman y modemmanager en este repo.
+#
+# LAS TRES PERILLAS QUE HAY QUE FIJAR A MANO, y las tres por el mismo motivo — el `auto` de upower
+# significa «preguntale a un pkg-config de systemd», que acá no existe:
+#
+# -Dudevrulesdir / -Dudevhwdbdir: con `auto` hace `udev_dep.get_variable(pkgconfig: 'udev_dir')`
+# (meson.build:97 y :103). Nuestro `udev-pc` declara la variable **`udevdir`**, no `udev_dir` —
+# el nombre con guión bajo es de systemd-udev; el sin guión es el histórico de eudev, que es el que
+# copiamos. En vez de tocar `udev-pc` (que arrastraría a libudev-zero y sus 51 dependientes) se
+# fijan los dos directorios acá, que es lo que la opción existe para permitir.
+#
+# -Dsystemdsystemunitdir=no: con la cadena vacía hace `dependency('systemd')` DURA
+# (meson.build:120-122). El valor `no` está contemplado por upstream y saltea la instalación de la
+# unit (src/meson.build:107). Acá PID1 es arje-zero.
+#
+# -Dintrospection=enabled es el punto de todo esto. `-Didevice=disabled` saca libimobiledevice (el
+# soporte de batería de iPhone), que no está en el corpus. `-Dpolkit=enabled` porque polkit YA está
+# sellada y es lo que decide quién puede suspender.
+#
+# ISLA DINÁMICA: el typelib nombra `libupower-glib.so.3` y gjs la dlopea.
+name = "upower"
+version = "1.90.10"
+license = "GPL-2.0-or-later"
+
+[source]
+tarball = "https://gitlab.freedesktop.org/upower/upower/-/archive/v1.90.10/upower-v1.90.10.tar.gz"
+sha256 = "7fcd51bece2526dbee5170feb3ffd1adab5b0cd023575f1fd119d969b73f4b90"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "dynamic"
+
+[build.phases]
+configure = '''
+set -e
+PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output \
+ --prefix=/usr --buildtype=release --wrap-mode=nodownload \
+ -Ddefault_library=both -Dos_backend=linux -Dintrospection=disabled \
+ -Didevice=disabled -Dpolkit=enabled -Dman=false -Dgtk-doc=false \
+ -Dudevrulesdir=/usr/lib/udev/rules.d -Dudevhwdbdir=/usr/lib/udev/hwdb.d \
+ -Dsystemdsystemunitdir=no -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]
+# Sin las cuatro de introspección: las saca `-Dintrospection=disabled` (ver cabecera).
+build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "glib", "libgudev", "udev-pc", "libudev-zero", "polkit", "libffi", "pcre2", "zlib-shared", "expat", "dbus-shared"]