Migrating to v7.0.0 — the legacy rules-parser excision
v7.0.0 removes the legacy rule-based parser and its shared substrate. The neural sequence
labeler has been the primary 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. path since v3; v7 deletes the dead rules enginerule-based classifierMailwoman's legacy v0 parser — a library of deterministic token classifiers (house number, street suffix, postcode, place name, etc.) composed by priority. Now primarily used for corpus labeling, fallback classification, and arbitration diagnostics. that sat
behind it. If you use the mailwoman CLI or the high-level library API, nothing changes —
the neural pipelinestaged pipelineMailwoman's runtime architecture: a sequence of pure-function stages (normalize → query-shape → locale-gate → kind-classifier → phrase-grouper → classifier → decoder) connected by typed handoffs. Each stage is published as its own npm package. is unaffected. The breaking changes below only touch consumers that imported
the low-level rule-classifier packages directly.
1. @mailwoman/classifiers is removed
The rule-classifier workspace (the *Classifier families, adapter, the composite scheme
machinery) is gone from the monorepo and deprecated on npm.
- If you 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. addresses: use
mailwoman(CLI) orcreateRuntimePipeline(library). This is the supported path and is unchanged. - If you used the full rule parser (
createAddressParser): pinmailwoman@6. Verified to construct and 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. cold outside the workspace (createAddressParser().parse(…)returns the expected components). Frozen; there is no v7 equivalent — the capability moved into the neural 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.'. - If you imported classifier classes from
@mailwoman/classifiersdirectly: pin@mailwoman/classifiers@6and addzxto your dependencies. The 6.x@mailwoman/corehas an undeclaredzximport, so a bare@mailwoman/classifiers@6install crashes on load;mailwoman@6bundleszx, a standalone classifiers install does not. (v7's@mailwoman/coredrops thezxusage entirely and installs standalone.) createAddressParser()was already removed in v7's predecessor (the rules-parser deletion). Themailwomanumbrella no longer re-exports@mailwoman/classifiers.
2. @mailwoman/core no longer exports ./solver or ./classification
The v0 constraint solver (@mailwoman/core/solver) and the rule-classification machinery
(@mailwoman/core/classification — BaseClassifier, CompositeClassifier, PhraseClassifier,
SectionClassifier, WordClassifier, scheme) are deleted. They had no consumer outside the
removed rules parser.
Still exported and unchanged: @mailwoman/core/tokenization (Graph, Span, TextNormalizer),
@mailwoman/core/types (including the Classification string-set + the ComponentTag taxonomy
and its mapping), @mailwoman/core/decoder, and the rest of the core surface. The neural 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.
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. decodes through Span/Graph, which stay in place.
The internal core/tokenization helpers context, permutate, and split were deleted with the
solver (they had no other consumer). If you imported TokenContext, it is gone with the rules
parser.
3. Deprecated mailwoman subpath shims removed
mailwoman/sdk/cli and mailwoman/sdk/test — deprecated since the CLI-kit/test-kit split — are
removed. Import from the real subpaths instead:
mailwoman/sdk/cli→mailwoman/cli-kitmailwoman/sdk/test→mailwoman/test-kit
4. Acronym-casing renames (#875)
Whole-component acronym casing (Us→US, Json→JSON, Jsonl→JSONL) reaches the last public
identifiers. Rename table for the exported/breaking ones:
| Package | Before | After |
|---|---|---|
@mailwoman/codex/us | isUsStateAbbreviation | isUSStateAbbreviation |
@mailwoman/codex/us | UsStateAbbreviation | USStateAbbreviation |
@mailwoman/codex/us | UsUnitDesignator | USUnitDesignator |
@mailwoman/codex/us | UsPoBoxDesignator | USPoBoxDesignator |
@mailwoman/codex/us | UsStreetSuffix | USStreetSuffix |
@mailwoman/codex/us | UsMilitaryPostOfficeCode | USMilitaryPostOfficeCode |
@mailwoman/codex/us | UsArmedForcesRegionCode | USArmedForcesRegionCode |
@mailwoman/codex/us | UsMilitaryUnitDesignatorCode | USMilitaryUnitDesignatorCode |
@mailwoman/codex/us | UsMilitaryUnitMatch | USMilitaryUnitMatch |
@mailwoman/codex/us | UsMilitaryCityMatch | USMilitaryCityMatch |
@mailwoman/codex/us | UsFloorDesignator | USFloorDesignator |
@mailwoman/codex/us | UsFloorDesignatorName | USFloorDesignatorName |
@mailwoman/core/utils | pyJsonDumps | pyJSONDumps |
@mailwoman/core/utils | PyJsonOptions | PyJSONOptions |
@mailwoman/corpus/tools | JsonlToParquetOptions | JSONLToParquetOptions |
@mailwoman/corpus/tools | JsonlToParquetSummary | JSONLToParquetSummary |
Unchanged on purpose: JsonObject (from type-fest), the GeoJSON/toGeoJSON family
(@mailwoman/spatial, already correctly cased), and .json/.jsonl file paths and "us" localelocaleThe combination of language and country an address comes from. en-US and fr-FR are the locales Mailwoman ships weights for.
codes (string contents, not identifiers).
Summary
| You use… | Action |
|---|---|
mailwoman CLI / createRuntimePipeline | none |
the full rule parser (createAddressParser) | pin mailwoman@6 (frozen) |
@mailwoman/classifiers classes directly | pin @6.x and add zx (or use mailwoman@6) |
@mailwoman/core/solver or /classification | none available — capability is in the neural 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.' |
mailwoman/sdk/{cli,test} | switch to mailwoman/{cli-kit,test-kit} |
| the renamed public identifiers above | apply the rename table |