Closed identity reason codes#
The high-level operations reuse the existing resolver vocabulary. They do not introduce synonyms
such as EXACT_CANONICAL_NAME alongside NAME_EXACT, or COORDINATE_MATCH alongside GEO_MATCH.
The complete closed vocabulary is the union below. Codes can describe evidence or uncertainty;
only verdict decides the outcome. Codes are case-sensitive and contain no numeric probability.
| Concept | Existing code | Semantics |
|---|---|---|
| Exact canonical name | NAME_EXACT |
Normalized exact label comparison |
| Alias | ALIAS_MATCH |
A supplied/observed alias matched |
| Expected kind | KIND_COMPATIBLE / KIND_CONFLICT |
Observed classes match/contradict requested grain |
| Official URL | OFFICIAL_HOST_EXACT / OFFICIAL_HOST_PARTIAL / OFFICIAL_HOST_CONFLICT |
Dedicated URL comparison, partial shared site, or observed different sites |
| Coordinates | GEO_MATCH / GEO_NEAR / GEO_CONFLICT |
Precision-aware distance; not an identity probability |
| Street address | ADDRESS_MATCH / ADDRESS_CONFLICT |
Structured address corroboration or incompatible house numbers on the same street |
| City | CITY_MATCH / CITY_CONFLICT |
Administrative context, with structured ancestry for contradictions |
| Country | COUNTRY_MATCH / COUNTRY_CONFLICT |
Supplied ISO/country compared with observed country |
| Role/context | ROLE_MATCH, AFFILIATION_MATCH, CREATOR_MATCH, VENUE_MATCH, ORGANIZER_MATCH |
Known relation compared with structured Wikidata facts |
| Role mismatch | ROLE_CONFLICT |
Reserved for actual exclusive role contradictions; nonmatching/incomplete occupations do not emit this code |
| Multiple namesakes | MULTIPLE_VIABLE_IDENTITIES, MULTIPLE_ANCHORED_CANDIDATES |
Several plausible or anchored identities remain |
| Namesake risk | KIND_UNVERIFIED, GENERIC_NAME_GEO_ONLY, NO_LOCAL_ANCHOR |
Grain or corroboration insufficient; candidate counts/omission warnings also show bounded search limits |
| Contradicted existing QID | KNOWN_ID_CONTRADICTED |
Actual contradiction of the supplied identifier; absence or stronger alternative alone is insufficient |
| Exact provider join | EXTERNAL_ID_EXACT |
Observed Google ID equals Wikidata P646/P2671; concordance only |
| Conflicting provider join | PROVIDER_JOIN_CONFLICT |
Exact join paths disagree; never auto-confirm |
Comparison thresholds#
Coordinates match within max(0.3 km, the source coordinate precision), capped at 2 km. Strong place geography contradictions use a distance over 5 km; nearby values remain supporting or uncertain rather than wrong identity. Coordinates alone cannot confirm a generic-name place. URL path equality matters for multi-tenant hosts and person/organization pages. A shared root cannot substitute for a branch's own path. Address matches need street and house evidence in the strict identity policy; shared city/postcode alone is insufficient.
An observed country/type/host/geographic contradiction can make an existing ID wrong. A missing fact cannot. Occupations are not necessarily exhaustive or exclusive, so a missing role is insufficient evidence, not automatically a contradiction. Provider join conflicts are ambiguity, not proof that a local supplied QID is wrong. See Identity guide.
Provider concordance#
External sources agree with each other. This never independently anchors a local entity.
EXTERNAL_ID_EXACT, PROVIDER_HOST_AGREEMENT, PROVIDER_NAME_AGREEMENT, PROVIDER_TYPE_COMPATIBLE, WIKIPEDIA_EXACT.
Local corroboration#
Positive comparisons between caller evidence and provider facts.
ADDRESS_MATCH, AFFILIATION_MATCH, CITY_MATCH, COUNTRY_MATCH, CREATOR_MATCH, EVENT_DATE_MATCH, GEO_MATCH, GEO_NEAR, OFFICIAL_HOST_EXACT, OFFICIAL_HOST_PARTIAL, ORGANIZER_MATCH, ROLE_MATCH, VENUE_MATCH, YEAR_MATCH.
Identity evidence#
Names, types and supplied identifiers; these are not opaque confidence scores.
ALIAS_MATCH, KIND_COMPATIBLE, KNOWN_GOOGLE_ID_MATCH, KNOWN_QID_MATCH, NAME_EXACT, NAME_PARTIAL, NAME_VARIANT.
Contradictions#
Negative comparisons. Soft legacy conflicts remain visible; the strict audit separately tests actual contradiction.
ADDRESS_CONFLICT, CITY_CONFLICT, COUNTRY_CONFLICT, CREATOR_CONFLICT, EVENT_DATE_CONFLICT, EVENT_GRAIN_CONFLICT, GEO_CONFLICT, KIND_CONFLICT, KNOWN_ID_CONFLICT, OFFICIAL_HOST_CONFLICT, ORGANIZER_CONFLICT, PROVIDER_JOIN_CONFLICT, ROLE_CONFLICT, VENUE_CONFLICT, YEAR_CONFLICT.
Decision reasons#
Why selection, ambiguity, hold or rejection occurred. Legacy arbitration reasons remain for backward compatibility.
ALL_CANDIDATES_REJECTED, ANCHORED_CANDIDATE_CONFLICTED, ARBITRATION_BUDGET, ARBITRATION_DISABLED, ARBITRATION_FAILED, AUTO_KIND_RULE_PASSED, AUTO_TRUSTED_KNOWN_ID, BUDGET_EXHAUSTED, EVENT_OCCURRENCE_EVIDENCE_MISSING, GENERIC_NAME_GEO_ONLY, INVALID_INPUT, KIND_POLICY_FAIL_CLOSED, KIND_UNVERIFIED, KNOWN_IDS_DISAGREE, KNOWN_ID_CONTRADICTED, KNOWN_ID_UNVERIFIED, MODEL_DECLINED, MODEL_SELECTED, MULTIPLE_ANCHORED_CANDIDATES, MULTIPLE_VIABLE_IDENTITIES, NAME_PARTIAL_ONLY, NO_LOCAL_ANCHOR, NO_NAME_MATCH, NO_PROVIDER_RESULT, PERSON_REQUIRES_REVIEWED_ANCHOR, PROVIDER_ERROR, SOFT_CONFLICT_PRESENT, WORK_CREATOR_REQUIRED.
A policy change increments RESOLVER_POLICY_VERSION; unexpired provider observations can then be re-evaluated. A decision record carries its input and policy fingerprint.