One Rule, Two Measurements
Lesson 4 of this track taught that a run in one language transliterates any foreign term into its own script. That rule was measured, not assumed: on the voices of the time, a Latin word inside a Korean sentence made the accent a gamble, and the owner made it a forward rule for the prose readings on 2026-07-26: "이게 품질 통과되면 앞으로 한글 영상 한글 목소리는 영어 스펠링을 안 쓰고 음차쪽으로 가면 되는 거고" ("if this passes quality, from now on a Korean video with a Korean voice drops the English spelling and goes with transliteration"). The take pipelines still keep it, and their checks still fail a Korean run that carries Latin letters.
On 2026-10-21 the same owner ruled the other way for the travel pipeline, and he was right both times. In the conversation behind the Frigiliana cut he had said "one of us". The script wrote it 원 오브 어스, and the voice said "one of earth". To a voice, Hangul is not a neutral spelling of a sound. It is a sound with several plausible words behind it, and 어스 is also how Korean spells "earth". He named the mechanism after watching the cut: "오히려 한글 그대로 줘서 보이스 모형이 추정하는 걸 거야" ("if anything, it's because we hand it the Hangul as is, so the voice model guesses"). The same cut had two more failures of the same kind. Dictation had turned his "kludgy" into 클럼지, which the voice read as "clumsy", and Pippa had written 무게 for model weights, which means weight on a scale; the word was 웨이트. A word is chosen by meaning as well as by sound.
Baseline 1.6 of the mobile procedure (869c46c) turned the rule around for the travel and talk pipelines. When he says an English phrase, or uses a term with no settled Korean form (a quoted phrase, a game's proper noun, an engineering adjective like kludgy), it is written in English inside the Korean say, and the subtitle shows it in English too. Established loanwords such as 슈퍼 인텔리전스 stay as they are. Neither rule is a style preference. Each is a measurement of one kind of voice reading one kind of text, and the two now live side by side, in different pipelines.
Even the Right Spelling Can Miss
The English retake did not settle it. Plain "one of us" came back "one of Earth" again; only the quoted phrase 'One of Us' read right. So the rule does not stop at spelling. After synthesis, every spoken piece that carries an English term in a Korean line is handed to the recognizer and read back into audio/term-readback.json, and out/WATCH.md lists each spot, flagged ones first, for the owner's ear at the watch. On a Mac with no recognizer installed the stage still completes: each spot is recorded with nothing heard and no flags, and the watch sheet counts it as not recognized, so the list still points at every spot without claiming any was checked. A recognizer can write an English word in either script, so a clean transcript proves nothing by itself; what the list does is put every risky spot in front of the one instrument that can judge it.
The failure runs the other way too. An English spelling the voice misreads inside a Korean line is written as the intended Hangul: "resume" came back 레주메, the French résumé, so the script writes 리쥼 or a Korean phrase. And on 2026-10-26 a question fused to a Korean particle, "What took you so long?" followed directly by 에, came back as Konglish. His ruling: "what took you so long 을 완전한 문장으로 독립해야 할 거야 … 한글에 섞이면 v4모형도 아직 이상하게 콩글리시로 읽는 경우가 있어" ("what took you so long has to stand alone as a complete sentence … mixed into Hangul, even the v4 model still sometimes reads it as odd Konglish"). An English sentence never carries a Korean particle: the English stands as its own sentence, and the Korean starts a new one, What took you so long? 이 질문에 … (b8a5d9a). That is lesson 4's warning against splicing, in a new form. The switch still happens at a boundary the voice can hear; the boundary is a sentence now, not a call.
A Table That Is Refused Before Anything Is Spent
Until 2026-10-22 these rows were a table in the procedure document, and Review 5 found that nothing in the pipeline checked it. They now live in beacon/misreads.py as two kinds of row. MISREADS holds spellings known to be misread, each with what the voice made of it, what to write instead, and the owner's words as its source; cut writes the verdict on the script sheet he reads, and beacon mobile approve and revoice refuse a line that still carries one, before any provider is paid. WRONG_HEARINGS and LISTEN_WORDS are listening rows: the word is right and only its reading can go wrong. "entity" stays his word, and the readback flags a Konglish 엔티티. "sassy" stays too, read lightly, after he warned that a heavy reading sounds like "sexy" (a215157). A listening row cannot refuse anything; it can only tell a person exactly where to listen. And the procedure adds one more instruction that no cache key could carry: a take with a phrase the voice has misread before is synthesized fresh, never reused from a cache or an earlier conversation's audio.
What Is Settled at the Door
Two kinds of reading are not about one script. They are about every call any pipeline makes, so they are settled at the one place every call passes: the workshop's door to the voice engine, _korean_safe in beacon/audio.py.
The first is the family's own app names. On 2026-10-17 an uploaded film said 티딩스 for Tidings, and the owner put it plainly: "피파가 아빠랑 같이 만든 앱을 엉터리로 읽는 건 공개 영상에서 민망해" ("Pippa misreading an app she built with me is embarrassing in a public video"). beacon/family_names.py owns one table. A reading enters READINGS only from his ruling or from the form his own dictated messages use (Tidings to 타이딩즈); a name he has not settled sits in UNSETTLED with the evidence and reaches the voice as written; a known wrong reading in WRONG is refused at the script gates before anything is spent. The screen keeps the English name, as he asked the same day: "Tidings 라고 원어로 써 자막은" ("write it in the original, Tidings, in the subtitles"), and a Hangul app name on screen is flagged.
The second is hanja. On 2026-10-27, Pippa's spoken 走肖爲王 came back 주소위왕 instead of 주초위왕, and the owner ruled the same day: "한자는 떼어내서 쓰게 만들고 한자 쓰지 마. 화면 자막에만 보여주고 … 중국어로 읽을 위험도 있으니까" ("strip the hanja out and don't write hanja; show it only in the on-screen subtitle … there's also a risk it gets read as Chinese"). The script writes the Hangul reading, with the hanja as a screen-only gloss right after it, 주초위왕(走肖爲王). misreads.spoken takes the gloss out of the text the voice receives, any other Han character in a Korean line is refused by name at the script gates, and the door refuses it once more for every pipeline (760c26a, baseline 1.11). Chinese and Japanese dubs are untouched, because there the characters are their own script.
Both rules split one string into two readers. The screen gets the written form, the voice gets the reading, and neither is allowed to leak into the other. Lesson 1 of this track drew that line between what is said and what is shown; this is the same line, seen from the voice's side.
The Second Door
The hanja did not come from a Beacon film. It came from a live voice-mode reply in the brain, which reaches the voice engine through a door of its own, and the workshop's guard could not reach it. The procedure says so in its history: Pippa's voice-mode path is a separate door, reported to the Chief, not changed from the workshop. Twenty-four minutes after the workshop's guard landed, cwkPippa got one of its own (431279f8, backend/services/spoken_hanja.py), with a different policy for a good reason: a live reply is never refused, so a bare Han run is taken out and logged with a count and a sample, and a run touching kana stays, because it is a quoted Japanese word. A script can still be fixed before it is voiced; a live answer cannot wait. But the character class that decides what counts as hanja is a copy of the workshop's, held in step by a comment.
That is the fork lesson 2 of track 3 warned about, seen live. One rule, two owners, already behaving differently. The difference is justified today, and nothing but a comment keeps the shared part from drifting tomorrow. The note added to that lesson counts the cost.