Skip to content

battery provenance: a recorded pool, a prereg that prices the extraction term, and three limits on the existing reads - #53

Merged
fathomlab merged 1 commit into
fathom-lab:mainfrom
heyzoos123-blip:feat/battery-provenance
Sep 1, 2026
Merged

battery provenance: a recorded pool, a prereg that prices the extraction term, and three limits on the existing reads#53
fathomlab merged 1 commit into
fathom-lab:mainfrom
heyzoos123-blip:feat/battery-provenance

Conversation

@heyzoos123-blip

Copy link
Copy Markdown
Contributor

What is now measurable that was not

The 462-concept battery every read in papers/disjoint-worlds/ is scored over is a hand-authored string literal — _BANK at run_g0clear.py lines 31-65, 465 whitespace-separated words typed into the source. Its entire filter chain is lines 66-67: an order-preserving dedup that removes exactly three words (chicken, orange, mushroom, each written into two of the author's own category blocks). 465 becomes 462, and nothing else touches it.

Because no candidate pool was ever recorded, the extraction term for those reads — the share of candidate concepts that survived into the scored set — is not computable retrospectively. There is no rejection log, no source corpus, no seed to replay. This PR does not try to recover that number. It makes the term computable going forward and records what the missing artifact costs.

build_concept_pool.py + concept_pool.json — a pool that exists before the selection.

stage rule in out removed
POOL distinct case-folded whitespace tokens of wikitext-103-raw-v1 train, pinned at revision b08601e0, CC BY-SA 3.0 547,373
F1 ASCII-alphabetic 547,373 454,204 93,169
F2 length 3-14 454,204 444,984 9,220
F3 corpus frequency >= 500 444,984 11,359 433,625
F4 not a scikit-learn ENGLISH_STOP_WORDS function word 11,359 11,101 258
F5 not proper-noun-dominant (cap share < 0.5) 11,101 8,318 2,783
F6 single-token in all four target tokenizers 8,318 7,819 499
F7 not an inflection of a surviving base 7,819 5,199 2,620
F8 exact duplicate — the only filter the 2026-08 chain has 5,199 5,199 0
SELECT seeded uniform sample, seed 52 5,199 462

Survival ratio 462 / 547,373 = 0.00084403; sampling fraction 462 / 5,199 = 0.088863. Every filter records its rule, why it exists, what it costs, its removal count, and a sha256 of its survivors. Deterministic and byte-reproducible — verified by re-running under different PYTHONHASHSEED values and comparing bytes, and the receipt is written with LF endings so it reproduces off Windows too. CPU only, no weights loaded, four cached tokenizers.

Filter costs are stated rather than implied. F4 would refuse fire and back; F5 removes brown, academy, abbey, admiral, march; F7 removes early because ear survives. F6 — the filter the old chain lacks entirely — would have refused 35 of the existing 462 words, including 6 of its 70 held-out concepts.

PREREG_b52_pooled_battery_2026_09_01.md — reruns the read on that battery and reports E beside it. Seven gates, each with a declared power basis and a stated meaning; a total outcome table (all 128 combinations covered, verified by brute force); six null cells under a composition-checked maximum; a fresh split seed with a measured freshness gate rather than an asserted one; and a two-sided reproduction gate requiring the pooled gemma read to land within 0.15 of the published 0.7857 — a bar derived from the binomial standard error at n=70, not chosen. All eight outcome branches, the smoke path, and the composition guard were exercised through styxx.protocol against synthetic inputs; the prereg parses with zero undeclared power bases and zero vacuous gates.

If the pooled battery does not reproduce the read, the prereg names that as the most informative outcome the design can produce and commits to publishing it as a finding.

The existing reads are bounded, not overturned

ADDENDUM_battery_and_holdout_limits_2026_09_01.md records three limits, each verified against the committed code rather than taken on trust. Its first paragraph says plainly that the reads stand: 0.7857 and 0.5714 were computed by committed code, against gates frozen before the runs, with nulls at or near chance. Nothing here contradicts a number. What the limits do is narrow the population those numbers describe.

  1. Selection provenance is unrecorded. E is UNCHECKABLE retrospectively — the verdict, not a defect claim. The stated ancestor is a 121-word parent bank in run_thought_transfer.py, while the docstring and the parent_baseline.N receipt field both say 110; 341 words are net new with no recorded rationale.
  2. The held-out set's held-out-ness has been spent. The split_concepts(seed=0) FIN-70 set is scored across nine committed experiments, two more than reported — run_g0_stage1 and run_g0_stage1b also score it. The map is never fitted on it, and the two headline reads (run_b31v2, run_b34v3) use it only for scoring. But three write-side scripts select a hyperparameter on a slice of it (lock_dose(fin[:5]), dose_pool = fin[:8], and N_NATIVE_SEL = 12 explicitly commented "held-out concepts used to pick the steer-optimal layer"), always on native target directions. Seventeen scripts read layer 11 / k 150 out of g0clear's receipt, selected on SEL_dirs — of whose 69 concepts 60 sit in b34v3's seed-343 training set and 9 sit in its held-out set, so the "sits inside the training set" formulation is true of 60 of 69 and the precise version belongs in the record.
  3. The "open vocabulary" readout is a closed list. run_b35c.py line 46 builds vocab = fin + tr — the same hand-typed 462 — and scores each query by argmin over all of them. That is a 462-way closed-set identification. Being fair: the code's docstring and the prereg both say so explicitly, and b35c_result.json returned INVALID__null_artifact, so no open-vocabulary claim is published from it. The overclaim is in the name.

The addendum also records where the arc caught itself first, at the same length as the criticisms: b34v3_fresh_split_addendum.json persisted a 13-of-70 overlap that falsified its own frozen prereg's disjointness assertion — we reproduced the split independently and got 13, matching exactly — and published the read recomputed on the 57 genuinely-unseen concepts rather than burying it.

Scope of the diff

New files only. git status before commit showed four untracked additions and zero modifications. No paper, receipt, certificate or seal is touched; nothing under .github/ is touched; run_g0clear.py and its 462-word battery are unchanged, and the 2026-08 battery is not regenerated. papers/AUDIT_the_whole_program_2026_09_01.md and papers/INDEX_program_map_2026_09_01.md are left to the concurrent feat/program-audit branch.

Not merging. A human decides.

🤖 Generated with Claude Code

…ion term, and three limits on the existing reads

The 462-concept battery every disjoint-worlds read is scored over is a hand-authored
string literal (run_g0clear.py:31-65, 465 words) whose entire filter chain is one
order-preserving dedup removing three words (:66-67). No candidate pool was ever
recorded, so the extraction term for those reads is UNCHECKABLE retrospectively.

New files only. No paper, receipt, certificate or seal is touched, and run_g0clear.py
and its 462-word battery are unchanged.

- build_concept_pool.py / concept_pool.json — a pool that exists BEFORE the selection.
  547,373 candidate types drawn by a stated rule from wikitext-103-raw-v1 pinned at
  revision b08601e0, then eight named filters each recording rule, why, cost, removal
  count and a sha256 of its survivors. Battery is a seeded sample (seed 52) of the
  5,199 survivors. Survival ratio 462/547,373 = 0.00084403. Deterministic and
  byte-reproducible across PYTHONHASHSEED and platform line endings. CPU only; no
  weights loaded, four cached tokenizers.

- PREREG_b52_pooled_battery_2026_09_01.md — reruns the read on that battery and
  reports E beside it. Seven machine-scored gates with declared power bases, a total
  outcome table, six null cells, a fresh split seed with a MEASURED freshness gate
  (the b34v3 lesson), and a two-sided reproduction gate at 0.15 derived from the
  binomial SE at n=70. Commits in advance to publishing a failure as a failure.

- ADDENDUM_battery_and_holdout_limits_2026_09_01.md — three limits that BOUND the
  published reads without overturning them. Selection provenance unrecorded; the
  seed-0 FIN-70 set scored across nine committed experiments (two more than reported);
  the "open vocabulary" readout is a 462-way closed set over the same literal.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@fathomlab
fathomlab merged commit a39b46d into fathom-lab:main Sep 1, 2026
3 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants