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…

desplegar-strip: ordenar por IMPACTO EN EL GRAFO, no alfabéticamente

Medido sobre el corpus: **686 de 779 recetas son HOJAS** (cero dependientes transitivos) ⇒ el
88% se puede desplegar sin provocar UNA SOLA reconstrucción extra. Las caras son pocas y
conocidas: make 416 · pkgconf 360 · go 359 · binutils 343 · zlib 315 · python3 287 ·
samurai 272 · meson 257.

El orden alfabético anterior era activamente malo: la primera tanda de la etapa 4 tocó expat,
zstd y ncurses —tres bibliotecas base— y dejó 54 recetas sin artefacto vigente, incluida la
cadena wlroots/sway sellada la noche anterior. Sin este orden, cada tanda pequeña provoca una
cascada grande y la campaña avanza hacia atrás.

Hojas primero; las ~93 con dependientes, en una ola coordinada y con la granja arriba.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

040d174bbe1f4c91e918280d182d2397783b6725 · ruwaq sergio · (2 killa ñawpaq) · tayta d55e7c6e6 · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

1 qillqakuna · +38 −1

diff --git a/scripts/desplegar-strip.sh b/scripts/desplegar-strip.sh
index 5ca780eb..63e40a48 100755
--- a/scripts/desplegar-strip.sh
+++ b/scripts/desplegar-strip.sh
@@ -35,8 +35,45 @@ done
 
 EXCLUIDAS="binutils make"
 
+# ── ORDEN POR IMPACTO EN EL GRAFO, NO ALFABÉTICO ───────────────────────────────────────────────
+# Activar `strip_debug` re-hashea la receta Y, en cascada, todo lo que dependa de ella. La primera
+# tanda de la etapa 4 lo aprendió caro: tocar `expat`, `zstd` y `ncurses` —tres bibliotecas BASE—
+# dejó 54 recetas sin artefacto vigente, incluida la cadena wlroots/sway sellada la noche anterior.
+#
+# Medido sobre el corpus: **686 de 779 recetas son HOJAS** (cero dependientes transitivos) ⇒ el 88%
+# se puede desplegar sin provocar UNA SOLA reconstrucción extra. Las caras son pocas y conocidas:
+#   make 416 · pkgconf 360 · go 359 · binutils 343 · zlib 315 · python3 287 · samurai 272 · meson 257
+# ⇒ Hojas primero; las que tienen dependientes, en una ola coordinada y con la granja arriba.
+# Sin este orden, cada tanda pequeña provoca una cascada grande y la campaña avanza hacia atrás.
+CANDIDATAS_ORDENADAS=$(python3 - <<'PYEOF'
+import glob, re, collections, sys
+sys.setrecursionlimit(10000)
+deps, name_of = {}, {}
+for p in glob.glob('recipes/*.toml') + glob.glob('recipes/incoming-*/*.toml'):
+    s = open(p, encoding='utf-8', errors='replace').read()
+    m = re.search(r'^name\s*=\s*"([^"]+)"', s, re.M)
+    n = m.group(1) if m else p.split('/')[-1][:-5]
+    name_of[p] = n
+    d = set()
+    mb = re.search(r'^\[deps\](.*?)(?=^\[|\Z)', s, re.M | re.S)
+    if mb: d.update(re.findall(r'"([a-z0-9._+-]+)"', mb.group(1)))
+    deps.setdefault(n, set()).update(d)
+rev = collections.defaultdict(set)
+for n, ds in deps.items():
+    for d in ds: rev[d].add(n)
+def trans(n, visto=None):
+    if visto is None: visto = set()
+    for x in rev.get(n, ()):
+        if x not in visto: visto.add(x); trans(x, visto)
+    return visto
+filas = [(len(trans(n)), p) for p, n in name_of.items() if p.startswith('recipes/') and '/incoming-' not in p]
+filas.sort()
+print('\n'.join(p for _, p in filas))
+PYEOF
+)
+
 candidatas=""
-for f in recipes/*.toml; do
+for f in $CANDIDATAS_ORDENADAS; do
   [ -f "$f" ] || continue
   n=$(basename "$f" .toml)
   case " $EXCLUIDAS " in *" $n "*) continue ;; esac