estado+kde: el grafo ahora cubre la cola incoming-kde; base KDE desbloqueada en el laptop

MOTIVO: 'estábamos haciendo kde'. La cola recipes/incoming-kde/ (206 recetas) era punto ciego del
grafo (sólo miraba recipes/ top-level). Modo --kde: build-state.py/build-state-view.py cubren la cola
KDE (sombreando canónicas homónimas sibling-first, como el sandbox) → build-state-kde.{json,html}.

CAUSA de la deriva (193/206 en deuda): fui YO — esta sesión re-sellé pkgconf y samurai (arreglos
static), y 194 recetas KDE declaran pkgconf, 142 samurai ⇒ re-hash en cascada de todo el árbol. El
sistema determinista funcionando: cambia un input base, cascan los dependientes. Deuda legítima.

DESBLOQUEO (el 'GUI rompe en el laptop' era sólo cairo/pango, NO la base): construida en el laptop
toda la base KDE guiado por el orden de ataque del grafo — extra-cmake-modules, util-macros,
xorgproto, xcb-proto, wayland, libdrm, dbus, icu4c, util-linux, fontconfig, pixman, glib, freetype,
harfbuzz, fribidi, libXau/libXdmcp, la cadena X11 (xtrans/libxcb/libX11/libXext/libXrender/libXfixes/
libXi), la familia xcb-util, libxkbcommon, wayland-protocols, mesa (24.0.9 iris-only, sin LLVM), y
los -shared. KDE 9→39 selladas. qtbase (↑117, la raíz) quedó DESBLOQUEADO y compilando.

DISCO: el build llenó el disco (100%). Liberados 82G borrando work/sources (57G, se re-extrae solo)
y .farm-harvest (26G, verificado 100% redundante en el store, CAS).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 13:27:55 -04:00
co-authored by Claude Opus 4.8
parent a267cf4f48
commit ff79dc5e28
6 changed files with 22103 additions and 308 deletions
+16 -6
View File
@@ -8,14 +8,16 @@
# selladas está "lista para construir ya"; una con deps en deuda debe esperar. Ese es el uso
# accionable del orden topológico: qué atacar primero.
#
# Uso: scripts/build-state-view.py # regenera docs/state/build-state.html desde el JSON
import json, html
# Uso: scripts/build-state-view.py # corpus → docs/state/build-state.html
# scripts/build-state-view.py --kde # frente KDE → docs/state/build-state-kde.html
import json, html, sys
from pathlib import Path
from datetime import datetime, timezone
ROOT = Path(__file__).resolve().parent.parent
DATA = ROOT / "docs/state/build-state.json"
OUT = ROOT / "docs/state/build-state.html"
KDE = "--kde" in sys.argv
DATA = ROOT / ("docs/state/build-state-kde.json" if KDE else "docs/state/build-state.json")
OUT = ROOT / ("docs/state/build-state-kde.html" if KDE else "docs/state/build-state.html")
doc = json.loads(DATA.read_text())
nodes = doc["nodes"]
@@ -257,11 +259,19 @@ for c in sorted(classes, key=lambda c: -sum(classes[c].values())):
if deuda:
cls_btns += f'<button class="fbtn" data-cls="{c}" aria-pressed="false">{E(CLASS_ES.get(c,c))} ({deuda})</button>'
scope = "frente KDE" if KDE else "hammer"
by_queue = doc.get("by_queue", {})
queue_line = ""
if "incoming-kde" in by_queue and len(by_queue) > 1:
kq = by_queue["incoming-kde"]; kd = kq.get("debt", 0) + kq.get("never", 0)
queue_line = (f' · <b>cola KDE {kq.get("sealed",0)}/{sum(kq.values())} selladas</b>, '
f'{kd} en deuda')
HTML = f'''<style>{CSS}</style>
<div class="wrap">
<header>
<h1>estado del build <span class="mark">·</span> <span class="mono">hammer</span></h1>
<div class="sub">{n_total} recetas · grafo {E(topo)} · {E(orphan_note)} · <span class="mono">{E(gen_time)}</span></div>
<h1>estado del build <span class="mark">·</span> <span class="mono">{E(scope)}</span></h1>
<div class="sub">{n_total} recetas{queue_line} · grafo {E(topo)} · {E(orphan_note)} · <span class="mono">{E(gen_time)}</span></div>
</header>
<section>