Skip to content

CI hardening: arm/mingw matrix, nightly deep-fuzz + soak, sodium watch, implementers notes#151

Merged
gafferongames merged 1 commit into
mainfrom
ci-hardening
Jul 9, 2026
Merged

CI hardening: arm/mingw matrix, nightly deep-fuzz + soak, sodium watch, implementers notes#151
gafferongames merged 1 commit into
mainfrom
ci-hardening

Conversation

@gafferongames

Copy link
Copy Markdown
Contributor

Summary

Process improvements only — no library code change. Closes the last "Process gaps" items from CLAUDE.md.

Improvement 4 — matrix (verified by this PR's CI):

  • Add ubuntu-24.04-arm to the build/test matrix (Debug + Release).
  • Add a MinGW leg (msys2 gcc + ninja) so the __MINGW32__ code path — packet-tagging disabled, QOS typedefs — is actually compiled and tested on every push.

Improvement 2 — continuous-ish fuzzing:

  • New scheduled.yml deep-fuzz job: 20 min per target nightly, with an accumulating corpus cached across runs via actions/cache (the correct pattern for coverage that grows over time).
  • Smoke-fuzz leg now warm-starts from a checked-in seed corpus.
  • fuzz/corpus/fuzz_parse_address/: hand-written, ASan-verified seed set of valid/edge address strings.

Improvement 3 — nightly soak:

  • scheduled.yml soak job: 15-minute ASan soak; a clean timeout is success, any abort (assert or sanitizer) fails the job.

Improvement 5 — sodium upstream tracking:

  • scheduled.yml sodium-upstream-check job compares SODIUM_VERSION_STRING (1.0.20) to the latest jedisct1/libsodium release and opens a tracking issue if behind (dedup-guarded).
  • sodium/NOTES.md documents the process.

Improvement 1 — cross-implementation advisory:

  • IMPLEMENTERS.md: portable writeup of the replay-protection integer overflow and the STANDARD.md errata for the C#/Go/Rust/TypeScript port maintainers to check against. Linked from README. (Filing issues on those third-party repos is held pending your go-ahead — see PR discussion.)

Notes

  • Scheduled jobs only run on the default branch, so they can't execute in this PR; the underlying commands (deep fuzz, ASan soak, version compare) were validated locally, and each has workflow_dispatch for manual verification after merge. Both workflow files validated as YAML.
  • The matrix additions (arm64, MinGW) do run in this PR — that's the real verification here.

Test plan

  • arm64 cell green
  • MinGW leg green (the one most likely to need a fix)
  • existing 8 cells still green

🤖 Generated with Claude Code

… implementers notes

Process improvements, no library code change:

- ci.yml: add ubuntu-24.04-arm to the build/test matrix and a MinGW
  (msys2 gcc + ninja) leg, so the __MINGW32__ code path and arm64 are
  covered on every push. Smoke fuzz now warm-starts from the checked-in
  seed corpus.

- scheduled.yml (new, nightly + manual dispatch):
  - deep-fuzz: 20 min per target with an accumulating corpus cached
    across runs via actions/cache.
  - soak: 15 min ASan soak; clean timeout is success, any abort fails.
  - sodium-upstream-check: compares SODIUM_VERSION_STRING to the latest
    jedisct1/libsodium release and opens a tracking issue if behind.

- fuzz/corpus/fuzz_parse_address: hand-written, verified-clean seed
  corpus of valid/edge address strings for a warm fuzzer start.

- sodium/NOTES.md: document the upstream tracking process the scheduled
  check drives.

- IMPLEMENTERS.md (new): portable writeup of the replay-protection
  integer overflow and the STANDARD.md errata, for maintainers of the
  C#, Go, Rust, and TypeScript ports to check their implementations
  against. Linked from README.

- CLAUDE.md: reflect the expanded CI, nightly jobs, and that OSS-Fuzz
  enrollment is the one remaining external process step.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@gafferongames gafferongames merged commit 77c6803 into main Jul 9, 2026
11 checks passed
@gafferongames gafferongames deleted the ci-hardening branch July 9, 2026 17:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant