Files
esh-pfi-infrastructure/persistent-memory.d/2026-09-11-babyyarros-leak-gate-passes.md
T
vh 969d649a24 memory: BabyYarros unblocked — gate passes 0/325, instruct training live on gx10
Records what the gate cost to build and what it found: a second typography defect
(small-caps epigraphs and drop caps, which the D1 "no unwrap needed" note was right
about in the wrong direction), back matter inside the prose of all five works naming
real people, a possessive-only entity that was unrenamed and unreported at once, a
character lost to an in-book article typeset in lowercase, and a phrase class the
unigram scan structurally cannot see.

Also records the two things that will matter next time: every new detector flag is
opt-in and the Brontë map was re-derived and diffed after each change, because one
intermediate version silently dropped four real names from Shirley; and the gate's
sensitivity floor is part of its result, not a footnote.
2026-09-11 10:09:50 -07:00

141 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# `[2026-09-11]` BabyYarros — the leak gate passes, and closing it found three defects nobody was looking for
Operator's goal for the session: *"finish the hardening and start the yarros training on
the gx10."* Both done. The gate went 212 → 0 and the first BabyYarros training is live.
## The gate did not exist, which is why the number was wrong
There was no committed instrument for *does any of the author's own proper nouns survive
the rename*. Brontë's "0 of 203" was produced by hand, and BabyYarros's "86 of 232" was
too. `scripts/r49-corpus/leak_gate.py` is now that instrument.
It runs **both directions every time**, because a detector that only ever sees renamed
text cannot distinguish *absent* from *blind*:
- **positive control** — the same scan over the UNRENAMED source; every surface must be found
- **negative control** — a nonce string that must appear nowhere
Its first reading on the corpus as built was **212 surviving, not 86**. Two reasons, and
both are structural rather than a disagreement about counting: it scans the **whole corpus**
rather than each work separately, and it counts the **sub-threshold** entities `rename.py`
never looked at. A per-work gate reports a name renamed in one book and printed verbatim in
another as clean.
## Defect 1 — a second typography defect, and the D1 note was right about the wrong thing
The D1 build notes say no unwrap was needed because Kvasir's cleaner emits flowing
paragraphs. That is true and Brontë's hard-wrap defect genuinely is absent. A different one
is present:
— M AJOR A FENDRAS G UIDE TO THE R IDERS Q UADRANT (U NAUTHORIZED E DITION )
T he flight field at Basgiath is still dark…
The Empyrean books set chapter epigraphs in **small caps**; the extractor rendered the
small-caps run as uppercase and left the large initial as its own token. **106 lines, ~700
splits**, plus **52 drop caps** (51 of them iron-flame). That is the entire origin of the
entities called `IDERS`, `UADRANT`, `NAUTHORIZED`, `DITION`, and seventeen bare single letters.
**The restoration is exact, not approximate.** A split initial beside an uppercased run
recovers the original mixed case: a word WITH a split initial was capitalised in the source,
an all-caps word WITHOUT one was lowercase. So the line above restores to
*"—Major Afendra's Guide to the Riders Quadrant (Unauthorized Edition)"*, which is what she wrote.
⚠ Two guards, both load-bearing: only lines with **≥2** splits are treated as a small-caps
run (one split is an ordinary sentence beside an acronym), and **`I`, `A`, `O` are excluded**
from the drop-cap join — otherwise `A slow smile spreads` becomes `Aslow`.
`scripts/yarros-corpus/repair_typography.py`. Cost: 768 fragments rejoined.
## Defect 2 — back matter inside the prose, in all five works
The builder splits on chapter headings and nothing follows the last one, so every work
carried its acknowledgments, newsletter pitches and cover-artist credits **inside the final
chapter**: 4,555 words naming the author's agent, her editors and her children, in a corpus
whose entire purpose is that no identifiable name survives.
Found by the phrase audit surfacing **`Louise Fury`** (Yarros's literary agent) — not by
reading. ⚠ iron-flame's marker is `ACKNOWLEDGMENTS` in **all caps** and a case-sensitive
scan missed it. The strip is case-insensitive, last-chapter-only, and refuses if it would
remove more than 2% of the corpus.
## Defect 3 — the gate read 0 of 314 while `Afendra` was in every copy
The worst failure shape available: a clean number over a real leak.
`Afendra` never appears unpossessed, so it keyed as `Afendras` — and **`rename.py` and the
gate both skip apostrophe keys as contractions.** Unrenamed and unreported at once. Fixed by
folding clitics so `Afendras` counts toward `Afendra` (`--fold-clitics`).
`Baxter` escaped a different way and is the better story. `wilder` renders an in-book news
article **entirely in lowercase** as a typographic device:
eighteen-year-old eleanor baxter was found late last night…
…using a helicopter rescue team to bring ms. baxter from the ravine.
So 3 lowercase against 23 capitalised — **ratio 0.13 against a 0.05 bar** — and a real
character is silently never renamed. The cap/lowercase ratio assumes consistent typography.
Fixed by readmitting ratio-rejects that a title precedes (`--rescue-honorific 2`).
**The first version of that rescue was badly wrong and the measurement caught it.**
Matching the wide honorific list case-insensitively readmitted **143 junk tokens**`the`,
`says`, `like`, `up`, `across` — because `major`, `general`, `father`, `sir`, `agent` and
`coach` are ordinary lowercase words. The rescue list is now five abbreviations that are
never anything else (`Mr/Mrs/Ms/Dr/Miss`) and the lowercase arm additionally requires the
period, so `ms. baxter` counts and `I miss you` does not. Readmits: 143 → 2.
## A leak class the unigram scan structurally cannot see
`Riders Quadrant`, `Scribe Quadrant`, `Flame Section`, `War Games`, `Orange Daggertail`
and **`Fourth Wing`, the book's own title**. Every component is an ordinary word the
cap/lowercase detector *correctly* refuses to call a name, so **48 recurring capitalised
phrases survived a gate that read 0.**
This is `Thornfield × 100` one level up, and it needs a **map, not a detector**: substituting
a head noun is a choice about register, not a measurement. `phrase_map_yarros.json` carries
10 phrases plus 13 capitalised tokens (Quadrant→Division, Wing→Flight, Section→Cohort,
Squad→Unit, Daggertail→Spinecrest), applied AFTER the entity pass so it can never eat a
replacement name, whole-word and case-sensitive so a dragon's lowercase `wing` survives. The
gate now audits recurring 23grams against an explicit allow list. 48 → 0.
## Corpus scope, not work scope
`--scope corpus` uses ONE map per copy across every work. It closes the cross-work leak
(`Rebel` renamed in `rebel`, verbatim in the other two Renegades books) and fixes something
Brontë's four unrelated novels never raised: **Yarros is two series**, so Violet has to be
the same person in Fourth Wing and Iron Flame. 8 cross-work gender conflicts held neutral
rather than guessed.
## The stoplist is short because every surface was read in context
A plausible-looking guess would have been wrong most of the time. **`Violence` is Xaden's
nickname for Violet.** `Continent`, `Presentation`, `Battle Brief`, `Curator`, `Sage`,
`Barrens`, `Originals`, `Montserrat`, `Athena` and `Aura` are all in-world. Only real-world
geography, brands, three nationality adjectives and four generic title words are excluded —
**ambiguous cases are deliberately renamed, because renaming is the safe direction and
leaving is the leaking one.**
## Brontë was protected the boring way
Five new detector behaviours, all **opt-in and OFF by default**, and after every single
change the Brontë entity map was re-derived on gx10 and diffed against the pre-change one:
identical keys, identical surfaces, identical every field, across all four works. One
intermediate version DID change Shirley (an unconditional acronym rule dropped `charles`,
`george`, `hugo`, `nelson`) and that is exactly why the check was run each time rather than once.
## Final state
0 of 325 source entities survive · 0 of 91 audited phrases survive · both controls PASS
corpus sha e85f69f1e49d57c9 · 6 copies · 1,248 records · 4.65M words
**Sensitivity floor, stated because a negative without one is unfalsifiable:** 3
capitalised occurrences per work for a name, 5 recurrences for a phrase. Below those the
gate does not detect, does not rename, and does not report.
Training launched 10:06 PT — `gx10:~/r49-runs/yarros-4b-instruct-1ep/`, Qwen3-4B-Instruct,
1 epoch, seed 4919, **178 steps · 5,824,512 tokens**, 252 adapted modules, sdpa/bf16,
37.9 s/it (~1h52m), eval+save every 25. The launcher **refuses to start unless the gate
report on disk says PASSED** — a launcher that trusts a human to have remembered is not a guard.
Pipeline and evidence table: `scripts/yarros-corpus/RUNBOOK.md`.
Related: [[2026-09-10-r49-babybronte-d1-d3-and-the-1-epoch-pilot]]