@mailwoman/resolver-wof-sqlite 9.0.0 → 9.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/build-candidate.ts +97 -4
  2. package/candidate-importance.ts +227 -0
  3. package/candidate-lookup.ts +144 -7
  4. package/candidate-schema.ts +29 -0
  5. package/fst-autocomplete.ts +22 -11
  6. package/fst-builder.ts +25 -35
  7. package/fst-deserialize-web.ts +43 -7
  8. package/fst-serialize.ts +68 -12
  9. package/fst-types.ts +35 -1
  10. package/fts.ts +12 -0
  11. package/index.ts +8 -0
  12. package/lookup.ts +44 -5
  13. package/out/build-candidate.d.ts +33 -0
  14. package/out/build-candidate.d.ts.map +1 -1
  15. package/out/build-candidate.js +37 -4
  16. package/out/build-candidate.js.map +1 -1
  17. package/out/candidate-importance.d.ts +132 -0
  18. package/out/candidate-importance.d.ts.map +1 -0
  19. package/out/candidate-importance.js +174 -0
  20. package/out/candidate-importance.js.map +1 -0
  21. package/out/candidate-lookup.d.ts +9 -1
  22. package/out/candidate-lookup.d.ts.map +1 -1
  23. package/out/candidate-lookup.js +115 -6
  24. package/out/candidate-lookup.js.map +1 -1
  25. package/out/candidate-schema.d.ts +25 -1
  26. package/out/candidate-schema.d.ts.map +1 -1
  27. package/out/candidate-schema.js +5 -0
  28. package/out/candidate-schema.js.map +1 -1
  29. package/out/fst-autocomplete.d.ts +13 -3
  30. package/out/fst-autocomplete.d.ts.map +1 -1
  31. package/out/fst-autocomplete.js +10 -9
  32. package/out/fst-autocomplete.js.map +1 -1
  33. package/out/fst-builder.d.ts.map +1 -1
  34. package/out/fst-builder.js +21 -28
  35. package/out/fst-builder.js.map +1 -1
  36. package/out/fst-deserialize-web.d.ts.map +1 -1
  37. package/out/fst-deserialize-web.js +36 -7
  38. package/out/fst-deserialize-web.js.map +1 -1
  39. package/out/fst-serialize.d.ts +14 -4
  40. package/out/fst-serialize.d.ts.map +1 -1
  41. package/out/fst-serialize.js +60 -12
  42. package/out/fst-serialize.js.map +1 -1
  43. package/out/fst-types.d.ts +35 -1
  44. package/out/fst-types.d.ts.map +1 -1
  45. package/out/fts.d.ts +11 -0
  46. package/out/fts.d.ts.map +1 -1
  47. package/out/fts.js +11 -0
  48. package/out/fts.js.map +1 -1
  49. package/out/index.d.ts +1 -0
  50. package/out/index.d.ts.map +1 -1
  51. package/out/index.js +1 -0
  52. package/out/index.js.map +1 -1
  53. package/out/lookup.d.ts.map +1 -1
  54. package/out/lookup.js +37 -5
  55. package/out/lookup.js.map +1 -1
  56. package/out/place-importance-schema.d.ts +189 -0
  57. package/out/place-importance-schema.d.ts.map +1 -0
  58. package/out/place-importance-schema.js +242 -0
  59. package/out/place-importance-schema.js.map +1 -0
  60. package/out/sqlite-utils.d.ts +12 -0
  61. package/out/sqlite-utils.d.ts.map +1 -1
  62. package/out/sqlite-utils.js +20 -0
  63. package/out/sqlite-utils.js.map +1 -1
  64. package/out/street-morphology-fst-builder.d.ts.map +1 -1
  65. package/out/street-morphology-fst-builder.js +5 -4
  66. package/out/street-morphology-fst-builder.js.map +1 -1
  67. package/out/street-normalize.d.ts +2 -1
  68. package/out/street-normalize.d.ts.map +1 -1
  69. package/out/street-normalize.js +2 -1
  70. package/out/street-normalize.js.map +1 -1
  71. package/out/types.d.ts +39 -0
  72. package/out/types.d.ts.map +1 -1
  73. package/package.json +14 -6
  74. package/place-importance-schema.ts +353 -0
  75. package/sqlite-utils.ts +21 -0
  76. package/street-morphology-fst-builder.ts +5 -4
  77. package/street-normalize.ts +3 -2
  78. package/types.ts +39 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candidate-importance.js","sourceRoot":"","sources":["../candidate-importance.ts"],"names":[],"mappings":"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"}
