static-audit: el '28 mienten' estaba INFLADO por mi propio bug (ls|head -1)

El audit tomaba 'ls -d store/*-<n> | head -1' = orden ALFABÉTICO POR HASH, no el
artefacto vigente. El store guarda TODOS los sellados de una receta (expat tenía
5, de junio a hoy), así que auditaba uno de hace tres semanas. Mismo bug de
clase que comparar libpng.a con libpng16.a por find|head -1.

Con 'ls -dt' (más reciente): 28 → 11. Tres de las supuestas mentirosas
(cargo-audit, git-absorb, yazi) nunca lo fueron: su artefacto reciente ya era
estático y el audit leía el viejo.

Lo que NO cambia: el hallazgo central es real y verificado a mano. libtool
ignora el -static del lab, el curl sellado NO arrancaba en el host, y de las 14
que arreglé cada una se verificó contra sus artefactos previos (expat: los 4
viejos con NEEDED=1, el nuevo con 0). Estaban rotas de verdad.

HONESTIDAD escrita en el script: 'más reciente' ≠ 'vigente'. Lo vigente sería el
artefacto cuyo hash corresponde a la receta de HOY, y hammer no lo expone sin
construir (no hay hammer hash / dry-run). Por eso el audit va DESPUÉS del
rebuild, nunca antes.

Quedan 11: file, helix, libcap, libgcrypt, pcre2, pkgconf, samurai, tuc,
util-linux, xz + naabu (nuevo: Go con libc.so.6 de GLIBC, otro caso).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 05:01:40 -04:00
co-authored by Claude Opus 4.8
parent a503874f45
commit 372baed4f6
+10 -1
View File
@@ -49,7 +49,16 @@ mienten=0; honestos=0; sin=0
for f in $recetas; do
n=$(basename "$f" .toml)
grep -qE '^[[:space:]]*link[[:space:]]*=[[:space:]]*"static"' "$f" || continue
art=$(ls -d "$STORE"/*-"$n" 2>/dev/null | head -1) || true
# `ls -dt`: el artefacto MÁS RECIENTE, no el alfabéticamente primero. El store guarda TODOS los
# sellados de una receta (expat tenía 5, de junio a hoy) y el glob ordena por hash, que es
# ruido: auditaba un artefacto de hace tres semanas y reportaba dinámica una receta ya
# arreglada. Mismo bug de clase que comparar `libpng.a` con `libpng16.a` por `find | head -1`.
#
# HONESTIDAD: "más reciente" ≠ "vigente". Lo vigente sería el artefacto cuyo hash corresponde a
# la receta de HOY, y hammer no expone ese hash sin construir (no hay `hammer hash`/dry-run).
# Con el store al día ambos coinciden; si acabás de construir una receta vieja, no. Por eso el
# audit se corre DESPUÉS del rebuild, nunca antes.
art=$(ls -dt "$STORE"/*-"$n" 2>/dev/null | head -1) || true
[ -z "${art:-}" ] && { sin=$((sin + 1)); continue; }
# El primer ELF *ejecutable* del artefacto. Una `.so` tiene NEEDED por definición y no prueba