Skip to main content

max / makenotwork

1.8 KB · 40 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 is deliberate and follows `astra-soak-overview`, which calls a
7 minimized corpus "accumulated compute, not a build artifact". Both halves of
8 that sentence decide 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 the
29 same finding on 2026-08-11 (GoingsOn problem `subst-substitute:4def8fda6141`):
30
31 - `14-quote-aware-marker-injection` -- substitution emitted live template
32 syntax, because the marker regex is not quote-aware.
33 - `15-close-brace-in-string-arg` -- the minimal form of the same root cause: a
34 `}}` inside a quoted filter argument truncates the marker.
35
36 These are seeds rather than a `tests/regressions/` directory because the crate
37 is not fixed yet. When it is, they become unit tests too, and they stay here
38 regardless: a test proves the one case, the seed keeps the fuzzer pushing on
39 the shape around it.
40