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