You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: record 8h fuzz soak results and corpus coverage
Document the SFV-weighted soak (all PASS, no crashes) and how to replay $GOCACHE corpus for post-soak coverprofiles.
Co-authored-by: Cursor <cursoragent@cursor.com>
Interesting-input growth continued through the long runs (especially verify / HMAC), with plateaus late in each budget — expected, not a signal to stop early on a short quiet window.
103
+
104
+
### Post-soak corpus coverage
105
+
106
+
`go test -fuzz` does not write a coverprofile while mutating. Coverage after a soak is measured by **replaying** the cached corpus:
107
+
108
+
1. Interesting inputs live under `$GOCACHE/fuzz/github.com/yaronf/httpsign/<Target>/` (not under `testdata/fuzz/` unless copied).
109
+
2. Stage those files into `testdata/fuzz/<Target>/` temporarily (hardlinks are fine).
110
+
3.`go test -run='^FuzzXxx$' -coverprofile=... .` then exercises the soak corpus as ordinary seeds.
111
+
4. Remove the staged files afterward; do **not** bulk-commit the cache dump.
112
+
113
+
2026-09-05 replay (cache entry counts ≈ soak “total interesting”), mean per-function % on focus files / package total:
Compared with seed-only baselines, package totals rose a few points (e.g. verify ~18.5%→21.2%, HMAC ~30.8%→33–34%). Most soak “interesting” finds refine edges already near existing coverage rather than opening large new statement regions — still valuable for crash hunting.
124
+
88
125
## Harness conventions
89
126
90
127
-**Panic-oriented** (`FuzzVerifyRequest`, `FuzzVerifyViaMessage`): discard expected verify/setup errors; return early on nil/`NewMessage` failure; never `t.Error` on bad signatures.
@@ -93,7 +130,9 @@ Gaps that seeds now push harder: truncated/malformed SFV, `;tr` / `;bs` / `;sf`,
93
130
94
131
## CI
95
132
96
-
The `fuzz` job in `.github/workflows/test.yml` runs each target with `-run='^$' -fuzztime=15s` sequentially on Go 1.27. It fails on crash or failing corpus. This is a **smoke**, not a long soak; longer nightly budgets can be added later.
133
+
The `fuzz` job in `.github/workflows/test.yml` runs each target with `-run='^$' -fuzztime=15s` sequentially on Go 1.27. It fails on crash or failing corpus. This is a **smoke**, not a long soak.
134
+
135
+
For occasional long soaks (hours), use the weighted budgets in the soak section above; keep the machine from sleeping so wall clock ≈ fuzz-time. Optional follow-on: a scheduled nightly job with a larger `-fuzztime`.
97
136
98
137
## Checklist (after library changes that touch parse/sign/verify)
0 commit comments