pub struct FuzzPlan {
pub iterations: u64,
pub mode: GenMode,
pub master_seed: u64,
pub include: Vec<String>,
pub exclude: Vec<String>,
pub max_tools: Option<usize>,
pub timeout: Duration,
pub transport_name: String,
pub detector: DestructiveDetector,
pub severity: SeverityConfig,
pub fuzz_corpus: Option<FuzzCorpus>,
pub mutate_ratio: f64,
}Expand description
A reproducible fuzz plan.
Fields§
§iterations: u64Number of payloads generated per tool.
mode: GenModeGeneration mode (Conform / Adversarial / Mixed).
master_seed: u64Master seed used to derive per-iteration seeds. The same seed reproduces the same sequence of payloads.
include: Vec<String>Glob patterns: empty = match every tool name.
exclude: Vec<String>Glob patterns excluded from the fuzz set. Always honored.
max_tools: Option<usize>Cap on the number of tools after filtering. None = unlimited.
timeout: DurationTimeout applied to each call_tool.
transport_name: StringTransport label persisted in the ReproInfo. Plans don’t open
the transport themselves, so we receive a stable name (stdio /
http) from the caller.
detector: DestructiveDetectorCompiled destructive-tool detector built from
[destructive] + [allow_destructive] config.
severity: SeverityConfig[severity] overrides from wallfacer.toml. Applied to every
produced finding before it lands on disk.
fuzz_corpus: Option<FuzzCorpus>Phase R — optional persistent fuzz corpus. When set, the
loop pulls inputs that triggered findings or new response
fingerprints from prior runs and mutates from them
mutate_ratio fraction of the time. Pure schema-driven
generation handles the remainder so the fuzzer keeps
exploring beyond the corpus’s basin.
mutate_ratio: f64Phase R — fraction of iterations that mutate from the
corpus instead of generating fresh schema-driven payloads.
Default 0.9 matches AFL/libFuzzer convention. Ignored
when Self::fuzz_corpus is None or the corpus is
empty.