# PREREG-INDEX — every artifact the prereg names, with its sha256 at the freeze

*Round `two-frontiers-r1`. The sha column is written by `python3 harness/index_shas.py --write` and CHECKED by `--check`. PREREG §0: this file is committed BEFORE any arm answers a scored prompt; a hash that moves afterwards is a re-registration with its own commit, and the old one stays in history.*

*`ABSENT` is a file that does not exist yet (the substituted bank, the drawn fixture) — never a zero hash. `PENDING` is a row nobody has computed. Paths outside this repo are READ-ONLY instruments, hashed so "unchanged since August" is checkable.*

| id | what it answers | path | sha256 |
|---|---|---|---|
| `prereg` | the prereg itself | `prereg/PREREG-TWO-FRONTIERS.md` | `7d65882b6aee79590cba7613e121e125d41b681e942c76429daf02b1398b56e6` |
| `prereg-public` | the PUBLIC copy of the prereg that ships in the kit (A4.3: the human co-signer's name, the port and home paths described) | `prereg/PREREG-TWO-FRONTIERS-public.md` | `9c1d43b5ef4854112d395f4ddc5534f3dd01cc6c3ea8eb5013d83c5e9e91cd6c` |
| `plan` | the plan v3 the prereg is drawn from | `PLAN.md` | `ecbf5ee64da1a86ca7ee0ff2f00e9e46c7872f758c318bc6a7175b04a6da0345` |
| `roster` | the roster send() reads | `prereg/rosters.json` | `8cebe204ff60a0da73adab9ce46de292b060bd1e9d98a339158bdeb2300c6df9` |
| `panel` | the seven seats (PREREG §7 + amendment A1) | `prereg/panel.json` | `9d6548db5e03ec832515255defb86060712fd858f59a1d899e02946b98251cbe` |
| `legC-seed` | the Leg C seed and when it was drawn | `prereg/legC-seed.json` | `9036220a64be7efcf2b9d9f334dc8b7152016cf335e2c2a04937b293e0a1967f` |
| `bank-august` | the FROZEN August bank (read-only; registered sha cdffb8d0…) | (a read-only instrument outside the repo; its sha256 is beside) | `cdffb8d0850aa93548c20e41953d11fb2a6e0b025d599db2eb6a8d3b2a2bfbf5` |
| `bank-r1` | the round's bank: 26 canonical asks verbatim + 34 substituted queries | `golden/offload-bank-r1.json` | `35af6dc53b0b9d7dcc4a97dfa888b9c40cfd1d49c557f476b10581f73a419305` |
| `legA-queries` | the substituted queries, as published in the kit | `golden/legA-queries.json` | `da86ee292ca6666648cf64c1e064d872ced044daa21cfcc78fe7fc2aae09442a` |
| `legC-needles` | the drawn needles and absent topics | `golden/legC-needles.json` | `7440beee268378c9b1051a4375d26d5a93a9333f2113016231aac0c68b70552e` |
| `legC-fixture` | the 36-item grid (stamps its own sha too) | `golden/legC-fixture.json` | `9f97278d8c1db0824eab00bc19ef951560b58617f1a81dadf148f2f0f2ecfa4a` |
| `filler` | the Leg C filler (Project Gutenberg #53881, public domain, read-only) | (a read-only instrument outside the repo; its sha256 is beside) | `7927555a91c2f6f5c6c03b84eca313531389d92dbaf5ae3c5a23d025bccf2567` |
| `answering` | the copied the rules engine.answering symbols (source sha in PROVENANCE.md) | `harness/answering_frozen.py` | `d1352b0fd15b5bf49aa93a6228427c6c271ba850f29e336883aed068cfbae6af` |
| `design` | the FLOOR TEXT every Leg A floor is read from | `harness/BENCH-DESIGN-offload.md` | `23f32aba95fff6373b1a5e8d2d758cec077e6e9cdbd0466081888fd82625c920` |
| `bench_lib` | the bank fence and the prompt assembly | `harness/bench_lib.py` | `94a68fa87868b6e07754f6fe3b5a7f754f7338d55a689b3c6419139c65214d17` |
| `score` | the Leg A gate scorer | `harness/score.py` | `40b4d723473099b24c08c084939803478b29025eff577d7667da67354d73919a` |
| `bill_build` | the bill in four cost states, from the records on disk | `harness/bill_build.py` | `03f65aa75904e34894920daf21c519d99f7f003c79e8ed60b39e6e6cef64620e` |
| `legA_run` | the Leg A runner | `harness/legA_run.py` | `2204ddf9feae3d42eb3b38f11eb929eba714aa4da798579fbb63d6acc89d4e20` |
| `legA_substitute` | the query-substitution builder | `harness/legA_substitute.py` | `b08c29593706eedc7f99e2e8a25cf8bf5fc2d0e2fc09c7b8fdbe775750d853e6` |
| `legA_judge` | the G4 judge path | `harness/legA_judge.py` | `090dc7ada1025a736acc3f3515e861396ab5caba0d2c0c92ca9c3511b4cc829c` |
| `judge_seats` | the panel, the blind, and one judged call | `harness/judge_seats.py` | `3175dfbff73a32a15beee0febfba89c6ffd2cd7b336cf89db345b3789873c842` |
| `judge_run` | the byte-frozen G4 judge prompt's source | `harness/judge_run.py` | `c821ed84da7a2289a26b225f1a655b67aaa32729dcd8ecda73d3b7edb6bed2cb` |
| `pairwise_build` | the Leg H sheet builder | `harness/pairwise_build.py` | `c8e8e4b5b568ff74edffa53750d0c9f864d658ce9bc045f9364406e5e95ad8eb` |
| `pairwise_run` | the Leg H judge driver | `harness/pairwise_run.py` | `1943977cf2aa549f2c186905ea6ed240fab2d3b634cccb7e78163b7b613ab3ba` |
| `pairwise_score` | the Leg H scorer (no Bradley-Terry) | `harness/pairwise_score.py` | `7c434278ca55c96bd8aa9881a2866dde4ef1e6860013c6dec4d8880b49996c28` |
| `gen_needles` | the needle draw and its screens | `harness/gen_needles.py` | `0609d235898902829a8b9bafa50a9e6799ab98dffc19708458a46acdaf4f5775` |
| `forbidden_literals` | the screen's rules — every alternative of the hub's publication gate, plus this round's own | `harness/forbidden_literals.txt` | `9f9beb2e303a7bb957bd95c8ffdd9f27a98e8dcd873a8857986b228404588ea2` |
| `screen_literals` | the screen's loader and its gate-coverage prover (records the gate's sha256) | `harness/screen_literals.py` | `f600a4e6bd9493981bf5ebee3881cd204e9456404df022409f887d67803ccf34` |
| `blind_screen` | the blind's vocabulary and its two scopes, checked at every judged call | `harness/blind_screen.py` | `65693bc74726ddc67f9401a911987620b213aa2efb8f28f3b9a2c11c9283e166` |
| `card_screen` | the kit's Luhn screen for card-shaped numbers | `harness/card_screen.py` | `893e6db3fb05c9d6d1d8945e1f31f267b98ab65888a939232009f127155181a5` |
| `build_fixtures` | the Leg C fixture builder | `harness/build_fixtures.py` | `d7020747159d7bc8669d99512d8a1db81bc1bd467e1b4c78280c293224adf572` |
| `legC_run` | the Leg C runner | `harness/legC_run.py` | `b4626270ca144b9ab1d857c20d24c4db967ddbe4b55342e0376c9f643936dbb1` |
| `legC_score` | the Leg C scorer and its self-test | `harness/legC_score.py` | `473669097ca70ce57befcb4d8e9dfc951c02cdbff598c023d249aef0aaabb5de` |
| `send` | the ONE call surface (L1) | `harness/send.py` | `1865a25ebeb1c76430e886ad6185c3e63d07270aaf1afb2086d6a8fdc729933e` |
| `sample_record` | the ONE record shape (L1) | `harness/sample_record.py` | `0a969fee8255e00e631ebc52bbe6283be7ecb3926662fe0d121ff2890bc2061d` |
| `claude_cli` | the sealed CLI driver (L1) | `harness/claude_cli.py` | `8b8e6ee383506eb9d4adfe8e011d5aac58c564d5015f61a9dabfab78c7977430` |
| `openai_api` | the hosted API transport (L1) | `harness/openai_api.py` | `bd3eda587f079e692fe6c559030f53aca3679bb9829b5fa6e8e1cd5037e32407` |
| `local_ollama` | the local seat's client (L1) | `harness/local_ollama.py` | `69ec62e614e921d17252a6fb80a4d53883be6cb188ec666d1ecc222d5e23a6b5` |
| `cloud_api` | the judge seats' transport (L1's copy) | `harness/cloud_api.py` | `028e16f59ecff0ecbaa7a615fb02127d2e24f2ddf1b243ee6c997b3f73789e24` |
| `spend_cap` | the caps that bite (L1) | `harness/spend_cap.py` | `dc17d24239a5b661ec4b378e7609b12747c93529437c5c9d1071332385a00848` |
| `probes` | the gate probes (L1) | `harness/probes.py` | `0d61bdada872e9c13d84a2fdb0ca3c8a9423e24d5cf56f8f28e3536aa330f7e5` |
| `prereg_integers` | every registered denominator | `harness/prereg_integers.py` | `e2163dcfd2afe04c7557f9b5ffa2908d5504e65e35291cb07ee54c5a00c0826d` |
| `design_floors` | the floor reader | `harness/design_floors.py` | `20f9ea7562d517f001890f9b280b78f642d830060b0f9b16ef08982a557c4cf5` |
| `registration` | the roster's registration values, read by name | `harness/registration.py` | `d8a4dd54e5c761f3310060ee979f028226945a363dbc6019c6f1b0dba3bde282` |
| `report_build` | REPORT-FULL.md | `harness/report_build.py` | `6e5ad4093463919af9f25a7e2e2342af92a2ec0ced6db3471bcba79365f2e6f1` |
| `kit_build` | the s2s-bench-v1 kit | `harness/kit_build.py` | `604e7c8ca426a03335df54e1fda9d6ed7282d418d48683b78868345b14921757` |
| `provenance` | every copy, with its source sha | `harness/PROVENANCE.md` | `c167ee408c426ba9b931eaa220f6b30c078d47eef2f118b0894e6f6a4b1765db` |

