Skip to content

Make fuzz budgets deterministic - #119

Merged
suraciii merged 1 commit into
masterfrom
release-0.1-fuzz-budget
Aug 11, 2026
Merged

Make fuzz budgets deterministic#119
suraciii merged 1 commit into
masterfrom
release-0.1-fuzz-budget

Conversation

@suraciii

@suraciii suraciii commented Aug 11, 2026

Copy link
Copy Markdown
Owner

What Changed and Why

The final master workflow hit Go's duration-boundary fuzz coordinator race:
FuzzParseGrainMarker completed 421,658 executions, then returned
context deadline exceeded at the normal ten-second stop. There was no product
assertion or failing corpus input.

This change replaces wall-clock budgets with hard-coded fixed iteration counts:

  • FuzzReadFrame: 1,600,000;
  • FuzzDecodeRequestContext: 225,000;
  • FuzzParseGrainMarker: 2,250,000.

Every count exceeds the earlier successful ten-second baseline. Caller Make
variables cannot reduce the counts. A new behavior fixture proves that a real
fuzz callback failure still returns exit 1 through testcheck.

Related Issue

Related #118. Keep the issue open until the resulting exact master commit
passes the same hosted jobs.

Specification

This is the seventh release-audit follow-up in ROADMAP step 8. The updated
contract and measured basis are in design/release-0.1.0.md and
research/release-0.1.0-issue-118-fuzz-budget.md. Release status documents now
mark hosted, final same-commit, and tagged proof as open for the new candidate.

Breaking Changes and Migration

None.

User-Visible Change

NONE

Verification

Exact commit: ffbf26e2e94ac82d702bcf2995671073d9caa119 on Linux amd64 with Go 1.26.5.

  • make external, cold test cache: exit 0, 213.97 seconds, 20 external tests,
    including restart recovery and the exact v0.0.5 upgrade.
  • make ci, cold test cache: exit 0, 116.30 seconds. It ran 4 release-contract
    tests, 639 default and race tests, 20 simulation tests, 19 generator tests,
    45 Transport network tests, 50 Shadow network tests, both resource tests,
    and all fixed fuzz budgets.
  • make fuzz: exit 0 and completed 1,600,000, 225,000, and 2,250,000
    executions.
  • TestRunKeepsFuzzFailure: exit 0; its child fuzz callback returned exit 1
    and preserved the failure output.
  • Three independent review passes: final result has no P0, P1, or P2 findings.
  • Hosted run
    31503688931
    passed on this exact PR head: Go 1.25.12, Go 1.26.5 stable with
    govulncheck, macOS, Windows, and aggregate ci. Both Linux lanes completed
    all three fixed fuzz budgets.

Mutation Test

Temporarily changing the first contract expectation from 1,600,000 to
1,599,999 made TestMakefile_ReleaseCommandsKeepTestcheck fail with exit 1
because the required command was absent. The mutation was restored.

Required Checks

  • make ci passes locally.
  • Old and new tests do not test the same contract.
  • Production code does not call time.Now().
  • Tests do not use time.Sleep for synchronization.
  • Code does not use a mutex to wait across Calls.
  • A specification supports the change. It states each implementation gap.

@suraciii
suraciii merged commit 0c41f9f into master Aug 11, 2026
5 checks passed
@suraciii
suraciii deleted the release-0.1-fuzz-budget branch August 11, 2026 14:56
@suraciii

Copy link
Copy Markdown
Owner Author

Post-merge proof passed on exact master commit
0c41f9f644905183d7d4fd8f7efed24e4396bf0d.

  • Local cold-test-cache make external: exit 0, 34.15 seconds, 20 external
    tests including exact v0.0.5 upgrade.
  • Local cold-test-cache make ci: exit 0, 73.37 seconds, all suites and fixed
    fuzz budgets.
  • Hosted run
    31504300130:
    Go 1.25.12, Go 1.26.5 stable with govulncheck, macOS, Windows, and aggregate
    ci all passed. Both Linux lanes reached all three fixed iteration budgets.

Issue #118 can now close. The tag and tagged-module proof remain in #109.

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