DE

debug-fuzzer-failure

This skill automates the debugging of CI failures by creating local reproduction projects and performing binary searches on compiler passes.

Install

mkdir -p .claude/skills/debug-fuzzer-failure && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/4666" && unzip -o skill.zip -d .claude/skills/debug-fuzzer-failure && rm skill.zip

Installs to .claude/skills/debug-fuzzer-failure

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

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. Use when a `pass_vs_prev` or similar fuzzer test fails in CI.
224 chars✓ has a “when” trigger
Advanced

Key capabilities

  • Regenerate reproduction cases from CI seeds
  • Bisect SSA compiler passes
  • Identify semantic preservation bugs
  • Verify reproduction locally

How it works

The skill automates the extraction of a reproduction case from CI logs and guides the user through a binary search of SSA passes to isolate the bug.

Inputs & outputs

You give it
GitHub Actions failure URL
You get back
Identified faulty SSA pass and reproduction project

When to use debug-fuzzer-failure

  • Reproduce fuzzer-identified compiler crashes
  • Bisect compiler SSA passes
  • Debug semantic preservation bugs in Noir

About this skill

Debugging SSA Fuzzer Failures

This skill provides the complete workflow for debugging SSA optimization bugs discovered by CI fuzzers. It combines two sub-skills:

  1. extract-fuzzer-repro — Regenerate a Noir project from the CI seed with just fuzz-repro
  2. bisect-ssa-pass — Bisect SSA passes to find the one that breaks semantics

When to Use This Skill

Use this when:

  • A pass_vs_prev fuzzer test fails in CI
  • You have a GitHub Actions URL showing a fuzzer failure
  • You need to go from "CI is red" to "I know which SSA pass has the bug"

Note: 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.

Workflow Overview

  1. Regenerate the reproduction case from the CI seed (extract-fuzzer-repro)
  2. Verify the failure reproduces locally
  3. Bisect, analyze, and fix (bisect-ssa-pass)

Step 1: Reproduce from the Seed

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 failure
  • Prover.toml — Input values that cause the bug

Quick 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.

Step 2: Verify the Failure Reproduces Locally

Before bisecting, confirm the issue reproduces:

cd repro
nargo execute

If using experimental features (like enums/match), add the appropriate flags:

nargo execute -Zenums

Step 3: Bisect and Fix

Use the bisect-ssa-pass skill to:

  • Identify which optimization pass breaks semantics
  • Analyze the incorrect transformation
  • Create a regression test
  • Fix the bug

Tips

  • The pass_vs_prev fuzzer compares interpretation results before and after each pass, so failures indicate semantic preservation bugs
  • Keep the extracted project around until the fix is merged — you may need to re-test
  • If the SSA is complex, focus on the specific function/block where the semantic change occurs

Related Skills

  • extract-fuzzer-repro — Detailed instructions for reproducing from the CI seed with just fuzz-repro
  • bisect-ssa-pass — Detailed instructions for SSA bisection and regression tests

When not to use it

  • Debugging non-SSA fuzzer failures
  • General Noir debugging unrelated to CI fuzzers

Prerequisites

GitHub Actions URL for the failed job

Limitations

  • Tailored specifically for pass_vs_prev fuzzer failures
  • Seed-to-program mapping can drift over time

How it compares

It provides a structured, automated workflow for CI fuzzer failures instead of manual log analysis and trial-and-error debugging.

Compared to similar skills

debug-fuzzer-failure side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
debug-fuzzer-failure (this skill)13moReviewAdvanced
rust-router32moNo flagsAdvanced
frb-debugging04moReviewIntermediate
implementing-cards72moReviewAdvanced

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

rust-router

actionbook

CRITICAL: Use for ALL Rust questions including errors, design, and coding. HIGHEST PRIORITY for: 比较, 对比, compare, vs, versus, 区别, difference, 最佳实践, best practice, tokio vs, async-std vs, 比较 tokio, 比较 async, Triggers on: Rust, cargo, rustc, crate, Cargo.toml, 意图分析, 问题分析, 语义分析, analyze intent, question analysis, compile error, borrow error, lifetime error, ownership error, type error, trait error, value moved, cannot borrow, does not live long enough, mismatched types, not satisfied, E0382, E0597, E0277, E0308, E0499, E0502, E0596, async, await, Send, Sync, tokio, concurrency, error handling, 编译错误, compile error, 所有权, ownership, 借用, borrow, 生命周期, lifetime, 类型错误, type error, 异步, async, 并发, concurrency, 错误处理, error handling, 问题, problem, question, 怎么用, how to use, 如何, how to, 为什么, why, 什么是, what is, 帮我写, help me write, 实现, implement, 解释, explain

36

frb-debugging

fzyzcjy

Use when generated code looks wrong, code generation fails, or you need to understand FRB internals

00

implementing-cards

bcollazo

Fill out the implementation of effects of different attacks, abilities, and trainer cards in this Pokemon TCG Pocket engine codebase.

790

write-rust-tests

RediSearch

Write Rust tests to verify correctness of Rust code.

922

rust-errors

EpicenterHQ

Rust to TypeScript error handling patterns for Tauri apps. Use when defining Rust errors that will be passed to TypeScript, handling Tauri command errors, or creating discriminated union error types.

521

memory-safety-patterns

sickn33

Implement memory-safe programming with RAII, ownership, smart pointers, and resource management across Rust, C++, and C. Use when writing safe systems code, managing resources, or preventing memory bugs.

415

Search skills

Search the agent skills registry