estado: clasificación Rust corregida (había ~180 Rust escondidas como C) + musl

Señal fuerte para Rust: la receta copia su binario de target/release/ en las fases. Medido 225
recetas, 0 con dep go ⇒ sin falsos positivos con Go (findutils entra bien: es uutils/findutils, find
en Rust). LÍMITE: un crate BuildSys::Cargo PURO sin fase install propia (zellij) no deja rastro en el
TOML y cae a 'c' — sólo se ve bajando la fuente, que el generador no hace.

Efecto: clases c 322→141, rust 45→226 (la mayoría eran Rust auto sin fase cargo explícita). Y la
LECTURA de la deuda cambia: la deuda C REAL es sólo 8 (casi toda saldada esta sesión), no 74. Lo que
queda es Rust (15, CLI pesados → granja), GUI (29 → granja), Go (5 → worker), kernel (4).

musl sellado (base). Avance: sealed 703→704, debt 53→52.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 12:36:23 -04:00
co-authored by Claude Opus 4.8
parent d111b5f040
commit a267cf4f48
3 changed files with 266 additions and 267 deletions
+71 -76
View File
@@ -113,15 +113,15 @@ 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">764 recetas · grafo cierra sin ciclos · grafo cerrado · <span class="mono">2026-07-17 16:33 UTC</span></div>
<div class="sub">764 recetas · grafo cierra sin ciclos · grafo cerrado · <span class="mono">2026-07-17 16:36 UTC</span></div>
</header>
<section>
<p class="eyebrow">avance del corpus</p>
<div class="progress"><span class="seg s-sealed" style="width:92.01570680628272%" title="sellado al día: 703"></span><span class="seg s-debt" style="width:6.93717277486911%" title="deuda de rebuild: 53"></span><span class="seg s-never" style="width:1.0471204188481675%" title="nunca construida: 8"></span></div>
<div class="progress"><span class="seg s-sealed" style="width:92.14659685863874%" title="sellado al día: 704"></span><span class="seg s-debt" style="width:6.806282722513089%" title="deuda de rebuild: 52"></span><span class="seg s-never" style="width:1.0471204188481675%" title="nunca construida: 8"></span></div>
<div class="legend">
<span><span class="k s-sealed"></span><b>703</b> sellado al día</span>
<span><span class="k s-debt"></span><b>53</b> deuda de rebuild</span>
<span><span class="k s-sealed"></span><b>704</b> sellado al día</span>
<span><span class="k s-debt"></span><b>52</b> deuda de rebuild</span>
<span><span class="k s-never"></span><b>8</b> nunca construida</span>
</div>
@@ -129,13 +129,13 @@ footer .mono{color:var(--ink)}
<section>
<div class="tiles"><div class="tile s-sealed">
<div class="tile-n">703</div>
<div class="tile-n">704</div>
<div class="tile-l">sellado al día</div>
<div class="tile-p">92.0%</div>
<div class="tile-p">92.1%</div>
</div><div class="tile s-debt">
<div class="tile-n">53</div>
<div class="tile-n">52</div>
<div class="tile-l">deuda de rebuild</div>
<div class="tile-p">6.9%</div>
<div class="tile-p">6.8%</div>
</div><div class="tile s-never">
<div class="tile-n">8</div>
<div class="tile-l">nunca construida</div>
@@ -155,18 +155,18 @@ footer .mono{color:var(--ink)}
<div class="bar"><span class="seg s-sealed" style="width:98.61878453038673%"></span><span class="seg s-debt" style="width:0.27624309392265195%"></span><span class="seg s-never" style="width:1.1049723756906078%"></span></div>
<div class="cls-foot"><span class="ok">357 al día</span>
<span class="warn">5 en deuda</span></div>
</div><div class="cls">
<div class="cls-head"><span class="cls-name">C</span>
<span class="cls-tot">322</span></div>
<div class="bar"><span class="seg s-sealed" style="width:94.40993788819875%"></span><span class="seg s-debt" style="width:4.3478260869565215%"></span><span class="seg s-never" style="width:1.2422360248447204%"></span></div>
<div class="cls-foot"><span class="ok">304 al día</span>
<span class="warn">18 en deuda</span></div>
</div><div class="cls">
<div class="cls-head"><span class="cls-name">Rust</span>
<span class="cls-tot">45</span></div>
<div class="bar"><span class="seg s-sealed" style="width:88.88888888888889%"></span><span class="seg s-debt" style="width:11.11111111111111%"></span></div>
<div class="cls-foot"><span class="ok">40 al día</span>
<span class="warn">5 en deuda</span></div>
<span class="cls-tot">226</span></div>
<div class="bar"><span class="seg s-sealed" style="width:93.36283185840708%"></span><span class="seg s-debt" style="width:5.752212389380531%"></span><span class="seg s-never" style="width:0.8849557522123894%"></span></div>
<div class="cls-foot"><span class="ok">211 al día</span>
<span class="warn">15 en deuda</span></div>
</div><div class="cls">
<div class="cls-head"><span class="cls-name">C</span>
<span class="cls-tot">141</span></div>
<div class="bar"><span class="seg s-sealed" style="width:95.0354609929078%"></span><span class="seg s-debt" style="width:3.5460992907801416%"></span><span class="seg s-never" style="width:1.4184397163120568%"></span></div>
<div class="cls-foot"><span class="ok">134 al día</span>
<span class="warn">7 en deuda</span></div>
</div><div class="cls">
<div class="cls-head"><span class="cls-name">GUI</span>
<span class="cls-tot">30</span></div>
@@ -188,12 +188,12 @@ 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. 39 listas ahora.</p>
de N recetas que también están en deuda. 38 listas ahora.</p>
<div class="controls">
<button class="fbtn" data-cls="all" aria-pressed="true">todas</button><button class="fbtn" data-cls="go" aria-pressed="false">Go (5)</button><button class="fbtn" data-cls="c" aria-pressed="false">C (18)</button><button class="fbtn" data-cls="rust" aria-pressed="false">Rust (5)</button><button class="fbtn" data-cls="gui" aria-pressed="false">GUI (29)</button><button class="fbtn" data-cls="kernel" aria-pressed="false">kernel (4)</button>
<button class="fbtn" data-cls="all" aria-pressed="true">todas</button><button class="fbtn" data-cls="go" aria-pressed="false">Go (5)</button><button class="fbtn" data-cls="rust" aria-pressed="false">Rust (15)</button><button class="fbtn" data-cls="c" aria-pressed="false">C (7)</button><button class="fbtn" data-cls="gui" aria-pressed="false">GUI (29)</button><button class="fbtn" data-cls="kernel" aria-pressed="false">kernel (4)</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">61 en deuda</span>
<span class="count" id="count">60 en deuda</span>
</div>
<div class="tbl-wrap">
<table>
@@ -253,36 +253,11 @@ footer .mono{color:var(--ink)}
<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></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="amp" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>amp <span class="ver">0.7.1</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">zlib</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="bob-nvim" data-unblocks="0">
<td class="c-name"><span class="s-dot s-never"></span>bob-nvim <span class="ver">4.1.7</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="c" data-ready="1" data-name="broot" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>broot <span class="ver">1.57.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 s-sealed" title="sellado al día">zlib</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="cargo-audit" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>cargo-audit <span class="ver">0.22.1</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">zlib</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="delta" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>delta <span class="ver">0.19.2</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">zlib</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="dust" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>dust <span class="ver">1.2.4</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="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-cls"><span class="tag t-c">C</span></td>
@@ -293,41 +268,11 @@ footer .mono{color:var(--ink)}
<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">zlib</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="gitui" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>gitui <span class="ver">0.28.1</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">zlib</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="hurl" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>hurl <span class="ver">8.0.1</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">curl</span><span class="chip s-sealed" title="sellado al día">openssl</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">libxml2</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="c" data-ready="1" data-name="monolith" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>monolith <span class="ver">2.10.1</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">openssl</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="musl" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>musl <span class="ver">1.2.5</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">make</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="nu" data-unblocks="0">
<td class="c-name"><span class="s-dot s-never"></span>nu <span class="ver">0.104.1</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">openssl</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="rink" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>rink <span class="ver">0.9.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 s-sealed" title="sellado al día">openssl</span></td>
</tr><tr class="drow" data-cls="c" data-ready="1" data-name="zellij" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>zellij <span class="ver">0.44.3</span></td>
<td class="c-cls"><span class="tag t-c">C</span></td>
@@ -373,6 +318,21 @@ footer .mono{color:var(--ink)}
<td class="c-cls"><span class="tag t-kernel">kernel</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">flex</span><span class="chip s-sealed" title="sellado al día">bison</span><span class="chip s-sealed" title="sellado al día">m4</span><span class="chip s-sealed" title="sellado al día">openssl</span><span class="chip s-sealed" title="sellado al día">elfutils</span><span class="chip s-sealed" title="sellado al día">make</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="amp" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>amp <span class="ver">0.7.1</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">zlib</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="bob-nvim" data-unblocks="0">
<td class="c-name"><span class="s-dot s-never"></span>bob-nvim <span class="ver">4.1.7</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 empty">sin deps de build</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="broot" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>broot <span class="ver">1.57.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">zlib</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="cargo-cache" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>cargo-cache <span class="ver">0.8.3</span></td>
<td class="c-cls"><span class="tag t-rust">Rust</span></td>
@@ -393,6 +353,41 @@ footer .mono{color:var(--ink)}
<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">openssl</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="delta" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>delta <span class="ver">0.19.2</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">zlib</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="dust" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>dust <span class="ver">1.2.4</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 empty">sin deps de build</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="gitui" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>gitui <span class="ver">0.28.1</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">zlib</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="hurl" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>hurl <span class="ver">8.0.1</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">curl</span><span class="chip s-sealed" title="sellado al día">openssl</span><span class="chip s-sealed" title="sellado al día">zlib</span><span class="chip s-sealed" title="sellado al día">libxml2</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="monolith" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>monolith <span class="ver">2.10.1</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">openssl</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="nu" data-unblocks="0">
<td class="c-name"><span class="s-dot s-never"></span>nu <span class="ver">0.104.1</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">openssl</span></td>
</tr><tr class="drow" data-cls="rust" data-ready="1" data-name="rink" data-unblocks="0">
<td class="c-name"><span class="s-dot s-debt"></span>rink <span class="ver">0.9.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">openssl</span></td>
</tr><tr class="drow" data-cls="gui" data-ready="0" data-name="harfbuzz" data-unblocks="10">
<td class="c-name"><span class="s-dot s-debt"></span>harfbuzz <span class="ver">14.2.1</span></td>
<td class="c-cls"><span class="tag t-gui">GUI</span></td>
File diff suppressed because it is too large Load Diff
+6 -2
View File
@@ -45,8 +45,12 @@ def classify(name, d):
# Go: declara el toolchain `go` como dep de build (la vía Go auto lo exige). 362 recetas.
if "go" in deps and name != "go":
return "go"
# Rust: fase cargo, o dep de un toolchain rust, o el linker zig-cc wrapper típico de cargo.
if "cargo" in blob or "cargo" in deps or "rust" in deps:
# Rust: fase cargo, dep rust, o —la señal fuerte— copia el binario de `target/release/` en sus
# fases (todo binario cargo sale de ahí). Medido: 225 recetas lo tienen, 0 con dep `go` ⇒ sin
# falsos positivos con Go. LÍMITE conocido: un crate BuildSys::Cargo PURO (Cargo.toml en el árbol,
# sin fase install propia — p.ej. zellij) no deja rastro en el TOML y cae a "c"; sólo se distingue
# bajando la fuente, que este generador no hace a propósito.
if "cargo" in blob or "cargo" in deps or "rust" in deps or "target/release" in blob:
return "rust"
if any(g in name for g in GUI_RE):
return "gui"