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:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user