# CB-10 judging: staged, not run

*The judging half of `coi-q3-anchor-r1` (the anchor `gpt-4-0613` on exhibit forty's rules desk, 1 rep). Staged by the CB-10 lane on 2026-09-27 (UTC), after the answers were collected and sealed. Nothing in this file has been run, and no judged call has been made. The seats below are a proposal for the judging lane to register (PREREG-Q3-ANCHOR §9, §14). They are not registered here.*

## What already exists

- **The answers**: all 60 cells are on disk. 54 are COLLECTED (36 answered, 12 abstained-correct, 6 injection). The other 6 are NOT-COLLECTED — CONTEXT: the six corrupt-corpus cases, as predicted before the call, each an HTTP 400 `context_length_exceeded`. There is also one discarded warmup. Every billed reply echoed `gpt-4-0613`. The window was 2026-09-27T08:49:49Z → 08:56:25Z, with the warmup at 08:49:43Z. They are sealed in the local round repo `/workshop/rs-coi-q3-anchor-2026-09-27` (never pushed; exhibit forty A17 (2): the rows hold licensed passages). `SEAL-q3.json` in this directory carries their shas.
- **The blind seed**: registered before any answer existed. It is in `registration/panel-q3.json`, committed in estate `6d5a0954` (2026-09-27T08:49:14Z) and in the round repo's `a9885de` (08:48:10Z). The judging must use this seed. `judge_seats.resolve_seed` refuses any other, and exhibit forty's and forty-one's seeds are refused by name.
- **The judge instrument**: exhibit forty's G4, unchanged. It is the frozen ternary judge (`judge_run.SYSTEM`, sha `d803018e71059302ebec6322796a4d0f486c3191292cad2b8c3ad3f443926a09` on every exhibit forty judge row). Each call carries one question, one answer and that answer's numbered sources. Judge reps are 1. The judged answer is the modal one, which at 1 rep is rep 1. Abstentions are excluded. The 0.7 × context refusal applies. An arm's GROUNDED count is the number of cases a majority of the carrying families call GROUNDED (exhibit forty A19 (2)).

## What gets judged

| set | answers | source | why |
|---|---:|---|---|
| **the anchor** | up to 36 | the round's sealed rows: the `answered` cases the anchor answered, abstentions excluded | CB-10's metric: the exam's own marks |
| **the bridge** | 104 | exhibit forty's stored modal answers: `openai-gpt-6-astra` 36, `cli-claude-fable-5-1` 34, `local-gemma4-26b` 34 (`rs-two-frontiers-2026-09-05` at `759f364`, `results/legA/rows/*.jsonl`) | the judge-drift row (COI plan S-12). These 104 answers already carry 727 verdicts from seven seats on 2026-09-05, which is the drift baseline |

Bridge pins: `openai-gpt-6-astra.jsonl` `91ee6674…a567`, `cli-claude-fable-5-1.jsonl` `cce8192f…2e0a`, `local-gemma4-26b.jsonl` `14fa1d6b…eef7`; the 2026-09-05 verdict tree (21 files) has manifest sha `9a25376170242e6dc29b00f60affcf280565621ed92eeb360292c5b226dba0ee`.

The code gates are not judged: G1, G3a, G3b, G5a, G5b (predicted `NOT-COLLECTED — CONTEXT 6/6`) and G6b are scored by `score.py`. G6a is WITHDRAWN at 1 rep. Leg H does not apply because there is no second arm to pair with.

## The panel (a proposal; the lead registers)

**The cloud panel**: exhibit forty's seven seats, one per family: `gemma4:31b` (google), `mistral-large-3:675b` (mistral), `nemotron-3-ultra` (nvidia), `kimi-k3` (moonshot, metered), `deepseek-v4-pro:0813` (deepseek), `glm-5.3` (zhipu) and `qwen3.5:397b` (alibaba). All seven, and every registered substitute, were on the ollama.com catalog read 2026-09-23T15:36Z (`cloud-reading-0/receipts/catalog/ollama-com-api-tags.20260923T1536Z.json`). Keeping the same seven tags is what makes a drift row possible, because each re-judges answers it already judged. There is no OpenAI seat (the anchor's family) and no Anthropic seat (exhibit forty's rule). The google seat is recused on the gemma bridge arm. The anchor is seated by seven non-OpenAI families. CB-10's void rule ("a judge that scores its own family alone voids the panel row") cannot trigger on the anchor.

**The frozen local judge pair (S-12)**: two open-weight families, pinned digests, a pinned runtime, recused from their own family's letters, and re-run every reading. The lead's recommendation is option (a).

| option | seats | for | against |
|---|---|---|---|
| **(a) rec** | `gemma4:31b-it-q4_K_M` (google, digest `6316f0629137…`) + `mistral-small3.2:24b-instruct-2506-q4_K_M` (mistral, `5a408ab55df5…`) | The two strongest judges that fit a 24 GB card. Both digests are already verified on the COI's pinned runtime (ollama 0.32.13) on benchbox's 3090 and the laptop (`pins.json` → `local`) | They repeat two cloud families. The pair therefore scores as **its own panel beside the cloud panel, never pooled into its family mean**, which keeps exhibit forty §7's "never two seated models from one vendor" true within each panel |
| (b) | `phi4:14b` (microsoft) + a `granite4` tag (ibm) | New families, so they could be seated in the cloud panel | Weaker judges, and neither has ever read this rubric. They would need their own audition before they count |

Posture for the pair: `temperature 0`, `think: false`, `num_ctx 16384`. The 0.7 wall is 11,468 tokens; the largest exhibit forty G4 prompt was estimated at 5,149. No `keep_alive` is sent that would evict a seat.

## The judge-drift row (how it is read)

For every cloud seat that sat exhibit forty's G4 under the same tag, compare its 2026-09-05 verdict with its new verdict on the same 104 answers, matched on `answer_sha256`. The row prints two things: the per-seat agreement (x of 104, with the flips named by direction), and each bridge arm's GROUNDED count under the registered majority-of-families rule, then and now. The sheets are rebuilt under the new seed, so the refs are fresh. The judge prompt's sha is unchanged. The local pair's first reading is its own baseline. Its drift is measurable from the next reading on, which is the reason it is frozen.

## What the judging needs

| need | what | box | minutes | money |
|---|---|---|---|---|
| **1 · a build lane (no GPU, no calls)** | (i) a G4 driver for this round: it reads the anchor from `results/q3` and the bridge read-only from exhibit forty's tree with the shas above, stamps `round coi-q3-anchor-r1`, and uses the round's seed; (ii) a **local judge seat class**, because `judge_seats.load_panel` refuses any seat that is not `ollama-cloud` (exhibit forty A1), so the pair cannot sit without one (the local transport's house law: temperature 0, think false, num_ctx pinned, no eviction); (iii) the seats and digests registered by amendment in `panel-q3.json`, with a G-ID `/api/show` digest read for the pair; (iv) the drift scorer; (v) `score.py` pointed at the round's own results root for the code gates; (vi) G-PEN over the round tree before anything publishes; (vii) **a scoring adapter over exhibit forty's `score.py`**. The scorer cannot score this round unchanged (PREREG-Q3-ANCHOR §14 A1 (1)): it would read 3 reps, print a bare `NOT-COLLECTED` for G5b with a CLI-fallback sentence that is false here, and compute a G6a verdict the round WITHDRAWS. The adapter takes its reps from the round, reads G5b's state from the rows, prints G6a as WITHDRAWN, and is tested before any score prints | the laptop | a lane-half-day, estimated | none |
| **2 · the cloud panel** | 7 seats × (up to 36 anchor + 104 bridge) = up to 980 calls, plus one audition per seat. Seats run as parallel chains, each serial within itself (exhibit forty A12) | the laptop → ollama.com, through exhibit forty's `cloud_api` transport (the `OLLAMA_API_KEY` in the env file it already reads). No GPU | Each seat's 2026-09-05 pace scaled by 140/104: mistral-large-3 ≈ 7, gemma4:31b ≈ 15, glm-5.3 ≈ 24, deepseek-v4-pro ≈ 28, kimi-k3 ≈ 30, qwen3.5:397b ≈ 120, nemotron-3-ultra ≈ 185. The wall clock is the slowest seat, **≈ 3 h**, unless a cut-off is registered in advance (the A14/A15 precedent) | **kimi-k3 only, on the ollama.com key: ≈ $3** (140 calls × ~3.5k in / ~0.7k out at $3 / $15 per M, uncached upper bound; exhibit forty's seat cap was $5). This is a separate purse from the OpenAI account and needs its own priced word. **No OpenAI money** |
| **3 · the local pair** | 2 judges × (up to 36 + 104) = up to 280 calls, one model at a time (never split across cards) | **benchbox's reference 3090** (`<withheld: GPU UUID of board A>`, 300 W, the COI transient unit on ollama 0.32.13). Benchbox was powered off on 2026-09-26, so this needs an operator's power-on and a daytime slot. The alternative is the laptop 5090 under an operator's turbo-fan word. **Never the desktop**: its seats are 24/7 and it is in a window tonight | ≈ 10–15 s a call at `think: false` (an estimate: neither judge has read this rubric locally) ≈ 25–35 min per judge + loads ≈ **1 h 15 min for the pair**. Runs beside the cloud panel on a different machine | own silicon (the card's energy on the row, per R-10) |

**The wall clock, end to end**: ≈ 3 h once the build lane has landed. The cloud panel's slowest seat sets it, and the local pair finishes inside it. The build lane comes first.

## What the judging must not do

It must not seat any OpenAI or Anthropic judge, or pool the local pair into the cloud panel's family mean. It must not print the anchor's G4 below the four-family floor, or print any G4 figure before the seats are registered. It must not put any figure from this round beside the COI six-way anchor rows as the same posture: this round ran at the API's default sampling, and those rows ran at temperature 0 with a seed. It must not use a seed other than the registered one.
