| 1 |
# Seed corpora |
| 2 |
|
| 3 |
Hand-written starting inputs, one directory per fuzz target. These are |
| 4 |
committed; `corpus/` is not. |
| 5 |
|
| 6 |
The split follows `astra-soak-overview`, which calls a minimized corpus |
| 7 |
"accumulated compute, not a build artifact". Both halves of that sentence decide |
| 8 |
something: |
| 9 |
|
| 10 |
- **These seeds are human intent.** Each one names a shape of the grammar worth |
| 11 |
reaching in the first second rather than the first hour: a filter chain, a |
| 12 |
fenced code block, an unbalanced quote. They are reviewable in a diff, they |
| 13 |
do not churn, and they are what a fresh machine needs to start somewhere |
| 14 |
better than random bytes. |
| 15 |
- **`corpus/` is machine output and lives on astra**, under the soak runner's |
| 16 |
persistent directory, where it accumulates across restarts. It is worth |
| 17 |
committing only once it represents real soak hours; a corpus minimized after |
| 18 |
two minutes of local fuzzing is neither accumulated nor compute. Minimize |
| 19 |
with `cargo +nightly fuzz cmin <target>` and commit it when that day comes, |
| 20 |
not before. |
| 21 |
|
| 22 |
Run a target against these on a machine with no corpus: |
| 23 |
|
| 24 |
cargo +nightly fuzz run substitute seeds/substitute |
| 25 |
|
| 26 |
## Crash seeds |
| 27 |
|
| 28 |
An input that once found a bug stays here forever. Two so far, both from one |
| 29 |
root cause: the marker regex is not quote-aware. |
| 30 |
|
| 31 |
- `14-quote-aware-marker-injection`: substitution emits live template syntax. |
| 32 |
- `15-close-brace-in-string-arg`: the minimal form, a `}}` inside a quoted |
| 33 |
filter argument truncating the marker. |
| 34 |
|
| 35 |
These are seeds rather than a `tests/regressions/` directory because the crate |
| 36 |
is not fixed yet. When it is, they become unit tests too, and they stay here |
| 37 |
regardless: a test proves the one case, the seed keeps the fuzzer pushing on |
| 38 |
the shape around it. |
| 39 |
|