# Rulings for the cost-of-intelligence instrument — 2026-09-23

an operator, 2026-09-23 ~15:xxZ, on the lead's seven gaps: "ok perfect, let's fill in these gaps with
your recs". Every item below is therefore RULED, not proposed. The plan (PLAN-v2 and later) folds
them; a lane that meets a conflict between the plan and this file follows this file and says so.

> **Clock correction (2026-09-23, read by `date -u` on the laptop and benchbox at 15:55Z):** the ruling times in this file were first written from the lead's estimate of the hour, which ran about an hour ahead; every ruling below was made between ~15:10Z and 15:55Z and is stamped "~15:xxZ". The words and their order are exact; only the stamps were corrected.

## R-0 · Further gaps found while planning are filled with the lead's recs

an operator, 2026-09-23 ~15:xxZ, right after ruling R-1..R-7: "and any more you find while planning".
A gap the panel or a lane finds is ruled by the lead's recommendation and written here as R-8,
R-9, …, with the finding it answers, unless it spends money past a stated cap, touches a live
24/7 seat, lifts a standing order (e.g. gemma on the laptop), or publishes. Those four still go
to an operator as a decision.

## R-1 · Contamination over time (the standing instrument's guard)

- **The frozen set.** The task items as they stand today (task_c six-way 108, task_a docent gate
  63, the doorman planted 48, the field exam 40) are frozen as **series set S0**. Their bytes are
  hashed into `SERIES-SETS.md` with the date each became public (the long table's wall carried
  task_c's lines from 2026-09-19; exhibit fifty-eight's data kit published the sets on
  2026-09-23 13:17Z).
- **Clean by construction.** A model whose weights were released before a set's public date is
  clean on that set. A model released after it gets a **contamination-possible flag** on every
  row, unless its stated training cutoff precedes the public date (cite the cutoff source).
- **A private held-out slice.** A small set that is never published (not in any kit, not on
  any wall) and is rotated each quarter, so the curve cannot rise for the wrong reason. It
  shares its sealing discipline with the Kev train's sealed doorman exam set
  (`bench/jev-v7-rungs-2026-09-22/PLAN-v3.md`): sha committed before any model reads it, never
  trained on, scored separately. Private six-way items come from dinners held on a
  non-public instance (lines never posted to the public wall). How to build them is a lane
  item this week.

## R-2 · A frontier-anchored bar on the ladder

One threshold is anchored to the 2023 frontier as OpenAI still serves it: **`gpt-4-0613`**. The
bar is "matches gpt-4-0613's score on this task (within its interval)". The ladder then answers:
*on our tasks, when did a model on a 3090 / the laptop / the 96 GB card first reach the 2023
frontier, and at what cost per correct answer?* gpt-4-0613 is a MUST-RUN in the OpenAI reading
(six-way first).

## R-3 · The ratio has two denominators

