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 1569Shell 203Rust 109Markdown 993728 Sutichaykuna

yupana: drenar reckona honesto un perfil sin cierre (guardián GNOME)

drenar --perfil escritorio-gnome erraba 'no encontré un grafo (¿corriste
build-state.py?)' — mentira: el grafo GNOME existe, pero NINGUNA raíz del perfil
(mutter/gnome-shell/gdm) está autorada ⇒ 0 nodos etiquetados con el perfil, y la
comprobación por etiqueta en cargar() fallaba. Dos correcciones:
  · cargar(): una cola NO-corpus identifica su grafo unívocamente ⇒ matchear por
    cola; la etiqueta sólo desambigua dentro de corpus (perfiles solapados).
  · main(): ámbito vacío con perfil ≠ 'imagen completa' — es 'SIN CIERRE todavía:
    0 raíces autoradas', y apunta a autorar top-down.
KDE (162 sellados) y corpus (769/4-deuda) sin regresión. El yupana-gnome queda
armado en las 4 capas: objetivo, radio/grafo, keystones y drenar.

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

afd867ea515962a48cf7071e23aabb60b5dc1f98 · ruwaq sergio · (3 killa ñawpaq) · tayta 9a028ba04 · kay commitpi sach'ata qhaway

Semántico sayk'uy · 2

scripts/drenar.py

  • ukhunpi t'ikrakurqan fn cargar
  • ukhunpi t'ikrakurqan fn main

1 qillqakuna · +15 −0

diff --git a/scripts/drenar.py b/scripts/drenar.py
index 69e8c145..b4a2eb9f 100755
--- a/scripts/drenar.py
+++ b/scripts/drenar.py
@@ -54,6 +54,14 @@ def cargar(perfil):
         d = json.loads(p.read_text())
         if cola not in (d.get("by_queue") or {}):
             continue
+        # Una cola NO-corpus identifica su grafo unívocamente (incoming-kde/gnome sólo viven en su
+        # propio grafo), así que basta con que la cola coincida. La comprobación por ETIQUETA de perfil
+        # sólo desambigua dentro de `corpus` (donde varios perfiles se solapan). Sin este atajo, un
+        # perfil cuyas RAÍCES aún no están autoradas (0 nodos etiquetados, p.ej. escritorio-gnome
+        # recién arrancado) no hallaba su grafo y drenar erraba "¿corriste build-state.py?" en vez de
+        # reckonar honestamente un perfil todavía sin cierre.
+        if cola != "corpus":
+            return d, f
         if perfil is None or any(perfil in (r.get("perfiles") or []) for r in d["nodes"].values()):
             return d, f
     return None, None
@@ -140,6 +148,13 @@ def main():
     print(f"== drenaje de {etiqueta} ({cual})")
     print(f"   {len(ambito)} nodos en ámbito · {len(deuda)} en deuda "
           f"({len(ambito)-len(deuda)} ya sellados)")
+    if perfil is not None and not ambito:
+        # Ámbito vacío = ninguna raíz del perfil está autorada ⇒ el perfil NO tiene cierre todavía
+        # (top-down sin arrancar). Distinto de "completa": completa tendría nodos sellados en ámbito.
+        # Puede haber recetas SUELTAS en la cola (leaves) que ninguna raíz alcanza aún.
+        print(f"   perfil SIN CIERRE todavía: 0 raíces autoradas — autorá desde las raíces "
+              f"declaradas en targets.toml (top-down feature-minimal), no al revés.")
+        return 0
     if not deuda:
         print("   nada que drenar: la imagen está completa.")
         return 0