repro: «no pude comparar» tampoco es no-determinismo — segundo sitio, misma lección

Una tanda volvió a llenar el libro de veredictos falsos: 47 recetas sanas anotadas como
NO-DETERMINISMO. Esta vez la cadena empezó antes de donde yo había mirado.

El `mv` que APARTA el artefacto falló (el directorio de apartado no estaba) y yo nunca comprobaba que
hubiera funcionado. A partir de ahí todo lo que sigue es basura: el artefacto se queda en su sitio,
`hammer why-differs` compara contra una ruta que no existe y devuelve `Error: store: no existe…`, y
mi código leía cualquier salida no-cero como «difieren». Un error de comparación disfrazado de
veredicto, 47 veces.

Es la MISMA lección que arreglé hace un rato para el build, en un segundo sitio que no miré:
**no poder medir no es un resultado negativo**. Dos guardas nuevas:

  · el apartado se comprueba (`mv || SIN VEREDICTO`) y la receta se salta ruidosamente;
  · `why-differs` se lee, no sólo su exit code: si dice `Error:`/`no existe`, es SIN VEREDICTO, se
    restaura el artefacto y NO se anota nada.

Probadas las dos: con el apartadero sin permiso de escritura sale «no pude apartar el artefacto ⇒
SIN VEREDICTO», el artefacto queda intacto y el libro no crece.

Comprobado además que la tanda mala no perdió NADA: como el `mv` fallaba, los 47 artefactos nunca
salieron del store (`faltan: 0`). El daño fue sólo el registro, y está purgado — el libro queda con
51 verificaciones buenas.

