@mailwoman/neural 4.11.0 → 4.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,7 +10,7 @@
10
10
  * lookup the model trained against (`scripts/build-pilot-anchor-lookup.py`), so the feature
11
11
  * layout matches byte-for-byte.
12
12
  *
13
- * The layout is LOAD-BEARING and cross-language: a wrong locale order or centroid scale feeds the
13
+ * The layout is ESSENTIAL and cross-language: a wrong locale order or centroid scale feeds the
14
14
  * model garbage. `anchor-inference.test.ts` pins both `LOCALE_ORDER` and the vector to values
15
15
  * emitted by the Python `anchor_feature_vector` — any drift fails the test.
16
16
  */
@@ -10,7 +10,7 @@
10
10
  * lookup the model trained against (`scripts/build-pilot-anchor-lookup.py`), so the feature
11
11
  * layout matches byte-for-byte.
12
12
  *
13
- * The layout is LOAD-BEARING and cross-language: a wrong locale order or centroid scale feeds the
13
+ * The layout is ESSENTIAL and cross-language: a wrong locale order or centroid scale feeds the
14
14
  * model garbage. `anchor-inference.test.ts` pins both `LOCALE_ORDER` and the vector to values
15
15
  * emitted by the Python `anchor_feature_vector` — any drift fails the test.
16
16
  */
@@ -83,7 +83,7 @@ export interface NeuralAddressClassifierConfig {
83
83
  * adjacent to a postcode-anchor hit (needs both `gazetteerLexicon` and `postcodeAnchorLookup`).
84
84
  * Targets the region-clue→postcode CRF interference (~3pp US postcode).
85
85
  *
86
- * PAIRING IS LOAD-BEARING: set this IFF the model was TRAINED with the matching train-time
86
+ * PAIRING IS ESSENTIAL: set this IFF the model was TRAINED with the matching train-time
87
87
  * choreography (`data.gazetteer_choreography`). The 2026-06-10 diagnostic showed the harm is
88
88
  * WEIGHT-BAKED — applying this at inference on a model trained _without_ train-choreography does
89
89
  * NOT recover postcode and adds train/inference skew. Only enable for a consolidation-era model
package/out/labels.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Mirror of `packages/corpus-python/src/mailwoman_train/labels.py`.
7
7
  *
8
- * Index ↔ label parity is load-bearing: the model emits logits in one canonical order on both sides
8
+ * Index ↔ label parity is essential: the model emits logits in one canonical order on both sides
9
9
  * and any drift here silently corrupts BIO decoding. STAGE2 strictly extends STAGE1 — the first
10
10
  * 15 indices are identical, so reading a v0.2.0 (Stage 1) model with the Stage 2 label vocabulary
11
11
  * stays correct; the extra entries are unused.
package/out/labels.js CHANGED
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Mirror of `packages/corpus-python/src/mailwoman_train/labels.py`.
7
7
  *
8
- * Index ↔ label parity is load-bearing: the model emits logits in one canonical order on both sides
8
+ * Index ↔ label parity is essential: the model emits logits in one canonical order on both sides
9
9
  * and any drift here silently corrupts BIO decoding. STAGE2 strictly extends STAGE1 — the first
10
10
  * 15 indices are identical, so reading a v0.2.0 (Stage 1) model with the Stage 2 label vocabulary
11
11
  * stays correct; the extra entries are unused.
@@ -76,7 +76,7 @@ export declare function repairPostcodeLabels(text: string, input: readonly Decod
76
76
  * 5-digit before a street is a _postcode_ in reversed-order FR ("75008 Rue de la Paix", the #560
77
77
  * shard), so applying it outside US would re-break FR reversed-order house numbers. The "a street
78
78
  * follows" check is a second guard (FR/DE postcode-first puts a LOCALITY after the leading 5-digit,
79
- * "08523 Plauen"), but the locale gate is the load-bearing one.
79
+ * "08523 Plauen"), but the locale gate is the decisive one.
80
80
  */