@@ -40,7 +40,7 @@ export interface WOFCandidateTableLookupOpts {
40
40
  * The candidate columns this lookup probes — a typed projection of the SHARED {@link CandidateTable}, so a column rename
41
41
  * in `build-candidate` (the writer) is a compile error here (the reader).
42
42
  */
43
- type CandidateRow = Pick<CandidateTable, "spr_id" | "name" | "country_id" | "placetype_id" | "latitude" | "longitude" | "min_lat" | "min_lon" | "max_lat" | "max_lon" | "neg_rank" | "is_primary">;
43
+ type CandidateRow = Pick<CandidateTable, "spr_id" | "name" | "country_id" | "placetype_id" | "latitude" | "longitude" | "min_lat" | "min_lon" | "max_lat" | "max_lon" | "neg_rank" | "is_primary" | "population"> & Partial<Pick<CandidateTable, "importance">>;
44
44
  /**
45
45
  * A candidate row annotated with the {@link rankByPrimaryPreference} effective rank + the exact-tier demotion flag.
46
46
  */
@@ -60,6 +60,14 @@ export type RankedRow<R> = R & {
60
60
  * tier, and a same-country nickname (San Francisco's "Frisco") is never touched.
61
61
  */
62
62
  demoted: boolean;
63
+ /**
64
+ * True when this row came from the TYPO-CORRECTOR tier — the FTS5-trigram fallback that fires only after the exact
65
+ * and qualifier-strip probes both missed. Such a row answers a query the gazetteer does not contain, so it is a fuzzy
66
+ * match by construction and must not claim `exactMatch` (#17). Recall is unaffected: the row is still returned, still
67
+ * ranked, still resolvable — it just stops asserting a match quality it does not have, which is what the FTS backend
68
+ * has always done and what every `exactMatch`-filtering consumer assumed.
69
+ */
70
+ fuzzy?: boolean;
63
71
  };
64
72
  /**
65
73
  * Bounded cross-country primary-name preference (see {@link PRIMARY_PREFERENCE_LOG10}). Pure + total-ordered so
@@ -1 +1 @@
1
- {"version":3,"file":"candidate-lookup.d.ts","sourceRoot":"","sources":["../candidate-lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAyB,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAG3F,OAAO,KAAK,EAAE,cAAc,EAAwC,MAAM,uBAAuB,CAAA;AAOjG,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAA;AAE3F,MAAM,WAAW,2BAA2B;IAC3C;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAA;CACvB;AAED;;;GAGG;AACH,KAAK,YAAY,GAAG,IAAI,CACvB,cAAc,EACZ,QAAQ,GACR,MAAM,GACN,YAAY,GACZ,cAAc,GACd,UAAU,GACV,WAAW,GACX,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,UAAU,GACV,YAAY,CACd,CAAA;AAwCD;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG;IAC9B;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;;;;;OAOG;IACH,OAAO,EAAE,OAAO,CAAA;CAChB,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC,EAC7G,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,SAA2B,GAC9B,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAkCrB;AAqBD;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,WAAW;;IAyB1D;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,yBAAyB,GAAG,SAAS,CAAA;gBAEpD,IAAI,EAAE,2BAA2B;IA4DvC,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA8RjE,KAAK,IAAI,IAAI;CAKb"}
1
+ {"version":3,"file":"candidate-lookup.d.ts","sourceRoot":"","sources":["../candidate-lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAyB,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAG3F,OAAO,KAAK,EAAE,cAAc,EAAwC,MAAM,uBAAuB,CAAA;AAQjG,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAA;AAE3F,MAAM,WAAW,2BAA2B;IAC3C;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAA;CACvB;AAED;;;GAGG;AACH,KAAK,YAAY,GAAG,IAAI,CACvB,cAAc,EACZ,QAAQ,GACR,MAAM,GACN,YAAY,GACZ,cAAc,GACd,UAAU,GACV,WAAW,GACX,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,UAAU,GACV,YAAY,GACZ,YAAY,CACd,GAMA,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAA;AAgD5C;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG;IAC9B;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;;;;;OAOG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CACf,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC,EAC7G,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,SAA2B,GAC9B,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAkCrB;AAqBD;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,WAAW;;IAyB1D;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,yBAAyB,GAAG,SAAS,CAAA;gBASpD,IAAI,EAAE,2BAA2B;IA+FvC,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAqWjE,KAAK,IAAI,IAAI;CAKb"}
@@ -28,8 +28,9 @@ import { CANDIDATE_FTS_TABLE } from "./candidate-fts.js";
28
28
  import { readGazetteerCoverageManifest } from "./coverage-manifest-schema.js";
29
29
  import { haversineKm } from "./geo.js";
30
30
  import { trigramJaccard } from "./lookup.js";
31
+ import { referentialFromPopulation } from "./place-importance-schema.js";
31
32
  import { POSTAL_CITY_CANDIDATE_TABLE } from "./postal-city-candidate-schema.js";
32
- import { hasTable } from "./sqlite-utils.js";
33
+ import { hasColumn, hasTable } from "./sqlite-utils.js";
33
34
  import { normalizeLocalityForKey, stripLocalityQualifier } from "./street-normalize.js";
34
35
  /**
35
36
  * FTS5-trigram over-fetch before the trigram-Jaccard re-rank, and the minimum similarity to count as a fuzzy hit (below
@@ -37,6 +38,13 @@ import { normalizeLocalityForKey, stripLocalityQualifier } from "./street-normal
37
38
  */
38
39
  const FUZZY_FETCH = 40;
39
40
  const FUZZY_MIN = 0.34;
41
+ /**
42
+ * Postcode-containment re-rank gate radius (km) — the SAME value the resolver's country pass measures at
43
+ * (`POSTCODE_COUNTRY_COHERENCE_GATE_KM`, resolver/postcode-country-coherence.ts): a locality within this distance of
44
+ * the postcode's own centroid counts as "containing" it. One number, two passes — a divergence here would make the two
45
+ * mechanisms disagree about what is proximal.
46
+ */
47
+ const POSTCODE_CONTAINMENT_GATE_KM = 25;
40
48
  /**
41
49
  * Bounded PRIMARY-NAME preference across a CROSS-COUNTRY name collision (the `is_primary` ranking signal).
42
50
  *
@@ -149,6 +157,13 @@ export class WOFCandidateTableLookup {
149
157
  * (the hard-country coverage gate, guard-B plausibility) falls back to its code constants byte-identically.
150
158
  */
151
159
  artifactCoverage;
160
+ /**
161
+ * `", importance"` when this artifact carries the #28 fame column, `""` when it does not — spliced into the probe's
162
+ * SELECT list. Existence-gated exactly like `#ftsProbe` and `#postalCityProbe` above, and for the same reason: a
163
+ * candidate.db built before the column is a valid artifact, and naming a column it lacks would turn a stale gazetteer
164
+ * into `no such column` on the first keystroke rather than into "no fame signal", which is what it is.
165
+ */
166
+ #importanceSelect;
152
167
  constructor(opts) {
153
168
  if (opts.database) {
154
169
  this.#db = opts.database;
@@ -185,6 +200,8 @@ export class WOFCandidateTableLookup {
185
200
  this.#ftsProbe = this.#db.prepare(`SELECT name_key FROM ${CANDIDATE_FTS_TABLE} WHERE ${CANDIDATE_FTS_TABLE} MATCH ? ORDER BY bm25(${CANDIDATE_FTS_TABLE}) LIMIT ?`);
186
201
  this.#nameKeyExistsProbe = this.#db.prepare("SELECT 1 FROM candidate WHERE name_key = ? LIMIT 1");
187
202
  }
203
+ // #28 fame column: probed ONCE here (it runs a PRAGMA, and `findPlace` is per-keystroke hot).
204
+ this.#importanceSelect = hasColumn(this.#db, "candidate", "importance") ? ", importance" : "";
188
205
  // Coverage manifest (survey candidate #2): the artifact's own coverage facts, existence-gated like
189
206
  // the probes above — a candidate.db built before the manifest reads `undefined` and consumers keep
190
207
  // their code-constant fallbacks byte-identically.
@@ -199,6 +216,33 @@ export class WOFCandidateTableLookup {
199
216
  const want = Array.isArray(placetype) ? placetype : [placetype];
200
217
  return expandPlacetypeFilter(want).includes("locality");
201
218
  }
219
+ /**
220
+ * The postcode-containment anchor: the postcode's own centroid row in the candidate table, keyed whitespace-stripped
221
+ * (#920 — the same fold the build applies to postcode rows), country-scoped when the query is, first
222
+ * coordinate-bearing row wins. null when the candidate table carries no such postcode — the re-rank then abstains,
223
+ * because a recall gap is not evidence for the name match. Meaning-of-zero: a 0,0 row is the build's unlocated
224
+ * sentinel, never a real centroid.
225
+ */
226
+ #postcodeAnchor(postcode, country) {
227
+ const placetypeID = this.#placetypeToID.get("postalcode");
228
+ if (placetypeID === undefined)
229
+ return null;
230
+ const conds = ["name_key = ?", "placetype_id = ?"];
231
+ const params = [postcode.replaceAll(/\s+/g, ""), placetypeID];
232
+ if (country) {
233
+ const countryID = this.#countryToID.get(country.toUpperCase());
234
+ if (countryID === undefined)
235
+ return null; // a country the candidate table doesn't carry
236
+ conds.push("country_id = ?");
237
+ params.push(countryID);
238
+ }
239
+ const row = this.#db
240
+ .prepare(`SELECT latitude, longitude FROM candidate WHERE ${conds.join(" AND ")} ORDER BY neg_rank ASC LIMIT 1`)
241
+ .get(...params);
242
+ if (!row || (Number(row.latitude) === 0 && Number(row.longitude) === 0))
243
+ return null;
244
+ return { lat: Number(row.latitude), lon: Number(row.longitude) };
245
+ }
202
246
  async findPlace(query) {
203
247
  let text = (query.text ?? "").trim();
204
248
  if (!text)
@@ -285,8 +329,15 @@ export class WOFCandidateTableLookup {
285
329
  // intended primary even when a cluster of more-populous foreign aliases sits ahead of it. `is_primary`
286
330
  // + `country_id` feed that re-rank. A single-country probe (a country filter, or all rows same
287
331
  // country) re-ranks to the identical population order, so the common path is untouched.
288
- const sql = "SELECT spr_id, name, country_id, placetype_id, latitude, longitude, min_lat, min_lon, max_lat, max_lon, neg_rank, is_primary " +
289
- `FROM candidate WHERE ${conds.join(" AND ")} ORDER BY neg_rank ASC LIMIT ?`;
332
+ // `population` rides along for the REFERENTIAL score on the result (ROAD_TO_V9 §2) — one more
333
+ // column off a clustered row the probe already reads, and it is NOT what the probe orders by:
334
+ // `neg_rank` remains the sort key, so this changes no ordering, only what the result reports.
335
+ // `importance` (#28) rides along on the same terms, and there is deliberately NO `ORDER BY` on it:
336
+ // the fame prior is applied by the RESOLVER (`resolver/toponym-prior.ts`), which alone knows
337
+ // whether the query was bare enough to deserve it. A backend that pre-sorted by fame would apply
338
+ // it to every lookup, including the qualified addresses the D-rule guard exists to protect.
339
+ const sql = "SELECT spr_id, name, country_id, placetype_id, latitude, longitude, min_lat, min_lon, max_lat, max_lon, neg_rank, is_primary, population" +
340
+ `${this.#importanceSelect} FROM candidate WHERE ${conds.join(" AND ")} ORDER BY neg_rank ASC LIMIT ?`;
290
341
  const fetched = this.#db.prepare(sql).all(...params, Math.max(limit, RERANK_FETCH));
291
342
  return rankByPrimaryPreference(fetched, limit);
292
343
  };
@@ -338,7 +389,9 @@ export class WOFCandidateTableLookup {
338
389
  if (seen.has(h.nk))
339
390
  continue;
340
391
  seen.add(h.nk);
341
- rows.push(...probe(h.nk, regionID));
392
+ // #17: stamp the tier. These rows answer a name the gazetteer does not carry, so they are
393
+ // fuzzy matches and `exactMatch` below must say so — see `RankedRow.fuzzy`.
394
+ rows.push(...probe(h.nk, regionID).map((r) => ({ ...r, fuzzy: true })));
342
395
  if (rows.length >= limit)
343
396
  break;
344
397
  }
@@ -354,6 +407,38 @@ export class WOFCandidateTableLookup {
354
407
  if (!rows.length && regionParentID !== undefined) {
355
408
  rows = cascade(undefined);
356
409
  }
410
+ // Postcode-containment coherence (#31, Mechanism 2): re-rank the rows by proximity to the postcode's
411
+ // own centroid, so the locality that CONTAINS the postcode wins the name-match tie (the "Paris" that
412
+ // holds 75001, not the one that holds a 75001-free namesake). The resolver sends this flag on locality
413
+ // lookups when `ResolveOpts.postcodeContainmentCoherence` is on. Strictly beneath the #741 postal-city
414
+ // short-circuit above — an exact (name, postcode) hit IS the answer and outranks any re-rank — and after
415
+ // the region-scope fallback, so it sees the final row set. Rows within the gate sort by distance first;
416
+ // the out-gate tail keeps its original population-first order. No in-gate row, or no postcode row in
417
+ // the candidate table → unchanged (byte-identical to the flag-off path).
418
+ if (query.postcode &&
419
+ query.postcodeContainmentCoherence === true &&
420
+ this.#wantsLocality(query.placetype) &&
421
+ rows.length > 1) {
422
+ const anchor = this.#postcodeAnchor(query.postcode, query.country);
423
+ if (anchor) {
424
+ const inGate = [];
425
+ const outGate = [];
426
+ for (const row of rows) {
427
+ const distanceKm = haversineKm(anchor.lat, anchor.lon, Number(row.latitude), Number(row.longitude));
428
+ if (distanceKm <= POSTCODE_CONTAINMENT_GATE_KM) {
429
+ inGate.push({ row, distanceKm });
430
+ }
431
+ else {
432
+ outGate.push(row);
433
+ }
434
+ }
435
+ if (inGate.length) {
436
+ // oxlint-disable-next-line unicorn/no-array-sort -- sorts a freshly-built array; toSorted would double-allocate on a hot path
437
+ inGate.sort((a, b) => a.distanceKm - b.distanceKm);
438
+ rows = [...inGate.map(({ row }) => row), ...outGate];
439
+ }
440
+ }
441
+ }
357
442
  const candidates = rows.map((row) => {
358
443
  const hasBbox = row.min_lat != null && row.max_lat != null && row.min_lon != null && row.max_lon != null;
359
444
  return {
@@ -377,8 +462,32 @@ export class WOFCandidateTableLookup {
377
462
  // Every candidate row IS an exact normalized-name (or alias/abbrev) match — the cascade's exact tier
378
463
  // accepts alias-exact hits ("New York City" → New York) the same as canonical — EXCEPT a cross-country
379
464
  // alias that lost the bounded contest to a same-key primary (`demoted`): it drops to the partial tier so
380
- // the walk's country posterior can't cross back over the primary (see `RankedRow.demoted`).
381
- exactMatch: !row.demoted,
465
+ // the walk's country posterior can't cross back over the primary (see `RankedRow.demoted`) — and
466
+ // EXCEPT a row the typo-corrector produced (`fuzzy`), which by definition answers a name the
467
+ // gazetteer does not carry (see `RankedRow.fuzzy`).
468
+ exactMatch: !row.demoted && !row.fuzzy,
469
+ // The two-score split's carry (ROAD_TO_V9 §2). `referential` names the prominence this
470
+ // backend has always ordered by — `neg_rank` IS `-log10(population + 1)`, so the score and
471
+ // the sort key are two readings of the same number.
472
+ ...(row.population === null || row.population <= 0
473
+ ? {}
474
+ : { population: row.population, referential: referentialFromPopulation(row.population) }),
475
+ // #28: the fame prior, from the `importance` column the candidate build joins in. Emitted ONLY
476
+ // when the artifact measured this place — an absent field is what `rankByImportance` reads as
477
+ // "does not participate", and a 0 would be a claim nobody made (meaning-of-zero).
478
+ //
479
+ // The field name matches the column because they hold the same thing: the score source's
480
+ // BLENDED prior — the concordance's encyclopedia-derived channel where a concordance matched, a
481
+ // population-derived proxy everywhere else. It is NOT the strict `encyclopedic` channel
482
+ // `place-importance-schema.ts` defines, and it deliberately does not land in that field: the
483
+ // strict channel was measured on 2026-08-10 and covers eleven countries, none of them CA/AU/RU,
484
+ // which makes it inert on three of the four homonym contests the prior exists to settle.
485
+ // `PlaceCandidate.encyclopedic` stays reserved for a strict-channel source (the FTS backend's
486
+ // clauses are strict and today emit NULL for everything — no shipped admin DB has the split
487
+ // table at all). See `candidate-schema.ts` → {@link CandidateTable.importance}.
488
+ ...(typeof row.importance === "number" && Number.isFinite(row.importance)
489
+ ? { importance: row.importance }
490
+ : {}),
382
491
  ...(hasBbox
383
492
  ? {
384
493
  bbox: {
@@ -1 +1 @@
1
- {"version":3,"file":"candidate-lookup.js","sourceRoot":"","sources":["../candidate-lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,qBAAqB,EAAkC,MAAM,qBAAqB,CAAA;AAE3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAA;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,2BAA2B,EAAiC,MAAM,mCAAmC,CAAA;AAC9G,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAkCvF;;;GAGG;AACH,MAAM,WAAW,GAAG,EAAE,CAAA;AACtB,MAAM,SAAS,GAAG,IAAI,CAAA;AAEtB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,wBAAwB,GAAG,CAAC,CAAA;AAElC;;;;;GAKG;AACH,MAAM,YAAY,GAAG,EAAE,CAAA;AAuBvB;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACtC,IAAkB,EAClB,KAAa,EACb,KAAK,GAAG,wBAAwB;IAEhC,8GAA8G;IAC9G,kHAAkH;IAClH,IAAI,UAAyB,CAAA;IAE7B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1F,UAAU,GAAG,CAAC,CAAA;QACf,CAAC;IACF,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,EAAE,UAAU,CAAA;IAEzC,oHAAoH;IACpH,gHAAgH;IAChH,MAAM,mBAAmB,GAAG,CAAC,CAAI,EAAW,EAAE,CAC7C,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,CAAA;IAE9E,MAAM,QAAQ,GAAG,CAAC,CAAI,EAAgB,EAAE;QACvC,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;QACxC,MAAM,gBAAgB,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAE7D,OAAO,EAAE,GAAG,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,IAAI,gBAAgB,GAAG,UAAW,CAAC,QAAQ,EAAE,CAAA;IACjG,CAAC,CAAA;IAED,OAAO,CACN,IAAI;SACF,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzC,gFAAgF;QAChF,8HAA8H;SAC7H,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC/G,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CACnB,CAAA;AACF,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,CAAS;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QAE3B,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACb,CAAC;IACF,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IACnC,GAAG,CAAc;IACjB,OAAO,CAAS;IACP,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC1C,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAA;IACnD;;;OAGG;IACM,gBAAgB,CAAiD;IAC1E;;;OAGG;IACM,SAAS,CAAiD;IACnE;;;;;;OAMG;IACM,mBAAmB,CAAiD;IAC7E;;;;OAIG;IACM,gBAAgB,CAAuC;IAEhE,YAAY,IAAiC;QAC5C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAA;YACxB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;YAClE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACpB,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;QAC9E,CAAC;QAED,gGAAgG;QAChG,sEAAsE;QACtE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,GAAG,EAAmC,EAAE,CAAC;YAC/G,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;YACzC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACzC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QAC1C,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG;aACtB,OAAO,CAAC,2CAA2C,CAAC;aACpD,GAAG,EAAqC,EAAE,CAAC;YAC5C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC1D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;QAC3D,CAAC;QAED,8FAA8F;QAC9F,2FAA2F;QAC3F,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,2BAA2B,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CACvC,iDAAiD,2BAA2B,8CAA8C,CAC1H,CAAA;QACF,CAAC;QAED,iGAAiG;QACjG,iGAAiG;QACjG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAChC,wBAAwB,mBAAmB,UAAU,mBAAmB,0BAA0B,mBAAmB,WAAW,CAChI,CAAA;YAED,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAA;QAClG,CAAC;QAED,mGAAmG;QACnG,mGAAmG;QACnG,kDAAkD;QAClD,IAAI,CAAC,gBAAgB,GAAG,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAChE,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,SAAsC;QACpD,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAA;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAE/D,OAAO,qBAAqB,CAAC,IAAyB,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC7E,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAqB;QACpC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QAEpC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAA;QAEpB,6FAA6F;QAC7F,6FAA6F;QAC7F,8FAA8F;QAC9F,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAErE,IAAI,aAAa,EAAE,CAAC;YACnB,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QACnC,CAAC;QAED,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAA;QAE7C,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAA;QAEvB,yFAAyF;QACzF,4FAA4F;QAC5F,+FAA+F;QAC/F,8FAA8F;QAC9F,+FAA+F;QAC/F,wFAAwF;QACxF,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACrF,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAExD,CAAA;YAEZ,IAAI,GAAG,EAAE,CAAC;gBACT,OAAO;oBACN;wBACC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;wBACtB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;wBAC5B,SAAS,EAAE,UAA0B;wBACrC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE;wBAC3C,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;wBACzB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;wBAC1B,KAAK,EAAE,CAAC;wBACR,UAAU,EAAE,IAAI;qBAChB;iBACD,CAAA;YACF,CAAC;QACF,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QAE5C,0FAA0F;QAC1F,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,MAAM,YAAY,GAA2B,EAAE,CAAA;QAE/C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;YAE9D,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAA,CAAC,8CAA8C;YAC/E,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC9B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvB,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,uFAAuF;YACvF,+EAA+E;YAC/E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAEjF,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAyB,CAAC;iBAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBACtC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAA;YAE7C,IAAI,CAAC,GAAG,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAA;YAC1B,OAAO,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACjE,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAA;QAC1B,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAA;YACpB,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;YACtE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;QAC1D,CAAC;QAED,mGAAmG;QACnG,sGAAsG;QACtG,uGAAuG;QACvG,uGAAuG;QACvG,oGAAoG;QACpG,gGAAgG;QAChG,8FAA8F;QAC9F,wGAAwG;QACxG,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAA;QAElD,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,QAA4B,EAAkC,EAAE;YAC1F,MAAM,KAAK,GAAG,CAAC,cAAc,EAAE,GAAG,OAAO,CAAC,CAAA;YAC1C,MAAM,MAAM,GAA2B,CAAC,EAAE,EAAE,GAAG,YAAY,CAAC,CAAA;YAE5D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC3B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACtB,CAAC;YAED,8FAA8F;YAC9F,+FAA+F;YAC/F,uGAAuG;YACvG,+FAA+F;YAC/F,wFAAwF;YACxF,MAAM,GAAG,GACR,+HAA+H;gBAC/H,wBAAwB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAA;YAE5E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAA8B,CAAA;YAEhH,OAAO,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC/C,CAAC,CAAA;QAED,sGAAsG;QACtG,sGAAsG;QACtG,kEAAkE;QAClE,MAAM,OAAO,GAAG,CAAC,QAA4B,EAAkC,EAAE;YAChF,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;YAEnC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAClB,uFAAuF;gBACvF,0FAA0F;gBAC1F,yEAAyE;gBACzE,MAAM,WAAW,GAAG,uBAAuB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAA;gBAEzE,IAAI,WAAW,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;oBAC5C,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;gBACpC,CAAC;YACF,CAAC;YAED,8FAA8F;YAC9F,8FAA8F;YAC9F,iGAAiG;YACjG,iGAAiG;YACjG,4EAA4E;YAC5E,EAAE;YACF,kGAAkG;YAClG,kGAAkG;YAClG,+FAA+F;YAC/F,+FAA+F;YAC/F,oGAAoG;YACpG,EAAE;YACF,kGAAkG;YAClG,mGAAmG;YACnG,iGAAiG;YACjG,oGAAoG;YACpG,IACC,CAAC,IAAI,CAAC,MAAM;gBACZ,CAAC,aAAa;gBACd,IAAI,CAAC,SAAS;gBACd,IAAI,CAAC,mBAAmB;gBACxB,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,EACrC,CAAC;gBACF,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;gBAEtC,IAAI,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAA2C,CAAA;oBAE7F,MAAM,MAAM,GAAG,IAAI;yBACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;yBACxF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;wBAChC,8HAA8H;yBAC7H,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;oBAE3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;oBAE9B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;wBACxB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;4BAAE,SAAQ;wBAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;wBACd,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;wBAEnC,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;4BAAE,MAAK;oBAChC,CAAC;oBAED,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;gBAC5B,CAAC;YACF,CAAC;YAED,OAAO,IAAI,CAAA;QACZ,CAAC,CAAA;QAED,IAAI,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;QAElC,uGAAuG;QACvG,qGAAqG;QACrG,oFAAoF;QACpF,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAClD,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;QAC1B,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAkB,EAAE;YACnD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,CAAA;YAExG,OAAO;gBACN,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;gBACtB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC5B,SAAS,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAiB;gBACpF,6FAA6F;gBAC7F,gGAAgG;gBAChG,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;gBAC5D,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACzB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;gBAC1B,8FAA8F;gBAC9F,kGAAkG;gBAClG,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAC5B,qGAAqG;gBACrG,uGAAuG;gBACvG,gGAAgG;gBAChG,oGAAoG;gBACpG,4FAA4F;gBAC5F,UAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBACzC,qGAAqG;gBACrG,uGAAuG;gBACvG,yGAAyG;gBACzG,4FAA4F;gBAC5F,UAAU,EAAE,CAAC,GAAG,CAAC,OAAO;gBACxB,GAAG,CAAC,OAAO;oBACV,CAAC,CAAC;wBACA,IAAI,EAAE;4BACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;4BAC3B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;4BAC3B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;4BAC3B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;yBAC3B;qBACD;oBACF,CAAC,CAAC,EAAE,CAAC;aACN,CAAA;QACF,CAAC,CAAC,CAAA;QAEF,mGAAmG;QACnG,iGAAiG;QACjG,kGAAkG;QAClG,8FAA8F;QAC9F,iGAAiG;QACjG,uFAAuF;QACvF,uFAAuF;QACvF,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,CAAC,CAAA;YACpB,MAAM,SAAS,GAAG,CAAC,CAAA;YACnB,MAAM,eAAe,GAAG,CAAC,CAAA;YACzB,6FAA6F;YAC7F,2FAA2F;YAC3F,4FAA4F;YAC5F,wFAAwF;YACxF,+FAA+F;YAC/F,qFAAqF;YACrF,MAAM,aAAa,GAAG,EAAE,CAAA;YAExB,MAAM,kBAAkB,GAAG,CAAC,CAAiB,EAAU,EAAE;gBACxD,qGAAqG;gBACrG,iGAAiG;gBACjG,qGAAqG;gBACrG,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAA;gBACvC,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,eAAe,CAAC,CAAA;gBAC/E,IAAI,QAAQ,GAAG,CAAC,CAAA;gBAEhB,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;oBACnC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAK,EAAE,CAAC;wBAC7B,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;wBACjD,MAAM,IAAI,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAA;wBAErE,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;4BACrB,QAAQ,GAAG,IAAI,CAAA;wBAChB,CAAC;oBACF,CAAC;gBACF,CAAC;gBAED,OAAO,OAAO,GAAG,QAAQ,CAAA;YAC1B,CAAC,CAAA;YAED,0GAA0G;YAC1G,wGAAwG;YACxG,6CAA6C;YAC7C,UAAU;iBACR,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACb,CAAC,CAAC,UAAU,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;gBAEpC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAA;YACjC,CAAC,CAAC;gBACF,8HAA8H;iBAC7H,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBACtC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3C,CAAC;QAED,OAAO,UAAU,CAAA;IAClB,CAAC;IAED,KAAK;QACJ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;QACjB,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"candidate-lookup.js","sourceRoot":"","sources":["../candidate-lookup.ts"],"names":[],"mappings":"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"}
@@ -57,6 +57,30 @@ export interface CandidateTable {
57
57
  * 1 when the row is the place's canonical name (vs an alias/abbrev).
58
58
  */
59
59
  is_primary: number | null;
60
+ /**
61
+ * Blended place importance in [0, 1] — the toponym-fame prior the bare-city-name class is decided on (#28). NULL
62
+ * means the score source had no row for this place: UNMEASURED, never "an importance of zero" (meaning-of-zero).
63
+ * Constant across every row of one place — primary, alias and abbrev alike — because it is a property of the PLACE,
64
+ * not of the name that reached it, which is what lets a bare `Moscow` inherit Москва's score through the alias row.
65
+ *
66
+ * **THIS IS THE PRE-SPLIT CONFLATION, AND THE NAME SAYS SO.** It is `place_importance.importance` copied verbatim
67
+ * from the score source — a legacy blended importance whose own build already coalesced the concordance's
68
+ * encyclopedia-derived channel with a population-derived fallback; `place-importance-schema.ts` calls that column
69
+ * DEPRECATED. It is NOT the split `encyclopedic` channel, and the two must not be conflated in a future build:
70
+ * writing the split value here instead was measured on 2026-08-10 and makes the ranking key INERT on three of the
71
+ * four rows it exists to fix. The reason is coverage, not principle — the encyclopedia-concordance join in
72
+ * `admin-global-priority-importance.db` reaches 133,888 of 702,709 scored places and only eleven countries
73
+ * (US/FR/GB/DE/IT/ES/NL/JP/CN/KR/TW). CA, AU and RU have ZERO concordance rows, so Whitby CA, Windsor CA and Epping
74
+ * AU carry the population fallback and nothing else. Under the strict split those three become unmeasured, the
75
+ * consumer's positive-evidence-only rule leaves them exactly where population put them (first), and the famous GB
76
+ * bearer can never overtake them. The conflated column is the only one on which every bearer of a name is scored on a
77
+ * single comparable scale, which is the precondition for comparing them at all.
78
+ *
79
+ * So a consumer reads this as "fame, with population standing in where fame was never measured" — the legacy blended
80
+ * semantics — and NOT as "this place has an encyclopedia entry of this importance". When the score source grows a
81
+ * real `encyclopedic` column for every country, add a SECOND column rather than redefining this one.
82
+ */
83
+ importance: number | null;
60
84
  }
61
85
  /**
62
86
  * `(id → ISO country code)` dictionary.
@@ -92,7 +116,7 @@ export interface CandidateDatabase {
92
116
  * cand_stage` derives its column list from this, so the two tables can't drift. Keep in sync with
93
117
  * {@link CandidateTable}.
94
118
  */
95
- export declare const CANDIDATE_COLUMNS: readonly ["name_key", "country_id", "region_id", "placetype_id", "neg_rank", "spr_id", "name", "latitude", "longitude", "min_lat", "min_lon", "max_lat", "max_lon", "population", "is_primary"];
119
+ export declare const CANDIDATE_COLUMNS: readonly ["name_key", "country_id", "region_id", "placetype_id", "neg_rank", "spr_id", "name", "latitude", "longitude", "min_lat", "min_lon", "max_lat", "max_lon", "population", "is_primary", "importance"];
96
120
  /**
97
121
  * Create the code dictionaries + the transient staging table — called before the build's load passes. `cand_stage`
98
122
  * mirrors {@link CandidateTable} but every column is nullable (the loader fills them positionally). Pass a
@@ -1 +1 @@
1
- {"version":3,"file":"candidate-schema.d.ts","sourceRoot":"","sources":["../candidate-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAO,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEzC;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC9B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC;;OAEG;IACH,SAAS,EAAE,cAAc,CAAA;IACzB;;OAEG;IACH,UAAU,EAAE,cAAc,CAAA;IAC1B,aAAa,EAAE,gBAAgB,CAAA;IAC/B,eAAe,EAAE,kBAAkB,CAAA;CACnC;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,iMAgBpB,CAAA;AAEV;;;;GAIG;AACH,wBAAsB,4BAA4B,CAAC,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B/F;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BvF"}
1
+ {"version":3,"file":"candidate-schema.d.ts","sourceRoot":"","sources":["../candidate-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAO,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEzC;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC9B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC;;OAEG;IACH,SAAS,EAAE,cAAc,CAAA;IACzB;;OAEG;IACH,UAAU,EAAE,cAAc,CAAA;IAC1B,aAAa,EAAE,gBAAgB,CAAA;IAC/B,eAAe,EAAE,kBAAkB,CAAA;CACnC;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,+MAmBpB,CAAA;AAEV;;;;GAIG;AACH,wBAAsB,4BAA4B,CAAC,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC/F;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BvF"}
@@ -36,6 +36,9 @@ export const CANDIDATE_COLUMNS = [
36
36
  "max_lon",
37
37
  "population",
38
38
  "is_primary",
39
+ // Appended, never inserted mid-list: the first six entries ARE the clustered primary key, and the
40
+ // positional `INSERT INTO cand_stage VALUES (…)` in the builder binds by position.
41
+ "importance",
39
42
  ];
40
43
  /**
41
44
  * Create the code dictionaries + the transient staging table — called before the build's load passes. `cand_stage`
@@ -70,6 +73,7 @@ export async function createCandidateStagingTables(db) {
70
73
  .addColumn("max_lon", "real")
71
74
  .addColumn("population", "integer")
72
75
  .addColumn("is_primary", "integer")
76
+ .addColumn("importance", "real")
73
77
  .execute();
74
78
  }
75
79
  /**
@@ -94,6 +98,7 @@ export async function createCandidateTable(db) {
94
98
  .addColumn("max_lon", "real")
95
99
  .addColumn("population", "integer")
96
100
  .addColumn("is_primary", "integer")
101
+ .addColumn("importance", "real")
97
102
  .addPrimaryKeyConstraint("candidate_pk", [
98
103
  "name_key",
99
104
  "country_id",
@@ -1 +1 @@
1
- {"version":3,"file":"candidate-schema.js","sourceRoot":"","sources":["../candidate-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"candidate-schema.js","sourceRoot":"","sources":["../candidate-schema.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,17 @@ export interface AutocompleteResult {
26
26
  export interface AutocompleteSuggestion {
27
27
  name: string;
28
28
  placetype: string;
29
- importance: number;
29
+ /**
30
+ * The REFERENTIAL likelihood the suggestion is ranked by (ROAD_TO_V9 §2). Autocomplete answers "which place does the
31
+ * user mean", so it ranks referentially like everything else; encyclopedic importance rides along on
32
+ * {@link AutocompleteSuggestion.encyclopedic} for display and never enters the order.
33
+ */
34
+ referential: number;
35
+ /**
36
+ * Encyclopedic (Wikipedia) importance, when the FST artifact carries one for this place. `undefined` = no article, or
37
+ * a pre-v5 binary — never 0.
38
+ */
39
+ encyclopedic?: number;
30
40
  wofID: number;
31
41
  parentChain: number[];
32
42
  matchDepth: number;
@@ -36,14 +46,14 @@ export interface AutocompleteOpts {
36
46
  maxSuggestions?: number;
37
47
  maxExpansionDepth?: number;
38
48
  /**
39
- * Collapse same-name suggestions to the single highest-importance one. Off by default (the CLI surfaces distinct
49
+ * Collapse same-name suggestions to the single highest-referential one. Off by default (the CLI surfaces distinct
40
50
  * same-name places — New York the city vs the county); a typeahead wants it ON so the dropdown isn't four "New
41
51
  * London"s. (#587)
42
52
  */
43
53
  dedupeByName?: boolean;
44
54
  }
45
55
  /**
46
- * Autocomplete from the current prefix. Returns suggestions ranked importance-descending.
56
+ * Autocomplete from the current prefix. Returns suggestions ranked referential-descending.
47
57
  */
48
58
  export declare function autocomplete(fst: FSTMatcher, query: string, opts?: AutocompleteOpts): AutocompleteResult;
49
59
  //# sourceMappingURL=fst-autocomplete.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fst-autocomplete.d.ts","sourceRoot":"","sources":["../fst-autocomplete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAIlD,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,sBAAsB,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;CACtB;AAsBD;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,kBAAkB,CA8E5G"}
1
+ {"version":3,"file":"fst-autocomplete.d.ts","sourceRoot":"","sources":["../fst-autocomplete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAIlD,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,sBAAsB,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;CACtB;AAsBD;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,kBAAkB,CA8E5G"}
@@ -22,15 +22,15 @@ import { normalizeTokens } from "./fst-matcher.js";
22
22
  */
23
23
  const PER_BRANCH = 4;
24
24
  /**
25
- * The top-`k` entries by importance (descending). Avoids sorting/allocating when `entries` is small.
25
+ * The top-`k` entries by REFERENTIAL likelihood (descending). Avoids sorting/allocating when `entries` is small.
26
26
  */
27
- function topByImportance(entries, k) {
27
+ function topByReferential(entries, k) {
28
28
  if (entries.length <= k)
29
29
  return [...entries];
30
- return [...entries].toSorted((a, b) => b.importance - a.importance).slice(0, k);
30
+ return [...entries].toSorted((a, b) => b.referential - a.referential).slice(0, k);
31
31
  }
32
32
  /**
33
- * Autocomplete from the current prefix. Returns suggestions ranked importance-descending.
33
+ * Autocomplete from the current prefix. Returns suggestions ranked referential-descending.
34
34
  */
35
35
  export function autocomplete(fst, query, opts = {}) {
36
36
  const maxSuggestions = opts.maxSuggestions ?? 10;
@@ -66,7 +66,7 @@ export function autocomplete(fst, query, opts = {}) {
66
66
  if (!cont.token.startsWith(partial))
67
67
  continue;
68
68
  // This edge completes the typed partial token — its target is a real match at depth+1.
69
- for (const entry of topByImportance(fst.accepting(cont.targetState), PER_BRANCH)) {
69
+ for (const entry of topByReferential(fst.accepting(cont.targetState), PER_BRANCH)) {
70
70
  addSuggestion(seen, entry, complete.length + 1, [cont.token]);
71
71
  }
72
72
  // BFS a little past it too (multi-token completions: "new yor" → "New York Mills").
@@ -81,7 +81,7 @@ export function autocomplete(fst, query, opts = {}) {
81
81
  const item = queue.shift();
82
82
  if (item.depth > maxExpansionDepth)
83
83
  continue;
84
- for (const entry of topByImportance(fst.accepting(item.stateID), PER_BRANCH)) {
84
+ for (const entry of topByReferential(fst.accepting(item.stateID), PER_BRANCH)) {
85
85
  addSuggestion(seen, entry, depth + item.depth, item.tokens);
86
86
  }
87
87
  if (item.depth < maxExpansionDepth) {
@@ -90,7 +90,7 @@ export function autocomplete(fst, query, opts = {}) {
90
90
  }
91
91
  }
92
92
  }
93
- let suggestions = [...seen.values()].toSorted((a, b) => b.importance - a.importance);
93
+ let suggestions = [...seen.values()].toSorted((a, b) => b.referential - a.referential);
94
94
  if (opts.dedupeByName) {
95
95
  suggestions = dedupeByName(suggestions);
96
96
  }
@@ -103,7 +103,8 @@ function addSuggestion(seen, entry, matchDepth, completionTokens) {
103
103
  seen.set(entry.wofID, {
104
104
  name: entry.name,
105
105
  placetype: entry.placetype,
106
- importance: entry.importance,
106
+ referential: entry.referential,
107
+ ...(entry.encyclopedic === undefined ? {} : { encyclopedic: entry.encyclopedic }),
107
108
  wofID: entry.wofID,
108
109
  parentChain: entry.parentChain,
109
110
  matchDepth,
@@ -111,7 +112,7 @@ function addSuggestion(seen, entry, matchDepth, completionTokens) {
111
112
  });
112
113
  }
113
114
  /**
114
- * Keep one suggestion per name — the highest-importance. Input is already importance-sorted, so the first occurrence
115
+ * Keep one suggestion per name — the highest-referential. Input is already referential-sorted, so the first occurrence
115
116
  * per name wins; order is preserved.
116
117
  */
117
118
  function dedupeByName(suggestions) {
@@ -1 +1 @@
1
- {"version":3,"file":"fst-autocomplete.js","sourceRoot":"","sources":["../fst-autocomplete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAqClD;;GAEG;AACH,MAAM,UAAU,GAAG,CAAC,CAAA;AAEpB;;GAEG;AACH,SAAS,eAAe,CAAC,OAA8B,EAAE,CAAS;IACjE,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAA;IAE5C,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAChF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAe,EAAE,KAAa,EAAE,OAAyB,EAAE;IACvF,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAA;IAChD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAA;IACrD,MAAM,gBAAgB,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IAE/C,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAA;IAClE,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkC,CAAA;IACtD,MAAM,KAAK,GAAc,EAAE,CAAA;IAC3B,IAAI,KAAa,CAAA;IAEjB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAExC,IAAI,KAAK,EAAE,CAAC;QACX,gGAAgG;QAChG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QAEnB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC5C,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC1E,CAAC;IACF,CAAC;SAAM,CAAC;QACP,iGAAiG;QACjG,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9C,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAA;QACxC,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,SAAS,CAAC,CAAA;QAErF,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAA;QAC9D,CAAC;QAED,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAA;QAEvB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,SAAQ;YAE7C,uFAAuF;YACvF,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;gBAClF,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;YAC9D,CAAC;YAED,oFAAoF;YACpF,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC1E,CAAC;IACF,CAAC;IAED,+FAA+F;IAC/F,6FAA6F;IAC7F,+FAA+F;IAC/F,6FAA6F;IAC7F,OAAO,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,GAAG,cAAc,GAAG,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;QAE3B,IAAI,IAAI,CAAC,KAAK,GAAG,iBAAiB;YAAE,SAAQ;QAE5C,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;YAC9E,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC5D,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,GAAG,iBAAiB,EAAE,CAAC;YACpC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpD,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACvG,CAAC;QACF,CAAC;IACF,CAAC;IAED,IAAI,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAA;IAEpF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACvB,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;IACxC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,CAAA;AAC7F,CAAC;AAED,SAAS,aAAa,CACrB,IAAyC,EACzC,KAAiB,EACjB,UAAkB,EAClB,gBAA0B;IAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAEtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,IAAI,UAAU;QAAE,OAAM;IAEzD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE;QACrB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,UAAU;QACV,gBAAgB,EAAE,CAAC,GAAG,gBAAgB,CAAC;KACvC,CAAC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,WAAqC;IAC1D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,MAAM,GAAG,GAA6B,EAAE,CAAA;IAExC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;QAEhC,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAQ;QAChC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACZ,CAAC;IAED,OAAO,GAAG,CAAA;AACX,CAAC"}
1
+ {"version":3,"file":"fst-autocomplete.js","sourceRoot":"","sources":["../fst-autocomplete.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fst-builder.d.ts","sourceRoot":"","sources":["../fst-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAA2B,MAAM,gBAAgB,CAAA;AAyC1G,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG;IACpD,OAAO,EAAE,UAAU,CAAA;IACnB,UAAU,EAAE,aAAa,CAAA;IACzB,MAAM,EAAE,cAAc,CAAA;CACtB,CA+TA"}
1
+ {"version":3,"file":"fst-builder.d.ts","sourceRoot":"","sources":["../fst-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAA2B,MAAM,gBAAgB,CAAA;AAqC1G,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG;IACpD,OAAO,EAAE,UAAU,CAAA;IACnB,UAAU,EAAE,aAAa,CAAA;IACzB,MAAM,EAAE,cAAc,CAAA;CACtB,CAyTA"}
@@ -13,6 +13,7 @@
13
13
  import { DatabaseSync } from "node:sqlite";
14
14
  import { readWOFSourceIdentity } from "./fst-freshness.js";
15
15
  import { FSTMatcher, normalizeTokens } from "./fst-matcher.js";
16
+ import { loadImportanceSplit } from "./place-importance-schema.js";
16
17
  const DEFAULT_PLACETYPES = [
17
18
  "country",
18
19
  "region",
@@ -115,32 +116,18 @@ export function buildFSTFromWOF(opts) {
115
116
  }
116
117
  return chain;
117
118
  }
118
- // Phase 3: Load importance data (Wikipedia-based, falls back to population-scaled).
119
- // See docs/articles/concepts/importance-vs-population.md for the two-signal contract.
120
- progress("importance", "Loading importance data");
121
- const importanceMap = new Map();
122
- try {
123
- const impStmt = db.prepare("SELECT id, importance FROM place_importance");
124
- const impRows = impStmt.all();
125
- for (const row of impRows) {
126
- importanceMap.set(row.id, row.importance);
127
- }
128
- progress("importance", `Loaded ${importanceMap.size} importance scores`);
129
- }
130
- catch {
131
- progress("importance", "No place_importance table — falling back to population");
132
- try {
133
- const popStmt = db.prepare("SELECT id, population FROM place_population");
134
- const popRows = popStmt.all();
135
- for (const row of popRows) {
136
- const normalized = row.population > 0 ? Math.min(1, Math.log2(1 + row.population / 1000) / 14) : 0;
137
- importanceMap.set(row.id, normalized);
138
- }
139
- }
140
- catch {
141
- progress("importance", "No place_population either — using 0 for all");
142
- }
143
- }
119
+ // Phase 3: Load BOTH scores (ROAD_TO_V9 §2 R1, the two-score split).
120
+ //
121
+ // Referential is ALWAYS population-anchored and never read out of a legacy `place_importance`
122
+ // column, because a legacy row that got a Wikipedia score overwrote whatever population would have
123
+ // said and the two are indistinguishable afterwards. Encyclopedic rides along for consumers and is
124
+ // never handed to the decoder. `loadImportanceSplit` handles all four schema generations; the
125
+ // source it reports is stamped into provenance so an artifact says which one it read.
126
+ progress("importance", "Loading referential + encyclopedic scores");
127
+ const split = loadImportanceSplit(db);
128
+ progress("importance", `${split.referential.size} referential, ${split.encyclopedic.size} encyclopedic (source: ${split.source}` +
129
+ (split.legacyFallbackRows ? `, ${split.legacyFallbackRows} legacy rows attributed to the population pass` : "") +
130
+ ")");
144
131
  // Phase 4: Load names for matching places.
145
132
  progress("names", "Loading name variants");
146
133
  const placeIds = sprRows.map((r) => r.id);
@@ -219,12 +206,16 @@ export function buildFSTFromWOF(opts) {
219
206
  let insertCount = 0;
220
207
  for (const row of sprRows) {
221
208
  const parentChain = resolveParentChain(row.id);
209
+ const encyclopedic = split.encyclopedic.get(row.id);
222
210
  const entry = {
223
211
  wofID: row.id,
224
212
  placetype: row.placetype,
225
213
  name: row.name,
226
214
  parentChain,
227
- importance: importanceMap.get(row.id) ?? 0,
215
+ referential: split.referential.get(row.id) ?? 0,
216
+ // Spread rather than assigned: a place with no Wikipedia article must carry NO field, not a
217
+ // zero. The serializer's per-place presence bit reads `!== undefined`.
218
+ ...(encyclopedic === undefined ? {} : { encyclopedic }),
228
219
  lat: row.latitude,
229
220
  lon: row.longitude,
230
221
  };
@@ -264,7 +255,9 @@ export function buildFSTFromWOF(opts) {
264
255
  placeCount: sprRows.length,
265
256
  edgeCount,
266
257
  nameInsertions: insertCount,
267
- importanceMatches: importanceMap.size,
258
+ importanceMatches: split.referential.size,
259
+ encyclopedicMatches: split.encyclopedic.size,
260
+ importanceSource: split.source,
268
261
  sourceDB: opts.dbPath,
269
262
  sourceDBMD5: source.md5,
270
263
  sourceDBBytes: source.bytes,