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]| Flag | Description |
|---|---|
--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|mid | Adversary 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-sandbox | Skip the OS sandbox. Use only inside a disposable VM. |
--strict-budget | Any inconclusive stop becomes exit 1 (recommended for CI). |
--fail-on-behavioral | Behavioral defeats exit 2 (default: report only). |
--record | Write repro artifacts to .adlc/gate-defeats/ and cluster findings. |
--json | Machine-readable output. |
--prompt-only | Print adversary prompts and exit 0 (zero API keys). |
Exit codes
--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 2Go deeper
packages/gate-fuzzing. Why gates need adversaries, not trust: Prosecution, Not Code Review.