81
81
  export declare function repairLeadingHouseNumber(text: string, input: readonly DecoderToken[]): RepairResult;
82
82
  //# sourceMappingURL=postcode-repair.d.ts.map
@@ -182,7 +182,7 @@ export function repairPostcodeLabels(text, input) {
182
182
  * 5-digit before a street is a _postcode_ in reversed-order FR ("75008 Rue de la Paix", the #560
183
183
  * shard), so applying it outside US would re-break FR reversed-order house numbers. The "a street
184
184
  * follows" check is a second guard (FR/DE postcode-first puts a LOCALITY after the leading 5-digit,
185
- * "08523 Plauen"), but the locale gate is the load-bearing one.
185
+ * "08523 Plauen"), but the locale gate is the decisive one.
186
186
  */
187
187
  export function repairLeadingHouseNumber(text, input) {
188
188
  const tokens = input.map((t) => ({ ...t }));
@@ -9,7 +9,7 @@
9
9
  * anchor, build the gazetteer clue, and (when paired with the matching train-time half) suppress
10
10
  * the gazetteer clue adjacent to a postcode-anchor hit.
11
11
  *
12
- * It is the LOAD-BEARING contract surface for the ProductionScorer (#718): the scorer asserts which
12
+ * It is the essential contract surface for the ProductionScorer (#718): the scorer asserts which
13
13
  * channels are fed, this function decides HOW they are fed. Keeping it a pure function means both
14
14
  * the classifier and any harness build features identically — there is exactly one choreography.
15
15
  *
@@ -45,7 +45,7 @@ export interface SoftFeatureSources {
45
45
  /**
46
46
  * Channel choreography (#464, v0.9.13 postcode fix): zero the gazetteer clue on pieces adjacent
47
47
  * to a postcode-anchor hit. Needs BOTH a `gazetteerLexicon` and a `postcodeAnchorLookup` to take
48
- * effect (the suppression is keyed off the anchor's confidence). PAIRING IS LOAD-BEARING — enable
48
+ * effect (the suppression is keyed off the anchor's confidence). PAIRING IS ESSENTIAL — enable
49
49
  * this IFF the model was trained with the matching train-time choreography. See
50
50
  * `suppressGazetteerNearPostcode` in `gazetteer-inference.ts`.
51
51
  */
@@ -9,7 +9,7 @@
9
9
  * anchor, build the gazetteer clue, and (when paired with the matching train-time half) suppress
10
10
  * the gazetteer clue adjacent to a postcode-anchor hit.
11
11
  *
12
- * It is the LOAD-BEARING contract surface for the ProductionScorer (#718): the scorer asserts which
12
+ * It is the essential contract surface for the ProductionScorer (#718): the scorer asserts which
13
13
  * channels are fed, this function decides HOW they are fed. Keeping it a pure function means both
14
14
  * the classifier and any harness build features identically — there is exactly one choreography.
15
15
  *
@@ -15,10 +15,10 @@
15
15
  *
16
16
  * The fix is deterministic: AFTER decode, merge adjacent same-label spans whose gap consists only
17
17
  * of punctuation/whitespace, contains at least one non-space character, and is short (≤ 3 chars).
18
- * The non-space requirement is load-bearing — space-only gaps ("Saint Paul" as two locality
19
- * spans) are NOT bridged, because a space between two same-tag spans is often a real boundary
20
- * (the Saint-Albans fragmentation wants this fix too, but it must come with its own evidence;
21
- * this pass stays conservative by construction).
18
+ * The non-space requirement is essential — space-only gaps ("Saint Paul" as two locality spans)
19
+ * are NOT bridged, because a space between two same-tag spans is often a real boundary (the
20
+ * Saint-Albans fragmentation wants this fix too, but it must come with its own evidence; this
21
+ * pass stays conservative by construction).
22
22
  *
23
23
  * Runs beside the postcode/unit repair passes in the classifier, before tree-building.
24
24
  */
@@ -15,10 +15,10 @@
15
15
  *
16
16
  * The fix is deterministic: AFTER decode, merge adjacent same-label spans whose gap consists only
17
17
  * of punctuation/whitespace, contains at least one non-space character, and is short (≤ 3 chars).
18
- * The non-space requirement is load-bearing — space-only gaps ("Saint Paul" as two locality
19
- * spans) are NOT bridged, because a space between two same-tag spans is often a real boundary
20
- * (the Saint-Albans fragmentation wants this fix too, but it must come with its own evidence;
21
- * this pass stays conservative by construction).
18
+ * The non-space requirement is essential — space-only gaps ("Saint Paul" as two locality spans)
19
+ * are NOT bridged, because a space between two same-tag spans is often a real boundary (the
20
+ * Saint-Albans fragmentation wants this fix too, but it must come with its own evidence; this
21
+ * pass stays conservative by construction).
22
22
  *
23
23
  * Runs beside the postcode/unit repair passes in the classifier, before tree-building.
24
24
  */
@@ -10,9 +10,9 @@
10
10
  * delivery-service types. Which systems are loaded conditions the proposer's locale-dependent
11
11
  * readings (the AU/NZ `Flat 2/14` split exists only when those tables are present).
12
12
  *
13
- * No entry here is hand-invented (the no-load-bearing-trivia rule): every token/pattern derives
14
- * from a codex table row. AU `MS` (Mail Service) and the identifier-less counter types (CARE PO,
15
- * CMA, CPA, Counter Delivery, Poste Restante) are excluded from the mid-text SCAN regex — a bare
13
+ * No entry here is hand-invented (the provenance-first rule): every token/pattern derives from a
14
+ * codex table row. AU `MS` (Mail Service) and the identifier-less counter types (CARE PO, CMA,
15
+ * CPA, Counter Delivery, Poste Restante) are excluded from the mid-text SCAN regex — a bare
16
16
  * two-letter designator with no required number is exactly the false-positive shape ("Ms Smith")
17
17
  * the AU matcher special-cases; the scan keeps only number-carrying forms.
18
18
  */
@@ -10,9 +10,9 @@
10
10
  * delivery-service types. Which systems are loaded conditions the proposer's locale-dependent
11
11
  * readings (the AU/NZ `Flat 2/14` split exists only when those tables are present).
12
12
  *
13
- * No entry here is hand-invented (the no-load-bearing-trivia rule): every token/pattern derives
14
- * from a codex table row. AU `MS` (Mail Service) and the identifier-less counter types (CARE PO,
15
- * CMA, CPA, Counter Delivery, Poste Restante) are excluded from the mid-text SCAN regex — a bare
13
+ * No entry here is hand-invented (the provenance-first rule): every token/pattern derives from a
14
+ * codex table row. AU `MS` (Mail Service) and the identifier-less counter types (CARE PO, CMA,
15
+ * CPA, Counter Delivery, Poste Restante) are excluded from the mid-text SCAN regex — a bare
16
16
  * two-letter designator with no required number is exactly the false-positive shape ("Ms Smith")
17
17
  * the AU matcher special-cases; the scan keeps only number-carrying forms.
18
18
  */
@@ -13,9 +13,9 @@
13
13
  * - **Affix-token (the matched span):** toward `B/I-street_prefix` AND `B/I-street_suffix` (position
14
14
  * unknown — let the model + context disambiguate).
15
15
  * - **Adjacent token (one before AND one after each match):** toward `B/I-street`, AWAY from
16
- * `B/I-dependent_locality`. The negative bias on `dependent_locality` is the load-bearing
17
- * piece — it closes the inference-time vacuum that caused v0.6.1's 1066 dep_locality
18
- * hallucinations (see [[project-v061-failure-mechanism]]).
16
+ * `B/I-dependent_locality`. The negative bias on `dependent_locality` is the essential piece
17
+ * — it closes the inference-time vacuum that caused v0.6.1's 1066 dep_locality hallucinations
18
+ * (see [[project-v061-failure-mechanism]]).
19
19
  *
20
20
  * The morphology FST itself is built by `resolver-wof-sqlite/street-morphology-fst-builder.ts` and
21
21
  * ships as a separate binary (`fst-street-morphology.bin`) loaded into a second `FstMatcher`
@@ -40,7 +40,7 @@ export interface StreetMorphologyPriorOpts {
40
40
  maxNeighbourStreetBias?: number;
41
41
  /**
42
42
  * Magnitude of the negative bias applied to `dependent_locality` BIO labels on the adjacent
43
- * tokens. Default 2.0. This is the load-bearing piece.
43
+ * tokens. Default 2.0. This is the essential piece.
44
44
  */
45
45
  dependentLocalityPenalty?: number;
46
46
  }
@@ -13,9 +13,9 @@
13
13
  * - **Affix-token (the matched span):** toward `B/I-street_prefix` AND `B/I-street_suffix` (position
14
14
  * unknown — let the model + context disambiguate).
15
15
  * - **Adjacent token (one before AND one after each match):** toward `B/I-street`, AWAY from
16
- * `B/I-dependent_locality`. The negative bias on `dependent_locality` is the load-bearing
17
- * piece — it closes the inference-time vacuum that caused v0.6.1's 1066 dep_locality
18
- * hallucinations (see [[project-v061-failure-mechanism]]).
16
+ * `B/I-dependent_locality`. The negative bias on `dependent_locality` is the essential piece
17
+ * — it closes the inference-time vacuum that caused v0.6.1's 1066 dep_locality hallucinations
18
+ * (see [[project-v061-failure-mechanism]]).
19
19
  *
20
20
  * The morphology FST itself is built by `resolver-wof-sqlite/street-morphology-fst-builder.ts` and
21
21
  * ships as a separate binary (`fst-street-morphology.bin`) loaded into a second `FstMatcher`
@@ -38,7 +38,7 @@ const UNIT_DESIGNATORS = "APARTMENT|APT|SUITE|STE|UNIT|ROOM|RM|FLOOR|FLR|FL|BUIL
38
38
  const UNIT_PATTERNS = [
39
39
  // Designator + optional "#"/"No." + identifier, e.g. "Apt 4B", "Ste 12", "STE D",
40
40
  // "Unit 9400", "Suite 100", "Rm 5", "Flat 2", "Apartment #3", "Bldg C".
41
- // The `\b` after the designator is load-bearing: it stops "Unit" matching inside
41
+ // The `\b` after the designator is essential: it stops "Unit" matching inside
42
42
  // "United", "Fl" inside "Florida", etc. The trailing `\b` on the identifier stops
43
43
  // "Apt Main" capturing the "M" of "Main" (single-letter ident only fires on a
44
44
  // standalone token like "STE D").
@@ -1 +1 @@
1
- {"version":3,"file":"unit-repair.js","sourceRoot":"","sources":["../unit-repair.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unit-repair.js","sourceRoot":"","sources":["../unit-repair.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAYH;;;;;GAKG;AACH,MAAM,gBAAgB,GACrB,qIAAqI,CAAA;AAEtI,MAAM,aAAa,GAAyC;IAC3D,kFAAkF;IAClF,wEAAwE;IACxE,8EAA8E;IAC9E,kFAAkF;IAClF,8EAA8E;IAC9E,kCAAkC;IAClC;QACC,KAAK,EAAE,YAAY;QACnB,EAAE,EAAE,IAAI,MAAM,CACb,SAAS,gBAAgB,4EAA4E,EACrG,IAAI,CACJ;KACD;IACD,8EAA8E;IAC9E,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,yBAAyB,EAAE;CAChD,CAAA;AAED,MAAM,MAAM,GAAG,QAAiC,CAAA;AAChD,MAAM,MAAM,GAAG,QAAiC,CAAA;AAChD,MAAM,OAAO,GAAG,GAA4B,CAAA;AAE5C;;;;;;;;;GASG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAA;AAEzE,SAAS,WAAW,CAAC,KAAa;IACjC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,CAAA;AAChD,CAAC;AAED,qFAAqF;AACrF,SAAS,KAAK,CAAC,KAAa;IAC3B,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED,mGAAmG;AACnG,SAAS,cAAc,CAAC,IAAY;IACnC,MAAM,UAAU,GAAgB,EAAE,CAAA;IAClC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QACvC,GAAG,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAA;QACpB,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC1E,CAAC;IACF,CAAC,CAAC,CAAA;IACF,yFAAyF;IACzF,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;IACzF,MAAM,QAAQ,GAAgB,EAAE,CAAA;IAChC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;YAAE,SAAQ;QACtE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,QAAQ,CAAA;AAChB,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAA8B;IAC5E,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;IAEvD,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,KAA4B,EAAQ,EAAE;QAClE,IAAI,MAAM,CAAC,CAAC,CAAE,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YAChC,MAAM,CAAC,CAAC,CAAE,CAAC,KAAK,GAAG,KAAK,CAAA;YACxB,OAAO,EAAE,CAAA;QACV,CAAC;IACF,CAAC,CAAA;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACzB,+CAA+C;QAC/C,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;YACpB,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACxD,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QAElC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,CAAA;QAClE,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,iFAAiF;YACjF,6EAA6E;YAC7E,oFAAoF;YACpF,+BAA+B;YAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBAChC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAA;gBACnC,OAAO,GAAG,KAAK,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC9C,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,IAAI;gBAAE,SAAQ;QACpB,CAAC;QAED,2DAA2D;QAC3D,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QAEjE,4EAA4E;QAC5E,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QAChG,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACxG,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QACrB,CAAC;IACF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AAC3B,CAAC"}
@@ -24,7 +24,7 @@
24
24
  * existing cross-word merge still joins them.
25
25
  *
26
26
  * Safety: a word whose pieces already agree is left byte-identical (no change). The vote includes
27
- * `O`, so a genuinely-`O` word stays `O` (no spurious spans).
27
+ * `O`, so an all-`O` word stays `O` (no spurious spans).
28
28
  *
29
29
  * Gate outcome (2026-06-19, fr-admin-split-gate + per-locale-f1, MAILWOMAN_WORD_CONSISTENCY=1): NOT
30
30
  * a clean win, so this ships DEFAULT-OFF. It heals clean-latin fragments (`PRUNIÈRES LOZÈRE
@@ -24,7 +24,7 @@
24
24
  * existing cross-word merge still joins them.
25
25
  *
26
26
  * Safety: a word whose pieces already agree is left byte-identical (no change). The vote includes
27
- * `O`, so a genuinely-`O` word stays `O` (no spurious spans).
27
+ * `O`, so an all-`O` word stays `O` (no spurious spans).
28
28
  *
29
29
  * Gate outcome (2026-06-19, fr-admin-split-gate + per-locale-f1, MAILWOMAN_WORD_CONSISTENCY=1): NOT
30
30
  * a clean win, so this ships DEFAULT-OFF. It heals clean-latin fragments (`PRUNIÈRES LOZÈRE
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mailwoman/neural",
3
- "version": "4.11.0",
3
+ "version": "4.13.0",
4
4
  "description": "Mailwoman neural classifier runtime: SentencePiece tokenizer + ONNX inference + decoder wiring.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
@@ -22,8 +22,8 @@
22
22
  "./browser": "./out/browser.js"
23
23
  },
24
24
  "dependencies": {
25
- "@mailwoman/codex": "4.11.0",
26
- "@mailwoman/core": "4.11.0",
25
+ "@mailwoman/codex": "4.13.0",
26
+ "@mailwoman/core": "4.13.0",
27
27
  "@sctg/sentencepiece-js": "^1.3.3",
28
28
  "onnxruntime-node": "^1.26.0"
29
29
  },