tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1572Shell 203Rust 109Markdown 993728 Definiciones

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

1da68517753839228c513153ef3b953c332d7221 · por Sergio · (hace 1 mes) · padre 854b839ae · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

9 archivos · +221 −65

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"]