tts-voice-creator-clone-and.../architecture
mARTin-B78 1f812d2faf fix(characters): merge profiles only on real names, keep other cast names, reasoning and foreign quotes out of a character
Real-library audit (270 records) traced the data damage to:
- identity matching on ANY shared token ("Zwerg", "der Zwerg", "Mann") with
  "longer text wins" merging (Arthag b02 = Kolon's species/relationships), and
- csRosterCanonicalName renaming a sheet to the first cast name among its
  aliases, which saved 16 whole-sheet copies (Zwerg/Kolon = Arthag b03,
  Fremder = Mann, Alchimist = Promos ...).

Fixes:
- static/js/character-identity.js + core/character_records.py: generic labels
  are never identity evidence; csFindMergeKey, csConsolidateAliasDuplicates,
  csRosterCanonicalName, clSameIdentity use it; own name always wins; clUpsert
  writes to the exact-name record before any alias scan; no seed rename onto a
  name that has its own record.
- _charsheets_parse: in cast-target mode drop other cast members' names from
  aliases / first / last name (Kolon: "Sharraz Garthai"), strip reasoning
  leakage ("Warte:", "Der Text sagt ...") from every text field.
- _character_scene_evidence: only a quote naming the character is used,
  otherwise its own mannerisms (16 panels showed another character's scene).
- _character_age_category: Junge/Mädchen/boy/girl, number words, Sommer/
  Winter ages, evidence clause, age-tagged quotes; "15 Jahre älter" is no age.
- scripts/audit_character_records.py (read-only) and
  scripts/clean_character_records.py (dry run by default, --apply backs up).

Tests: tests/test_character_record_hygiene.py, tests/character-identity.test.mjs.
Docs: architecture/character-extraction.md, Manual, CHANGELOG.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 14:09:53 +02:00
..
evidence feat: OCR benchmark harness and first candidate results (docling, PaddleOCR) 2026-09-29 17:55:48 +02:00
audiobook-attribution.md fix(audiobook): warm the model before span cast/verify; keep tests off the real LLM 2026-09-19 21:08:01 +02:00
character-extraction.md fix(characters): merge profiles only on real names, keep other cast names, reasoning and foreign quotes out of a character 2026-10-03 14:09:53 +02:00
character-visual-identity.md fix(characters): merge profiles only on real names, keep other cast names, reasoning and foreign quotes out of a character 2026-10-03 14:09:53 +02:00
magazine-ingestion.md feat(magazine): record/replay cache for vision responses in OCR comparisons 2026-10-03 11:09:17 +02:00
magazine-sources.md feat(magazine): manage OPDS catalogues in the app, env-based login, result paging 2026-09-30 11:03:03 +02:00
multi-tenant-and-identity.md fix(engines): resolve LiteLLM card's own key server-side instead of a stale global one 2026-09-14 13:58:54 +02:00
ocr-porting-prompt-general.md docs: general-purpose OCR porting brief for letters, papers and forms 2026-09-30 10:10:59 +02:00
ocr-porting-prompt.md docs: OCR porting brief; test: current prompt version fixture, known phone-width issue 2026-09-29 21:38:28 +02:00
voicestudio-comparison.md docs: deep-dive UI/UX and feature-parity comparison with VoiceStudio 2026-09-29 13:46:14 +02:00