-- +goose Up -- A per-seat snapshot of the player's display name, captured when the seat is taken: -- the human's then-current display name, or a disguised robot's freshly composed -- per-game name. Storing the name on the seat (rather than always reading the account) -- freezes what the opponent sees for the life of the game — a later rename no longer -- rewrites past games — and lets the small robot pool present an ever-changing crowd of -- differently named opponents. An empty value means "no snapshot": the reader falls back -- to the account's current display name (legacy rows / pre-migration games). See -- docs/ARCHITECTURE.md §7. SET search_path = backend, pg_catalog; ALTER TABLE game_players ADD COLUMN display_name text NOT NULL DEFAULT ''; -- +goose Down SET search_path = backend, pg_catalog; ALTER TABLE game_players DROP COLUMN display_name;