wave 7: fuzz sidecar scaffold (fuzz/ workspace, shared crate, runner, dict, seeds skeleton)
This commit is contained in:
1 parent
67d1d7e34f
commit
62ff18d1ed
14 files changed
+614
-15
No files matched your search
+65
-15
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: fuzz-scaffold
|
||||
name: Fuzz sidecar scaffold — `fuzz/` workspace, runner, dict, seed generator, shared-crate skeleton
|
||||
status: pending
|
||||
status: completed
|
||||
depends_on: []
|
||||
scope: moderate
|
||||
risk: low
|
||||
@@ -67,26 +67,31 @@ Toolchain prerequisites verified present in the dev environment
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [ ] `fuzz/` exists with the §2 layout: sidecar `Cargo.toml` (own
|
||||
- [x] `fuzz/` exists with the §2 layout: sidecar `Cargo.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/.gitignore`
|
||||
- [ ] `fuzz/shared` compiles and tests green on **stable** via
|
||||
- [x] `fuzz/shared` compiles and tests green on **stable** via
|
||||
`cargo test --manifest-path fuzz/shared/Cargo.toml` (the gate
|
||||
command works from the wave's first task onward)
|
||||
- [ ] `cargo fuzz build` succeeds from `fuzz/` (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` /
|
||||
- [x] `cargo fuzz build` succeeds from `fuzz/` (nightly selected by the
|
||||
pin; **cargo-fuzz does NOT tolerate zero targets** here — a
|
||||
bins-only package with no `[[bin]]` fails manifest parse, which
|
||||
also blocks the shared gate's workspace discovery; a placeholder
|
||||
target `fuzz_targets/placeholder.rs` documents the check and is
|
||||
replaced by the wave-1 target tasks — recorded, as this AC asked)
|
||||
- [x] Root workspace unaffected: `cargo build` / `cargo test` /
|
||||
`clippy -D warnings` / `fmt --check` green from the root, and the
|
||||
root toolchain is still stable (the pin did not leak upward)
|
||||
- [ ] `exclude = ["fuzz"]` present on the root `[workspace]` table
|
||||
- [ ] `run-detached.sh` is byte-identical to alksocks' modulo the
|
||||
usage-line naming (no behavior drift)
|
||||
- [ ] `shared` is not referenced by any workspace crate manifest
|
||||
(wasm posture intact: `cargo check --target
|
||||
wasm32-unknown-unknown -p alkstore-mem` still clean)
|
||||
- [x] `exclude = ["fuzz"]` present on the root `[workspace]` table
|
||||
- [x] `run-detached.sh` is byte-identical to alksocks' modulo the
|
||||
usage-line naming (`cmp` clean — the usage line is already
|
||||
repo-agnostic, so no diff at all)
|
||||
- [x] `shared` is not referenced by any workspace crate manifest
|
||||
(only the root's `exclude = ["fuzz"]` mentions fuzz at all;
|
||||
`cargo check --target wasm32-unknown-unknown -p alkstore-mem`
|
||||
clean)
|
||||
|
||||
## References
|
||||
|
||||
@@ -99,8 +104,53 @@ Toolchain prerequisites verified present in the dev environment
|
||||
|
||||
## Notes
|
||||
|
||||
> To be filled by implementation agent
|
||||
- **Zero targets are NOT tolerated by cargo-fuzz / cargo here** — the
|
||||
AC's "if tolerated" branch failed: a bins-only package with no
|
||||
`[[bin]]` entries cannot manifest-parse ("no targets specified"),
|
||||
and that parse failure also breaks the shared gate's workspace
|
||||
discovery (`cargo test --manifest-path fuzz/shared/Cargo.toml`
|
||||
resolves the workspace root at `fuzz/`). Placeholder route taken
|
||||
(as the AC's otherwise-branch prescribed): `fuzz_targets/placeholder.rs`
|
||||
— a minimal `fuzz_target!` stub with a doc comment saying the wave-1
|
||||
target tasks replace it — plus its `[[bin]]` entry in `fuzz/Cargo.toml`.
|
||||
- **Repo-layout substitution beyond naming:** alksocks has its package
|
||||
at the repo root (`alksocks = { path = "../.." }`); alkstore is the
|
||||
ADR-001 workspace split, so the core crate sits in the `alkstore/`
|
||||
subdir — shared's dep is `alkstore = { path = "../../alkstore" }`
|
||||
and the fuzz package's is `path = "../alkstore"`.
|
||||
- **`json.dict`** is byte-identical across alkcall / alktunnels /
|
||||
alksocks (md5-verified), so it was copied verbatim (alkcall-envelope
|
||||
tokens). Whether any alkstore-specific tokens should be added is a
|
||||
target-task concern, not scaffold scope.
|
||||
- `fuzz/Cargo.lock` is committed (alksocks pattern); generated
|
||||
fresh — alksocks' lock is not portable across dep sets.
|
||||
- `arbitrary_value.rs` copied verbatim except one intra-comment stale
|
||||
reference: alksocks' `envelope_frame` → "the payload targets".
|
||||
- `fuzz/.gitignore` has no `!corpus/<target>` negation lines yet —
|
||||
each target task adds its own when its corpus lands (task spec).
|
||||
- `gen_fuzz_seeds.py` is the plumbing-only skeleton (`seed_name` /
|
||||
`write_seed`, empty `main()` registry); runs clean as a no-op.
|
||||
|
||||
## Summary
|
||||
|
||||
> To be filled on completion
|
||||
Landed the wave-7 scaffold: `fuzz/` sidecar workspace
|
||||
(`alkstore-fuzz`, `publish = false`, own `[workspace]`, libfuzzer-sys +
|
||||
path-dep shared crate) with `rust-toolchain.toml` pinning
|
||||
nightly + llvm-tools-preview inside `fuzz/` only; stable-toolchain
|
||||
`fuzz/shared` (`alkstore-fuzz-shared`) with the quinn-CI-pattern crate
|
||||
doc and the alksocks `arbitrary_value.rs` `JsonValue` bounded-depth
|
||||
helper; `run-detached.sh` (byte-identical to alksocks', executable);
|
||||
`json.dict`; `gen_fuzz_seeds.py` skeleton; `.gitignore` (no corpus
|
||||
negations yet); `README.md` skeleton; `exclude = ["fuzz"]` on the root
|
||||
workspace; and the placeholder fuzz target so the toolchain check and
|
||||
the shared gate work before the real targets land.
|
||||
|
||||
Verified: `cargo test --manifest-path fuzz/shared/Cargo.toml` green on
|
||||
stable from the root; `cargo fuzz build` green from `fuzz/` (nightly
|
||||
pin selected; placeholder + shared + alkstore compile under ASAN);
|
||||
shared clippy `-D warnings` + `fmt --check` green; root `cargo build` /
|
||||
`cargo test` (all suites pass) / clippy `-D warnings` / `fmt --check`
|
||||
green with the stable toolchain still active at the root (rustc 1.99.0
|
||||
stable; no upward pin leak); `cargo check -p alkstore-mem --target
|
||||
wasm32-unknown-unknown` clean; no workspace manifest references
|
||||
`alkstore-fuzz-shared` (only the root `exclude` mentions `fuzz`).
|
||||
Reference in new issue
Block a user