8a6b11c56a
Phase 1 of the scouting desk (docs/SCOUTING_DESK.md). Villains keyed by physical descriptor when there's no name — a fuzzy key matched by embedding, venue-scoped, gated on distinctiveness so a generic description never resolves to a wrong guess. - schema: poker_players gains descriptors/descriptor_embedding/distinctiveness/ named (name stays populated with a descriptor label to avoid a NOT-NULL rebuild on the live DB); new tables player_distinct_pairs + identity_queue. - resolve_villain(ref, venue) → band name|high|ambiguous|generic|none; exact name is deterministic, descriptors match by cosine, generic-only refuses to guess. - create_descriptor_villain / add_descriptor / name_villain; merge_players (repoints obs/reads, prefers a real name, re-embeds the union); mark_distinct + are_distinct (rejected merges stay rejected); identity_queue file/list/resolve with pending-dedup; scan_merge_candidates for the dream cycle (skips distinct pairs and cross-venue). 11 tests. Full suite 141 green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>