Skip to main content

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) or createRuntimePipeline (library). This is the supported path and is unchanged.
  • If you used the full rule parser (createAddressParser): pin mailwoman@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/classifiers directly: pin @mailwoman/classifiers@6 and add zx to your dependencies. The 6.x @mailwoman/core has an undeclared zx import, so a bare @mailwoman/classifiers@6 install crashes on load; mailwoman@6 bundles zx, a standalone classifiers install does not. (v7's @mailwoman/core drops the zx usage entirely and installs standalone.)
  • createAddressParser() was already removed in v7's predecessor (the rules-parser deletion). The mailwoman umbrella 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/classificationBaseClassifier, 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/climailwoman/cli-kit
  • mailwoman/sdk/testmailwoman/test-kit

4. Acronym-casing renames (#875)

Whole-component acronym casing (UsUS, JsonJSON, JsonlJSONL) reaches the last public identifiers. Rename table for the exported/breaking ones:

PackageBeforeAfter
@mailwoman/codex/usisUsStateAbbreviationisUSStateAbbreviation
@mailwoman/codex/usUsStateAbbreviationUSStateAbbreviation
@mailwoman/codex/usUsUnitDesignatorUSUnitDesignator
@mailwoman/codex/usUsPoBoxDesignatorUSPoBoxDesignator
@mailwoman/codex/usUsStreetSuffixUSStreetSuffix
@mailwoman/codex/usUsMilitaryPostOfficeCodeUSMilitaryPostOfficeCode
@mailwoman/codex/usUsArmedForcesRegionCodeUSArmedForcesRegionCode
@mailwoman/codex/usUsMilitaryUnitDesignatorCodeUSMilitaryUnitDesignatorCode
@mailwoman/codex/usUsMilitaryUnitMatchUSMilitaryUnitMatch
@mailwoman/codex/usUsMilitaryCityMatchUSMilitaryCityMatch
@mailwoman/codex/usUsFloorDesignatorUSFloorDesignator
@mailwoman/codex/usUsFloorDesignatorNameUSFloorDesignatorName
@mailwoman/core/utilspyJsonDumpspyJSONDumps
@mailwoman/core/utilsPyJsonOptionsPyJSONOptions
@mailwoman/corpus/toolsJsonlToParquetOptionsJSONLToParquetOptions
@mailwoman/corpus/toolsJsonlToParquetSummaryJSONLToParquetSummary

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 / createRuntimePipelinenone
the full rule parser (createAddressParser)pin mailwoman@6 (frozen)
@mailwoman/classifiers classes directlypin @6.x and add zx (or use mailwoman@6)
@mailwoman/core/solver or /classificationnone 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 aboveapply the rename table