el visor del grafo reventaba con un estado que no conocía

`build-state-view.py` traía los cuatro estados del corpus cableados (sealed/debt/never/unhashable) y
contaba TODOS los nodos contra ese diccionario. `build-state.py` emite dos más —`wanted` (hueco
declarado en targets.toml, sin receta) y `ajeno` (imagen de qorpa, que no se construye desde
fuente)—, así que el visor moría con `KeyError: 'ajeno'` y el tablero HTML llevaba sin poder
generarse. O sea: agregar un estado nuevo rompía el tablero entero, en silencio para quien no lo
corriera.

Ahora los de fuera del corpus se cuentan aparte y se NOMBRAN en la leyenda —no se cuelan a la barra,
que es sobre `totals["recipes"]` y pasaría del 100 %—, y cualquier estado que aparezca mañana cae en
esa misma rama en vez de tumbar el visor.

De paso, el grafo regenerado: 930 selladas, 2 en deuda, 5 nunca, 3 ajenas; git ya figura sellado en
su hash nuevo (b3:215742cb…) y no arrastró a nadie, como decía el radio.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-09-17 21:00:40 +00:00
co-authored by Claude Opus 5
parent d4896c2999
commit 5d16b55e14
3 changed files with 90 additions and 132 deletions
+49 -107
View File
@@ -102,6 +102,7 @@ td{padding:10px 14px;border-bottom:1px solid var(--line);vertical-align:top}
.chip.s-debt{background:var(--debt-bg);color:var(--debt);border-color:var(--debt)}
.chip.s-never{background:var(--never-bg);color:var(--never);border-color:var(--never)}
.chip.s-unhashable{background:var(--unhashable-bg);color:var(--unhashable);border-color:var(--unhashable)}
.chip.s-wanted,.chip.s-ajeno{background:var(--panel);color:var(--ink-2);border-color:var(--line)}
.chip.empty{color:var(--ink-2);font-style:italic}
.hint{color:var(--ink-2);font-size:.82rem;margin:0 0 14px}
.count{color:var(--ink-2);font-size:.82rem;margin-left:auto;font-family:ui-monospace,monospace}
@@ -113,31 +114,32 @@ footer .mono{color:var(--ink)}
<div class="wrap">
<header>
<h1>estado del build <span class="mark">·</span> <span class="mono">hammer</span></h1>
<div class="sub">768 recetas · grafo cierra sin ciclos · grafo cerrado · <span class="mono">2026-07-22 21:43 UTC</span></div>
<div class="sub">937 recetas · grafo cierra sin ciclos · grafo cerrado · <span class="mono">2026-09-17 21:00 UTC</span></div>
</header>
<section>
<p class="eyebrow">avance del corpus</p>
<div class="progress"><span class="seg s-sealed" style="width:97.91666666666667%" title="sellado al día: 752"></span><span class="seg s-debt" style="width:1.8229166666666667%" title="deuda de rebuild: 14"></span><span class="seg s-never" style="width:0.2604166666666667%" title="nunca construida: 2"></span></div>
<div class="progress"><span class="seg s-sealed" style="width:99.57310565635005%" title="sellado al día: 933"></span><span class="seg s-debt" style="width:0.10672358591248667%" title="deuda de rebuild: 1"></span><span class="seg s-never" style="width:0.32017075773745995%" title="nunca construida: 3"></span></div>
<div class="legend">
<span><span class="k s-sealed"></span><b>752</b> sellado al día</span>
<span><span class="k s-debt"></span><b>14</b> deuda de rebuild</span>
<span><span class="k s-never"></span><b>2</b> nunca construida</span>
<span><span class="k s-sealed"></span><b>933</b> sellado al día</span>
<span><span class="k s-debt"></span><b>1</b> deuda de rebuild</span>
<span><span class="k s-never"></span><b>3</b> nunca construida</span>
<span><b>3</b> imagen ajena (qorpa) (fuera del corpus)</span>
</div>
</section>
<section>
<div class="tiles"><div class="tile s-sealed">
<div class="tile-n">752</div>
<div class="tile-n">933</div>
<div class="tile-l">sellado al día</div>
<div class="tile-p">97.9%</div>
<div class="tile-p">99.6%</div>
</div><div class="tile s-debt">
<div class="tile-n">14</div>
<div class="tile-n">1</div>
<div class="tile-l">deuda de rebuild</div>
<div class="tile-p">1.8%</div>
<div class="tile-p">0.1%</div>
</div><div class="tile s-never">
<div class="tile-n">2</div>
<div class="tile-n">3</div>
<div class="tile-l">nunca construida</div>
<div class="tile-p">0.3%</div>
</div><div class="tile s-unhashable">
@@ -151,34 +153,34 @@ footer .mono{color:var(--ink)}
<p class="eyebrow">dónde está la deuda</p>
<div class="cls-grid"><div class="cls">
<div class="cls-head"><span class="cls-name">Go</span>
<span class="cls-tot">362</span></div>
<span class="cls-tot">366</span></div>
<div class="bar"><span class="seg s-sealed" style="width:100.0%"></span></div>
<div class="cls-foot"><span class="ok">362 al día</span>
<div class="cls-foot"><span class="ok">366 al día</span>
<span class="muted">0 en deuda</span></div>
</div><div class="cls">
<div class="cls-head"><span class="cls-name">Rust</span>
<span class="cls-tot">226</span></div>
<div class="bar"><span class="seg s-sealed" style="width:99.5575221238938%"></span><span class="seg s-debt" style="width:0.4424778761061947%"></span></div>
<div class="cls-foot"><span class="ok">225 al día</span>
<span class="warn">1 en deuda</span></div>
</div><div class="cls">
<div class="cls-head"><span class="cls-name">C</span>
<span class="cls-tot">143</span></div>
<div class="bar"><span class="seg s-sealed" style="width:97.9020979020979%"></span><span class="seg s-debt" style="width:0.6993006993006993%"></span><span class="seg s-never" style="width:1.3986013986013985%"></span></div>
<div class="cls-foot"><span class="ok">140 al día</span>
<span class="warn">3 en deuda</span></div>
<span class="cls-tot">286</span></div>
<div class="bar"><span class="seg s-sealed" style="width:99.3006993006993%"></span><span class="seg s-never" style="width:0.6993006993006993%"></span></div>
<div class="cls-foot"><span class="ok">284 al día</span>
<span class="warn">2 en deuda</span></div>
</div><div class="cls">
<div class="cls-head"><span class="cls-name">Rust</span>
<span class="cls-tot">236</span></div>
<div class="bar"><span class="seg s-sealed" style="width:99.57627118644068%"></span><span class="seg s-debt" style="width:0.423728813559322%"></span></div>
<div class="cls-foot"><span class="ok">235 al día</span>
<span class="warn">1 en deuda</span></div>
</div><div class="cls">
<div class="cls-head"><span class="cls-name">GUI</span>
<span class="cls-tot">31</span></div>
<div class="bar"><span class="seg s-sealed" style="width:61.29032258064516%"></span><span class="seg s-debt" style="width:38.70967741935484%"></span></div>
<div class="cls-foot"><span class="ok">19 al día</span>
<span class="warn">12 en deuda</span></div>
<span class="cls-tot">41</span></div>
<div class="bar"><span class="seg s-sealed" style="width:100.0%"></span></div>
<div class="cls-foot"><span class="ok">41 al día</span>
<span class="muted">0 en deuda</span></div>
</div><div class="cls">
<div class="cls-head"><span class="cls-name">kernel</span>
<span class="cls-tot">6</span></div>
<div class="bar"><span class="seg s-sealed" style="width:100.0%"></span></div>
<div class="cls-foot"><span class="ok">6 al día</span>
<span class="muted">0 en deuda</span></div>
<span class="cls-tot">8</span></div>
<div class="bar"><span class="seg s-sealed" style="width:87.5%"></span><span class="seg s-never" style="width:12.5%"></span></div>
<div class="cls-foot"><span class="ok">7 al día</span>
<span class="warn">1 en deuda</span></div>
</div></div>
</section>
@@ -188,96 +190,36 @@ footer .mono{color:var(--ink)}
<b style="color:var(--sealed)">lista</b> tiene todas sus deps al día ⇒ se puede construir ya;
el pastilla <span class="impact">↑N</span> es cuántas otras en deuda desbloquea (ordenadas por
ahí: construí primero las de más impacto). Una <b style="color:var(--debt)">espera N</b> depende
de N recetas que también están en deuda. 8 listas ahora.</p>
de N recetas que también están en deuda. 3 listas ahora.</p>
<div class="controls">
<button class="fbtn" data-cls="all" aria-pressed="true">todas</button><button class="fbtn" data-cls="rust" aria-pressed="false">Rust (1)</button><button class="fbtn" data-cls="c" aria-pressed="false">C (3)</button><button class="fbtn" data-cls="gui" aria-pressed="false">GUI (12)</button>
<button class="fbtn" data-cls="all" aria-pressed="true">todas</button><button class="fbtn" data-cls="c" aria-pressed="false">C (2)</button><button class="fbtn" data-cls="rust" aria-pressed="false">Rust (1)</button><button class="fbtn" data-cls="kernel" aria-pressed="false">kernel (1)</button>
<button class="fbtn" id="ready" data-ready aria-pressed="false">sólo listas</button>
<input id="q" placeholder="buscar receta…" spellcheck="false" aria-label="buscar receta">
<span class="count" id="count">16 en deuda</span>
<span class="count" id="count">4 en deuda</span>
</div>
<div class="tbl-wrap">
<table>
<thead><tr><th>receta</th><th>clase</th><th>estado</th><th>deps de build</th></tr></thead>
<tbody><tr class="drow" data-cls="gui" data-ready="1" data-name="gtk4" data-unblocks="6">
<td class="c-name"><span class="s-dot s-debt"></span>gtk4 <span class="ver">4.18.6</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
<td class="c-badge"><span class="ready">lista</span> <span class="impact" title="desbloquea 6 recetas en deuda">↑6</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">meson</span><span class="chip s-sealed" title="sellado al día">samurai</span><span class="chip s-sealed" title="sellado al día">python3</span><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-sealed" title="sellado al día">glib</span><span class="chip s-sealed" title="sellado al día">cairo</span><span class="chip s-sealed" title="sellado al día">pango</span><span class="chip s-sealed" title="sellado al día">gdk-pixbuf</span><span class="chip s-sealed" title="sellado al día">graphene</span><span class="chip s-sealed" title="sellado al día">libepoxy</span><span class="chip s-sealed" title="sellado al día">wayland</span><span class="chip s-sealed" title="sellado al día">wayland-protocols</span><span class="chip s-sealed" title="sellado al día">libxkbcommon</span><span class="chip s-sealed" title="sellado al día">libdrm</span><span class="chip s-sealed" title="sellado al día">fontconfig</span><span class="chip s-sealed" title="sellado al día">harfbuzz</span><span class="chip s-sealed" title="sellado al día">fribidi</span><span class="chip s-sealed" title="sellado al día">libpng</span><span class="chip s-sealed" title="sellado al día">pixman</span><span class="chip s-sealed" title="sellado al día">freetype</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">libffi</span><span class="chip s-sealed" title="sellado al día">pcre2</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">libjpeg-turbo</span><span class="chip s-sealed" title="sellado al día">libtiff</span><span class="chip s-sealed" title="sellado al día">mesa</span></td>
</tr><tr class="drow" data-cls="gui" data-ready="1" data-name="fcft" data-unblocks="1">
<td class="c-name"><span class="s-dot s-debt"></span>fcft <span class="ver">3.3.3</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
<tbody><tr class="drow" data-cls="kernel" data-ready="1" data-name="linux-firmware" data-unblocks="1">
<td class="c-name"><span class="s-dot s-never"></span>linux-firmware <span class="ver">20260910</span></td>
<td class="c-cls"><span class="tag t-kernel">kernel</span></td>
<td class="c-badge"><span class="ready">lista</span> <span class="impact" title="desbloquea 1 recetas en deuda">↑1</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">tllist</span><span class="chip s-sealed" title="sellado al día">utf8proc</span><span class="chip s-sealed" title="sellado al día">freetype</span><span class="chip s-sealed" title="sellado al día">fontconfig</span><span class="chip s-sealed" title="sellado al día">harfbuzz</span><span class="chip s-sealed" title="sellado al día">pixman</span><span class="chip s-sealed" title="sellado al día">libpng</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">meson</span><span class="chip s-sealed" title="sellado al día">samurai</span><span class="chip s-sealed" title="sellado al día">python3</span><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-sealed" title="sellado al día">linux-headers</span></td>
</tr><tr class="drow" data-cls="gui" data-ready="1" data-name="libinput" data-unblocks="1">
<td class="c-name"><span class="s-dot s-debt"></span>libinput <span class="ver">1.27.1</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
<td class="c-badge"><span class="ready">lista</span> <span class="impact" title="desbloquea 1 recetas en deuda">↑1</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">meson</span><span class="chip s-sealed" title="sellado al día">samurai</span><span class="chip s-sealed" title="sellado al día">python3</span><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-sealed" title="sellado al día">libudev-zero</span><span class="chip s-sealed" title="sellado al día">libevdev</span><span class="chip s-sealed" title="sellado al día">mtdev</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="dwarves" data-unblocks="0">
<td class="c-name"><span class="s-dot s-never"></span>dwarves <span class="ver">1.30</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">busybox</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="zsh" data-unblocks="0">
<td class="c-name"><span class="s-dot s-never"></span>zsh <span class="ver">5.9</span></td>
<td class="c-cls"><span class="tag t-c">C</span></td>
<td class="c-badge"><span class="ready">lista</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">busybox</span><span class="chip s-sealed" title="sellado al día">make</span><span class="chip s-sealed" title="sellado al día">cmake</span><span class="chip s-sealed" title="sellado al día">elfutils</span><span class="chip s-sealed" title="sellado al día">zlib</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="llimphi-counter" data-unblocks="0">
<td class="c-name"><span class="s-dot s-never"></span>llimphi-counter <span class="ver">0.1.0</span></td>
<td class="c-cls"><span class="tag t-c">C</span></td>
<td class="c-badge"><span class="ready">lista</span></td>
<td class="c-deps"><span class="chip empty">sin deps de build</span></td>
</tr><tr class="drow" data-cls="gui" data-ready="1" data-name="mesa-llvmpipe" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>mesa-llvmpipe <span class="ver">24.0.9</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
<td class="c-badge"><span class="ready">lista</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">llvm18</span><span class="chip s-sealed" title="sellado al día">meson</span><span class="chip s-sealed" title="sellado al día">samurai</span><span class="chip s-sealed" title="sellado al día">python3</span><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-sealed" title="sellado al día">flex</span><span class="chip s-sealed" title="sellado al día">bison</span><span class="chip s-sealed" title="sellado al día">mako</span><span class="chip s-sealed" title="sellado al día">markupsafe</span><span class="chip s-sealed" title="sellado al día">packaging</span><span class="chip s-sealed" title="sellado al día">libdrm</span><span class="chip s-sealed" title="sellado al día">wayland</span><span class="chip s-sealed" title="sellado al día">wayland-protocols</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">zstd</span><span class="chip s-sealed" title="sellado al día">libffi</span></td>
</tr><tr class="drow" data-cls="gui" data-ready="1" data-name="mesa-swrast" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>mesa-swrast <span class="ver">24.0.9</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
<td class="c-badge"><span class="ready">lista</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">meson</span><span class="chip s-sealed" title="sellado al día">samurai</span><span class="chip s-sealed" title="sellado al día">python3</span><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-sealed" title="sellado al día">flex</span><span class="chip s-sealed" title="sellado al día">bison</span><span class="chip s-sealed" title="sellado al día">mako</span><span class="chip s-sealed" title="sellado al día">markupsafe</span><span class="chip s-sealed" title="sellado al día">packaging</span><span class="chip s-sealed" title="sellado al día">libdrm</span><span class="chip s-sealed" title="sellado al día">wayland</span><span class="chip s-sealed" title="sellado al día">wayland-protocols</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">zstd</span><span class="chip s-sealed" title="sellado al día">libffi</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="mirada-greeter" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>mirada-greeter <span class="ver">0.0.1</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">binutils</span><span class="chip s-sealed" title="sellado al día">libcap</span><span class="chip s-sealed" title="sellado al día">linux-headers</span><span class="chip s-sealed" title="sellado al día">make</span><span class="chip s-sealed" title="sellado al día">ncurses</span><span class="chip s-sealed" title="sellado al día">pcre2</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="rust" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>rust <span class="ver">1.97.0</span></td>
<td class="c-cls"><span class="tag t-rust">Rust</span></td>
<td class="c-badge"><span class="ready">lista</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">mesa</span><span class="chip s-sealed" title="sellado al día">wayland</span><span class="chip s-sealed" title="sellado al día">wayland-protocols</span><span class="chip s-sealed" title="sellado al día">libdrm</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">zstd</span><span class="chip s-sealed" title="sellado al día">libffi</span><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-sealed" title="sellado al día">linux-pam</span></td>
</tr><tr class="drow" data-cls="gui" data-ready="0" data-name="libadwaita" data-unblocks="3">
<td class="c-name"><span class="s-dot s-debt"></span>libadwaita <span class="ver">1.7.6</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
<td class="c-badge"><span class="blocked">espera 1</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">meson</span><span class="chip s-sealed" title="sellado al día">samurai</span><span class="chip s-sealed" title="sellado al día">python3</span><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-sealed" title="sellado al día">sassc</span><span class="chip s-sealed" title="sellado al día">appstream</span><span class="chip s-sealed" title="sellado al día">libyaml</span><span class="chip s-sealed" title="sellado al día">curl</span><span class="chip s-sealed" title="sellado al día">openssl</span><span class="chip s-sealed" title="sellado al día">libxmlb</span><span class="chip s-sealed" title="sellado al día">libxml2</span><span class="chip s-sealed" title="sellado al día">zstd</span><span class="chip s-debt" title="deuda de rebuild">gtk4</span><span class="chip s-sealed" title="sellado al día">pango</span><span class="chip s-sealed" title="sellado al día">gdk-pixbuf</span><span class="chip s-sealed" title="sellado al día">cairo</span><span class="chip s-sealed" title="sellado al día">graphene</span><span class="chip s-sealed" title="sellado al día">glib</span><span class="chip s-sealed" title="sellado al día">harfbuzz</span><span class="chip s-sealed" title="sellado al día">fribidi</span><span class="chip s-sealed" title="sellado al día">fontconfig</span><span class="chip s-sealed" title="sellado al día">freetype</span><span class="chip s-sealed" title="sellado al día">pixman</span><span class="chip s-sealed" title="sellado al día">libpng</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">libjpeg-turbo</span><span class="chip s-sealed" title="sellado al día">libtiff</span><span class="chip s-sealed" title="sellado al día">libepoxy</span><span class="chip s-sealed" title="sellado al día">wayland</span><span class="chip s-sealed" title="sellado al día">wayland-protocols</span><span class="chip s-sealed" title="sellado al día">libxkbcommon</span><span class="chip s-sealed" title="sellado al día">libdrm</span><span class="chip s-sealed" title="sellado al día">pcre2</span><span class="chip s-sealed" title="sellado al día">libffi</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">mesa</span></td>
</tr><tr class="drow" data-cls="gui" data-ready="0" data-name="gtksourceview" data-unblocks="2">
<td class="c-name"><span class="s-dot s-debt"></span>gtksourceview <span class="ver">5.16.0</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
<td class="c-badge"><span class="blocked">espera 1</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">meson</span><span class="chip s-sealed" title="sellado al día">samurai</span><span class="chip s-sealed" title="sellado al día">python3</span><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-sealed" title="sellado al día">gettext-tiny</span><span class="chip s-debt" title="deuda de rebuild">gtk4</span><span class="chip s-sealed" title="sellado al día">pango</span><span class="chip s-sealed" title="sellado al día">gdk-pixbuf</span><span class="chip s-sealed" title="sellado al día">cairo</span><span class="chip s-sealed" title="sellado al día">graphene</span><span class="chip s-sealed" title="sellado al día">glib</span><span class="chip s-sealed" title="sellado al día">harfbuzz</span><span class="chip s-sealed" title="sellado al día">fribidi</span><span class="chip s-sealed" title="sellado al día">fontconfig</span><span class="chip s-sealed" title="sellado al día">freetype</span><span class="chip s-sealed" title="sellado al día">pixman</span><span class="chip s-sealed" title="sellado al día">libpng</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">libxml2</span><span class="chip s-sealed" title="sellado al día">libjpeg-turbo</span><span class="chip s-sealed" title="sellado al día">libtiff</span><span class="chip s-sealed" title="sellado al día">libepoxy</span><span class="chip s-sealed" title="sellado al día">wayland</span><span class="chip s-sealed" title="sellado al día">wayland-protocols</span><span class="chip s-sealed" title="sellado al día">libxkbcommon</span><span class="chip s-sealed" title="sellado al día">libdrm</span><span class="chip s-sealed" title="sellado al día">pcre2</span><span class="chip s-sealed" title="sellado al día">libffi</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">mesa</span></td>
</tr><tr class="drow" data-cls="gui" data-ready="0" data-name="foot" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>foot <span class="ver">1.27.0</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
<td class="c-badge"><span class="blocked">espera 1</span></td>
<td class="c-deps"><span class="chip s-debt" title="deuda de rebuild">fcft</span><span class="chip s-sealed" title="sellado al día">tllist</span><span class="chip s-sealed" title="sellado al día">utf8proc</span><span class="chip s-sealed" title="sellado al día">fontconfig</span><span class="chip s-sealed" title="sellado al día">freetype</span><span class="chip s-sealed" title="sellado al día">harfbuzz</span><span class="chip s-sealed" title="sellado al día">libxkbcommon</span><span class="chip s-sealed" title="sellado al día">ncurses</span><span class="chip s-sealed" title="sellado al día">pixman</span><span class="chip s-sealed" title="sellado al día">wayland</span><span class="chip s-sealed" title="sellado al día">wayland-protocols</span><span class="chip s-sealed" title="sellado al día">libffi</span><span class="chip s-sealed" title="sellado al día">libpng</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">meson</span><span class="chip s-sealed" title="sellado al día">samurai</span><span class="chip s-sealed" title="sellado al día">python3</span><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-sealed" title="sellado al día">linux-headers</span></td>
</tr><tr class="drow" data-cls="gui" data-ready="0" data-name="gtk4-hello" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>gtk4-hello <span class="ver">4.18.6</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
<td class="c-badge"><span class="blocked">espera 1</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-debt" title="deuda de rebuild">gtk4</span><span class="chip s-sealed" title="sellado al día">pango</span><span class="chip s-sealed" title="sellado al día">gdk-pixbuf</span><span class="chip s-sealed" title="sellado al día">cairo</span><span class="chip s-sealed" title="sellado al día">graphene</span><span class="chip s-sealed" title="sellado al día">glib</span><span class="chip s-sealed" title="sellado al día">harfbuzz</span><span class="chip s-sealed" title="sellado al día">fribidi</span><span class="chip s-sealed" title="sellado al día">fontconfig</span><span class="chip s-sealed" title="sellado al día">freetype</span><span class="chip s-sealed" title="sellado al día">pixman</span><span class="chip s-sealed" title="sellado al día">libpng</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">libjpeg-turbo</span><span class="chip s-sealed" title="sellado al día">libtiff</span><span class="chip s-sealed" title="sellado al día">libepoxy</span><span class="chip s-sealed" title="sellado al día">wayland</span><span class="chip s-sealed" title="sellado al día">libxkbcommon</span><span class="chip s-sealed" title="sellado al día">libdrm</span><span class="chip s-sealed" title="sellado al día">pcre2</span><span class="chip s-sealed" title="sellado al día">libffi</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">mesa</span></td>
</tr><tr class="drow" data-cls="gui" data-ready="0" data-name="mirada-compositor" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>mirada-compositor <span class="ver">0.0.1</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
<td class="c-badge"><span class="blocked">espera 1</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">mesa</span><span class="chip s-sealed" title="sellado al día">wayland</span><span class="chip s-sealed" title="sellado al día">wayland-protocols</span><span class="chip s-sealed" title="sellado al día">libdrm</span><span class="chip s-sealed" title="sellado al día">seatd</span><span class="chip s-sealed" title="sellado al día">linux-pam</span><span class="chip s-debt" title="deuda de rebuild">libinput</span><span class="chip s-sealed" title="sellado al día">libudev-zero</span><span class="chip s-sealed" title="sellado al día">libevdev</span><span class="chip s-sealed" title="sellado al día">mtdev</span><span class="chip s-sealed" title="sellado al día">libxkbcommon</span><span class="chip s-sealed" title="sellado al día">pixman</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">zstd</span><span class="chip s-sealed" title="sellado al día">libffi</span><span class="chip s-sealed" title="sellado al día">pkgconf</span></td>
</tr><tr class="drow" data-cls="gui" data-ready="0" data-name="adwaita-hello" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>adwaita-hello <span class="ver">1.7.6</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
<td class="c-badge"><span class="blocked">espera 2</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-debt" title="deuda de rebuild">libadwaita</span><span class="chip s-sealed" title="sellado al día">appstream</span><span class="chip s-sealed" title="sellado al día">libyaml</span><span class="chip s-sealed" title="sellado al día">curl</span><span class="chip s-sealed" title="sellado al día">openssl</span><span class="chip s-sealed" title="sellado al día">libxmlb</span><span class="chip s-sealed" title="sellado al día">libxml2</span><span class="chip s-sealed" title="sellado al día">zstd</span><span class="chip s-debt" title="deuda de rebuild">gtk4</span><span class="chip s-sealed" title="sellado al día">pango</span><span class="chip s-sealed" title="sellado al día">gdk-pixbuf</span><span class="chip s-sealed" title="sellado al día">cairo</span><span class="chip s-sealed" title="sellado al día">graphene</span><span class="chip s-sealed" title="sellado al día">glib</span><span class="chip s-sealed" title="sellado al día">harfbuzz</span><span class="chip s-sealed" title="sellado al día">fribidi</span><span class="chip s-sealed" title="sellado al día">fontconfig</span><span class="chip s-sealed" title="sellado al día">freetype</span><span class="chip s-sealed" title="sellado al día">pixman</span><span class="chip s-sealed" title="sellado al día">libpng</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">libjpeg-turbo</span><span class="chip s-sealed" title="sellado al día">libtiff</span><span class="chip s-sealed" title="sellado al día">libepoxy</span><span class="chip s-sealed" title="sellado al día">wayland</span><span class="chip s-sealed" title="sellado al día">libxkbcommon</span><span class="chip s-sealed" title="sellado al día">libdrm</span><span class="chip s-sealed" title="sellado al día">pcre2</span><span class="chip s-sealed" title="sellado al día">libffi</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">mesa</span></td>
</tr><tr class="drow" data-cls="c" data-ready="0" data-name="hammer-edit" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>hammer-edit <span class="ver">1.0.0</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">cmake</span><span class="chip s-sealed" title="sellado al día">curl</span><span class="chip s-sealed" title="sellado al día">llvm21</span><span class="chip s-sealed" title="sellado al día">openssl-threads</span><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-sealed" title="sellado al día">python3</span><span class="chip s-sealed" title="sellado al día">samurai</span></td>
</tr><tr class="drow" data-cls="c" data-ready="0" data-name="firmware-tigerlake" data-unblocks="0">
<td class="c-name"><span class="s-dot s-never"></span>firmware-tigerlake <span class="ver">20260910</span></td>
<td class="c-cls"><span class="tag t-c">C</span></td>
<td class="c-badge"><span class="blocked">espera 3</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-debt" title="deuda de rebuild">gtksourceview</span><span class="chip s-debt" title="deuda de rebuild">libadwaita</span><span class="chip s-sealed" title="sellado al día">appstream</span><span class="chip s-sealed" title="sellado al día">libyaml</span><span class="chip s-sealed" title="sellado al día">curl</span><span class="chip s-sealed" title="sellado al día">openssl</span><span class="chip s-sealed" title="sellado al día">libxmlb</span><span class="chip s-sealed" title="sellado al día">libxml2</span><span class="chip s-sealed" title="sellado al día">zstd</span><span class="chip s-debt" title="deuda de rebuild">gtk4</span><span class="chip s-sealed" title="sellado al día">pango</span><span class="chip s-sealed" title="sellado al día">gdk-pixbuf</span><span class="chip s-sealed" title="sellado al día">cairo</span><span class="chip s-sealed" title="sellado al día">graphene</span><span class="chip s-sealed" title="sellado al día">glib</span><span class="chip s-sealed" title="sellado al día">harfbuzz</span><span class="chip s-sealed" title="sellado al día">fribidi</span><span class="chip s-sealed" title="sellado al día">fontconfig</span><span class="chip s-sealed" title="sellado al día">freetype</span><span class="chip s-sealed" title="sellado al día">pixman</span><span class="chip s-sealed" title="sellado al día">libpng</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">libjpeg-turbo</span><span class="chip s-sealed" title="sellado al día">libtiff</span><span class="chip s-sealed" title="sellado al día">libepoxy</span><span class="chip s-sealed" title="sellado al día">wayland</span><span class="chip s-sealed" title="sellado al día">libxkbcommon</span><span class="chip s-sealed" title="sellado al día">libdrm</span><span class="chip s-sealed" title="sellado al día">pcre2</span><span class="chip s-sealed" title="sellado al día">libffi</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">mesa</span></td>
</tr><tr class="drow" data-cls="gui" data-ready="0" data-name="sourceview-hello" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>sourceview-hello <span class="ver">5.16.0</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
<td class="c-badge"><span class="blocked">espera 3</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">pkgconf</span><span class="chip s-debt" title="deuda de rebuild">gtksourceview</span><span class="chip s-debt" title="deuda de rebuild">libadwaita</span><span class="chip s-sealed" title="sellado al día">appstream</span><span class="chip s-sealed" title="sellado al día">libyaml</span><span class="chip s-sealed" title="sellado al día">curl</span><span class="chip s-sealed" title="sellado al día">openssl</span><span class="chip s-sealed" title="sellado al día">libxmlb</span><span class="chip s-sealed" title="sellado al día">libxml2</span><span class="chip s-sealed" title="sellado al día">zstd</span><span class="chip s-debt" title="deuda de rebuild">gtk4</span><span class="chip s-sealed" title="sellado al día">pango</span><span class="chip s-sealed" title="sellado al día">gdk-pixbuf</span><span class="chip s-sealed" title="sellado al día">cairo</span><span class="chip s-sealed" title="sellado al día">graphene</span><span class="chip s-sealed" title="sellado al día">glib</span><span class="chip s-sealed" title="sellado al día">harfbuzz</span><span class="chip s-sealed" title="sellado al día">fribidi</span><span class="chip s-sealed" title="sellado al día">fontconfig</span><span class="chip s-sealed" title="sellado al día">freetype</span><span class="chip s-sealed" title="sellado al día">pixman</span><span class="chip s-sealed" title="sellado al día">libpng</span><span class="chip s-sealed" title="sellado al día">expat</span><span class="chip s-sealed" title="sellado al día">libjpeg-turbo</span><span class="chip s-sealed" title="sellado al día">libtiff</span><span class="chip s-sealed" title="sellado al día">libepoxy</span><span class="chip s-sealed" title="sellado al día">wayland</span><span class="chip s-sealed" title="sellado al día">libxkbcommon</span><span class="chip s-sealed" title="sellado al día">libdrm</span><span class="chip s-sealed" title="sellado al día">pcre2</span><span class="chip s-sealed" title="sellado al día">libffi</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">mesa</span></td>
<td class="c-badge"><span class="blocked">espera 1</span></td>
<td class="c-deps"><span class="chip s-sealed" title="sellado al día">busybox</span><span class="chip s-never" title="nunca construida">linux-firmware</span><span class="chip s-sealed" title="sellado al día">sof-firmware</span></td>
</tr></tbody>
</table>
</div>
+25 -24
View File
@@ -3,10 +3,10 @@
"totals": {
"recipes": 937,
"nodes": 940,
"sealed": 933,
"never": 3,
"ajeno": 3,
"debt": 1
"sealed": 930,
"never": 5,
"debt": 2,
"ajeno": 3
},
"by_class": {
"ajeno": 3,
@@ -17,16 +17,16 @@
"rust": 236
},
"debt_by_class": {
"c": 2,
"kernel": 1,
"c": 4,
"kernel": 2,
"rust": 1
},
"by_queue": {
"corpus": {
"sealed": 933,
"never": 3,
"ajeno": 3,
"debt": 1
"sealed": 930,
"never": 5,
"debt": 2,
"ajeno": 3
}
},
"by_profile": {
@@ -49,8 +49,8 @@
"metal-tigerlake": {
"raices": 2,
"clausura": 6,
"sealed": 4,
"never": 2
"sealed": 2,
"never": 4
},
"servidor": {
"raices": 120,
@@ -1147,7 +1147,7 @@
"hash": "b3:8cd3ec35022757fcd099e1a72d9fb30a3d05a54197f81b0fef6af87a6e7a0686",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"unblocks": 1,
"perfiles": [
"base",
"cli",
@@ -1444,7 +1444,7 @@
"hash": "b3:2a2b1280c57affe906ce43ba20fd3867dda18b9ed4476ef64285baf018c4a5fd",
"state": "sealed",
"blocked_by": [],
"unblocks": 2,
"unblocks": 4,
"perfiles": [
"cli",
"escritorio-cosmic",
@@ -4294,7 +4294,7 @@
"hash": "b3:552bc65053e3fc2fc42a02cac4e76ae1eac706e3c225cf09a05f9733bb75103f",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"unblocks": 1,
"perfiles": [],
"dependientes_total": 5
},
@@ -4996,7 +4996,8 @@
"hash": "b3:0aa44a4736b54be472be3a9fa4f1ab00f3009944a6233dfd8f6f0f6d833e0479",
"state": "never",
"blocked_by": [
"linux-firmware"
"linux-firmware",
"sof-firmware"
],
"unblocks": 0,
"perfiles": [
@@ -5016,7 +5017,7 @@
"hash": "b3:6b25e3518cb8036738f0b63d04e64b9da93094e4757b74f7559ccc8bd53a1fee",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"unblocks": 1,
"perfiles": [
"base",
"cli",
@@ -5725,7 +5726,7 @@
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:51aa5e137fc764d063e898ce847f77c8f34ed5a253042de8732148d487d9d137",
"hash": "b3:215742cb11adb747de7655346a3982e5d5a140539cb95c69df290dfc430ea8ef",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
@@ -8239,7 +8240,7 @@
"queue": "corpus",
"foreign": false,
"hash": "b3:24cfc64333220544d577eb20ce66122d0bf0e95a7116eec2d5c71065e1c0ed0b",
"state": "sealed",
"state": "never",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
@@ -11019,7 +11020,7 @@
"queue": "corpus",
"foreign": false,
"hash": "b3:63fdd57ca3557bf9e6490bc00677f6cc0af2c014f026babfb41645951fcf0287",
"state": "sealed",
"state": "debt",
"blocked_by": [],
"unblocks": 0,
"perfiles": [],
@@ -11447,7 +11448,7 @@
"hash": "b3:2ff37f0516b091d1c67099aa5df817cfbe2891d5da9c263eb47c5ef87fe99814",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"unblocks": 1,
"perfiles": [
"base",
"cli",
@@ -11507,7 +11508,7 @@
"hash": "b3:57d38057b82cef4e871d68a3324fd485b298df81a766a5dcf8269e6fb63efe16",
"state": "sealed",
"blocked_by": [],
"unblocks": 1,
"unblocks": 2,
"perfiles": [
"base",
"cli",
@@ -13407,7 +13408,7 @@
"hash": "b3:4b1f2457160137530bee89b9fbcc250bf43deb15c428a5ec06a01ac3114b27bc",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"unblocks": 1,
"perfiles": [
"base",
"cli",
@@ -16000,7 +16001,7 @@
"queue": "corpus",
"foreign": false,
"hash": "b3:a85c2a254dcb20a6ffce76b8ef1300739b5b6adab6bc34dbb999f743c1e36a55",
"state": "sealed",
"state": "never",
"blocked_by": [],
"unblocks": 1,
"perfiles": [
+16 -1
View File
@@ -22,9 +22,17 @@ OUT = ROOT / ("docs/state/build-state-kde.html" if KDE else "docs/state/build-st
doc = json.loads(DATA.read_text())
nodes = doc["nodes"]
# Los estados que SÍ son del corpus de recetas: son los que entran a la barra y a los tiles, y su
# suma es `totals["recipes"]`.
STATE_ORDER = ["sealed", "debt", "never", "unhashable"]
STATE_ES = {"sealed": "sellado al día", "debt": "deuda de rebuild",
"never": "nunca construida", "unhashable": "ilegible"}
# Y los que NO lo son: `wanted` es un hueco declarado en targets.toml (no hay receta todavía) y
# `ajeno` es una imagen de qorpa (ADR 0015), que no se construye desde fuente. `build-state.py` los
# excluye de `totals["recipes"]` a propósito, así que meterlos en la barra la haría pasar del 100 %.
# Antes ni siquiera se los nombraba: el visor reventaba con KeyError al toparse con uno, o sea que
# **agregar un estado nuevo rompía el tablero entero**. Ahora se cuentan aparte y se muestran.
STATE_FUERA = {"wanted": "querida (sin receta aún)", "ajeno": "imagen ajena (qorpa)"}
CLASS_ES = {"c": "C", "go": "Go", "rust": "Rust", "gui": "GUI", "kernel": "kernel"}
# blocked_by / unblocks los computa build-state.py sobre el grafo; acá sólo los leemos.
@@ -47,10 +55,15 @@ n_total = totals["recipes"]
# Reparto por clase (para las barras por-clase).
classes = {}
fuera = {}
for n, r in nodes.items():
st = r["state"]
if st not in STATE_ORDER: # wanted / ajeno / cualquiera que aparezca mañana
fuera[st] = fuera.get(st, 0) + 1
continue
c = r.get("cls", "c")
classes.setdefault(c, {s: 0 for s in STATE_ORDER})
classes[c][r["state"]] += 1
classes[c][st] += 1
def pct(x): return f"{100*x/n_total:.1f}%"
@@ -222,6 +235,7 @@ td{padding:10px 14px;border-bottom:1px solid var(--line);vertical-align:top}
.chip.s-debt{background:var(--debt-bg);color:var(--debt);border-color:var(--debt)}
.chip.s-never{background:var(--never-bg);color:var(--never);border-color:var(--never)}
.chip.s-unhashable{background:var(--unhashable-bg);color:var(--unhashable);border-color:var(--unhashable)}
.chip.s-wanted,.chip.s-ajeno{background:var(--panel);color:var(--ink-2);border-color:var(--line)}
.chip.empty{color:var(--ink-2);font-style:italic}
.hint{color:var(--ink-2);font-size:.82rem;margin:0 0 14px}
.count{color:var(--ink-2);font-size:.82rem;margin-left:auto;font-family:ui-monospace,monospace}
@@ -281,6 +295,7 @@ HTML = f'''<style>{CSS}</style>
<span><span class="k s-sealed"></span><b>{totals.get('sealed',0)}</b> sellado al día</span>
<span><span class="k s-debt"></span><b>{totals.get('debt',0)}</b> deuda de rebuild</span>
<span><span class="k s-never"></span><b>{totals.get('never',0)}</b> nunca construida</span>
{''.join(f'<span><b>{v}</b> {E(STATE_FUERA.get(k, k))} (fuera del corpus)</span>' for k, v in sorted(fuera.items()))}
{'<span><span class="k s-unhashable"></span><b>'+str(totals.get('unhashable',0))+'</b> ilegible</span>' if totals.get('unhashable') else ''}
</div>
</section>