Skip to content

fix(forge): report frontier invariant failures - #16850

Open
figtracer wants to merge 3 commits into
masterfrom
fig/report-frontier-invariant-failures
Open

figtracer wants to merge 3 commits into
masterfrom
fig/report-frontier-invariant-failures

Conversation

@figtracer

@figtracer figtracer commented Sep 14, 2026

Copy link
Copy Markdown
Member

Symbolic invariant frontier seeding already concretely replayed solved sequences, but confirmed counterexamples were only written to the mutation corpus. The same forge test could therefore pass even though a later forge fuzz replay reproduced the failure. This keeps every replay-confirmed predicate, including the campaign anchor, through the normal invariant result path and persists its exact failure site. Site-locked reproducers skip generic shrinking so the reported sequence, reason, and trace describe the same failure. forge fuzz replay remains replay-only, and stateless fuzzing is unchanged.

Across three independent Maze captures, the unchanged solver produced five concrete counterexamples that master stored but did not report; all five replayed exactly. This demonstrates the generic reporting defect, not a Maze-wide engine improvement. A WETH fixture and the Nerite stateful suite remained neutral when their captured frontiers produced no eligible confirmed counterexample. Regression coverage includes multiple confirmed predicates in one batch, reverted prefixes, assertion candidates, direct predicate checks, afterInvariant, and exact-site replay.

AI assistance was used to implement and validate this change.

Symbolic frontier seeding already concretely replayed candidate sequences but only wrote them to the mutation corpus. Persist exact failure sites through the existing invariant cache so the normal replay, shrink, attribution, and result path reports them in the same run. Keep explicit fuzz replay replay-only.
@github-actions

Copy link
Copy Markdown
Contributor

✅ Changelog found

The deterministic check will validate the changed entry.

@figtracer
figtracer marked this pull request as ready for review September 14, 2026 11:57

@mablr mablr left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe let's keep freshly confirmed frontier failures in memory and feed them directly into the existing replay/reporting path?

Comment thread crates/forge/src/runner.rs Outdated
Comment thread crates/forge/src/runner.rs Outdated
Comment thread crates/forge/src/runner.rs Outdated
Replay existing invariant failures before frontier solving, keep newly confirmed failures independent of persistence, and reject frontiers beyond the configured campaign depth. Preserve the original reproducer when generic shrinking changes the failure site.
Comment thread crates/forge/src/runner.rs Outdated
Comment thread crates/forge/src/runner.rs

@mattsse mattsse left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two reporting issues remain below.

Comment thread crates/forge/src/runner.rs Outdated
Comment thread crates/forge/src/runner.rs
Collect every replay-confirmed frontier predicate, including the anchor, before building the invariant campaign result. Keep exact persisted failure sites out of generic shrinking so the retained counterexample and trace describe the same failure.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

3 participants