Exonym prominence in the exact tier
Status: design note for review (2026-07-03). No implementation. The concrete failing row is the
global-abo-alias gauntlet case (tracked improvement_target, #912).
The tension, made concrete
The #927 exact-tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous. sub-tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous. ranks a NAME-exact candidate (the query equals the place's own
spr.name) above an ALIAS-exact one (the query matches only an alias), with population ordering
within each sub-tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous.. That fixed the Paris Township class — an alias must not tie the primary.
The v5.2.0 Nordic splice then fixed "Åbo"'s tokenization (the exonym now parsesaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. whole), which surfaced the sub-tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous.'s known trade as a real row: unscoped "Åbo" now resolves 859 km away to a tiny place literally named Åbo (name-exact) instead of Turku, pop 207k, which holds "Åbo" only as an alias in our gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture.. Before #927, population-within-one-tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous. let Turku win; the sub-tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous. is more principled generally but loses this row.
The trap in fixing it naively: ME → Maine (alias-exact, no name-exact competitor) and
Paris → Paris, France (name-exact over a more populous alias holder is exactly what we want)
must both keep working.
Why "Åbo" is not actually an alias
Finland is officially bilingual. "Åbo" is Turku's official Swedish name — the same class as
Karjaa/Karis (the #743 bilingual-recallrecallOf the spans whose gold label is a given tag, the fraction the model found. High recall means few misses. Paired with precision to compute F1. fix already treats these as first-class names on ingest).
Our gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. stores ONE primary (spr.name = "Turku") and demotes every other official-language
name into the alias bag. The defect is not the sub-tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous.'s ordering; it is that "name-exact" only
consults a single primary in a world with multilingual official names.
The rule space
- Population-ratio override: alias-exact may outrank name-exact when
pop(alias holder) / pop(name holder) > K. Rejected as primary: K is a magic constant with no principled value, it re-introduces the mushy cross-tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous. population comparisons #927 removed, and it would resurrect Paris Township for extreme ratios. - Curated exonym table: a provenance-tracked exonym→canonical dataset consulted at rank time.
Workable but heavy: a new data artifact + maintenance surface for something the gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture.'s
namestable already encodes (language-tagged names with WOFWOF (Who's On First). An open-source gazetteer of places maintained by Mapzen/whosonfirst. Mailwoman builds a custom SQLite database from WOF GeoJSON repos, extended with postcode data, importance scores, and coincident-role relations. provenance). Violates the spirit of no-load-bearing-trivia if hand-grown. - Official-language names ARE names (recommended): widen the name-exact sub-tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous.'s
definition from
spr.nameto "any OFFICIAL-language name of the place" — the language-tagged name rows the gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. already carries (name_swefor Turku, per WOFWOF (Who's On First). An open-source gazetteer of places maintained by Mapzen/whosonfirst. Mailwoman builds a custom SQLite database from WOF GeoJSON repos, extended with postcode data, importance scores, and coincident-role relations.). Alias-exact remains the tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous. for abbreviations, colloquialisms, and historical forms. Turku becomes name-exact for "Åbo" and beats the hamlet on population within the sub-tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous.; Paris Township stays alias-exact (its "Paris" is a truncationtruncationCutting an input down to the max sequence length (or an LLM response to its token limit), discarding everything past the cap., not an official name in another language);ME → Maineis untouched (abbreviations stay alias-tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous., no name-exact competitor).
What option 3 needs (scoping, not commitment)
- Ingest: mark official-language name rows distinctly from alt/colloquial names (WOFWOF (Who's On First). An open-source gazetteer of places maintained by Mapzen/whosonfirst. Mailwoman builds a custom SQLite database from WOF GeoJSON repos, extended with postcode data, importance scores, and coincident-role relations.'s
name_*language tags +officialflags carry this; the candidate/FTS builders would carry one extra bit per name row). - Lookup: the exact-tiertierInternal versioning of which label classes the model emits. Tier 1 is the coarse components (country, region, locality, postcode); Tier 2 adds venue, street, house_number; Tier 3 (future) would add attention, po_box, and POI venue subtyping. Historically called 'Stage 1/2/3' before the runtime-pipeline naming made that ambiguous. classifier consults
names WHERE official = 1for the name-exact test (one indexed probe, same shape as today's alias check). - Gate: the bare-namesake gauntlet rows (Paris/Dublin/Melbourne/Vancouver/Åbo + ME/NY abbrevs) + US-2k ni + the quad panel ni set — the same battery #927 ran, plus the Åbo row flipping to gated.
- Risk probe (RUN, 2026-07-03): 6,910 names are shared by 2+ localities above 100k population —
but that's the UPPER BOUND across ALL name classes, because today's
namestable cannot distinguish official-language rows from transliterationstransliterationConverting a name from one writing system to another while preserving pronunciation (Cyrillic → Latin, for instance). Needed for multilingual address handling and corpus synthesis./colloquialisms ("A-shih-ko" counts the same as "Åbo"). The official-only subset is certainly far smaller but is UNQUANTIFIABLE until the ingest bit exists — i.e., option 3's ingest work is a prerequisite for its own risk assessment. Sequence accordingly: ingest bit → re-run this probe official-only → then decide the lookup change.
Decision requested
Approve option 3 for a scoped implementation pass (ingest bit + lookup probe + the #927 battery), or park behind the v2.2.0 retrain evaluationevalRunning the model against a held-out golden dataset and computing per-component F1, exact-match, calibration, and resolved-coordinate error..