el primer store-gc de la caja: 26,8 G liberados, y el patrón GNU-vs-busybox ya va por cinco
/store pasó de 84,7 G usados (91 %) a 57,9 G (62 %): 337 superados borrados y VERIFICADOS, 1657 → 1320 artefactos. Los 150 huérfanos (11,4 G) quedan intactos por diseño: son el único ejemplar de su nombre. EL CONTROL QUE NO ES OBVIO: 11 binarios de /usr/bin de esa caja son symlinks que apuntan DENTRO del store — los daemons instalados estos dos días. Un gc que borre el artefacto equivocado no rompe el store, rompe el /usr/bin de una máquina en producción. Comprobado antes (los 11 enlazan al hash vigente) y después (los 11 resuelven, 21 entes corriendo). Y el gc no sabía decir sus dos números: `du --files0-from=-` es GNU y busybox no lo tiene; `df -h /home` estaba cableado cuando el store vive en /store (sin /home, `tail -1` devolvía la CABECERA: de ahí «libres: Available → Available»). El primer arreglo también estaba mal —`xargs -d` es otra extensión GNU— y eso imprimió «huérfanos ?»: ese `?` es deliberado, un cero inventado habría dicho «no hay nada que ganar» con 11,4 G en huérfanos. Con `xargs -0` la caja ya contesta 11.4G. ⇒ Cinco tropiezos del mismo día con la misma forma (/dev/tcp, llaves, find -newermt, sustitución de procesos, y estos dos): un script del hub escrito en una máquina GNU no corre en la caja hasta que se prueba ahí. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
1 qillqakuna · +51 −0
diff --git a/docs/28-servidor-de-produccion.md b/docs/28-servidor-de-produccion.md
index b594053c..c03877b0 100644
--- a/docs/28-servidor-de-produccion.md
+++ b/docs/28-servidor-de-produccion.md
@@ -2616,6 +2616,57 @@ no se corrió allá.
⇒ **puerta 4 en verde.** Con eso, de las ocho quedan sólo las dos a medias (5 y 7) y ninguna en rojo.
+### 6.44 🧹 Primer `store-gc` en la caja: 26,8 G — y dos bugs que sólo salen fuera de GNU *(2026-09-17)*
+
+El store estaba al **91 %** (8,2 G libres) justo cuando la caja pasó a ser hub, que es la peor
+combinación: un hub sella y cosecha.
+
+```
+ antes: 84,7 G usados · 8,2 G libres · 91 % · 1657 artefactos
+ después: 57,9 G usados · 35,0 G libres · 62 % · 1320 artefactos
+```
+
+**337 artefactos superados borrados y verificados (0 sobrevivientes), 26,8 G.** El default del gc no
+toca los **150 huérfanos** —`11,4 G`, los que son el único ejemplar de su nombre— y eso está bien:
+borrarlos es la diferencia entre «se reconstruye en dos minutos» y «hay que rehacer la torre».
+
+#### El control que hay que correr DESPUÉS de un gc en esta caja, y que no es obvio
+
+**11 binarios de `/usr/bin` son symlinks que apuntan DENTRO del store** — los daemons que se
+instalaron estos dos días. Un gc que borre el artefacto equivocado no rompe el store: rompe el
+`/usr/bin` de una máquina en producción. Antes de `--aplicar` se comprobó que los 11 enlazan al hash
+**vigente** (y por lo tanto están en el conjunto protegido); después, que los 11 siguen resolviendo y
+que los 21 entes siguen corriendo. Los dos controles pasaron.
+
+⚠ Y la advertencia que el propio gc imprime y que en esa caja **no se puede satisfacer**: «sin
+`.config` legible (ni `/proc/config.gz` ni `/boot/config-…`) ⇒ NO se protege ningún kernel por esta
+vía». Con el default da igual; con `--huerfanos` en una máquina que arranca de su store, no.
+
+#### Los dos números que el gc no sabía decir
+
+Funcionó, pero sus dos cifras salieron vacías — y son las que uno mira para decidir si vale la pena:
+
+```
+ ==> espacio: superados · huérfanos
+ ==> 337 artefactos borrados y VERIFICADOS · libres: Available → Available
+```
+
+1. **`du -sch --files0-from=-` es de GNU y busybox no lo tiene** ⇒ `espacio()` devolvía vacío. *Un
+ número que falta se lee como un número chico.*
+2. **`df -h /home` estaba cableado** y el store no vive ahí: en gioser es un bind-mount del volumen,
+ en la caja es `/store`. Sin `/home`, `tail -1` se quedó con la CABECERA — de ahí
+ «Available → Available».
+
+Arreglados los dos… y el primer arreglo **también estaba mal**: `xargs -d '\n'` es otra extensión
+GNU. Eso imprimió `huérfanos ?`, y ese `?` es deliberado: cuando el total no se puede calcular, la
+función lo DICE en vez de escribir 0 — un cero inventado habría dicho «no hay nada que ganar» con
+11,4 G en huérfanos. Con `tr '\n' '\0' | xargs -0`, que busybox sí tiene, la caja ya contesta
+**`espacio: superados 0 · huérfanos 11.4G`**.
+
+⇒ Van **cinco** tropiezos del mismo día con la misma forma (`/dev/tcp`, expansión de llaves,
+`find -newermt`, sustitución de procesos, y estos dos). El patrón ya no es anécdota: **un script del
+hub escrito en una máquina GNU no corre en la caja hasta que se prueba ahí.**
+
## 7. Reusar los scripts que ya existen, y no escribir de nuevo
Pedido explícito del usuario. El inventario de lo que ya hace el trabajo: