Files
takana/scripts/fixtures/sh-casos/LEEME.md
T
Sergio ddc6e4845b sh: el banco DIFERENCIAL — compara el ÁRBOL producido, no sólo stdout, y el generador saca el bug de brush sin saber que existe
El banco POSIX de 57 casos lo pasa brush 56/57 y aun así no construye una
receta autotools: mide lo que a uno se le ocurrió preguntar. Este pregunta si
el candidato hace LO MISMO que el control sobre el material que hay.

- compara (rc, stdout, árbol de ficheros producido); stderr es aviso, no
  divergencia — el texto de error diverge legítimamente
- el árbol es la columna que faltaba: el caso 10 diverge SÓLO ahí, que es la
  clase de bug del libtool mal escapado (rc=0, stdout idéntico)
- toda divergencia se confirma re-corriendo control y candidato: separa caso
  no determinista de shell inestable de divergencia real
- fuentes: fixtures de regresión, generador de tortura de comillas, las 1130
  fases del corpus y configure/libtool reales en sh -n

Medido, 1273 casos en 5,5 s: brush 35 duras, bash 8, y CERO en los 1156 casos
de parseo. El generador saca el #1394 entero sin conocerlo. Hallazgo nuevo:
brush no ejecuta nunca el trap EXIT de un subshell — y eso golpea el frente
del PRODUCTO, donde el veredicto del paso 3 decía que no había evidencia en
contra.
2026-09-21 18:58:09 +00:00

16 lines
922 B
Markdown

# Casos de regresión del banco diferencial
Un fichero `.sh` por caso. Los corre `scripts/sh-banco-diferencial.py` bajo cada shell en un
directorio limpio y compara **rc + stdout + árbol de ficheros producido** contra el control.
Reglas:
- **Un caso por fichero**, con un comentario arriba que diga QUÉ mide y DE DÓNDE salió
(bug, receta, card). Un caso sin procedencia es un caso que nadie sabe por qué está.
- **Nada de rutas absolutas ni red.** El `cwd` es descartable y el `PATH` trae el userland de
busybox más el shell bajo prueba; `HOME`, `LC_ALL=C`, `TZ=UTC` fijos.
- **Si el caso escribe ficheros, mejor** — el árbol producido es lo que atrapa los bugs que no se
ven en stdout (el `libtool` mal escapado de brush salía con rc=0 y stdout idéntico).
- El caso **no declara resultado esperado**: el esperado es lo que haga el control. Esto es un
banco diferencial, no una suite de aserciones.