merge_faceless_captions had been written and never called; both crop endpoints called the non-destructive context_fragment_links instead, with no decision recording that choice. Wiring it changes panel count and every panel index, so the chapter needs a re-crop with the panels prefix cleared first -- crop_webtoon skips an upload when the key already exists, which is right for a resume and silently wrong after a slicing change. Noted at the line. It does not cover the head-in-one-shot body-in-the-next split that prompted the question. _merge_plan only folds a fragment that has text and no face. ARCHITECTURE.md is the target shape from the user's design, with what exists against each section today. Nothing in it is built. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2.7 KiB
Naming a character
How a discovered name reaches characters.name. The mechanism is db.add_name_claim, fed by the dialogue
stage through service._absorb.
A name is a word set, not a string
Closed, 2026-08-13, not yet run on a GPU.
Claims grouped on the casefolded name, so Lim Seonho from a p010 caption and Seonho from a p047 address
counted as two names for one character. len(grouped) > 1 fired, a conflicting-name-claims flag was
filed, and promotion was blocked permanently on evidence that in fact corroborated.
alias_groups groups two names when one's word set contains the other's, and keeps the longer as
canonical. Seonho and Lim Seonho are one name and the registry stores Lim Seonho. Seonho and
Haeseon are still two, so a real conflict still flags.
A confident caption names a character on its own
Closed, 2026-08-13, not yet run on a GPU.
Promotion needed two distinct panels, or one self_intro or name_tag claim above 0.9. On the 2026-08-12
chapter the only claim naming a main character was Choi Haeseon, a caption at p040 at confidence 1.0, and
it was discarded. She held 13 correct crops and stayed anonymous through the whole pipeline.
A caption is the narration naming the person it is drawn beside, which is how a webtoon introduces its
cast, so it joins STRONG_EVIDENCE. This is the loosest of the three changes and is only safe because of
the next one.
A name belongs to one character
Closed, 2026-08-13, not yet run on a GPU.
Being addressed by name identifies the addressee. Choosing which drawn body that is fails often. Two panels
addressed Seonho, the dialogue model pointed target_local_id at the woman standing beside him, and two
independent claims promoted her. The registry then held a female Seonho over 9 crops beside the lead's
LIM SEONHO.
A promotion now checks every other live character of the same manga first, by alias group. A collision
refuses the promotion and files a name-already-taken flag carrying both ids. The collision is itself
evidence that either the addressee or the identity cluster is wrong, so it is worth surfacing rather than
resolving silently.
Deliberately not built: no attempt to decide WHICH character deserves the name. That needs the addressee
fixed, which is ARCHITECTURE.md section 3.
Checks
test_name_binding.py replays the six real claims from the 2026-08-12 chapter. Each new assert was
confirmed to fail with its fix disabled: the caption test with STRONG_EVIDENCE reverted, the alias test
with casefold grouping restored. The taken-name test asserts a flag kind that only the new branch emits.