Entities, IDs and orientation
Own IDs contain a prefixed, hyphenated UUIDv4. Names, slugs and provider codes are not primary keys. A corrected fact retains its identity and creates a new version. Matching names alone does not merge players.
Singles and doubles share one model
Both disciplines have sides 1 and 2. Singles has one member per side; doubles has two. One player cannot belong to both sides of the same match. Doubles statistics measured for a team remain team statistics, not half-values assigned to its members.
Score states, serving and winning sides follow the canonical orientation. Provider side order is normalized before acceptance. A missing winning side or score component stays null; it is not inferred from a display string.
Profiles and dates
Player profiles are nullable source snapshots. Height is in centimeters and mass in kilograms. Affiliation country is not automatically citizenship. Profile values are not asserted to be current measurements.
A calendar date has day precision. It is not a UTC midnight timestamp or proof of actual start time. Unknown dates remain accessible by edition, draw, release and own ID. Date-filtered queries exclude unknown dates explicitly.
Curated identity resolution supports exact allowlisted scoped aliases. It does not expose the private alias registry. Ambiguous lookup returns 409 with candidates.
