bash-completion: cerrar el hueco del tabulador
bash es RAÍZ del perfil base —el shell de la distro— y cinco recetas repartidas en cuatro colas (appstream, colord, gnome-shell, modemmanager, swayimg) instalan completados en el directorio que este paquete define. Sin él NO los instalan y siguen adelante: nada falla, nadie se entera, y el usuario se queda sin tabulador en las herramientas del sistema. Hueco de RUNTIME puro, de los que ninguna métrica de deuda puede ver — por eso hizo falta la frontera para encontrarlo. Va al CORPUS y como raíz de , no a una cola: lo alcanzan las cuatro imágenes de escritorio y la CLI, y una receta resuelve sibling-first y después el catálogo padre, nunca una cola hermana. Y entra como RAÍZ porque nadie lo alcanza por deps de build: los consumidores sólo preguntan por su .pc. Verificado como consumidor, las dos mitades: pkgconf --variable=completionsdir bash-completion → /usr/share/bash-completion/completions el marco carga 131 completados y complete devuelve regla · 522 ficheros instalados REPRODUCE bit a bit · tarball en el mirror Triaje: los huecos vuelven a CERO. base pasa de 26 a 27 raíces, clausura 58/58 sellada. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014QPJteswQvP1L7zSBrQQe2
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
9 qillqakuna · +221 −65
- docs/state/build-state-cosmic.json +35 −12
- docs/state/build-state-gnome.json +35 −12
- docs/state/build-state-kde.json +35 −12
- docs/state/build-state-wlr.json +38 −15
- docs/state/build-state.json +35 −12
- docs/state/frontera-triaje.toml +2 −1
- docs/state/repro-verificado.tsv +1 −0
- docs/state/targets.toml +5 −1
- recipes/bash-completion.toml +35 −0
diff --git a/docs/state/build-state-cosmic.json b/docs/state/build-state-cosmic.json
index 29af054f..44eeffc1 100644
--- a/docs/state/build-state-cosmic.json
+++ b/docs/state/build-state-cosmic.json
@@ -1,14 +1,14 @@
{
"schema": "hammer-build-state/1",
"totals": {
- "recipes": 892,
- "nodes": 894,
- "sealed": 892,
+ "recipes": 893,
+ "nodes": 895,
+ "sealed": 893,
"ajeno": 2
},
"by_class": {
"ajeno": 2,
- "c": 230,
+ "c": 231,
"go": 362,
"gui": 41,
"kernel": 6,
@@ -17,7 +17,7 @@
"debt_by_class": {},
"by_queue": {
"corpus": {
- "sealed": 864,
+ "sealed": 865,
"ajeno": 2
},
"incoming-cosmic": {
@@ -26,14 +26,14 @@
},
"by_profile": {
"base": {
- "raices": 26,
- "clausura": 57,
- "sealed": 57
+ "raices": 27,
+ "clausura": 58,
+ "sealed": 58
},
"cli": {
- "raices": 46,
- "clausura": 80,
- "sealed": 80
+ "raices": 47,
+ "clausura": 81,
+ "sealed": 81
},
"escritorio-cosmic": {
"raices": 42,
@@ -874,6 +874,29 @@
"escritorio-cosmic",
"escritorio-sway"
],
+ "dependientes_total": 1
+ },
+ "bash-completion": {
+ "iname": "bash-completion",
+ "version": "2.18.0",
+ "link": "dynamic",
+ "compiler": "zig-cc",
+ "deps": [
+ "bash",
+ "pkgconf"
+ ],
+ "cls": "c",
+ "queue": "corpus",
+ "foreign": false,
+ "hash": "b3:86e9716873c35d1e8a4bc1b6317d3f37d5bc7b3d7c12132ae3a3ee7a24bcebaf",
+ "state": "sealed",
+ "blocked_by": [],
+ "unblocks": 0,
+ "perfiles": [
+ "base",
+ "cli",
+ "escritorio-sway"
+ ],
"dependientes_total": 0
},
"bat": {
@@ -13204,7 +13227,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 393
+ "dependientes_total": 394
},
"plow": {
"iname": "plow",
diff --git a/docs/state/build-state-gnome.json b/docs/state/build-state-gnome.json
index fa7dcb77..f842cc2e 100644
--- a/docs/state/build-state-gnome.json
+++ b/docs/state/build-state-gnome.json
@@ -1,14 +1,14 @@
{
"schema": "hammer-build-state/1",
"totals": {
- "recipes": 918,
- "nodes": 920,
- "sealed": 918,
+ "recipes": 919,
+ "nodes": 921,
+ "sealed": 919,
"ajeno": 2
},
"by_class": {
"ajeno": 2,
- "c": 270,
+ "c": 271,
"go": 362,
"gui": 47,
"kernel": 6,
@@ -17,7 +17,7 @@
"debt_by_class": {},
"by_queue": {
"corpus": {
- "sealed": 855,
+ "sealed": 856,
"ajeno": 2
},
"incoming-gnome": {
@@ -26,14 +26,14 @@
},
"by_profile": {
"base": {
- "raices": 26,
- "clausura": 56,
- "sealed": 56
+ "raices": 27,
+ "clausura": 57,
+ "sealed": 57
},
"cli": {
- "raices": 46,
- "clausura": 79,
- "sealed": 79
+ "raices": 47,
+ "clausura": 80,
+ "sealed": 80
},
"escritorio-gnome": {
"raices": 23,
@@ -966,6 +966,29 @@
"escritorio-cosmic",
"escritorio-sway"
],
+ "dependientes_total": 1
+ },
+ "bash-completion": {
+ "iname": "bash-completion",
+ "version": "2.18.0",
+ "link": "dynamic",
+ "compiler": "zig-cc",
+ "deps": [
+ "bash",
+ "pkgconf"
+ ],
+ "cls": "c",
+ "queue": "corpus",
+ "foreign": false,
+ "hash": "b3:86e9716873c35d1e8a4bc1b6317d3f37d5bc7b3d7c12132ae3a3ee7a24bcebaf",
+ "state": "sealed",
+ "blocked_by": [],
+ "unblocks": 0,
+ "perfiles": [
+ "base",
+ "cli",
+ "escritorio-sway"
+ ],
"dependientes_total": 0
},
"bat": {
@@ -14033,7 +14056,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 393
+ "dependientes_total": 394
},
"plow": {
"iname": "plow",
diff --git a/docs/state/build-state-kde.json b/docs/state/build-state-kde.json
index fe42851a..c914f151 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": 1043,
- "nodes": 1044,
- "sealed": 1043,
+ "recipes": 1044,
+ "nodes": 1045,
+ "sealed": 1044,
"ajeno": 1
},
"by_class": {
"ajeno": 1,
- "c": 397,
+ "c": 398,
"go": 362,
"gui": 45,
"kernel": 6,
@@ -17,7 +17,7 @@
"debt_by_class": {},
"by_queue": {
"corpus": {
- "sealed": 850,
+ "sealed": 851,
"ajeno": 1
},
"incoming-kde": {
@@ -26,14 +26,14 @@
},
"by_profile": {
"base": {
- "raices": 26,
- "clausura": 52,
- "sealed": 52
+ "raices": 27,
+ "clausura": 53,
+ "sealed": 53
},
"cli": {
- "raices": 46,
- "clausura": 75,
- "sealed": 75
+ "raices": 47,
+ "clausura": 76,
+ "sealed": 76
},
"escritorio-kde": {
"raices": 47,
@@ -992,6 +992,29 @@
"escritorio-cosmic",
"escritorio-sway"
],
+ "dependientes_total": 1
+ },
+ "bash-completion": {
+ "iname": "bash-completion",
+ "version": "2.18.0",
+ "link": "dynamic",
+ "compiler": "zig-cc",
+ "deps": [
+ "bash",
+ "pkgconf"
+ ],
+ "cls": "c",
+ "queue": "corpus",
+ "foreign": false,
+ "hash": "b3:86e9716873c35d1e8a4bc1b6317d3f37d5bc7b3d7c12132ae3a3ee7a24bcebaf",
+ "state": "sealed",
+ "blocked_by": [],
+ "unblocks": 0,
+ "perfiles": [
+ "base",
+ "cli",
+ "escritorio-sway"
+ ],
"dependientes_total": 0
},
"bat": {
@@ -18038,7 +18061,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 393
+ "dependientes_total": 394
},
"plasma-activities": {
"iname": "plasma-activities",
diff --git a/docs/state/build-state-wlr.json b/docs/state/build-state-wlr.json
index 067591da..faf9c48e 100644
--- a/docs/state/build-state-wlr.json
+++ b/docs/state/build-state-wlr.json
@@ -1,14 +1,14 @@
{
"schema": "hammer-build-state/1",
"totals": {
- "recipes": 877,
- "nodes": 879,
- "sealed": 877,
+ "recipes": 878,
+ "nodes": 880,
+ "sealed": 878,
"ajeno": 2
},
"by_class": {
"ajeno": 2,
- "c": 235,
+ "c": 236,
"go": 362,
"gui": 41,
"kernel": 6,
@@ -17,7 +17,7 @@
"debt_by_class": {},
"by_queue": {
"corpus": {
- "sealed": 865,
+ "sealed": 866,
"ajeno": 2
},
"incoming-wlr": {
@@ -26,14 +26,14 @@
},
"by_profile": {
"base": {
- "raices": 26,
- "clausura": 57,
- "sealed": 57
+ "raices": 27,
+ "clausura": 58,
+ "sealed": 58
},
"cli": {
- "raices": 46,
- "clausura": 80,
- "sealed": 80
+ "raices": 47,
+ "clausura": 81,
+ "sealed": 81
},
"escritorio-mirada": {
"raices": 17,
@@ -41,9 +41,9 @@
"sealed": 41
},
"escritorio-sway": {
- "raices": 74,
- "clausura": 203,
- "sealed": 203
+ "raices": 75,
+ "clausura": 204,
+ "sealed": 204
}
},
"sin_perfil": 648,
@@ -874,6 +874,29 @@
"escritorio-cosmic",
"escritorio-sway"
],
+ "dependientes_total": 1
+ },
+ "bash-completion": {
+ "iname": "bash-completion",
+ "version": "2.18.0",
+ "link": "dynamic",
+ "compiler": "zig-cc",
+ "deps": [
+ "bash",
+ "pkgconf"
+ ],
+ "cls": "c",
+ "queue": "corpus",
+ "foreign": false,
+ "hash": "b3:86e9716873c35d1e8a4bc1b6317d3f37d5bc7b3d7c12132ae3a3ee7a24bcebaf",
+ "state": "sealed",
+ "blocked_by": [],
+ "unblocks": 0,
+ "perfiles": [
+ "base",
+ "cli",
+ "escritorio-sway"
+ ],
"dependientes_total": 0
},
"bat": {
@@ -12830,7 +12853,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 393
+ "dependientes_total": 394
},
"plow": {
"iname": "plow",
diff --git a/docs/state/build-state.json b/docs/state/build-state.json
index 750b1307..6f3f5042 100644
--- a/docs/state/build-state.json
+++ b/docs/state/build-state.json
@@ -1,14 +1,14 @@
{
"schema": "hammer-build-state/1",
"totals": {
- "recipes": 866,
- "nodes": 868,
- "sealed": 866,
+ "recipes": 867,
+ "nodes": 869,
+ "sealed": 867,
"ajeno": 2
},
"by_class": {
"ajeno": 2,
- "c": 224,
+ "c": 225,
"go": 362,
"gui": 41,
"kernel": 6,
@@ -17,20 +17,20 @@
"debt_by_class": {},
"by_queue": {
"corpus": {
- "sealed": 866,
+ "sealed": 867,
"ajeno": 2
}
},
"by_profile": {
"base": {
- "raices": 26,
- "clausura": 57,
- "sealed": 57
+ "raices": 27,
+ "clausura": 58,
+ "sealed": 58
},
"cli": {
- "raices": 46,
- "clausura": 80,
- "sealed": 80
+ "raices": 47,
+ "clausura": 81,
+ "sealed": 81
},
"escritorio-mirada": {
"raices": 17,
@@ -866,6 +866,29 @@
"escritorio-cosmic",
"escritorio-sway"
],
+ "dependientes_total": 1
+ },
+ "bash-completion": {
+ "iname": "bash-completion",
+ "version": "2.18.0",
+ "link": "dynamic",
+ "compiler": "zig-cc",
+ "deps": [
+ "bash",
+ "pkgconf"
+ ],
+ "cls": "c",
+ "queue": "corpus",
+ "foreign": false,
+ "hash": "b3:86e9716873c35d1e8a4bc1b6317d3f37d5bc7b3d7c12132ae3a3ee7a24bcebaf",
+ "state": "sealed",
+ "blocked_by": [],
+ "unblocks": 0,
+ "perfiles": [
+ "base",
+ "cli",
+ "escritorio-sway"
+ ],
"dependientes_total": 0
},
"bat": {
@@ -12713,7 +12736,7 @@
"escritorio-mirada",
"escritorio-sway"
],
- "dependientes_total": 393
+ "dependientes_total": 394
},
"plow": {
"iname": "plow",
diff --git a/docs/state/frontera-triaje.toml b/docs/state/frontera-triaje.toml
index 730f2b70..df701069 100644
--- a/docs/state/frontera-triaje.toml
+++ b/docs/state/frontera-triaje.toml
@@ -168,8 +168,9 @@ perfiles = ["escritorio-kde"]
piden = ["dolphin"]
[candidato."bash-completion"]
-veredicto = "hueco"
+veredicto = "provisto"
sugerencia = "hueco?"
+provee = "bash-completion"
porque = "lo piden 5 recetas de la imagen — difícil que sea accesorio"
perfiles = ["escritorio-cosmic", "escritorio-gnome", "escritorio-kde", "escritorio-sway"]
piden = ["appstream", "colord", "gnome-shell", "modemmanager", "swayimg"]
diff --git a/docs/state/repro-verificado.tsv b/docs/state/repro-verificado.tsv
index 313adb1e..ef646c09 100644
--- a/docs/state/repro-verificado.tsv
+++ b/docs/state/repro-verificado.tsv
@@ -67,3 +67,4 @@ libxkbfile 529bace3f42db52bac31f369f2e336f674c9621c3f61032e9ed3dbd2e35a33ba 2026
libXfont2 297f66a9b864360a53e1495199c3f53c04c78db2616df8da6e37c5dbef87eb32 2026-09-08 reproduce
xkbcomp ae4a27e7b8b6672ba0ffd2ddba8127f4b5f84b50358b0c3337d0bf0281873225 2026-09-08 reproduce
xwayland d43f7ba02a1f9f4b2cf01e1d03610020779991fb13adbd804f5dd3007244bf3d 2026-09-08 reproduce
+bash-completion 86e9716873c35d1e8a4bc1b6317d3f37d5bc7b3d7c12132ae3a3ee7a24bcebaf 2026-09-09 reproduce
diff --git a/docs/state/targets.toml b/docs/state/targets.toml
index 0ef51d57..700d730d 100644
--- a/docs/state/targets.toml
+++ b/docs/state/targets.toml
@@ -24,7 +24,11 @@ descripcion = "userland foundational C: la distro arranca y se usa (shell, VCS,
# Lift verbatim de BASE_SYSTEM_PKGS (scripts/product-userland-from-repo.sh). De-Alpinizado y firmado,
# tandas base-system-1..3.
paquetes = [
- "bash", "git", "sudo", "doas", "util-linux", "shadow", "kbd", "procps-ng",
+ # `bash-completion` (2026-09-09): el tabulador de las herramientas del sistema. Entra como raíz
+ # porque NADIE lo alcanza por deps de build — los paquetes que instalan completados sólo preguntan
+ # por su `.pc` y, si no está, se saltan la instalación en silencio. Es un hueco de RUNTIME puro,
+ # de los que ninguna métrica de deuda puede ver. Salió del triaje de la frontera con 5 consumidores.
+ "bash", "bash-completion", "git", "sudo", "doas", "util-linux", "shadow", "kbd", "procps-ng",
"iproute2", "iputils", "dhcpcd", "e2fsprogs", "dosfstools", "parted", "rsync",
"sed", "tzdata", "vim", "dbus", "ca-certificates", "gnupg", "lsof", "strace",
"pciutils", "usbutils", "mandoc",
diff --git a/recipes/bash-completion.toml b/recipes/bash-completion.toml
new file mode 100644
index 00000000..c312374a
--- /dev/null
+++ b/recipes/bash-completion.toml
@@ -0,0 +1,35 @@
+# bash-completion 2.18.0 — el marco de completado programable de bash: el tabulador que completa
+# subcomandos, opciones y argumentos de las herramientas del sistema.
+#
+# POR QUÉ AL CORPUS Y NO A UNA COLA. `bash` es RAÍZ del perfil `base`, o sea el shell de la distro
+# entera, y las recetas que instalan completados viven repartidas en cuatro colas (appstream y colord
+# en gnome, gnome-shell, modemmanager, swayimg en wlr). Lo que comparten varias imágenes vive en el
+# corpus o no lo alcanzan — una receta resuelve sibling-first y después el catálogo PADRE, nunca una
+# cola hermana.
+#
+# POR QUÉ ERA UN HUECO INVISIBLE. Ningún build lo necesita: los paquetes preguntan por
+# `pkg-config --variable=completionsdir bash-completion` y, si no está, **no instalan sus completados
+# y siguen adelante**. Nada falla, nadie se entera, y el usuario se queda sin tabulador. Salió en el
+# triaje de la frontera (2026-09-09) con 5 consumidores; ver docs/state/frontera-triaje.toml.
+name = "bash-completion"
+version = "2.18.0"
+license = "GPL-2.0-or-later"
+
+[source]
+tarball = "https://github.com/scop/bash-completion/releases/download/2.18.0/bash-completion-2.18.0.tar.xz"
+sha256 = "88bcf85124f77f74f2f2f8bcd16ac4382d807a827ede742a64940c7116aea33f"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "dynamic"
+
+[build.phases]
+# Sin compilación real: instala scripts de shell y el `.pc` que los consumidores consultan para
+# saber DÓNDE dejar sus completados. `--disable-static` no aplica; no hay librería.
+configure = "./configure --prefix=/usr --sysconfdir=/etc"
+compile = "true"
+install = "make install DESTDIR=/out"
+
+[deps]
+build = ["pkgconf", "bash"]