diff --git a/persistent-memory.md b/persistent-memory.md index 4b51ebb..7beba9b 100644 --- a/persistent-memory.md +++ b/persistent-memory.md @@ -1,6 +1,6 @@ # Persistent memory — eshpfi-management -_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.)_ +_Last updated: 2026-09-17 ~08:45 PT (lv-hemingway SHIPPED; floor rule pairwise, which retroactively passes lv-bronte; lv-mccarthy D1 built and proceeding; lv-krakauer PARKED — research is not a voice.)_ > **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 @@ -152,16 +152,17 @@ runs no normalisation and asserts the quote density so a future change fails the 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? +### ⛔ PARKED — `lv-krakauer` (operator, 2026-09-17). henge id **82** -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.** +*"he's a great writer because of his research, not because he has a strong identifiable +voice."* ⭐ **The reason is about the AUTHOR, not the data, and it reframes the selection +criterion for the whole line:** ask whether there IS a voice worth adapting before any +corpus work. That question was never asked here — corpus mechanics were investigated first. +→ auto-memory `feedback_voice_worth_adapting_before_corpus`. + +The corpus (126 units, 422,880 words) and its builder stay committed and re-runnable. What +would unpark it is a re-extraction preserving indentation and italics, which fixes the +unmeasurable-quoted-material problem but **not** the operator's objection. ### OPEN for the operator — two measured defects, neither acted on @@ -207,6 +208,8 @@ before this session began. ⚠ **Do NOT commit them** — untouched and delibera ## Recent decisions +- `[2026-09-17]` ⭐⭐⭐ **PARKED lv-krakauer, and the reason is a selection criterion the line was missing: ask whether the author HAS a voice before investigating whether the corpus is clean.** Operator: *"he's a great writer because of his research, not because he has a strong identifiable voice."* A voice adapter is worth its ~6 hours only if the target has a prose signature a reader could pick out blind; Krakauer's excellence is reporting, which an adapter cannot carry. I surveyed, built, measured containment and fixed three stripping defects before anyone asked the question that decided it. **For each candidate, say what the voice IS in one sentence and how it shows up in char-bigram space, before the first catalogue query.** henge id 82. → auto-memory `feedback_voice_worth_adapting_before_corpus`. + - `[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`. diff --git a/scripts/krakauer-corpus/build_corpus_krakauer.py b/scripts/krakauer-corpus/build_corpus_krakauer.py index 9e0750c..75c702b 100644 --- a/scripts/krakauer-corpus/build_corpus_krakauer.py +++ b/scripts/krakauer-corpus/build_corpus_krakauer.py @@ -1,5 +1,20 @@ """D1 for lv-krakauer: build the corpus from the licensed Kvasir masters. +⛔⛔ PARKED 2026-09-17 — DO NOT CARRY THIS TO D2 WITHOUT A NEW OPERATOR RULING. +henge id 82, slug `lv-krakauer-voice-adapter-corpus-built-parked`. + +The operator's reason is about the AUTHOR, not the data, and it is the better of the two: +*"he's a great writer because of his research, not because he has a strong identifiable +voice."* A voice adapter is worth its corpus-plus-training-plus-gate only if the target has a +prose signature a reader could pick out blind. Krakauer's excellence is reporting — access, +research, structure — and an adapter cannot carry any of it. **That question should have been +asked before any of the work below**; corpus quality was investigated first and the prior +question skipped. + +Everything here still runs and the corpus still builds clean. What would unpark it is a +re-extraction of the four ebooks with indentation and italics preserved — which fixes the +quoted-material problem described below but NOT the operator's objection. + Same record schema as the Brontë, Yarros, Hemingway and McCarthy builders, so entities.py, rename.py, leak_gate.py and the trainers run unchanged.