Night-10 ship gate — Run B → v4.2.0 (2026-06-10)
The execution record for the fork decision (operator-deferred, recorded in
2026-06-10-NIGHT-SHIFT-PLAN.md §The decision): re-baseline with reason + ship Run B
(v1.0.2-consolidation-runB @ step-020000) as v4.2.0, conditional on this gate. All four
checks passed; the merge sequence and release followed. 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.-gate numbers and the
capacity-wall evidence live in 2026-06-10-consolidation-session.md; this doc is the SHIP
side only.
Artifacts
- 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. export: 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.
output-v101-runB-s42/model.onnx(118.4 MB graph → 113 MB local) - int8:
model-v102-runB-step-20000-int8.onnx, md59eb4a99f6db06cccff57939f657c09f9, 28.6 MB — quant verified deterministic (two runs, identical md5), pinned toolchain - 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.:
v0.6.0-a0(md5b6137e8c…), unchanged
The four checks
1. Honest-eval VT (resolver-coupled truth) — PASS
Same harness, same canonical DBs, 1428 held-out rows:
| 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.' | regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality.-match | name-match | coord p50 | coord p90 | PIP (cov-adj) |
|---|---|---|---|---|---|
| v4.1.0 | 100.0% | 93.8% | 3.4 km | 7.4 km | 47.1% |
| Run B | 99.9% | 93.8% | 3.4 km | 7.4 km | 47.1% |
The localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. +12.9 / regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. +10.7 parseaddress 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. gains cost nothing downstream; the streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. −2.3 does not propagate to coordinates. (Procedure note: this harness cannot feed the gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. lexicon — Run B graded with zero-filled clues, a degraded configuration vs what ships, so this PASS is conservative.)
2. Demo presets — PASS
5/6 byte-identical to the live default; the 6th (1060 W Addison St) is the intended affix
split (street_prefix=W, street=Addison, street_suffix=St); the JSON fold recomposes for
libpostallibpostalAn open-source C address parser used by Pelias. Mailwoman's rule-based v0 and neural classifier supersede it.-compat consumers.
3. int8 spot-check (gaz-fed) — PASS
| tag | 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. | int8 | Δ |
|---|---|---|---|
| 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. homographhomonymyOne 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. | 89.8 | 89.8 | 0.0 |
| street_prefix / suffix | 64.9 / 48.8 | 64.9 / 48.8 | 0.0 |
| unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. | 90.6 | 90.6 | 0.0 |
| 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. / streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels. / localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. / regionregionThe first-level administrative subdivision of a country — a US state, a French region, a province. The component between country and locality. | 97.3 / 76.2 / 72.9 / 89.1 | identical | ≤0.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. / house_number | 99.7 / 94.6 | 99.6 / 94.6 | ≤0.1 |
4. DE native order (int8) — PASS
Native-order localitylocalityThe city / town / settlement component of an address: a populated place sitting between region and neighbourhood in the hierarchy. 90.9% (bar ≥83.8); US/FR no-regression held (96.7 / 84.5).
Arena refresh (scorecard lens 1 — NOT a gate; reported with caveats)
| 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. | n | v0 | v4.1.0 | Run B | v0-only (B) |
|---|---|---|---|---|---|
| libpostallibpostalAn open-source C address parser used by Pelias. Mailwoman's rule-based v0 and neural classifier supersede it. (clean) | 69 | 29% | 22% | 19% | 17% |
| perturb (noisy) | 398 | 39% | 60% | 58% | 9% |
| postal (edge) | 38 | 26% | 11% | 8% | 21% |
Run B dips 2–3pp whole-parseaddress 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.-strict vs v4.1.0. Two caveats, then the honest residue:
(a) harness-v0-neural cannot feed the gazetteergazetteerA geographical index that maps place names and postcodes to real-world coordinates. Mailwoman uses a custom-built Who's On First (WOF) SQLite database as its gazetteer — the 'atlas' half of the grammar/atlas architecture. lexicon → Run B graded handicapped
(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. emissions drop without clues; intl rows in the clean 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. are 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.-bearing);
(b) the harness folds affixes correctly, so the split is NOT the cause. Residue: a real
small whole-parseaddress 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. cost consistent with the stated streetstreetThe named linear feature along which house numbers are ordered. Decomposes into a name plus street affixes; one of the Tier 2 fine labels./unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. re-baselines. The noisy-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.
lead (the lens that matters for real traffic) holds at +19pp over v0. The grown
v0-only cells are exactly the 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. 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.'s (#478) target — this is more headroom
for it, not a new problem. Follow-up filed to add gaz support to the 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. harness for a
true-config measurement.
Repairs finding (#486)
All per-tag gate numbers are repairs-OFF (parse() repairs are opt-in; the per-tag
harnesses never enable them). Run B clears 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.3 and unitunitA subdivision of a building — apartment, suite, floor — that refines a street address. Mailwoman's unit component; a designator plus identifier forms a subpremise. 90.6 unassisted. The
resolverresolverThe component that converts parsed address components (locality, region, postcode) into coordinates by looking them up in the gazetteer. The resolver ranks candidates by name match, population, and proximity, and returns the best-matching place with its centroid or polygon. path (repairs hardcoded ON) passed identically — repairs neither carry nor harm
this 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.'. ON/OFF delta table rides #481.
Verdict
SHIP. Merge sequence executed (#468 → #469 → #491, all verified; #466 closed). Release steps and verification follow in the night-10 postmortem.