4.9 KiB
4.9 KiB
id, name, status, depends_on, scope, risk, impact, level, tags
| id | name | status | depends_on | scope | risk | impact | level | tags | ||
|---|---|---|---|---|---|---|---|---|---|---|
| fuzz-scaffold | Fuzz sidecar scaffold — `fuzz/` workspace, runner, dict, seed generator, shared-crate skeleton | pending | moderate | low | phase | implementation |
|
Description
The wave-7 scaffold (docs/research/fuzzing.md
§2 — the layout is inherited wholesale from the four upstream siblings,
not re-decided): the fuzz/ sidecar workspace and its stable-toolchain
gate crate, copied from alksocks' working edition with only naming
substitutions.
fuzz/sidecar workspace:fuzz/Cargo.toml(alkstore-fuzz,publish = false, own[workspace]table,libfuzzer-sys+alkstore-fuzz-sharedpath dep;[[bin]]entries land with the target tasks, not here),fuzz/rust-toolchain.tomlpinningchannel = "nightly"+llvm-tools-previewinsidefuzz/only — the crates themselves stay on stable, and the root workspace's toolchain behavior must be unaffected.fuzz/shared/—alkstore-fuzz-shared, the STABLE-toolchain library whose#[cfg(test)]corpus-replay modules are the fuzz gate (§6): skeletonlib.rswith the crate doc carrying the quinn-CI pattern rationale, plus thearbitrary_value.rsJsonValuebounded-depth helper copied from alksocks (the structured-generation path §3.1's targets share). Dependencies:alkstore(path), plusserde_json+arbitrary(derive feature). Engine-crate deps land with the targets that need them.sharedconsumes public API only — it must never become a dependency of any workspace crate (the wasm note, §2).fuzz/run-detached.sh— copied verbatim from alksocks (CWD-independent,setsid+nohup+ full redirection,pid=echo,FUZZ_RUNTIME_SECSoverride). The §5 isolation rule is inherited unchanged: campaigns never run as a foreground child of an agent session.fuzz/json.dict— copied from a sibling (alksocks has it atfuzz/json.dict).fuzz/gen_fuzz_seeds.py— the deterministic seed generator (quiche pattern): alksocks' script as the structural template, alkstore's own seed functions land per-target. Skeleton lands here with the sharedseed_name/write_seedplumbing and an empty target registry.fuzz/.gitignore— the alksocks pattern:target,artifacts,coverage, andcorpus/*with!-negations for the committed seed dirs (each target task adds its negation line when its corpus lands).fuzz/README.md— skeleton modeled on alksocks' (layout, targets table filled by the target tasks, commands incl. the run-from-fuzz/-so-rustup-selects-nightly rule).- Root
Cargo.toml: addexclude = ["fuzz"]to the[workspace]table — defensive insurance against auto-discovery (the alkcall §2 lesson; this repo's explicit-members list already prevents it, the exclude makes it structural). The publish-exclusion verification stays wave 8's (§2); this task lands the mechanism. - Corpus dirs:
fuzz/corpus/<target>/scaffolding lands per-target with the seeds; nothing to commit here.
Toolchain prerequisites verified present in the dev environment
(2026-10-10): nightly + cargo-fuzz 0.13.2 installed; alksocks'
fuzz/Cargo.lock exists as the copy reference.
Acceptance Criteria
fuzz/exists with the §2 layout: sidecarCargo.toml(own[workspace],publish = false),rust-toolchain.toml(nightly + llvm-tools-preview),shared/crate,run-detached.sh(executable),json.dict,gen_fuzz_seeds.py,README.md,fuzz/.gitignorefuzz/sharedcompiles and tests green on stable viacargo test --manifest-path fuzz/shared/Cargo.toml(the gate command works from the wave's first task onward)cargo fuzz buildsucceeds fromfuzz/(nightly selected by the pin; zero targets yet is acceptable if cargo-fuzz tolerates it — otherwise a placeholder target documents the check; record which)- Root workspace unaffected:
cargo build/cargo test/clippy -D warnings/fmt --checkgreen from the root, and the root toolchain is still stable (the pin did not leak upward) exclude = ["fuzz"]present on the root[workspace]tablerun-detached.shis byte-identical to alksocks' modulo the usage-line naming (no behavior drift)sharedis not referenced by any workspace crate manifest (wasm posture intact:cargo check --target wasm32-unknown-unknown -p alkstore-memstill clean)
References
- docs/research/fuzzing.md §2 (layout + toolchain), §5 (runner), §6 (no-CI / replay gate)
- /workspace/@alkdev/alksocks/fuzz/ (the copy source: Cargo.toml, rust-toolchain.toml, run-detached.sh, json.dict, gen_fuzz_seeds.py, .gitignore, README.md)
- docs/plans/implementation.md §Wave 7
Notes
To be filled by implementation agent
Summary
To be filled on completion