- **Moving:** best local score on a card ÷ best frontier score at the same reading.
- **Fixed:** best local score on a card ÷ the frozen anchor (R-2's gpt-4-0613 score in S0).
Both are published side by side; neither alone is the headline.

## R-4 · OpenAI's history is the article's spine

Every OpenAI row records the model's **launch price** (sourced, dated) as well as today's
price, so price-per-correct can be drawn at launch time against our local curve. A credit
top-up beyond the $17.14 balance is an operator's call, asked with the curve in hand.

## R-5 · Gemini and Grok are optional

Covered only if an operator adds keys (`~/.config/estate/gemini.key`, `~/.config/estate/xai.key`,
mode 600, the same silent one-liner as the OpenAI key). Not blocking anything.

## R-6 · Energy is labelled by instrument

Every joule figure names its instrument: **board** (nvidia-smi; the laptop, the desktop's larger card), **wall**
(the UPS on benchbox; the 3090 there), or **none** (cloud). Board and wall figures are never
compared in one ratio without saying so.

## R-7 · The series goes on the model roster after reading 0

After reading 0 lands, a hub lane adds the instrument's series to the model roster so the curve
grows on day one; the article follows. A build lane, one at a time under the single-lane law.

## R-8 · Response quality is part of every reading

an operator, 2026-09-23 ~15:xxZ: "let's also be SURE that 'response quality' is part of the tests we
run … like with narrating the cove, etc … since we noticed the score went DOWN quite a bit with
openai from 5.5 -> astra6 … but has consistently improved w/ fable / claude".

- Decision tasks (a letter) are not enough: the products WRITE. The instrument gains a
  **quality family**, one exam per product voice, each re-run on the same frozen prompts and
  judged blind: (Q1) **the cove's narrator** — the sealed narrator's-chair exam and blind panel
  behind "the open call" and exhibit forty-one "Three new voices at the narrator's chair";
  (Q2) **the long table's guests** — blind side-by-side judging of dinner lines in persona (the
  method behind "Gemma preferred in 47 of 48"); (Q3) **rulesage's answers** — the rules-desk
  exam behind exhibit forty "Two new frontier models at the rules desk".
- Bias controls carried from those exhibits: judges never see model names; positions swapped;
  the panel is cross-family (no judge scores its own family alone); every judge's raw sheet
  kept.
- **Pre-registered hypothesis H-Q1** (an operator's observation, to be reproduced or refuted on the
  frozen narrator exam): narration quality fell from gpt-5.5 to gpt-6-astra, and rose across
  the Claude line through Fable. Stated before the quality reading runs; the result is
  published whichever way it lands.
- Quality exams are generative and cost more per model than decision tasks: each reading
  prices them before running (the OpenAI $12 cap does not stretch to them without an operator's word).

## R-9 · Charts that track each model family through time

an operator, 2026-09-23 ~15:xxZ: "we can also create some charts for this one, to track each model
family through time, etc".

- The series ships as charts built from the rows, never drawn by hand: (C1) score against
  weights release date, one line per family (OpenAI, Anthropic, Gemma, Llama, Mistral, Qwen,
  DeepSeek, Kimi, GLM, …), decision and quality families as separate panels; (C2) cost per
  correct answer against date on a log scale, our points beside Epoch's line (CC BY, credited);
  (C3) the ladder: for each bar (incl. R-2's gpt-4-0613 anchor), the date each card first cleared
  it; (C4) the two ratios of R-3 over readings; (C5) per card, the curve of the best model that
  fits.
- The house data law applies to every mark: no bare number, colour or dot; every point carries a
  visible path to its row, its reading and its source (hover/label + the series CSV in the kit).
  Energy points are labelled board or wall (R-6); contamination-flagged points (R-1) are drawn
  distinctly and say why.
- Built with the house chart method (the dataviz skill) and re-generated by a script on every
  reading, so the charts grow with the instrument.

## R-10 · The energy and throughput metrics every local row carries

an operator, 2026-09-23 ~15:xxZ: "let's be sure to track metrics like joules per token, etc".

Every LOCAL row records, per (model, card, task), from the 1 Hz power sampler and the server's
own timing fields (ollama: prompt_eval_count / prompt_eval_duration / eval_count / eval_duration;
vLLM: its equivalents), with the instrument named (board or wall, R-6) and the idle draw read
before the run and reported both raw and net of idle:
- **joules per generated token** (decode) and **joules per prompt token** (prefill), each from
  the power integrated over that phase ÷ its token count; and J per 1,000 tokens, the tier
  bench's existing unit, so rows compare with the hardware roster;
- **tokens per joule** (the same figure inverted, for charts where higher is better);
- **joules per correct answer** (decision tasks) and **joules per judged-acceptable response**
  (quality tasks, R-8);
- **tokens per second** (decode and prefill separately), **time to first token**, and
  **tokens per second per watt**;
- **mean and peak watts** during the run, and the **idle watts** of the card and (where wall power
  exists) the box;
- the **card's power posture** (cap or boost state as read from the card; the laptop refuses a
  cap, R-6 notes it) and its temperature at start and end.
Cloud rows carry tokens, latency, and dollars; no joules are claimed for them (R-6: "none").
The metric definitions live in one file (`METRICS.md`), and a change to a definition is a new
version, never an edit of an old reading's figures.

### R-10b · Every local power reading we can get (an operator: "any local power metrics we can")

Per box, sampled at 1 Hz beside the card's board power, each labelled by instrument:
- **the laptop (the laptop 5090):** GPU board power (nvidia-smi) + the CPU package's energy from
  RAPL (`/sys/class/powercap/intel-rapl:0/energy_uj`, which is **root-only** on this box — reading
  it needs a small root sampler unit or a udev rule, a sudo paste from an operator, asked with the plan)
  + AC/battery state; no wall meter exists, so the laptop's figures are board + package, never
  "wall".
- **benchbox (the 3090):** GPU board power + the UPS's whole-box wall power (NUT), as the tier bench
  already reads it; wall figures net of the box's idle.
- **the desktop (the desktop's larger card):** GPU board power + the BMC's whole-box power reading (IPMI DCMI, credentials in
  `~/.config/estate/desktop-bmc.env`, read-only). The box also carries live seats, so the bench's
  share is the delta over a baseline read just before, labelled "box delta", never "wall".
- Every row states which instruments it has; a chart never mixes them silently (R-6).

### R-10c · All the timings, local AND cloud (an operator: "all the timings, ttft, decode / prefill speed, etc")

Every row (local and cloud) records, per item and summarised as median / p95: **time to first
token** (streaming where the path allows; a non-streaming row says "TTFT not measured"), **prefill
speed** (prompt tokens/s) and **decode speed** (generated tokens/s) from the server's own timing
fields where it gives them, **total latency**, and **tokens in / out / reasoning**. Cloud timings
are network-included and labelled so; local timings come from the server's fields, never from a
wall clock around an HTTP call alone.

## R-11 · Reasoning on and off, per model, where the model offers it

an operator, 2026-09-23 ~15:xxZ: "we should test with think on and off (where available), based on model".

- **A reading axis, not a footnote.** Every model that exposes a reasoning control is read at
  (at least) two settings, **off / lowest** and **the model's default**, and at **high** for the
  flagships where budget allows; a model with no control is read once and says "no reasoning
  control". Each row names its setting.
- **How each backend sets it:** ollama (local and cloud): the `think` request field (true/false),
  or the level for models that take one (gpt-oss: low / medium / high); separate thinking and
  non-thinking TAGS of one family count as the same axis. OpenAI: `reasoning_effort` (the lowest
  the model accepts, e.g. minimal/none/low, vs its default; high for one or two flagships inside
  the $12 cap). Anthropic via the clean `claude -p` call: `--effort` (low … max); record that the
  CLI's effort is Claude Code's control, not a raw API parameter, and verify with the tokens it
  reports that the setting actually changed the thinking spend.
- **What each pair measures:** accuracy / quality change against reasoning tokens, latency, TTFT,
  dollars and (local) joules — the price of thinking, per task. Hypothesis to report either way:
  thinking helps the harder decision sets (the six-way, the field exam) more than the doorman,
  and costs most on the long docent pages.
- Charts (R-9) draw a model's on/off readings as one family point with a connector, so the price
  of thinking is visible at a glance.

## R-12 · The 3090 reads at 300 W, persistence on

an operator, 2026-09-23 ~16:0xZ (after setting 350 W stock): "i think we should run this bench at 300w,
since that's been our sweetspot". The 3090's reference posture for the instrument is **300 W with
persistence mode on** (persistence keeps the limit from falling back to the default when the card
idles between arms); every 3090 row records the enforced limit and persistence as read from the
card. The laptop cannot take a cap (R-10b); the desktop's larger card's posture is set with its interference ruling.

## R-13 · The article is a working document

an operator, 2026-09-23 ~16:5xZ: "we'll note: that this article / document, is a 'working document', that
we will post updates to in the future" (target release: "maybe Friday" = Fri 2026-09-25 (a local date)).

- The page says so at the top, in plain words: a working document that grows with each reading
  of the instrument, with the date of its latest reading in the byline.
- Each later reading lands as a **dated update section** under the cold-scroll law (it introduces
  its own subject, dates its window at both ends in UTC, and compares to the prior reading in one
  sentence), never by silently rewriting earlier figures. Earlier readings' numbers stay on the
  page as they were measured; corrections are marked as corrections.
- Every update stamps the page byline AND the hub row's updated chip (the cold-scroll law's
  mechanical half); the charts (R-9) regenerate from the whole series; the data kit keeps one
  directory per reading (reading-0/, reading-1/, …) so each update's receipts stay addressable.
- A short "changes" log at the foot lists each update with its date and one line on what it added.

## R-14 · Chart C2's shape: rates on our axis, never our dollars on Epoch's (under R-0)

The lead, 2026-09-23 ~16:5xZ, answering the article lens's M-9 (`panel/article.md`): R-9's C2
("cost per correct answer against date on a log scale, our points beside Epoch's line") drawn
literally puts nominal dollars per correct on OUR tasks beside Epoch's REAL-dollar INDEX (100 at
2021.88, "$, given benchmark score") — the false curve the plan's §1 warns about. Under R-0:

- **C2 is two aligned panels on one shared time axis.** Left: Epoch's index as published, credited
  and captioned "adapted" (CC BY 4.0: licence link, changes stated, no suggestion of endorsement;
  the credit drawn INSIDE the image, social card included). Right: our series indexed to 100 at
  reading 0, per bar, nominal with a CPI-U-deflated (FRED CPIAUCSL) column, the rule printed.
- **Levels meet only in the cross-walk**, and every band is a separate labelled mark: fuel-only
  is a hollow marker captioned "the meter only, not a price" and never appears alone; the dot is
  the levelised band (archetype A at the stated u; archetype B beside); prefill is included from
  Epoch's mean_input_tokens; each dot says "Epoch's accuracy and token counts at their provider's
  precision; our joules at Q4_K_M on [card]; not a run of their benchmark".
- **No dollar dot, ever, for the 96 GB card** (P-6); it appears on the energy panels only.
- **The three-series chart** keeps Epoch's electricity segment exactly as their figure draws it;
  our 1973→2026 extension (EIA annual residential, deflated with the same CPI series) is a
  separately sourced, visually distinct series labelled ours.
- A chart lane that meets R-9's C2 wording follows this ruling and says so.

## R-15 · The registered forms of R-2's bar and R-3's ratio (under R-0)

The lead, 2026-09-23 ~17:3xZ, closing `panel/CHECK.md` MF-6: PLAN-v2 departs from the literal
words of R-2 and R-3 on method grounds (`panel/method.md` M-6, M-2, M-11), and a lane following
the plan's header ("this file wins") would otherwise rotate back to the literal forms. Under R-0
(a method gap-fill: no money, no seat, no lift, no publish):

- **R-2's bar** "matches gpt-4-0613's score on this task (within its interval)" is registered as
  a **paired non-inferiority test on identical items**: a 10,000-resample paired bootstrap of the
  difference (registered seed); *clears* = the point difference ≥ 0 and the lower 95 % bound
  ≥ −δ; *clears with margin* = the lower bound ≥ 0; δ = 5 points at n ≥ 100, 10 at n < 100
  (PLAN-v2 §4). Reason: "within its interval" read two ways on the anchor row (81.5 or 73.1).
- **R-3's two denominators** stay (moving and fixed, side by side, neither alone the headline),
  but "best" is the **cross-fit best** (split items by parity, select on one half, score on the
  other, both ways, averaged) with the raw maximum printed beside it and its k; and the
  **headline form is chance-corrected**, R_cc = (L − b)/(F − b) (b = 1/6 on the six-way; balanced
  accuracy with b = 0.5 on two-class sets), the raw ratio and the error ratio beside it
  (PLAN-v2 §2.4). Reason: the max of k noisy rates at n = 108 sits 4–9 points high, and k moves
  with keys, budgets and windows.

Both forms go into `PREREG-S0.md`; a change after the freeze is an amendment `A-nn`. R-1's
re-reading ("rotated" → additive slices) is NOT ruled here: it rewrites an operator's word and goes to
him as PLAN-v2 ⧖-27.

## R-16 · The desktop's box power for reading 0 is the CP2000, until the BMC paste (under R-0)

The lead, 2026-09-23 ~17:3xZ, closing MF-6 on R-10b. R-10b names the BMC's IPMI DCMI reading
for the desktop's whole-box power; `desktop-bmc.env` lives on the laptop, which has no `ipmitool`, and the desktop
has it but in-band DCMI needs root (`panel/compute.md` S-6). Under R-0: **reading 0's the desktop box
figure is the CP2000** (`upsc cp2000 ups.realpower` on the desktop, integer watts), labelled "box delta;
includes the desktop's 3090 and the host", never "wall"; the BMC reading becomes the instrument when its one
paste lands, and the change prints as a dated instrument delta. The reader drops `upsc`'s stderr
(it prints "Init SSL without certificate database" before the value) and parses an integer,
refusing anything else (`panel/CHECK.md` S-9), so a parse error can neither trip a guard nor
pass silently. R-10b's target instrument is unchanged.

## R-17 · The plan's decisions, ruled on the lead's recs (an operator: "sounds great! let's keep rolling with your recs")

Asked in-session at ~17:4xZ with the nine that need an operator rendered one by one; an operator's answer,
~17:5xZ: "sounds great! let's keep rolling with your recs". Ruled by that answer, per PLAN-v2 §9:
- **⧖-2 (a):** <withheld: GPU UUID of board A> is THE reference 3090 (benchbox x16, 300 W, persistence on);
  <withheld: GPU UUID of board E> gets an anchor-only bridge read when it is next seated; the instrument's queue keeps
  benchbox until the XC3 is in hand, then yields by the STOP file.
- **⧖-4 (a) + (c):** the doorman set is an ORDINARY PRIVATE set from here on (never published; its
  exposure recorded in EXPOSURE.jsonl — the shelf 14 tags / 1,344 rows by 17:24:08Z, Claude and
  OpenAI counts from their lanes; rows from models that saw it carry the contamination rules);
  a new sealed slice S1 is built for future readings; ANY further egress sends only the 36
  in-contract lines, NEVER the 12 out-of-contract (C/D) lines. DOORMAN-EGRESS-RULED stays ABSENT
  until the gates filter to the 36 — the hold stands until then. an operator is asked to check both Claude
  accounts' model-improvement setting.
- **⧖-6 (a) now, (b) before reading 1:** the Claude CLI for reading 0 (served-model check on every
  call); a metered Anthropic API key before reading 1.
- **⧖-20 (a):** the laptop card: the 10-minute item-12 check first, then the train an operator names,
  never both at once, always after an operator's "turbo fan on" (laptop-gpu-work-needs-the-turbo-fan).
- **⧖-7, ⧖-8 (except money), ⧖-9 … ⧖-17, ⧖-21 … ⧖-27:** each as the plan recommends.
CARVED OUT under R-0 and asked once, separately (money, a live 24/7 seat, a standing order, a
publication): ⧖-1 (gemma on the laptop), ⧖-3 (the seats-down window), ⧖-5 (the $30 top-up),
⧖-18 (the correction on exhibit fifty-eight), plus ⧖-19 (a root paste an operator runs).

## R-18 · The four carve-outs, each ruled yes (an operator, in-session, ~18:0xZ)

Asked once, each named: an operator checked all four ("The desktop's larger card window Thu 10–10:45", "Gemma on the laptop",
"Correct the live Jev page", "$30 OpenAI top-up") and wrote "let's start doing what we can on 3090
bench on benchbox now, before the new cards show up", then "yes to all".
- **⧖-3 (a):** the desktop's larger card's seats-down window **2026-09-24 16:00–16:45Z** (the same forty-five minutes on the operators' local clock), shape S,
  banner + dead-man restore; its pastes arrive runnable before 16:00Z.
- **⧖-1 (a):** a SCOPED STANDING LIFT of the no-local-gemma4 order on the laptop: any roster model may
  load on the laptop's card for a NAMED bench reading or labelling pass only, in a transient bench
  instance, unloaded at the arm's end, never through the system daemon, never a seat — and always
  after an operator's "turbo fan on".
- **⧖-18 (a):** a dated correction on exhibit fifty-eight (82.4 → 81.5 strict): one pass by the lead,
  one pour.
- **⧖-5 (a):** an operator tops up $30 of OpenAI credit; the anchor sweep's cap is $25, ordered by closure
  date (2026-10-23), 1 rep + one six-way repeat, Batch where eligible; the doorman only as R-17's 36
  in-contract lines, once the gate filters to them.
- **benchbox:** use it to the full for the 3090 reading until the new cards arrive; the queue may run
  past the day into the night (the daylight law: overnight is for what's still running) and yields
  by the STOP file for the swap.

### R-10d · The laptop's RAPL sampler is live (⧖-19 done, 2026-09-23 ~18:2xZ)

an operator ran the one paste: `rapl-sampler.service` (root, enabled) rewrites `/run/rapl/energy` (0644)
every second with four domains — **package-0**, **core**, **uncore** and **psys** (the platform
domain: the whole SoC's draw, the closest thing this laptop has to a box meter). Laptop rows record
the board (nvidia-smi) + psys + package energy, each labelled; wraps handled at
max_energy_range_uj (262,143,328,850 µJ). psys is still not "wall" (R-6): the page calls it the
platform's own reading.

## R-19 · The laptop's memory gate reads pressure, not a swap percentage (R-0, 2026-09-23 ~18:3xZ)

Finding (laptop lane, 18:24Z): the plan's "swap < 50 %" gate halted the laptop run before its first
arm at 54.2 % swap used, while MemAvailable was 49.2 GiB and PSI memory full avg60 1.7 %: the swap
is mostly zram (compressed RAM: 9.9 of 16 GiB held in 3.56 GiB), so a percentage over-reads the
risk. Ruled on the lane's recommendation: the gate is **swap-used < 80 % AND MemAvailable ≥ 10 GiB
AND PSI memory full avg60 < 10 %** — it still refuses the 15:56Z state (swap 17 of 17 GiB). Recorded
in every laptop arm.json as an amendment.

### R-10d addendum · psys is not a platform reading on this laptop (measured 2026-09-23 18:3xZ)

The laptop lane's anchor arm read RAPL psys at ~0.3 W in every window, idle and loaded, while
package-0 read 16–33 W: on this firmware psys does not measure the platform. It is recorded, labelled
IMPLAUSIBLE, and never used for a figure. The laptop's CPU-side reading is **package-0**; the laptop
still has no platform or wall instrument (its energy figures are board + package, labelled so).

## R-20 · The laptop's posture is a range, not a number (R-0, 2026-09-23 ~18:5xZ)

Finding (laptop lane, 18:52Z): under Dynamic Boost the firmware moves the GPU's enforced limit with
the CPU's draw (135.00–150.00 W traces across arms), so §2.2's "150.00 W, rc 4 on mismatch" gate
cannot hold on a busy box. Ruled on the lane's A-L04: the posture is identified by nvidia-powerd
active, clocks.max.sm 3090 (lock off), AC online, one board, and an enforced limit inside the Dynamic
Boost envelope (> 95 W, ≤ 175 W); rows report the limit as min / median / max per task from the 1 Hz
trace. A-L03 (the bench instance's MemoryMax 16G → 32G, llama-server's 8 GiB host prompt cache plus
page cache) stands; the 16G arms move to superseded/.

## R-21 · A refusal is recorded as a refusal: the CLI's fallback off (R-0, 2026-09-23 ~19:1xZ)

Finding (Anthropic lane, 19:04Z): Fable 5.1's and Fable 5's safety classifiers refused ordinary
six-way dinner lines (labelled "cyber" or "bio"; 2 of Fable 5's first 3), and the Claude CLI silently
re-sent each refused item to another model (Opus 4.8 or Opus 5) and returned that model's answer
under the requested id; the served-model check stopped both Fables at the 5 % rule. Ruled: every
Claude call in this instrument runs with `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK=1` (proved on one item
first: a refusal must come back as a refusal, served by the requested model), a refused item is
scored WRONG and counted separately as "refused (classifier)", and both Fables are re-read that way.
The CLI's sampling noise (haiku's two runs agreed on 63.9 % of 72 items) is published as a caveat on
every Claude row and is further weight for ⧖-6 (b), a metered API key before reading 1.

### R-20 clarification · which 16G arms are "the 16G arms" (R-0, 2026-09-23T19:35:15Z)

Asked by `panel/CHECK-PREREG.md` MF-2: R-20's "the 16G arms move to superseded/" is read two ways. Ruled:
it means the arms whose MemoryMax=16G cap BOUND, and 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`. By that receipt, at 16G: `k0a-gemma4-anchor-cd`
+5,598 and `b-vicuna-33b` +6,994 are superseded and re-run at 32G (the lane's move stands);
`k1-mistral-v0.1-cd` +0 and `b-falcon-7b` +0 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 and whose energy was never a series
figure. Every 32G arm reads +0. Registered in `PREREG-S0.md` §2.2 and §9.2.

### R-14a · C2's right panel at reading 0 (the lead, under R-0, 2026-09-23 ~21:4xZ)

R-14's "our series indexed to 100 at reading 0, per bar" is an index ACROSS READINGS: it needs a
second reading to have a slope. At reading 0 the right panel therefore shows the within-reading
staircase (the cheapest clearer of each bar by model release date, launch and 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 its series is fetched and pinned by sha. From reading 1 the panel switches to R-14's index.
The chart lane's reading (CHARTS.md) is this ruling; the author's v0 contradiction (3) is closed by it.
