End-to-end workflow for debugging SSA fuzzer failures from CI. Extracts a reproduction case from GitHub Actions logs, then bisects SSA passes to identify the bug...
This skill provides the complete workflow for debugging SSA optimization bugs discovered by CI fuzzers. It combines two sub-skills:
extract-fuzzer-repro β Regenerate a Noir project from the CI seed with just fuzz-reprobisect-ssa-pass β Bisect SSA passes to find the one that breaks semanticsUse this when:
pass_vs_prev fuzzer test fails in CINote: This workflow is tailored for pass_vs_prev failures, which detect SSA passes that break semantic preservation. Other fuzzers exist that test different properties and may require different debugging approaches. Identify the fuzzer type from the failing test name in the GitHub logs β it follows the format targets::<fuzzer_type>::tests::fuzz_with_arbtest. If the failure comes from a fuzzer other than pass_vs_prev, ask the developer for guidance on how to proceed.
extract-fuzzer-repro)bisect-ssa-pass)Use the extract-fuzzer-repro skill to get a local Noir project. The AST fuzzers are seeded, so the reliable path is to pull the seed (and the failing target) out of the CI log and regenerate the program with just fuzz-repro, rather than copying the printed AST by hand.
Input: GitHub Actions job URL (e.g., https://github.com/noir-lang/noir/actions/runs/12345/job/67890)
Output: A Noir project directory with:
src/main.nr β The generated program that triggered the failureProver.toml β Input values that cause the bugQuick reference:
# Pull the seed (Seed: 0x... / NOIR_AST_FUZZER_SEED=0x...) and target
# (targets::<target>::tests::fuzz_with_arbtest) from the CI log, then:
just fuzz-repro 0x<seed> <target> ./repro
Reproduce on the same commit CI ran on, since the seedβprogram mapping can drift as the generator changes. The extract-fuzzer-repro skill has the full details and a log-scraping fallback for when the seed no longer reproduces.
Before bisecting, confirm the issue reproduces:
cd repro
nargo execute
If using experimental features (like enums/match), add the appropriate flags:
nargo execute -Zenums
Use the bisect-ssa-pass skill to:
pass_vs_prev fuzzer compares interpretation results before and after each pass, so failures indicate semantic preservation bugsextract-fuzzer-repro β Detailed instructions for reproducing from the CI seed with just fuzz-reprobisect-ssa-pass β Detailed instructions for SSA bisection and regression tests