ADLC
Toolkit

gate-fuzzing

Fans model instances to generate wrong-but-passing diffs and reports any gate they defeat.

gate-fuzzing

ADLC phase: calibration (cross-phase) · Gate: no configured gate can be defeated by a wrong-but-passing, independently-witnessed candidate diff.

What it defends against

A gate that never sees a hostile input is a gate nobody has tested. gate-fuzzing fans N cheap/mid model instances to produce candidate diffs engineered to pass every configured gate while being genuinely wrong. Each diff that slips through (valid, passing all gates, touching a gate's declared surface, and proven wrong by an independent held-out witness) is a defeat, and each defeat becomes a RED test you commit into that gate. It turns "we found some bypasses once" into a standing CI check.

Every candidate runs in a fresh disposable git clone under an OS sandbox (bwrap on Linux, sandbox-exec on macOS), never in your real tree.

Usage

adlc gate-fuzzing [--suite <path>] [--n <int>] [--tier cheap|mid] [--provider <name> | --providers <a,b,c>] [--record] [--json] [--prompt-only]
FlagDescription
--suite <path>Gate-suite descriptor (default .adlc/gate-suite.json; refuses if absent).
--n <int>Fan width per round (default 6); ignored when --providers is given.
--tier cheap|midAdversary model tier (default mid; frontier is rejected).
--provider <name>Force one provider (anthropic|openai|gemini|agy); mutually exclusive with --providers.
--providers <a,b,c>Fan across distinct named providers, one candidate each.
--max-rounds <int> / --dry-rounds <int>Round ceiling (default 10) and consecutive-dry stop count (default 3).
--witness-trials <int>Unanimous witness runs per side (default 3).
--unsafe-no-sandboxSkip the OS sandbox. Use only inside a disposable VM.
--strict-budgetAny inconclusive stop becomes exit 1 (recommended for CI).
--fail-on-behavioralBehavioral defeats exit 2 (default: report only).
--recordWrite repro artifacts to .adlc/gate-defeats/ and cluster findings.
--jsonMachine-readable output.
--prompt-onlyPrint adversary prompts and exit 0 (zero API keys).

Exit codes

0: earned clean. Potency canary beaten, no defeats found, dry streak reached.1: operational error. Dirty tree, no sandbox binary, failed control self-test, or an inconclusive stop under --strict-budget.2: gate defeated. Wrong-but-passing, surface-bound, independently witnessed.

Example

$ adlc gate-fuzzing --suite .adlc/gate-suite.json --n 6 --record
control self-test: PASS (defeatable=true, sound=true)

gate-fuzzing: 1 gate defeated
  rounds: 4, stoppedBy: defeat
  defeats: 1 (contract: 1, behavioral: 0)
exit 2

Go deeper

packages/gate-fuzzing. Why gates need adversaries, not trust: Prosecution, Not Code Review.

On this page