*47 of 47 artifacts exist at this writing; 0 print ABSENT.*

**The the rules engine pin** (PREREG §4): `answering.py` sha256 `9a3d783bfb78ee775ec8f28a93fba5c7f3900f6630fc2e91a85b3541aeab4e24` at commit `73df01611fca724eb20d5e0fa25ff21e968dc0f2`; the copy in this repo is `harness/answering_frozen.py` and `sha256(PROMPT_TEMPLATE)` is `0fb521000f038a047b8694ee0812577d12b67771ffaea3c9274afddbfe8db574`.

## Post-seal drift, by design (2026-09-05, PREREG A16-A20)

The shas above are the shas AT THE FREEZE and are not rewritten. `python3 harness/index_shas.py
--check` disagrees with the tree on **eleven rows**, and that disagreement is the receipt that
report-only amendments were appended after the seal (tag `seal-r1`, the window's close
2026-09-05T18:15:00Z). This section is regenerated from the checker's own output, in its order, one
line per disagreeing row with the amendment that moved it; every attribution below was checked
against `git log --oneline -- <path>`, and for each of the nine scorer rows the sha in the table
above is the file's sha AT THE SEAL COMMIT, so the commits after that commit are the drift exactly.

- `prereg` — **A16, A17, A18, A19 and A20 appended** to the sealed file after its row was recorded (the recorded sha is the file at the A15 commit; commits 6af20b4, fbad3a8, 237c398 and this fold). The document grows at its foot; nothing above the amendment list moves, and the sealed sha of the run is A15's.
- `prereg-public` — re-cut BY CODE at **A16 (6.1)** (commit 3f2f7c8), again at **A19 (5)** (237c398), and again here with A20 appended: it is a function of the sealed file, so every amendment to that file moves it. Its cell in the table above is a REGION sha rather than a file sha — the note below says so.
- `score` — **A16 (2)**, Leg A's two abstention ratios name their cases (c90bcec); **A17 (1)**, `G5b.served_by` on the fallback rows (fbad3a8); **A19 (4)**, the no-mode count over the cases an arm has at least one reply on (237c398).
- `bill_build` — **A16 (5)**, the cached-input tokens and the registered caps (239e6f7), the total rounded once from the unrounded rows (f54533b, fbad3a8); **A20 (3)**, `records_window` over the records the bill sums.
- `legA_judge` — **A16 (3)**, G4's recognition claims checked against the key (0191e7d); **A19 (1)** and **(2)**, the shared recognition flag and the aggregation rule with its unanimously-grounded count (237c398).
- `pairwise_score` — **A16 (4)**, the head-to-head prints its collection per seat (3c9d9b4); **A19 (1)** and **(4)**, the shared recognition flag and the per-case shape in place of the word "narrowly" (237c398).
- `legC_score` — **A16 (1)**, the filing cabinet counts over the items COLLECTED, with the registered item count and the NOT-COLLECTED count beside them (07b07d4).
- `sample_record` — **A19 (1)**, `recognised_flag` moved here so both judged legs read a seat's flag the way the seats write it (237c398).
- `design_floors` — commit 1720e1f, 18:39Z: eleven minutes after the seal and nine minutes before A16 registered the class it belongs to. `describe()` re-joins a floor sentence the frozen design text hard-wraps, so the page never prints one cut at the wrap. Rendering only — no floor VALUE moves.
- `report_build` — commit e4ff668, 20:35Z, five minutes before A17 was stamped: one egress-matrix row label reads "211k tokens per full pass over the 60 cases" where it read "tokens/pass". **A17 (2)** registers this file's own withheld row in the kit.
- `kit_build` — **A16 (6.1-6.7)**, the public copy cut by code, the receipts, the harness files, the counting rules and the voice (3f2f7c8, 67f0b22, 71843d8, 99e575c); **A17 (2)**, the withheld list names the rows files and the report builder (fbad3a8, be0fcb1); **A18 (3)/(4)**, a withheld row's freeze clause looked up rather than templated (b9ab292); **A19 (3)**, the judged legs' trees indexed (237c398); **A20 (1)** and **(4)**, the port rule and the port scrub, and the face-note below.

The post-seal shas are in the kit's own `index.json`, whose `post_seal_reporting_additions` names
every amendment stamped after the seal with the stamp its own bullet carries, read from the sealed
file rather than typed. No floor, no gate and no verdict moved; the lane report
`plan/LANE-REPORT-KIT-AND-SCORERS-V2.md` §3 lists every changed json path with its reason.

- `prereg-public` — re-cut 2026-09-05 under PREREG A19 (5): the first cut described one production port and printed the other; this cut describes both and its opening sentence reads "port numbers". First-cut region sha `7ae1c1f18b83f65fe6e5520b2ebb334f80b008c7145adde985c0dda54a9e3ee3`; this cut `9c1d43b5ef4854112d395f4ddc5534f3dd01cc6c3ea8eb5013d83c5e9e91cd6c` (the region through A3, as the byte-identity test reads it). The sealed file is unchanged.
