v4.4.0 ship gate — the boundary consolidation (2026-06-11, night-11)
Candidate: v1.3.0-boundary-consolidation step-040000, int8 md5
f086951a807b35e1ef700c0c2662a088 (29.8 MB), tokenizertokenizerThe component that converts a raw address string into a sequence of numeric token IDs the model can process. Mailwoman's tokenizer is a SentencePiece unigram model trained specifically on postal addresses. 0.6.0-a0 (unchanged). Ship config adds
ONE declared inferenceinferenceRunning the trained model on new input to get predictions, as opposed to training, which produces the model. In Mailwoman that means a small transformer encoder reads an address string and classifies every token — house number, street, locality, region, postcode, and the rest. A Who's On First gazetteer can feed soft location hints into the pass, but the model makes the final call on every label. Where a generative model writes text token by token, Mailwoman's output is a retrieval-augmented token classification: one label per input piece. behavior vs v4.3.0: bridgePunctuationGaps: true (the spanspanA contiguous range of characters or tokens in the input string, tagged with an address component type (street, locality, postcode, etc.). Parsed addresses are represented as collections of spans, possibly nested in a tree. bridge —
requires_bridge in gates/v4.4.0-boundary.json), alongside the carried
addressSystemConventions: "auto".
Three probe-passed levers rode the run (PRs #514/#515/#516): the #513 glue augmentation, the
real-TIGERTIGERThe US Census Topologically Integrated Geographic Encoding and Referencing database. Used as a corpus source for street-segment data. intersectionintersectionAn address that names a location by two crossing streets ('5th & Main') rather than a number and street. Mailwoman tags the two streets as intersection_a and intersection_b — a negative-space format that starved the early model. shardshardA partial output file of the corpus build, written in Parquet format. The training pipeline streams shards row by row., and the po_boxPO boxA numbered mailbox at a post office used as a delivery address instead of a physical street location. Mailwoman tags it as the po_box component; structurally the same family as a subpremise./cedexCEDEX (Courrier d'Entreprise à Distribution Exceptionnelle). A French postal routing for high-volume business mail: a CEDEX code delivers directly from a sorting centre, bypassing the local post office. A common negative-space format Mailwoman must parse. coveragecoverageThe fraction of a population or region for which a data source has real, non-placeholder entries — e.g. 47% rooftop coverage on Texas addresses. Distinct from accuracy on the rows that are present. shardshardA partial output file of the corpus build, written in Parquet format. The training pipeline streams shards row by row. (rebuilt minus the #
template after the probe caught it contradicting the unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. convention). The old fixed-layout
synth-po-box shardshardA partial output file of the corpus build, written in Parquet format. The training pipeline streams shards row by row. was retired (stated in the config header); the train-time conventions
lossloss functionA number measuring how wrong the model's predictions are on a batch of examples. Training minimizes it. Mailwoman's loss combines per-token negative log-likelihood with the CRF sequence loss.-mask was implemented but deliberately did NOT ride (unprobed levers don't board
consolidations — it is banked, ModalModalA cloud GPU platform (modal.com) where Mailwoman trains its neural models on NVIDIA A100 GPUs. Training runs are launched via scripts/modal/train_remote.py and typically complete in ~1 hour.-verified, for the next run).
Verdict: PASS 17/17 (int8-graded, max fp32↔int8 delta 0.3pp)
| floor | bar | v4.3.0 shipped | v4.4.0 |
|---|---|---|---|
| us.po_box_real | 70 | — (57.5 probe) | 89.1 |
| fr.cedex_real | 70 | — | 96.1 |
| us.intersection_real | 50 | 0 | 100 |
| arenaarenaA standardized test set probing one capability: libpostal (clean canonical), perturb (noisy and degraded), postal (edge formats). Each arena answers a different question about where rule vs neural wins..perturb | 71 | 64 | 72 |
| fr.regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. | 16.2 | 16.2 | 25.6 |
| us.street_prefix / suffix | 78 / 67 | 93.6 / 96.6 | 93.6 / 96.6 |
| us.streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. | 74 | 75.5 | 77.9 |
| us.micro | 81.6 | 85.1 | 86.1 |
| us.localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. | 62.2 | 74.4 | 75.7 |
| us.regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. | 80.1 | 89.1 | 90.3 |
| us.postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one. | 97 | 97.8 | 98.3 |
| us.country_homograph | 83.3 | 85.1 | 89.8 |
| us.unit_real | 88 | 92.1 | 92.1 |
| fr.postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one. | 99.5 | 99.7 | 99.6 |
| fr.house_number | 91 | 97.7 | 97.2 |
| de.native_locality | 83.8 | 90.1 | 91.0 |
Honest-evalevalRunning the model against a held-out golden dataset and computing per-component F1, exact-match, calibration, and resolved-coordinate error. VT: regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. 99.6 (== v4.3.0), coord p50/p90 3.4/7.5 km (vs 3.4/7.4 — noise), PIP coveragecoverageThe fraction of a population or region for which a data source has real, non-placeholder entries — e.g. 47% rooftop coverage on Texas addresses. Distinct from accuracy on the rows that are present.-adj 46.8%. Demo presets sane (battery leg). The perturb arenaarenaA standardized test set probing one capability: libpostal (clean canonical), perturb (noisy and degraded), postal (edge formats). Each arena answers a different question about where rule vs neural wins. floor — gated for the first time, because closing that regression was this release's point — is restored to the v4.2.0 mark.
The verdict took three batteries — the record, in order
- Battery 1: FAIL po_boxPO boxA numbered mailbox at a post office used as a delivery address instead of a physical street location. Mailwoman tags it as the po_box component; structurally the same family as a subpremise. 60.4/70. Row audit: dotted leaders (P.O. / C.P. / B.P.) missed at
98%, all truncationstruncationCutting an input down to the max sequence length (or an LLM response to its token limit), discarding everything past the cap. at the first period; plain leaders passed 84%. Root cause is
structural: the corpuscorpusThe BIO-labeled training data used to train Mailwoman's neural classifier. Assembled from real sources (OpenAddresses, National Address Database) and synthetic shards (boundary stress, order variants, negative space). Managed by @mailwoman/corpus. alignmentalignmentThe step in the corpus pipeline that takes a (raw, components) pair from an adapter and produces a (raw, tokens, BIO labels) row by finding each component's text inside the raw string and labeling the matching tokens. tokenizertokenizerThe component that converts a raw address string into a sequence of numeric token IDs the model can process. Mailwoman's tokenizer is a SentencePiece unigram model trained specifically on postal addresses. drops standalone punctuation, so NO trainingtrainingThe process of adjusting a model's parameters so its predictions match labeled examples, by repeatedly measuring error and nudging the weights to reduce it. Distinct from inference, when the trained model is run on new input. row
can labelcomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag. the dots inside "P.O. BoxPO boxA numbered mailbox at a post office used as a delivery address instead of a physical street location. Mailwoman tags it as the po_box component; structurally the same family as a subpremise." — the modelneural classifierThe machine learning model at the core of Mailwoman's parser — a transformer encoder (~30M parameters) trained from scratch to do BIO token classification over addresses. It learns the 'grammar' of address formats; the gazetteer supplies the 'atlas.' labelscomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag. every letter piece
po_boxat 0.93+ confidence and the spanspanA contiguous range of characters or tokens in the input string, tagged with an address component type (street, locality, postcode, etc.). Parsed addresses are represented as collections of spans, possibly nested in a tree. shatters at decode. Ten-times exposure had moved the number +2.9; it was never a dose problem. (This battery was also killed mid-int8-leg by a mid-run edit of the runner script — operator note: scripts with live instances are now immutable; the fp32fp32 / fp1632-bit and 16-bit floating-point formats. Mailwoman trains in bf16 (a 16-bit variant) and exports the ONNX model in int8 for size. record survived and carries the FAIL evidence.) - Corrective 1 — the spanspanA contiguous range of characters or tokens in the input string, tagged with an address component type (street, locality, postcode, etc.). Parsed addresses are represented as collections of spans, possibly nested in a tree. bridge (
neural/span-bridge.ts): merge same-tag fragments across short punctuation gaps, absorbing the O-labeled punctuation piecesECE (Expected Calibration Error). A metric that measures how well a model's confidence scores align with its actual accuracy. Lower is better. Mailwoman's held-out ECE drops from 0.067 (raw) to 0.0035 (calibrated).; space-only gaps excluded (the Saint-AlbansBAN (Base Adresse Nationale). France's authoritative open national address register — the highest-quality training source for French addresses, with full component structure. guard). Same weightsparameterA single learned number inside a model — one weight or bias. Mailwoman's encoder has roughly 30 million of them; training is the search for good values.: po_boxPO boxA numbered mailbox at a post office used as a delivery address instead of a physical street location. Mailwoman tags it as the po_box component; structurally the same family as a subpremise. 60.4 → 87.0. Battery 2: FAIL fr.postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one. 99.0/99.5 — the bridge merged"47110, 9016"-style postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one. + house-number fragments across commas on six FR golden rows (the modelneural classifierThe machine learning model at the core of Mailwoman's parser — a transformer encoder (~30M parameters) trained from scratch to do BIO token classification over addresses. It learns the 'grammar' of address formats; the gazetteer supplies the 'atlas.' double-labelscomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag. the following number; the comma was the only thing keeping the spansspanA contiguous range of characters or tokens in the input string, tagged with an address component type (street, locality, postcode, etc.). Parsed addresses are represented as collections of spans, possibly nested in a tree. honest). - Corrective 2 — separator exclusion: bridgeable gaps are intra-tokentokenOne word or subword in the tokenized input. For the neural classifier, tokens come from SentencePiece (subword units); for the rule classifiers, tokens are whitespace- and punctuation-separated words. punctuation only (period/hyphen/slash/apostrophe). FR postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one. restored to its two pre-existing CA-alnum misses; po_boxPO boxA numbered mailbox at a post office used as a delivery address instead of a physical street location. Mailwoman tags it as the po_box component; structurally the same family as a subpremise. improved further (87.0 → 89.1 — comma false-merges removed there too). Battery 3: PASS 17/17.
Both correctives are decode-side, deterministic, regression-tested (8 bridge tests), and cost zero GPU. The night's total GPU spend for the verdict: $0 beyond the operator-GO'd trainingtrainingThe process of adjusting a model's parameters so its predictions match labeled examples, by repeatedly measuring error and nudging the weights to reduce it. Distinct from inference, when the trained model is run on new input. run.
What this release means for the parity campaign
po_boxPO boxA numbered mailbox at a post office used as a delivery address instead of a physical street location. Mailwoman tags it as the po_box component; structurally the same family as a subpremise., cedexCEDEX (Courrier d'Entreprise à Distribution Exceptionnelle). A French postal routing for high-volume business mail: a CEDEX code delivers directly from a sorting centre, bypassing the local post office. A common negative-space format Mailwoman must parse., and intersectionsintersectionAn address that names a location by two crossing streets ('5th & Main') rather than a number and street. Mailwoman tags the two streets as intersection_a and intersection_b — a negative-space format that starved the early model. were the scorecard's last empty rows. They are no longer empty: 89.1 / 96.1 / 100 on real-OOD evalsevalRunning the model against a held-out golden dataset and computing per-component F1, exact-match, calibration, and resolved-coordinate error., at precisionprecisionOf the spans the model labeled as a given tag, the fraction it got right. High precision means few false positives. Paired with recall to compute F1. ≥ 95 everywhere. The v4.3.0 arenaarenaA standardized test set probing one capability: libpostal (clean canonical), perturb (noisy and degraded), postal (edge formats). Each arena answers a different question about where rule vs neural wins. debt (#513) is closed at gate level. The remaining v0-vs-neural gaps are quality gradientsgradientThe direction and rate at which the loss would change if each parameter were nudged. Training follows the gradient downhill to reduce error. Huge gradients are tamed by gradient clipping. and edge formats, not missing capabilities — the post-parity agenda (#478 arbitrationarbitrationA pipeline stage that compares rule-based (v0) and neural classifier output, resolving disagreements via a policy registry. Built and merged but not promoted — the coordinate gate showed label-F1 gains came at the cost of worse geocoding., decomposition, geocoder table stakes) starts from here.
Follow-ups filed/banked: the conventions lossloss functionA number measuring how wrong the model's predictions are on a batch of examples. Training minimizes it. Mailwoman's loss combines per-token negative log-likelihood with the CRF sequence loss.-mask rides the next full run with a pre-registered FR-regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. floor; the dotted-surface class should eventually be fixed at the corpuscorpusThe BIO-labeled training data used to train Mailwoman's neural classifier. Assembled from real sources (OpenAddresses, National Address Database) and synthetic shards (boundary stress, order variants, negative space). Managed by @mailwoman/corpus. format level (char-offset labelscomponent tagOne of the 33 labels in Mailwoman's address schema — street, locality, region, postcode, house_number, unit, po_box, country, venue, intersection, and others. Each parsed span carries exactly one component tag. — the bridge is containment, not cure); the double-postcodepostcodeThe country-specific postal code (US ZIP, French code postal, etc.). Mailwoman handles postcode parsing entirely by rule classifier — a regex problem, not an ML one. emission the comma incident exposed is a trainingtrainingThe process of adjusting a model's parameters so its predictions match labeled examples, by repeatedly measuring error and nudging the weights to reduce it. Distinct from inference, when the trained model is run on new input.-distribution question for the next corpuscorpusThe BIO-labeled training data used to train Mailwoman's neural classifier. Assembled from real sources (OpenAddresses, National Address Database) and synthetic shards (boundary stress, order variants, negative space). Managed by @mailwoman/corpus. pass.