sombras: CERO — promover las 6 compartidas al corpus y barrer sus 16 copias

Las 6 que quedaban (fuse3, hwdata, icu4c, libdisplay-info, libelogind, lua) no tenían copia en
el corpus, así que borrar una habría roto su cola: la resolución es sibling-first y después el
catálogo PADRE, nunca una cola hermana. Se promueve una y se barren las 16.

Las 16 eran byte a byte IDÉNTICAS entre sí, con el mismo ArtifactHash — medido con 'hammer hash',
no deducido del nombre. Cada una la comparten entre 2 y 4 imágenes, que es exactamente el
criterio que dejó escrito xkeyboard-config al promoverse: lo que comparten varias imágenes tiene
que vivir en el corpus o no lo alcanzan.

A diferencia de aquella, acá las copias SÍ se barren en el mismo movimiento: sin copia en el
corpus no había dónde caer, y dejarlas sería mantener hasta 4 ficheros que son el mismo hash.

Verificado con la huella de las 1167 recetas antes y después:
  ficheros de receta   1167 → 1157   (16 borradas, 6 promovidas)
  hashes supervivientes  ninguno se movió ⇒ CERO rebuilds
  los cinco grafos       deuda 0, huérfanas [], sellados == recetas
  static-audit           MIENTEN 0 de 690
  duplicados             SOMBRAS REDUNDANTES: 0   ← de 14

