Development record
No Judge Ships Unmeasured, And A Clean Diff Is A Result
Rule
Every agent abcd ships that renders a verdict on code or artefacts — today
intent-auditor, and every reviewer, auditor, linter-with-judgement,
and oracle that follows — is calibrated against a labelled corpus before its
prompt is locked, and re-scored whenever the prompt changes.
Four requirements, enforced at agent-spec close-time:
- A calibration corpus exists for the agent, at
agents/<name>/corpus/, containing labelled cases of both classes:- known-bad — an artefact with a defect the agent is supposed to catch, with the defect class named and the expected verdict recorded;
- known-good — an artefact that is correct, where the expected verdict is the agent finding nothing.
Known-good cases are not optional and not a minority. They are at least 40% of the corpus.
- The agent is scored on both axes, and both are recorded: recall (share of known-bad cases caught) and true-negative rate (share of known-good cases the agent correctly leaves alone). A judge with high recall and an unmeasured TNR is an unmeasured judge.
- A false-positive ceiling gates the lock. The agent's spec declares the
TNR floor it must clear before its prompt locks at
1.0.0. A prompt change that improves recall while dropping TNR below the floor does not ship.
- Every finding the agent emits carries a failure scenario — concrete inputs or state, and the wrong output, crash, or violated invariant that results. A finding that cannot state one is not emitted. This is the admissibility bar the corpus scores against.
The corpus is built by injection, from our own history: take a merged
fix: commit, keep the merged state as a known-good case, and reconstruct the
pre-fix state as the known-bad case. The defect class is already named in the
closed issue. Nothing needs to be invented.
Why
abcd's whole proposition is that a configuration layer can raise the quality of LLM-assisted work. A reviewer that cries wolf destroys that proposition quietly: the operator learns to skim it, and then the one real finding is skimmed too. We currently have no way to detect that happening, because we have never measured it.
The 2026 evidence (surveyed in
research/notes/2026-07-12-judge-calibration-sota.md)
is directional and consistent:
- LLM code judges systematically over-flag, and roughly a third of their errors trace to statements hallucinated into the code ([overcorrection]).
- Judges underestimate human-written code and overestimate LLM-written code ([judge-codegen]) — a self-preference bias that lands squarely on abcd, where the reviewing model is routinely the authoring model.
- Prompts that demand explanations and proposed corrections measurably increase misjudgment ([overcorrection]) — which is why requirement 4 is a bar on admissibility, not an invitation to elaborate.
- Ground truth for code review is manufactured by injecting defects; this is how CriticGPT was evaluated ([criticgpt]) and how the credible review benchmarks are built ([qodo]).
This discipline is the missing half of itd-5. itd-5 mandates that every agent prompt is versioned, pre-flighted, canaried, and backed by golden fixtures. Golden fixtures establish that an agent does something. They do not establish how often it is wrong about a clean artefact, and that is the failure mode that actually erodes trust in a review layer.
It also corrects an unsafe rule in itd-5. itd-5's one-shot pre-flight accepts an oracle-rewritten prompt when it "passes the same goldens and is shorter by >10%". That tiebreak selects for brevity bias — the mechanism [ace] identifies as progressively destroying instruction quality, where optimisers converge on short generic instructions that drop the domain detail that was load-bearing — and it does so against goldens that do not measure false positives at all. A shorter prompt passing the same goldens may simply have shed detail the goldens never tested. Under this discipline the >10% length tiebreak is struck; the pre-flight gate is the corpus score.
What's In Scope
- The corpus layout, the label schema (case → defect class → expected verdict), and the scoring harness that reports recall and TNR per agent.
- The TNR floor as a declared, spec-level acceptance gate.
- The two-stage output contract every judge agent emits: free-prose analysis first, structured findings second — reasoning inside a schema measurably degrades reasoning ([speak-freely]), and unstructured prose cannot be scored. Both, in that order, satisfies both constraints.
- Binary verdicts. Severity is structural (a FIX-FIRST list vs a NOTES list), never a 1–5 score from the model: numeric scales drift to the middle and carry position bias even pointwise ([position-bias]).
- Corpus growth as a by-product of ordinary work: every closed
fix:issue is a candidate case, harvested at close-time.
What's Out of Scope
- Automatic prompt rewriting. A reflect→delta→re-score loop is the right mechanism ([gepa]) but it runs human-approved, one delta at a time. An unattended loop optimising against our own reviewer teaches the reviewer to pass, not the code to be good — measured at 73.8% spurious gains on KernelBench ([reward-hacking]). Never autonomous.
- Judge panels / juries. A nine-judge, seven-family panel yielded 2.18 effective independent votes and matched-or-underperformed the single best judge ([nine-judges]); errors across models are correlated, so the Condorcet argument does not apply. Cross-family disagreement is a triage signal on contested findings, not a voting scheme. Out of scope here.
- Training, fine-tuning, process reward models. No weight access; not a solo-scale practice.
- A rubric written in advance. Criteria drift ([validators]) says the rubric is derived from graded outputs, not declared before them. This discipline mandates the corpus and the score; the taxonomy of failure classes emerges from error analysis of the agent's real outputs, and is not front-loaded.
- Non-judging agents. Agents that transform or scaffold rather than render a
verdict (
chat-distiller,embark-scaffolder) remain under itd-5 only.
Acceptance Criteria
BDD format, per the itd-1 discipline.
- Given any agent spec that ships a verdict-rendering agent, when the
spec closes, then
agents/<name>/corpus/exists with labelled cases of both classes, and known-good cases are ≥40% of the corpus. - Given a calibration run of that agent over its corpus, when the scoring harness reports, then it emits both recall and true-negative rate, and the agent's spec records the TNR floor it had to clear.
- Given a known-good case (a correct, merged diff), when the agent runs, then it returns a clean verdict and emits no findings — and a run that invents a finding on a known-good case is scored as a failure, not as thoroughness.
- Given any finding the agent emits, when the harness validates it, then the finding carries a failure scenario (inputs/state → wrong result); a finding without one fails validation.
- Given a prompt change to a locked judge agent, when it is proposed, then the agent is re-scored on the corpus, and the change is rejected if TNR falls below the declared floor — regardless of recall gains.
- Given an agent's one-shot itd-5 self-improvement pre-flight, when the oracle-rewritten variant is compared to the candidate, then the decision is made on corpus score alone; length is not a tiebreak.
- Given a closed
fix:issue in any project running abcd, when the issue closes, then the pre-fix and post-fix states are available as a candidate corpus pair (harvest is offered; adoption is the maintainer's call).
Open Questions
- Where the TNR floor starts. A floor set before we have a baseline is a
guess. Proposal: run the current
intent-auditoragainst a first corpus, take the measured TNR as the floor, and ratchet — never regress. Resolve at the first judge spec's T1. - Corpus size before the number means anything. 30–50 cases is the working figure from the review-benchmark literature; below ~20 the TNR estimate is too noisy to gate on. Confirm empirically.
- Does the harness run in
preflight? Leaning no — judge scoring is the expensive, non-deterministic tier and belongs in an async lane;preflightstays deterministic. Confirm at T1. - Reflector separation. The reflect step (proposing a prompt delta from failing traces) must not be performed by the agent under test — single-agent reflection produces confirmation bias and re-commits to the same flawed chain ([mar]). Whether the reflector must also be a different model family, or merely a different context, is unresolved.
Dependencies
- Hard prerequisite: itd-1 — this discipline's gates use its Given-When-Then shape.
- Extends and corrects: itd-5 — itd-5's golden fixtures and pre-flight are the substrate; this discipline supplies the labelled-corpus scoring they lack, and strikes the >10%-shorter tiebreak.
- Constrains: itd-64 — itd-64 proposes learning tuned defaults from run outcomes. It must not treat reviewer verdicts as ground truth (the reviewer is the instrument under measurement), and it inherits the never-autonomous rule above.
- Complements: itd-15 — itd-15 audits prompt-vs-research-baseline drift qualitatively; this discipline measures behaviour quantitatively. Neither substitutes for the other.
- Related: itd-14 — corpus scores are the natural payload of a prompt registry entry.
Audit Notes
Empty. Populated by intent-auditor's single-document role when this
discipline is first audited. Like itd-1 and itd-5, audited continuously via
rule-applies-to-every-judge-agent-spec semantics rather than a planned→shipped
transition.
References
../../research/notes/2026-07-12-judge-calibration-sota.md— the survey this discipline is drawn from, including the citation-confidence caveat.
Frontmatter
| id | itd-81 |
|---|---|
| type | intent |
| lifecycle | disciplines |
| kind | discipline |
| severity | major |
.abcd/development/intents/disciplines/itd-81-judge-calibration.md
open on GitHub ↗ · commit history ↗
References2
Referenced by9
- iss-2610262032558851itd-81 names an embark-scaffolder agent; embark says no scaffolder and no model sit in its write pathrelated
- iss-2610262033588599itd-81 requires judge agents, intent-auditor named first, to emit binary verdicts; the intent surface has intent-auditor emit four-valued per-criterion verdictsrelated
- iss-2610262038490693itd-81 puts each judge's calibration corpus at agents/< name>/corpus/; 01-agents says agents/ holds prompts and fixture directories and nothing elserelated
- iss-2610262042345947itd-1 gives intent-auditor four verdict states and rejects binary pass/fail; itd-81 requires binary verdicts from every judge, intent-auditor named firstrelated
- iss-2610262042351798itd-84's validator inherits itd-81 yet renders a three-outcome verdict; itd-81 requires binary verdictsrelated
- iss-2610262042495955itd-81 puts judge panels out of scope; itd-98 runs a judge panel under the itd-81 disciplinerelated
- iss-2610262043240944itd-81 requires binary verdicts from every judging agent; itd-28 locks reviewers to the three-valued SHIP / NEEDS_WORK / MAJOR_RETHINK enumrelated
- iss-2610262043429522itd-81 requires binary verdicts from every verdict-rendering agent, the intent auditor included; itd-80 ships that reviewer with four-state verdictsrelated
- itd-83The Review Bar Fires By Itself, In Every Repo abcd Managesbuilt on by
mentions22
- adr-2610161733400551A reviewer or judge in a model-matrix run is told nothing about which model wrote the copy it judges
- dcn-26071200000000062026-07-12 — Judge calibration captured as a DISCIPLINE (itd-81), not a standalone
- dcn-26071200000000072026-07-12 — itd-5 AMENDED (not superseded) per itd-81, two rules: (a) the v1.0.0
- dcn-26071400000000102026-07-14 (review): REJECTED a "super-reviewer" verb gated on a second model
- dcn-26072700000000052026-07-27 — GRILLED itd-101/102/103/104 to settlement (six decisions, each now in its intent's Grill Settlements + acceptance criteria): itd-103 guard fails open loudly, blocker/warn tiers with committed-only overrides, shell-token-aware command-position matching with an itd-81-style TNR-floored corpus; itd-101 refresh is manual-with-nagging (scheduled CI later, own sign-off), staleness warns at 180d and blocks releases at 365d, human verifications age on the same clock; itd-102 identity lives in a parseable markdown block (config points at it), check is warn-tier and never rewrites; itd-104 ideate is an optional verb, never a pre-capture gate, with a fresh-context off-policy adversary. All four drafts are grill-settled and await intent plan.
- dcn-26081500000000022026-08-15 — itd-84 (intent decomposition) ADOPTED at the MVP rung, per its own staged promotion ladder: the `decompose-before-filing` principle is filed, the hand-run four-piece protocol lives in the /abcd:intent surface page (capture and the planning interview both run it, loud-staged as not-yet-automated), a DECOMPOSITION rules domain injects the rule at recall time, and every hand-run is graded into `.abcd/development/research/notes/2026-08-15-decomposition-calibration.md` (the 2026-07-13 auto-merge SPLIT case seeds the corpus retrospectively). The deterministic Go pre-pass is admitted to the predictable-development plan's queue (front-door design open: `decompose` subverb vs a check in `intent ready`; collision with iss-210 noted). The capture-time agent rung stays DEFERRED until ~50 graded captures exist (itd-81 calibration); building or running it earlier is a recorded STOP. Rejected: overriding the bundled INTENTS rules domain to carry the new rule (a per-field override replaces the whole array and would withhold future bundled upgrades — iss-174's exact failure mode), hence the additive custom domain instead.
- decompose-before-filingDecompose Before Filing
- iss-83The /abcd:run protocol has no precondition that the PLAN file itself exists: its fail-closed check covers a missing or malformed mandatory PLAN *field* (ROLE / RECOVER STATE) but not a wholly-absent PLAN *file*. In the drain #2 run the /loop fired against a PLAN_PATH that did not resolve on HEAD because the plan was being authored concurrently in another worktree and only merged mid-session (HEAD moved 54fef5f -> 137f8de under the running session). The runner correctly fail-closed but the gap invited synthesizing a substitute plan. Fix (protocol robustness): add an explicit step 0 — resolve PLAN_PATH on current HEAD; if the file does not exist, STOP and report without synthesizing a replacement plan (synthesis re-introduces the guess-the-gate risk fail-closed exists to prevent). Add an operational note: a plan-driven loop must only be launched after its PLAN is merged to the branch it reads. Secondary: at burst start git fetch + re-derive HEAD rather than trusting the session-start snapshot — here both the snapshot and NEXT.md were stale (NEXT.md described already-committed itd-81 work as uncommitted). Acceptance: the protocol names a missing-plan-file STOP distinct from missing-field, and forbids substitute-plan synthesis.
- iss-351the three-disciplines roster itd-1 itd-5 itd-37 is hand-enumerated at six sites while intents/disciplines/ holds six active disciplines, dropping itd-79 itd-81 itd-84 from the mental model, scope, roadmap dashboard and phase-0 acceptance
- iss-390the pre-decided promotion of examples-use-reserved-identifiers to a discipline-kind intent never happened — the iss-154 lint shipped, the principles README contract says a mechanical gate promotes the principle, and no discipline intent exists
- iss-261025221532879905-prompt-quality.md:128 keeps the 'more than 10% shorter' acceptance rule for the self-improvement pre-flight, which itd-5:38 records as struck on 2026-07-12 by itd-81 ('The gate is the corpus score')
- iss-2610262040485856itd-5 has every agent spec carry prompt_version 1.0.0 at close; the verification matrix says no agent is at 1.0.0 and none is due to be.
- itd-14Prompts Are Versioned Like Code
- itd-15abcd Audits Its Own Prompts on Every Self-Disembark
- itd-64abcd Learns From Its Own Runs Which Configurations Work Best, And Tunes Its Configuration Layer Accordingly
- itd-84An Intent Is Decomposed Before It Is Filed, And A Reversal Is Only Ever Flagged
- itd-98Solo vs. Duo Is Measured, Not Debated
- itd-99A Team of Product Thinkers Decides as One
- itd-100Alice Reads One Page and Knows Exactly Where abcd Stands in the Agentic-AI Landscape
- itd-190The claim recording gradient: an intent's three claim kinds carry three recording requirements, and the readiness gate holds them
- itd-2610240922461281The review set is a setting, in model classes
- spc-2610240951109420a-person-sets-how-many-models-review