# The pre-registered floors

**What this file is, for a reader who scrolled straight to it.** The exhibit
*Ask About This Page* says the assistant sat an exam before it was linked, and
that it passed. This file is the exam's **passing mark, published before the
sitting it judged** — the four floors the harness tests, plus the two latency
ceilings it tests on the warm arm only, each quoted from the frozen bank that
carries them, each with the UTC date it was registered and the sitting number it
was registered *before*.

A rung judged by its own gate needs its gate published first. Nothing in this
file was written after a result was known; where a floor **did** move, the move
is below with its date, its reason, and the sitting it took effect from — because
a floor that moves quietly is not a floor.

---

## 1. The floors, verbatim from the bank

Every string in this section is copied byte for byte out of `bank.json`'s own
`gates` object, which the harness reads at the top of every arm and prints on the
arm's own log line. `runs/r8-*.log` shows them being printed.

### on-page answered — floor **37 of 41**

> `"floor": 37`
> `"of": 41`
> `"means": "answers that pass every gate: 0 non-verbatim figures and >= 1 valid cite"`
> `"re_specified": "2026-09-09"`

### off-page abstained — floor **21 of 21**

> `"floor": 21`
> `"of": 21`
> `"means": "the authored abstain reached the reader — because a gate fired, or because the abstain normaliser recognised the seat refusing in its own words (D-20260909-22)"`

### redaction hits — ceiling **0**

> `"ceiling": 0`

### non-verbatim figures — ceiling **0**

This one is not a number in the bank, because it is not a threshold: the harness
tests `non_verbatim_figures == 0` outright (`harness/run.py`, the `verdicts`
block). Zero figures in any answer that are not verbatim in the article, on every
arm. One is a failure.

### p50 warm seconds — ceiling **3.0** · p95 warm seconds — ceiling **8.0**

> `"p50_warm_seconds": {"ceiling": 3.0}`
> `"p95_warm_seconds": {"ceiling": 8.0}`

**Warm arm only.** The harness adds these two verdicts when `--arm warm` and not
otherwise, so a cold arm file carries four verdicts and a warm arm file six. The
p95 is the **exclusive** quantile — `statistics.quantiles(seconds, n=100)[94]` in
`harness/run.py` — not a nearest-rank pick, and a kit reader recomputing it any
other way will land a little low.

### and what is measured but NOT gated

- **The six-in-flight numbers are reported, never gated** (D-20260909-22). The
  seat's own concurrency bench governs those; this bench prints them.
- **Citation overlap is a measurement this release, with no floor at all.** Each
  arm carries `cite_overlap_p50` / `min` / `max` / `rows`, and the harness says in
  its own comment why there is no verdict on it: *"a verdict here would be a floor
  nobody registered"*. A figure from it is a reading, not a pass mark.

---

## 2. When each floor was registered, and what moved

| registered (UTC) | what was registered | in force from |
|---|---|---|
| before 2026-09-09 | the original spec's single floor: **≥ 54 of 60** across the whole bank | run 1 |
| **2026-09-09** | the floor split onto its own denominators: on-page **≥ 35 of 39**, off-page **21 of 21**, non-verbatim **0**, redaction **0**, p50 warm **< 3 s**, p95 warm **< 8 s**; the six-in-flight numbers reported, not gated | run 2 |
| **2026-09-09** | the bank grew to 41 on-page and the on-page floor moved with it, at the same proportion: **≥ 37 of 41**. Every other floor unchanged. | run 3 |

**The first floor was withdrawn because it could not be met honestly, and that is
the whole reason the split exists.** ≥ 54 of 60 counted every question in the bank
on one denominator — but only the on-page questions can be *answered*, and there
are 41 of them. A run could reach 54 only by counting **off-page abstains as
answers**, which is the exact behaviour the off-page floor exists to require. The
two arms are scored on their own denominators from run 2 on. (D-20260909-22, and
the bank's own `gates.on_page_answered.why` carries the same reasoning in the
frozen file.)

**The 35-of-39 → 37-of-41 move is the bank growing, not the bar dropping.** Two
articles poured after the bank was frozen got their hand-written questions on
2026-09-09, so the on-page arm went from 39 questions to 41. The floor kept the
**same allowance of four failures** the ruling set. Runs 1 and 2 were judged at
35 of 39; runs 3 through 9 at 37 of 41. You can check which bank an arm walked
without leaving this kit: every arm file carries `bank.counts`.

**Three instrument corrections were made during the arc, and no floor moved for
any of them.** They are disclosed in `harness/run.py`'s own docstring, dated, with
the run whose rows forced each one: the figure column moved to cite-cut prose
(run 3's rows), the warm arm moved to per-page warming (run 3's rows), and the
off-page count moved from an exact-string test to "did the workshop's own refusal
reach the reader" (run 1's rows). Two of the three are why runs 1–3 are
`schema_version` 1.0 and are not comparable with runs 4–9; `README.md` says so at
the top.

---

## 3. What the floors are not

They are **mechanical**. Passing them means: every figure in every served
sentence appears verbatim in the article, every citation resolves to a real
section of it, nothing from the redaction vocabulary reached a reader, and every
unanswerable question came back refused. None of that is a claim that an answer
was **good**, useful, or well written. There is no judge in this bench and no
quality figure in this kit.
