Skip to main content

v4.3.0 ship gate — the relabel run + the conventions mask (2026-06-11)

Candidate: v1.1.0-relabel-consolidation step-040000, int8 md5 9ab47793a4a454c8432c5de05567ad0f (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.2.0: addressSystemConventions: "auto" (the localelocaleThe combination of language and country an address comes from. en-US and fr-FR are the locales Mailwoman ships weights for. headattention headOne of several parallel attention computations in a layer, each free to focus on a different kind of relationship between tokens. Their outputs are concatenated — 'multi-head attention'. Mailwoman uses 4 heads. — exported for the first time — drives the codex conventions maskconventions maskA decode-time constraint layer keyed by the model's own address-system detection (the exported locale head): tags that are ungrammatical in the detected system are removed from the Viterbi vocabulary, and the system's postcode shape arms a snap-only repair pass. The first slice forbids USPS street-affix decomposition for French. Same knowledge-outside-the-weights property as the gazetteer anchor — add a codex conventions row, no retrain.; requires_conventions in gates/v4.3.0-relabel.json).

The story in one paragraph: the #492 ladder traced the affix ceiling to a 1,039:1 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. contradiction in the 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. mix (#511); the relabel pass fixed it (probe: decay dead, suffix 100.0); the full run smashed the affix bars but FAILed its first gate on 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.3/99.5 — a NEW digit-split class ("47110" → "4711" + a streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. 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. starting with the orphan digit). The corrective is not a data patch: it is the first shipped slice of the conventions layerlayerOne transformer block — attention plus a feed-forward network, with normalization and residual connections — applied to every position. Stacking layers lets the model build up richer representations; Mailwoman's encoder has 6. (#478) — 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.''s own address-system detection, finally exported and obeyed. 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., one new constraint, re-gate PASS.

Promotion gate (int8-graded, fp32↔int8 deltas ≤ 0.2pp)

PASS 12/12 against gates/v4.3.0-relabel.json — affix floors RAISED to the original parity bars as a stated change (60/45 → 78/67):

floorbarv4.2.0 shippedv4.3.0
us.street_prefix7864.993.6
us.street_suffix6748.896.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.7476.275.5
us.micro81.684.885.1
us.localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy.62.272.974.4
us.regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality.80.189.189.1
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.9797.397.8
us.country_homograph83.389.885.1
us.unit_real8890.692.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.599.699.7
fr.house_number9194.697.7
de.native_locality83.890.990.1

Notes recorded, not hidden: country_homograph 89.8 → 85.1 (floor 83.3 — the v4.2.0 number was measured under the gaz-starvedstarvedA tag with too little training representation to learn — near-zero F1 — because the corpus adapter never emits examples of it (intersection tags sat at 0% until an intersection synthesizer existed). countrycountryThe top-level address component (an ISO country). Closed-vocabulary, so it is best handled by a deterministic matcher feeding a proposal rather than a retrained model head. leg this gate fixed, so the figures are not directly comparable; both clear the floor). FR regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. 27.6 → 16.2 (unfloored, weak tag). 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. −0.7 vs v4.2.0 (floor 74 holds; the exact-split evalevalRunning the model against a held-out golden dataset and computing per-component F1, exact-match, calibration, and resolved-coordinate error. column conflates this — folded streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. is the no-regression metric and it holds).

The #511 pre-registered reads

  • Stability (the #492 claim): v2 affix ROSE through the back half — 20k → 40k prefix 88.3 → 91.6, suffix 89.4 → 90.3, P = 100 throughout. The transient-decay mechanism is dead.
  • Expanded NADNAD (National Address Database). A US Department of Transportation dataset of structured address points, added to the training corpus as a major source of real US addresses.-native evalevalRunning the model against a held-out golden dataset and computing per-component F1, exact-match, calibration, and resolved-coordinate error. (193 rows, floors ≥ 85/85 at P ≥ 95, pre-registered before the 20k read existed): ship int8 + conventions = prefix 92.2 / suffix 90.3, P = 100. For scale: v4.2.0 scores 18.2 / 8.9 on this evalevalRunning the model against a held-out golden dataset and computing per-component F1, exact-match, calibration, and resolved-coordinate error..
  • 32-row legacy evalevalRunning the model against a held-out golden dataset and computing per-component F1, exact-match, calibration, and resolved-coordinate error. (recorded alongside, not substituted): prefix 93.6 / suffix 96.6.

The FR digit-split corrective (conventions mask, #478 slice 1)

First gate run FAILed 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.3/99.5: 6 misses, of which 4 NEW — leading-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. digit-splits, present at 20k and 40k (a stable property of the relabeled mix: standalone numeric streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. names made an orphan 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. digit a credible streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. start; street_suffix: "Rue" showed USPS clue leakageleakageTrain/test contamination that inflates reported accuracy when eval data has effectively been seen in training. Mailwoman guards it with held-out-geography evals and locality-aware splits. into French parsesaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. — RUE is a Pub-28 suffix variant). The other 2 are Montréal 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. rows both modelsneural 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.' fail (deferred lever, not a regression).

Fix: export the PR3 localelocaleThe combination of language and country an address comes from. en-US and fr-FR are the locales Mailwoman ships weights for. headattention headOne of several parallel attention computations in a layer, each free to focus on a different kind of relationship between tokens. Their outputs are concatenated — 'multi-head attention'. Mailwoman uses 4 heads. (locale_logits, trained at ~98% accuracy, previously unreadable at 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.) + codex/address-system-conventions.ts (fr: affix tags ungrammatical per NF Z 10-011; 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. shape ^\d{5}$) + a hard emission mask before ViterbiViterbi decodingA dynamic programming algorithm that finds the most likely sequence of hidden states (labels) given a sequence of observations (token emissions). Mailwoman uses Viterbi over a linear-chain CRF to produce globally coherent BIO label sequences from per-token model scores. + the conventions shape enabling the existing snap-only 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. repair. Detection threshold 0.8 — the mask never fires on a guess; non-fr parsesaddress parsingThe process of decomposing a free-text postal address string into structured components — house number, street name, locality, region, postcode, and country — so a geocoder can resolve them to coordinates. are byte-identical (verified: every US/DE number above is unchanged from the pre-conventions run). All four digit-split rows decode the full 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..

SHIP-gate legs beyond the training gate

  • Honest-evalevalRunning the model against a held-out golden dataset and computing per-component F1, exact-match, calibration, and resolved-coordinate error. VT (1428 held-out rows): regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality.-match 99.6% (v4.2.0 gate: 99.9 — a 4-row delta), coord p50/p90 3.4/7.4 km (identical to v4.2.0), 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.9%. Same harness configuration both runs. PASS.
  • Demo presets: sane; the affix split fires live (1060 W Addison StW + Addison + St). PASS.
  • int8 spot-check: max delta 0.2pp across all gate tags; artifact 29.8 MB. PASS.

Capability arenas — a real dip, characterized to the row (flagged, not gated)

True-config arenasarenaA 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. (anchor + gaz + conventions fed), vs v4.2.0 re-run under the identical harness same-day (reproduced 41/71/18 exactly; perturb set is deterministic):

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.nv4.2.0v4.3.0pass→failfail→pass
libpostallibpostalAn open-source C address parser used by Pelias. Mailwoman's rule-based v0 and neural classifier supersede it.6941%36%74
perturb39871%64%4014
postal3818%13%20

Row-level diff says the perturb drop is DOMINATED BY ONE CLASS: the "glue" perturbation — regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality.+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. fused (NY14201, IL60602, TX77002). v4.2.0 split the glued 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. (regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. NY

  • 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. 14201); v1.1.0 swallows it whole as postcode: "NY14201" and loses the regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. (~24–31 of the 40 flips). The remainder are streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels.-boundary wobbles: post-directional NWlocalitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy., Main St Apt absorbing the designatordesignatorThe closed-vocabulary leading word of a secondary-address phrase — 'Apt', 'Suite', 'Floor', 'PO Box', 'Level' — paired with an identifier to form a complete subpremise., a venuevenueA named, non-address place — a business, building, park, or stadium. Mailwoman's free-text point-of-interest component, added as a Tier 2 fine label. bleeding into streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels.. This is the SAME digit/boundary-instability family as the FR digit-split — the relabel pinned the affix boundary hard and loosened adjacent boundary classes 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. does not pin. The US glue class has no conventions row to catch it (and a snap repair would fix the 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. but not recover the regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality.), so the durable fix is 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.-side: a glue-class augmentation in 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. Follow-up issue filed.

Why this ships anyway: every pre-registered floor passes (arenasarenaA 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. were never floors — the same flagged-not-gated precedent as night-10); the dip concentrates in synthetic perturbation surfaces while the real-OOD evalsevalRunning the model against a held-out golden dataset and computing per-component F1, exact-match, calibration, and resolved-coordinate error. (NADNAD (National Address Database). A US Department of Transportation dataset of structured address points, added to the training corpus as a major source of real US addresses.-native affix, unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. designatorsdesignatorThe closed-vocabulary leading word of a secondary-address phrase — 'Apt', 'Suite', 'Floor', 'PO Box', 'Level' — paired with an identifier to form a complete subpremise., countrycountryThe top-level address component (an ISO country). Closed-vocabulary, so it is best handled by a deterministic matcher feeding a proposal rather than a retrained model head. homographshomonymyOne surface, many referents: 'Georgia' is a US state in 'Atlanta, Georgia' and a country in 'Tbilisi, Georgia.' Handled by disambiguation, split across two stages — the parser resolves the tag from in-string context; the resolver late-binds the referent with geographic context., honest-evalevalRunning the model against a held-out golden dataset and computing per-component F1, exact-match, calibration, and resolved-coordinate error. VT) hold or improve; and the headline trade is affix 18.2/8.9 → 92.2/90.3 on field-realistic rows. Recorded here so the next session inherits the number, not the surprise.

Verdict

SHIP as v4.3.0. Artifacts staged (volume models/quantized/model-v110-step-40000-locale-int8.onnx, local /tmp/gate-v110-conventions/ battery record). Publication (HF + R2 + npm) awaits the operator's word. Follow-ups filed on #511: CA/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. rows (deferred lever), FR regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. tail, de/gb conventions rows as evidence arrives.