2 Commits

Author SHA1 Message Date
umbra audio
03f8a858dd Add Apache-2.0 LICENSE, NOTICE, and SPDX headers 2026-10-18 19:01:04 -07:00
B.D. Murphy
f7094e2b1f Discovery: over-detect speakers, and clean up their names
The reviewer found obvious speakers missing from Last Dwarf's cast that had to
be added by hand: the six men in ch5 identified only as 'the oldest', 'the
tallest', 'the young one', 'the one with the biggest sword' and 'the biggest
one', plus the scum group. The prompt had no rule requiring these to be
captured, and nothing stopping narration verbs from being baked into names
(the result: 'Walking tallest', 'Walking oldest', 'Walking Youngest').

- Rule 8 'Every Speaking Line Is a Speaker': a character who speaks any line is
  a speaker. A designation ('the tallest', 'the guard', 'a voice', 'the three
  scum people') is a valid name. If two designations might be the same person,
  still list both and flag the unsure one — a wrong merge is permanent, a
  duplicate costs one merge click. Includes the ch5 passage as a worked example
  yielding six speakers.
- Rule 9 'Name Hygiene': never include narration verbs/adverbs in a name
  ('Walking tallest' -> 'the tallest'), never include '(Scene N)' internal
  labels, keep capitalisation consistent, no empty names.
- Rule 6 extended: a designation is itself unidentified; never upgrade
  'the tallest' into a guessed proper name.
- tests/test_discovery_prompt_rules.py guards all three so a future prompt
  rewrite cannot silently drop them.

Re-running discovery is required for the new rules to affect speakers.json;
existing entries are untouched (the designation system flags the current mess
in the meantime). Full suite 447 passed (8 pre-existing/parallel failures).
2026-09-25 18:41:01 -07:00