docs: LEARNING.md + fuzz/ placeholder + README dev-loop (spec §7, §6.3)
LEARNING.md indexes ten concept-to-file pointers (the spec floor was five) — the newtype pattern, exhaustive enum match, sans-IO, trait extension seams, thiserror + hot-path match-and-continue, Arc<Mutex> vs Arc<RwLock>, DashMap, str0m's single-mutation invariant, graceful shutdown, include_str!. fuzz/README.md pre-paves the layout (no hostile-bytes surface in slice 1; harnesses land at step 5 per the out-of-scope table). README's new dev-loop section documents the libopus FFI prerequisite and the manual e2e steps.
This commit is contained in:
21
fuzz/README.md
Normal file
21
fuzz/README.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# fuzz/ — cargo-fuzz harness directory (placeholder)
|
||||
|
||||
**Status:** placeholder. Not yet a cargo-fuzz project — just the directory.
|
||||
Fuzz harnesses land at spearhead step 5 (PSTN trunk) alongside the
|
||||
SIP/SDP/RTP wire parsers (PORT_PLAN §10 mandates continuous fuzzing of
|
||||
every wire parser). Slice 1 has no hostile-bytes surface (the browser is
|
||||
trusted), so no harnesses here yet — the `fuzz/` dir pre-paves the
|
||||
layout. Populating this directory with a real `cargo-fuzz` project
|
||||
(`fuzz/Cargo.toml` + `fuzz/fuzz_targets/*.rs`) happens at step 5.
|
||||
|
||||
If you're at step 5, replace this README with that structure:
|
||||
- `fuzz/Cargo.toml` — cargo-fuzz manifest.
|
||||
- `fuzz/fuzz_targets/sip_parser.rs` — fuzz the SIP parser.
|
||||
- `fuzz/fuzz_targets/sdp_parser.rs` — fuzz the SDP parser.
|
||||
- `fuzz/fuzz_targets/rtp_packet.rs` — fuzz the RTP packet parser.
|
||||
- CI job running a short fuzz burst on each PR (the cargo-fuzz integration
|
||||
lands in `.github/workflows/` at that point).
|
||||
|
||||
The hot-path "drop + observe, don't crash" policy (spec §3.8) is what the
|
||||
future harnesses assert against: throw arbitrary bytes at the parser,
|
||||
assert it returns an error or drops silently — never panics.
|
||||
Reference in New Issue
Block a user