Evidencia inmutable de una corrida de 1 hora limpia del generador hand-rolled de M4 (tests/fuzz_parser.rs) sobre gabysql::sql::parse(...). No editar a mano.

Resumen ejecutivo

1 hora · 503.8 millones de queries random · 0 panics.

Métrica Valor
Duración 3 600 s (60 min exactos)
Iteraciones totales 503 861 946
Throughput 139 961 iters/seg
Queries que parsearon OK (azar) 74 787
Queries con parse error (esperado) 503 787 159
PANICS 0

Entorno

Qué se ejercitó

El generador produce 100% queries pseudo-aleatorias en cada iteración, mezcla de:

Cada query es nueva (seed distinto). El generador no retroalimenta coverage como libFuzzer/AFL — es generación pura random. Eso lo hace menos eficiente que un fuzzer coverage-guided pero suficiente para detectar panics groseros y la línea de README es válida.

Lectura crítica

Lo que esta evidencia respalda:

Lo que esta evidencia NO respalda:

Próxima mejora

Cuando alguien quiera subir el bar (próximos meses):

  1. cargo fuzz real en CI Linux — agregar workflow en GitHub Actions con nightly + cargo-fuzz. Mantener este test hand-rolled para ejecución local en Windows + GNU.
  2. Fuzz sobre exec() además de parse() — segundo target con un pre-fixture de tabla y ops random sobre ella. Mucho más caro (cada iter cuesta ms, no µs) pero detecta panics en path de ejecución, no solo en parsing.
  3. Coverage-guided — usar cargo-fuzz con libFuzzer para que el generador aprenda qué inputs exploran nuevo código. Salto de eficiencia importante.

Reproducción

Con esta commit en main, cualquiera puede reproducir:

git checkout <commit>
GABYSQL_FUZZ_PARSER_SECS=3600 \
    cargo test --target x86_64-pc-windows-gnu --release \
    --test fuzz_parser -- --ignored --nocapture

Si encontrás un panic con un seed específico, abrí issue con el seed