-- Latency probes are nonce-bound: the backend issues a challenge, the client -- echoes it back with its opaque Steam location, and the backend computes RTT -- from its own send/receive timestamps rather than trusting a client-reported -- number. -- -- Nothing issued that nonce before, so ProbeProvider had no expected value to -- compare against and /v1/probes/{region} was unreachable in every real -- binary. With no probe, queue_tickets.predicted_rtt stayed empty, and -- domain.validCandidate hard-requires a non-empty map -- so no client-created -- ticket could ever be selected by the matcher. -- -- The challenge is durable rather than per-process because any control-plane -- replica may serve the follow-up submission. CREATE TABLE probe_challenges ( player_id TEXT NOT NULL REFERENCES identities(player_id) ON DELETE CASCADE, region TEXT NOT NULL CHECK (region IN ('EU', 'NA')), nonce BYTEA NOT NULL, issued_at TIMESTAMPTZ NOT NULL, PRIMARY KEY (player_id, region) ); -- Supports the expiry sweep; challenges are short-lived and single-use. CREATE INDEX probe_challenges_issued_at ON probe_challenges (issued_at);