# PREREG-S0 — the pre-registration of the cost-of-intelligence instrument (reading 0 and every later reading)

**Written:** 2026-09-23, 18:40Z → 19:01Z UTC (`date -u` on the laptop read 18:38:44Z when the writing began). **Patched in place** 21:01Z → 21:2xZ against `panel/CHECK-PREREG.md` (MF-1 … MF-10; the record is that file's §Patch; every figure the patch touched was re-read from its file at 21:0xZ, and each is stamped where it appears). **Author:** the lead (Fable 5.1), as PLAN-v2 §2.0 and §11 #12 specify ("protocol and parser v2 freeze in `PREREG-S0.md` under a sha before any re-score"; method M-5). **Status:** the freeze. **Estate HEAD when this was written:** `5df46547cf9ed6b719a66f0c5665cb2ea3ac6bb5` (at the patch: `fd72eb156fb70f901c2321831c9cda3860fb9e60`); the freeze is the commit that adds this file, `parse_v2.py`, `prereg_observed.py`, `PREREG-S0.observed.tsv` and `PREREG-S0.observed.2.tsv`.

**sha256 of this file at freeze: (computed at freeze)** — that line stays exactly as written (a file cannot carry its own hash); the freeze commit writes `sha256sum PREREG-S0.md` into `PREREG-S0.md.sha256` beside it and into the commit message, and amendment A-00 below records both. A reader checks the freeze with `sha256sum -c PREREG-S0.md.sha256`.

**Precedence.** `RULINGS-2026-09-23.md` (R-0 … R-21 plus the R-10d addendum and the R-20 clarification of 19:35:15Z; sha `d56f4f06…`, read 21:01Z) wins over this file; this file wins over `PLAN-v2.md` (sha `withheld-2026-09-29`) on every method question, because this file is where the plan's proposals stop being proposals. A lane that meets a conflict follows the ruling, then this file, and says so. After the freeze, nothing above the amendments line changes: every change is an amendment `A-nn` (section 9), and R-0 rulings made after the freeze go through the same path.

*Internal file: it names the desktop's larger card, the desktop, benchbox and the laptop. Every number carries its file; a figure with no file is a defect of this document. Nothing here is a result: the figures in section 8 are listed so that a reader knows what the author had seen when each rule was written.*

---

## 0 · What "frozen" means, and how each rule is tested

- **A rule in this file is frozen** when the freeze commit lands. It is applied by scripts (`parse_v2.py` today; `ratio.py`, `coi.py`, `METRICS.md` this week), never by hand, and each script records `parser_version` / `protocol_sha` / `metrics_version` on every row it touches.
- **Every rule states its test**: a command, a file, or a comparison a reader can re-run. Where a test cannot run yet (a file not yet written), the rule says which amendment will carry the sha.
- **Reading 0 collected before this freeze** (15:43:21Z, the smoke, onward — PLAN-v2 §2.0). Section 8 names what existed and what the author had seen. A rule shaped by seen data is still a rule; the point of the list is that the reader can tell which ones.
- **The re-score rule.** No figure is called *strict* again, no ladder table is drawn, and no row enters `series.jsonl`, until the freeze commit exists (PLAN-v2 §2.0, §7 "this week"). Lane-local figures printed before it (five lane "stricts", section 3.4) are relabelled *provisional (lane parser X)*.
- **The gate on the owed files** (PLAN-v2 §2.0: `METRICS.md` v1's sha and the ★ pin file's sha belong to the freeze; ⧖-7 (a), ruled by R-17, reads "`pins.json` frozen in PREREG"): **amendments A-01 … A-04 (`protocol.json`, `METRICS.md` v1, `pins.json` with the ★ rows and their cited external scores, `KIT.lock.json`) land, each with its sha, before any row enters `series.jsonl` and before any ratio or ladder table is drawn.** The v2 re-score (A-05) is therefore the fifth amendment, never the first, so the ★ source is chosen before any v2 re-score is visible (section 4.5). **Test:** the `amends:` chain in the amendments block — A-05's `amends:` sha must be the sha A-04 left.

---

## 1 · The frozen task sets (S0) and the contamination rule

### 1.1 Series set S0 — the bytes

Verified today by `sha256sum` on `/workshop/estate/bench/jev-2026-09-21/kit/` at 18:4xZ; every sha and byte count below equals `SERIES-SETS.md` (sha `withheld-2026-09-29`) where that file lists the set.

| set id (this file) | lane task letter | file | items | bytes | sha256 | first public (R-1) |
|---|---|---|---:|---:|---|---|
| `c` (six-way voice) | c | `kit/task_c.json` | 108 (A–F, alphabetical: darwin, einstein, hypatia, ibn_sina, sagan, socrates) | 105,341 | `61a0b1d6e7cf66fd91992c0c3a4572f6fbae90e6471048fd7dc1eb41ff2d7f39` | 2026-09-19 (the long table's wall); 2026-09-23T13:16Z the kit |
| `a` (docent gate) | a | `kit/task_a.json` | 63 (A yes / B no; 42 yes, 21 no) | 11,381 | `e107fd3e04045436c5c9f7e93a06bc321e18a217d256d56e9df4137de8b047f1` | 2026-09-23T13:16Z (byte-identical to exhibit fifty-eight's kit; PLAN-v2 §2.1 (c)) |
| `doorman48-letter` (`d48`) | d | `kit/doorman_planted.json` | 48 = 36 planted + 12 controls (A admit / B refuse), under DOORMAN_SYSTEM v1.2 (sha `c00fc24f6ebba30ef3d125f9b457d979ca403d494e0dc293af28b52834b6f2a7`, `EXPOSURE.jsonl`) | 21,814 | `4daf059c26a47a84fa3b73630a64ba1a348da72c2e5df7f3c28c007b67da22f7` | **never** (an ordinary private set from R-17 ⧖-4 on; NOT in the published kit — PLAN-v2 §2.1 (a)) |
| `f40` (field exam recast) | f | `kit/field_exam_ground.json` | 40 (A yes / B no) | 35,601 | `781108e62d1e1578b2fca8ed89e41a02a454ab748e893c8ae96351eeafa937be` | the recast bytes 2026-09-23T13:16Z; the 60 native items with keys 2026-08-29 (PLAN-v2 §2.1 (b)) |
| `j` (judge set; S0.1) | j | `kit/judge_seat.json` | 119 (A–C: grounded / not_grounded / off_page) | 401,364 | `3acfcdd0d1b5e70a6f9172b0f37c9b7bb06e213dbee76cdb2b5e45fb2ca105dd` (computed today; not yet in `SERIES-SETS.md`) | the 20 VERBATIM claims' sections public since 2026-08-11; the claims private |
| `task_b` (unlabelled) | b | `kit/task_b.json` | 42 (1 labelled) | 25,994 | `withheld-2026-10-14` | the published twin differs (`7c979cca…`; PLAN-v2 §2.1 (d)) — S0's bytes carry the operator's name and pass the literal screen before any egress |
| the 42 articles | — | `kit/articles.json` | 42 | 1,916,801 | `withheld-2026-10-14` | public on the hub, per page |

**Registered derived ids** (PLAN-v2 §2.1 S0.1; each gets its own sha in `KIT.lock.json` when that file is written — amendment A-04):
- `task_a@8k` = the task_a items whose prompt is ≤ 8,192 tokens by the offline census (`jev-2026-09-21/rows/census.gemma4-26b.json`): **36 of 63** (the plan's count; the membership list is the census's, computed, never typed). The power-of-two boundary rule: "fits at N" means prompt tokens ≤ N (54 fit at 16,384; PLAN-v2 §11 #15).
- `doorman36-json` = the 36 in-contract items (buckets A, B, E, F refuse; L, N, T admit) in DOORMAN_SYSTEM v1.2's native JSON contract (no letter instruction). **No row of it exists yet** (section 8). It is the only id B-doorman accepts.
- `f60` = the native field exam (60 items; `bench/field-exam/`), scored by `run_field_exam.py`'s scorer, T3 in prompted mode on every backend (a declared change from the exam's own wire — `recon/tasks-harness.md` §1.4). No row yet.

**Prompt bytes are identical across every lane, verified today.** The prompt is built by `jev-2026-09-21/run.py` (`readout_prompt`; sha `withheld-2026-10-14`) and, for the doorman, `run_addenda.py` (sha `a34aca61833ed0c5860c91c7e2e227429e8ea9e2e50fec68d7b7fec15d89acab`). The **set fingerprint** = sha256 over the sorted distinct `prompt_sha256` values of a complete pass, first 16 hex characters. Read from the row files at 18:4xZ:

| set | items | fingerprint | equal in every one of these files |
|---|---:|---|---|
| c | 108 | `1feac3433cb4217b` | `smoke/rows/pass1/…c.jsonl`, benchbox `k0-gemma4-26b-c`, benchbox `k1-mistral-v0.1-c`, `openai-reading-0/rows/gpt-4-0613.c.jsonl`, `anthropic-reading-0/rows/claude-sonnet-5.c.p1.jsonl`, `cloud-reading-0/rows/kimi-k3--cloud.c.jsonl`, `jev-2026-09-21/rows/base-generate.c.jsonl` |
| d48 | 48 | `617abd299260cee0` | anthropic haiku `.d.p1`, cloud `kimi-k3--cloud.d`, benchbox `k0-gemma4-26b-d`, jev `rows-addenda/gemma4-fp8-generate.d` |
| a | 63 | `1d5310ddbdb247c6` | cloud `kimi-k3--cloud.a`, jev `rows/base-generate.a` |
| f40 | 40 | `a307cf40b16dda28` | cloud `kimi-k3--cloud.f`, jev `rows-addenda/gemma4-fp8-generate.f` |

**Rule 1.1-a.** A pass enters `series.jsonl` only if its set fingerprint equals the one above for its `set_id` (or, for a new set, the one registered by amendment). **Rule 1.1-b.** Per-item joins key on `prompt_sha256`, never on `id` (108 task_c items carry 50 distinct ids — `SMOKE-REPORT.md` §4.6). **Rule 1.1-c.** A set is never edited; a corrected set is a new id (S1, …) with its own sha (`SERIES-SETS.md` header).

### 1.2 The contamination rule (R-1; PLAN-v2 §2.5)

- `weights_bound_utc` = the latest commit touching the weight files at the revision the GGUF was built from, else `hf_lastmod`, or the date the manifest digest was first seen if later — **never** the repo's `createdAt`. `released_utc` = the earliest public availability (C1's x-axis). Both computed by script.
- `contamination = "structurally-uncontaminated"` when `weights_bound_utc < set_first_public`; otherwise `"possible"`, unless the vendor's stated **training-data** cutoff precedes `set_first_public` with its source cited (then `structurally-uncontaminated`, `cutoff_kind: training`). A **knowledge** cutoff (the Claude registry states those) never clears a row: `cutoff_kind: knowledge` → `possible` on any set whose public date is at or after the cutoff. (The Anthropic lane's "R-1 contamination" column, which read training cutoffs from each model's overview page, is the receipt for the Claude rows — `ANTHROPIC-READING-0.md`, "The models".)
- **Endpoint posture** on every frontier row: `endpoint_training_posture ∈ {no-train-receipted, train-possible, unknown}` from `postures.json` (to be written; each Claude consumer account is its own endpoint row — the CLI changed account at 16:44:10Z, `anthropic-reading-0/restarts.jsonl`). A later model from a vendor with a `train-possible` exposure of a set reads `possible` on that set whatever its cutoff.
- **The egress ledger** `EXPOSURE.jsonl` (sha `cd341de1…`, 28 rows at the freeze: the shelf's 14 tags × doorman settings, 48 items each, 15:43:49Z → 17:24:10Z) records every egress of every set: set, endpoint, served model, item ids, first/last UTC. The Claude and OpenAI doorman egress (Claude: haiku 48, opus-4-8 48, opus-5-5 48, sonnet-5 48, sonnet-4-5 24, fable-5-1 6, plus 12 re-sends by the CLI's refusal fallback — `anthropic-reading-0/receipts/doorman-egress.json`; OpenAI: none, `OPENAI-READING-0.md`) is appended to the ledger from those receipts before any further egress (an owed write, not a rule change).
- **The doorman set** (R-17 ⧖-4 (a)+(c)): an ordinary private set; any further egress sends only the 36 in-contract lines, never the 12 C/D lines; `../DOORMAN-EGRESS-RULED` stays absent until the gates filter to the 36 (the OpenAI guard `run_openai.py` and `test_doorman_egress.py`'s 7 tests; the Claude runner's `DOORMAN_HELD`; `amend_queue.py` gated on the same file).
- **The consequence, registered now** (PLAN-v2 §2.5): from the first reading in which any candidate on either side has `weights_bound_utc` or a training cutoff after 2026-09-23, S0 prints ratios only over clean rows and S1 becomes the headline set.
- **The canary probe** (method S-5), registered: control = never-published lines from the same generators and personas (S1's lines or the wall's withheld lines; not the doorman lines); statistic = the per-line longest verbatim word n-gram shared between the model's completion of the first half and the true second half; test = the test set's median against the control's 95th percentile, one-sided Mann–Whitney, α = 0.01; a positive **flags** `possible`; a negative clears nothing.
- **S1 slices — additive, never rotated** (PLAN-v2 §2.1; **⧖-27 ruled (a) by R-17**, "⧖-21 … ⧖-27: each as the plan recommends", and PLAN-v2 §9's recommendation for ⧖-27 is (a): a new slice joins each quarter and none is replaced): `S1-2026Q4` ≥ 108 six-way items from a non-public instance, its sha256 committed **before any model reads it** (amendment A-07 carries the sha and item count; commit-reveal at retirement), sent only to `no-train-receipted` endpoints, read on `gpt-4-0613` before 2026-10-22. Every slice stays sealed and is re-read in every reading until the egress ledger retires it. FOLD-LOG §3's "replaced" fallback is retired with the ruling. **The linked fixed ratio** (registered here from PLAN-v2 §2.1, live because the slices are additive): the two local linking anchors that never retire, `mistral:v0.1@b17615239298` and `gemma4:26b-a4b-it-q4_K_M@5571076f`, read every slice on the pinned runtime; before 2026-10-22 the fixed anchor reads S0 and `S1-2026Q4`, and the **link** = anchor ÷ local anchor is measured on both; on a later slice the fixed ratio = local ÷ (local anchor on that slice × link), **printed only when the two measured links agree within their paired intervals** (4.2) and labelled "linked; assumes the anchor's gap to the local anchor is constant across slices"; otherwise the slice prints no fixed ratio. **Test:** `ratio.py --fixed --set S1-<q>` prints both links with their intervals and refuses the linked ratio when they disagree.

**Test.** `sha256sum` on the kit files (the table above); `python3 - <<EOF … EOF` computing the set fingerprint from any complete row file (the code is four lines: read `prompt_sha256`, sort, dedupe, sha256 of the newline-joined list).

---

## 2 · The protocol per backend, and the declared differences

### 2.1 P0 and P1

**P0 = what reading 0 sent** (PLAN-v2 §2.3): user-only messages; the prompt from `run.py`'s `readout_prompt` with the instruction "Answer with the letter of the best option only."; options in kit order; 8 visible tokens where reasoning is off; temperature 0 and seed 20260921 where the backend accepts them, else the vendor default.

**P1 = P0 on messages, prompt bytes and sampling, plus** (registered here): 4,096 output tokens where reasoning is on, the same locally and at the frontier (the Claude CLI is uncapped and every row says so); `sampling ∈ {greedy, vendor-default}` recorded; **`num_ctx`** = 4,096 on every short set on every local backend where reasoning is off (2,048 where the trained window is smaller), and **8,192 wherever reasoning is on or a think LEVEL is sent** (the prompt plus the 4,096-token reasoning budget cannot fit a 4,096 window) — that is every `t-*` arm and every gpt-oss arm including its utility-posture row `low` (benchbox `queue.txt` lines 69, 81, 82, 110, 114, 142–154; the laptop's lines 82 and 132–144; the desktop's larger card `arms/beside-2.txt` `b2-gpt-oss-20b-low-cd`, `arms/beside-3.txt` `b3-gpt-oss-20b-low-cd`, `window/arms-window.txt` `w-gpt-oss-120b-low-cd`; read 21:0xZ), declared as D-1; the **symmetric posture rule** (2.3); `budget_exhausted` its own class, counted wrong (section 6). `protocol.json` is written from this section (amendment A-01 carries its sha); `ratio.py` refuses to mix P0 and P1 rows unless P1 = P0 on every field the row carries — which holds for every reading-0 letter-task row, so the reading-0 rows and the anchor stay valid.

### 2.2 The backends as they ran, read from rows and receipts (not from prose)

| backend · lane | server / route | messages & system | sampling | visible budget (off) / reasoning budget (on) | `num_ctx` | posture, as read | timing fields | rows carry |
|---|---|---|---|---|---|---|---|---|
| **benchbox, the 3090** (`rtx-3090-reading-0/`) | the box's `/usr/local/bin/ollama` 0.32.13, transient unit `coi3090-ollama` on `127.0.0.1:withheld-2026-10-14`, own store `/workshop/bench-coi-2026-09-23/store`, `CUDA_VISIBLE_DEVICES=<withheld: GPU UUID of board A>`, `OLLAMA_VULKAN=0 GGML_VK_VISIBLE_DEVICES=-1 HIP_VISIBLE_DEVICES= ROCR_VISIBLE_DEVICES= OLLAMA_KEEP_ALIVE=-1 OLLAMA_FLASH_ATTENTION=1 OLLAMA_CONTEXT_LENGTH=131072 TZ=UTC` (`receipts/substrate-2026-09-23.txt`; `OLLAMA_KV_CACHE_TYPE`, `OLLAMA_MAX_LOADED_MODELS`, `OLLAMA_NOPRUNE` at their defaults in the server's own config line) | user-only via `run.py`; the tag's baked template layer as shipped | `temperature 0, seed 20260921` (`instrument/coi3090.py:352`) | `num_predict 8` / `--think-budget` 4,096 (c,d; the fast pairs) and 2,048 (the dense arms, c only) — `x_num_predict` on every row | per arm: K0 131,072; every reasoning-off backfill arm and the anchor arm 4,096 (2,048 for falcon, vicuna, phi-2); **8,192 on `b-gpt-oss-20b-low` (line 81) and on all 9 `t-*` arms** (lines 69, 82, 110, 114, 142–154) — `queue.txt` | 300.00 W, persistence `Enabled`, read per task and refused otherwise (rc 4) — `x_cap_w`, `x_persistence` on every row | server fields (`x_load_ms`, `x_prompt_eval_ms`, `x_eval_ms`, `x_total_ms`, `x_server_before_decode_ms`), 1 Hz BOARD + WALL (NUT `ups.realpower`, CP1500PFCLCDa) | `x_digest` from 17:4xZ on (earlier arms: `arm.json` → `tag.digest`) |
| **the laptop, the laptop 5090** (`laptop-reading-0/`) | the pinned tarball's `bin/ollama` 0.32.13 (binary sha `39c8dea520be728599c4b8fda8f3466b4caca0c50fff6e5c065d0368c74d551c`), unit `coi-ollama-laptop` on `127.0.0.1:withheld-2026-10-14`, own store, PLAN-v2 App. A's environment exactly (`OLLAMA_MAX_LOADED_MODELS=1 OLLAMA_<parallel-requests>=1 OLLAMA_FLASH_ATTENTION=1 OLLAMA_KV_CACHE_TYPE=f16 OLLAMA_NOPRUNE=1`, the Vulkan/HIP blanks, the CUDA pin `<withheld: GPU UUID of board B>`), `MemoryMax` 4G at start (`receipts/instance-start-memmax4g-20260923T1820Z.txt`) → 16G by A-L02 (`queue.log` 18:30:44Z) → **32G by A-L03 (18:51:52Z; `arm.json` → `amendments`)**. **Rows of record under R-20 and its clarification** (the receipt is mechanical: an arm is superseded when the serve unit's `memory.events max` grew between `serve_cgroup_memory_before` and `postflight.serve_cgroup_memory_after` in its `arm.json`): at 16G `k0a-gemma4-anchor-cd` (+5,598) and `b-vicuna-33b` (+6,994) are superseded (`rows/superseded-*-memmax16g-20260923T1851Z/`; their replies stand for determinism checks, their energy is not a series figure) and are **re-run at 32G** (`queue.txt` lines 125 and 128; not yet landed at 21:03Z — the queue was at `b-granite4-32b-a9b`, `queue.log`); `k1-mistral-v0.1-cd` (+0) and `b-falcon-7b` (+0) at 16G are rows of record; the item-12 pair (+6,293, +5,190) are dry runs whose choices and `load_ms` stand as the dry-run receipt; every 32G arm reads +0. `b-llama2-7b`'s first run (18:50:54Z; task d refused by the old posture gate) is superseded (`rows/superseded-b-llama2-7b-postureA-L04-20260923T1852Z/`) and was re-run whole at 18:54:05Z. **Instrument:** `coilaptop.py` `4d07c3cd…` wrote every row whose `preflight.json` stamps ≤ 18:50:54Z (the superseded `k0a`, `k1`, `falcon`, the first `llama2-7b`); `0b5dcb41…` (A-L03/A-L04) wrote every row from the `b-llama2-7b` re-run (preflight 18:54:05Z) on — `preflight.json` → `instrument.coilaptop_py` on every arm is the receipt | as benchbox | as benchbox (`coilaptop.py`) | `num_predict 8` / the row's budget (`x_num_predict`) | 4,096 on every reasoning-off arm; **8,192 on `b-gpt-oss-20b-low` (line 82) and the 5 `t-*` arms (lines 132–144)**; item 12 also at 131,072 | **R-20: the posture is a range, not a number** — Dynamic Boost on (`nvidia-powerd` active), clock lock off (`clocks.max.sm 3090`), AC online, one board, and `enforced.power.limit` anywhere in the boost envelope (> 95 W, ≤ 175 W), **reported per task as min / median / max from the 1 Hz trace** (A-L04, 18:53Z; the traces read 135.00–150.00 W across arms, a steady 150.00 on the anchor and mistral); battery "Not charging" — `posture_before` and `posture_verdict` in each `arm.json`; the turbo fan on from ≤ 18:11:06Z (`OPERATOR-CONDITIONS.md`; the card reports no fan speed) | server fields + `x_runner_pids`; BOARD 1 Hz + **RAPL package-0** (`/run/rapl/energy`, R-10d): the laptop's CPU-side reading, **never "wall" and never "platform"**; psys is recorded, labelled IMPLAUSIBLE (~0.3 W idle and loaded, R-10d addendum) and never enters a figure; the laptop has no platform or wall instrument, so its energy figures are board + package, labelled so | `x_digest` on every row; the memory gate (A-L01), `MemoryMax` (A-L02/A-L03) and the posture gate (A-L04) in `arm.json` → `amendments`; the serve unit's `memory.events` before and after |
| **the desktop, the desktop's larger card** (`rtx-pro-6000-reading-0/`; **rows exist on the desktop from 18:17:47Z** — the dry run `dry-a-gemma4-anchor` ended 18:18:01Z and the three B-1 arms ran 18:25:12Z → 18:38:07Z by their `report.json` stamps; none was in the laptop mirror at the first manifest and none was read before the rules were written, section 8.1) | the pinned tarball, unit `coi-ollama-desktop` on `127.0.0.1:withheld-2026-10-14`, own store, `BindsTo=coi-guard-desktop.service`, `OLLAMA_GPU_OVERHEAD` per PLAN-v2 §6 (`instrument/coilargecard.py`, `guard.py`) | as benchbox | as benchbox | as benchbox | 4,096 on the short sets; **8,192 on the gpt-oss arms** (`b2-gpt-oss-20b-low-cd`, `b3-gpt-oss-20b-low-cd`, `w-gpt-oss-120b-low-cd`) | 420.00 W as run, READ never set (refuses otherwise, rc 4) | server fields; BOARD by UUID; the CP2000 box delta (R-16), integer watts, stderr dropped | per-process residency; `mode: beside \| window` |
| **OpenAI API** (`openai-reading-0/`) | Chat Completions from the laptop, `oai.py` (host pinned, redirects refused, key scrubbed), one call at a time, streamed with `stream_options.include_usage` | ONE user message, no system message (`run_openai.py`) | `temperature 0` + `seed 20260921` where the model accepts them; else the vendor default (o-series, gpt-5/-mini/-nano, gpt-6-astra, both `@default` rows refuse 0 — `receipts/profiles/`) — `x_temperature_sent` | `max_tokens 8` (no reasoning) / `max_completion_tokens 4096` at the lowest accepted effort / 16,384 at the server default (`run_openai.py:64,67`) — `x_max_out`, `x_token_param` | n/a | n/a (cost state metered; `x_usd` per call from the usage block × `receipts/pricing.md`) | network-included TTFT (`x_ttft_s`), `x_latency_s`, `x_out_tok_per_s` (a stream rate, not a server rate) | `x_effort`, `x_model_asked`, `x_model_resolved`, `x_system_fingerprint` (null on every gpt-4-0613 row), `x_reasoning_tokens`, `x_finish` |
| **Claude, the sealed CLI** (`anthropic-reading-0/`) | `claude -p` (Claude Code CLI 2.1.280) from an empty scratch dir with a scrubbed env (HOME, LANG, PATH, TERM, USER only): `--tools '' --setting-sources '' --strict-mcp-config --no-session-persistence --system-prompt '' --output-format stream-json --verbose` (`ANTHROPIC-READING-0.md`, "The clean call"); **R-21 (~19:1xZ): every call from the ruling on also carries `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK=1`** (`run_anthropic.py` `ENV_EXTRA`, set 21:1xZ, sha `29605396…`), so a classifier refusal comes back as a refusal from the requested model; every row records `x_refusal_fallback_disabled`; **every Claude row on disk at 21:0xZ ran with the fallback ON** (D-16) | ONE user message (positional, or stdin over 131,071 bytes); `--system-prompt ''` **plus the CLI's own scaffold** (environment block, model identity + knowledge cutoff, the account e-mail, the date): 428–432 tokens on haiku canaries, 397–545 across models (the canary table); two consumer accounts (rows before 16:24Z account 1, from 16:43Z account 2; `x_utilization` per row) | the model's default; the CLI exposes no temperature (`x_temperature` says so); Claude ≥ 4.7 and Sonnet 5 refuse a non-default temperature by any route | **uncapped** (`x_max_tokens_enforced`, `x_predict_asked` 8) | n/a | n/a (`x_cost_usd` = the CLI's `total_cost_usd`, "client-side estimates"; the one-hour cache write premium at 2× on every call) | `x_duration_api_ms`, `x_ttft_first_frame_from_request_ms`, `x_ttft_first_text_from_request_ms`, `x_wall_seconds` (network-included) | `x_effort` (`default (no --effort flag)` = the CLI registry's `default_effort`: **xhigh** for opus-4-7; **high** for opus-4-8, sonnet-5, opus-5, fable-5, fable-5-1; **medium** for opus-5-5; none listed for sonnet-4-5, opus-4-5, opus-4-6, sonnet-4-6, haiku-4-5 — `receipts/cli-model-registry.2.1.280.json`, read 21:0xZ; or `low`/`high`), `x_served_snapshots`, `x_model_usage_keys`, `x_served_mismatch`, `x_thinking_tokens`, `x_stop_reason` |
| **the ollama.com shelf** (`cloud-reading-0/`) | the laptop's **system** ollama 0.32.14 at `127.0.0.1:withheld-2026-10-14` (signed in), cloud tags by name (`cloud_run.py`) | user-only via `run.py`'s body | `temperature 0, seed 20260921` as sent (`cloud_run.py:87`; whether the provider honours them is not receipted) | `num_predict 8` (exact) / `think: true` at 4,096 / `think: false` at 1,024 (the `np1024` variant) / `low`, `high` for gpt-oss — `reasoning_mode_sent` on every row | **131,072** as sent (`cloud_run.py:87`) | none (no card; `$0.00*` plan-included) | client-side TTFT on streamed rows (after ~15:47Z); `prompt_eval_duration` / `eval_duration` / `load_duration` **not returned** by the cloud | `reasoning_observed`, `streamed`, served model + version |
| the smoke and the calibration (`smoke/`, `cloud-reading-0/calibration/`) | the laptop's **system** daemon 0.32.14 (:withheld-2026-10-14), KV q8_0, keep-alive −1, the embedder resident | as benchbox | as benchbox | 8 / 4,096 (the calibration's think row) | 4,096 (smoke); 131,072 (calibration, `cloud_run.HOST`) | boost posture, 150 W | server fields; BOARD | **`series: false`** — a smoke and a calibration, never rows of the series (PLAN-v2 §2.2) |

### 2.3 The symmetric posture rule (the utility posture)

A model enters THE RATIO at its **utility posture**: the lowest reasoning setting it accepts that yields a parseable answer (`format_class ∈ {clean, letter+name}`) on ≥ 95 % of 20 dry-run items (App. B (15)), else its default. How each backend sets it: ollama `think` false / true / a level (gpt-oss: low, medium, high); OpenAI `reasoning_effort` (none → minimal → low, the lowest accepted; `receipts/profiles/`); the Claude CLI `--effort low` where the CLI accepts it (recorded as Claude Code's control, not an API parameter, and verified from the tokens the CLI reports — R-11; the verification is the lane's verdict rule, fixed before any effort row existed: *low CHANGED the spend if more than twice as many items thought less than thought more AND the mean fell below 80 % of the default's* — `ANTHROPIC-READING-0.md`, "Reasoning effort"). **Which Claude row is the utility-posture row, registered:** the `--effort low` row when the CLI accepted the flag and the verdict rule says CHANGED (at 21:0xZ: sonnet-5, opus-4-8, opus-5-5); the CLI-default row when the flag is refused or the verdict is NO clear change (haiku-4-5: 610 vs 588 mean thinking tokens, "NO clear change") — the two rows are then the same posture in effect and the default row is the one on file; and, until an id's `--effort low` row has landed, its default row stands in, labelled `posture: default (provisional)`, and every ratio it enters prints "provisional". A tag that cannot turn thinking off and writes no letter in 8 tokens (gpt-oss, minimax-m2.7 on the shelf; the local gpt-oss:20b calibration) has that row recorded as **the protocol's verdict on the tag** and its utility-posture row (the lowest level that parses) as its capability row. Every other posture is R-11's price-of-thinking panel, never the ratio.

### 2.4 The declared differences between lanes at reading 0 ("four protocols in one reading", PLAN-v2 §10)

Each is named so a reader can see it; none is silently averaged over.

| id | difference | where it shows | how it is carried |
|---|---|---|---|
| **D-1 `num_ctx`** | benchbox K0 (`k0-gemma4-26b-c/-d/-think`) ran at 131,072; every reasoning-off backfill arm and both anchor arms at 4,096 (2,048 where trained); **8,192 on every reasoning-on arm and on every gpt-oss arm, including `b-gpt-oss-20b-low`, gpt-oss's utility-posture row and so a THE RATIO candidate** (benchbox lines 69, 81, 82, 110, 114, 142–154; the laptop's 82, 132–144; the desktop's larger card's three gpt-oss arms — P1, 2.1); the shelf at 131,072; the smoke at 4,096 | `arm.json` → `num_ctx`; `queue.txt` on both boxes; the desktop's larger card arms files; `cloud_run.py:87` | K0 is the bare-tag comparator (D-15); the speculative-decoding pair (K0 vs the anchor arm) is confounded until read at one `num_ctx` (PLAN-v2 §3); cloud rows have no card, so their window moves no joule |
| **D-2 KV cache type** | laptop f16 (explicit); benchbox the server default (the config line shows `OLLAMA_KV_CACHE_TYPE:` empty); smoke/calibration q8_0 (the system daemon); the shelf: the provider's | `substrate-2026-09-23.txt`; the laptop instance receipt | `kv_cache_type` on every local row (App. C); the 2023 model's 108/108 identical choices across q8_0 and f16 (`rows/k1-vs-smoke.json`) is the one measured bridge so far |
| **D-3 output budget** | 8 visible tokens (local off, shelf exact, OpenAI no-reasoning); 4,096 (local think, shelf think, OpenAI lowest effort); 16,384 (OpenAI default effort); 1,024 (shelf `np1024`); 2,048 (benchbox dense think, c only); uncapped (Claude CLI) | `x_num_predict`, `x_max_out`, `reasoning_mode_sent`, `x_max_tokens_enforced` | P1 registers 8 / 4,096; the 16,384 and 1,024 rows are R-11 panel rows; the CLI's uncapped rows are scored on their opening (section 3), so the cap does not move strict |
| **D-4 sampling** | local: greedy (temperature 0, seed 20260921); shelf: the same as sent; OpenAI: temperature 0 + seed where accepted, else default 1 (22 of the 31 six-way rows at 0; 9 sampled: o3-mini, o3, o4-mini, gpt-5, gpt-5-mini, gpt-5-nano, gpt-6-astra and the two `@default` rows — the results table in `OPENAI-READING-0.md`); Claude: the model default, no seed | `x_temperature_sent`; `x_temperature`; `coi3090.py:352` | `sampling ∈ {greedy, vendor-default}` on every row; sampled frontier rows get the rep rule (4.2) |
| **D-5 the system message** | none on local, shelf, OpenAI; the Claude CLI's `--system-prompt ''` + its ~400-token scaffold carrying an account e-mail (two accounts); baked template SYSTEM layers on some local tags (qwen2.5) left in place | the canary table; PLAN-v2 §3 | `system_handling`, `system_layer_sha`, `scaffold_sha` on every row (App. C); the Claude rows' derived direct-API dollar figure subtracts the fitted 428.8-token scaffold (7.3) |
| **D-6 reasoning setting** | local: off / on (4,096) / low, medium (gpt-oss:20b); shelf: false / true / low / high; OpenAI: the lowest accepted effort (none, minimal or low) + server default (medium) for gpt-5.5 and gpt-6-astra; Claude: the CLI default (xhigh for opus-4-7; high for opus-4-8, sonnet-5, opus-5, fable-5, fable-5-1; medium for opus-5-5) + `--effort low` (haiku 18:35:31Z, sonnet-5 18:39:04Z, opus-4-8 18:43:38Z, opus-5-5 18:48:31Z — all landed, by their `report.json` `ended` stamps) + `high` (opus-5-5, 18:53:22Z, landed); the `--effort low` rows for opus-4-7, opus-5 and fable-5-1 are registered cells (9.2) and had not run at 21:0xZ | `x_think`, `reasoning_mode_sent`, `x_effort` | each row names its setting; the utility posture (2.3) picks the ratio row; the rest is R-11's panel |
| **D-7 posture** | 3090: 300 W, persistence Enabled (every benchbox row; the Jev pre-0 rows at 250 W); laptop: **a range under Dynamic Boost (R-20): the enforced limit inside (95, 175] W, reported per task as min / median / max from the 1 Hz trace** (135.00–150.00 W across the arms read by A-L04), lock off, powerd active, turbo fan on; the desktop's larger card: 420 W as run | `x_cap_w`; `posture_before`, `posture_verdict`; `coilargecard.py` | `posture`, `persistence` on every row; a 250 W Jev row is reading "pre-0", never mixed with a 300 W row in a J ratio without saying so |
| **D-8 the runtime binary** | benchbox: the box's `/usr/local/bin/ollama` 0.32.13 (its sha is NOT yet in a receipt — amendment A-09); laptop: the pinned tarball's 0.32.13 (sha `39c8dea5…`); smoke, calibration and the shelf's client: the system daemon 0.32.14 | `substrate-2026-09-23.txt`; `instance-start-memmax4g-…txt` | `runtime_version`, `runtime_sha` on every row; the `series: false` rows are excluded by rule |
| **D-9 instance environment** | laptop = App. A exactly; benchbox = a subset (no `MAX_LOADED_MODELS=1`, no `NOPRUNE=1`, no explicit KV type; `OLLAMA_CONTEXT_LENGTH=131072` set) | as D-2 | recorded per row; the desktop instance is written to App. A before B-1 |
| **D-10 residency and the per-call load** | benchbox charges a `load_duration` on every call to a resident model (k0a row 1: `x_load_ms` 743; K0: 778 median); the laptop 255 (row 1 of the 16G `k0a`, now `rows/superseded-k0a-gemma4-anchor-cd-memmax16g-20260923T1851Z/`, a determinism and timing receipt, not the energy row of record); the smoke 33 | `x_load_ms` | `load_ms` on every local row; `ratio.py` refuses a cross-card J or $ ratio when median `load_ms` differ by > 2× unless the compute-phase figure prints beside it (7.1) |
| **D-11 streaming and timings** | shelf rows streamed from ~15:47Z (earlier rows "TTFT not measured"); OpenAI streamed; the CLI stream-json; local non-streamed with server fields | `streamed`, `ttft_s`, `x_ttft_*` | cloud timings are network-included and say so; local timings come from server fields (R-10c) |
| **D-12 accounts and keys** | Claude: two consumer accounts (split at 16:44:10Z; the $15 list-rate ceiling lifted by an operator there); OpenAI: one key ($12 cap of a $17.14 balance, R-18 ⧖-5 top-up ruled); the shelf: one subscription | `restarts.jsonl`; `receipts/spend.jsonl` | each account is its own endpoint row in `postures.json` |
| **D-13 the doorman prompt's two instructions** | DOORMAN_SYSTEM v1.2 says "Answer with JSON only"; `run.py`'s layout then says "the letter only" | `recon/tasks-harness.md` §1.3 | `doorman48-letter` is the reading-0 id; a JSON reply is `json_verdict` (lenient only); B-doorman waits for `doorman36-json` |
| **D-14 the scorer** | five lane-local "strict" rules | section 3.4 | parser v2 re-scores every row; lane figures are provisional |
| **D-15 the anchor's bytes** | benchbox K0 and the Jev pre-0 ollama rows are `gemma4:26b` = `08ae7ec1744bd7f451c4a530afb39d2673ad9d07a8369b8a33a3613b41212a68` (the registry's bare tag: MTP draft + vision projector); the anchor arms are `gemma4:26b-a4b-it-q4_K_M` = `5571076f3d70050487b26b341705799e0ab29b808164f90d20d4cf84f699d251` (benchbox `k0a` 17:52:46Z–17:57:00Z; laptop `k0a` 18:34:34Z–18:37:36Z; `arm.json` → `tag.digest`; the pull receipts on both boxes match the pin); the vLLM FP8 rows are a third set of bytes | `arm.json`; `receipts/pull-gemma4_26b-a4b-it-q4_K_M.json` (benchbox's copy lives on benchbox at `/workshop/bench-coi-2026-09-23/receipts/`) | `manifest_digest` on every row; K0 is relabelled the bare-tag comparator; B-seat's reference is the `5571076f` row only |
| **D-16 the CLI's refusal fallback** (R-21) | every Claude row on disk at 21:0xZ ran with the CLI's `model_refusal_fallback` ON: a classifier refusal was re-sent to another model (Opus 4.8 or Opus 5) and that model's answer returned under the requested id; rows from the R-21 switch on (`CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK=1`, `run_anthropic.py` from 21:1xZ) get a refusal back as a refusal | `x_refusal_fallback_disabled` (false on every pre-switch row), `x_refusal_fallbacks`, `x_served_mismatch`, `mismatches.jsonl` | a pre-switch item the fallback re-sent is **served by another model** (section 6: excluded; the 5 % stop applied — fable-5-1 6 of 114, fable-5 2 of 3) and is also counted in that row's "refused (classifier)" disposition; a post-switch refusal is `provider-refusal`, **scored wrong** (section 6); both Fables are re-read with the switch on (9.2) and the re-read replaces the stopped row |

**Test.** `python3 -c 'import json;print(json.load(open("<arm.json>"))["tag"]["digest"])'` for D-15; `systemctl --user show coi3090-ollama -p Environment` on benchbox for D-9; `jq .x_num_predict` on any row for D-3; `jq .x_refusal_fallback_disabled` on any Claude row for D-16.

### 2.5 The anchors, the bridges and the moves (PLAN-v2 §2.3, registered here)

- **Anchors re-read in every reading:** local `gemma4:26b-a4b-it-q4_K_M@5571076f` on every card (the seat's bytes; benchbox's K0 and the Jev comparator are the registry's bare tag `08ae7ec1` — D-15 — and are relabelled so); `mistral:v0.1@b17615239298` on every card; the frontier fixed anchor `gpt-4-0613` while it serves (its closure date is 2026-10-23), then **the next-oldest OpenAI id still callable, the change printed as a bridge row** (both ids read on the same set in the reading of the change); the shelf bridge `qwen3.5:397b` or `kimi-k3` (whichever the shelf still serves; `qwen3.5:397b-cloud` retires 2026-09-25 — 8.2). A reading with no anchor row on a set prints no ratio on that set.
- **Bridges and moves (method S-7):** accuracy is carried across cards or runtimes only when **item agreement on the same digest is ≥ 97 %** (≥ 105 of 108 on c; ≥ 47 of 48 on d48; the join by `prompt_sha256`, rule 1.1-b); below that the difference is published as an instrument property and the two cells stay separate. A **runtime move** (a new ollama version, a llama.cpp or vLLM seat) re-reads a **five-architecture panel** on the same card — `mistral:v0.1` (llama), `falcon:7b`, `phi:2.7b`, the gemma4 MoE anchor, `granite4:32b-a9b-h` (hybrid) — under the same threshold before any row from the new runtime enters `series.jsonl`.
- **Test.** `ratio.py --bridge <cell A> <cell B>` prints the item agreement, n, and `carried: yes|no`; `python3 parse_v2.py --census` on both files gives the per-item choices it joins.

---

## 3 · Parser v2

### 3.1 The reference implementation

`parse_v2.py` at the bench root, **sha256 `689254c5c466944c9a24740511b78f711b662b8792efe2fb6177a030ebdf708c`** (`python3 parse_v2.py --sha`, 21:01Z; the 19:01Z draft cited `81024e9d…`, whose code disagreed with rules 1a and 1b on two strings no existing row contained — CHECK-PREREG MF-9; the code was made to follow the prose and both strings joined the selftest, 19:32Z). `parser_version` on every re-scored row is that sha. **Test:** `python3 parse_v2.py --selftest` exits 0 and prints `parse_v2 selftest: 48 cases OK`; `python3 parse_v2.py --selftest --table` prints exactly the table in 3.3. A change to the file is a new parser version and an amendment; the old rows are re-scored before any delta prints (P-5).

### 3.2 The rule (normative; the code follows it, not the reverse)

The input is one reply's **visible text** (`message.content` / the completion text; never a thinking channel), the set id (which names the option letters and the names a reply may use for each option — `SETS` in the file), and the server's stop reason.

0. An **empty** reply (whitespace only) is `budget_exhausted` when the stop reason is `length` (the budget ran out before any visible answer), else `unparsed`. Both score wrong. **An unparsed reply is never turned into a choice** (v1 turned it into option 0 — `run.py` `decide()`, the uniform `p` whose `max()` is index 0; `recon/tasks-harness.md` §0 finding 1; `SMOKE-REPORT.md` §4.7).
1. **The opening letter.** After leading whitespace and markdown decoration (`* _ \` # >`), an **uppercase** option letter, optionally in `[ ]` or `( )`, followed by end-of-text or a separator (whitespace, `] ) . : , ; - * _ \``). A lowercase letter is never a choice.
   - 1a. **The article.** An **unbracketed** `A` — no bracket on either side, so `[A]`, `(A)`, `A)` and `A]` are all bracketed and never articles — followed by exactly one space and a lowercase word on the same line, where that word neither begins an option's name (a prefix of ≥ 3 characters, or the name's first word) nor is a registered choice-marker (`is, was, would, seems, because, since, as, being, sounds, fits, matches, appears, then, so`) → `article_A`: no strict choice; lenient = the one option named anywhere in the reply, if exactly one. (`A) the line is about evolution` → `clean`, darwin — in the selftest.)
   - 1b. **The label.** The rest of the **same line** after the letter (up to 64 characters). If it names **any** option other than the letter's — whether or not the letter's own option is also named — or states a different option letter (`[X]`, `(X)`, `**X**`, "answer/option (is): X") → `contradictory` (no choice). If it names only the letter's own option → `letter+name`. Otherwise → `clean`. Text on later lines is explanation, never a label. (`[A] Darwin, not Socrates` → `contradictory` — in the selftest.)
2. **No opening letter, doorman letter recast only:** a JSON `"pass": true|false` anywhere → `json_verdict` (lenient admit / refuse; no strict choice).
3. **Stated letters** later in the reply: `[X]`, `(X)`, `**X**`, "answer/option (is)[:] X", or a final line that is exactly one letter (brackets, bold, a period allowed). Exactly one distinct option letter → `late_letter` (lenient = it); two or more → `contradictory`.
4. **Names.** Option names anywhere, word-bounded, longest alias first, each match consumed (so "not grounded" never also counts as "grounded"). Exactly one option named → `name_only` (lenient = it); two or more → `contradictory`.
5. An option letter appears only **inside words** (v1 would have taken it: "**B**ased on…") → `word_letter` (no choice).
6. Otherwise `unparsed`.

**Scores.** `correct_strict` = `format_class ∈ {clean, letter+name}` and `choice_strict == label` (**the headline**). `correct_lenient` = `choice_lenient == label` over the classes that yield one (`clean, letter+name, late_letter, name_only, json_verdict, article_A` with a single name) — printed beside, labelled, **never in a ratio**. `correct_v1` = `run.py`'s own count reproduced exactly (the first option-letter character anywhere; unparsed → option 0), kept on every row for continuity with the released Jev figures. **`format_failures`** (counted wrong) = every class outside `{clean, letter+name}`; **`instrument_artefacts`** (excluded) are section 6's, never mixed with format failures in one column (PLAN-v2 §2.4).

**The names a reply may use** (registered; `SETS` in the file): c — darwin: *charles darwin, darwin, charles*; einstein: *albert einstein, einstein, albert*; hypatia: *hypatia*; ibn_sina: *ibn sina, ibn_sina, avicenna*; sagan: *carl sagan, sagan, carl*; socrates: *socrates*. d48 — admit: *admit, admitted, hears the line, pass*; refuse: *refuse, refused, does not hear, reject*. a and f40 — yes: *yes*; no: *no*. j — grounded: *grounded*; not_grounded: *not grounded, not_grounded*; off_page: *off page, off_page, off-page*.

**`template_suspect`** is a flag on the row, not a class: the reply carries `</s>`, `<|im_start|>`, `### Human` or `USER:`. A pass with > 2 % such rows publishes no rate until re-run on a verified template (method S-4).

**The native doorman contract** (`doorman36-json`): `json_verdict_native()` — the first top-level JSON object with a boolean `pass` (true → admit, false → refuse; fenced JSON unwrapped); anything else is unparsed and wrong.

**What v2 shares with, and where it departs from, the closest lane parser** (`rtx-3090-reading-0/instrument/analyse.py`, `v2-benchbox-1`, sha `08a158f6…`): the opening-letter match, the article rule's shape and the class names are benchbox's; v2 differs in (i) the label is the **same line** only (benchbox read 48 characters across lines, so "[A]⏎⏎The passage references Socrates…" was `contradictory` there and is `clean` here); (ii) a different **letter** on the same line is also contradictory; (iii) the article rule's choice-marker exceptions ("A is the answer" is a choice); (iv) the `late_letter` forms include `(X)`, bold, "answer: X" and a bare final line; (v) `budget_exhausted` uses the stop reason. On the rows checked today (3.5) the two agree on every strict count and differ by one on the K0-think row's lenient count.

### 3.3 The selftest table (printed by `python3 parse_v2.py --selftest --table`; every case names its source in the file)

Sources: the plan's list (PLAN-v2 §2.4: `Einstein`, `Carl Sagan`, `Darwin said it.`, `Based on the style, [D] Ibn Sina`, `A line like this…`, `[C] hypatia: Hypat`, `**B**`, `B.`, `{"pass": false}`, an empty reply, two letters); the recon's table (`recon/tasks-harness.md` §0 finding 2: `Based on the article, yes.`, `[A]`); benchbox's `SELFTEST`; the Anthropic lane's non-bare replies (`ANTHROPIC-READING-0.md`: fable-5-1's "…Darwin motif.⏎⏎A", opus-5-5's "I'm going to step out of the doorman role…", the fenced JSON verdicts); the shelf's artefact rows (`CLOUD-READING-0.md`: "We need answer letter only. Need infer").

| reply (verbatim, `⏎` = newline) | set | stop | class | strict | lenient | v1 (run.py) | template_suspect |
|---|---|---|---|---|---|---|---|
| `[F] socrates` | c | stop | `letter+name` | socrates | socrates | socrates | no |
| `[F]` | c | stop | `clean` | socrates | socrates | socrates | no |
| `⏎[A] darwin: Charles` | c | length | `letter+name` | darwin | darwin | darwin | no |
| `E` | c | stop | `clean` | sagan | sagan | sagan | no |
| `B.` | c | stop | `clean` | einstein | einstein | einstein | no |
| `**B**` | c | stop | `clean` | einstein | einstein | einstein | no |
| `B⏎⏎{"pass": false}` | c | stop | `clean` | einstein | einstein | einstein | no |
| `[C] hypatia: Hypat` | c | length | `letter+name` | hypatia | hypatia | hypatia | no |
| `B) Albert Einstein` | c | stop | `letter+name` | einstein | einstein | einstein | no |
| `[D] Ibn Sina` | c | stop | `letter+name` | ibn_sina | ibn_sina | ibn_sina | no |
| `[E] sagan: Carl Sagan` | c | stop | `letter+name` | sagan | sagan | sagan | no |
| `C. Socrates` | c | stop | `contradictory` | — | — | hypatia | no |
| `[A] Darwin, not Socrates` | c | stop | `contradictory` | — | — | darwin | no |
| `A darwin` | c | stop | `letter+name` | darwin | darwin | darwin | no |
| `A⏎The line is Darwin's` | c | stop | `clean` | darwin | darwin | darwin | no |
| `A is the answer` | c | stop | `clean` | darwin | darwin | darwin | no |
| `A) the line is about evolution` | c | stop | `clean` | darwin | darwin | darwin | no |
| `A line like this is Darwin` | c | stop | `article_A` | — | darwin | darwin | no |
| `A line like this…` | c | length | `article_A` | — | — | darwin | no |
| `[A]⏎⏎The passage references Socrates, not Darwin.` | c | stop | `clean` | darwin | darwin | darwin | no |
| `**[D] ibn_sina: Ibn Sina**⏎⏎The speaker addresses Socrates directly.` | c | stop | `letter+name` | ibn_sina | ibn_sina | ibn_sina | no |
| `Einstein` | c | stop | `name_only` | — | einstein | sagan | no |
| `Carl Sagan` | c | stop | `name_only` | — | sagan | hypatia | no |
| `Darwin said it.` | c | stop | `name_only` | — | darwin | ibn_sina | no |
| `The speaker addresses Hypatia in the second` | c | length | `name_only` | — | hypatia | darwin | no |
| `Based on the style, [D] Ibn Sina` | c | stop | `late_letter` | — | ibn_sina | einstein | no |
| `Answer: B` | c | stop | `late_letter` | — | einstein | darwin | no |
| `"Interconnected web of life" is a Darwin motif.⏎⏎A` | c | stop | `late_letter` | — | darwin | ibn_sina | no |
| `The line addresses both Socrates and Hypatia, so it is neither of them.` | c | stop | `contradictory` | — | — | darwin | no |
| `[B] or [C]` | c | stop | `contradictory` | — | — | einstein | no |
| `We need answer letter only. Need infer` | c | length | `unparsed` | — | — | darwin | no |
| `Certainly. The Down House reference settles it.` | c | stop | `word_letter` | — | — | hypatia | no |
| `(empty)` | c | length | `budget_exhausted` | — | — | darwin | no |
| `(empty)` | c | stop | `unparsed` | — | — | darwin | no |
| `{"pass": false}` | c | stop | `unparsed` | — | — | darwin | no |
| `b` | c | stop | `unparsed` | — | — | darwin | no |
| `[A]` | a | stop | `clean` | yes | yes | yes | no |
| `Based on the article, yes.` | a | stop | `name_only` | — | yes | no | no |
| `B` | d48 | stop | `clean` | refuse | refuse | refuse | no |
| `A` | d48 | stop | `clean` | admit | admit | admit | no |
| `[A] admit` | d48 | stop | `letter+name` | admit | admit | admit | no |
| ` A⏎⏎Explanation: The line is fine.` | d48 | stop | `clean` | admit | admit | admit | no |
| `{"pass": true}` | d48 | stop | `json_verdict` | — | admit | admit | no |
| ````json⏎{"pass": false, "class": "harassment"}⏎```` | d48 | stop | `json_verdict` | — | refuse | admit | no |
| `I'm going to step out of the doorman role for this one.` | d48 | stop | `unparsed` | — | — | admit | no |
| `not grounded` | j | stop | `name_only` | — | not_grounded | grounded | no |
| `[C] off_page` | j | stop | `letter+name` | off_page | off_page | off_page | no |
| `USER: [B]` | c | stop | `late_letter` | — | einstein | sagan | yes |

The v1 column shows why v1 had to go: `Einstein` → sagan, `Carl Sagan` → hypatia, `Darwin said it.` → ibn_sina, `Answer: B` → darwin, `Based on the article, yes.` → no, and every empty reply → the first option.

### 3.4 The five lane-local "strict" rules, relabelled provisional (method M-4; PLAN-v2 §2.4)

| lane | rule as read in the file today | file (sha) |
|---|---|---|
| smoke | `CLEAN = ^\s*[\[(]?([A-F])[\])]?(?=$|[\s.:,;)\]-])`, else word_letter / late_letter / unparsed | `smoke/analyse_smoke.py:42` (`674d36d4…`) |
| benchbox | `v2-benchbox-1` (3.2's closest relative) | `rtx-3090-reading-0/instrument/analyse.py` (`08a158f6…`) |
| cloud | `strict_correct` = parsed under v1 and correct (unparsed = wrong); `letter_first` = `^[\W_]*[A-Za-z](?![A-Za-z0-9])`; artefact rows = ≥ 50 % unparsed or prose-first | `cloud-reading-0/cloud_run.py:348–390` (`146d91c4…`), `tables.py` (`4eb7a11f…`) |
| Anthropic | strict = `x_bare_letter` (the reply is exactly one letter: `BARE = \s*[\[\(*]*\s*([A-Za-z])\s*[\]\)*]*\s*\.?\s*`, `run_anthropic.py:492`) and correct; a diagnostic *stated letter* beside it | `anthropic-reading-0/tables_anthropic.py` `cell()` (`140d75a8…`), `run_anthropic.py` (`ccfe8d77…`) |
| OpenAI | `strict_correct` = parsed under v1 and correct; `format_failures = unparsed`; `truncated` rows refused (excluded) | `openai-reading-0/run_openai.py:518–528` (`03de0fa5…`), `tables.py` (`45a1b87c…`) |

Each lane's report keeps its own columns as it printed them; the series takes v2 only. **How v1 and v2 are both reported:** every `series.jsonl` row carries `choice_v1` + `correct_v1` (run.py's count) beside `choice_strict` + `correct_strict` (the headline) and `choice_lenient` + `correct_lenient`; every table prints strict with v1 in a labelled column, so the released Jev figures (89/108 v1 → 88/108 strict; exhibit fifty-eight's posted correction, `site/reading-the-answer/index.md` l.266) stay traceable.

### 3.5 The reference implementation checked against counts the panel and the lanes had already printed (today, `python3 parse_v2.py --census FILE --set S`)

| row file | n | strict | lenient | v1 | classes (v2) | the count already in print |
|---|---:|---:|---:|---:|---|---|
| benchbox `k0-gemma4-26b-c` (bare tag, 131,072) | 108 | **88** | 88 | 89 | clean 107, name_only 1 | 88 strict / 89 v1 (`rows/FIGURES.md`; PLAN-v2 §3) |
| benchbox `k0a-gemma4-anchor-cd.c` (`5571076f`, 4,096) | 108 | **88** | 88 | 88 | clean 108 | 88 v1, 0 unparsed (`…c.report.json`) |
| benchbox `k0-gemma4-26b-think.c` | 108 | **24** | 74 | 33 | budget_exhausted 29, clean 25, contradictory 1, late_letter 52, name_only 1 | 24 strict, 67.6 % lenient (73), 51 late letters, 29 unparsed, 30 at the cap (`panel/CHECK.md` rec 7; `FIGURES.md`) — the one-off differences are 3.2's same-line label |
| benchbox `b-falcon-7b.c` | 108 | **3** | 23 | 25 | article_A 1, clean 1, late_letter 80, letter+name 11, name_only 5, unparsed 10 | 3/108 strict; article_A 1, late_letter 80, name_only 5, unparsed 10 (`FIGURES.md`) |
| benchbox `k1-mistral-v0.1-c` | 108 | **10** | 10 | 10 | clean 13, letter+name 95 | 10/108 (`FIGURES.md`) |
| benchbox `k0-gemma4-26b-d` | 48 | **35** | 35 | 35 | clean 46, unparsed 2 | 35/48 (`FIGURES.md`) |
| `openai-reading-0/rows/gpt-4-0613.c` | 108 | **88** | 88 | 88 | clean 30, letter+name 78 | 88, 0 unparsed (`OPENAI-READING-0.md`) |
| `anthropic …/claude-sonnet-5.c.p1` | 108 | **102** | 102 | 102 | clean 108 | 102, bare 108/108 |
| `anthropic …/claude-haiku-4-5.c.p1` | 108 | **82** | 90 | 84 | clean 90, late_letter 14, letter+name 4 | harness 84; stated 67.6 %; bare 27/108 |
| `anthropic …/claude-fable-5-1.c.p1` | 108 | **91** | 99 | 93 | clean 100, late_letter 8 | harness 93; stated 84.3 %; bare 100/108 |
| `anthropic …/claude-sonnet-5.d.p1` | 48 | **27** | 36 | 36 | clean 39, json_verdict 9 | harness 36; 7 unparsed; bare 39/48 |
| `cloud …/kimi-k3--cloud.c` | 108 | **96** | 96 | 96 | clean 108 | 96; letter-first 88.9 % |
| `cloud …/glm-5.3--cloud.c` (exact) | 108 | **0** | 0 | 17 | contradictory 4, name_only 19, unparsed 76, word_letter 9 | 17 v1 (ARTEFACT); letter-first 0.0 % |
| `cloud …/gpt-oss--20b-cloud.c.think-high` | 108 | **39** | 39 | 46 | budget_exhausted 61, clean 36, letter+name 11 | 46 v1; letter-first 36.1 % (= 39); 61 at `length` |
| `cloud …/deepseek-v4.1-flash--cloud.d` | 48 | **37** | 43 | 42 | clean 40, json_verdict 8 | 42 v1; letter-first 77.1 % (= 37); 8 unparsed |
| `smoke/rows/pass1/…c` | 108 | **10** | 10 | 10 | clean 13, letter+name 95 | 10/108 (`SMOKE-REPORT.md`) |
| `jev …/rows/base-generate.c` (pre-0, 250 W) | 108 | **88** | 88 | 89 | clean 107, name_only 1 | 89 v1 → 88 strict (the exhibit's correction) |
| `jev …/rows-addenda/gemma4-fp8-generate.c` (pre-0, vLLM TP=2) | 108 | **87** | 87 | 89 | clean 104, name_only 3, unparsed 1 | 89 v1; letter-first 80.6 % (= 87) in `CLOUD-READING-0.md`; **PLAN-v2 §3 cites this row as 88/108 — under v2 it is 87** (section 8.4) |
| `laptop …/rows/superseded-k0a-gemma4-anchor-cd-memmax16g-20260923T1851Z/k0a-gemma4-anchor-cd.c` (the 16G run; its choices stand, its energy is superseded — 2.2) | 108 | **84** | 84 | 84 | clean 108 | 84 v1, 0 unparsed (re-read at the moved path 21:0xZ: identical) |

Every strict count that had already been printed under a lane parser is reproduced; where a lane printed "letter-first", v2's strict equals it on every row checked.

---

## 4 · The scores, the intervals and THE RATIO

### 4.1 Rates

- **Strict accuracy** (the headline) = `correct_strict ÷ all items of the set` (n = 108, 63, 48, 40, 119; a `context-model` refusal is wrong and shown as coverage — section 6). **Lenient** beside it, labelled. **`correct_v1`** beside both.
- **A pass covering < 100 % of its set publishes counts only**, with the item range in kit order; **any cell with n < 30 prints counts, never a percentage** (the doorman's C/D n = 12; the field exam's tiers n = 20; the buckets n = 6) — PLAN-v2 §2.4.
- **Wilson 95 %** on every rate: centre (p + z²/2n)/(1 + z²/n), half-width z·√(p(1−p)/n + z²/4n²)/(1 + z²/n), z = 1.96 (`benchbox …/analyse.py` `wilson()`; the same arithmetic in every lane).
- **The cluster bootstrap** beside Wilson: by `dinner_id` for c (recovered by the wall match, Q-3; until then the 50 `id` groups are the clusters), by article slug for a and j; 10,000 resamples.
- **Which pass is the score** (method S-1): local = **pass 1 (cold: unload, warm-load, pass)**; later passes are for energy, their item agreement with pass 1 printed. Frontier temperature-0 rows: 1 rep plus a 20-item determinism probe; sampled rows (D-4): 3 reps, score = the mean, per-item correctness = the mean over reps, intervals by bootstrap over per-item means. **The anchor:** 1 rep plus one repeat of the six-way as the determinism receipt; a third pass only if the two disagree on more than 2 of 108 items. **How reading 0 treats the rows its cell list carries at one rep (registered, because the list — 9.2 — registers one pass for every sampled row but the two temperature repeats, and no 20-item probe but the anchor's repeat):** a reading-0 sampled row (every Claude row; the 9 sampled OpenAI rows, `gpt-6-astra` at low among them, an F-closed member) is scored on its one pass, carries `reps: 1`, and prints R-21's measured CLI agreement as its caveat on every table — **haiku's two default runs agreed on 46 of 72 paired items, 63.9 %** (`rows/claude-haiku-4-5.c.p1.jsonl` and `.c.p2.jsonl`; the p2 pass was at 72 of 108 at 19:04:03Z); a reading-0 temperature-0 row without a probe carries `determinism: not probed`. The 3-rep rule and the 20-item probes bind from the first reading whose cell list carries them (0.1 onward; the reps are on 0.1's list, 9.2). A rep or probe that lands for a reading-0 row before its close joins that row's cell (the same cell, never a new one) and the row's score becomes the mean as this rule says.
- **Between-reading change** is a finding only when the paired interval of the change excludes 0; otherwise "no detectable change at n = …". Each set's **minimum detectable change** is computed by its own paired bootstrap at the v2 re-score and recorded by amendment (A-05); the starting values are method M-11's ≈ 0.09 at n = 108 and ≈ 0.15 at n = 36–48.

### 4.2 Paired tests (the form every bar and every difference uses)

Identical items joined by `prompt_sha256`; a **paired bootstrap of 10,000 resamples**, resampling items (clusters when the set has ≥ 10 clusters), **seed 20260923** (registered here; `numpy.random.default_rng(20260923)` or Python's `random.Random(20260923)`, the script names which); the 2.5th and 97.5th percentiles of the resampled difference or ratio are the 95 % interval. The exact McNemar p on the discordant counts prints beside it (`panel/method_checks.py` [2] is the receipt for the form: 7 vs 7 discordant on the two 88/108 rows, p = 1.000, ±6.5 points).

### 4.3 Chance correction

- Multi-class sets: plain strict accuracy with chance b = 1/k (c: 1/6; j: 1/3).
- Two-class sets (a, d48, d36, f40): **balanced accuracy** (the mean of the two per-class recalls) with b = 0.5 (the doorman's always-refuse raw score is 75.0 % and several frontier rows land exactly there; task_a's always-yes is 66.7 %).
- The **addressee floor** on c, 24.0 % (Jev README), is B-chance's bar (section 5), not the correction's b.

### 4.4 THE RATIO (R-3 as registered by R-15; PLAN-v2 §2.4)

- **Headline form:** `R_cc = (L − b) / (F − b)`, L and F the (chance-corrected, per 4.3) strict rates of the two sides on the same items under the same `parser_version`. Beside it: the raw ratio L/F and the error ratio (1 − L)/(1 − F) (rule-of-three bound 3/n when F makes 0 errors). Every ratio prints numerator and denominator in full (model, card or endpoint, n/N, interval, reading, k), its paired-bootstrap interval, and Δlog R = Δlog L − Δlog F.
- **"Best" is cross-fit** on both sides: split the set's items by the parity of their **kit index** (0-based; even = 0, 2, 4, …); choose the best model on the even items and score it on the odd, then the reverse; average the two out-of-sample rates. The raw maximum prints beside it as "max of k = …, selection-inflated" (method M-2's table: at n = 108 the max of k noisy rates sits 4–9 points high).
- **Numerator population:** ★ and family rows (the ★ rule, 4.5) at the registered posture (2.3), the pinned runtime and quant; quant-axis, vLLM/llama.cpp and think variants are separations, never candidates; readout/specialist rows never (the ratio is generate-only, G-6).
- **Comparator panels, registered:**
  - **F-closed** (the headline denominator): every id of each closed vendor **we can call** — OpenAI by key; Anthropic through the sealed CLI at reading 0 (⧖-6 (a), R-17; no Anthropic key is held) and by a metered key from reading 1 (⧖-6 (b)) — released or created within the 180 days before the reading's close, read on the set **at its utility posture (2.3): one row per id, the row 2.3 names; the id's other posture rows are R-11's panel and never F-closed members**; cross-fit best over that panel; k printed. **Which Claude row that is, registered (2.3):** the `--effort low` row where the verdict rule says CHANGED — at 21:0xZ sonnet-5 (96/108 v1, against 102/108 at the CLI default), opus-4-8 (97, against 101), opus-5-5 (103, against 104); the CLI-default row where the flag is refused or the verdict is NO clear change (haiku, not a member); and, until the `--effort low` cells for opus-4-7, opus-5 and fable-5-1 land (9.2), their default rows stand in labelled `posture: default (provisional)` and F-closed's cross-fit prints "provisional". For OpenAI the utility-posture row is the lowest accepted effort (`none`/`minimal`/`low`), never the `@default` row. *At reading 0 this resolves, from the ids read today, to* OpenAI `gpt-5.5-2026-04-23`, `gpt-5.6-luna/-sol/-terra`, `gpt-6-astra`, `gpt-6-luna`, `gpt-6-sol` (created ≥ 2026-03-29) and the Claude ids released ≥ 2026-03-29 (`opus-4-7`, `opus-4-8`, `sonnet-5`, `opus-5`, `fable-5-1`, `opus-5-5`; `fable-5` only if its R-21 re-read completes). This registers M-2's "current flagship of each closed vendor" as a mechanical window rather than a hand-picked id; a change is an amendment.
  - **F-open-cloud** (printed beside, "cloud-served open weights", never "frontier"): the three shelf tags with the largest stated parameter count read on the set at the utility posture (ties → the newer release). *At reading 0:* `kimi-k3:cloud` (2,812 B), `deepseek-v4-pro:0813-cloud` (1,650.5 B), `kimi-k2.7-code:cloud` (1,042 B, newer than k2.6) — `CLOUD-READING-0.md`'s roster.
  - **Fixed:** the anchor.
- **The fixed-anchor ratio:** cross-fit best local ÷ **`gpt-4-0613`'s S0 row**, frozen by its file: `openai-reading-0/rows/gpt-4-0613.c.jsonl`, sha256 `19dd55171ef71ebe552c03564f4fbd2bce90f1bfa186e5cc90160c83ed14287c` (169,449 bytes; rows stamped 2026-09-23T16:00:44Z → 16:03:59Z; the 15:50Z five-item pilot is not this row), report sha `withheld-2026-10-14`; **88 / 108 strict under v2** (3.5), 0 unparsed, temperature 0, seed 20260921, `system_fingerprint` null on every row, $0.9553 metered. Both numerator and denominator from `series.jsonl` only, same items, same `parser_version`; refused when either side is missing or INCOMPLETE. The moving and fixed ratios print side by side; neither alone is the headline (R-3). **On a later S1 slice the fixed ratio is the linked form** registered in 1.2 (local ÷ (local anchor on that slice × link)), printed only when the two measured links agree within their paired intervals, labelled "linked".
- **Saturation:** where both the cross-fit best local and the cross-fit best F-closed are ≥ 97 % strict, the ratio prints "saturated — uninformative" (evaluated on the cross-fit estimates).
- **Out-of-family split:** every c and j row prints its rate on the items not written by its own family beside the headline, with n (task_c's lines were written by gemma-4-26B or mistral-small-3.2; `author_family` per item arrives with `KIT.lock.json`, A-04); a gemma- or mistral-family numerator's headline ratio and B-seat are stated on the split.

**Test.** `ratio.py` (to be written) reads `series.jsonl` only, types no number, and refuses: mixed parser versions, mixed P0/P1 rows, a missing side, an INCOMPLETE side, a dollar field for `card_arch = blackwell-ws` (P-6).

### 4.5 The ★ rule, the staircase, and the order of the owed files (PLAN-v2 §2.0, §3; registered here)

- **The ★ rule** (method S-2; ⧖-7 (a) by R-17): ★ per half-year is chosen by an **external, dated, cited score — never our sets** — named per row in `pins.json` with its URL and read date (A-03); **2024H1 resolves to one ★** (`qwen:32b-chat-v1.5-q4_K_M` or `gemma2:27b-instruct-q4_K_M`, by that score, PLAN-v2 §3's table); C5 and Bench 1's curve draw **★ rows only**; a "best of all rows" envelope prints separately with k and the cross-fit estimate; the sampling frame is stated in one sentence ("what ollama's library still hosts as GGUF in 2026"). Roles: ★ · family (each lab's line for C1) · alt (swaps in by rule on a failed load or licence check). The ★ rows form 4.4's numerator population together with the family rows.
- **The ★ source is chosen blind to v2:** A-03 lands before A-05 (section 0's gate), so no v2 re-score is visible when the external score is picked; `pins.json` records the read date of each cited score, which must precede A-05's stamp.
- **Our own staircase, `C_ours(t, bar)`** (PLAN-v2 §3, "registered today before phase C completes"; phase C completed 18:18:15Z, and this definition was not under a sha until this patch, 21:0xZ — stated, not hidden): for a UTC date t and a bar, **the minimum, over frontier ids released on or before t whose strict accuracy (rep mean) on the set is ≥ the bar, of $ per item at that id's launch-price block** (`receipts/launch-prices/`, R-4) — Epoch's unit on a task set that postdates every model. Bars: **B-anchor** (section 5) and **one lower bar at 60 % strict** (PLAN-v2 §3's rec, taken under R-0). The rate prints as the log-point slope from the first step to the last plus each step's own factor; **no fitted curve**; survivorship listed (the ids that could have been on a step and are no longer callable, with their closure dates). Output: one sentence, *Epoch's 47 %/quarter on public benchmarks against X %/quarter on a set no model could have seen*, with the direction held in advance (PLAN-v2 §1's prediction). The definition moves to `METRICS.md` v1 (A-02) unchanged; a change is a new `metrics_version`.
- **Order of the owed files** (section 0's gate, restated as a rule): **A-01 → A-02 → A-03 → A-04 land, each with its sha, before A-05 (the v2 re-score and `series.jsonl`) and before any ratio, staircase or ladder table.** `ratio.py` and `coi.py` refuse to run when `protocol.json`, `METRICS.md`, `pins.json` or `KIT.lock.json` is missing or its sha is not in the amendments block.
- **Test.** The amendments block's order and `amends:` chain; `python3 - <<EOF` reading `pins.json` and asserting every ★ row carries `star_source_url`, `star_source_read_utc` < A-05's stamp, and exactly one ★ per half-year.

---

## 5 · The bars (Bench 2), each with its test

| bar | set(s) | the test, exactly | notes |
|---|---|---|---|
| **B-chance** | c | strict > 24.0 % (the addressee floor, Jev README §"Task (c): the floor"), and the Wilson lower bound > 16.7 % | a 2023 model reads *below* chance by picking the addressee (`SMOKE-REPORT.md` §2: 69 of 98 wrong picks name a guest the line addresses) |
| **B-anchor** (R-2 as registered by R-15) | every S0/S0.1 set (a via `task_a@8k`) | a **paired non-inferiority test** against the anchor row on identical items (4.2): *clears* = the point difference ≥ 0 AND the lower 95 % bound ≥ −δ; *clears with margin* = the lower bound ≥ 0; **δ = 5 points at n ≥ 100, 10 points at n < 100** | the anchor's other-set rows land inside reading 0 (⧖-5 ruled, R-18) or the bar has no denominator on that set; the anchor clears its own bar trivially |
| **B-seat** | c, d36, j | the same paired test against `gemma4:26b-a4b-it-q4_K_M@5571076f` on the reference 3090 (`<withheld: GPU UUID of board A>`, 300 W) at reading 0 — the `k0a-gemma4-anchor-cd` rows (`…c.jsonl` sha `withheld-2026-09-29`, 88/108 strict) | "good enough to be our seat"; the docent's FP8/vLLM seat is its own cell; K0 (`08ae7ec1`) is not the reference |
| **B-frontier-90** | each ratio set | strict ≥ 0.90 × the cross-fit F-closed best at the same reading | a debut-age bar (moving) |
| **B-field** | f60 native | the exam's registered bars (T1 ≥ 17/20, T2 ≥ 14/20, T3 ≥ 17/20, overall ≥ 48/60, floor T2 ≥ 10/20; `bench/field-exam/PREREG.md` §4), **carried over only after** `gemma4:31b` and `qwen3.6:27b` re-read under the prompted T3 wire land within ±2 per tier of their 08-25 native answers | tiers print counts (n = 20); crossings provisional until then |
| **B-doorman** | `doorman36-json` only | all 24 in-contract planted lines refused AND 12/12 controls admitted, printed as "clears: error ≤ 8.3 % at 95 %" (rule of three at n = 36); on sampled backends every rep must clear; a crossing is dated only after two consecutive readings, the second on a fresh runner on a different card | the product's contract; C/D are disposition counts, never accuracy |

**Cheapest clearer** (the ladder's headline): "cheapest" = archetype-A levelised at the stated primary u (section 7); the cheapest model must clear on **both parity halves** (4.4's split) or on S1 once it exists, else "provisional"; a bar both sides saturate prints "saturated" and no cheapest-clearer; a rung rejected by its own gate gets no threshold table; across readings the point-to-point factor per bar; **no slope fitted to two or three points, no ×/year under 12 months**. The ladder carries `method ∈ {generate, readout, specialist}` and `servable` (Apache/MIT/Gemma terms yes; CC BY-NC no); THE RATIO stays generate-only.

**Test.** `python3 ratio.py --bar B-anchor --set c` prints, per candidate, the point difference, the paired interval, δ, and the verdict; the same seed reproduces the same interval.

---

## 6 · Instrument artefacts versus capability failures — the classification rule

| class | what it is | how it scores | where it came from |
|---|---|---|---|
| `clean`, `letter+name` | a parseable answer | scored strict | — |
| `word_letter`, `late_letter`, `name_only`, `json_verdict`, `contradictory`, `article_A`, `unparsed` | a format failure: the model answered, not in the contract | **wrong** (counted in `format_failures`) | the product needs the letter; v1 hid these (3.3) |
| `budget_exhausted` | reasoning hit the cap with no visible answer (`length`, empty content) | **wrong**, never excluded (P1); the OpenAI lane's `truncated` (0 occurred) is re-classified to this | the shelf's think rows (qwen3.5:397b d: 43 of 48; gpt-oss:20b high: 61 of 108), K0-think (29) |
| a tag that cannot switch thinking off and writes no letter in 8 tokens | the protocol's verdict on the tag under the exact body | the exact-mode row is kept and labelled a protocol verdict; the tag's **utility-posture row is its capability row** (2.3) | gpt-oss:20b/120b and minimax-m2.7 on the shelf (108/108 unparsed at 8 tokens); the local gpt-oss:20b calibration |
| `context-model` | the item exceeds the model's trained window | a capability FAIL, in the headline, shown as coverage | task_a on 2023 windows |
| `context-card` | fits the model, not this card's KV | a FAIL for that (model, card) cell, labelled | the desktop's larger card admission rule |
| `provider-refusal` (**R-21**) | the endpoint's classifier refused and the refusal came back as a refusal from the requested model (`stop_reason: refusal`; the Claude CLI with `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK=1`, every call from ~19:1xZ on — D-16) | **scored WRONG, in the headline rate**, and counted separately as **"refused (classifier)"** beside every rate it touches (a disposition count that also prints outside any ranking); never excluded | the Fables' refusals of ordinary six-way lines labelled "cyber"/"bio" (2 of fable-5's first 3; R-21); their re-reads under the switch (9.2) |
| served by another model | the served snapshot or `modelUsage` ≠ the requested id — including **every pre-switch item the CLI's `model_refusal_fallback` re-sent** (14 calls at 21:0xZ, counted from `mismatches.jsonl`: opus-5-5's 6 and fable-5-1's 6 on the doorman, fable-5's 2 on the six-way) | **excluded** from every rate; the model stops when > 5 % of its calls (floor 20) — the lane's rule, kept; a pre-switch re-sent item is also counted in "refused (classifier)" for that row; a stopped row is re-read under the switch and the re-read replaces it | fable-5-1 6 of 114, fable-5 2 of 3 (both stopped; both re-read under R-21) |
| `failed` | transport, 404, timeout, our misconfiguration | **excluded**, retried ≤ 2× byte-identical; a pass with > 2 % failed rows is INCOMPLETE and publishes no rate; a failed request is never a verdict | kimi-k3 1, nemotron-3-ultra 4 failed calls (`CLOUD-READING-0.md`); 0 on OpenAI; 0 on Claude scored work |
| `template-suspect` pass | > 2 % of replies carry template control strings | no rate until re-run on a verified template | method S-4 |
| `series: false` | the smoke and the calibration (the system daemon 0.32.14, KV q8_0, keep-alive −1, the embedder resident) | never rows of the series; cited as smoke/calibration | PLAN-v2 §2.2 |
| a peer-evicted or warm-cache pass | the smoke's pass 3 (evicted 15:44:00Z) and pass 2 (prompt-cache hit) | choices for determinism only; energy nowhere | `SMOKE-REPORT.md` §4.1–4.5 |
| a `STOP`/trip on the desktop's larger card | the guard stopped the arm | never a verdict, never a failure; the arm re-runs | `guard.py` |

`format_failures` and `instrument_artefacts` are **two columns, never one**. The shelf lane's "ARTEFACT ≥ 50 %" row rule is a lane presentation rule and does not enter the series: under v2 every row of such a pass is classified item by item and counted wrong where it is a format failure.

---

## 7 · Energy and cost definitions (R-6, R-10 … R-10d, R-16; the cost model's inputs as ruled by ⧖-10 (a))

### 7.1 Energy

- **Instruments, named on every figure:** `board` (nvidia-smi `power.draw` by UUID at 1 Hz, trapezoid-integrated over the sampler's own timestamps — `run.py` `Boards`); `wall` (benchbox's UPS `ups.realpower`, CP1500PFCLCDa via NUT, a step function ~14 s wide: honest over a task window of a minute or more, never per item — `benchbox …/NOTES.md`); `box-delta` (the desktop's CP2000 `upsc cp2000 ups.realpower`, integer watts, stderr dropped, anything else refused and counted — R-16; "includes the desktop's 3090 and the host", never "wall"); `rapl` (**the laptop's package-0 only**, from `/run/rapl/energy`, R-10d — the CPU package's reading, never "wall" and never "platform"; the sampler also writes core, uncore and psys, and **psys is recorded, labelled IMPLAUSIBLE — ~0.3 W idle and loaded against package-0's 16–33 W, the R-10d addendum — and never enters a figure**; the laptop has no platform or wall instrument, so its energy figures are board + package, labelled so); `none` (cloud rows: no joule is claimed). Board and wall figures are never compared in one ratio without saying so (R-6).
- **Per local row** (R-10, R-10c): J per generated token (decode) and per prompt token (prefill), each from the power integrated over the server-timed phase ÷ its token count; **three named J/1k quantities, never a bare "J/1k"**: `j_per_1k_decode_probe@roster` (exactly `compare_cards`' conditions), `j_per_decode_token_task`, `j_per_prompt_token_task`; tokens per joule; **J per correct answer two ways: whole-window** (what the owner's meter sees) **and compute-phase** (board power over `prompt_eval + eval`); tokens per second (decode, prefill separately), TTFT (streamed; else "TTFT not measured"), tokens per second per watt; mean and peak watts; idle watts of the card and, where a wall/box meter exists, the box; the posture as read; temperature at start and end; `load_ms`, `eval_ms`, `total_ms`.
- **Net of idle:** the median of the 60 s before each task in a minute whose co-tenant journal shows no request; reported raw and net. Prefill tok/s from ollama's fields is cache-inflated on a warm pass (`SMOKE-REPORT.md` §4.3), so per-token energy comes from cold runs only.
- **The 2× rule:** `ratio.py` refuses a cross-card J or $ ratio when the cells' median `load_ms` differ by more than 2× unless the compute-phase figure prints beside it (D-10).
- **CO2e per correct** on local rows uses the what-it-costs piece's round mixed-grid figure, labelled "not measured here".
- **The desktop's larger card:** energy only — board J gross and net, the CP2000 box delta; `shared_card`, `cotenant_requests`, `collided` on every row; speed and energy over collision-free items only; every `$` cell `blank_reason: "P-6"`; `ratio.py` emits no `usd*`, `cost_*`, `u_star`, `c_star` field for `card_arch = blackwell-ws`, with a test.
- **The metric definitions live in `METRICS.md` v1** (amendment A-02 carries its sha); a change to a definition is a new `metrics_version`, never an edit of an old reading's figures.

### 7.2 Cost per correct answer — local (PLAN-v2 §5; every input as ruled)

- **Two owner archetypes on every cost row; no ratio or ladder mixes them.** **A · the buyer:** C = the replacement cost of the whole working machine at the reading's date — the 3090 = the rig with one card, **$3,198.86 on 2026-09-13 before tax** (exhibit 46), re-read each reading; the laptop = **$3,099.99 PAID whole machine** (ordered 2026-07-03, exhibit 57), its box idle "unmeasured, understates"; the 96 GB card: no C, no C\*, no dollar cell (P-6). Fuel **gross** (whole-window board J; benchbox's UPS net of box idle; elsewhere board ÷ 0.9 labelled "assumed") **plus idle** P_idle × (1 − u)/u × t_busy × p_e; capital per answer = annual capital ÷ answers served per year. A **card-only** row for the 3090 alone at the LISTING **$1,879.99** (read by hand 2026-09-17 15:00–15:30Z), labelled "not comparable across cards". **B · the incumbent:** capital = V × (r + δ), V = today's resale (a 3090: **$1,094.44**, August 2026's average completed sale, exhibit 46), r = the 3-month Treasury bill yield at the reading's date (FRED `DTB3`), δ from the card class's own dated price history; laptop C = 0; the desktop's larger card 0; fuel net of idle, no idle term. Never mark to market in the headline; the holding gain/loss prints as a labelled line with its sign. **Struck:** the "$1,899 pair" and the $1,849.99 figure (article M-2).
- **Primary convention:** n = 3 years, R = 0, i = 0 (straight line) for archetype A; the user-cost row (B) and n = 5 / i = 5 % as sensitivity rows; a **bias-direction table** in `METRICS.md` for each choice; **"owning wins" or "owning loses" prints only if it holds under the sensitivity row most favourable to the losing side**, else "depends on the convention: X under …, Y under …".
- **p_e:** the latest EIA table 5.6.A U.S. residential month at the reading's date — **June 2026: 18.34 ¢/kWh** (read 2026-09-23 ~15:36Z, `recon/sources-economics/prices/eia-…html`; July releases 2026-09-24 and applies from then); like periods only (June 2025 17.47 ¢, +5.0 % nominal); sensitivity rows at commercial 14.19 ¢ and industrial 9.17 ¢; the trailing-12-month mean once twelve receipted months exist; every dated price also deflated with CPI-U (FRED `CPIAUCSL`, the price's own month) wherever a rate meets Epoch's real-dollar line; registered as `p_e_rule` in `prices.json`.
- **u:** `U_demand` = Σ over request classes of (served product requests in the window × measured t_busy for that class) ÷ the window, bench windows and warm-seat re-pins excluded, from qm's call records, labelled "the estate's demand, served on this card"; the tick figure as a second row with bench hours removed; the scenarios **U100** and **U25** (six hours a day); and **u\***. Beside every u, what it means in answers per day. Never publish hour-of-day profiles; aggregate over ≥ 24 h.
- **c:** c = 1 (a person at a keyboard) and c = the card's best measured; fuel at c measured at c, never carried from c = 1; whatever operating mode the cloud's price row assumes, local gets the same mode measured (batch → a queued local arm; cached input → a warm-prefix row).
- **Bands on the two 24 GB cards:** (1) fuel only — "the meter only, not a price", never in a ratio with a cloud price; (2) levelised, archetype A at U100 / U25 / U_demand, and archetype B; (3) u\* and C\* against the same weights rented and against the frontier; no-solution forms: u\* > 1 → "no break-even at this concurrency…", C\* ≤ 0 → "no purchase price breaks even at this duty…"; u\* is a property of a set's token mix (in/out tokens per item printed beside it). **$ per correct prints only for rows that clear B-chance**, with an interval (cost ÷ N × the Wilson bounds) and, labelled, "$ per correct above the floor". The fuel share prints on every levelised row.

### 7.3 Cost — frontier

`cost_j = (in_uncached × p_in + cache_write × p_cw + cache_read × p_cr + out_total × p_out) × m_geo × m_batch`, `out_total` including reasoning tokens, **every call including failures**; the price block `{url, read_date, sha, in, cached_in, cache_write, out}` frozen per reading (`openai-reading-0/receipts/pricing.md`, fetched 2026-09-23T15:40:55Z, is reading 0's OpenAI block; the launch-price block per id in `receipts/launch-prices/`, R-4); the batch row is a receipt, not a multiplication; with 3 reps, $ per correct = the mean over reps of each rep's bill ÷ that rep's correct answers. **The Claude rows** enter only through the **derived direct-API 1× figure**: (input tokens − the fitted scaffold, **428.8 tokens** as `tables_anthropic.py` fits it for haiku; per-model intercepts in the projection table) × p_in + output × p_out at Anthropic's published prices, batch × 0.5 beside; the CLI's `total_cost_usd` (list-rate, "client-side estimates", with the one-hour cache-write premium at 2×) prints labelled and never enters a ratio (cost state **no-figure-held**). **The bar-matched cost ratio:** at bar B, (cheapest local clearer, archetype A, stated u) ÷ (cheapest frontier clearer of B), within one think-setting class. **"Renting the same weights"** = the median provider price with quantisation stated, the minimum beside it, `:free` excluded (OpenRouter daily snapshot; measured $ per correct through the same provider with ⧖-21's key). **"Rent the card"** = a dated public hourly rate per GPU class × our measured seconds per answer at the same c (none for the 96 GB class, ⧖-12). **Epoch's unit** ($ per question at a fixed accuracy) = $ per correct × accuracy, printed for the cross-walk only.

### 7.4 Bench 3's decision rule (the FORM registered here; the numeric band by amendment before reading 1)

Three outcomes at each bar, forward readings only: *toward ownership* when the bar-matched owned ÷ rented cost ratio fell by more than the registered band; *against* when it rose by more than it; *inconclusive* otherwise. The band = the OpenRouter daily snapshots' own quarter-on-quarter price spread combined with the accuracy interval carried into $ per correct; `ratio.py` prints the earliest reading that can answer. No ×/year from readings under 12 months apart. The prediction (PLAN-v2 §1): at B-anchor the cloud's $ per correct falls faster than the owned figure by a factor between 1 and 1.6 a year; the result that argues against owning is publishable (the panel's u\* ≈ 0.87 and 1.11 on the Jev rows is a sketch on superseded inputs and will not be published). **A-06 carries the band's numbers** once twelve daily snapshots exist; until then the rule prints "band not yet registered".

---

## 8 · OBSERVED BEFORE REGISTRATION — what existed, and what the author had seen, when this file was written

### 8.1 The manifest

**Two stamps.** *(1) The first stamp, what the author had in view:* `PREREG-S0.observed.tsv`, written by `prereg_observed.py` v1 (sha `f731be5a615c98c6129c164004834f9f4966a26970cb0d9430e35ac5673ecd7d`, which globbed only `rows/**` jsonl, `*.report.json`, `arm.json` and the calibration json) at **2026-09-23T18:46:27Z**: **634 files**, each with bytes, mtime (UTC) and sha256; manifest sha256 **`643388182a46ee661a764aa6155f2a22e75fe0f932aab94f90361b8ad33042f4`**. Per directory (counted from the file, 21:0xZ): `cloud-reading-0` 221, `rtx-3090-reading-0` 127 (the laptop mirror; benchbox's own tree had reached step 71 — `t-qwen3-30b-a3b-on` completed 18:38:34Z and `pull qwen3:32b-q4_K_M` started 18:38:37Z; **the `t-qwen3-30b-a3b-on` rows WERE in the mirror and in this manifest** — `.c.jsonl` 18:35:26Z, `.c.report.json` 18:35:27Z, `.d.jsonl` 18:38:26Z, `.d.report.json` 18:38:27Z, `arm.json` 18:38:34Z — but were not read before 2.3's utility-posture rule was written; the 19:01Z draft's "not yet mirrored" was wrong), `openai-reading-0` 62, `anthropic-reading-0` 42, `laptop-reading-0` 31, `smoke` 6, `../jev-2026-09-21` (pre-0) 145; **`rtx-pro-6000-reading-0`: 0 files in the laptop mirror** — but the desktop's own tree already held the dry run `dry-a-gemma4-anchor` (report `ended` 18:18:01Z) and the three B-1 arms `b1-gemma4-anchor-cd`, `b1-mistral-small3.2-cd`, `b1-qwen3.5-35b-a3b-cd` (18:27:35Z → 18:38:07Z); they were mirrored later and appear in the second stamp; the 19:01Z draft's "no arm has run" was wrong, and none of their figures was seen when the rules were written. **Report files in the first stamp: 295 — 226 outside the Jev tree** (OpenAI 31, Anthropic 20, cloud 108, calibration 2, smoke 3 including its superseded pass 3, benchbox 50 including `dryrun-k0` ×2 and `t-qwen3-30b-a3b-on` ×2, laptop 12 including the 3 superseded item-12 reports) **plus the Jev tree's 69**; the 19:01Z draft's "220 (… Anthropic 19 … benchbox 48, laptop 9)" was a miscount. **Landed inside the writing window (18:38:44Z → 18:46:27Z) and in the first stamp:** the Anthropic `sonnet-5+effort-low` pair (18:39:04Z), the laptop `k1-mistral-v0.1-cd` c (18:39:20Z) and d (18:39:45Z) and its `arm.json` (18:40:17Z), the laptop `b-falcon-7b` c (18:42:42Z) and d (18:43:02Z) and its `arm.json` (18:43:26Z), the Anthropic `opus-4-8+effort-low` pair (18:43:38Z), and the Anthropic `opus-5-5+effort-low.c.p1.jsonl` **in progress** (104,159 bytes at 18:46:25Z; it grew to completion at 18:48:31Z and is the one first-stamp sha that no longer verifies). *(2) The second stamp, "existed, not read":* `prereg_observed.py` was widened (v2, sha `a2fc414e10b1e8ea36f5e05ede5d589ee572bbfdaa8dcd6fe7d59a7b7baaf2cc`, 19:34:52Z) to **every file under the six lane directories, the smoke, `panel/`, `recon/` and the Jev rows tree**, excluding only `raw/`, `*.raw.jsonl`, `*.env`, `*.heartbeat`, `__pycache__`, this file and `panel/CHECK-PREREG.md`, and re-run as **`PREREG-S0.observed.2.tsv` at 2026-09-23T19:35:14Z: 2,662 files, sha256 `cdc1d93b8fb5d40e5db441702854757c7d7746f9aeb4c13b1480fc7058ca12e7`**. Against the first stamp (`prereg_observed.py --diff`, recomputed 21:0xZ): **1,632 files existed at 18:46:27Z but were not globbed** (the lane reports, `FIGURES.md`/`figures.json`, the per-arm `probes.json`, `watts`/`ext`/`idle` traces, the receipts, `spend.jsonl`, `mismatches.jsonl`, `doorman-egress.json`, `k1-vs-smoke.json`, the census, `panel/method_checks.py`, the queue and arms files — every source 8.2 cites except the shelf's raw call count); **401 landed after** (28 of them report files: 7 laptop `b-*` arms (14) plus the superseded `b-llama2-7b` first run (1) and the superseded 16G `b-vicuna-33b` (2), benchbox `b-deepseek-r1-32b` and `b-mistral-small3.2-24b` (4), Anthropic `opus-5-5+effort-low`, `+effort-high` and `haiku-4-5.c.p2` (3), the desktop's larger card `r-w1-*` (4)); **5 listed paths moved** (the laptop `k0a` → its superseded directory); **1 sha changed** (the `opus-5-5+effort-low` row, above). Per directory at 19:35:14Z: `../jev-2026-09-21` 292, `anthropic-reading-0` 77, `rtx-pro-6000-reading-0` 325, `cloud-reading-0` 655, `rtx-3090-reading-0` 611, `laptop-reading-0` 363, `openai-reading-0` 250, `panel` 9, `recon` 18, `smoke` 62; report files 370 (Jev 69, Anthropic 23, the desktop's larger card 12, cloud 112, benchbox 56, laptop 29, OpenAI 63, smoke 6). **The freeze commit re-runs the widened script once more, immediately before `sha256sum PREREG-S0.md`, as `PREREG-S0.observed.freeze.tsv`, and A-00 records its stamp, file count and sha256**; everything in it and not in the first stamp is "existed, not read". **Rows landing after 18:46:27Z belong to reading 0 if they are on the cell list (section 9) but were not seen when these rules were written.**

### 8.2 The figures the author had seen (by lane; v1 counts unless marked; every one is in a file the **second** stamp lists — the first stamp omitted the lane reports and the receipts, 8.1 — except the shelf's raw call count, whose source `raw/*.raw.jsonl` is excluded by design and which is carried by `CLOUD-READING-0.md`)

**The lane reports as read** (the copies the figures below came from; the working copies have been regenerated since): `ANTHROPIC-READING-0.md` at estate `5df46547` = HEAD `fd72eb15` (sha `a9d85798…`; calls to 18:32:18Z; $12.4355) — the working copy (`4edf89b4…`, calls to 19:04:03Z, $15.2852) postdates the rules; `rtx-3090-reading-0/rows/FIGURES.md` at HEAD (`69331998…`, generated 16:50:55Z under `v2-benchbox-0`) — the working copy (`a0aceca3…`) was regenerated 19:06:00Z under `v2-benchbox-1`; `OPENAI-READING-0.md` `withheld-2026-09-29` (tables 18:18:15Z); `CLOUD-READING-0.md` `withheld-2026-09-29`; `SMOKE-REPORT.md` `731e9ed8…`; `laptop-reading-0/rows/FIGURES.md` `63c5a55b…` (all read 21:0xZ; the last four unchanged since the writing).

- **OpenAI** (`OPENAI-READING-0.md`, tables regenerated 18:18:15Z): 31 six-way rows in release order, all 108/108 scored, 0 unparsed, 0 failed, 0 truncated: gpt-4-0613 **88** ($0.9553; $0.01086 per correct; launch price = today's $30/$60); gpt-3.5-turbo-1106 34, -0125 24; gpt-4-turbo 92; gpt-4o-0513 88, -mini 73, -0806 90, -1120 89; o3-mini 79 (low); gpt-4.1 97, -mini 84, -nano 41; o3 98 (low); o4-mini 93 (low); gpt-5 97, -mini 86, -nano 45 (minimal); gpt-5.1 96, 5.2 96, 5.4 98, 5.4-mini 90, 5.4-nano 52 (none); gpt-5.5 102 (none) and **103 at default/medium**; gpt-5.6-luna 94, -sol 103, -terra 95; gpt-6-astra 101 (low) and 101 at default; gpt-6-luna 96; gpt-6-sol 101; o1 piloted only (5/5). Spend $4.4277 of the $12 cap; phases D/E HELD; TTFT medians 0.84–3.31 s network-included.
- **Claude** (`ANTHROPIC-READING-0.md`, calls 15:44:52Z → 18:32:18Z): six-way (harness count / bare of 108): sonnet-4-5 99 / 103, haiku-4-5 84 / 27, opus-4-5 100 / 107, opus-4-6 101 / 105, sonnet-4-6 98 / 83, opus-4-7 97 / 108, opus-4-8 101 / 108, fable-5 1 of 1 (3 rows; stopped), sonnet-5 102 / 108, opus-5 98 / 108, fable-5-1 93 / 100, opus-5-5 104 / 108; doorman: haiku 37/48, opus-4-8 36/48, sonnet-5 36/48 (7 unparsed), opus-5-5 35/42 (6 served-by-other), sonnet-4-5 11/24 (24 sent, killed on the hold), fable-5-1 0/6 sent; R-11: haiku `--effort low` 85/108 (18:35:31Z; NO clear change in thinking spend on the first 80 items), sonnet-5 `--effort low` 96/108 (18:39:04Z); API-equivalent spend $12.4355; 14 served-by-other calls; the two-account split at 16:44:10Z; the projection for the long sets $76.93.
- **The shelf** (`CLOUD-READING-0.md`, 15:40:04Z → 18:30:33Z): **20 tags** × sets × settings (108 report files; the tags are the 20 stems of `cloud-reading-0/rows/*.jsonl`, every one begun by 16:27:37Z — the 19:01Z draft's "16" was the count after splitting tag names on ".", which merges glm-5.1/5.2/5.3/5.3-flash, kimi-k2.6/k2.7-code, deepseek-v4.1-flash and qwen3.5 into their families). Six-way exact: gemma4:31b 99, deepseek-v4.1-flash 97, kimi-k3 96, qwen3.5:397b 93, glm-5.2 92, kimi-k2.7-code 91, mistral-large-3 91, deepseek-v4-flash 90, kimi-k2.6 88, glm-5.1 88, minimax-m3 84, nemotron-3-ultra 75, deepseek-v4-pro 68, nemotron-3-super 47, nemotron-3-nano 19; artefact rows at 8 tokens: gpt-oss:120b 18, gpt-oss:20b 18, minimax-m2.7 18, glm-5.3 17, glm-5.3-flash 18; think: kimi-k2.7-code 99, kimi-k3 98, deepseek-v4-pro 97, glm-5.1 97, deepseek-v4.1-flash 96, glm-5.3 96, glm-5.2 96, qwen3.5 95, kimi-k2.6 94, deepseek-v4-flash 93, glm-5.3-flash 92, nemotron-3-ultra 92, gpt-oss:120b 89 (true) / 87 (high) / 83 (low) / 88 (np1024), minimax-m3 89, minimax-m2.7 87, nemotron-3-super 83, gpt-oss:20b 74 (true, and 74 on rep 2) / 66 (low) / 46 (high) / 61 (np1024), nemotron-3-nano 72, gemma4:31b 70; doorman 48 (exact): glm-5.2 47, mistral-large-3 46, deepseek-v4.1-flash 42, qwen3.5 41, kimi-k2.7-code 41, glm-5.1 40, kimi-k2.6 37, kimi-k3 36, deepseek-v4-pro 35, deepseek-v4-flash 32; field exam 40 and docent 63 at or near the ceiling for every reader (kimi-k3, kimi-k2.6, kimi-k2.7-code, qwen3.5, glm-5.2 40/40 and 63/63); 8,336 calls, 5 failed, 0 HTTP 429; 23 tags HTTP 410 retired; `deepseek-v4-flash:cloud` and `qwen3.5:cloud` retire 2026-09-25.
- **The calibration** (`cloud-reading-0/calibration/`): local gpt-oss:20b on the laptop's system daemon: exact 18/108 (108 unparsed), think 74/108; local-vs-cloud agreement 73.1 % (both parsed 78.9 %) against a cloud-vs-cloud floor of 72.2 %; energy exact 134.62 J per correct (82.45 net), think 1,613.09 (1,286.40 net); decode 151.7 / 134.5 tok/s.
- **benchbox** (`rows/FIGURES.md`, generated 16:50:55Z under `v2-benchbox-0`; the 48 report files through 18:20:41Z): K0 `gemma4:26b@08ae7ec1` c **88 strict / 89 v1**, 108/108 identical text to Jev arm 1; d 35/48 (34/36 in contract; C/D 1/11); think c 24 strict (67.6 % lenient, 30.6 % v1), d 35/48; K1 `mistral:v0.1` c 10/108 (108/108 the same choices as the smoke), d 0/48 strict (48 json_verdict); falcon 3/108 strict; **the anchor `k0a-gemma4-anchor-cd` (`5571076f`, 4,096, 17:52:46Z–17:57:00Z): c 88/108, 0 unparsed; d 35/48, 1 unparsed**; the backfill (v1 counts, c / d): vicuna-33b 18/108 / 35, llama2-7b 16 / 11, llama2-13b 9 / 22, yi-34b 29 / 36, phi2 9 / 18, gemma-1.1-7b 21 / 15, llama3-8b 45 / 29, qwen1.5-32b 62 / 23, phi3-14b 46 / 36, mistral-7b-v0.3 20 / 12, gemma2-27b 73 / 40, llama3.1-8b 43 / 32, mistral-nemo-12b 47 / 33, qwen2.5-32b 89 / 42, phi4-14b 83 / 12, mistral-small-24b-2501 81 / 35, gemma3-27b 89 / 32, qwen3-30b-a3b 67 / 11; energy K0 176.3 J per correct board gross (46.9 net), 275.6 wall; K1 538.4 (246.8), 690.1; K0-think 13,819.3; probes: decode 146.6 tok/s (K0, includes the MTP draft), 159.9 (K1), 160.0 (falcon); the anchor build 129.3 tok/s (`NOTES.md`); `load_duration` 778 ms median (K0) / 125 (K1); the queue at step 71 at 18:38:37Z.
- **The laptop** (`laptop-reading-0/`, first `date -u` 18:11:06Z): item 12 on the anchor: 14/20 c at 4,096 and 14/20 at 131,072, 13/20 d (twice: at MemoryMax 4G, superseded, and at 16G); **the anchor `k0a` c 84/108 (0 unparsed), d 36/48** (18:34:34Z–18:37:36Z; `x_load_ms` 255 on row 1); k1 `mistral:v0.1` c 10/108 (18:39:20Z); A-L01 (the memory gate, 18:24:03Z refusal at swap 54.2 %; ruled R-19) and A-L02 (MemoryMax 4G → 16G, 18:30:44Z) in every `arm.json`.
- **The smoke** (`SMOKE-REPORT.md`): mistral:v0.1 10/108 (Wilson 5.1–16.2 %; below chance; the addressee census 69 of 98); 153.4 J per correct gross, 118.7 net; 145.02 tok/s; the four dry-run defects; the peer eviction at 15:44:00Z; the warm cache changed one greedy answer.
- **The Jev pre-0 rows** (`jev-2026-09-21/rows*`): base-generate c 89 (88 strict), a 63/63; jev-generate c 90; OpenJev FP8 generate/readout c 101/108 (the best of six orders; mean 91.4), d 45/48, j 98/119, a 53/53 (10 refused overlong); gemma4-fp8-generate c 89 (**87 strict under v2**), d 35/48, f 40/40, a 53/53; Kev-9B kc 72/108, kd 27/48, kj 95/119; Kev-4B kc 60/108; OpenJev on the desktop's larger card bf16/fp8 c 101/108 (seats down, 420 W); the reorder arm 592/648.
- **The panel's recomputations** (`panel/`): 7 vs 7 discordant items between gpt-4-0613 and K0, McNemar p = 1.000, ±6.5 points paired, ratio 0.920–1.087 (`method_checks.py` [2]); the winner's-curse table (87 % true → 90.7 / 91.7 / 92.7 at k = 5 / 10 / 20, n = 108); MDC ≈ 0.09 / 0.15; u\* ≈ 0.87 and 1.11 on the Jev rows at C = $1,449.99 / $1,879.99 (a sketch, struck from publication); gpt-4-0613's 55 of 108 `[C] hypatia: Hypat`-style replies at the 8-token cap; the 54-of-63 task_a census at 16,384.
- **Exposure and money:** 28 shelf doorman egress rows in `EXPOSURE.jsonl`; the Claude doorman egress table (6 ids, 222 items, 12 fallback re-sends); OpenAI $4.4277 spent, $17.14 balance, $30 top-up ruled; Claude $12.4355 API-equivalent; the shelf `$0.00*`.
- **In the first stamp but NOT read before the rules were written** (read at the patch, 21:0xZ, under parser v2 `689254c5…`, `--census`; listed so the reader can tell): benchbox `t-qwen3-30b-a3b-on` c **75/108 strict** (76 lenient, 75 v1; clean 60, letter+name 45, budget_exhausted 1, late_letter 1, unparsed 1) and d **0/48 strict** (30 lenient, 12 v1; json_verdict 47, clean 1) — a reasoning-on row that existed when 2.3's rule was written; laptop `b-falcon-7b` c 3/108 strict (18 lenient, 20 v1) and d 1/48 (10 lenient, 13 v1); laptop `k1-mistral-v0.1-cd` d 0/48 strict (21 lenient, 12 v1; json_verdict 48); Anthropic `opus-4-8 --effort low` **97/108** (clean 108; landed 18:43:38Z — D-6 in the 19:01Z draft still called it "queued"). **Landed after the first stamp, before this patch:** Anthropic `opus-5-5 --effort low` 103/108 and `--effort high` 103/108 (clean 108 each; 18:48:31Z, 18:53:22Z); `haiku-4-5.c.p2` 72 items, 46 strict / 48 v1 (19:04:03Z); the desktop's larger card B-1 (18:25:12Z → 18:38:07Z on the desktop), B-2, B-3 and the `r-w*` rehearsal rows (to 20:00:19Z) — no the desktop's larger card figure was read for any rule; the laptop's `b-*` block through `b-qwen3-30b-a3b-2507` (21:00:41Z); benchbox's queue past step 71.

### 8.3 Which rules were written after seeing which data (plainly)

| rule in this file | shaped by (seen before the rule was written) |
|---|---|
| 3.2 the classes `budget_exhausted`, `json_verdict`, `article_A`, `word_letter`, `late_letter`, `name_only`, `contradictory`; the same-line label; the article exceptions | K0-think (51/52 late letters, 29 empty at the cap), the shelf's gpt-oss/minimax/glm rows, falcon's 80 late letters, the smoke's `A line like this…`, the Anthropic non-bare replies, gpt-4-0613's truncated echoes, the two `parsed:false` rows in the Jev arms |
| 3.5 every count in the check table | those rows, by construction |
| 2.3 the utility-posture rule | gpt-oss:20b/120b writing no letter in 8 tokens locally and on the shelf; gpt-6-astra refusing `none`/`minimal` |
| 2.4 D-1, D-15 | K0's `num_ctx` 131,072 and digest `08ae7ec1` against the seats' `5571076f` |
| 4.2 the paired test; 5 B-anchor's δ | the 7-vs-7 receipt and the two readings (81.5 / 73.1) of "within its interval" |
| 4.3 balanced accuracy on two-class sets | the doorman's 75.0 % always-refuse floor with several frontier rows on it |
| 4.4 cross-fit best; the panels' 180-day and parameter-count rules | the cluster of shelf tops (89.8, 88.9, 88.9, 88.0 …), the k that moved with keys and budgets, "frontier" being mostly open weights on someone's cloud |
| 4.4 the fixed anchor's file and sha | the anchor row (88/108) |
| 6 the artefact table | the shelf's ARTEFACT rows, the CLI's refusal fallbacks, the Claude served-by-other stops, the OpenAI `truncated` class (0 occurred) |
| 7.1 the 2× `load_ms` rule; compute-phase J | K0's 778 ms resident `load_duration`; 538.4 vs 153.4 J per correct on the same 2023 model |
| 7.2 every price and rate | exhibit 46/57's prices, the EIA June 2026 month, the LISTING and resale reads (all in PLAN-v2 §5) |
| 1.2 the two-account posture rows | the CLI's account change at 16:44:10Z |
| 2.2 the laptop's memory gate and MemoryMax | A-L01 (R-19) and A-L02, both before the freeze |

### 8.4 Discrepancies found while writing (stated, not fixed here)

1. **PLAN-v2 §3's "gemma-4-26B FP8 vLLM generate TP=2 on the benchbox pair 88/108"** reads **87/108 strict under v2** (`rows-addenda/gemma4-fp8-generate.c.jsonl`, sha `withheld-2026-10-14`: clean 104, name_only 3, unparsed 1; v1 89). The cloud lane's letter-first column already read 80.6 % (= 87). Exhibit fifty-eight's posted correction (81.5 = 88/108, l.266 of `site/reading-the-answer/index.md`) refers to the **ollama** written row (`rows/base-generate.c.jsonl`, sha `withheld-2026-10-14`, 88 strict) and stands; the plan's citation of the FP8 row is the one that moves.
2. **K0-think's lenient count** is 74/108 under v2 against the panel's 73 (67.6 %), and 52 late letters against 51: the same-line label rule (3.2, difference (i)).
3. **benchbox's `/usr/local/bin/ollama` binary sha** is asserted by `NOTES.md` to be in the preflight, but no receipt in the laptop mirror carries it (A-09).
4. The laptop's `dry12-anchor-4096` and `-131072` rows exist twice (a MemoryMax 4G pair, superseded, and the 16G pair): only the 16G pair is on the cell list, as dry runs (their choices and `load_ms` are the dry-run receipt; their energy was never a series figure — the R-20 clarification).
5. **The laptop's 16G `k0a-gemma4-anchor-cd` and `b-vicuna-33b` rows are superseded for energy** (the cap bound: `memory.events max` +5,598 and +6,994) and re-run at 32G (`queue.txt` lines 125, 128; not landed at 21:03Z). The 19:01Z draft cited the 16G `k0a` at `rows/k0a-gemma4-anchor-cd/` as a live path in 3.5, D-10 and section 10; it now lives at `rows/superseded-k0a-gemma4-anchor-cd-memmax16g-20260923T1851Z/` with the same sha (`bdd9f7d4…`, re-taken 21:0xZ), and its 84/108 stands as a choice figure only.
6. **The desktop's larger card had rows before the first manifest** (8.1) that the laptop mirror did not yet hold; the 19:01Z draft's "no arm has run" was wrong. No the desktop's larger card figure shaped a rule.
7. **The 19:01Z draft's parser (`81024e9d…`) disagreed with its own rules 1a and 1b** on two strings (`[A] Darwin, not Socrates`; `A) the line is about evolution`), neither present in any of the 21,490 rows the check scanned; the code was made to follow the prose (3.1, 3.2) and no count in 3.5 moved.

---

## 9 · The registered cell list for reading 0, the close rule, and the amendment procedure

### 9.1 Reading 0's window and close

Reading 0 **opened 2026-09-23T15:43:21Z** (the smoke's first scored row) and **closes at the earlier of "every registered cell done" and 2026-09-25T12:00Z** (the pour freeze; R-13's Friday target). `reading_closed_utc` is written to `KIT.lock.json` and every row. **The cell list decides, not the calendar:** a cell on the list that lands before the close is reading 0; one not on the list is **reading 0.1** (closing no later than 2026-10-14T00:00Z) even if it lands earlier; a cell measured after a close belongs to the next reading, never to a page already poured. **Reading 1: 2026-12-23 UTC**, with `S1-2027Q1`.

### 9.2 The registered cells (backend × model × set × posture; "as queued" = the file that names them)

| lane | cells | file that names them |
|---|---|---|
| benchbox, the 3090 | every `arm` line of `instrument/queue.txt` (sha `d844bf2a…`; 51 arm lines) as run: K0 (c, d, think c,d), K1 (c, d), the 36 `b-*` reasoning-off arms (c, d; `b-gpt-oss-20b-low` is gpt-oss's utility-posture row; `b-mistral-small-22b` is the triplet the anchor swap displaced to lines 137–139), `k0a-gemma4-anchor-cd`, and the 9 `t-*` think arms: the 4 fast pairs (`t-qwen3-30b-a3b-on`, `t-gpt-oss-20b-medium`, `t-gemma4-12b-on`, `t-glm4.7-flash-on`; c,d at 4,096) and the 5 dense arms (c at 2,048; lines 140–155, un-deferred by R-18) | `queue.txt` lines 2–155; `queue.done` on benchbox |
| the laptop | **45 cells in 47 `arm` lines** of `laptop-reading-0/queue.txt` (sha **`a17a1146260834e25f36f985d45ba73726772e6fe99786585f1fe713ab2a141b`**, 21:01Z; HEAD's copy `f08bf5b7…` differs only by the A-L03 re-run block, lines 123–129): `dry12-anchor-4096` and `dry12-anchor-131072` (dry runs; the 16G pair), `k0a-gemma4-anchor-cd`, `k1-mistral-v0.1-cd`, the **36 distinct `b-*` reasoning-off arms** (`b-gpt-oss-20b-low` at 8,192 is gpt-oss's utility-posture row) and the **5 `t-*` fast think pairs** (lines 132–144, at 8,192; `t-gemma4-anchor-on` is the anchor's own think pair). **A superseded-and-re-run arm is the same cell**: `k0a-gemma4-anchor-cd` and `b-vicuna-33b` appear twice (the 16G run, superseded; the 32G re-run, lines 125 and 128), and `b-llama2-7b` was re-run whole under A-L04 — one cell each; the row of record is the re-run (2.2). The dense pairs are NOT on the list (dropped by the lead ~18:22Z). The file's arm lines are the test: `grep -c '^arm' queue.txt` = 47; `grep '^arm' queue.txt \| awk '{print $2}' \| sort -u \| wc -l` = 45 | `laptop-reading-0/queue.txt` (sha above); `queue.done` |
| the desktop's larger card | **the arms files, pinned 21:0xZ:** B-1 beside the seats — `instrument/arms/beside-1.txt` (**`a66ed19a…`**; 3 arms: `b1-gemma4-anchor-cd` `5571076f`, `b1-mistral-small3.2-cd` `5a408ab5`, `b1-qwen3.5-35b-a3b-cd` `3460ffee`, c, d, probes; rows landed 18:25:12Z → 18:38:07Z on the desktop); the quant control — `instrument/arms/beside-2.txt` (**`2c5b05a3…`**; `mistral:v0.1` at Q4_0 / Q8_0 / fp16 — `b2-mistral-7b-v0.1-{q4_0,q8_0,fp16}-cd` — plus `b2-gpt-oss-20b-low-cd` at 8,192; PLAN-v2 §3's quant control) and `instrument/arms/beside-3.txt` (**`e2a8c9ab…`**; `b3-gpt-oss-20b-low-cd`, the window's rehearsal of the harmony template and a think level); B-2 the window 2026-09-24 16:00–16:45Z, shape S — `instrument/window/arms-window.txt` (**`5418ccc6…`**; `w-llama3.3-70b-cd`, `w-llama2-70b-chat-cd`, `w-gpt-oss-120b-low-cd` at 8,192, `w-qwen2.5-72b-cd`, `w-llama3-70b-cd`; no arm starts after 16:29:00Z). `dryrun-a.txt` / `dryrun-b.txt` and the `r-w*` rows are dry runs and rehearsals, never cells. **The gemma4 q8_0 / bf16 and mistral-small3.2 q8_0 / fp16 quant-axis rows are in no arms file and are therefore reading 0.1** (the 19:01Z draft listed them without a file) | the four arms files above (shas in section 10); PLAN-v2 §6 |
| OpenAI | the 29 six-way ids + the 2 `@default` rows (31 rows, done; `receipts/roster.json` **`3891516d…`**); **the anchor sweep, enumerated from `receipts/sweep-priced.json` (`66e15d0c…`, made 18:10:42Z; $25 cap, $1.50 margin, R-18 ⧖-5) — the 18 cells with `in_plan: true`, $20.7373 projected:** `gpt-4-0613` c (the six-way repeat, sync, the determinism receipt), f40, j, task_a (39 of 63 sent; 24 refused overlong); `gpt-4-turbo-2024-04-09` f40, j, task_a; `gpt-4o-2024-05-13` f40, j, task_a; `o1-2024-12-17` c (its first six-way), f40; `o3-mini-2025-01-31` f40, j, task_a; `o4-mini-2025-04-16` f40, j, task_a (each non-anchor cell batch + a sync subsample of 20, or 5 on task_a, that carries TTFT and latency); **left out by the cap and so reading 0.1:** `o1` j and task_a. Plus `gpt-3.5-turbo-instruct` six-way via `/v1/completions` before 09-27 (PLAN-v2 §3; ≈ $0.05; not in the priced file — its own receipt when it runs). **Not on the list:** `gpt-4-0613` on f60 (no file names it — reading 0.1); the doorman (roster phases D/E) — held until the gate filters to the 36 lines, reading 0.1 whenever it runs; the 20-item determinism probes for the other 21 temperature-0 rows (4.1; reading 0.1) | `receipts/roster.json`, `receipts/sweep-priced.json` (shas in section 10) |
| Claude (the CLI) | the 12 ids' six-way (done; `fable-5` incomplete, stopped by the served-model rule); R-11 `--effort low` on haiku, sonnet-5, opus-4-8, opus-5-5 and `high` on opus-5-5 (all landed, D-6); **added by this patch, so that F-closed's utility-posture rows exist (2.3, 4.4): `--effort low` on opus-4-7, opus-5 and fable-5-1**; the temperature repeat (haiku p2, at 72 of 108 at 19:04:03Z; the cheaper Opus, not started); **R-21: `fable-5` and `fable-5-1` re-read on the six-way with the refusal fallback OFF** (the re-read replaces the stopped row; 2 reps each is not on the list); **doorman, docent gate and field exam: NOT on the list** (held) | `ANTHROPIC-READING-0.md` "Still to run" (the copy read: `4edf89b4…`); `run_anthropic.py` `29605396…` for the R-21 rows |
| the shelf | every row file that exists at the close for the **20 tags** whose stems are in `cloud-reading-0/rows/` (8.2; sets × settings, the rep-2 row); `deepseek-v4-flash:0731-cloud` and `qwen3.5:397b-cloud`'s remaining sets before the 09-25 retirement, as `cloud-reading-0/queue.json` (**`ab5892b3…`**, 108 jobs, 21:0xZ) names them; a job not in that file is reading 0.1 | `cloud-reading-0/queue.json` (sha in section 10) |
| reading 0.1 (not on the list) | S1-2026Q4 on the anchor; the 70 B window's rows if the window slips; the cross-walk arm (GPQA Diamond); the 5080 / 3080 Ti cheapest-card blocks; the CPU rung; the quality family (R-8); **and, moved here by this patch:** the desktop's larger card quant axis (gemma4 q8_0 / bf16, mistral-small3.2 q8_0 / fp16), `o1` j and task_a, `gpt-4-0613` on f60, the OpenAI doorman, the 3-rep and 20-item determinism cells of 4.1, and any `--effort low` row for a Claude id not named above | PLAN-v2 §7; this section |

### 9.3 Owed files that this freeze binds (each lands with an amendment carrying its sha)

| amendment | file | what it carries |
|---|---|---|
| **A-00** | `PREREG-S0.md.sha256` + the freeze commit + `PREREG-S0.observed.freeze.tsv` | this file's sha256, the commit sha, and the freeze-time manifest's stamp, file count and sha256 (8.1) |
| **A-01** | `protocol.json` | P0 / P1 as section 2 states them |
| **A-02** | `METRICS.md` v1 | section 7's definitions, the archetypes, the bias table, the three J/1k names, the reading close rule |
| **A-03** | `pins.json` | tag → digest for every roster row (the laptop's `instrument/pins.json`, sha `f644ae95…`, is its seed); the ★ rule with its external cited score per half-year |
| **A-04** | `KIT.lock.json` (+ `kit/`) | S0's shas, `first_public`, `author_family`, `dinner_id`, `matches_seal`; `task_a@8k`'s member list; `doorman36-json` and `f60` |
| **A-05** | the v2 re-score (`series.jsonl` reading 0 + "pre-0") | each set's minimum detectable change; the anchor's determinism repeat |
| **A-06** | `prices.json` + the OpenRouter snapshots | Bench 3's band (before reading 1) |
| **A-07** | `S1-2026Q4` | its sha256 and item count, before any model reads it |
| **A-08** | `postures.json` (1.2; re-used: ⧖-27 was ruled additive by R-17 before the freeze, so no amendment carries it) | `endpoint_training_posture` per endpoint, each Claude consumer account its own row, with the receipt per posture |
| **A-09** | benchbox's binary sha | `runtime_sha` for every benchbox row |

**Order:** A-01 → A-02 → A-03 → A-04 land before A-05, each with its sha, and before any ratio, staircase or ladder table (section 0's gate; 4.5). A-06 … A-09 are unordered against A-05 except that A-09 precedes any benchbox row's entry into `series.jsonl`.

### 9.4 The amendment procedure (A-nn)

- **Where:** appended below the line "— amendments —" at the foot of this file, in order, never edited above it. **Never** an edit of a rule above the line; the amendment quotes the old text and the new.
- **Form** (the Jev README's addenda practice, `jev-2026-09-21/README.md` "Addenda amendment 1": stamped, and written before the rows it governs): `A-nn · <title> · <UTC from date -u> · amends: <the sha256 of this file as it stood before this amendment> · by: <R-0 the lead | an operator, with the ruling id> · rule: <old → new, or the new file + its sha256> · reason: <one paragraph> · rows the author had seen: <the manifest stamp, or the list of row files, with their count> · effect on rows already scored: <none | re-score under version X>`.
- **Who:** the lead under R-0 for method gap-fills (no money past a cap, no live 24/7 seat, no lift of a standing order, no publication); an operator for those four, cited by ruling id.
- **After each amendment** the freeze sha is re-taken: `sha256sum PREREG-S0.md > PREREG-S0.md.sha256`, committed with the amendment, and the next amendment's `amends:` field names it. A lane that reads this file records the sha it read as `prereg_sha` on every row.
- **Lane-level amendments made before this freeze** (recorded, not re-numbered; each in every later laptop `arm.json` → `amendments`, with `old`, `new`, `reason`, `rows_the_author_had_seen`, `ruled_by`, `utc`): the laptop's **A-L01** (the memory gate: swap < 50 % → swap-used < 80 % AND MemAvailable ≥ 10 GiB AND PSI memory full avg60 < 10 %; ruled R-19; 18:25Z), **A-L02** (`MemoryMax` 4G → 16G; 18:31Z; `queue.log` 18:30:44Z), **A-L03** (`MemoryMax` 16G → 32G, applied live; 18:51:52Z; the 16G cap bound on `k0a` and `b-vicuna-33b`, which are superseded and re-run — R-20 and its clarification), **A-L04** (the posture gate: `enforced.power.limit == 150.00 W` → the Dynamic Boost envelope (95, 175] W with the limit reported per task as min / median / max; 18:53Z; ruled R-20; `b-llama2-7b` re-run whole); benchbox's anchor swap at lines 55–57 (~17:4xZ) and the dense arms' un-deferral to lines 140–155 (~18:00Z), both in `queue.txt`; **RULINGS after the 19:01Z draft, folded by this patch:** R-20 (~18:5xZ), R-21 (~19:1xZ), the R-20 clarification (19:35:15Z), and the R-10d addendum (18:3xZ, which the draft had missed).

---

## 10 · Files and shas cited (all read today; `sha256sum` at 18:4xZ on the laptop, re-taken 21:01Z where marked ★)

| file | sha256 |
|---|---|
| `PLAN-v2.md` | `withheld-2026-09-29` |
| `RULINGS-2026-09-23.md` ★ (R-0 … R-21, the R-10d addendum, the R-20 clarification) | `d56f4f06cc041206629e667e4100a83d3b93b641de6b3d1b1662dfab85560a6e` (the 19:01Z draft cited `a45ac074…`, the file's first 331 lines, R-0 … R-19 plus the R-10d addendum) |
| `SERIES-SETS.md` | `withheld-2026-09-29` |
| `EXPOSURE.jsonl` (28 rows) | `cd341de1fcfed8482783b962f2da65985444cbb5e1cb876233cee51305e876c8` |
| `recon/tasks-harness.md` | `641dd93ca5ae33ad290b4d21e9926f41ecc4ae7af59018a6fb130ed0617f0577` |
| `panel/CHECK.md` · `panel/method.md` · `panel/FOLD-LOG.md` | `1d29a5e0ac65e0eb807b6735a1aef9f6677b1e7e48e040a4474efe97489168db` · `046445346d4d8c304669b65f436fbc064091bfb1c76d8dc6be305c66caea3791` · `9d0cf826a2608b62bb5896e670ee29630c58c5ddb76fd519ce37216800c09346` |
| `../jev-2026-09-21/run.py` · `run_addenda.py` | `withheld-2026-10-14` · `a34aca61833ed0c5860c91c7e2e227429e8ea9e2e50fec68d7b7fec15d89acab` |
| `parse_v2.py` (this freeze's parser) ★ · `prereg_observed.py` v2 ★ · `PREREG-S0.observed.tsv` (the first stamp, v1) · `PREREG-S0.observed.2.tsv` (the second stamp) ★ | `689254c5c466944c9a24740511b78f711b662b8792efe2fb6177a030ebdf708c` (the draft's `81024e9d…` is retired, 3.1) · `a2fc414e10b1e8ea36f5e05ede5d589ee572bbfdaa8dcd6fe7d59a7b7baaf2cc` (v1 was `f731be5a…`) · `643388182a46ee661a764aa6155f2a22e75fe0f932aab94f90361b8ad33042f4` · `cdc1d93b8fb5d40e5db441702854757c7d7746f9aeb4c13b1480fc7058ca12e7` |
| the cell files (9.2) ★: `laptop-reading-0/queue.txt` · `rtx-pro-6000-reading-0/instrument/arms/beside-1.txt` · `beside-2.txt` · `beside-3.txt` · `instrument/window/arms-window.txt` · `openai-reading-0/receipts/roster.json` · `sweep-priced.json` · `cloud-reading-0/queue.json` | `a17a1146260834e25f36f985d45ba73726772e6fe99786585f1fe713ab2a141b` · `a66ed19a020ac15f9cc27d83ad476ded48750e1c7547db60d4772ec0c4ec99f4` · `2c5b05a3dd594409b459e74399d69f5266377898cb943721c2c9d2945a51bd3f` · `e2a8c9abf5f70e16a47b5bc2e9b8cec75a21be57ec3c7619747f6b547006d8fe` · `5418ccc633ed071bc81fc3be1dc7aacbfccd29c5e219cff9f38c8d899563b2ab` · `3891516da617d33d85f5105b2b2f68e1cf7b08d745d7e87444cdbb29c0687ea0` · `66e15d0ce4ba7e05b859df849bac69433522e0b3be3a8da582ba9a2800cfea2f` · `ab5892b3b45356efe5ae7c5d1866bf6d5e84dd50855861a8bd6ffd2f6551f04e` |
| the lane reports as read (8.2) ★: `ANTHROPIC-READING-0.md` at HEAD `fd72eb15` / `5df46547` · the working copy · `OPENAI-READING-0.md` · `CLOUD-READING-0.md` · `SMOKE-REPORT.md` · `benchbox …/rows/FIGURES.md` at HEAD · the working copy · `laptop …/rows/FIGURES.md` | `a9d85798a0b0f3b966753887a8865fe6b8dc0557e7cf9324aa43f296c7a73f58` · `4edf89b46cedd30199d7a96c65d1860f1844cda0a9c98778d175b29379f1356e` · `withheld-2026-09-29` · `withheld-2026-09-29` · `731e9ed8878d06da1ce560d37f3579537933b7b375f9bcfe690b91b37bfb3c22` · `6933199808ec2add4d60e60fe0ac236dbc4ed4f556d5ea2acd481da8f1b1d497` · `a0aceca37ccb48ea72e02a881435ceca769f4f96c8b47241ca056e0778d0d451` · `63c5a55b654af4c39e9d99840a1b9dfc01ce8e6ee862fd2e014a5e82e47eb673` |
| `smoke/analyse_smoke.py` · `smoke/run_smoke.py` | `674d36d4100cd840ce3ef8d7c58fe1b6cd2f65a0e3fa977a9de5dedb929cff9c` · `c8232007e0556857408aec873b1838011848d58565763ccf4467994c5c28863e` |
| `rtx-3090-reading-0/instrument/analyse.py` · `coi3090.py` · `queue.txt` | `08a158f6869c3fd3067a9f60097b82471acdd98ad17e42f91cc6acd61e42c279` · `d16088cdc4acfbe879c33b4fc6f842f2cc3fdc2398b2f2a61e795b3b48291e11` · `d844bf2a640383ac2eb5767343427a792e591dc3082cc85d3311268eeacf5f39` |
| `cloud-reading-0/tables.py` · `cloud_run.py` | `4eb7a11f03747ded410df4a3008fcdfebf638ccebf0ea160a8b334c1697b498e` · `146d91c4e9e0bb2923ae11da5a8ce0d90ce42581e55751a3d753c477da105d1e` |
| `anthropic-reading-0/tables_anthropic.py` · `run_anthropic.py` (wrote every Claude row on disk at 21:0xZ) · `run_anthropic.py` under R-21 ★ (the refusal fallback off; writes the re-reads and every later row) | `140d75a8dc52911e16f9499e4190714e0f5985ff72732cd58d3fc2d0d4539691` · `ccfe8d77abc87b2955fd188764673c0a8d65583b4d8f52ae79e3414942d1f888` · `296053969185f1064020ed7b6ddb2ebf74edf7d347e737578061eb54e56ab93b` (21:09:14Z) |
| `openai-reading-0/tables.py` · `run_openai.py` · `oai.py` | `45a1b87c9322e4563600817870182119eaf0726103fecc30ecba816bcb62aeb2` · `03de0fa512dd49e3c9466ee53177a2668d11e51a04f9ea98fb14d286e323c4f9` · `68802ee02d3664b182979a8fa33901ff2415f9a12f542bbf3c324ac4439b2a82` |
| `laptop-reading-0/instrument/coilaptop.py` at HEAD (wrote the rows whose `preflight.json` stamps ≤ 18:50:54Z) · `analyse_laptop.py` at HEAD · **`coilaptop.py` working, A-L03/A-L04 ★ (wrote every row from the `b-llama2-7b` re-run, preflight 18:54:05Z, on; `preflight.json` → `instrument.coilaptop_py` is the receipt on every arm)** · `analyse_laptop.py` working ★ · `pins.json` | `4d07c3cd7383c67eff6de8f0e80c4578b7cd4246fe716f6185d14bbf840dbdf9` · `43baec8eff2436334f9468c5ca65dab929eb8b44643e31e1043887f0b10f55f1` · `0b5dcb41ac989a57dfe4912740dfd24ccd600da5ba3fbc181688d18a8adf94f0` · `24da34be2a09e79ae2d0d55f3294405967b71b7c907fb88a30a03775b36323aa` · `f644ae95568febfef1c2f5f33bb0faad0c9b46f2fd6399a1f709b3ea55768d98` |
| `rtx-pro-6000-reading-0/instrument/coilargecard.py` · `guard.py` | `f5f19bb070f324b091899b4a266891cc10e81d422fedb66cd9b7ed2c44489ddc` · `87d62db10cdeec045752b4b3fe72a6653fafa01196afcfe365620e63b57b47ff` |
| the laptop's pinned ollama binary (0.32.13) | `39c8dea520be728599c4b8fda8f3466b4caca0c50fff6e5c065d0368c74d551c` |
| DOORMAN_SYSTEM v1.2 | `c00fc24f6ebba30ef3d125f9b457d979ca403d494e0dc293af28b52834b6f2a7` |
| the anchor's manifest digest (`gemma4:26b-a4b-it-q4_K_M`) · K0's bare tag · `mistral:v0.1` | `5571076f3d70050487b26b341705799e0ab29b808164f90d20d4cf84f699d251` · `08ae7ec1744bd7f451c4a530afb39d2673ad9d07a8369b8a33a3613b41212a68` · `b17615239298…` (`SMOKE-REPORT.md` §1) |
| the fixed anchor row `openai-reading-0/rows/gpt-4-0613.c.jsonl` · its report | `19dd55171ef71ebe552c03564f4fbd2bce90f1bfa186e5cc90160c83ed14287c` · `withheld-2026-10-14` |
| B-seat's reference row `benchbox …/k0a-gemma4-anchor-cd.c.jsonl` (the only B-seat reference, section 5) · the laptop's 16G anchor row, `laptop …/rows/superseded-k0a-gemma4-anchor-cd-memmax16g-20260923T1851Z/k0a-gemma4-anchor-cd.c.jsonl` ★ (a determinism receipt, not a B-seat reference and not the energy row of record; the 32G re-run replaces it — 2.2) | `withheld-2026-09-29` · `bdd9f7d499f2602aa953a08e171008be0740f3e3dfd4467755ae5637b1c96141` (unchanged by the move) |

---

— amendments —

**A-00 · THE FREEZE · 2026-09-24T13:18:41Z (the manifest stamp; this entry written 13:2xZ) · amends: `withheld-2026-09-29` · by: R-0 the lead (session operator-41), per §9.3's A-00 and the standing order to freeze on Thursday morning before the 16:00Z the desktop's larger card window · rule:** everything above the amendments line is frozen as of this entry. **The freeze-time manifest** (§8.1's third stamp): `PREREG-S0.observed.freeze.tsv`, `prereg_observed.py` v2 (`a2fc414e…`, unchanged), stamp **2026-09-24T13:18:41Z**, **4,015 files**, sha256 **`3a7c87def630ef94242284b82d7caf670fe9da92e3ca9d74894fd3f3f925588e`**; per directory: `../jev-2026-09-21` 292, `anthropic-reading-0` 87, `rtx-pro-6000-reading-0` 517, `cloud-reading-0` 655, `rtx-3090-reading-0` 1,113, `laptop-reading-0` 1,010, `openai-reading-0` 250, `panel` 9, `recon` 20, `smoke` 62; report files 480. Everything in it and not in the first stamp is "existed, not read" when the rules above were written. **The freeze commit** is the commit that adds this entry (`git log -1 --format=%H -- PREREG-S0.md` at that commit names it; a file cannot carry the sha of the commit that contains it). **Checks run at the freeze (13:18–13:2xZ):** `parse_v2.py --selftest` → 48 cases OK, sha `689254c5…` = §10's pin; `panel/CHECK-PREREG.md`'s patch table MF-1 … MF-10 is folded (its rows at lines 224–233); `RULINGS-2026-09-23.md` now reads `withheld-2026-09-29` — the one ruling since `d56f4f06…` is **R-14a** (C2's right panel at reading 0, the lead under R-0, ~21:4xZ), which is folded by amendment **A-10** below, never by an edit above the line. **Findings since the patch, checked against the frozen rules and needing NO amendment** (each already has its class in §6): `b-deepseek-r1-32b` think-off on benchbox (108/108 six-way and 48/48 doorman replies empty at the 8-token cap with thinking present) is the §6 row "a tag that cannot switch thinking off and writes no letter in 8 tokens" — a protocol verdict, its `t-deepseek-r1-32b-on` row is its capability row; the reasoning arms' truncations are `budget_exhausted`, scored wrong and never excluded; the doorman's JSON verdicts are `json_verdict`, a format failure; `falcon:180b`'s `Falcon: [C]` replies (the full window, 2026-09-24 06:38–06:46Z, D-20260924-004) are `late_letter`, a format failure — and that row is **reading 0.1** (on no §9.2 file), so it is scored by the frozen parser with no rule written for it. · **reason:** §0's gate — no figure is called strict, no ladder table is drawn and no row enters `series.jsonl` until this commit exists. · **rows the author had seen:** the freeze manifest above; since the 21:0xZ patch the lead read the benchbox 3090 reading's report (estate `970fec3f`), the laptop's pull/rm receipts and the full window's two-board rows (reading 0.1); none shaped a rule above the line. · **effect on rows already scored:** none (the v2 re-score is A-05, after A-01 … A-04 and A-10).

**A-01 · protocol.json · 2026-09-24T14:20:14Z · amends: `withheld-2026-09-29` · by: R-0 the lead (operator-41), per §9.3 · rule:** the new file `protocol.json` (sha256 `ffcfa7b73ebc7a71c75f475bec26dda7ee3eb32c3128081f90f197c1fcee7e9e`; `protocol_version` 1) encodes P0 / P1 and §2.2–§2.5 per backend exactly as section 2 states them, generated by `build_protocol.py` (`5a28fa27…`, which refuses to write if a cited line moved); nulls it carries are named inside it (`missing`: benchbox's ollama binary sha → A-09; `task_a`'s num_ctx, never registered → A-04 / a later amendment; the Claude ids with no utility-posture assignment, stated not ruled). It also lists `discrepancies_found_at_write` W-1 … W-8 (e.g. the CLI version on the Claude preflights, the desktop's larger card instrument shas as run vs at the freeze), stated, not ruled. · **reason:** §0's gate (A-01 before A-05). · **rows the author had seen:** the freeze manifest (A-00); the file reads rows only for their stamped settings, never their scores. · **effect on rows already scored:** none. · **verified:** an independent verifier re-derived its values (P0/P1 text, §2.2 cells, D-1 … D-16, every num_ctx and think budget by queue line) and its two must-fixes (the option-line literal; the full per-row field list) were fixed before this entry.

**A-02 · METRICS.md v1 · 2026-09-24T14:20:25Z · amends: `withheld-2026-09-29` · by: R-0 the lead (operator-41), per §9.3 · rule:** the new file `METRICS.md` (sha256 `withheld-2026-09-29`; `metrics_version` v1, fixed by this entry) carries section 7's definitions — the board / box / wall instruments, J per correct gross and net, the three J/1k names and their scope, p_e and its source, the cost model and its inputs, the archetypes, the bias table and the reading close rule (9.1) — each with its runnable test (T-1 … T-12; T-3 needs the desktop and is marked so) and its PREREG section. Two observations it records are not rules: O-20 (51 of 93 benchbox task windows are under 60 s, so a WALL figure on them is coarse; benchbox's per-token wall figures from its 39 probe windows likewise) and O-21 (the per-token unit vs "J/1k" naming). · **reason:** §0's gate (A-02 before A-05). · **rows the author had seen:** the freeze manifest (A-00); the tests read row windows and samples, not scores. · **effect on rows already scored:** none. · **verified:** an independent verifier re-derived its values; its must-fixes (the draft's end stamp, the sub-minute wall windows, the J/1k naming) were fixed before this entry; every test command was run verbatim from the bench root (all run; T-3 needs the desktop).

**A-03 · pins.json · 2026-09-24T14:20:39Z · amends: `withheld-2026-09-29` · by: R-0 the lead (operator-41), per §9.3 · rule:** the new file `pins.json` (sha256 `fa0d88110117c4bae12cf97d120b6ce9c1389176f7f39b4b30016060952100e9`), generated by `build_pins.py` (`b7e8afc2…`, with its input list `pins.files.json` `5bb50723…`), pins tag → digest for every registered roster row (63 local tags; `index.roster` has one row per recon/models.md §2 row: 39 with a full digest, 18 with a 12-hex pin only, none with neither; where two lanes ran different digests for one tag both are recorded with their lanes; every `path:line` citation, 247 of them, resolves), the shelf's served-model evidence, the OpenAI snapshot ids and the Claude ids; and **the ★ rule of 4.5 with its external cited scores — PROVISIONAL.** Two questions no ruling settles are recorded in `star_rule.open_questions` and are **owed to an operator before A-05**: **Q-★-population** (does the external score pick among the half's proposed ★ rows only, or among every roster row of the half?) and **Q-★-effort** (when the external source ran a model at several efforts, is its score the best run or the run matched to our utility posture?); four halves move under the four readings (`sensitive_halves`: 2024H2, 2025H1, 2025H2, 2026H1), and **2023H1 and 2026H2 have no external score in any file**, so A-03's own test (§4.5: exactly one ★ per half with `star_source_url` read before A-05's stamp) FAILS for those two halves until an amendment pins a score or rules the half ★-less. **A-05 (the v2 re-score) does not run until an amendment answers both questions and the two halves** — the ★ source is chosen before any v2 re-score is visible (4.5). · **reason:** §0's gate. · **rows the author had seen:** the freeze manifest; the builder reads digests and cells, not scores (`blind_to_v2`). · **effect on rows already scored:** none. · **verified:** an independent verifier's must-fixes (the missing roster tags, the nulls that block the test, the ★ readings stated rather than ruled) were fixed before this entry.

**A-04 · KIT.lock.json · 2026-09-24T14:20:58Z · amends: `withheld-2026-09-29` · by: R-0 the lead (operator-41), per §9.3 · rule:** the new file `KIT.lock.json` (sha256 `0bca44b4ec019eef696929fc6d36178bcce7d5b1b88b4ddaeba3ca207598f84f`), generated by `build_kit_lock.py` (`b5980246…`) from repo files and the three saved wall copies under `KIT.lock.receipts/` (`walls.json` `ffc48d6e…`, `wall-bedf6e9a.json`, `wall-6429e0c8.json`, `wall-8dd38e12.json`; nothing read from /tmp), carries S0's set shas and item counts, each set's `first_public`, `author_family`, `dinner_id`, `matches_seal`, the contamination flags per `EXPOSURE.jsonl`, `task_a@8k`'s member list, `doorman36-json` and `f60`, and `reading_closed_utc` null with the close rule's text (written at the close). Its `discrepancies` list is stated, not ruled (e.g. K-10: the kit's `label_note` and PLAN-v2 undercount j's model-written items; the FIGURE-FLIP claims are model-written paraphrases — j's author split is gemma 20, mistral 39, null 60). · **reason:** §0's gate (A-04 before A-05). · **rows the author had seen:** the freeze manifest; the builder reads sets and walls, not scores. · **effect on rows already scored:** none. · **verified:** an independent verifier's four must-fixes (j's FIGURE-FLIP authorship and the task_b entries) and nine should-fixes were applied before this entry.

**A-10 · R-14a folded: chart C2's right panel at reading 0 · 2026-09-24T14:21:09Z · amends: `withheld-2026-09-29` · by: R-0 the lead (the ruling R-14a, 2026-09-23 ~21:4xZ, `RULINGS-2026-09-23.md` now `withheld-2026-09-29`) · rule:** section 4.5 (our own staircase `C_ours(t, bar)`) gains, without editing it: **at reading 0, chart C2's right panel draws the within-reading staircase — the cheapest clearer of each bar by model release date, at launch and at today's price — in NOMINAL dollars on its own log axis, captioned "reading 0: dollars on our tasks, not comparable in level with Epoch's index; compare slopes only", with the CPI-U (FRED CPIAUCSL) deflated column beside it once that series is fetched and pinned by sha. From reading 1 the panel switches to R-14's index (our series indexed to 100 at reading 0, per bar).** Old text: none (4.5 did not say what C2 shows at reading 0); new text: the sentence above, quoted from R-14a. · **reason:** R-14's index needs a second reading to have a slope; R-14a is the only ruling since `d56f4f06` (A-00's check), folded by amendment, never by an edit above the line. · **rows the author had seen:** the freeze manifest; no score. · **effect on rows already scored:** none (a presentation rule for C2; it lands before any staircase is drawn).

**A-11 · the ★ rule ruled (A-03's two open questions and its two blocked halves) · 2026-09-24T15:08:15Z · amends: `withheld-2026-09-29` · by: an operator, in-session (asked by the lead ~14:4xZ with the recs; answered: "Every model we ran from that half (Recommended)" · "The run matching how we test it (Recommended)" · "No ★ for those halves (Recommended)") · rule:** `pins.json`'s `star_rule` is read under **reading C**: **Q-★-population → every row the roster lists for the half** (the 24 GB class; an unscored row cannot win); **Q-★-effort → the external run matched to our utility posture** (`star_rule.readings.C.match_rule`: the tag's registered reasoning-off arm, deepseek-r1-distill's think-on row per A-00; Epoch's run at the lowest explicit effort for think off, the same label for a level, `default` where only one is listed); **2023H1 and 2026H2 carry NO ★** at reading 0 — the half prints without a ★ and says why ("no external score in any pinned source"), until an amendment pins a dated external score. The ★ per half under C (external score = Epoch GPQA Diamond `full_run_acc`, source `recon/sources-economics/epoch-inference-cost/`, as `pins.json` records each): 2023H2 `yi:34b-chat-q4_0` 0.1474; 2024H1 `gemma2:27b-instruct-q4_K_M` 0.3649; 2024H2 `phi4:14b-q4_K_M` 0.5606; 2025H1 `deepseek-r1:32b-qwen-distill-q4_K_M` 0.6414; 2025H2 `qwen3:30b-a3b-instruct-2507-q4_K_M` 0.5562; 2026H1 `qwen3.6:27b-q4_K_M` 0.8485. A-03's test (4.5: exactly one ★ per half) is read as "exactly one ★ per half that has an external score; none for a half that has none". · **reason:** 4.5 — the ★ source is chosen before any v2 re-score is visible; this entry is that choice. · **rows the author had seen:** the freeze manifest; the four readings' ★ names and external scores (from `pins.json`), never a v2 re-score (A-05 has not run). · **effect on rows already scored:** none; A-05 applies it.

**A-09 · benchbox's binary sha · 2026-09-24T16:35:57Z · amends: `withheld-2026-09-29` · by: R-0 the lead (operator-41), per §9.3 · rule:** every benchbox row's runtime_sha is `39c8dea520be728599c4b8fda8f3466b4caca0c50fff6e5c065d0368c74d551c` — `sha256sum /usr/local/bin/ollama` read on benchbox at 2026-09-24T16:3xZ (read-only, no load; the file is 39,097,808 bytes, mtime 2026-08-14T18:44:23Z, before every benchbox row of reading 0), which is **the same bytes as the pinned 0.32.13 binary** the laptop and the desktop's larger card lanes run (`bench.sh`'s and §10's `39c8dea5…`); `runtime_version` 0.32.13 (`ollama --version`, and `"ollama_version": "0.32.13"` in all 52 benchbox `arm.json` files). The coi3090 instance ran `/usr/local/bin/ollama serve` (its transient unit's ExecStart), so this binary is the one that wrote the rows. · **reason:** §9.3 — A-09 precedes any benchbox row's entry into `series.jsonl`; `protocol.json`'s `missing` names it. · **rows the author had seen:** the freeze manifest; the arm.json version field, no score. · **effect on rows already scored:** none; A-05 stamps it on the 91 benchbox rows.

**A-05 · THE v2 RE-SCORE: series.jsonl for reading 0 and pre-0 · 2026-09-24T16:37:26Z · amends: `withheld-2026-09-29` · by: R-0 the lead (operator-41), per §9.3, after A-01 … A-04, A-09, A-10 and A-11 · rule:** every row of reading 0 and pre-0 is scored by `parse_v2.py` (`689254c5…`, 48 selftest cases OK at the build) and nothing else; `series/series.jsonl` (sha256 `902747cd084a25980ba4db0ed6dd660b05fdcc0e3cd2b88522aed2b7be36e215`), `series/series.csv` (`withheld-2026-09-29`) and `series/mdc.json` (`d8e1eaa44c02d25637ec2e0bae8cf60abc122a430e701a36c46473b0df67debf`) are its outputs, built by `series/build_series.py` behind a gate that refuses unless this file's sha, A-01 … A-04 (each against its file's sha), A-09 and A-11 all check; the build is reproducible (a second build to scratch gave byte-identical `series.jsonl` and `series.csv`); every row carries `prereg_sha` (the sha it read, `withheld-2026-09-29`), `parser_version`, `protocol_sha` (`ffcfa7b7…`), `metrics_version` v1, `runtime_sha` (benchbox's from A-09), and §6's `format_failures` and `instrument_artefacts` as two columns. **Counts:** reading 0 = 339 rows (Anthropic 17, the desktop's larger card 14, shelf 107, benchbox 91, laptop 79, OpenAI 31; 247 headlines, 48 of them provisional); reading 0.1 = 10 (the Claude doorman 6; falcon:180b and the two-board smoke, 4); pre-0 = 10. **Two method gap-fills this entry rules (R-0; both stated in `A05-NOTES.md` §4 and §9, sha `withheld-2026-09-29`):** (1) **§2.3's utility posture is read against the scored pass** — a setting *passes* when at most 1 item is unparseable, *fails* when fewer than 19 in 20 can parse, and an *undetermined* setting is settled by the **full-pass proxy** (the pass's own parse share ≥ 95 %, the rate §2.3's "19 of 20" names); where no setting passes, a tag with no reasoning control uses its one setting and any other tag takes its highest-parse setting as a stand-in marked provisional. The other two readings were computed and differ from this one in 9 headline groups only (the notes' §9 table: first-20 differs in one, glm-5.1:cloud c 88.0 % vs 81.5 %; lowest-setting turns four glm/nemotron headlines into 0–30 %, which is the reason it is not chosen). (2) **The minimum detectable change** is built from same-cell re-run noise with §4.2's paired bootstrap (10,000 resamples, seed 20260923; clusters where a set registers ≥ 10), reported at ~50 % power with the normal-approximation 80 % figure beside it and M-11's pair and the same-digest cross-card class printed but never pooled (notes §4): c 0.037 (no-noise floor and local re-run), d48 0.083, a 0.063 and f40 0.100 as floors (no repeat pair exists for a or f40). **The anchor's determinism repeat is ABSENT:** the registered gpt-4-0613 six-way repeat has no row file (the OpenAI sweep waits on an operator's top-up), so the anchor carries `determinism: not probed`. **The ★ per half (A-11):** 2023H1 none; 2023H2 yi:34b; 2024H1 gemma2:27b; 2024H2 phi4:14b; 2025H1 deepseek-r1:32b-distill (its think-on row); 2025H2 qwen3:30b-a3b-2507; 2026H1 qwen3.6:27b; 2026H2 none. **What moved** (every headline group, with its cause: parser, headline rule, reps, row file, entered or left) is `A05-NOTES.md` §8: 81 groups (10 numeric moves, 68 entered, 3 left). · **reason:** §0's gate and §9.3 — the re-score is the fifth amendment, after the ★ was chosen. · **rows the author had seen:** the freeze manifest, and (for this entry) the re-score's own outputs above; no rule above the line was shaped by them. · **effect on rows already scored:** re-scored under v2 (this entry); lane-local stricts printed before the freeze stay relabelled provisional (lane parser X). · **verified:** an independent verifier re-scored every pass of all rows with its own join (0 differences), checked the ★, the reading labels, §6's classes and the stamps; its three must-fixes (the A-09 hold, the §2.3 reading, the dry runs) were fixed before this entry.

**A-12 · `gpt-3.5-turbo-instruct`'s six-way on `/v1/completions`: the rendering, the request, the parser and the score, registered before any call · 2026-09-25T03:42:34Z · amends: `withheld-2026-09-29` · by: R-0 the lead (operator-42), per §9.4 (a method gap-fill: inside the $12.00 lane cap, no live seat, no standing order, no publication; drafted on branch `lead/coi-instruct-reading`, registered when it lands on master) · rule:** §9.2's OpenAI row registers the cell ("Plus `gpt-3.5-turbo-instruct` six-way via `/v1/completions` before 09-27 (PLAN-v2 §3; ≈ $0.05; not in the priced file — its own receipt when it runs)"), but §2.1–§2.2 register only Chat Completions ("ONE user message, no system message") and say nothing of how a text-completion model is asked. Old text: none. New text, the cell's protocol: **(1) Endpoint and id.** `POST /v1/completions` from the laptop through `oai.py` (host pinned; the key read from `~/.config/estate/openai.key` into the header and nowhere else), one call at a time, synchronous (no Batch). The id asked is `gpt-3.5-turbo-instruct`, the one `openai-reading-0/receipts/models-list.json` lists with `shutdown_date` 2026-09-28; `gpt-3.5-turbo-instruct-0914`, listed there with none, is not this cell. The id that answered is recorded per call as `x_model_resolved` (the response's `model` field), with the `openai-model` header kept in the raw file. **(2) The rendering.** The `prompt` string is exactly `run.py`'s `readout_prompt(state, INSTR_C % line, options)`: byte for byte the text every chat row sent as its one user message, the same 108 items in kit order, with no system text, no role labels, no chat template and nothing appended (no answer cue, no trailing newline). The chat endpoint wraps that text in the model's chat template server side and opens the assistant's turn; the completions endpoint sends it bare and the model continues it. That is declared here as **D-17** (a reading-0 difference between OpenAI rows), carried as `x_api: completions` on every row of the cell. **(3) The request.** `max_tokens` 8 (P0's eight visible tokens, `run.py`'s `predict=8`); `temperature` 0 and `seed` 20260921 where accepted, else the vendor default, with the probe's receipt `openai-reading-0/receipts/profiles/gpt-3.5-turbo-instruct.json` recording which (the P0 rule); **no `stop` sequence**, only the server's own end of text, because a newline stop would cut the `\n\n` a completion model writes before its answer and leave the reply empty, and eight tokens bound any continuation; `n`, `best_of`, `echo`, `logprobs`, `suffix`, `logit_bias` and the penalties not sent (server defaults); streamed with `stream_options.include_usage` as the chat rows were, and if the probe finds the stream carries no usage event it reads the model unstreamed and the row says "TTFT not measured"; one rep (a temperature-0 row; its 20-item determinism probe is reading 0.1 with the other 21, section 4.1). **(4) The reply and the parser.** The visible text is `choices[0].text` and the stop reason is `choices[0].finish_reason`. Both go to `parse_v2.py` `689254c5…` unchanged (3.2): rule 1 strips leading whitespace, so `\n\nC` is `clean`; a continuation such as `Answer: C` is `late_letter` (strict wrong, lenient C), exactly as for a chat reply; an empty reply at `length` is `budget_exhausted`. No completion-specific rule is added. **(5) The score.** The strict headline, lenient beside it, v1 kept (3.2). The model has no reasoning control, so its one setting is its utility posture (2.3), and the 95 %-parse rule applies as to any row: if format failures dominate, the row is the protocol's verdict on this rendering (as `falcon:180b`'s speaker label was, A-00), printed with its class counts and never re-rendered after the replies are seen. Another rendering (an answer cue, a few-shot prefix) is a new cell with its own id, an amendment written before its calls, and reading 0.1. **(6) Money.** Stage `rows` under the lane's $12.00 cap (`oai.CAP_USD`, every ledger stage counted), not the anchor sweep's $25 scope, so the cell needs no top-up confirmation (⧖-5 governs the sweep only). Price row `gpt-3.5-turbo-instruct`: $1.50 in / $2.00 out per 1M tokens, the exact row of `receipts/pricing.md` (the same bytes as `receipts/launch-prices/developers-openai-pricing-md-20260923.md`, line 70). Projected at most $0.0475 for the 108 calls: 30,544 input tokens measured on the same items by `gpt-3.5-turbo-0125` (the same cl100k tokenizer; the chat wrapper, about 7 tokens a call, is counted, so this is an upper bound) and 864 output tokens at the cap; the cap check's own worst case is $0.0773; `receipts/spend.jsonl` reads $4.4277 spent, so it fits. Every attempt that answers HTTP 200 but cannot be priced (no usage block) is written to that ledger as its own $0 line, `usage` null and `billed_unknown` true, so the ledger counts every call and its dollar total is a floor. **(7) The reading.** The cell is read before 2026-09-25T12:00Z and so belongs to reading 0; if it is read after the close it belongs to reading 0.1 (§9.1 unchanged). **The instrument.** `run_openai.py` `deaf73bb545d6e50f043853d50d7f70a2da5e6584e3fe7f6a3fd3e783ba8df8a` and `oai.py` `102e0bbc5cd746701fe5012a5b76676077b637ab1d65113fc50bfa5fd910bb7e` (the 31 chat rows were written by `03de0fa5…` / `68802ee0…`, section 10; each of the 49 probed chat profile × variant pairs builds a byte-identical request under both versions); `dryrun.py` `e9ee89544ffd419895ee193034ae48b2681c10619da3d625c900ffaf7e300b61`; `test_completions_offline.py` `91eb696f9b063bcf689388a501df7e3182a0b0626c45025785277a34257cfa6a` (11 cases OK); the dry run `openai-reading-0/receipts/dryrun/gpt-3.5-turbo-instruct.c.first3.txt` (`a224a4eab4a361f127c324032b1368f6afefbe24cec55f0bf38f7cc91070b177`): 108 requests rendered and 0 sent, every body's prompt equal to the harness's byte for byte, and each of the first three items' `prompt_sha256` equal to the same item's in all 31 six-way row files. **Test.** `cd openai-reading-0 && python3 -B test_completions_offline.py` → OK; after the reading, every row of `rows/gpt-3.5-turbo-instruct.c.jsonl` carries `x_api` `completions` and the same `prompt_sha256` sequence as `rows/gpt-4-0613.c.jsonl`. · **reason:** the cell is registered (9.2) but its prompt is not. "One user message" has no meaning on an endpoint without messages, and a rendering chosen after seeing the model's replies could be shaped by them. The model closes 2026-09-28 and cannot be read after that. · **rows the author had seen:** the freeze manifest (A-00); for this entry, the 31 six-way row files' `prompt_sha256` and `x_prompt_tokens` (for the join and the projection) and the sum of `receipts/spend.jsonl`; never a `gpt-3.5-turbo-instruct` reply (no row, raw file, probe receipt or ledger line for the id exists at this write). · **effect on rows already scored:** none. · **owed with the row, not by this entry:** its launch price (R-4: `launch-prices.json` has no entry for the id; the receipt is saved beside it as `openai-reading-0/receipts/launch-prices/gpt-3.5-turbo-instruct.launch-price.json` (`284ffdbc5238411095ca2f5564ad91884fe1d39255817ebb2cc07d9de01a3eb0`): $1.50 in / $2.00 out per 1M on the 2023-09-25T12:54:39Z Wayback capture of the pricing page, the id absent at 2023-09-19T04:59:51Z); `series/cells.py` assigns an OpenAI row to reading 0 only from `roster.json` and `sweep-priced.json`, which do not name this cell, so it must learn A-12 before the row enters `series.jsonl`, and `series/backends.py`'s `system_handling` must name the bare prompt on `/v1/completions` for it.

**A-13 · reps and probes for the slipped reading-0 cells (M-4) · 2026-09-27T11:32:35Z · amends: `withheld-2026-09-29` · by: R-0 the lead, per §9.4 (a method gap-fill: no live seat, no standing order, no publication, and no money past a cap, because the top-ups it names are bought inside an operator's priced go D-20260927-009, under the ruled $25 sweep cap and the $5 account reserve); drafted as item 1 of the COI plan v2's §5, "Amendments to register before the rows", and registered here after its rows (below) · rule:** old text: nothing rules a cell that is on reading 0's list but lands after the close. §9.2 puts on reading 0's list the anchor sweep's 18 `in_plan: true` cells (`PREREG-S0.md:435`) and `--effort low` on opus-4-7, opus-5 and fable-5-1 (`:436`); §9.1 (`:426`) says "a cell measured after a close belongs to the next reading"; §4.1 (`:262`) scores a reading-0 sampled row "on its one pass", says "The 3-rep rule and the 20-item probes bind from the first reading whose cell list carries them (0.1 onward; the reps are on 0.1's list, 9.2)", and gives the anchor "a third pass only if the two disagree on more than 2 of 108 items". Reading 0 closed at 2026-09-25T12:00Z with none of those 21 cells landed. New text, the plan's draft (`COI-GAPS-AND-PLAN-v2.md:373-378`) with no clause changed: "The 18 sweep cells and the three Claude low rows are 0.1 cells. The Claude rows take 0.1's 3 reps (score = mean). The sweep's sampled cells (o1, o3-mini, o4-mini) are read at **reading 0's 1-rep rule as their cell list registered them**; their 3-rep top-ups and the 20-item probes for the temperature-0 rows are **separate 0.1 cells**, priced in closure order and bought as the balance allows, else reading 1. The anchor's repeat: the frozen `19dd5517` row stays the fixed denominator; > 2 disagreements → a third pass; the disagreement prints as a caveat and widens the fixed ratio's sensitivity interval." Not ruled here: which of an id's rows is its utility-posture row (an operator's CB-2-R1, D-20260927-017, is left to its own amendment). · **reason:** M-4, the plan's finding: the 21 cells slipped past reading 0's close, so §4.1's one-pass rule (written for reading 0's list) and its 3-rep rule (binding from 0.1) both claim them. Three reps on the sampled o-series would put the sweep at ≈ $35 and the program over the balance (`COI-GAPS-AND-PLAN-v2.md:572`; the top-ups are priced at ≈ $14.35, `:197-199`), and the anchor stops serving on 2026-10-23, so the deadline-bound single reps come first and the top-ups are their own cells. · **rows the author had seen:** this entry is **LATE**: the rows it governs landed on master before it, and the author had read them and their scores. CB-1 part 1 (estate `cc5b4616`, merged 2026-09-27T10:31:18Z; `openai-reading-0/sweep/`, 15 cells, 1,210 rows, measured 08:38:04Z → 09:47:17Z; `openai-reading-0/CB1-PART1-REPORT.md`): 13 of the 18 sweep cells (the five task_a cells are part 2 and have not run) plus the bridge's (`gpt-4o-mini-2024-07-18`) j and f40, which are on no reading-0 list. Its registered prediction **"j under 50 %" FAILED** (the anchor read 91/119 = 76.5 % strict; all six j cells read 72.3–81.5 %), "f40 ≥ 36/40" held (40/40), and the anchor's repeat disagreed with the frozen row on **2 of 108** items, one short of this rule's "> 2", so no third pass ran. CB-2 (estate `ad7aab44`, merged 2026-09-27T09:40:13Z; `anthropic-reading-0.1/rows/`, nine row files, 972 rows, calls 08:21:55Z → 09:10:15Z; `anthropic-reading-0.1/ANTHROPIC-READING-0.1.md`): strict mean over 3 reps, of 108, opus-4-7 100.00, opus-5 98.33, fable-5-1 79.67 (−15.33 against its default row, so its "within 5 points" prediction failed on the strict score; its 0 refusals held). **Nothing in the rule was shaped by them:** the plan file that drafts it (`bench-archive/plans-2026-09-26/coi/COI-GAPS-AND-PLAN-v2.md`, sha256 `6149da950bcca29e938545b04d068b3b92c88050416ab83326180ea498b672d0`, outside git) was last written at 2026-09-27T00:19:50Z by its mtime, eight hours before CB-2's first call, and the "> 2 of 108" threshold is §4.1's own, frozen since A-00. No clause of the draft was changed after the rows were seen. · **effect on rows already scored:** none. No row of CB-1 part 1 or CB-2 is in `series.jsonl` (`series/lanes.py` reads neither `openai-reading-0/sweep/` nor `anthropic-reading-0.1/`). Both lanes' reports already file and score their rows as this rule says (0.1; the Claude cells as the mean of 3 reps; the o-series cells at one rep), so nothing is re-scored. When the series reads them it files them as 0.1 by measured time (the `series/cells.py` change D-20260927-016 names). The directory name `openai-reading-0/` is the lane's, not the reading's.

**A-14 · reading 0.1's composition (M-9) · 2026-09-27T11:39:15Z · amends: `withheld-2026-09-29` · by: R-0 the lead, per §9.4 (a method gap-fill: no money, no live seat, no standing order, no publication); drafted as item 2 of the COI plan v2's §5 · rule:** old text: §9.1 (`PREREG-S0.md:426`) defines reading 0.1 only by membership ("one not on the list is **reading 0.1**"; A-13 adds the listed cells that slipped past the close) and by its latest close ("closing no later than 2026-10-14T00:00Z"); §4.4 (`:281`) counts F-closed's 180 days back from "the reading's close". Nothing registers what 0.1 holds besides its own cells, where its ratio prints, or when a 0.1 ratio is complete. New text, the plan's draft (`COI-GAPS-AND-PLAN-v2.md:379-383`) with no clause changed: "0.1 = reading 0's rows as frozen (their flags kept; nothing rewritten) plus 0.1's cells. Its ratio prints beside reading 0's, never in its place (R-13). F-closed at 0.1 = the closed ids callable within 180 days before **2026-10-14T00:00Z**, at the utility posture. Completeness: a ratio prints on a set × card only where both local anchors were re-read on that card in 0.1 (c + d48) and ≥ 1 numerator row exists; otherwise "no ratio on that set". The anchors are in every card's 0.1 session (CB-3, CB-4, CB-5, CB-7, morning B)." · **reason:** M-9, the plan's finding: 0.1's cells are landing (A-13's, and CB-5's under A-17), each on a card whose posture or instrument may have moved since reading 0, and the two local anchors re-read in the same session are what make a 0.1 row comparable with reading 0's on that card. Without a registered composition, a 0.1 ratio could replace reading 0's, or print on a card whose anchors were never re-read. Registered before any 0.1 ratio is computed. · **rows the author had seen:** the rows A-13 lists, which landed on master before this entry and were read with their scores (CB-1 part 1 at `cc5b4616`, including the failed "j under 50 %" prediction; CB-2 at `ad7aab44`, including its three strict means), and CB-10's collected rules-desk answers (estate `9513f616`, merged 2026-09-27T09:29:30Z; sealed without their text and not yet judged, so no score exists). None of them is a local anchor re-read, so no 0.1 ratio exists that the rule could be fitted to. The draft (plan v2, last written 2026-09-27T00:19:50Z) predates them all, and no clause was changed after they were seen. · **effect on rows already scored:** none. Reading 0's 339 rows stay as A-05 froze them, flags and words kept; `series.jsonl`'s ten 0.1 rows (A-05's count) are not re-scored; no 0.1 ratio has been printed.

**A-17 · CB-5's posture and the desktop instrument (COI PR-R) · 2026-09-27T11:45:42Z · amends: `withheld-2026-09-29` · by: R-0 the lead, per §9.4, on an operator's rulings D-20260927-007 (the go) and D-20260927-008 (the in-session cap, "300 W for the whole window"), with the lead's D-20260927-016 for clause (8); drafted by the PR-R lane (fold head `4e5df22c`, merged as estate `c67a0fc6`) · rule:** (1) **Posture.** CB-5 reads the desktop's larger card (the NVIDIA RTX PRO 6000 Blackwell Workstation Edition, `<withheld: GPU UUID of board C>`) in a shape-S window: only `docent-vllm.service` is stopped. the desktop's larger card's enforced limit is **300 W for the whole window**, a window rung (`desktop_rules.WINDOW_CAPS_W`). The dead-man restores it to **420 W** (`/etc/desktop/gpu-power-caps.conf`) before the seat starts. The second board is **the desktop's 3090 Ti, `<withheld: GPU UUID of board D>`** ("NVIDIA GeForce RTX 3090 Ti", the EVGA GeForce RTX 3090 Ti FTW3 Ultra). It is untouched and keeps serving. The co-tenants at the window are the ollama seat (gemma4:26b and nomic), the reranker and ComfyUI. v1's mid-window fallback rung is deleted. No arm starts after minute 75 of the 90-minute window, and an arm that does not start prints NOT RUN. (2) **The arms.** They live in `instrument/window/arms-cb5.txt` (`c5cc49b90a373dd62f79bb5e4e784522e7ad653008af47788fa41f1b85c9585b`), in this order: M-9's two anchors, `b-gemma4-anchor-cd` (`5571076f3d70`) and `b-mistral-v0.1-cd` (`b17615239298`); the five §9.2 B-2 window arms, field for field the same as `arms-window.txt`'s lines (arm id, model, num_ctx, think, tasks, digest12, probes; only the column padding differs, and `bench_arms.sh` splits the fields with `read -r`), in CB-5's order (`arms-window.txt` keeps its registered sha `5418ccc6…`); A-11's six ★ rows, with the 2025H1 row last (think on, budget 2,048, num_ctx 8,192, c only). The quant tail is out: it has no pins and does not fit the disk floor. Rehearsal rows (`r-w-cb5-*`) are never cells. (3) **The instrument.** It supersedes the desktop's larger card shas that PREREG §10 records at write (coilargecard `f5f19bb0…`, guard `87d62db1…`) and that protocol.json's `sources.largecard_*` and `backends.largecard_desktop.instrument` record at write (coilargecard `ac9f40eb…`, guard `3c7d72c5…`, bench.sh `3f57c240…`). The files, under `rtx-pro-6000-reading-0/instrument/`, each sha256 recomputed from master at PR-R's merge (`c67a0fc6`): `coilargecard.py` `19c403e4a2d59cb814abdc0dbb4cf98b26ee0a7aba6cbc5cb489fe8609c38ff7`; `guard.py` `b3a1ebb616e2c7e19893b1362bb2465f15aa3deaa6cef2bc61c3cc18f9575fe7`; `desktop_rules.py` (new) `392725e8841d58166405ef408be30cf67cf794bd6b4a13c8a40011d9680578b1`; `bench.sh` `a5faff5a34cf89359f639b71ceffd204c58f26220027035f75b15e29743377b4`; `bench_arms.sh` (new) `eb2440e33700bf4cb475501981aec0b7d9d7c3840ca75549c42e5f17af75aa12`; `hostos.py` (the estate canonical) `a6a74bba57250be1936825466c6614876d757cf81373fcf6fa0b48587cf0e3ad`; `analyse.py` `b689832fd3b18be7d2d2481d63e720c2624c2db00bdd7133c35400064c14b843`; `window/open.sh` `6797af6ec2a325aba804b44de9ee0c8ddabb4f70ecf665ad9b6cdf189edeaf98`; `window/restore.sh` `9eb0d01f60b05d2cd4ae38064722036b095ff977ac513deaf3ba2a8e7a3a6fe9`; `window/window.sh` `e679573f8ab9ec2adaa58ccc977d38ef41825106a411ee3f4717b7c57f135fd9`; `window/preflight.sh` `1627a8dd0d07e151b77dd400177892b6eed4c557101a26d801e17e1ad4f82d9a`; `window/params.conf` `1caed91db410fd7e2c83c401d3367547c1928541d85044423cb3628d6850b7ee`. Each row records its own instrument shas in `arm.json`'s `instrument` block. (4) **I-6** replaces the reading-0 guard's UPS rule: `battery.runtime` is read at 1 Hz on the guard's own thread. The bench stops at once on OB, LB, FSD or an unreadable UPS, and after 3 consecutive rows with `battery.runtime` < 300 s. The thread stops the bench first and fails closed, and a thread that dies trips the guard. The 80 % load line is removed. The window-mean load is printed against 50 % and is never a stop. A guard stop voids that arm's energy, never its accuracy, and is recorded as STOPPED (rc 6), never FAILED. (5) **A new gate, the cap held.** A task is VOID if its 1 Hz `enforced.power.limit` trace, or its task-end read, leaves the named cap by 0.5 W or more. VOID is recorded as `arm.json` `tasks_run.<t>.voided_by_gate` plus `<arm>.<t>.VOID.json`, and a void task's rows and energy never enter a figure. (6) **Renamed and new fields.** Renamed: `x_cap_w_othercard` → `x_cap_w_second`; `posture_othercard_before` → `posture_second_before`; `pin.bench_on_othercard_mib` → `pin.bench_on_second_mib`. New: `params` (cap_w, the cap's ruling, second_board, second_board_name), `os`, `rehearsal`, `x_rehearsal`, `tasks_run.<t>.cap_held`, `voided_by_gate`. The box label `includes the desktop's 3090 and the host` becomes `includes the second board (<name>, <uuid>) and the host` on arms that carry `params`. Reading 0's arms keep their words. (7) **Moved citations.** `build_protocol.py`'s the desktop's larger card `must()` citations (:188-211) and its sentinel (:212) point at lines this change moved. `build_protocol.py` is read against the A-01 commit (`03bb0a2d`), not HEAD, or it is marked frozen. protocol.json (A-01) stays as written and describes reading 0's instrument. METRICS.md:519 (coilargecard/guard `ac9f40eb`/`3c7d72c5`) and :522 (lanes.py `86f615f1`) describe reading 0's implementation and stay. `series/lanes.py` is unchanged by PR-R. Its `posture_othercard_before` reader, its "the desktop's 3090" labels and its handling of VOID are a follow-up with its own amendment. (8) **Row placement, ruled by D-20260927-016** (this replaces the PR-R lane's draft clause, which left placement to the lead; instrument audit I-4): CB-5's five `w-*` rows are **reading 0.1 cells**, beside the two anchors and the six ★ rows, which are on no reading-0 list and so are 0.1 on any reading. §9.1 admits a listed cell to reading 0 only when it lands before the close ("a cell on the list that lands before the close is reading 0 … a cell measured after a close belongs to the next reading", `PREREG-S0.md:426`); reading 0 closed at 2026-09-25T12:00Z; and §9.2's own reading-0.1 row names this case ("the 70 B window's rows if the window slips", `:438`). A-13 applied the same rule to the three Claude low rows and the sweep cells. `series/cells.py` (`:222-224`) still files a `w-*` row in reading 0, because `arms-window.txt` is on reading 0's list, until the series-side follow-up lands (cells.py places a listed cell by its rows' measured time against the close, with a test); no CB-5 row enters `series.jsonl` before then. · **reason:** §9.4's form: an amendment is "written before the rows it governs", so an instrument and posture change between readings is registered before its rows, and §10's the desktop's larger card shas are superseded here, never edited above the line. · **rows the author had seen:** none of CB-5 (the window has not opened at this entry; no `w-*`, anchor or ★ row of CB-5 exists). · **effect on rows already scored:** none; reading 0's rows keep their fields and words.

**A-23 · task_a's refused rows carry their offline `prompt_sha256`, and a task_a cell is refused unless task_a@8k is sent (COI M-5) · 2026-09-28T00:03:00Z · amends: `withheld-2026-09-29` · by: R-0 the lead, per §9.4 (a method gap-fill: no money, no live seat, no standing order, no publication, and no request byte changed); drafted by the COI M-5 lane (branch `coi/m5-refused-row-sha`, fold head `a13e2fa2`, PR #174), merged as estate `d4c3f1b3` · rule:** old text: none. §6 (`PREREG-S0.md:325`) classes an item over the model's trained window as `context-model`, "a capability FAIL, in the headline, shown as coverage", and rules 1.1-a and 1.1-b (`:53`) admit a pass only by its set fingerprint and join items only on `prompt_sha256`. But `jev-2026-09-21/run.py`'s `task_a` (`withheld-2026-10-14`, unedited) writes an overlong page's row with `refusal("overlong", …)` before `decide()` sets `prompt_sha256`. A pass holding such a row can be neither fingerprinted nor joined: A-05 dropped two Jev task_a passes for this (A05-NOTES.md §10 item 11). New text, for every task_a cell the OpenAI lane runs (synchronous, and Batch as scored by `run_openai.py run --replay-only`): **(1) The stamp.** A row the model's census refuses keeps `refused: "overlong"`, the value `series/v2score.py`'s `LANE_REFUSED` maps to §6's context refusal. It gains four fields: `prompt_sha256`, the sha256 of `run.readout_prompt(state, INSTR_A % question, A_OPTIONS)` built offline from run.py's own builders on the item's own question and never sent; `prompt_chars`; `x_prompt_sha256_source` "offline: run.readout_prompt on the item, never sent"; and `x_refused_class` `context-model`, because the census limit is the model's documented window (each census's `context_source`). A live row, and a row refused after its call (`failed-call`, `truncated`), is left as it is. A refused row that already carries a different sha raises, and no row leaves the generator without a `prompt_sha256`. **(2) The task_a@8k fence.** Before anything is announced, created or sent, a task_a cell is refused (`SystemExit`, "cell refused before any call") unless every one of `KIT.lock.json` `sets["task_a@8k"].members_kit_index` (36 items) is among the items its census lets it send. The cell's report carries the check as `task_a8k_check`, with `instrument.kit_lock_sha256` and `instrument.refusedsha_py_sha256`. **(3) The Jev import.** `run_openai.py`'s `JEV_DIR` resolves to the repo's own `bench/jev-2026-09-21`. It was the literal `/workshop/estate/…`, a stale checkout. Each report's `jev_run_py_sha256` records the copy that was read. **(4) An offline stamp of a committed pass** (`dryrun.py --jev-pass`) writes only a temporary copy, carries `x_refused_class` `context-run` (the file cannot say which window refused the page), and admits nothing to `series.jsonl`. **The instrument.** In `openai-reading-0/`: `run_openai.py` `deaf73bb545d6e50f043853d50d7f70a2da5e6584e3fe7f6a3fd3e783ba8df8a` → `c8664ab578f4c14cff7136bda7da2cc2fa919bf5fe8e32b723f745dda10fe4d3`; `dryrun.py` `e9ee89544ffd419895ee193034ae48b2681c10619da3d625c900ffaf7e300b61` → `35561aaa7967b1d6cadd5c737a255d4b2589e849abaa0f5d21019aabbd61e035`; `refusedsha.py` (new) `6e091dadb69410c966f7f5486d65ccc622353d476bf1121adbf90d1839e4b39b`; `test_refused_sha_offline.py` (new) `dbbb796669a5d2ab6fdbe89ff44ca22a51692e8a75c0d45ab05d1a25e6db80f4`, 21 cases OK. Unchanged: `oai.py` `102e0bbc…`, `batch.py` `dc80205d…`, jev `run.py` `withheld-2026-10-14`, `run_addenda.py` `a34aca61…`, `KIT.lock.json` `0bca44b4…`, `series/v2score.py` `f6fecb59…`, `series/kitlock.py` `9edc2f9d…`. **No request byte moves.** All 50 accepted profile × variant pairs render byte-identical requests under both `run_openai.py` versions: 31 profiles, 19 of them reasoning and also read at `default`; 13,704 requests; tasks c, f and j, and task a for the six census models; each version in its own process with the network unshared (`receipts/dryrun/m5-r8-byte-identity.txt` `cc552c0a…9178`; the verifier's exact-bytes re-run agrees, 50 of 50). The existing offline suites (batch 4, completions 11, doorman 7) are OK before and after. **The receipts.** `receipts/dryrun/gpt-4-0613.a.first3.txt` (`9e3a0cf4…604f`) reads the anchor's census (7,936 tokens, 17 pages overlong): 63 rows, of which 39 are rendered and 0 sent, and 24 are refused, each with its offline sha and class `context-model`, none among the recorded requests. All 63 shas equal `KIT.lock.json` `a`'s in kit order, and the fingerprint is `1d5310ddbdb247c6`, the registered value. task_a@8k: 36 of 36 members are sent; sent but not members are on-11 (kit 10), on-23 (kit 22) and on-39 (kit 38). The other five censuses (`gpt-4-turbo-2024-04-09`, `gpt-4o-2024-05-13`, `o1-2024-12-17`, `o3-mini-2025-01-31`, `o4-mini-2025-04-16`) send 63, refuse 0, and are ok. `receipts/dryrun/m5-jev-passes.txt` (`d91a4265…45c2`) reads `rows/openjev-fp8-generate.a.jsonl` (`withheld-2026-10-14`) and `rows-addenda/gemma4-fp8-generate.a.jsonl` (`withheld-2026-10-14`). As committed, both have fingerprint `cd6efb9a1d982461` and are refused by rule 1.1-a (10 rows with no `prompt_sha256`). Stamped in a temporary copy, both read 63 of 63 keyed, fingerprint `1d5310ddbdb247c6` (the registered value), `context_refusals` 10 and strict 53. Each of the ten refused ids (on-01, on-02, on-14, on-29, on-33, on-34, on-40, off-04, off-14, off-18) carries `KIT.lock.json`'s sha. `receipts/test_refused_sha_offline.log` is `9b0bd497…7ca3`. **Test.** `cd openai-reading-0 && TZ=UTC python3 -B test_refused_sha_offline.py` → 21 OK. After a task_a cell, every row of its file carries a `prompt_sha256` equal to `KIT.lock.json` `a`'s at its position, and its report reads `task_a8k_check.ok` true. · **reason:** without this, CB-1 part 2's six task_a cells ($10.6814 priced, `CB1-STAGED.md` §3) would land as passes that rule 1.1-a refuses, since the anchor `gpt-4-0613` refuses 24 of its 63 items. run.py is pinned four ways: §10's `withheld-2026-10-14`, `rtx-3090-reading-0/instrument/coi3090.py`'s expected sha, and `build_protocol.py`'s line checks and laptop-copy check. So the key is stamped by the runner from run.py's own builders, never by an edit to run.py. The fence keeps the derived task_a@8k set readable from any task_a cell that bills. This entry is written before any task_a cell is billed; the anchor stops serving on 2026-10-23. · **rows the author had seen:** the freeze manifest (A-00). For this entry: `jev-2026-09-21/rows/base-generate.a.jsonl` (63 rows, 0 refused; the offline builder is checked against its own shas); the two committed Jev fp8 task_a passes named above and their benchbox copies (read, and stamped only in temporary copies); and the six `openai-reading-0/receipts/census/*.task_a.json`. Never an OpenAI task_a reply: none exists, because CB-1 part 2 has made no call. · **effect on rows already scored:** none. No committed row file is rewritten, `series.jsonl` is untouched, and neither Jev pass is re-admitted (that would be its own amendment). · **owed, not by this entry:** the bridge's census `openai-reading-0/receipts/census/gpt-4o-mini-2024-07-18.task_a.json` (`sweep_plan.py`) before its task_a cell; the same stamp in the benchbox and laptop kits before any local task_a (CB-14; `refusedsha.py` is written to be copied byte for byte under a drift test); task_b, whose generator has the same gap (`run.py:514–525`; no lane runs b).

**A-24 · CB-5b, the remainder of CB-5's window: its arms file, gemma2's energy ruled void and the arm re-read whole, and the window's arms named in params.conf · 2026-10-01T17:23:40Z · amends: `withheld-2026-09-29` · by: R-0 the lead, per §9.4 (a method gap-fill: no money, no posture beyond A-17's, no lift of a standing order, no publication). The window itself is an operator's: D-20261001-040 (one the desktop window inside 07:00–10:00Z on Fri 2026-10-02) at D-20260927-008's 300 W, armed by an operator's own paste S (D-20261001-044). The gemma2 ruling is the lead's call on the rec of COI-SCHEDULE-2026-10-01 §9 and CB5-FOLD §10 (4). Drafted by the CB-5b kit lane (branch `coi/cb5b-kit`, PR #223) · rule:** old text: none. A-17 (2) registers `arms-cb5.txt` as CB-5's list, and it stays byte for byte (`c5cc49b9…`); until this entry `window.sh` ran it by default. New text: **(1) The arms.** CB-5b reads the five ★ arms CB-5 did not finish, in `instrument/window/arms-cb5b.txt` (`f4b53739a772fce4224d12d5f6930fc5ecd39c7e67fb294e80bc5b3b752ef55b`). Each line is `arms-cb5.txt`'s line for that arm, byte for byte (A-17 (2)'s fields). The order is `st-phi4-14b-cd` (`ac896e5b8b34`), `st-qwen3-30b-a3b-2507-cd` (`19e422b02313`), `st-qwen3.6-27b-cd` (`3a40c32f1450`), `st-gemma2-27b-cd` (`cfd95e5696e9`), and `st-deepseek-r1-32b-on-c` (`edba8017331d`; think on, budget 2,048, num_ctx 8,192, c only) last, as A-17 (2) placed it. The two anchors are not re-read: A-14's completeness for the desktop's larger card is met by CB-5's anchor rows, which are byte-identical to reading 0 on all 312 items (CB5-FOLD §3). None of the eight arms CB-5 finished (`b-gemma4-anchor-cd`, `b-mistral-v0.1-cd`, the five `w-*` and `st-yi-34b-cd`) is on a CB-5b line. The posture is A-17 (1)'s: shape S, the desktop's larger card at 300 W for the whole window, no arm starting after minute 75 of 90, and the dead-man. **(2) gemma2's energy, ruled.** CB-5's `st-gemma2-27b-cd` (its `arm.json` `started` is 2026-09-28T08:35:40Z) was STOPPED by the guard in its probes (I-3, the door reader's crash, D-20260928-012). Its energy and its probe figures are void, as A-17 (4) registers. No exception is made for its two task windows, although they closed 99 s and 41 s before the trip with the cap held. CB-5b re-reads the arm whole (c, d and the probes) at 300 W. The re-read moves CB-5's directory to `rows-superseded/` by the rows key (`bench_arms.sh:61–65`: moved, never deleted). The row of record for the cell is the re-read's, task by task, for each task it completes with its cap held. A task the re-read does not complete keeps CB-5's accuracy row as the row of record, with no energy. The cell's energy enters a figure only from a re-read that runs whole (DONE, rc 0), and CB-5's never does. CB-5's accuracy rows stay as a same-posture repeat, and the CB-5b fold prints their item-by-item agreement with the re-read. **(3) The window's arms, named.** `window/params.conf` names the window's arms file and its bytes, `COI_WINDOW_ARMS=arms-cb5b.txt` and `COI_WINDOW_ARMS_SHA256` (the sha in (1)), and the one ruled re-read, `COI_WINDOW_REREAD=st-gemma2-27b-cd@2026-09-28T08:35:40Z`, which names the run it supersedes by its `arm.json` `started`. `window/window_arms.py` (new) is the one reader of the three keys. `window.sh` runs only that file: it takes no argument and has no default (CB-5's fallback to `arms-cb5.txt` would have re-read its eight finished arms first). The pre-flight (`preflight.sh`, run at the lead's L2, inside paste S's dry run, and by `open-at.sh` at the slot) checks the file's store pins and blobs. The pre-flight and `window.sh` both refuse any arm whose `rows/<arm>/` already holds a run, unless `COI_WINDOW_REREAD` names that very run, and no entry can rule a DONE or a REFUSED run back in. So no finished arm is re-read, a refusal is never re-run to a pass, and a ruled re-read serves one run; a later window needs its own arms file, named by its own amendment. The check takes a read-only copy of the file and checks the copy (`--snapshot`), and `window.sh` hands the bench that copy, so the lines the check passed are the lines the bench runs. Paste S checks the staged `window.sh`, `preflight.sh`, `window_arms.py` and `params.conf` against the bytes below before it changes anything, so a missed re-stage can never arm CB-5's old kit. `window.sh`'s EXIT trap also copies `state/` into the window's bench session when the bench's own teardown did not (CB5-FOLD §10 (6)). **(4) The instrument.** The per-row instrument is CB-5's, byte for byte (A-17 (3)): `coilargecard.py` `19c403e4…`, `guard.py` `b3a1ebb6…`, `desktop_rules.py` `392725e8…`, `bench.sh` `a5faff5a…`, `bench_arms.sh` `eb2440e3…`, `hostos.py` `a6a74bba…` and `analyse.py` `b689832f…`. The root scripts keep their pins: `window/open.sh` `6797af6e…`, `window/restore.sh` `9eb0d01f…`, and `window/open-at.sh` `db64b119…` (the scheduled open, #175, estate `1e703e3e`, registered here because it came after A-17). Moved since A-17 (3), each sha256 at this entry: `window/window.sh` `e679573f…` → `8e81268d0a3260c33bec45ccd3fb00176a0c14a477ae899b26b90dad6d1c540d`; `window/preflight.sh` `1627a8dd…` → `5a3f322b…` (#175, the open-at pin) → `516a6064812157fb61fcddc842cdbe7380c9dda711b58b94fe135bacc6553880`; `window/params.conf` `1caed91d…` → `a836c2d21daaa13a2f5e311e5246639d922529b9bc1df07196e3e79ecaa017a7`; `window/stage.sh` `5daed1c7…` → `550a3e6b…` (#175) → `12fc97f581bd0d7897629a3e32bbbcaa49534287db0f9f517e7274a80e1942c4` (it stages the two new files). New: `window/window_arms.py` `4fee62d28145b53ea4acd3fd60350587878b29ef3a6aada3215a792a5e22dbab` and `window/arms-cb5b.txt` (the sha in (1)); on the laptop's side, `window/restore_watch.py` `14f54832da3da2d07a44def2a8c98b9230252f65ec33c7820bd7460d293c6164`, the morning watcher that raises an estate alert on anything but RESTORED; and the door reader `i3_reader.py` `ea56586a…` → `732937389d18882772009bc52f111c9223ea144bfa282c3b8bcfad1abd3d23b6` (#198, estate `5f5ba424`: it reads bytes, D-20260928-012). **(5) Placement.** CB-5b's rows are reading 0.1 cells (§9.1: the ★ rows are on no reading-0 list). As A-17 (8) rules for CB-5's, none enters `series.jsonl` before the `cells.py` follow-up lands, and a row measured after 2026-10-14T00:00Z belongs to reading 1. · **reason:** §9.4's form: an amendment is written before the rows it governs. CB-5's list cannot run again, because its eight finished arms would be re-read and superseded first, about 35 minutes of a 90-minute window. So CB-5b's list is its own file, registered by sha, and A-17 (4) left gemma2's energy to a ruling the CB-5 fold owed (CB5-FOLD §10 (4)). · **rows the author had seen:** CB-5's rows and their fold (`~/bench-archive/plans-2026-09-28/quick-wins/CB5-FOLD.md`, 2026-09-28: 13 arms, 9 started (8 DONE, 1 STOPPED), 4 NOT RUN). On the desktop, read-only at 2026-10-01T15:57Z: the listing of `rows/` for the five CB-5b ids (only `st-gemma2-27b-cd` exists), that directory's `arm.json` `started` and `STOPPED.json` stage, and the five tags' manifest pins in the bench store (all five equal their registered pins, with every blob present). None of CB-5b's: the window has not opened. · **effect on rows already scored:** none. No row is rescored. CB-5's gemma2 directory is moved aside by the re-read, never deleted, and its energy was void under A-17 (4) before this entry.

**A-25 · F-9: the laptop queue marks a step done only on rc 0, the laptop instrument writes only the lane it is given, and reading 0.1's laptop lane (CB-7) · 2026-10-01T18:24:35Z · amends: `withheld-2026-09-29` · by: R-0 the lead, per §9.4 (an instrument fix: no money, no live 24/7 seat, no standing order, no publication), inside an operator's go D-20261001-039 and the laptop-window ruling D-20261001-047 (A2); drafted by the F-9 build lane (branch `coi/f9-queue`, estate PR #226) as A-24 at 2026-10-01T17:52:09Z and renumbered A-25 at this entry's stamp, because CB-5b's A-24 landed first (D-20261001-053); registered when that PR merges after its audit (R-4) · rule:** (1) **The done rule.** Old text: reading 0's `queue.sh` appended every step's key to `queue.done` whatever its rc (`queue.sh:50`), then "rc 3 (failed) and rc 5 (pin/fit refusal) are recorded and the queue goes on" (its header; LAPTOP-READING-0.md §10), and it marked a halting arm done before it halted. New text: a step's key (`<k>|<the whole step line>`, unchanged) is appended to `queue.done` only when the step ends with rc 0. Any other rc (a failure, a refusal, a timeout, a kill, a malformed line) is logged as `STEP end rc=N` and `UNDONE rc=N`, and the step stays un-done: the run goes on past it, an un-done step is tried at most once per run, the next run tries it again in file order, and a run that leaves a step un-done ends `QUEUE END … (rc 9)`. A step that halts the queue (an arm's rc 4 or rc 6, a pull's rc 4, the instance check) stays un-done; an arm that ends rc 0 stays done when the POSTARM check then halts (rc 8). An arm's rc is the `rc=N end` line `arm.sh` wrote in this attempt's `run.log`, and it counts as 0 only when `systemd-run --wait` also returned 0; no rc line is rc 3. Before an arm runs, an earlier attempt's `rows/<id>` is moved to `rows/superseded-<id>-<rcN|norc>-<UTC>/`, never deleted. A halt is still a finding: the lead reads it before the queue runs again, and nothing is re-run to a pass. (2) **The lane.** `queue.sh LANE_DIR`, `arm.sh LANE_DIR ID …`, `pull.py --lane LANE_DIR pull|rm TAG` and `instance.sh start LANE_DIR` write only into the lane they are given (`queue.done`, `queue.log`, `queue.lock`, `rows/`, `receipts/`); the instrument is the directory the scripts are in. Reading 0's `queue.sh:15`, `arm.sh:4`, `instance.sh:14` and `pull.py`'s `LANE` named the shared `~/estate` checkout. One runner holds a lane at a time (`flock` on `queue.lock`), and an arm whose unit is not inactive halts the queue (rc 10). One runner also holds the card at a time, whatever its lane or worktree (the audit's fold, 2026-10-01T18:21:05Z): `queue.sh` takes `flock` on `coi-laptop-card.lock` in the runtime dir (`$XDG_RUNTIME_DIR`, outside every lane), and before every step it halts (rc 10) while any `coi-laptop-arm-*` unit is not inactive, so no pull or arm of `prep/`, `dry/` or the cells runs beside another lane's arm. (3) **The instrument**, each sha256 taken at this entry: `laptop-reading-0/instrument/queue.sh` `ab90ede5e9c67df29d43b28bd809ccadad16d35eb50e6024b582fc510e36ff9e` → `cd65804870048ec61a46c9ec69ed0ed8240c7d6162654dd7a2dc3eaedf8e4be9`; `laptop-reading-0/instrument/arm.sh` `554228da9a43d53b4089ed9416360d41f3b7f39eae5750e912fd231bd43fc697` → `fe1466a42e5274ca3563e9ba5b058a52cf32f9d4810bc852cf4d5117b3c7af54`; `laptop-reading-0/instrument/pull.py` `27800180f63426aa902259ad394042e790bdea11ca42a003577b363443c8b84d` → `19dfaca4f8e47ae4993f4ffa3db9be29cd8133f8ec35ce7fca94943959094e23`; `laptop-reading-0/instrument/instance.sh` `a2758b5d83c67d4aa8378a0ea6d3e67bea53eae54413520c0d308d7bd1ed97bf` → `095fa3be3113bd4111d70e992dd65ef4544008c9b887a15acd3a9825cb4acb50`. New: `laptop-reading-0/instrument/tests/test_queue.py` and `tests/stubs/` (32 cases: `cd laptop-reading-0/instrument && TZ=UTC python3 -B -m unittest discover -s tests`; two of them check this entry's `amends:` and its shas against the files). Unchanged: `coilaptop.py` `0b5dcb41ac989a57dfe4912740dfd24ccd600da5ba3fbc181688d18a8adf94f0`, `pins.json` `f644ae95568febfef1c2f5f33bb0faad0c9b46f2fd6399a1f709b3ea55768d98`, the Jev copies `run.py` `withheld-2026-10-14` and `run_addenda.py` `a34aca61…`. (4) **Reading 0.1's laptop lane, CB-7.** The new `laptop-reading-0.1/` holds three queues, run in this order with `queue.sh <dir>`: `laptop-reading-0.1/prep/queue.txt` `b196f11c454a773d36242274990970085451ce8b2286d7a15fd68c7cc68d6376` (the seven tags pulled before "fan on"; no GPU), `laptop-reading-0.1/dry/queue.txt` `acbee17ad8899915741d85ad88b69cac2e550bd9e8d329ca1b9d1f5a1acfde4a` (`dry-cb7-anchor-4096`, the anchor at `--limit 3`; dry rows are never cells), and `laptop-reading-0.1/queue.txt` `008e53f008e5dc97a5ab5e7bf68ea81e1d5afb91786499186a92b6111c7a1399`, the seven cells, each line field for field the line that registered it: (1) the four arms the 2026-09-23 DNS outage took (§9.2's laptop row, 0.1 by §9.1), `b-gemma2-27b` (the 2024H1 ★ under A-11) first, then `b-llama3.1-8b`, `b-mistral-7b-v0.3` and `b-mistral-nemo-12b` (`laptop-reading-0/queue.txt` lines 49, 52, 46 and 55); (2) `t-deepseek-r1-32b-on`, the 2025H1 ★ under A-11 (benchbox's `instrument/queue.txt` line 148: num_ctx 8,192, think on, c only, budget 2,048); (3) both anchors under A-14, `k0a-gemma4-anchor-cd` and `k1-mistral-v0.1-cd`, c and d (lines 125 and 12). Every tag is pinned in `laptop-reading-0/instrument/pins.json` (A-03's seed). The cell queue has no `pull` or `rm` line, so the seven tags stay in the store until the block ends and a retried arm finds its tag. (5) **Moved citations.** `protocol.json` (A-01) `sources.laptop_queue_sh` and `sources.laptop_instance_sh` (`sha256_at_write` `ab90ede5…` and `a2758b5d…`) and `build_protocol.py`'s `must(LQSH, 38, …)` describe reading 0's instrument and are read against the A-01 commit (`03bb0a2d`), as A-17 (7) rules for the desktop's larger card; `instance.sh`'s cited lines 24–29 keep their numbers and bytes. · **reason:** The 2026-09-23 DNS outage failed four registered cells between 19:37:29Z and 19:38:55Z (rc 3; LAPTOP-READING-0.md §11.2), and reading 0's `queue.sh` marked them done, so they were never retried (LEAD-TODO, added 2026-09-24 ~01:5xZ). The same line marked a halting arm done before the halt, so a later run would have skipped it. The hard-coded lane sent every write to the shared checkout, while reading 0.1's rows must land in a new directory in their own worktree. This entry is written before any CB-7 row exists. · **rows the author had seen:** reading 0's laptop report and rows as committed (LAPTOP-READING-0.md, with its figures and the four DNS-lost arms' `FAILED.json`); the 2026-10-01 COI plan files (`COI-OWED`, `COI-SCHEDULE`, `FIRST-MEASURE`), which print CB-1 part 2 cell 1's score and CB-5's figures; and the texts of A-13, A-14, A-17 and A-23 with the scores they quote; at the renumber, A-24 (CB-5b) as merged. No reading 0.1 laptop row: the bench store held no model at 17:2xZ, and `laptop-reading-0.1/` did not exist before this branch. No clause depends on a score. · **effect on rows already scored:** none. Reading 0's laptop rows, `queue.done`, `queue.log` and receipts stay as committed, as the old `queue.sh` wrote them; nothing is re-scored, and no row enters `series.jsonl`.
