392c46d8bf
Root cause of "4 entries for the same person": physical descriptions were being passed as `name`, creating a new *named* player each time the wording drifted (exact-name match can't dedupe near-identical sentences, and the merge scan only looks at descriptor embeddings). - add_read: a `name` that looks like a description (comma-listed / long / has appearance words) is rerouted to the descriptor path so it dedupes. - descriptor reads that are ambiguously close to an existing villain now file a merge_candidate to the review queue instead of leaving a silent duplicate. - distinctiveness() reworked: recognizes specific content (proper nouns/brands, feature lists) as distinctive even when a generic word like "shirt" is present — the old list-only heuristic scored "Filipino, Fox Racing hat, DKNY shirt" as generic and gated it out. - Cash card: name = real handle ONLY; the look goes in descriptor as a few distinctive tags, and use name_villain to fuse a name onto a described player. Full suite 157 green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>