Skip to content

Releases: sister-software/mailwoman

v4.10.0

15 Jun 18:56

Choose a tag to compare

  • fix(address-id): bump 4.9.0 → 4.9.1 — the 4.9.0 first publish shipped untranslated workspace:* deps (#659) (a47df5f)
  • chore(release): add the matcher family + address-id to the automated publish track (#658) (ff7caad)
  • fix(record-matcher): pin the FS spine for cross-dataset flows — the GBT is dedup-calibrated (#655) (#656) (3fb9a80)
  • chore(release): add @mailwoman/spatial to the automated publish flow (#657) (aca7687)
  • feat(address-id): @mailwoman/address-id — stable address primary key for deterministic joins (#259) (#654) (1389455)
  • feat(registry): learned scorer DEFAULT-ON + cross-state validation (#603) (#653) (46ee4ca)
  • feat(record-matcher): productionize the learned GBT scorer (#603) (#652) (2bc0bd7)
  • docs(concept): the address-frequency lever needs a corpus (matcher levers are default-on) (#651) (d3021d3)
  • feat(record-matcher): end-to-end real-data run → reconciliation GeoJSON (#87) (#648) (ba768aa)
  • feat(registry): flip the proven matcher levers default-on (#86) (#650) (bc713f1)
  • fix(geocoder): recognize US regions on bare "City, State" — admin-tier wrong-state fix (#642) (#646) (a937679)
  • test(demo): #638 was a measurement artifact — the street geocoder byte-ranges correctly (#649) (0cceb9f)
  • feat(registry) + eval: learned-scorer clustering A/B — the GBM beats the FS spine +5.2pp (#603 Tier 2) (#641) (4d90633)
  • docs(evals): night-16 shift postmortem — #603 learned-scorer GBM greenlit (robustly), M verified, 2 bugs diagnosed (#644) (9936cc4)
  • eval(geocoder): namesake probe — admin tier resolves to the wrong US STATE without a postcode (#642) (#643) (23db0fd)
  • eval(record-matcher): add the gradient-boosted-trees arm — the tree extends the linear gain (#603) (#640) (0aa67bb)
  • test(demo): verify-httpvfs-street probe — White House resolves to exact building, client-side (#377) (#639) (1c08a30)
  • eval(record-matcher): learned-scorer probe — LR beats Fellegi-Sunter on the FS feature vector (#603) (#637) (f66a2ba)
  • feat(registry): FCC commitments two-HCP row explode — 4-source cross-dataset (#618 B1) (#636) (d5af284)
  • feat(registry): inferMapping — best-effort column-mapping from a header + registry --infer-mapping (#603) (#635) (e4dd6a5)
  • feat(cli): mailwoman registry --sources — full-pipeline multi-source / cross-dataset command (#618) (#634) (b4848bd)
  • feat(registry): secondary-identifier discriminators — the first lever past the dedup spine (#625) (#633) (305cfb4)
  • feat(match): average-linkage clustering option (A4) — tested, default-off; documented negative on NPPES (#625) (#632) (46fe3ea)
  • perf(registry) + eval: matcher scale, O(clusters×links)→linear cohesion, CA generalization, blog (#K) (#631) (0407867)
  • feat(registry): coverage reconciliation — eligibility ↔ enrollment anti-join (#621) (#629) (0eda737)
  • eval(registry): geocoder validation vs TX HHSC provided coordinates (#619) (#628) (ff01754)
  • docs(concepts): spatial expectation + density — distinctiveness as evidence, expected facility density as coverage signal (#624) (eea7de6)
  • feat(registry): cross-dataset correlation + source catalog (#618, #620) (#627) (fedf9b8)
  • feat(match): comparison-model v2 — spatial collapse (A1) + corroboration/phone options (#625) (#626) (87508be)
  • feat(registry): mailwoman registry <csv> CLI — geocode-first matcher end to end (#613) (#614) (3760911)
  • feat(registry): NPPES dedup benchmark + inverse-address-frequency fix (#617) (#623) (42959fe)
  • feat(registry): streaming delimited ingest via spliterator (#616) (#622) (a9e4059)
  • feat: record-matcher foundation — @mailwoman/formatter (#599) + @mailwoman/record (#600) (#607) (59c5525)
  • feat+eval(coarse-placer): OA off-map breadth — builder + verdict (#244) (#597) (917c57c)
  • docs: postmortem — coarse-placer arc M1 → default-on → v4.9.0 (#244) (#612) (1e71ea8)

v4.9.0

14 Jun 20:39

Choose a tag to compare

  • feat(core): full in-map posterior distribution as anchorPosterior (#244 residual) (#611) (26c9476)
  • feat(mailwoman): coarse-placer soft prior default-on (#244) (#610) (6e0925d)
  • test(eval): across-11 in-map misrouting gate — 0 misroutes (#244 default-on) (#609) (c4ed06d)
  • feat(core): open-set reject rule for the coarse-placer (#244 M2) (#608) (b423b96)
  • feat(core): coarse-placer soft country prior — full M1 (#244) (#606) (b5e682e)
  • docs(plan): coarse-placer soft-country-prior wiring spec (#244) (#605) (adfafab)

v4.8.1

14 Jun 15:45

Choose a tag to compare

  • fix(publish): make every published package clean-installable + add smoke guard (#596) (9d4d8ee)

v4.8.0

14 Jun 14:44

Choose a tag to compare

  • feat(geocode): wire per-region interp calibration (#374/#584) (#593) (ebadfaa)
  • fix(core): correct __isCompiledTree detection — read core/data directly (#481) (#594) (3d1ecc2)
  • blog: the autocomplete that couldn't finish a word (night-15) (#592) (bcdda90)
  • docs: correct reconcile-as-default (retired in #566, argmax is the default) (#591) (b2c94de)
  • eval(neural): punctuation-stress verdict — span proposer doesn't earn revival (#518) (#590) (cfa69b3)
  • eval(resolver): interp radius factor is regional — 1.70 is a TX artifact (#374) (#584) (78892ed)
  • docs(plan): client-side geocoder demo spec + byte-range measurement (#377) (#583) (267194b)
  • docs(evals): reconcile re-gate post-#565 — keep retired (argmax stays default) (#580) (bbea1cf)
  • feat(coarse-placer): int8 quantization + fromArtifactDir loader (#244-M3) (#581) (40a7778)
  • feat(demo): client-side geocoder + place-autocomplete typeahead (#377/#190) (#585) (362c4f0)
  • feat(resolver): char-level + dedupe in FST autocomplete (#587) (#588) (4268974)
  • fix(ci): bridge compiled data dir so the Test job's CLI parse finds dicts (#589) (80e1eeb)
  • fix(ci): unblock all CI — regenerate yarn.lock + vitest configs type-check under vite 8 (#579) (96b824b)
  • docs(evals): night-15 shift postmortem (#586) (68ff102)
  • Update gitignore. (c6f4843)
  • Remove. (916abaf)
  • Format. (9a61f33)
  • format. (f5d6150)
  • fix(demo-assets): idempotent sql.js staging to stop dev reload loop (87166d7)
  • fix(demo-assets): bypass core/resolver barrel re-export in webpack (6bd709d)
  • feat(docs): add Storybook (Vite builder) with leaf-component stories (fdc4bca)
  • refactor(docs): modernize KindBadge (12a692e)
  • refactor(docs/demo): extract map helpers + dedupe classifier-load config (cc0445a)
  • fix(docs): clear eslint errors in demo components (29fc277)
  • test(docs): demo build-health gate + local-build e2e baseline (32f8720)

v4.7.0

14 Jun 02:55

Choose a tag to compare

  • fix(cli): geocode resolves the WOF path before loading weights (error order) (#578) (cfd47eb)
  • docs(plan): arbitration layer spec (#478) - pipeline >= v0 by construction (#577) (e3bda54)
  • fix(phrase-grouper): exclude the house number from STREET_PHRASE (#565) (#576) (f963943)
  • feat(coarse-placer): #244 milestone 1 — calibrated closed-set placer (pure TS) (#575) (b1d2116)
  • feat(server): versioned data switchover — atomic zero-downtime shard reload (#485 piece 4) (#574) (6e655e7)
  • feat(resolver): RemoteResolver — the Resolver interface over HTTP (#485 piece 3) (#573) (53f292d)
  • docs(evals): night-14 postmortem — geocoder built, calibrated, made callable (5c9f424)
  • feat(server): observability — /health + /metrics (#485 piece 2) (#572) (be39131)
  • feat(server): street-level /api/geocode + /api/batch over a shared cascade (#485 piece 1) (#571) (5ced66d)
  • feat(resolver): conformal-calibrated interpolation radius — honest 90% confidence (#569) (55390b8)
  • fix(resolver): empty/tableless shard degrades gracefully instead of crashing (#568) (#570) (0682d4d)
  • feat(situs): national address-point build driver + corrected US licensing (#567) (120102c)
  • fix(pipeline): retire joint-reconcile as the default decode path (#566) (0bbc976)
  • fix(cli): geocode uses the raw neural parse (not the reconcile pipeline) — situs/interp now fire (2922eb6)
  • eval(resolver): error CDF + full miss-dump under MAILWOMAN_DIAG_INTERP (DoD diagnostics) (567f587)
  • feat(situs): --license-filter (source allow-list) for the address-point builder (ODbL hygiene) (c17b6d6)
  • feat(cli): mailwoman geocode — end-to-end street-level geocoder command (0632716)
  • eval(confidence): conformal calibration harness (#374) — the DoD "reasonable confidence" half (60b5a45)
  • docs(plan): DoD checkpoint MET (98.8% within 100m) + OSM/licensing analysis folded in (35748bf)
  • feat(coverage): national TIGER interpolation driver + 50-state FIPS (Stream 2 prep) (aeb266c)
  • feat(cli): mailwoman reverse — expose #484 reverse geocoding (Stream 4) (954b7e2)
  • eval(parser): national parser-coverage audit — Stream-0 GATE PASS (99.7% precondition) (47844ef)
  • docs(plan): coverage de-risked — national TIGER build ~30-45 min (measured), not hours (9f83533)
  • docs(plan): geocoder-v1 campaign — the confident lineup (DoD-anchored, DeepSeek-vetted) (d9d92a3)
  • fix(resolver): reassemble full street for the coordinate tiers — VT p50 3.6km → 0.0km (#483/#476) (cfd91ac)
  • eval(resolver): --interpolation flag + neural+interp coordinate-cascade row (#483) (712c590)
  • feat(resolver): wire house-number interpolation into the resolve cascade (#483) (74642e5)
  • docs(evals): record v4.6.0 SHIPPED + the 4.5.1 ship hiccup/recovery in the postmortem (d17744c)

v4.6.0

13 Jun 17:29

Choose a tag to compare

  • release(v4.6.0): promote v1.5.0-fr-order — fr.house_number recovery, floor re-baselined (2ea962f)
  • docs(evals): fr.house_number threshold research — 91% floor is mis-calibrated (#564) (92c29fc)
  • blog+postmortem: the fr.house_number recovery — a clean negative (night-13) (fee289a)
  • docs(evals): fold the Phase-3 de-risk into the night-13 postmortem (dca2dc3)
  • docs(schedule): #484 reverse-geocoding verified — production tests PASS on real DBs (841d3e0)
  • docs(schedule): #483 VT gate PASSES in ladder mode — re-measured, only wiring remains (c2389a2)
  • chore(gitignore): ignore per-run training-output dirs (output-*/) (a5aa027)
  • docs: finalize prettier formatting on night-13 schedule + postmortem (8ef7045)
  • docs: prettier-format night-13 postmortem + forward schedule (fix blockquote reflow) (67b8db4)
  • docs(schedule): Phase-3 is more built than #488 implies — #484 also has a green engine (edded8c)
  • docs(schedule): correct #483 status — engine built (Cook passes, VT misses), not greenfield (aaeaa7f)
  • docs(evals): v1.5.1 result — weight falsified + postcode fragmentation; forward schedule (e432a09)
  • fix(gate): enforce arena.perturb floor — bridge core/out/data for the compiled v0 parser (80a2d45)

v4.5.1

13 Jun 17:21

Choose a tag to compare

  • docs: handoff to Claude — night-13 re-gate verdict + supplemental session summary (7b302fa)
  • docs(evals): 2026-06-13 night-shift postmortem + v1.5.1 launch (789163b)
  • train(config): v1.5.1-fr-order — bump synth-fr-order weight 3.0 → 6.0 (728b67b)
  • docs: complete night-13 postmortem — fr.house_number 87.2%, re-gate verdict, supplemental session log (4920659)
  • fix(corpus): drop phantom subregion from imls adapter — US postal addresses don't surface counties (#552) (1422d23)
  • fix(resolver): preserve actual placetype in fetchLocalitiesById instead of hard-stamping 'locality' (#523) (4572ebf)
  • chore: .gitignore night-shift ephemera, deepseek traces, diag scripts (#379) (4c93bb2)
  • chore(parser): hardening part 2b — export ParseOpts, explicit compiled-tree detection, name grouper constant (#481) (cc8b38d)
  • docs: supplemental shift plan + re-gate runbook + postmortem session continuity (3133954)
  • style: prettier sweep — format-only across 25 drifted files (Task 5) (cb2ea16)
  • eval(fr-golden): diversify FR house_number eval — 150 OA-sourced rows, 50 distinct localities (#563) (a0b877e)
  • feat(codex): NZ 'Private Box' colloquial alias — recognize-as-used with officiallyInvalid citation (#517) (#562) (8a09126)
  • feat(corpus): reversed-order FR shard builder — recover fr.house_number (#560) (#561) (e0a9a50)

v4.5.0

12 Jun 23:16

Choose a tag to compare

  • feat(train): v0.5.0 char-offset launch — config, gate, R2 reroute, overlay re-emit (#559) (6379bac)
  • docs(blog): add missing tag definitions to tags.yml (2609345)
  • fix(train): skip astral UTF-16-offset rows in iter_encoded (#519 stopgap) (#558) (3466bf3)
  • docs(operations): codify the package-vs-corpus version lines (#557) (4d332a5)
  • docs(night-12): postmortem + crash-recovery blog post (#556) (f81e5ce)
  • fix(corpus): NFC-normalize in align + bounds-quarantine + resume — v0.5.0 build crash recovery (#554) (7ba151a)
  • feat(codex): level/floor designators + US military formats (#517) (#553) (0c71f0b)
  • chore(vitest): exclude agent worktrees from sweep + STAGES docs-lag (#551) (8761ad5)
  • eval(rows): expand punctuation-stress 120→200 + demo-cascade-smoke 21→39 (#550) (725338a)
  • data(postcode): GeoNames US.txt fill infrastructure for #525 residual (#549) (7993e05)
  • eval(interpolation): encode #483 banded-gate ruling (2026-06-12) (#548) (c8ac36c)
  • feat(pi): add prompt templates, custom tools, and eval viewer extension (50509ca)
  • Format. (7a8c297)
  • feat(cli): mailwoman autocomplete command — FST prefix walk wired to CLI (#190) (#547) (a69d229)
  • feat(neural): Stage 2.7 span proposer DEFAULT ON (operator ruling 2026-06-12) (#546) (d3dfc17)
  • fix(corpus): boundary-preferred + longest-first span location — the pilot gate's two catches (#519) (#545) (7a2e8c0)
  • feat(pipeline): Stage 2.7 span proposer — both v0-win quadrants closed, default-OFF (#518) (#544) (f3cd496)
  • feat(resolver): boundary-preserving alias-bag separator in place_search FTS (#523) (#543) (ec3a4f3)
  • feat(interpolation): Method 2 address-point interpolation — Cook PASSES gate, VT improved-still-MISS (#483) (#542) (049ba07)
  • fix(corpus-python): expansion augmentations splice raw, never rebuild from tokens (#519) (#541) (b32abe0)
  • data(postcode): fill placeholder centroids from Census ZCTA gazetteer (#525) (#540) (da5f37c)
  • feat(guard): add mailwoman-guard Pi extension (c21b19e)
  • docs(reviews): punctuation-handling survey across geocoders (libpostal/Pelias/Nominatim/Photon) (#539) (0f6a02e)
  • fix(resolver-wof-sqlite): candidates carry the spr bbox — WASM-lookup parity (#538) (a914d3f)
  • eval(cascade-smoke): whole-stack demo-cascade smoke pass + gate leg (#524) (#537) (70763db)
  • eval(#518): unbalanced-delimiter ruling — stray delimiters excluded from gold values (#536) (a8d1185)
  • docs(plan): the resolution ladder — interpolation reviews codified (#483) (#535) (fab295e)
  • Format. (7d7e0cd)
  • Add review. (fcf223e)
  • feat(corpus/train): v0.5.0 spans pipeline — parquet columns, compose, audits, loader (#519 slice 2) (#534) (b62d34d)
  • feat(demo): range-cache service worker + HTTP VFS resolver improvements (6135c25)
  • feat(resolver): house-number interpolation first slice — VT pilot, gate MISS reported (#483) (#533) (2d57b5b)
  • eval(#518): punctuation-stress expansion 62→120 — v0-win quadrants deepened + FR/DE/AU/NZ surfaces (#532) (64cd0b8)
  • feat(scripts): --admin source mode for build-wof-polygons — full-gazetteer coverage (#484) (#529) (6f08dfd)
  • feat(resolver): reverse geocoding — bbox→PIP→descent over wof-polygons + ancestor chain (#484) (#528) (af12ce7)
  • feat(corpus): v0.5.0 format core — spans beside tokens, NFC assertion, invariance gates (#527) (461d17a)
  • docs(plan): the sub-premise nexus — pre-tagging as information, not decision (dba2a8e)
  • feat(codex): au/nz delivery-service slices — sourced (AMAS + ADV358) (#526) (e8e4113)
  • docs(plan): v0.5.0 rebuild runbook-to-be + geocoder table-stakes scoping (#483/#484) (ecd5e07)
  • docs(plan): #519 design review APPROVED — four rulings recorded (fe2fbd9)
  • feat(demo): anchor-centroid circle fallback for postcode-only queries (d4ae2e8)
  • fix(demo): hasPolygons manifest rot — flags probe reality; circle fallback replaces bbox rectangle (54cdfc2)
  • Add globe. (3634a0a)
  • fix(resolver): placetype expansion + region warn + alias-bag exact tier (#522) (a1c667b)
  • fix(reconcile): per-word inclusion bonus — end the beam's fragmentation subsidy (#521) (853f114)
  • Format. (9fb6607)
  • fix(neural-web): feed the gazetteer channel in the browser — un-break the live demo (#520) (7e54833)
  • fix(docs): bare {raw, components} broke SSG — backticked; braces join the MDX lint (e914152)
  • eval(#518): v0 engine mode + fold-gold — the punctuation head-to-head is measured (eb9676c)
  • eval(#518): punctuation-stress eval v1 — 62 curated rows, 11 classes + per-class scorer (4fb60a8)
  • docs(plan): char-offset labels design sketch (#519) — consult keepers folded in (d8a4052)
  • docs(evals): night-11 postmortem finalized — shift closed 12:51 UTC (233cd6e)
  • docs(evals): postmortem — blog draft written (the mis-filed authorized item) (383989f)
  • blog: the span-bridge night (draft: true — operator flips) (7dd3280)
  • eval(gate): JSON sidecars — scorers emit machine-readable results, verdict reads them first (8d77e98)
  • docs(evals): night-11 postmortem — back-half outcomes folded in (draft current through 07:50 UTC) (f23b465)
  • docs: decode-time constraint layers join the pipeline contract (P2.8) + lint narrowed to the measured class (913abe3)
  • feat(corpus): DE default holdout — Saarland + Mecklenburg-Vorpommern (P2.5) (896de84)
  • eval: per-tag score trend page generated from the ledger (S5) (409aaf6)
  • eval(calibration): v4.4.0 isotonic refresh — ship-config channels, underconfidence era (S4) (62c12a1)
  • feat(docs): Google Maps-style demo, AboutDemo explainer, sortable F1 table, version comparison (61dcc15)
  • fix(demo): resolve VersionCompare audit issues — dead code path, shared error state, stale results, unspanned nodes (1c7aa01)
  • feat(codex): fr/cedex matcher slice + builder validation + gate watch lenses (P1 complete) (46bcd03)
  • feat(demo): add VersionCompare mode for side-by-side model comparison (acd93bf)
  • feat(docs): add About this demo explainer and sortable F1 score table (4a618be)

v4.4.0

11 Jun 05:45

Choose a tag to compare

  • release(v4.4.0): bookkeeping — ship-gate record (three-battery verdict), cards, ledger, pages (5acaebb)
  • docs(plan): transition-masks design note — slice 3 recorded with its failure mode, not built (9d20427)
  • fix(decoder): exclude separator punctuation from span bridging (bffc0c8)
  • refactor(demo): Google Maps-style full-viewport layout with floating control panel (400a540)
  • feat(training): train-time conventions loss mask (#478 pairing) + Modal run_tests entrypoint (f6acda2)
  • feat(decoder): punctuation-gap span bridging — the v4.4.0 corrective (cb9ce1c)
  • docs: alphabetize the conventions-mask glossary entry (G→C) (5cf97b4)
  • docs: codex-review fixes — scorecard link, int8 size, reconcile defaults, conventions glossary (497e8ba)
  • eval(gate): teach the runner+verdict the v4.4.0 floor keys (177cb41)
  • feat(corpus): v4.4.0 staging — shard v2 ('#' template out), v1.3.0 config, eval contracts (6e9bffe)
  • eval: add po_box/cedex to score-affix TAGS (the unit-omission gotcha, again) (d1f5c51)
  • feat(corpus): po_box/cedex coverage shard — the last starved-tag lever (#516) (dd7a4e6)
  • feat(corpus): intersection shard from REAL TIGER crossings (#487 lever 2) (#515) (1fea499)
  • feat(corpus): glue-class augmentation — fused region+postcode raw, split labels (#513) (#514) (a3236ea)
  • feat(training): the three v4.4.0 solo-probe configs (#513/#487/po_box — gates pre-registered in-file) (b606bcd)
  • eval: pre-register the v4.4.0-boundary gate spec (Track A, before any probe) (2afb010)
  • docs: sync the knowledge ladder + phases with the v4.3.0 state (9adeaee)

v4.3.0

10 Jun 23:27

Choose a tag to compare

  • feat(model): v4.3.0 — the #511 relabel run + the conventions layer's first slice (#512) (f3a4ef2)
  • feat(pipeline): wire the reconciler's dormant concordance axes (#478 step 2, re-scoped) (#510) (387276d)
  • docs(evals): Overture fill-rate record (#509) (cef4b66)
  • chore(hardening): libpostal TLA removal + corrected cycle diagnosis + width gate spec + #480 loader strict-mode/resume-drift (#508) (3e8f104)
  • feat(docs): interactive docs — embeddable components, guided tour, training charts, loading indicators (a2ea72b)
  • feat(docs): staged loading indicators with parse-step progress in PipelineExplorer and demo (680d816)
  • blog(draft): four numbers tried to lie to us — the night-9→10 arc (draft:true, operator review) (#504) (1a257e6)
  • eval(#487): real intersection eval from TIGER EDGES + v4.2.0 baseline (0.0/0.0) (#507) (0231692)
  • feat(policy): config-file loading with total loud validation (#478 step 1) (#506) (0100d83)
  • fix(eval): NAD holdout composite-gold bug — and the #498 refutation it caused (#505) (14eb2d6)
  • feat(eval): gaz/anchor-fed arenas — v4.2.0 true config sweeps 41/71/18, beats v0 on clean (first ever) + night-10 postmortem (#503) (cb7ccea)
  • chore(training): REPRODUCIBILITY.md + export/quant toolchain verifier (#480 safe parts) (#502) (c70328d)
  • docs(releasing): the demo serves R2, not HF — the mandatory second leg (night-10 discovery) (#501) (f4b3d8e)
  • chore(parser): hardening part 1 — one decode path, repairs-in-both, policy tests, loud lexicon validation (#481) (#500) (a24d436)
  • feat(data): postal_city alias table (#475) + CORRECTION to the NAD holdout note (#499) (88f7a75)
  • feat(resolver): address-point tier — street-level exact points (VT: coord p50 3.4km → 0.0km @ 93.1% hit rate) (#497) (4c7c91a)
  • eval(#472): US source-independent holdout from NAD-only Overture rows + first numbers (#496) (f9c9159)
  • feat(eval): promotion-gate.sh — one enforced gate runner + machine verdict (#479) (#495) (08a158d)
  • feat(docs): integrate LoadingIndicator into DemoEmbed, PipelineExplorer, GuidedTour, TrainingCharts (fffa3af)