⚠ Y una lectura que casi publico mal: mi primera comparación de hashes dijo 'CAMBIÓ ✗' en las
seis. Era el grep de la comparación, que no casaba y dejaba el valor 'antes' vacío — los hashes
nuevos eran idénticos a los medidos minutos antes. Un instrumento roto que grita es tan malo
como uno mudo.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014QPJteswQvP1L7zSBrQQe2
This commit is contained in:
Sergio
2026-09-08 19:47:55 +00:00
co-authored by Claude Opus 5
parent a4a462b751
commit ca2c164512
26 changed files with 605 additions and 801 deletions
+55 -25
View File
@@ -1,14 +1,14 @@
{
"schema": "hammer-build-state/1",
"totals": {
"recipes": 891,
"nodes": 893,
"sealed": 891,
"recipes": 892,
"nodes": 894,
"sealed": 892,
"ajeno": 2
},
"by_class": {
"ajeno": 2,
"c": 229,
"c": 230,
"go": 362,
"gui": 41,
"kernel": 6,
@@ -17,11 +17,11 @@
"debt_by_class": {},
"by_queue": {
"corpus": {
"sealed": 858,
"sealed": 864,
"ajeno": 2
},
"incoming-cosmic": {
"sealed": 33
"sealed": 28
}
},
"by_profile": {
@@ -5246,16 +5246,17 @@
"samurai"
],
"cls": "c",
"queue": "incoming-cosmic",
"queue": "corpus",
"foreign": false,
"hash": "b3:09462465c16e9984a1d9cff16f2fb4d45078ccfb832afd75c2a02e657b38d677",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic"
"escritorio-cosmic",
"escritorio-gnome"
],
"dependientes_total": 1
"dependientes_total": 2
},
"fx": {
"iname": "fx",
@@ -7907,16 +7908,19 @@
"pkgconf"
],
"cls": "c",
"queue": "incoming-cosmic",
"queue": "corpus",
"foreign": false,
"hash": "b3:6fd71a1f1df0cd4d9752f087611468cfc0be6c998381dda2b8816231ab83456e",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic"
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 1
"dependientes_total": 8
},
"hyperfine": {
"iname": "hyperfine",
@@ -7937,6 +7941,28 @@
],
"dependientes_total": 0
},
"icu4c": {
"iname": "icu4c",
"version": "77.1",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [
"pkgconf",
"python3"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:92ef211974cea96f559df9784e108c07b155f80932d12d1ef4d7e3cc1363b074",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-gnome",
"escritorio-kde"
],
"dependientes_total": 28
},
"igrep": {
"iname": "igrep",
"version": "1.3.0",
@@ -9552,16 +9578,19 @@
"samurai"
],
"cls": "c",
"queue": "incoming-cosmic",
"queue": "corpus",
"foreign": false,
"hash": "b3:5db3cfd58823ffac3df3a31feafaf87efbad349228747b5ae00ce48b3cfe42c8",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic"
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 1
"dependientes_total": 6
},
"libdrm": {
"iname": "libdrm",
@@ -9597,16 +9626,17 @@
"compiler": "zig-cc",
"deps": [],
"cls": "rust",
"queue": "incoming-cosmic",
"queue": "corpus",
"foreign": false,
"hash": "b3:285dda6baea988e43dca6e52348be73c302177313c9fcecf9bc7d83eb8682368",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic"
"escritorio-cosmic",
"escritorio-gnome"
],
"dependientes_total": 1
"dependientes_total": 6
},
"libepoxy": {
"iname": "libepoxy",
@@ -10724,7 +10754,7 @@
"pkgconf"
],
"cls": "c",
"queue": "incoming-cosmic",
"queue": "corpus",
"foreign": false,
"hash": "b3:9f3e9ea083e46629af1f7eaf2cd92b8129cc8909d3f552d30aa6ad8708b72016",
"state": "sealed",
@@ -10733,7 +10763,7 @@
"perfiles": [
"escritorio-cosmic"
],
"dependientes_total": 1
"dependientes_total": 2
},
"lua5.2": {
"iname": "lua5.2",
@@ -10898,7 +10928,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 119
"dependientes_total": 118
},
"mako": {
"iname": "mako",
@@ -11316,7 +11346,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 125
"dependientes_total": 121
},
"micro": {
"iname": "micro",
@@ -13174,7 +13204,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 396
"dependientes_total": 387
},
"plow": {
"iname": "plow",
@@ -13643,7 +13673,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 312
"dependientes_total": 307
},
"qrcp": {
"iname": "qrcp",
@@ -14258,7 +14288,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 267
"dependientes_total": 263
},
"sassc": {
"iname": "sassc",
+35 -24
View File
@@ -17,11 +17,11 @@
"debt_by_class": {},
"by_queue": {
"corpus": {
"sealed": 849,
"sealed": 855,
"ajeno": 2
},
"incoming-gnome": {
"sealed": 69
"sealed": 63
}
},
"by_profile": {
@@ -46,7 +46,7 @@
"sealed": 41
}
},
"sin_perfil": 662,
"sin_perfil": 661,
"orphan_deps": [],
"topo_ok": true,
"nodes": {
@@ -4956,16 +4956,17 @@
"samurai"
],
"cls": "c",
"queue": "incoming-gnome",
"queue": "corpus",
"foreign": false,
"hash": "b3:09462465c16e9984a1d9cff16f2fb4d45078ccfb832afd75c2a02e657b38d677",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic",
"escritorio-gnome"
],
"dependientes_total": 1
"dependientes_total": 2
},
"fx": {
"iname": "fx",
@@ -8096,16 +8097,19 @@
"pkgconf"
],
"cls": "c",
"queue": "incoming-gnome",
"queue": "corpus",
"foreign": false,
"hash": "b3:6fd71a1f1df0cd4d9752f087611468cfc0be6c998381dda2b8816231ab83456e",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-gnome"
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 5
"dependientes_total": 8
},
"hyperfine": {
"iname": "hyperfine",
@@ -8171,16 +8175,17 @@
"python3"
],
"cls": "c",
"queue": "incoming-gnome",
"queue": "corpus",
"foreign": false,
"hash": "b3:92ef211974cea96f559df9784e108c07b155f80932d12d1ef4d7e3cc1363b074",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-gnome"
"escritorio-gnome",
"escritorio-kde"
],
"dependientes_total": 7
"dependientes_total": 28
},
"igrep": {
"iname": "igrep",
@@ -9824,16 +9829,19 @@
"samurai"
],
"cls": "c",
"queue": "incoming-gnome",
"queue": "corpus",
"foreign": false,
"hash": "b3:5db3cfd58823ffac3df3a31feafaf87efbad349228747b5ae00ce48b3cfe42c8",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-gnome"
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 2
"dependientes_total": 6
},
"libdrm": {
"iname": "libdrm",
@@ -9900,16 +9908,17 @@
"compiler": "zig-cc",
"deps": [],
"cls": "rust",
"queue": "incoming-gnome",
"queue": "corpus",
"foreign": false,
"hash": "b3:285dda6baea988e43dca6e52348be73c302177313c9fcecf9bc7d83eb8682368",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic",
"escritorio-gnome"
],
"dependientes_total": 5
"dependientes_total": 6
},
"libepoxy": {
"iname": "libepoxy",
@@ -11405,14 +11414,16 @@
"pkgconf"
],
"cls": "c",
"queue": "incoming-gnome",
"queue": "corpus",
"foreign": false,
"hash": "b3:9f3e9ea083e46629af1f7eaf2cd92b8129cc8909d3f552d30aa6ad8708b72016",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [],
"dependientes_total": 1
"perfiles": [
"escritorio-cosmic"
],
"dependientes_total": 2
},
"lua5.2": {
"iname": "lua5.2",
@@ -11577,7 +11588,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 119
"dependientes_total": 118
},
"mako": {
"iname": "mako",
@@ -11995,7 +12006,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 125
"dependientes_total": 121
},
"micro": {
"iname": "micro",
@@ -14022,7 +14033,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 396
"dependientes_total": 387
},
"plow": {
"iname": "plow",
@@ -14566,7 +14577,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 312
"dependientes_total": 307
},
"qrcp": {
"iname": "qrcp",
@@ -15181,7 +15192,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 267
"dependientes_total": 263
},
"sassc": {
"iname": "sassc",
+91 -20
View File
@@ -1,27 +1,27 @@
{
"schema": "hammer-build-state/1",
"totals": {
"recipes": 1034,
"nodes": 1036,
"sealed": 1034,
"recipes": 1037,
"nodes": 1039,
"sealed": 1037,
"ajeno": 2
},
"by_class": {
"ajeno": 2,
"c": 390,
"c": 392,
"go": 362,
"gui": 44,
"kernel": 6,
"rust": 232
"rust": 233
},
"debt_by_class": {},
"by_queue": {
"corpus": {
"sealed": 844,
"sealed": 850,
"ajeno": 1
},
"incoming-kde": {
"sealed": 190,
"sealed": 187,
"ajeno": 1
}
},
@@ -5289,6 +5289,30 @@
"perfiles": [],
"dependientes_total": 0
},
"fuse3": {
"iname": "fuse3",
"version": "3.18.2",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [
"meson",
"pkgconf",
"python3",
"samurai"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:09462465c16e9984a1d9cff16f2fb4d45078ccfb832afd75c2a02e657b38d677",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic",
"escritorio-gnome"
],
"dependientes_total": 2
},
"fx": {
"iname": "fx",
"version": "39.2.0",
@@ -8026,16 +8050,19 @@
"pkgconf"
],
"cls": "c",
"queue": "incoming-kde",
"queue": "corpus",
"foreign": false,
"hash": "b3:6fd71a1f1df0cd4d9752f087611468cfc0be6c998381dda2b8816231ab83456e",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-kde"
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 2
"dependientes_total": 8
},
"hyperfine": {
"iname": "hyperfine",
@@ -8066,16 +8093,17 @@
"python3"
],
"cls": "c",
"queue": "incoming-kde",
"queue": "corpus",
"foreign": false,
"hash": "b3:92ef211974cea96f559df9784e108c07b155f80932d12d1ef4d7e3cc1363b074",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-gnome",
"escritorio-kde"
],
"dependientes_total": 21
"dependientes_total": 28
},
"igrep": {
"iname": "igrep",
@@ -13453,16 +13481,19 @@
"samurai"
],
"cls": "c",
"queue": "incoming-kde",
"queue": "corpus",
"foreign": false,
"hash": "b3:5db3cfd58823ffac3df3a31feafaf87efbad349228747b5ae00ce48b3cfe42c8",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-kde"
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 1
"dependientes_total": 6
},
"libdrm": {
"iname": "libdrm",
@@ -13491,6 +13522,25 @@
],
"dependientes_total": 148
},
"libelogind": {
"iname": "libelogind",
"version": "0.0.1",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [],
"cls": "rust",
"queue": "corpus",
"foreign": false,
"hash": "b3:285dda6baea988e43dca6e52348be73c302177313c9fcecf9bc7d83eb8682368",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic",
"escritorio-gnome"
],
"dependientes_total": 6
},
"libepoxy": {
"iname": "libepoxy",
"version": "1.5.10",
@@ -15031,6 +15081,27 @@
],
"dependientes_total": 0
},
"lua": {
"iname": "lua",
"version": "5.4.8",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [
"make",
"pkgconf"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:9f3e9ea083e46629af1f7eaf2cd92b8129cc8909d3f552d30aa6ad8708b72016",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic"
],
"dependientes_total": 2
},
"lua5.2": {
"iname": "lua5.2",
"version": "5.2.4",
@@ -15194,7 +15265,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 119
"dependientes_total": 118
},
"mako": {
"iname": "mako",
@@ -15612,7 +15683,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 125
"dependientes_total": 121
},
"micro": {
"iname": "micro",
@@ -17853,7 +17924,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 396
"dependientes_total": 387
},
"plasma-activities": {
"iname": "plasma-activities",
@@ -19331,7 +19402,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 312
"dependientes_total": 307
},
"qcoro": {
"iname": "qcoro",
@@ -20557,7 +20628,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 267
"dependientes_total": 263
},
"sassc": {
"iname": "sassc",
+108 -16
View File
@@ -1,27 +1,27 @@
{
"schema": "hammer-build-state/1",
"totals": {
"recipes": 873,
"nodes": 875,
"sealed": 873,
"recipes": 877,
"nodes": 879,
"sealed": 877,
"ajeno": 2
},
"by_class": {
"ajeno": 2,
"c": 232,
"c": 235,
"go": 362,
"gui": 41,
"kernel": 6,
"rust": 232
"rust": 233
},
"debt_by_class": {},
"by_queue": {
"corpus": {
"sealed": 859,
"sealed": 865,
"ajeno": 2
},
"incoming-wlr": {
"sealed": 14
"sealed": 12
}
},
"by_profile": {
@@ -4809,6 +4809,30 @@
"perfiles": [],
"dependientes_total": 0
},
"fuse3": {
"iname": "fuse3",
"version": "3.18.2",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [
"meson",
"pkgconf",
"python3",
"samurai"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:09462465c16e9984a1d9cff16f2fb4d45078ccfb832afd75c2a02e657b38d677",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic",
"escritorio-gnome"
],
"dependientes_total": 2
},
"fuzzel": {
"iname": "fuzzel",
"version": "1.12.0",
@@ -7533,16 +7557,19 @@
"pkgconf"
],
"cls": "c",
"queue": "incoming-wlr",
"queue": "corpus",
"foreign": false,
"hash": "b3:6fd71a1f1df0cd4d9752f087611468cfc0be6c998381dda2b8816231ab83456e",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 3
"dependientes_total": 8
},
"hyperfine": {
"iname": "hyperfine",
@@ -7563,6 +7590,28 @@
],
"dependientes_total": 0
},
"icu4c": {
"iname": "icu4c",
"version": "77.1",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [
"pkgconf",
"python3"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:92ef211974cea96f559df9784e108c07b155f80932d12d1ef4d7e3cc1363b074",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-gnome",
"escritorio-kde"
],
"dependientes_total": 28
},
"igrep": {
"iname": "igrep",
"version": "1.3.0",
@@ -9178,16 +9227,19 @@
"samurai"
],
"cls": "c",
"queue": "incoming-wlr",
"queue": "corpus",
"foreign": false,
"hash": "b3:5db3cfd58823ffac3df3a31feafaf87efbad349228747b5ae00ce48b3cfe42c8",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 2
"dependientes_total": 6
},
"libdrm": {
"iname": "libdrm",
@@ -9216,6 +9268,25 @@
],
"dependientes_total": 148
},
"libelogind": {
"iname": "libelogind",
"version": "0.0.1",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [],
"cls": "rust",
"queue": "corpus",
"foreign": false,
"hash": "b3:285dda6baea988e43dca6e52348be73c302177313c9fcecf9bc7d83eb8682368",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic",
"escritorio-gnome"
],
"dependientes_total": 6
},
"libepoxy": {
"iname": "libepoxy",
"version": "1.5.10",
@@ -10296,6 +10367,27 @@
],
"dependientes_total": 0
},
"lua": {
"iname": "lua",
"version": "5.4.8",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [
"make",
"pkgconf"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:9f3e9ea083e46629af1f7eaf2cd92b8129cc8909d3f552d30aa6ad8708b72016",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic"
],
"dependientes_total": 2
},
"lua5.2": {
"iname": "lua5.2",
"version": "5.2.4",
@@ -10459,7 +10551,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 119
"dependientes_total": 118
},
"mako": {
"iname": "mako",
@@ -10877,7 +10969,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 125
"dependientes_total": 121
},
"micro": {
"iname": "micro",
@@ -12738,7 +12830,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 396
"dependientes_total": 387
},
"plow": {
"iname": "plow",
@@ -13163,7 +13255,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 312
"dependientes_total": 307
},
"qrcp": {
"iname": "qrcp",
@@ -13778,7 +13870,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 267
"dependientes_total": 263
},
"sassc": {
"iname": "sassc",
+147 -11
View File
@@ -1,23 +1,23 @@
{
"schema": "hammer-build-state/1",
"totals": {
"recipes": 860,
"nodes": 862,
"sealed": 860,
"recipes": 866,
"nodes": 868,
"sealed": 866,
"ajeno": 2
},
"by_class": {
"ajeno": 2,
"c": 219,
"c": 224,
"go": 362,
"gui": 41,
"kernel": 6,
"rust": 232
"rust": 233
},
"debt_by_class": {},
"by_queue": {
"corpus": {
"sealed": 860,
"sealed": 866,
"ajeno": 2
}
},
@@ -4763,6 +4763,30 @@
"perfiles": [],
"dependientes_total": 0
},
"fuse3": {
"iname": "fuse3",
"version": "3.18.2",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [
"meson",
"pkgconf",
"python3",
"samurai"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:09462465c16e9984a1d9cff16f2fb4d45078ccfb832afd75c2a02e657b38d677",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic",
"escritorio-gnome"
],
"dependientes_total": 2
},
"fx": {
"iname": "fx",
"version": "39.2.0",
@@ -7407,6 +7431,29 @@
"perfiles": [],
"dependientes_total": 0
},
"hwdata": {
"iname": "hwdata",
"version": "0.393",
"link": "dynamic",
"compiler": "gcc",
"deps": [
"pkgconf"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:6fd71a1f1df0cd4d9752f087611468cfc0be6c998381dda2b8816231ab83456e",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 8
},
"hyperfine": {
"iname": "hyperfine",
"version": "1.20.0",
@@ -7426,6 +7473,28 @@
],
"dependientes_total": 0
},
"icu4c": {
"iname": "icu4c",
"version": "77.1",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [
"pkgconf",
"python3"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:92ef211974cea96f559df9784e108c07b155f80932d12d1ef4d7e3cc1363b074",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-gnome",
"escritorio-kde"
],
"dependientes_total": 28
},
"igrep": {
"iname": "igrep",
"version": "1.3.0",
@@ -9028,6 +9097,33 @@
],
"dependientes_total": 3
},
"libdisplay-info": {
"iname": "libdisplay-info",
"version": "0.2.0",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [
"hwdata",
"meson",
"pkgconf",
"python3",
"samurai"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:5db3cfd58823ffac3df3a31feafaf87efbad349228747b5ae00ce48b3cfe42c8",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 6
},
"libdrm": {
"iname": "libdrm",
"version": "2.4.134",
@@ -9055,6 +9151,25 @@
],
"dependientes_total": 148
},
"libelogind": {
"iname": "libelogind",
"version": "0.0.1",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [],
"cls": "rust",
"queue": "corpus",
"foreign": false,
"hash": "b3:285dda6baea988e43dca6e52348be73c302177313c9fcecf9bc7d83eb8682368",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic",
"escritorio-gnome"
],
"dependientes_total": 6
},
"libepoxy": {
"iname": "libepoxy",
"version": "1.5.10",
@@ -10135,6 +10250,27 @@
],
"dependientes_total": 0
},
"lua": {
"iname": "lua",
"version": "5.4.8",
"link": "dynamic",
"compiler": "zig-cc",
"deps": [
"make",
"pkgconf"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:9f3e9ea083e46629af1f7eaf2cd92b8129cc8909d3f552d30aa6ad8708b72016",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-cosmic"
],
"dependientes_total": 2
},
"lua5.2": {
"iname": "lua5.2",
"version": "5.2.4",
@@ -10298,7 +10434,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 119
"dependientes_total": 118
},
"mako": {
"iname": "mako",
@@ -10716,7 +10852,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 125
"dependientes_total": 121
},
"micro": {
"iname": "micro",
@@ -12577,7 +12713,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 396
"dependientes_total": 387
},
"plow": {
"iname": "plow",
@@ -13002,7 +13138,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 312
"dependientes_total": 307
},
"qrcp": {
"iname": "qrcp",
@@ -13617,7 +13753,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 267
"dependientes_total": 263
},
"sassc": {
"iname": "sassc",
+20 -222
View File
@@ -30,13 +30,11 @@
"sha": "ab5a03176ee106d3",
"nudos": [
"corpus/bzip2",
"corpus/bzip2-shared",
"incoming-kde/bzip2-shared"
"corpus/bzip2-shared"
],
"radio": {
"corpus/bzip2-shared": 3,
"corpus/bzip2": 10,
"incoming-kde/bzip2-shared": 3
"corpus/bzip2-shared": 6,
"corpus/bzip2": 10
}
},
{
@@ -162,18 +160,14 @@
"nudos": [
"corpus/glib",
"corpus/glib-shared",
"incoming-cosmic/glib-shared",
"incoming-gnome/glib",
"incoming-gnome/glib-introspected",
"incoming-kde/glib-shared"
"incoming-gnome/glib-introspected"
],
"radio": {
"corpus/glib-shared": 14,
"corpus/glib-shared": 26,
"corpus/glib": 30,
"incoming-cosmic/glib-shared": 1,
"incoming-gnome/glib-introspected": 29,
"incoming-gnome/glib": 42,
"incoming-kde/glib-shared": 11
"incoming-gnome/glib": 42
}
},
{
@@ -210,7 +204,7 @@
],
"radio": {
"corpus/libffi-shared": 10,
"corpus/libffi": 109
"corpus/libffi": 107
}
},
{
@@ -387,15 +381,11 @@
"sha": "47fe8c99461250d4",
"nudos": [
"corpus/pcre2",
"corpus/pcre2-shared",
"incoming-cosmic/pcre2-shared",
"incoming-kde/pcre2-shared"
"corpus/pcre2-shared"
],
"radio": {
"corpus/pcre2-shared": 15,
"corpus/pcre2": 78,
"incoming-cosmic/pcre2-shared": 2,
"incoming-kde/pcre2-shared": 12
"corpus/pcre2-shared": 27,
"corpus/pcre2": 78
}
},
{
@@ -418,7 +408,7 @@
"corpus/readline-shared"
],
"radio": {
"corpus/readline-shared": 3,
"corpus/readline-shared": 2,
"corpus/readline": 4
}
},
@@ -426,13 +416,11 @@
"sha": "67d3fe6d268e6ead",
"nudos": [
"corpus/sqlite",
"corpus/sqlite-shared",
"incoming-gnome/sqlite-shared"
"corpus/sqlite-shared"
],
"radio": {
"corpus/sqlite-shared": 1,
"corpus/sqlite": 4,
"incoming-gnome/sqlite-shared": 6
"corpus/sqlite-shared": 7,
"corpus/sqlite": 4
}
},
{
@@ -452,13 +440,11 @@
"sha": "fff1ffcf2b0da84d",
"nudos": [
"corpus/xz",
"corpus/xz-shared",
"incoming-kde/xz-shared"
"corpus/xz-shared"
],
"radio": {
"corpus/xz-shared": 1,
"corpus/xz": 14,
"incoming-kde/xz-shared": 4
"corpus/xz-shared": 5,
"corpus/xz": 14
}
},
{
@@ -468,7 +454,7 @@
"corpus/zlib-shared"
],
"radio": {
"corpus/zlib-shared": 90,
"corpus/zlib-shared": 86,
"corpus/zlib": 107
}
},
@@ -578,194 +564,6 @@
}
],
"sombras": [
{
"nombre": "bzip2-shared",
"colas": [
"corpus",
"incoming-kde"
],
"redundante": true,
"radio": {
"corpus/bzip2-shared": 3,
"incoming-kde/bzip2-shared": 3
}
},
{
"nombre": "fuse3",
"colas": [
"incoming-cosmic",
"incoming-gnome"
],
"redundante": true,
"radio": {
"incoming-cosmic/fuse3": 1,
"incoming-gnome/fuse3": 1
}
},
{
"nombre": "glib-shared",
"colas": [
"corpus",
"incoming-cosmic",
"incoming-kde"
],
"redundante": true,
"radio": {
"corpus/glib-shared": 14,
"incoming-cosmic/glib-shared": 1,
"incoming-kde/glib-shared": 11
}
},
{
"nombre": "hwdata",
"colas": [
"incoming-cosmic",
"incoming-gnome",
"incoming-kde",
"incoming-wlr"
],
"redundante": true,
"radio": {
"incoming-cosmic/hwdata": 1,
"incoming-gnome/hwdata": 5,
"incoming-kde/hwdata": 2,
"incoming-wlr/hwdata": 3
}
},
{
"nombre": "icu4c",
"colas": [
"incoming-gnome",
"incoming-kde"
],
"redundante": true,
"radio": {
"incoming-gnome/icu4c": 7,
"incoming-kde/icu4c": 21
}
},
{
"nombre": "lcms2",
"colas": [
"corpus",
"incoming-gnome",
"incoming-kde"
],
"redundante": true,
"radio": {
"corpus/lcms2": 3,
"incoming-gnome/lcms2": 3,
"incoming-kde/lcms2": 6
}
},
{
"nombre": "libdisplay-info",
"colas": [
"incoming-cosmic",
"incoming-gnome",
"incoming-kde",
"incoming-wlr"
],
"redundante": true,
"radio": {
"incoming-cosmic/libdisplay-info": 1,
"incoming-gnome/libdisplay-info": 2,
"incoming-kde/libdisplay-info": 1,
"incoming-wlr/libdisplay-info": 2
}
},
{
"nombre": "libelogind",
"colas": [
"incoming-cosmic",
"incoming-gnome"
],
"redundante": true,
"radio": {
"incoming-cosmic/libelogind": 1,
"incoming-gnome/libelogind": 5
}
},
{
"nombre": "lua",
"colas": [
"incoming-cosmic",
"incoming-gnome"
],
"redundante": true,
"radio": {
"incoming-cosmic/lua": 1,
"incoming-gnome/lua": 1
}
},
{
"nombre": "mpc",
"colas": [
"corpus",
"incoming-kde"
],
"redundante": true,
"radio": {
"corpus/mpc": 1,
"incoming-kde/mpc": 1
}
},
{
"nombre": "pcre2-shared",
"colas": [
"corpus",
"incoming-cosmic",
"incoming-kde"
],
"redundante": true,
"radio": {
"corpus/pcre2-shared": 15,
"incoming-cosmic/pcre2-shared": 2,
"incoming-kde/pcre2-shared": 12
}
},
{
"nombre": "sqlite-shared",
"colas": [
"corpus",
"incoming-gnome"
],
"redundante": true,
"radio": {
"corpus/sqlite-shared": 1,
"incoming-gnome/sqlite-shared": 6
}
},
{
"nombre": "xkeyboard-config",
"colas": [
"corpus",
"incoming-cosmic",
"incoming-gnome",
"incoming-kde",
"incoming-wlr"
],
"redundante": true,
"radio": {
"corpus/xkeyboard-config": 0,
"incoming-cosmic/xkeyboard-config": 0,
"incoming-gnome/xkeyboard-config": 4,
"incoming-kde/xkeyboard-config": 1,
"incoming-wlr/xkeyboard-config": 0
}
},
{
"nombre": "xz-shared",
"colas": [
"corpus",
"incoming-kde"
],
"redundante": true,
"radio": {
"corpus/xz-shared": 1,
"incoming-kde/xz-shared": 4
}
},
{
"nombre": "cairo-shared",
"colas": [
@@ -827,7 +625,7 @@
"radio": {
"corpus/gmp": 3,
"incoming-cosmic/gmp": 2,
"incoming-kde/gmp": 4
"incoming-kde/gmp": 3
}
},
{
@@ -1033,7 +831,7 @@
"radio": {
"corpus/mpfr": 2,
"incoming-cosmic/mpfr": 1,
"incoming-kde/mpfr": 3
"incoming-kde/mpfr": 2
}
},
{
+35 -35
View File
@@ -3,35 +3,35 @@
"nudos": [
{
"nudo": "corpus/make",
"gateo_total": 527,
"gateo_total": 512,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/binutils",
"gateo_total": 448,
"gateo_total": 434,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/pkgconf",
"gateo_total": 447,
"gateo_total": 426,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/zlib",
"gateo_total": 381,
"gateo_total": 368,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/perl",
"gateo_total": 377,
"gateo_total": 364,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
@@ -44,71 +44,71 @@
"en_deuda": false
},
{
"nudo": "corpus/ncurses-shared",
"gateo_total": 356,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/readline-shared",
"gateo_total": 355,
"nudo": "corpus/xz-shared",
"gateo_total": 343,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/bzip2-shared",
"gateo_total": 353,
"gateo_total": 342,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/ncurses-shared",
"gateo_total": 342,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/readline-shared",
"gateo_total": 341,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/openssl-threads",
"gateo_total": 353,
"gateo_total": 340,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/sqlite-shared",
"gateo_total": 353,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/xz-shared",
"gateo_total": 353,
"gateo_total": 340,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/python3",
"gateo_total": 352,
"gateo_total": 339,
"gateo_en_deuda": 0,
"exclusivo": 2,
"exclusivo": 1,
"en_deuda": false
},
{
"nudo": "corpus/samurai",
"gateo_total": 334,
"gateo_total": 324,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/meson",
"gateo_total": 311,
"gateo_total": 301,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/libffi",
"gateo_total": 242,
"gateo_total": 240,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
@@ -415,15 +415,15 @@
"en_deuda": false
},
{
"nudo": "corpus/zlib-shared",
"nudo": "incoming-kde/qtdeclarative",
"gateo_total": 100,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/qtdeclarative",
"gateo_total": 100,
"nudo": "corpus/zlib-shared",
"gateo_total": 96,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
@@ -541,14 +541,14 @@
"en_deuda": false
},
{
"nudo": "corpus/m4",
"gateo_total": 44,
"nudo": "corpus/libpng",
"gateo_total": 43,
"gateo_en_deuda": 0,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/libpng",
"nudo": "corpus/m4",
"gateo_total": 43,
"gateo_en_deuda": 0,
"exclusivo": 0,
+3
View File
@@ -57,3 +57,6 @@ vim b4c0d477428af4bf75e9b55d6ff2b2508b7f7e55f4ace9207a6f25c4d3080bd8 2026-09-05
kbd be9969f808c8499972e213f474a52d5f7477bf7faff78b6e0ec580aede507231 2026-09-05 reproduce
npth e5682fca87a9f591d533855b0056a07b5724304fb53402c940524d885908d980 2026-09-05 reproduce
musl-fts b9681a5205197d51bb777efde1a271e9b189bf35d74091834c5f1aa43d82f16e 2026-09-05 reproduce
json-glib e346cb599d070d407a853725cec97e6cd1b0a0a647b6767612093120050a5fa7 2026-09-08 reproduce
zathura 685efcac30d6821ac9ac0a0f492815b2a469c3360bb3a3c1a6637b3258193dd5 2026-09-08 reproduce
zathura-pdf-poppler 04c8b7bac22a303d7e4edaebcf91833277e52a2fdcf0a741d165176c9b49afd8 2026-09-08 reproduce
1 # repro-verificado.tsv — qué artefactos se comprobaron que REPRODUCEN bit a bit, y cuándo.
57 kbd
58 npth
59 musl-fts
60 json-glib
61 zathura
62 zathura-pdf-poppler
@@ -1,3 +1,13 @@
# ══ PROMOVIDA AL CORPUS DESDE LAS COLAS (2026-09-08) ═══════════════════════════════════════════
# Existía IDÉNTICA byte a byte en 2 colas de escritorio (cosmic,gnome), con el MISMO
# ArtifactHash en todas — verificado con `hammer hash` antes de mover, no deducido del nombre.
# Sube al corpus por la razón que ya escribió `xkeyboard-config`: una receta resuelve sibling-first
# y después el catálogo PADRE, nunca una cola hermana, así que **lo que comparten varias imágenes
# tiene que vivir acá o no lo alcanzan**. Aquí lo comparten 2.
#
# A diferencia de aquella, las copias de las colas SÍ se barren en el mismo movimiento: sin copia en
# el corpus no había dónde caer, y dejarlas sería mantener 2 ficheros que son el mismo hash.
# Cero rebuilds: el hash no se mueve, sólo cambia de dónde lo resuelve cada consumidor.
# fuse3 (libfuse 3.18.2) — el primer eslabón de LA CADENA DEL PORTAL, y no está acá por su función
# sino porque `xdg-desktop-portal` lo pide con `dependency('fuse3', version: '>= 3.10.0')` sin
# `required:`. El frontend lo usa para el *document portal*: un sistema de ficheros FUSE que expone
+34
View File
@@ -0,0 +1,34 @@
# ══ PROMOVIDA AL CORPUS DESDE LAS COLAS (2026-09-08) ═══════════════════════════════════════════
# Existía IDÉNTICA byte a byte en 4 colas de escritorio (cosmic,gnome,kde,wlr), con el MISMO
# ArtifactHash en todas — verificado con `hammer hash` antes de mover, no deducido del nombre.
# Sube al corpus por la razón que ya escribió `xkeyboard-config`: una receta resuelve sibling-first
# y después el catálogo PADRE, nunca una cola hermana, así que **lo que comparten varias imágenes
# tiene que vivir acá o no lo alcanzan**. Aquí lo comparten 4.
#
# A diferencia de aquella, las copias de las colas SÍ se barren en el mismo movimiento: sin copia en
# el corpus no había dónde caer, y dejarlas sería mantener 4 ficheros que son el mismo hash.
# Cero rebuilds: el hash no se mueve, sólo cambia de dónde lo resuelve cada consumidor.
# 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"]
+37
View File
@@ -0,0 +1,37 @@
# ══ PROMOVIDA AL CORPUS DESDE LAS COLAS (2026-09-08) ═══════════════════════════════════════════
# Existía IDÉNTICA byte a byte en 2 colas de escritorio (gnome,kde), con el MISMO
# ArtifactHash en todas — verificado con `hammer hash` antes de mover, no deducido del nombre.
# Sube al corpus por la razón que ya escribió `xkeyboard-config`: una receta resuelve sibling-first
# y después el catálogo PADRE, nunca una cola hermana, así que **lo que comparten varias imágenes
# tiene que vivir acá o no lo alcanzan**. Aquí lo comparten 2.
#
# A diferencia de aquella, las copias de las colas SÍ se barren en el mismo movimiento: sin copia en
# el corpus no había dónde caer, y dejarlas sería mantener 2 ficheros que son el mismo hash.
# Cero rebuilds: el hash no se mueve, sólo cambia de dónde lo resuelve cada consumidor.
# icu4c 77.1 — International Components for Unicode (libicuuc/libicui18n/libicudata.so). Dep transitiva
# del stack Qt/KDE (ki18n opcional, libqalculate opcional, apps con colación Unicode). C++ autotools;
# el tarball descomprime a `icu/source/` → todas las fases entran con `cd source`. musl, shared.
name = "icu4c"
version = "77.1"
license = "MIT"
[source]
tarball = "https://github.com/unicode-org/icu/releases/download/release-77-1/icu4c-77_1-src.tgz"
sha256 = "588e431f77327c39031ffbb8843c0e3bc122c211374485fa87dc5f3faff24061"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
flags = []
[build.phases]
configure = '''
cd source && ./configure --prefix=/usr --enable-shared --disable-static \
--disable-samples --disable-tests
'''
compile = "cd source && make -j\"$(nproc)\""
install = "cd source && make install DESTDIR=/out"
[deps]
build = ["pkgconf", "python3"]
-24
View File
@@ -1,24 +0,0 @@
# 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"]
@@ -1,25 +0,0 @@
# 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"
license = "MIT"
[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"]
-70
View File
@@ -1,70 +0,0 @@
# libelogind — la C-ABI `sd-login` que le faltaba a la distro, implementada en arje-compat.
#
# QUÉ RESUELVE: mutter (y polkit, gcr, at-spi2-core) exigen un proveedor de logind por pkg-config —
# `libsystemd` o `libelogind`— para llamar la API C sd-login. Esa API NO es un cliente D-Bus: lee
# `/run/systemd/{sessions,users,seats}`. Los otros tres tienen perilla para esquivarla y se
# construyeron por su camino degradado; **mutter no tiene**, porque `-Dudev=false` exige
# `-Dlogind=false` (mutter/meson.build:257) y sin udev+logind no hay backend nativo KMS: no hay
# compositor de verdad, sólo anidado.
#
# POR QUÉ NO ES elogind NI UN STUB: `arje-logind-compat` ya escribe ese estado en /run/systemd (ver
# `arje_compat::login_state`). Lo único que faltaba era una librería que lo LEYERA y lo ofreciera en
# C. `arje-sdlogin-compat` hace exactamente eso — no inventa datos ni levanta un daemon paralelo.
# Empaquetar elogind sería traer un logind entero a competirle al que arje ya tiene.
#
# Corrige de paso lo que afirma el comentario de recipes/arje-logind-compat.toml («no hace falta la
# C-ABI sd-login… los escritorios consultan login1 en RUNTIME por D-Bus»): es cierto para los
# clientes D-Bus y FALSO para mutter, que la enlaza.
#
# HUB-ONLY, como toda receta de fuente tawasuyu: la gitea escucha en :2345 y el worker efímero es
# secretless ⇒ recibe Connection refused en :22. Se muele en el hub.
name = "libelogind"
version = "0.0.1"
license = "MIT"
[source]
# El `commit` es el identificador inmutable; la URL es sólo locator y NO entra al ArtifactHash.
# Rama `selfhost/arje-zero-attest-lockfile`, igual que arje-logind-compat, porque es la única que
# versiona el `Cargo.lock` de la raíz: sin él, el vendoreo `--locked` del fetch no es reproducible
# (el monorepo lo gitignora en main).
repo = "gitea@git.tawasuyu.net:tawasuyu/tawasuyu.git"
commit = "749edfe41766e098d3eb18561c6a396610c5cd8e"
# El monorepo COMMITEA su propio `vendor/` (`[patch.crates-io] smithay = { path = "vendor/smithay" }`,
# la copia parcheada que mirada necesita para el tearing) y el `cargo vendor` de hammer escribe ahí
# por defecto, pisándolo: el build muere con `failed to read /src/vendor/smithay/.cargo-checksum.json`
# al resolver la dep git de taffy. Se vendorea a un subdir aparte, igual que arje-logind-compat.
# Apareció recién ahora porque el `vendor/` entró a esta rama con el merge de main, no antes.
# Ver [[hammer-cargo-vendor-clobbers-project-vendor]].
cargo_vendor_dir = ".hammer-cargo-vendor"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
# dynamic, no static: el producto ES una librería compartida (cdylib). Con `link = "static"` el lab
# exporta -static y no hay .so que valga.
link = "dynamic"
flags = ["-p", "arje-sdlogin-compat"]
[build.phases]
# Sólo se sobrescribe `install`: el `compile` por defecto del lab (cargo build --release, offline y
# vendoreado) es el correcto. El default de Cargo copia EJECUTABLES a /usr/bin, y acá no hay ninguno:
# hay una .so, una cabecera y un .pc.
#
# El SONAME (libelogind.so.0) lo fija el build.rs del crate, no esta receta, para que un `cargo build`
# a mano también produzca algo enlazable. Por eso el fichero se instala directamente con ese nombre y
# el `libelogind.so` es el symlink de desarrollo que busca el linker.
#
# La cabecera va a /usr/include/elogind/systemd/ y el .pc trae `-I${includedir}/elogind`: así el
# `#include <systemd/sd-login.h>` de mutter resuelve sin que mutter sepa que somos nosotros. Es el
# mismo arreglo de elogind upstream.
install = '''
set -e
mkdir -p /out/usr/lib/pkgconfig /out/usr/include/elogind/systemd
cp target/release/libelogind.so /out/usr/lib/libelogind.so.0
ln -s libelogind.so.0 /out/usr/lib/libelogind.so
cp 03_ukupacha/arje/arje-sdlogin-compat/include/systemd/sd-login.h /out/usr/include/elogind/systemd/
# sd-daemon.h va aparte porque en systemd también son dos cabeceras y quien la usa la pide por su
# nombre: gdm hace `#include <systemd/sd-daemon.h>` en common/gdm-log.c para `sd_booted()`.
cp 03_ukupacha/arje/arje-sdlogin-compat/include/systemd/sd-daemon.h /out/usr/include/elogind/systemd/
cp 03_ukupacha/arje/arje-sdlogin-compat/pkgconfig/libelogind.pc /out/usr/lib/pkgconfig/
'''
-57
View File
@@ -1,57 +0,0 @@
# fuse3 (libfuse 3.18.2) — el primer eslabón de LA CADENA DEL PORTAL, y no está acá por su función
# sino porque `xdg-desktop-portal` lo pide con `dependency('fuse3', version: '>= 3.10.0')` sin
# `required:`. El frontend lo usa para el *document portal*: un sistema de ficheros FUSE que expone
# a cada aplicación sólo los ficheros que el usuario le concedió por el selector.
#
# No es negociable por opción de meson —el `dependency()` es incondicional— así que o está o el
# frontend no configura.
#
# ── LO BARATO ────────────────────────────────────────────────────────────────────────────────────
# libfuse no tiene deps duras: sus únicos `dependency()` son `liburing` y `numa`, ambos
# `required: false`, más `threads`. Es meson y C plano.
#
# ── LO QUE SE APAGA, Y POR QUÉ ───────────────────────────────────────────────────────────────────
# `useroot=false` — el build normal hace `chown root` y pone el setuid en `fusermount3`. En el
# sandbox no somos root y no hay a quién chownear; el bit se pone al armar la
# imagen, no al construir el artefacto.
# `examples=false`,
# `tests=false` — no se instalan y sólo suman superficie de compilación.
# `disable-mtab=true` — esta base no tiene `/etc/mtab` (ni el `mount` de util-linux que lo escribe).
# `initscriptdir=''` — no hay sysvinit: el PID1 es arje-zero.
# `enable-io-uring=false` — `liburing` no está en el corpus; con `required:false` meson lo saltearía
# igual, pero dejarlo explícito hace que el artefacto no dependa de si la
# librería aparece en el rootfs del constructor. Es la diferencia entre sellar
# lo que quisimos y sellar lo que había.
name = "fuse3"
version = "3.18.2"
[source]
tarball = "https://github.com/libfuse/libfuse/archive/fuse-3.18.2/libfuse-fuse-3.18.2.tar.gz"
sha256 = "55a97cfd8661a9b42ff0123b44af52cac49feaec36987f4d968c046f93b42e1d"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
zig_version = "0.13.0"
[build.phases]
# ⚠ **NO poner `-Ddisable-libc-symbol-version=true`, aunque suene a lo correcto para musl.** Lo
# probé primero razonando que musl no implementa versionado de símbolos, y falla en el enlace con
# ld.lld: error: version script assignment of 'FUSE_3.0' to symbol 'fuse_loop_mt' failed:
# symbol not defined
# La razón está en el propio meson de upstream: la opción sólo pone `versioned_symbols = 0`, que hace
# que `lib/compat.c` NO emita los alias versionados… pero `lib/meson.build:54` pasa
# `-Wl,--version-script` **incondicionalmente**. O sea que la opción deja el script pidiendo símbolos
# que ya nadie define: es una combinación incoherente de upstream, no una limitación de musl.
#
# Y de paso quedó medido que la auto-detección de upstream **no conoce musl**: sólo apaga el
# versionado para `__UCLIBC__` y `__APPLE__` (meson.build:214), así que en musl el valor por defecto
# es 1 — que es con lo que Alpine construye libfuse y funciona: musl tolera `.symver`, simplemente
# ignora las versiones en tiempo de ejecución. Se deja el DEFECTO.
configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig meson setup output --prefix=/usr --buildtype=release -Dexamples=false -Dtests=false -Duseroot=false -Ddisable-mtab=true -Dinitscriptdir= -Denable-io-uring=false"
compile = "ninja -C output"
install = "DESTDIR=/out ninja -C output install"
[deps]
build = ["meson", "samurai", "python3", "pkgconf"]
-24
View File
@@ -1,24 +0,0 @@
# 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"]
-27
View File
@@ -1,27 +0,0 @@
# icu4c 77.1 — International Components for Unicode (libicuuc/libicui18n/libicudata.so). Dep transitiva
# del stack Qt/KDE (ki18n opcional, libqalculate opcional, apps con colación Unicode). C++ autotools;
# el tarball descomprime a `icu/source/` → todas las fases entran con `cd source`. musl, shared.
name = "icu4c"
version = "77.1"
license = "MIT"
[source]
tarball = "https://github.com/unicode-org/icu/releases/download/release-77-1/icu4c-77_1-src.tgz"
sha256 = "588e431f77327c39031ffbb8843c0e3bc122c211374485fa87dc5f3faff24061"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
flags = []
[build.phases]
configure = '''
cd source && ./configure --prefix=/usr --enable-shared --disable-static \
--disable-samples --disable-tests
'''
compile = "cd source && make -j\"$(nproc)\""
install = "cd source && make install DESTDIR=/out"
[deps]
build = ["pkgconf", "python3"]
@@ -1,25 +0,0 @@
# 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"
license = "MIT"
[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"]
-96
View File
@@ -1,96 +0,0 @@
# lua 5.4.8 — el intérprete y **la librería compartida**, que es lo que hace falta acá.
#
# POR QUÉ ENTRA: `wireplumber` —el gestor de sesión de PipeWire, sin el cual PipeWire acepta clientes
# pero no enumera ni enruta dispositivos— tiene su política escrita EN LUA y embebe un intérprete
# (`lib/wplua`). Su `subprojects/lua.wrap` DESCARGA Lua 5.5 de lua.org, cosa imposible en el sandbox
# hermético (`--wrap-mode=nodownload`), así que va con `-Dsystem-lua=true` y el sistema tiene que
# tener Lua. Su meson acepta 5.5, 5.4 o 5.3 (meson.build:91-95); se elige **5.4**, la serie estable
# larga que usan las distros, en vez de la 5.5 del wrap.
#
# ══ LO QUE ESTA RECETA TIENE QUE INVENTAR, porque upstream no lo da ═════════════════════════════
# El Makefile de Lua sólo produce `liblua.a` y los binarios. **No hay regla de `.so` ni fichero
# pkg-config**: los agrega cada distro. Acá se agregan las dos cosas, y a mano, porque no hay dónde
# copiarlas de:
#
# 1. `-fPIC` en `MYCFLAGS`. Sin esto la `.a` no es reubicable y `libwplua` —que es un objeto
# compartido— no linkea: es la regla del corpus sobre `.a` no-PIC dentro de un `.so`
# («relocation R_X86_64_32 … recompile with -fPIC»), la misma que obligó a las variantes
# `-shared` de zlib, sqlite, libxml2, libuuid y dbus.
# 2. La `.so` se enlaza a mano desde la `.a` con `--whole-archive`, porque una librería estática sólo
# aporta los objetos que alguien referencia y acá hay que llevárselos TODOS. SONAME
# `liblua-5.4.so.0`, que es el que graba quien enlace.
# 3. El `.pc` se escribe acá. El nombre importa: wireplumber prueba `lua-5.4`, `lua5.4` y `lua54` en
# ese orden, así que el fichero se llama `lua5.4.pc` y ADEMÁS se deja `lua-5.4.pc` y `lua.pc` como
# enlaces — es más barato satisfacer las tres convenciones que adivinar cuál buscará el próximo
# consumidor.
#
# `-DLUA_USE_LINUX` es lo que activa `dlopen` y el resto de POSIX; sin él Lua se compila en modo ANSI
# genérico y `require` de módulos C no funciona. **SIN readline a propósito**: sólo lo usa el REPL
# interactivo, y el ncurses del catálogo es static-only y arrastra `-static` al link (el mismo
# problema que hizo saltar `pw-top` en la receta de pipewire).
#
# `SYSLIBS` pierde el `-Wl,-E` de upstream: exportar todos los símbolos del EJECUTABLE sirve para que
# módulos C cargados por `require` vean la API de Lua, y acá el que exporta es la `.so`.
name = "lua"
version = "5.4.8"
license = "MIT"
[source]
tarball = "https://www.lua.org/ftp/lua-5.4.8.tar.gz"
sha256 = "4f18ddae154e793e46eeab727c59ef1c0c0c2b744e7b94219710d76f530629ae"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
[build.phases]
configure = "true"
compile = '''
set -e
# CC se pasa explícito: el Makefile de Lua lo fija a `gcc -std=gnu99` en la línea 9 y ganaría sobre el
# del entorno.
make -C src all CC="hammer-zig-cc -std=gnu99" \
SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-ldl" MYCFLAGS="-fPIC"
# La .so que upstream no construye. --whole-archive porque de una estática el linker sólo se lleva lo
# referenciado, y acá hay que llevárselo todo.
hammer-zig-cc -shared -o src/liblua-5.4.so.0.0.0 \
-Wl,-soname,liblua-5.4.so.0 \
-Wl,--whole-archive src/liblua.a -Wl,--no-whole-archive -lm
'''
install = '''
set -e
mkdir -p /out/usr/bin /out/usr/lib/pkgconfig /out/usr/include /out/usr/share/man/man1
install -m755 src/lua /out/usr/bin/lua5.4
install -m755 src/luac /out/usr/bin/luac5.4
ln -s lua5.4 /out/usr/bin/lua
ln -s luac5.4 /out/usr/bin/luac
install -m644 src/lua.h src/luaconf.h src/lualib.h src/lauxlib.h src/lua.hpp /out/usr/include/
install -m644 src/liblua.a /out/usr/lib/liblua-5.4.a
install -m755 src/liblua-5.4.so.0.0.0 /out/usr/lib/
ln -s liblua-5.4.so.0.0.0 /out/usr/lib/liblua-5.4.so.0
ln -s liblua-5.4.so.0 /out/usr/lib/liblua-5.4.so
ln -s liblua-5.4.so /out/usr/lib/liblua.so
cat > /out/usr/lib/pkgconfig/lua5.4.pc <<'PC'
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
INTERPRETER=${exec_prefix}/bin/lua5.4
COMPILER=${exec_prefix}/bin/luac5.4
Name: Lua
Description: Lua language engine
Version: 5.4.8
Requires:
Libs: -L${libdir} -llua-5.4 -lm
Cflags: -I${includedir}
PC
# Las tres convenciones de nombre que se usan por ahí; wireplumber prueba lua-5.4, lua5.4 y lua54.
ln -s lua5.4.pc /out/usr/lib/pkgconfig/lua-5.4.pc
ln -s lua5.4.pc /out/usr/lib/pkgconfig/lua54.pc
ln -s lua5.4.pc /out/usr/lib/pkgconfig/lua.pc
'''
[deps]
build = ["make", "pkgconf"]
-24
View File
@@ -1,24 +0,0 @@
# 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"]
-27
View File
@@ -1,27 +0,0 @@
# icu4c 77.1 — International Components for Unicode (libicuuc/libicui18n/libicudata.so). Dep transitiva
# del stack Qt/KDE (ki18n opcional, libqalculate opcional, apps con colación Unicode). C++ autotools;
# el tarball descomprime a `icu/source/` → todas las fases entran con `cd source`. musl, shared.
name = "icu4c"
version = "77.1"
license = "MIT"
[source]
tarball = "https://github.com/unicode-org/icu/releases/download/release-77-1/icu4c-77_1-src.tgz"
sha256 = "588e431f77327c39031ffbb8843c0e3bc122c211374485fa87dc5f3faff24061"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "dynamic"
flags = []
[build.phases]
configure = '''
cd source && ./configure --prefix=/usr --enable-shared --disable-static \
--disable-samples --disable-tests
'''
compile = "cd source && make -j\"$(nproc)\""
install = "cd source && make install DESTDIR=/out"
[deps]
build = ["pkgconf", "python3"]
-24
View File
@@ -1,24 +0,0 @@
# 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"]
-25
View File
@@ -1,25 +0,0 @@
# 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"
license = "MIT"
[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"]
@@ -1,3 +1,13 @@
# ══ PROMOVIDA AL CORPUS DESDE LAS COLAS (2026-09-08) ═══════════════════════════════════════════
# Existía IDÉNTICA byte a byte en 4 colas de escritorio (cosmic,gnome,kde,wlr), con el MISMO
# ArtifactHash en todas — verificado con `hammer hash` antes de mover, no deducido del nombre.
# Sube al corpus por la razón que ya escribió `xkeyboard-config`: una receta resuelve sibling-first
# y después el catálogo PADRE, nunca una cola hermana, así que **lo que comparten varias imágenes
# tiene que vivir acá o no lo alcanzan**. Aquí lo comparten 4.
#
# A diferencia de aquella, las copias de las colas SÍ se barren en el mismo movimiento: sin copia en
# el corpus no había dónde caer, y dejarlas sería mantener 4 ficheros que son el mismo hash.
# Cero rebuilds: el hash no se mueve, sólo cambia de dónde lo resuelve cada consumidor.
# 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
@@ -1,3 +1,13 @@
# ══ PROMOVIDA AL CORPUS DESDE LAS COLAS (2026-09-08) ═══════════════════════════════════════════
# Existía IDÉNTICA byte a byte en 2 colas de escritorio (cosmic,gnome), con el MISMO
# ArtifactHash en todas — verificado con `hammer hash` antes de mover, no deducido del nombre.
# Sube al corpus por la razón que ya escribió `xkeyboard-config`: una receta resuelve sibling-first
# y después el catálogo PADRE, nunca una cola hermana, así que **lo que comparten varias imágenes
# tiene que vivir acá o no lo alcanzan**. Aquí lo comparten 2.
#
# A diferencia de aquella, las copias de las colas SÍ se barren en el mismo movimiento: sin copia en
# el corpus no había dónde caer, y dejarlas sería mantener 2 ficheros que son el mismo hash.
# Cero rebuilds: el hash no se mueve, sólo cambia de dónde lo resuelve cada consumidor.
# libelogind — la C-ABI `sd-login` que le faltaba a la distro, implementada en arje-compat.
#
# QUÉ RESUELVE: mutter (y polkit, gcr, at-spi2-core) exigen un proveedor de logind por pkg-config —
@@ -1,3 +1,13 @@
# ══ PROMOVIDA AL CORPUS DESDE LAS COLAS (2026-09-08) ═══════════════════════════════════════════
# Existía IDÉNTICA byte a byte en 2 colas de escritorio (cosmic,gnome), con el MISMO
# ArtifactHash en todas — verificado con `hammer hash` antes de mover, no deducido del nombre.
# Sube al corpus por la razón que ya escribió `xkeyboard-config`: una receta resuelve sibling-first
# y después el catálogo PADRE, nunca una cola hermana, así que **lo que comparten varias imágenes
# tiene que vivir acá o no lo alcanzan**. Aquí lo comparten 2.
#
# A diferencia de aquella, las copias de las colas SÍ se barren en el mismo movimiento: sin copia en
# el corpus no había dónde caer, y dejarlas sería mantener 2 ficheros que son el mismo hash.
# Cero rebuilds: el hash no se mueve, sólo cambia de dónde lo resuelve cada consumidor.
# lua 5.4.8 — el intérprete y **la librería compartida**, que es lo que hace falta acá.
#
# POR QUÉ ENTRA: `wireplumber` —el gestor de sesión de PipeWire, sin el cual PipeWire acepta clientes