Skip to content

v4.16.0

Choose a tag to compare

@github-actions github-actions released this 27 Jun 13:27
  • chore(demo): point the admin gazetteer at 2026-06-27a (GeoNames fold + FTS) (a670a50)
  • feat(gazetteer): durable GeoNames-alias upstream fold + from-scratch candidate build (d6cc78f)
  • feat(nominatim,photon): wire the candidate gazetteer for worldwide resolution (#824) (3da5f92)
  • fix(resolver): gate candidate fuzzy fallback on unfiltered name existence (f7b7846)
  • feat(resolver): unify the candidate gazetteer with FTS5-trigram typo tolerance (43d0b67)
  • blog(research): "We made Mailwoman speak Nominatim, and it put Warsaw in Indiana" (55ba8d7)
  • docs(postmortem): add the drop-in robustness hardening + #824, refresh numbers (a628b24)
  • test(nominatim): gate malformed-input robustness in the parity harness (44634cb)
  • fix(nominatim,photon,libpostal): harden the drop-ins against malformed input (500 → graceful) (fd402f7)
  • docs(frontier-gap): note the MAILWOMAN_CANDIDATE_DB config dependence (#824) (52cd051)
  • docs(postmortem): caveat the frontier numbers + record the config-confound lesson (7812b61)
  • eval(#822): correct the frontier report — numbers are config-dependent (no candidate DB) (5f6f7fb)
  • eval(#822/#823): split the residual into name-not-found vs wrong-place (f121f27)
  • docs(postmortem): add the #822/#823 frontier-diagnostic thread (1250323)
  • eval(#822): measure bare-vs-country-hint — split the placer lever from exonym/coverage (56aee10)
  • eval(#822): country-by-country placer-frontier diagnostic + measured report (b1d5142)
  • docs(AGENTS): add the 7 drop-in/annotation workspaces + fix the stale counts (7c7a943)
  • docs(postmortem): 2026-06-26 night shift — drop-in API + annotations vertical (0686e08)
  • feat(nominatim): honor countrycodes on /search — restriction + manual frontier override (c0ead21)
  • docs(switching-from-nominatim): reflect shipped street-level + global resolution (495b20f)
  • test(nominatim): cover /reverse in the parity harness + README reflects street-level details (094eb0c)
  • feat(nominatim): street-level addressdetails + country backfill on /search (79bbb8d)
  • fix(nominatim,photon): stop forcing US — non-US queries resolved to US namesakes (24b88ac)
  • docs: nominatim + photon READMEs reflect the shipped, enriched reality (f4fbd1b)
  • fix(nominatim): full country annotations on /search (not just /reverse) (63ed0bc)
  • test(smoke): cover the 7 new drop-in + annotation packages in the clean-install guard (706ac6d)
  • docs(nominatim): the annotations block is full now — refresh the CLI docblock (c1eca60)
  • feat(nominatim): compose the NUTS annotator — completes OpenCage parity (b96ab2d)
  • feat(pkg): @mailwoman/nuts-lookup — EU coordinate → NUTS codes (#817) (891be90)
  • docs(spatial): MGRS shipped — refresh the coordinate-formats docblock (83f77e6)
  • feat(spatial): MGRS coordinate format — completes the coordinate-format set (#813) (ab5bcff)
  • feat(codex): calling code + currency in the country-reference annotator (#814 complete) (13b0e94)
  • feat(spatial): sun times annotator — sunrise / solar-noon / sunset (#813 follow-up) (ac953ec)
  • feat(nominatim): compose the UN/LOCODE annotator (Phase 4 wiring) (61a09fc)
  • feat(pkg): @mailwoman/un-locode-lookup — place → UN/LOCODE (#816) (fb651c4)
  • build(release): add the 5 new drop-in packages to the publishable workspace set (9a0080b)
  • docs: de-slop the Pelias guide header ("shape of" → "Mapping the move") (afcfc54)
  • docs: "Switching from OpenCage" + "Switching from Pelias" — completes the series (#820) (3e4eca9)
  • docs: "Switching from Photon" + "Switching from libpostal" guides (#820) (bd70c6d)
  • docs: correct the annotations list in the Nominatim guide (MGRS not yet shipped) (77c112a)
  • docs: "Switching from Nominatim" guide (#820, first of the series) (ddfafbe)
  • fix(deps): @mailwoman/annotations is a devDependency of codex + spatial (ci:smoke E404) (b8d974c)
  • docs: competitor comparison matrix (#819) — no API key, no monthly fee (79ce6ed)
  • feat(nominatim): compose the timezone annotator into responses (Phase 3 wiring) (88510c3)
  • feat(pkg): @mailwoman/timezone-lookup — server-side coordinate → IANA timezone (#815) (850c4c4)
  • feat(codex): country-reference annotator — flag + ISO (#814, data-free part) (b2d8f93)
  • feat(nominatim): enrich results with the annotations block (Phase 2 wiring) (040f358)
  • feat(spatial): coordinate-format annotators — DMS/geohash/Maidenhead/Mercator/qibla (#813) (e56644d)
  • feat(photon): wire the real engine — /api + /reverse (#810); declare drop-in deps (cfff217)
  • feat(nominatim): wire the real engine — /search + /reverse (#802/#803) (da2cb81)
  • feat(nominatim): the result formatter (#804) + export mailwoman/resolver-backend (16d3b34)
  • feat(pkg): @mailwoman/libpostal — working parse/expand drop-in (Phase 1, #821) (7ff1bce)
  • feat(pkg): @mailwoman/annotations — the enrichment composer (Phase 0, #812) (f5a78a1)
  • test(cartographer): park the terrain/DEM Composer tests to match the disabled code (e8e7b26)
  • Remove outdated refs. (f6106bd)
  • Format. Tidy. Prep. (10b9c07)
  • Use feature. (46af9a3)
  • Clean up build. (8a711cc)
  • Fix path. (e283282)
  • Consistent node versions. (3636b93)
  • Update shape. (7ceae75)
  • feat(pkg): scaffold @mailwoman/nominatim + @mailwoman/photon drop-in packages (3beb2dc)
  • docs: stop rendering internal reviews + night-shift postmortems on the public site (b29d98c)
  • docs: harden CORPUS_V0_4_0_GENERATION MDX — collapse the multi-line {…} code span (3f752f7)
  • docs: scrub /mnt/playpen → $MAILWOMAN_DATA_ROOT in CORPUS_V0_4_0_GENERATION (b3145d2)
  • docs: scrub the /mnt/playpen lab path from published prose → $MAILWOMAN_DATA_ROOT (e5b67d4)
  • docs(agents): note the data-root path convention (never re-hardcode /mnt/playpen) (bf79016)
  • refactor(paths): centralize /mnt/playpen data-root literals across the dev scripts (f7a53c9)
  • refactor(paths): route tiger SDK + ResolveRouter through the central data-root helper (57542c0)
  • refactor(paths): centralize the /mnt/playpen data-root literal into one path-ts helper (541c35f)
  • fix(tsconfig): exclude test files from the spatial + cartographer builds (1f8fdc8)
  • fix(cartographer): LayerSpecificationList shared mutable link-state (dee97d7)
  • test(core): cover WOF placetype-spec parsing (placetypes/admin.ts) (78f1ea2)
  • fix(resolver-web): bump web FST MAX_VERSION 2→4 + tests; fix test-file types (84517b9)
  • test(spatial): cover polygon predicates + OSM helpers (polygon.ts) (de208d5)
  • test(neural): cover the codex span-proposer lexicon (#370, span-proposer-lexicon.ts) (f1db198)
  • test: cover WKT, server metrics, placetype-depth, WOF-JSON (38 tests) (9953679)
  • test(mailwoman): cover the resolver-backend path helpers (A.2 follow-up) (f18f67d)
  • test(spatial/cartographer): cover GeoPoint.from, place-id, tile coords (38 tests) (39e2fea)
  • fix(core): smartSnakeCase dropped its own period-normalization for all-caps (7c6eaf3)
  • test(resolver): cover the point-in-polygon helpers (geo.ts) (88e57c4)
  • test(neural): cover #690 input case-normalization (case-normalize.ts) (01e49bc)
  • test(pipeline): cover locale-gate + phrase-grouper rules (47 tests) (dccc62c)
  • test(registry): cover the GeoJSON entity export (geojson.ts) (db4c24a)
  • test(kind-classifier): cover the 9 Stage-2.5 query-shape routing rules (899e101)
  • docs(review): mark the P1/P2 items cleared this night shift (6d45f70)
  • test(normalize): cover NFC composition + offset estimate (nfc.ts) (a82bd3b)
  • test(normalize): cover punctuation folding + offset tracking (punctuation.ts) (8d169ef)
  • test(policy): cover the default policy table (policy/defaults.ts) (69210f1)
  • test(codex): cover the remaining postal-reference lookups (28 tests) (0853412)
  • test(normalize): cover offset-map composition (offset-map.ts) (0668804)
  • test(codex): cover country resolution (country/country.ts) (7c663af)
  • test(codex): cover US PO-box detection (us/po-box.ts) (ecc356f)
  • test(codex): cover USPS street directionals (us/street-directional.ts) (8da0a35)
  • fix(spatial): is2DBBox checked length 6 (3D) — never matched a 2D bbox (13e5ed6)
  • test(spatial): cover haversineKm — the load-bearing distance formula (b3e80c2)
  • test(classification): cover ClassificationsMatchMap + isVisibleClassification (271811c)
  • test(solvers): cover the 7 untested refinement solvers (review P2) (308ced3)
  • test(solver): cover HashMapSolver.generateHashMap (review P2) (3399174)
  • chore: public-release P1 — CHANGELOG, SPDX normalization, gitignore, ledger note (9cc5518)
  • docs(status): bring the status page current — 4.11.0 → 4.15.0 (66cee8f)
  • docs(agents): refresh the orientation table — 28 workspaces, not six (6ba4d46)
  • docs: add community-health files (SECURITY, CONTRIBUTING, CODE_OF_CONDUCT) (309fc66)
  • fix: public-release correctness — real --version + Node engines (review P2) (e111431)
  • refactor(scripts): one home for the argv arg() helper (PRIMARY A.1) (ef8df5d)
  • fix(scripts): don't statically resolve the git-excluded geocode.earth diag (b836e81)
  • refactor(server): one home for the data root + WOF shard list (PRIMARY A.2) (5155eb0)
  • chore(scripts): put the toolshed under the type checker (PRIMARY C) (fbe66d6)
  • docs(review): fix MDX build — strikethrough breaks Docs CI (604f385)
  • Format. (2af4a21)
  • Format. (97816fb)
  • Add handoff. (8758441)
  • docs(readme/notices): fix the public-facing front door (P0) (f609dea)
  • docs(reviews): 2026-06-25 project-wide mile-marker review (0e7c1eb)
  • feat(coverage): global "work to do" map — civilization-holes layer + coverage-v5 (#800) (9ba45f0)
  • Format. (7855afb)
  • Update action helpers. (7f619d7)
  • feat(resolver/#370): promote span-rescore to default-ON (#799) (0ddf7dc)
  • docs(eval/#219): same-harness EU+AU competitive standing (v4.15.0 + -20j) (#798) (33f4a8e)
  • docs(releasing): fast-path cheat sheet for model promotion (v4.15.0 lessons) (#797) (9149333)