diff --git a/HANDOFF.md b/HANDOFF.md index 01fb719..aee2d4c 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -52,9 +52,15 @@ Job `778297bc-e7ce-439d-91b5-8a027060d17f`, chapter `7c944dd4-e972-42c7-ba60-9f6 ## Open +- The `script` stage failed at 87/116 with `unsupported-proper-noun: ['Choi', 'Haeseon']` on 28 beats. + Not OOM, the worker stayed healthy. One-line fix named in + `caveats/speaker-attribution.md#multiword-name-verifier`. Not applied. - The run stopped in `direct` at 113/116. `scene script tts layers render assemble` never ran. Resume: + Since then it reached `scene` 116/116 and failed in `script`. Fix the verifier, then: + ```bash + ssh kami@192.168.1.104 "curl -s -X POST http://127.0.0.1:9090/stage/clear -H 'Content-Type: application/json' -d '{\"job_id\":\"778297bc-e7ce-439d-91b5-8a027060d17f\",\"stage\":\"script\"}'" ssh kami@192.168.1.104 "curl -s -X POST 'http://127.0.0.1:9090/job/resume?job_id=778297bc-e7ce-439d-91b5-8a027060d17f'" ``` diff --git a/JOURNAL.md b/JOURNAL.md index 1251b6b..938e73a 100644 --- a/JOURNAL.md +++ b/JOURNAL.md @@ -97,3 +97,7 @@ two-character panels attribute both speakers to the wrong person, always swapped character, which is the Phase 1 headline metric at 30%, and the sample says that 30% is not trustworthy. 26 of 113 detected people got an identity, and 25 of those 26 went to one character that turns out to cover two different women. + +The run then reached `scene` 116/116 and failed in `script` at 87/116, not on OOM: 28 beats were +rejected by the script verifier as `unsupported-proper-noun: ['Choi', 'Haeseon']` +(`caveats/speaker-attribution.md#multiword-name-verifier`). No two-word cast name can pass that check. diff --git a/caveats/CLAUDE.md b/caveats/CLAUDE.md index eb56780..f81509c 100644 --- a/caveats/CLAUDE.md +++ b/caveats/CLAUDE.md @@ -35,3 +35,4 @@ a complaint, so give it one or drop it. | [`speaker_method="tail"` never reads a tail](speaker-attribution.md#tail-is-not-geometry) | 2026-08-11 run | | [One character id covers two different women](speaker-attribution.md#identity-over-merge) | 2026-08-11 run | | [The character registry carries five weeks of wrong names](speaker-attribution.md#registry-pollution) | 2026-08-11 run | +| [A multi-word character name always fails the script verifier](speaker-attribution.md#multiword-name-verifier) | 2026-08-11 run | diff --git a/caveats/speaker-attribution.md b/caveats/speaker-attribution.md index 72331c8..63835ae 100644 --- a/caveats/speaker-attribution.md +++ b/caveats/speaker-attribution.md @@ -53,3 +53,20 @@ inherits the whole pile. **Revisit trigger:** before any run that is meant to produce a clean baseline. Either scope the registry to a chapter or add a reviewed reset. + +## A multi-word character name always fails the script verifier {#multiword-name-verifier} + +`correctness.py:174` builds `allowed` from `cast_names` verbatim, so a two-word name enters the set as +one string, `"choi haeseon"`. `_capitalized_tokens` then yields the tokens `Choi` and `Haeseon` +separately, neither of which is in `allowed`. Every beat whose narration uses a two-word name fails +with `unsupported-proper-noun`. A one-word name such as `Seonho` passes, which is why this went unseen. + +Measured on job `778297bc`: the `script` stage failed at 87/116. 28 of the 29 lost beats cite +`['Choi', 'Haeseon']`, one cites `['Blur']`, an onomatopoeia the model invented. + +Fix: tokenize each cast name when building `allowed`, in `verify_script` +(`/mnt/server/home/kami/docker-apps/manga-infra/orchestrator/correctness.py:174`). One line. Existing +`test_script_verify.py` covers the function, so add the two-word case there. + +**Revisit trigger:** immediately. It costs a quarter of the chapter's narration on any title whose +cast has a surname.