Skip to main content

max / makenotwork

1.7 KB · 39 lines History Blame Raw
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