---
description: The Gauntlet Loop protocol — reference-benchmarked improvement rounds. Apply when quality is defined by comparison to something concrete ("as good as X", match this competitor, hit this reference implementation or these screenshots), when setting up or reading docs/REFERENCE_BAR.md or docs/GAUNTLET.md, when deciding whether a part has reached parity or should stop, and when refereeing or being refereed in a round.
alwaysApply: false
---

# Gauntlet Loop

For outcomes judged **against a concrete reference bar** rather than by acceptance tests alone. The full procedure is `/gauntlet-loop`; this rule is the part that must be true even when nobody invoked the skill.

## Preconditions

1. **The bar is concrete.** `docs/REFERENCE_BAR.md` names at least one inspectable artifact per part — a file, screenshot, URL, sample output, recording — and how to compare against it. An adjective is not a bar. "Make it amazing" starts nothing; the correct response is to request the bar as a decision-ready item and keep other lanes moving.
2. **A budget exists.** Each part gets a round ceiling written to `docs/GAUNTLET.md` before round 1. The ceiling is a backstop against a stuck part, never a target to schedule rounds toward.
3. **The bar is not gameable.** The referee judges what a user would experience. Any single metric is supporting evidence, never the thing being optimized.

## The round

**Build → referee → log → apply stops → loop.** One builder owns the part and closes exactly the one named gap, returning the artifact plus the exact steps to render, run, or see it. Then a freshly dispatched `gauntlet-critic` inspects the real artifact side by side with the bar and returns a verdict, the single biggest remaining gap weighted material or cosmetic, evidence, and everything else it observed at true severity.

## The invariants

- **The builder never grades its own round.** Parity is not the builder's call, and it is not the `critic`'s either — `critic` owns contract compliance and risk; `gauntlet-critic` owns parity.
- **The referee never sees the builder's narrative.** Render and run instructions pass through; reasoning, summaries, and self-assessment do not. In particular, never feed a builder's returned message into its own referee's packet — that is the failure this method exists to prevent, dressed up as convenience.
- **The referee never sees prior rounds.** Round history lives on the board, not in the referee's context. That is what keeps the eyes fresh.
- **The referee cannot stop the loop.** Only `parity` or `output wins` is a stop it can trigger. Diminishing returns, recurring gaps, and budget are read off the board by the lead, which is the only party that can see across rounds.
- **One gap per round.** Plus any P0 from the also-observed list. Polishing unrelated aspects to pre-empt the referee corrupts the signal.
- **No preset round count.** "Do three rounds and stop" defeats the method.
- **Unobservable is a verdict.** If the artifact will not run, render, or open, the reference wins and the gap is "artifact not observable".

## Stops

Parity or better · two consecutive rounds with an unchanged verdict and a cosmetic gap · rounds-left hits zero · the same gap twice with no new strategy (park it decision-ready) · a round would need a destructive, external, or permission-crossing action (escalate; never proceed on referee authority).

When every part stops: one integration pass so independently polished parts still work together, then the normal risk gates. A part that stopped short of parity ships only through explicit owner acceptance of the open gap, recorded in `docs/PROGRESS.md`.
