memory: snapshot — McCarthy and Krakauer D1 built, Krakauer's quotation scope is an open operator call
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
# `[2026-09-17]` McCarthy and Krakauer D1 — both corpora built, and one of them should not be trained yet
|
||||
|
||||
Operator picked **both** after the library survey. McCarthy first, because the splitter work
|
||||
is shared and he is the cleaner author.
|
||||
|
||||
| corpus | units | words | where | guards |
|
||||
|---|---|---|---|---|
|
||||
| **lv-mccarthy** | 167 | **584,756** | `~/mccarthy-corpus` | style ✅ name ✅ |
|
||||
| **lv-krakauer** | 126 | **422,880** | `~/krakauer-corpus` | name ✅ (2 allowed) · quotation ⚠ UNRESOLVED |
|
||||
|
||||
Commits `705fa3a` (splitter) `f3bf3ca` (McCarthy) `4be0630` (Krakauer).
|
||||
|
||||
## The shared blocker: a splitter that chooses by SIZE
|
||||
|
||||
`scripts/r49-corpus/split_units.py`. The inherited rule was "most units above a floor", and
|
||||
it is wrong for any book whose markers are PARTS:
|
||||
|
||||
```
|
||||
Cities of the Plain 4 roman marks -> 4 units, median 22,312w
|
||||
The Crossing 4 roman marks -> 4 units, median 37,310w
|
||||
```
|
||||
|
||||
"Most units" scores 4 over the 1 that finding-nothing gives, so it wins, and the existing
|
||||
guard only fires at exactly one unit. Now: a mode qualifies only if its median unit is inside
|
||||
**[600, 12000]** AND no single unit holds half the work; among qualifying modes **priority**
|
||||
breaks the tie (contents > chapter-word > roman > bare-numeral > caps-title). Works with no
|
||||
divisions fall back to **paragraph-block sections** at ~3,000 words, cut on block boundaries.
|
||||
|
||||
⭐⭐ **BOTH RULES EXIST BECAUSE A CONTROL RUN CAUGHT THEM, and the first version was worse
|
||||
than what it replaced.** Scoring eligible modes by "median closest to target" chose
|
||||
`caps-title` over the real chapters of Hemingway's *True at First Light*:
|
||||
|
||||
```
|
||||
bare-numeral 20 units median 5,337w max 11,155 <- the book's own chapters
|
||||
caps-title 6 units median 777w max 113,886 <- median looked BETTER
|
||||
```
|
||||
|
||||
Five stray all-caps lines gave five tiny units beside **one holding 97% of the book**. A
|
||||
median cannot see that distribution; a max bound can. Controls now green both ways: 8/10
|
||||
Hemingway works reproduce the shipped mode and unit count exactly (the two differences are
|
||||
`contents`, which the harness does not supply, and The Old Man and the Sea, deliberately kept
|
||||
whole), and 40,000 words with no blank lines returns **1 unit** rather than fabricating
|
||||
sections.
|
||||
|
||||
⚠ The Hemingway builder is deliberately NOT repointed at this module. Its corpus is shipped
|
||||
and its sha is pinned by a live adapter.
|
||||
|
||||
## lv-mccarthy — the job was protecting a style that reads as damage
|
||||
|
||||
```
|
||||
quote marks 0.0 per 10k (Hemingway 838)
|
||||
apostrophes 123 per 10k (Hemingway 241) `dont` `aint` `wont` `didnt`
|
||||
semicolons 0 per 10k
|
||||
```
|
||||
|
||||
⚠⚠ **`repair_typography.py` MUST NOT be run on this corpus.** It normalises "toward what the
|
||||
text does" and would put the quotation marks back, deleting the single most identifiable
|
||||
thing about the author before training starts. The builder runs no normalisation and then
|
||||
**asserts** the quote density, so a future well-meaning change fails the build.
|
||||
|
||||
⚠ **AND IT MAKES THE VOICE GATE EASY TO PASS FOR THE WRONG REASON.** `voice_distance.py` is
|
||||
Burrows's Delta over CHARACTER BIGRAMS. An adapter that learns only "emit no quotation marks"
|
||||
moves delta_cb a long way without having learned a sentence. **Pre-register a
|
||||
punctuation-normalised secondary read before gating lv-mccarthy**, the same way the pairwise
|
||||
floor rule was pre-registered for Hemingway.
|
||||
|
||||
Other measured work: two truncated catalogue rows dropped for complete mobi siblings; all 15
|
||||
cross-work containment pairs measured (worst **0.10%**, no subsumption); back matter in 4 of
|
||||
6 works, different marker each time, carrying the author's own name 26 times → **0**; one
|
||||
lost drop cap (`HE CANDLEFLAME`) patched by name with an assertion rather than a heuristic;
|
||||
alphabet re-derived at 1,411 non-ASCII letters across 14 forms (the Border Trilogy is half
|
||||
set in Mexico).
|
||||
|
||||
⚠ **The back-matter strip runs BEFORE the split for McCarthy**, inverting the Hemingway
|
||||
order. Blood Meridian and The Crossing end with a dumped table of contents made of bare roman
|
||||
numerals on their own lines — the exact shape of a chapter marker. Only the 150-word floor
|
||||
saves the current build by accident.
|
||||
|
||||
## lv-krakauer — builds clean, and the open question is not technical
|
||||
|
||||
⭐ **THREE DEFECTS THE NAME GUARD CAUGHT**, none of which the build would otherwise report:
|
||||
|
||||
1. **Back matter searched only the LAST unit.** Where Men Win Glory's ACKNOWLEDGMENTS sits at
|
||||
94.8% and the splitter made 41 units, so the apparatus landed in unit **37**, with NOTES
|
||||
and BIBLIOGRAPHY after it — all past a strip that only looked at unit 41. Into the Wild
|
||||
kept its acknowledgments *and* a full-page advertisement for another of his books.
|
||||
2. **Relying on the splitter to drop front matter did not work.** Units begin at the first
|
||||
heading mark, and in two works the ebook's table of contents sits above the author's note,
|
||||
handing the splitter a `Chapter Thirty-Two` to start on — so unit 1 swallowed the whole
|
||||
apparatus including its signed `Jon Krakauer , February 2015`.
|
||||
3. ⭐ **Zero was the wrong bar.** 21 survivors became 2, and both were read: `Lewis Krakauer
|
||||
loved his five children deeply` is Krakauer writing about his own father in Into the
|
||||
Wild's two autobiographical chapters, and the other is a reader's letter he quotes calling
|
||||
him a kook. **Hemingway's own name in his corpus was always publisher apparatus, so 0 was
|
||||
right there; this author writes about himself.** Pinned at 2, every survivor printed.
|
||||
|
||||
⚠ Both strips are **windowed in the opposite direction from McCarthy's** — front matter cut
|
||||
at the author's signature inside the first 10%, back matter at the earliest apparatus marker
|
||||
inside the last 25% — because Krakauer's `ALSO BY` / `Copyright` / `About the Author` sit at
|
||||
0.0–0.6% of the file and an earliest-marker rule would cut 99.9% of the book.
|
||||
|
||||
## ⚠⚠ THE OPEN CALL: an unmeasured fraction of Krakauer is not his prose
|
||||
|
||||
He quotes constantly and at length — McCandless's journals and letters, Tillman's diaries,
|
||||
court transcripts, depositions, nineteenth-century Mormon documents, newspaper reports, and
|
||||
whole paragraphs of Jack London, Wallace Stegner and Thoreau at the chapter heads. In print
|
||||
those are indented or italic. **The extraction lost both**, so in the master they are
|
||||
ordinary paragraphs, indistinguishable from his own sentences by any signal available.
|
||||
|
||||
Only **52 words** were removable — chapter-head epigraphs whose all-caps attribution line
|
||||
survived. That is **0.01%, and it is not the answer**: the method would report 0.0% for a
|
||||
book made entirely of undated block quotes. The floor is the finding, not the number.
|
||||
|
||||
This is the same error as excluding *The Torrents of Spring* from Hemingway — another
|
||||
author's style under the target's name — **distributed rather than concentrated**, and the
|
||||
fraction is unknown. Scope is the operator's call exactly as fiction-only was. D2 for
|
||||
Krakauer is the only thing waiting on it.
|
||||
|
||||
Related: [[2026-09-17-lv-hemingway-gate]], [[2026-09-16-lv-hemingway-corpus]],
|
||||
[[2026-09-17-lv-bronte-gate]].
|
||||
+36
-1
@@ -1,6 +1,6 @@
|
||||
# Persistent memory — eshpfi-management
|
||||
|
||||
_Last updated: 2026-09-17 ~03:40 PT (lv-hemingway SHIPPED on ckpt850 — the line's strongest voice pass; the axis-B negative control was found to be the wrong one and replaced with the author's own self-similarity; the floor rule went pairwise, which retroactively passes lv-bronte.)_
|
||||
_Last updated: 2026-09-17 ~08:30 PT (lv-hemingway SHIPPED; the floor rule went pairwise, which retroactively passes lv-bronte; McCarthy and Krakauer D1 corpora BUILT — Krakauer's quoted-material scope is an open operator call.)_
|
||||
|
||||
> **Always check for `/tmp/infra-ops-handoff.md`** — if it exists and its
|
||||
> `Written:` stamp is under **8 hours** old, read it (it carries the in-flight
|
||||
@@ -133,6 +133,36 @@ gap vs a 0.113 floor) so the tiebreak fell to the resolving axes, and 850 wins a
|
||||
(2.3x tighter spread, lower memorisation, less ran-on, half an epoch less overfit).
|
||||
**The two-epoch recipe is now 0 for 2.** Read the curve; prefer the earlier tied checkpoint.
|
||||
|
||||
### BUILT — `lv-mccarthy` and `lv-krakauer` D1 corpora (operator: "both", 2026-09-17)
|
||||
|
||||
| corpus | units | words | notes |
|
||||
|---|---|---|---|
|
||||
| **mccarthy** | 167 | **584,756** | `~/mccarthy-corpus`, 6 novels, both guards PASS |
|
||||
| **krakauer** | 126 | **422,880** | `~/krakauer-corpus`, 4 works, ALL NON-FICTION |
|
||||
|
||||
Shared blocker solved first: `scripts/r49-corpus/split_units.py` picks a unit mode by SIZE
|
||||
not count (the inherited "most units" rule gave Cities of the Plain 4 units of 22,312w — the
|
||||
book's PARTS), and falls back to paragraph-block sections for works with no divisions.
|
||||
→ `persistent-memory.d/2026-09-17-mccarthy-krakauer-d1.md`
|
||||
|
||||
⚠ **McCarthy's voice IS missing punctuation** — 0.0 quote marks/10k against Hemingway's 838,
|
||||
and `dont`/`aint`/`wont`. `repair_typography.py` MUST NOT be run on that corpus; the builder
|
||||
runs no normalisation and asserts the quote density so a future change fails the build.
|
||||
⚠ **And delta_cb is a char-bigram metric**, so an adapter that learns only "emit no quotes"
|
||||
will pass the voice axis without learning a sentence. **Pre-register a punctuation-normalised
|
||||
secondary read before gating lv-mccarthy.**
|
||||
|
||||
### ⚠ OPEN, OPERATOR'S CALL — is lv-krakauer's corpus trainable at all?
|
||||
|
||||
An **unmeasured and unmeasurable** fraction of it is other people's prose: McCandless's
|
||||
journals, Tillman's diaries, court transcripts, depositions, Mormon documents, paragraphs of
|
||||
Jack London and Stegner. Print set those as indented/italic block quotes; **the extraction
|
||||
lost both**, so they are ordinary paragraphs now. Only **52 words** were removable (epigraphs
|
||||
with a surviving attribution line) — 0.01%, and that number is NOT the answer: the method
|
||||
would report 0.0% for a book made entirely of block quotes. Same error class as excluding
|
||||
*The Torrents of Spring* from Hemingway, distributed rather than concentrated. Scope is the
|
||||
operator's call exactly as fiction-only was. **Nothing is blocked on it but D2.**
|
||||
|
||||
### OPEN for the operator — two measured defects, neither acted on
|
||||
|
||||
1. **Hemingway's TRAIN beats carry the source-name leak: 70 of 7,094 (0.96%)** (Santiago x16,
|
||||
@@ -177,6 +207,11 @@ before this session began. ⚠ **Do NOT commit them** — untouched and delibera
|
||||
|
||||
## Recent decisions
|
||||
|
||||
- `[2026-09-17]` ⭐⭐ **A unit splitter must choose by SIZE, not by count — the inherited rule silently produced 22,000-word "chapters".** `scripts/r49-corpus/split_units.py`: a marker mode qualifies only if its median unit is inside [600, 12000] AND no unit holds half the work; among qualifying modes PRIORITY breaks the tie (contents > chapter-word > roman > bare-numeral > caps-title), and paragraph-block sections are the fallback for works with no divisions. ⭐ **Both rules exist because a control caught them**: scoring by "median closest to target" chose `caps-title` (6 units, one holding **97%** of the book) over True at First Light's real 20 chapters, because a median cannot see that distribution and a max bound can. Positive control: 8/10 Hemingway works reproduce the shipped mode and count exactly. Negative control: 40,000 words with no blank lines → 1 unit, refuses to fabricate divisions. Commit `705fa3a`.
|
||||
- `[2026-09-17]` ⭐ **lv-mccarthy D1 built — 167 units, 584,756 words — and the whole job was protecting a style that reads as damage.** 0.0 quote marks per 10k (Hemingway 838), `dont`/`aint`/`wont`. The builder runs NO typography normalisation and asserts the quote density afterwards. Two truncated catalogue rows dropped for complete mobi siblings; all 15 containment pairs measured (worst 0.10%); back matter in 4 of 6 works carried the author's name 26 times → 0. ⚠ The back-matter strip runs BEFORE the split here — Blood Meridian and The Crossing end with a dumped TOC of bare roman numerals, the exact shape of a chapter marker. Commit `f3bf3ca`.
|
||||
- `[2026-09-17]` ⭐ **lv-krakauer D1 built — 126 units, 422,880 words — and its name guard caught three defects nothing else would have reported.** Back matter searched only the LAST unit while the apparatus sat in unit 37 of 41; relying on the splitter to drop front matter failed because the ebook TOC sits above the author's note and gave it a `Chapter Thirty-Two` to start on; and **zero was the wrong bar** — 2 survivors are Krakauer writing about his own father in Into the Wild's autobiographical chapters, so the allowance is pinned at 2 with every survivor printed. ⚠ Both strips are windowed in the OPPOSITE direction from McCarthy's, because Krakauer's `ALSO BY`/`Copyright`/`About the Author` sit at 0.0–0.6% of the file. Commit `4be0630`.
|
||||
- `[2026-09-17]` ⚠ **`triage_disposition = 'accepted'` in the Kvasir catalogue does NOT mean the extraction succeeded.** Blood Meridian's epub row holds 1,167 words of a 117,000-word book, The Crossing's 222 of 150,000 — real prose, real titles, accepted. Faulkner's *The Mansion* is 39 words. `near_dup_pairs` holds ONE row in the entire 1,284-work library and is blind to a fragment beside its full sibling. **Word-count every master before trusting a row**, and note that word count alone cannot tell a truncated novel from a legitimately short work.
|
||||
|
||||
- `[2026-09-17]` ⭐⭐⭐ **lv-hemingway SHIPPED (ckpt850) with the line's strongest voice result — and the memorisation control it passed turned out to be the WRONG control.** Voice +0.413 delta_cb at 6.4x the floor, closing 73.8% of the achievable span (lv-bronte closed 48%). ⚠ `memorization_check.py` uses the base-unadapted arm as its negative control, but base writes 18,035 words of summary against the adapted arms' 27,413 of pastiche — **text that does not imitate the register cannot collide with its n-grams**, so a 0.00 there means "different register", not "did not memorise". The right reference is the author himself: **held-out Hemingway against the train split collides at 0.01 while the adapter does at 0.07**, so the comfortable "his plain register makes collisions inevitable" story is FALSE and was refuted rather than assumed. All 19 matched runs were READ: stock dialogue, max **9 words**, no proper noun — shorter than the 10-word run unseen Hemingway shares with the train split by coincidence. ⭐ **A negative control that differs from the candidate in a way correlated with the metric is not a control.** → `persistent-memory.d/2026-09-17-lv-hemingway-gate.md`
|
||||
- `[2026-09-17]` ⭐⭐ **The v2 voice floor is now PAIRWISE, and it retroactively passes lv-bronte.** lv-bronte's ckpt475 shipped as a voice-axis FAILURE at +0.193 against a 0.251 floor contributed entirely by ckpt925 — a third arm nobody was shipping, on one outlier seed. Scored against the arm it was actually compared to the floor is 0.091 and it clears at **2.1x**. The rule was changed **prospectively**, pre-registered for lv-hemingway before any Hemingway number existed, on an argument independent of the answer: the sampling variability of a difference A−B depends on A and B, never on a third arm C. The previous session found the defect and deliberately declined to exploit it; this follows from fixing it. lv-hemingway passes under **both** rules, so its verdict does not lean on the change. Caveats amended append-only in the compose, the NFS README and the gate record. Commits `0bb4938` `2e9b118`.
|
||||
- `[2026-09-17]` ⭐ **The beat-contamination leak IS present in Hemingway — 70 of 7,094 train beats (0.96%), 0 of 200 val.** `scripts/r49-corpus/audit_pairs_sourcenames.py` closes the blind spot `leak_gate.py` has by construction (it reads the corpus and the renamed copies, never the generated beats). Cross-validated on real data: the fixed Brontë pairs return 0 of 3,858 and `pairs-full.CONTAMINATED` returns 15 of 792 = 1.89% with the recorded names. `--filter-out` yields a verified-clean 7,024-pair set in one command; the retrain is the operator's call. **The val split being clean is why the gate could run at all.**
|
||||
|
||||
Reference in New Issue
Block a user