Your first Round–Wave loop
The loop is the whole methodology in one sentence: Rounds find. Waves fix. Signals decide. A Round is diagnostic — parallel, independent reviewers, each with one question. A Wave is corrective — patches, in dependency order, each passing a verifier-gate before commit. The loop repeats until the seven signals say it is done (§4, §7.3).
Before anything: commit
A round is anchored to the identity of the code it reviewed — a digest over your git tree, taken outside the loop's own bookkeeping (§7.3.4). A dirty tree voids eligibility: a digest of a dirty tree describes the last commit, not what the reviewer read. So the first rule costs one line:
git status # clean, or commit first
Round 1: dispatch reviewers
Pick your lenses from the lens registry — each lens is a question, not an area (§7.3.1). For a first round, dispatch at least the contract lens, the security lens, and the behaviour lens; a full cycle eventually needs every row, including the free sweep.
For each lens:
- Write a brief that names the lens and the question, and store it
under
.hadur/— outside the reviewed surface, so writing it does not perturb the identity it attests to. The brief is pinned by content hash: an operator cannot rewrite the question after seeing the answer. - Dispatch an independent reviewer — one reviewer identity per lens. One identity holding two lenses is one pass of attention claiming to be two questions, and both claims are rejected (§7.3.4).
- Record findings through the CLI. Never edit
.hadur/findings/*.jsonby hand — evidence of a round is born from the tool, and a hand-written round file is exactly the forgery the evidence rules exist to catch.
Findings come back with severities: Critical, Major, Minor, Nit. A clean verdict is admissible only from a named lens with provenance; from the free sweep, a bare CLEAN is inadmissible — it must enumerate what it examined (§7.3.2).
Wave 1: fix in strict order
A Wave executes what Round 1 found (§4):
- Patches first, in dependency order — lowest-dependency modules first, so downstream patches reference stable signatures.
- Verifier-gate before every commit (§5): a mechanical pass that confirms the patch actually landed, then a runtime-semantics walkthrough for anything large or behavioural. A patch agent's "done" is a claim, not a fact.
- Criticals earn the Breaker (§5.8): an adversarial reviewer whose brief is to construct a bypass of the fix, not to check a box. A Critical fix that has not survived the Breaker is not closed.
One commit per patch. Never amend a committed wave; never skip hooks.
The part everyone resists
The wave changed the code, so every lens's clean streak is now void — including lenses that found nothing and lenses whose files the wave never touched. "The wave did not touch my files" is itself a claim, and it is exactly the claim a reachability defect falsifies. There is nothing to declare and nothing to forget: the reset happens because the tree digest changed, not because anyone wrote a wave record (§4, §7.3.4).
Plan for it: the last wave of a cycle is always followed by a full re-run of the registry, twice, all clean.
Check where you stand
hadur convergence # the seven-signal verdict; non-zero while not met
hadur trends # criticals/majors per round, per-lens streaks
Expect not met for a while. A first round that comes back heavy is the
loop working, not failing — and if it comes back with many new systemic
Criticals, that is divergence: stop patching per-plan and triage at the
contract level instead (§7.4).
What not to do
- Do not prune lenses to make convergence cheaper. On the record that produced this methodology, the lens dropped to save a dispatch is the lens that finds the Critical. Declare the cycle unconverged and say which lenses were not run.
- Do not mark findings resolved to make a round look clean. The signals do not read your bookkeeping as truth (§7.3.4) — the mismatch will surface, at the worst time.
- Do not review a dirty tree. Commit first. Always.