ADR-0003 · Идентичность playsite
Статус: принято · 2026-06-22
Контекст. Playsite — пятый писатель в общую аналитику. Нужно выбрать source, форму external_id для анонимного человека и для бота, и схему id партии так, чтобы не загрязнить 140k существующих партий и пройти дедупликацию (см. 08 Идентичность, источники и дедупликация).
Решение.
source='playsite'(новое значениеVARCHAR(20), без enum → backend не меняется).- Гость:
external_id='guest:<uuidv7>',player_type='guest', per-browser (вlocalStorage, не per-game) — повышено сразу с фазы 1. - Бот:
external_id='bot:<algorithm>',player_type='bot'— делим namespace с extension (это наши же алгоритмы). - id партии:
UUIDv5('playsite/game/<uuid>')— детерминированно, идемпотентно.
Последствия.
guest:-префикс не пересекается с целыми id dicechess, hex-ObjectId beturanga иbot:→ коллизий нет.- Происхождение партии всегда отделимо полем
games.source; агрегаты по боту фильтровать по source — потерь данных нет. player_typeлипкий → маппер хардкодитguest/botпри первой записи.- Per-browser даёт осмысленную статистику игрока с самого начала (требует restore-code UX).
Альтернативы. Per-game guest-id — проще, но шумные одноразовые строки игроков. Отдельный namespace playsite-bot:<algorithm> — чистое разделение от extension, но дробит статистику силы алгоритма без выгоды (source уже различает).