La regla, ya por triplicado hoy: cuando un guardián no puede establecer algo, el estado es *sin
veredicto*, y eso no se escribe. Un libro que anota lo que no midió se cree igual que uno que sí.
This commit is contained in:
Sergio
2026-09-05 21:44:50 +00:00
parent 6c1f80204a
commit 8a2c6fad39
2 changed files with 23 additions and 49 deletions
+2 -47
View File
@@ -37,53 +37,6 @@ npth e5682fca87a9f591d533855b0056a07b5724304fb53402c940524d885908d980 2026-09-05
musl-fts b9681a5205197d51bb777efde1a271e9b189bf35d74091834c5f1aa43d82f16e 2026-09-05 reproduce
musl-obstack 4a5b3327efb9cd5ec015d3f62e9ec85451deb08560d4963b2567d1e2a124acbb 2026-09-05 reproduce
hicolor-icon-theme 98ad44a5c02059b4cac576bbbf24195a229cda1c807f1eb6c7e80424ceab1e16 2026-09-05 reproduce
angle-grinder 0c48ecd61f38dc8fdf5a8068bb5772390586587efb8649f58e42c17e623c21b1 2026-09-05 NO-DETERMINISMO
apko 98192c79fe925d9606f075e3195d08c70d6ee348d4788c91f8c8f698c3142596 2026-09-05 NO-DETERMINISMO
appstream 8cdbe4f4772f20c105c6867a95765880febdceec99f7f409dc4313f8da1a282a 2026-09-05 NO-DETERMINISMO
argo-rollouts faf20cb25dc3bfafd94349a95346819cdc428d5141204f4643fccc81e2374f2c 2026-09-05 NO-DETERMINISMO
argocd 36bf1c3d732870bb7b315dfcdb553fc9a6ffc4c0b746cef4a7fcf980c15c00e1 2026-09-05 NO-DETERMINISMO
argp-standalone 5268738b1800a814d5fced165d15bd0d2f69c471e1031d6778fdefabd1a6c64d 2026-09-05 NO-DETERMINISMO
arje-absorb 833838730d0dd1169dc59af9b70ef6f781c839a8c72dd2a91cceb82c8f1fa6c7 2026-09-05 NO-DETERMINISMO
arje-getty-stub cdb160891853451cbe55909c508751e301a822b11f54e61e8859dc7d6fc4ba37 2026-09-05 NO-DETERMINISMO
arje-installer fdc941af2530d8b6bf4347084aa6c5d50aee191431ce98a9ea52f2cfebb797c9 2026-09-05 NO-DETERMINISMO
arje-logind-compat f4af586233e7f4644dbdb1874efb290e5b5b761ca95d3cb5ce5f53392f979eaf 2026-09-05 NO-DETERMINISMO
arje-net-bring-up 3be9d05dd4959642b3495b54757cb177fa3f2da5bb8ed65c03c51834b3bfac16 2026-09-05 NO-DETERMINISMO
arje-packager 9bc5e2ba96710698f3e99b06893df99ca8d3c59306ce3d2863534f834f095758 2026-09-05 NO-DETERMINISMO
arje-polkit-compat 5e521b8821805b93fbc05d67708fd6b47371298f5d10cca660df7b3e69c798f7 2026-09-05 NO-DETERMINISMO
arje-zero-attest 06e6b7c50e62c1a1a97efcc0079ec89175776e0323d55189af45e7a1a2e27759 2026-09-05 NO-DETERMINISMO
arje-zero b34c571bb80e52815f6eefe8f7f55cbbbc7910cd9c1c7bc86cf434c3d4a6a141 2026-09-05 NO-DETERMINISMO
asnmap bc5e20054ba468d588704274d837636965510185d04d924e7050f4198bff1ced 2026-09-05 NO-DETERMINISMO
ast-grep 587f7e0033af1180bb75f9fce453e04208a8ef468207882e6536e751de624164 2026-09-05 NO-DETERMINISMO
atac bd14ad1fdf1146eb1880a5e8f042f908c463c8f96401157425fbd0e95f898bba 2026-09-05 NO-DETERMINISMO
atk cb82aab7de76e97a004b9d972f63938bc78df34a00458fe6c28b33abee9b9887 2026-09-05 NO-DETERMINISMO
atlantis 458b6df0fb3ce30036787f617b163d9e9ec0db3f934137edfe505f11f4f4b202 2026-09-05 NO-DETERMINISMO
atlas ea84f9b33bf7852f9a0e4c5826c75c4996ffe8362a95e7c199e0e2554e61e301 2026-09-05 NO-DETERMINISMO
atmos 93af81aa27d3507545731c55ece0d6bdefd221b7f611ec6456e788beb5ccbe56 2026-09-05 NO-DETERMINISMO
atuin 44b6ca9302e6d42b20c0a8b8ab94cb89beb218f6c2f1136c7563f480f538c07a 2026-09-05 NO-DETERMINISMO
bacon dd96ac604007d8f45101e8ea84695ef45c0344ee44ed8f74e0e05131b90d7cdc 2026-09-05 NO-DETERMINISMO
bandwhich 2af041e8b67c57c9f99805c703beffd0a7b4eece6123ce4911afcb0d648fbfae 2026-09-05 NO-DETERMINISMO
bash 87bf1a59ae03bc0b7a8604da0e4f0ada3eac8850ea231ce97ddc264f33a2a224 2026-09-05 NO-DETERMINISMO
bat 53e5935e6eff3699b8f728165978e7f95ca29859cb9d602f895065023f941c9a 2026-09-05 NO-DETERMINISMO
bazelisk 9d86884f9bb8650419da3fe952e39819d729724cfaf37fc1c8d23b93e9dd5119 2026-09-05 NO-DETERMINISMO
benthos 9ed9fec63a3e0e3d7844420734b3a7894fea87217d88b5d6147d76887548c642 2026-09-05 NO-DETERMINISMO
bingrep 0fc25b71d26b8e6a20aebbd324cc6489e7ff9b484c5ecfec01112ed4c4541e0b 2026-09-05 NO-DETERMINISMO
binutils 4b5fbf3b38baf6f9579d56353925cd8b7f4b4e5acce9be80534e1c896a160104 2026-09-05 NO-DETERMINISMO
biome dfa881ee7de575c85cfb6b0034fb705a08e684979607d98481265892fe2014d4 2026-09-05 NO-DETERMINISMO
bison 8cd3ec35022757fcd099e1a72d9fb30a3d05a54197f81b0fef6af87a6e7a0686 2026-09-05 NO-DETERMINISMO
blackbox_exporter bd91fe9a82b539e4c68ab5f1ee41aa1b8c76095d2663b4df236c290b3e502eae 2026-09-05 NO-DETERMINISMO
blocky b1a70bd8141806252e260ade5c49d7240ad860ad1cd130b90043f59bb3902234 2026-09-05 NO-DETERMINISMO
bob 88f600fa8d677baf8423e38e9b04fc236dd6a1e526bc3fb1c6178cab3c1893ff 2026-09-05 NO-DETERMINISMO
bom e853d5bed4a780d2838d09c18b468666a8610d31569d27215e9106f8a1711b20 2026-09-05 NO-DETERMINISMO
bombardier 2b68c8608af297d69cda4e993a3d80094dd5b21e6fe03723ee84c5fef47afbcd 2026-09-05 NO-DETERMINISMO
bottom 4c9e025742f6614419e7caa6d6d6f45f62e38bf8a26c752cfe9bdf355a14c574 2026-09-05 NO-DETERMINISMO
boxxy 33c54a91568f58ec9c00677e2971002ffe6741ec97c2d9ddf3e4cd455120e818 2026-09-05 NO-DETERMINISMO
broot 94a5e760ab71cdfb9b8ba281226b8009d7919bab02b7e95f39e921e63b4ae793 2026-09-05 NO-DETERMINISMO
brotli 48d0a0c848a0e8f19941fd8b9f5505fcf6120c72d165875854fb6b0b9d598479 2026-09-05 NO-DETERMINISMO
brush 715237c78edd5d5073c3b5af000c1d39974f1f17ba218ae2d4f7697f29e599f1 2026-09-05 NO-DETERMINISMO
buf 4650e711bdbfaa29677614d5c0d4227b92f6492c1405f52b51d245f4dfda466b 2026-09-05 NO-DETERMINISMO
buildkite-agent 823b72eb964c39f2d4c33d4eb0fc3ad72294971500451133015a1093f96e4c61 2026-09-05 NO-DETERMINISMO
busybox 2a2b1280c57affe906ce43ba20fd3867dda18b9ed4476ef64285baf018c4a5fd 2026-09-05 NO-DETERMINISMO
bwrap 2c82bfcc5850c80e19835fdbabe7d0af0155419210cbb751f3021047c8a2632d 2026-09-05 NO-DETERMINISMO
iputils bf367f33fc000c41287c3b92e5caadee16ca1488ed433ec27ba3817d5b795350 2026-09-05 reproduce
wlr-randr 10359a8a229afa8804ced117d2c0568075d3b410032ff1396ba34762b2b23f0e 2026-09-05 reproduce
dhcpcd c2cd34287983f133c1925697c46b727fab5cc99874aa65751b1a305df6fffac5 2026-09-05 reproduce
@@ -102,3 +55,5 @@ dbus 02833d5b5d3c6a577c0f10454591e73f5a7714df24ab66d5db97f7dadecd65a0 2026-09-05
procps-ng 6a8ebd6a53beafbc54792128466919d14ee7e8cab58507c2372be0f7f3e028ff 2026-09-05 reproduce
vim b4c0d477428af4bf75e9b55d6ff2b2508b7f7e55f4ace9207a6f25c4d3080bd8 2026-09-05 reproduce
kbd be9969f808c8499972e213f474a52d5f7477bf7faff78b6e0ec580aede507231 2026-09-05 reproduce
npth e5682fca87a9f591d533855b0056a07b5724304fb53402c940524d885908d980 2026-09-05 reproduce
musl-fts b9681a5205197d51bb777efde1a271e9b189bf35d74091834c5f1aa43d82f16e 2026-09-05 reproduce
1 # repro-verificado.tsv — qué artefactos se comprobaron que REPRODUCEN bit a bit, y cuándo.
37 musl-fts
38 musl-obstack
39 hicolor-icon-theme
angle-grinder
apko
appstream
argo-rollouts
argocd
argp-standalone
arje-absorb
arje-getty-stub
arje-installer
arje-logind-compat
arje-net-bring-up
arje-packager
arje-polkit-compat
arje-zero-attest
arje-zero
asnmap
ast-grep
atac
atk
atlantis
atlas
atmos
atuin
bacon
bandwhich
bash
bat
bazelisk
benthos
bingrep
binutils
biome
bison
blackbox_exporter
blocky
bob
bom
bombardier
bottom
boxxy
broot
brotli
brush
buf
buildkite-agent
busybox
bwrap
40 iputils
41 wlr-randr
42 dhcpcd
55 procps-ng
56 vim
57 kbd
58 npth
59 musl-fts
+21 -2
View File
@@ -227,9 +227,28 @@ for f in $RECETAS; do
D="$H-$n"
[ -d "$STORE/$D" ] || { saltada=$((saltada+1)); continue; }
mv "$STORE/$D" "$GUARDA/$D"; PENDIENTE="$PENDIENTE $D"
# ⚠ Si el apartado FALLA, todo lo que sigue es basura: el `why-differs` de después compara contra
# algo que no existe, devuelve error, y un error leído como «difieren» inventa un no-determinismo.
# Pasó el 2026-09-05 con 47 recetas sanas de una sola tanda. Falla ruidoso y se salta la receta.
mkdir -p "$GUARDA"
if ! mv "$STORE/$D" "$GUARDA/$D" 2>/dev/null; then
printf " ⚠ %-26s no pude apartar el artefacto ⇒ SIN VEREDICTO\n" "$n"
fallo=$((fallo+1)); continue
fi
PENDIENTE="$PENDIENTE $D"
if "$HAMMER" --store "$STORE" build "$f" >/dev/null 2>&1 && [ -d "$STORE/$D" ]; then
if "$HAMMER" why-differs "$GUARDA/$D" "$STORE/$D" >/dev/null 2>&1; then
# `why-differs` devuelve no-cero tanto si DIFIEREN como si NO PUDO comparar (una ruta que no
# existe, por ejemplo). Tratar las dos igual es inventar un veredicto: se mira su salida.
cmp_out=$("$HAMMER" why-differs "$GUARDA/$D" "$STORE/$D" 2>&1); cmp_rc=$?
if [ "$cmp_rc" -ne 0 ] && printf '%s' "$cmp_out" | grep -qiE '^Error:|no existe'; then
printf " ⚠ %-26s no pude comparar (%s) ⇒ SIN VEREDICTO\n" "$n" \
"$(printf '%s' "$cmp_out" | head -1 | cut -c1-60)"
fallo=$((fallo+1))
rm -rf "$STORE/$D"; mv "$GUARDA/$D" "$STORE/$D"
PENDIENTE=$(echo "$PENDIENTE" | sed "s| $D||")
continue
fi
if [ "$cmp_rc" -eq 0 ]; then
printf " ✓ %-26s REPRODUCE\n" "$n"; ok=$((ok+1))
anotar "$n" "$H" "reproduce"
rm -rf "$GUARDA/$D"; podar_fuentes "$n"