gnome: enciende la CAPA GRAFO del yupana-gnome

build-state.py gana --gnome (análogo a --kde): carga recipes/incoming-gnome/ y sale
a build-state-gnome.json. drenar/yupana/seed-graph aprenden ese grafo (keystones,
drenar --perfil escritorio-gnome, radio de nodos incoming-gnome, frontera). Hoy la
cola está vacía ⇒ el grafo trae 0 nodos gnome; se poblará al aterrizar recetas y ahí
drenar/keystones reckonan solos.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-23 16:05:40 -04:00
co-authored by Claude Opus 4.8
parent 0b333b4c9e
commit d33fc94fc5
5 changed files with 13646 additions and 6 deletions
File diff suppressed because it is too large Load Diff
+7 -2
View File
@@ -52,8 +52,13 @@ CHECK = "--check" in sys.argv
# igual que hace el sandbox al resolver deps (sibling-first), así el grafo modela lo que un build KDE # igual que hace el sandbox al resolver deps (sibling-first), así el grafo modela lo que un build KDE
# ve. Sale a un JSON aparte para no mezclar los totales del corpus enviable con el frente en curso. # ve. Sale a un JSON aparte para no mezclar los totales del corpus enviable con el frente en curso.
KDE = "--kde" in sys.argv KDE = "--kde" in sys.argv
EXTRA_QUEUES = ["recipes/incoming-kde"] if KDE else [] # `--gnome`: idéntico a `--kde` pero para la cola `recipes/incoming-gnome/` (frente GNOME Wayland).
OUT = ROOT / ("docs/state/build-state-kde.json" if KDE else "docs/state/build-state.json") # Enciende la CAPA GRAFO del yupana-gnome: sin esto el perfil escritorio-gnome se saltaba (cola no
# cargada) y `yupana keystones/drenar --perfil escritorio-gnome` no reckonaban. Sale a su JSON aparte.
GNOME = "--gnome" in sys.argv
EXTRA_QUEUES = (["recipes/incoming-kde"] if KDE else []) + (["recipes/incoming-gnome"] if GNOME else [])
_var = "-kde" if KDE else "-gnome" if GNOME else ""
OUT = ROOT / f"docs/state/build-state{_var}.json"
# Clase de la receta — sólo para colorear/agrupar la vista; heurística por contenido, no dato duro. # Clase de la receta — sólo para colorear/agrupar la vista; heurística por contenido, no dato duro.
GUI_RE = ("cairo", "pango", "gtk", "harfbuzz", "glib", "gdk-pixbuf", "libadwaita", "gtksourceview", GUI_RE = ("cairo", "pango", "gtk", "harfbuzz", "glib", "gdk-pixbuf", "libadwaita", "gtksourceview",
+2 -1
View File
@@ -28,7 +28,8 @@ import json, sys
from pathlib import Path from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent ROOT = Path(__file__).resolve().parent.parent
GRAFOS = ["docs/state/build-state.json", "docs/state/build-state-kde.json"] GRAFOS = ["docs/state/build-state.json", "docs/state/build-state-kde.json",
"docs/state/build-state-gnome.json"]
SEMILLA = ROOT / "docs/state/seed-edges.json" SEMILLA = ROOT / "docs/state/seed-edges.json"
EN_DEUDA = ("debt", "never", "unhashable", "wanted") EN_DEUDA = ("debt", "never", "unhashable", "wanted")
+2 -1
View File
@@ -342,7 +342,8 @@ def frontera(recs, perfil):
except Exception: except Exception:
cola = "corpus" cola = "corpus"
en_perfil, grafo_usado = [], None en_perfil, grafo_usado = [], None
for f in ("docs/state/build-state.json", "docs/state/build-state-kde.json"): for f in ("docs/state/build-state.json", "docs/state/build-state-kde.json",
"docs/state/build-state-gnome.json"):
p = ROOT / f p = ROOT / f
if not p.exists(): if not p.exists():
continue continue
+5 -2
View File
@@ -346,7 +346,8 @@ def keystones(como_json=False):
perfiles = targets_mod.load() perfiles = targets_mod.load()
# estados desde el khipu más completo # estados desde el khipu más completo
estados = {} estados = {}
for f in ("docs/state/build-state-kde.json", "docs/state/build-state.json"): for f in ("docs/state/build-state-kde.json", "docs/state/build-state-gnome.json",
"docs/state/build-state.json"):
p = ROOT / f p = ROOT / f
if p.exists(): if p.exists():
for n, r in json.loads(p.read_text())["nodes"].items(): for n, r in json.loads(p.read_text())["nodes"].items():
@@ -618,7 +619,9 @@ def membresia(colas=None, perfiles=None):
def _estado(nodo): def _estado(nodo):
"""Estado del nudo desde el grafo firme, si está regenerado. Best-effort: el radio funciona sin él.""" """Estado del nudo desde el grafo firme, si está regenerado. Best-effort: el radio funciona sin él."""
q, nombre = nodo q, nombre = nodo
fichero = "docs/state/build-state-kde.json" if q != "corpus" else "docs/state/build-state.json" fichero = ("docs/state/build-state-gnome.json" if q == "incoming-gnome"
else "docs/state/build-state-kde.json" if q != "corpus"
else "docs/state/build-state.json")
try: try:
d = json.loads((ROOT / fichero).read_text()) d = json.loads((ROOT / fichero).read_text())
return d["nodes"].get(nombre, {}).get("state", "?") return d["nodes"].get(nombre, {}).get("state", "?")