mailwoman 10.2.2 → 10.4.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.
- package/README.md +4 -4
- package/cli/commands/corpus/golden/relabel.tsx +2 -2
- package/cli/commands/corpus/migrate/overlays.tsx +2 -2
- package/cli/commands/corpus/overlay-manifest.tsx +6 -0
- package/cli/commands/corpus/split-slice.tsx +1 -1
- package/cli/commands/corpus/upload.tsx +1 -1
- package/cli/commands/data/bom.tsx +1 -1
- package/cli/commands/data/inventory.tsx +4 -4
- package/cli/commands/data/pull.tsx +3 -3
- package/cli/commands/eval/oracle-k.tsx +1 -1
- package/cli/commands/gazetteer/anchor-lexicon.tsx +2 -2
- package/cli/commands/gazetteer/build/coastal.tsx +2 -2
- package/cli/commands/gazetteer/build/poi/index.tsx +1 -1
- package/cli/commands/gazetteer/build/venue-heads.tsx +1 -1
- package/cli/commands/gazetteer/census.tsx +1 -1
- package/cli/commands/gazetteer/inspect/graph.tsx +1 -1
- package/cli/commands/gazetteer/inspect/mermaid.tsx +5 -4
- package/cli/commands/gazetteer/inspect/sync/index.tsx +1 -1
- package/cli/commands/gazetteer/overture-ingest.tsx +1 -4
- package/cli/commands/gazetteer/postcode/intl.tsx +2 -2
- package/cli/commands/poi.tsx +1 -1
- package/cli/commands/registry/run.tsx +2 -2
- package/cli/commands/serve.tsx +5 -5
- package/cli/commands/situs/build.tsx +1 -1
- package/cli/commands/tiger/fetch.tsx +1 -1
- package/cli/debug-view/DebugFrame.tsx +1 -1
- package/cli/debug-view/output-lines.ts +1 -1
- package/cli/debug-view/trace-rows.ts +4 -4
- package/cli/doctor/checks.ts +1 -1
- package/cli/doctor/runner.ts +1 -1
- package/cli/kit/weights-guard.tsx +1 -1
- package/cli/native/commands/autocomplete.ts +1 -1
- package/cli/native/commands/doctor.ts +1 -1
- package/cli/native/commands/geocode.ts +10 -2
- package/cli/native/commands/license.ts +5 -5
- package/cli/native/commands/reverse.ts +1 -1
- package/lib/ablation/expectation.ts +8 -6
- package/lib/admin-coherence.ts +2 -1
- package/lib/api-engine.ts +1 -1
- package/lib/browser-runtime/classify.ts +9 -0
- package/lib/browser-runtime/fetch.ts +4 -4
- package/lib/browser-runtime/load-assets.ts +15 -4
- package/lib/browser-runtime/manifest.ts +39 -6
- package/lib/browser-runtime/resources.ts +4 -14
- package/lib/data/bundles.ts +1 -1
- package/lib/data/inventory.ts +2 -2
- package/lib/data/sources.ts +1 -1
- package/lib/default/reverse-geocoder.ts +1 -1
- package/lib/fork-entity.ts +307 -110
- package/lib/freshness.ts +1 -1
- package/lib/geocode/classifier.ts +2 -2
- package/lib/geocode/command-options.ts +8 -1
- package/lib/geocode/core.ts +43 -14
- package/lib/geocode/diff.ts +4 -3
- package/lib/geocode/epistemic-status.ts +5 -2
- package/lib/geocode/national-overture.ts +1 -1
- package/lib/geocode/parse-priors.ts +352 -0
- package/lib/geocode/result.ts +44 -4
- package/lib/geocode/session.ts +39 -50
- package/lib/inferred-scope.ts +40 -1
- package/lib/poi/intent.ts +26 -5
- package/lib/query-intent.ts +7 -6
- package/lib/region-recognition.ts +3 -3
- package/lib/runtime-pipeline.ts +78 -55
- package/lib/span-script.ts +1 -1
- package/man/mailwoman.1 +10 -6
- package/out/ablation/expectation.d.ts +4 -4
- package/out/ablation/expectation.d.ts.map +1 -1
- package/out/ablation/expectation.js +8 -6
- package/out/ablation/expectation.js.map +1 -1
- package/out/admin-coherence.d.ts +2 -1
- package/out/admin-coherence.d.ts.map +1 -1
- package/out/admin-coherence.js +2 -1
- package/out/admin-coherence.js.map +1 -1
- package/out/api-engine.js +1 -1
- package/out/api-engine.js.map +1 -1
- package/out/browser-runtime/classify.d.ts +8 -0
- package/out/browser-runtime/classify.d.ts.map +1 -1
- package/out/browser-runtime/classify.js +1 -0
- package/out/browser-runtime/classify.js.map +1 -1
- package/out/browser-runtime/fetch.d.ts +1 -1
- package/out/browser-runtime/fetch.d.ts.map +1 -1
- package/out/browser-runtime/fetch.js +3 -4
- package/out/browser-runtime/fetch.js.map +1 -1
- package/out/browser-runtime/load-assets.d.ts +7 -0
- package/out/browser-runtime/load-assets.d.ts.map +1 -1
- package/out/browser-runtime/load-assets.js +7 -5
- package/out/browser-runtime/load-assets.js.map +1 -1
- package/out/browser-runtime/manifest.d.ts +24 -5
- package/out/browser-runtime/manifest.d.ts.map +1 -1
- package/out/browser-runtime/manifest.js +22 -4
- package/out/browser-runtime/manifest.js.map +1 -1
- package/out/browser-runtime/resources.d.ts +4 -5
- package/out/browser-runtime/resources.d.ts.map +1 -1
- package/out/browser-runtime/resources.js +3 -7
- package/out/browser-runtime/resources.js.map +1 -1
- package/out/cli/commands/corpus/golden/relabel.d.ts +2 -2
- package/out/cli/commands/corpus/golden/relabel.js +2 -2
- package/out/cli/commands/corpus/migrate/overlays.d.ts +1 -1
- package/out/cli/commands/corpus/migrate/overlays.js +2 -2
- package/out/cli/commands/corpus/migrate/overlays.js.map +1 -1
- package/out/cli/commands/corpus/overlay-manifest.d.ts +4 -0
- package/out/cli/commands/corpus/overlay-manifest.d.ts.map +1 -1
- package/out/cli/commands/corpus/overlay-manifest.js +5 -0
- package/out/cli/commands/corpus/overlay-manifest.js.map +1 -1
- package/out/cli/commands/corpus/split-slice.d.ts +1 -1
- package/out/cli/commands/corpus/split-slice.js +1 -1
- package/out/cli/commands/data/bom.js +1 -1
- package/out/cli/commands/data/bom.js.map +1 -1
- package/out/cli/commands/data/inventory.d.ts +1 -1
- package/out/cli/commands/data/inventory.d.ts.map +1 -1
- package/out/cli/commands/data/inventory.js +4 -4
- package/out/cli/commands/data/inventory.js.map +1 -1
- package/out/cli/commands/data/pull.d.ts +1 -1
- package/out/cli/commands/data/pull.d.ts.map +1 -1
- package/out/cli/commands/data/pull.js +3 -3
- package/out/cli/commands/data/pull.js.map +1 -1
- package/out/cli/commands/eval/oracle-k.d.ts +1 -1
- package/out/cli/commands/eval/oracle-k.js +1 -1
- package/out/cli/commands/gazetteer/anchor-lexicon.d.ts +1 -1
- package/out/cli/commands/gazetteer/anchor-lexicon.js +2 -2
- package/out/cli/commands/gazetteer/anchor-lexicon.js.map +1 -1
- package/out/cli/commands/gazetteer/build/coastal.d.ts +2 -2
- package/out/cli/commands/gazetteer/build/coastal.js +2 -2
- package/out/cli/commands/gazetteer/build/poi/index.d.ts +1 -1
- package/out/cli/commands/gazetteer/build/poi/index.js +1 -1
- package/out/cli/commands/gazetteer/build/venue-heads.js +1 -1
- package/out/cli/commands/gazetteer/build/venue-heads.js.map +1 -1
- package/out/cli/commands/gazetteer/census.js +1 -1
- package/out/cli/commands/gazetteer/census.js.map +1 -1
- package/out/cli/commands/gazetteer/inspect/graph.d.ts +1 -1
- package/out/cli/commands/gazetteer/inspect/graph.js +1 -1
- package/out/cli/commands/gazetteer/inspect/mermaid.d.ts +4 -3
- package/out/cli/commands/gazetteer/inspect/mermaid.d.ts.map +1 -1
- package/out/cli/commands/gazetteer/inspect/mermaid.js +5 -4
- package/out/cli/commands/gazetteer/inspect/mermaid.js.map +1 -1
- package/out/cli/commands/gazetteer/inspect/sync/index.js +1 -1
- package/out/cli/commands/gazetteer/overture-ingest.d.ts +1 -1
- package/out/cli/commands/gazetteer/overture-ingest.d.ts.map +1 -1
- package/out/cli/commands/gazetteer/overture-ingest.js +1 -3
- package/out/cli/commands/gazetteer/overture-ingest.js.map +1 -1
- package/out/cli/commands/gazetteer/postcode/intl.js +2 -2
- package/out/cli/commands/gazetteer/postcode/intl.js.map +1 -1
- package/out/cli/commands/poi.js +1 -1
- package/out/cli/commands/registry/run.d.ts +2 -2
- package/out/cli/commands/serve.js +5 -5
- package/out/cli/commands/serve.js.map +1 -1
- package/out/cli/commands/situs/build.js +1 -1
- package/out/cli/commands/tiger/fetch.d.ts +1 -1
- package/out/cli/commands/tiger/fetch.js +1 -1
- package/out/cli/debug-view/DebugFrame.d.ts +1 -1
- package/out/cli/debug-view/DebugFrame.js +1 -1
- package/out/cli/debug-view/output-lines.js +1 -1
- package/out/cli/debug-view/trace-rows.d.ts +4 -4
- package/out/cli/debug-view/trace-rows.js +4 -4
- package/out/cli/doctor/checks.d.ts +1 -1
- package/out/cli/doctor/runner.d.ts +1 -1
- package/out/cli/kit/weights-guard.d.ts +1 -1
- package/out/cli/kit/weights-guard.js +1 -1
- package/out/cli/native/commands/autocomplete.d.ts +1 -1
- package/out/cli/native/commands/autocomplete.d.ts.map +1 -1
- package/out/cli/native/commands/autocomplete.js +1 -1
- package/out/cli/native/commands/autocomplete.js.map +1 -1
- package/out/cli/native/commands/doctor.d.ts +1 -1
- package/out/cli/native/commands/doctor.d.ts.map +1 -1
- package/out/cli/native/commands/doctor.js +1 -1
- package/out/cli/native/commands/doctor.js.map +1 -1
- package/out/cli/native/commands/geocode.d.ts +7 -2
- package/out/cli/native/commands/geocode.d.ts.map +1 -1
- package/out/cli/native/commands/geocode.js +9 -2
- package/out/cli/native/commands/geocode.js.map +1 -1
- package/out/cli/native/commands/license.d.ts +2 -2
- package/out/cli/native/commands/license.d.ts.map +1 -1
- package/out/cli/native/commands/license.js +5 -5
- package/out/cli/native/commands/license.js.map +1 -1
- package/out/cli/native/commands/reverse.d.ts +1 -1
- package/out/cli/native/commands/reverse.d.ts.map +1 -1
- package/out/cli/native/commands/reverse.js +1 -1
- package/out/cli/native/commands/reverse.js.map +1 -1
- package/out/data/bundles.d.ts +1 -1
- package/out/data/bundles.js +1 -1
- package/out/data/inventory.d.ts +2 -2
- package/out/data/inventory.js +1 -1
- package/out/data/sources.d.ts +1 -1
- package/out/default/reverse-geocoder.d.ts +1 -1
- package/out/default/reverse-geocoder.js +1 -1
- package/out/fork-entity.d.ts +43 -4
- package/out/fork-entity.d.ts.map +1 -1
- package/out/fork-entity.js +222 -91
- package/out/fork-entity.js.map +1 -1
- package/out/freshness.d.ts +1 -1
- package/out/freshness.js +1 -1
- package/out/geocode/classifier.d.ts +2 -2
- package/out/geocode/classifier.d.ts.map +1 -1
- package/out/geocode/command-options.d.ts +5 -0
- package/out/geocode/command-options.d.ts.map +1 -1
- package/out/geocode/command-options.js +3 -1
- package/out/geocode/command-options.js.map +1 -1
- package/out/geocode/core.d.ts +15 -4
- package/out/geocode/core.d.ts.map +1 -1
- package/out/geocode/core.js +16 -10
- package/out/geocode/core.js.map +1 -1
- package/out/geocode/diff.d.ts +2 -2
- package/out/geocode/diff.d.ts.map +1 -1
- package/out/geocode/diff.js +2 -1
- package/out/geocode/diff.js.map +1 -1
- package/out/geocode/epistemic-status.d.ts +2 -1
- package/out/geocode/epistemic-status.d.ts.map +1 -1
- package/out/geocode/epistemic-status.js +4 -2
- package/out/geocode/epistemic-status.js.map +1 -1
- package/out/geocode/national-overture.d.ts +1 -1
- package/out/geocode/parse-priors.d.ts +179 -0
- package/out/geocode/parse-priors.d.ts.map +1 -0
- package/out/geocode/parse-priors.js +162 -0
- package/out/geocode/parse-priors.js.map +1 -0
- package/out/geocode/result.d.ts +1 -0
- package/out/geocode/result.d.ts.map +1 -1
- package/out/geocode/result.js +35 -5
- package/out/geocode/result.js.map +1 -1
- package/out/geocode/session.d.ts +8 -0
- package/out/geocode/session.d.ts.map +1 -1
- package/out/geocode/session.js +28 -43
- package/out/geocode/session.js.map +1 -1
- package/out/inferred-scope.d.ts +2 -0
- package/out/inferred-scope.d.ts.map +1 -1
- package/out/inferred-scope.js +35 -1
- package/out/inferred-scope.js.map +1 -1
- package/out/poi/intent.d.ts +11 -2
- package/out/poi/intent.d.ts.map +1 -1
- package/out/poi/intent.js +21 -4
- package/out/poi/intent.js.map +1 -1
- package/out/query-intent.d.ts +5 -4
- package/out/query-intent.d.ts.map +1 -1
- package/out/query-intent.js +7 -6
- package/out/query-intent.js.map +1 -1
- package/out/region-recognition.js +3 -3
- package/out/region-recognition.js.map +1 -1
- package/out/runtime-pipeline.d.ts +19 -0
- package/out/runtime-pipeline.d.ts.map +1 -1
- package/out/runtime-pipeline.js +51 -47
- package/out/runtime-pipeline.js.map +1 -1
- package/out/span-script.d.ts +1 -1
- package/out/span-script.js +1 -1
- package/out/tools/coverage/census.js +1 -1
- package/out/tools/coverage/census.js.map +1 -1
- package/out/tools/coverage/core.d.ts +1 -1
- package/out/tools/coverage/core.js +3 -3
- package/out/tools/coverage/core.js.map +1 -1
- package/out/tools/coverage/jurisdictions.d.ts +2 -2
- package/out/tools/coverage/jurisdictions.js +1 -1
- package/out/tools/dev-tools/ca/province-code-probe.run.d.ts +2 -2
- package/out/tools/dev-tools/ca/province-code-probe.run.js +4 -4
- package/out/tools/dev-tools/codex/export-country-surfaces.d.ts +1 -1
- package/out/tools/dev-tools/codex/export-country-surfaces.js +1 -1
- package/out/tools/dev-tools/collect-span-confidences.run.d.ts +1 -1
- package/out/tools/dev-tools/collect-span-confidences.run.js +1 -1
- package/out/tools/dev-tools/conformal-calibrate.run.d.ts +1 -1
- package/out/tools/dev-tools/conformal-calibrate.run.js +3 -3
- package/out/tools/dev-tools/corpus/country-less-census.run.d.ts +1 -1
- package/out/tools/dev-tools/corpus/country-less-census.run.js +1 -1
- package/out/tools/dev-tools/corpus/dedup/cause-census.run.d.ts +4 -4
- package/out/tools/dev-tools/corpus/dedup/cause-census.run.js +5 -5
- package/out/tools/dev-tools/corpus/global-census.run.d.ts +4 -4
- package/out/tools/dev-tools/corpus/global-census.run.js +4 -4
- package/out/tools/dev-tools/corpus/holdout/leakage.run.d.ts +1 -1
- package/out/tools/dev-tools/corpus/holdout/leakage.run.js +7 -7
- package/out/tools/dev-tools/corpus/jurisdiction-coverage.run.js +8 -8
- package/out/tools/dev-tools/corpus/jurisdiction-coverage.run.js.map +1 -1
- package/out/tools/dev-tools/corpus/overlay-plan.run.d.ts +1 -1
- package/out/tools/dev-tools/corpus/overlay-plan.run.js +4 -3
- package/out/tools/dev-tools/corpus/overlay-plan.run.js.map +1 -1
- package/out/tools/dev-tools/corpus/overture-address-census.run.d.ts +1 -1
- package/out/tools/dev-tools/corpus/overture-address-census.run.js +1 -1
- package/out/tools/dev-tools/corpus/projection-drops.run.d.ts +1 -1
- package/out/tools/dev-tools/corpus/projection-drops.run.js +1 -1
- package/out/tools/dev-tools/corpus/region-composition.run.js +1 -1
- package/out/tools/dev-tools/corpus/street/type/channel-arms.run.d.ts +3 -3
- package/out/tools/dev-tools/corpus/street/type/channel-arms.run.js +3 -3
- package/out/tools/dev-tools/corpus/street/type/lexicon-coverage.run.d.ts +1 -1
- package/out/tools/dev-tools/corpus/street/type/lexicon-coverage.run.js +1 -1
- package/out/tools/dev-tools/corpus/surface-provenance-census.run.d.ts +1 -1
- package/out/tools/dev-tools/corpus/surface-provenance-census.run.js +1 -1
- package/out/tools/dev-tools/coverage-funnel.run.js +1 -1
- package/out/tools/dev-tools/fr/admin/split/eval.run.js +1 -1
- package/out/tools/dev-tools/fr/admin/split/eval.run.js.map +1 -1
- package/out/tools/dev-tools/fr/admin/split/selfvalidation.run.d.ts +1 -1
- package/out/tools/dev-tools/fr/admin/split/selfvalidation.run.js +5 -5
- package/out/tools/dev-tools/fr/admin/split/selfvalidation.run.js.map +1 -1
- package/out/tools/dev-tools/gb-fragment-board.run.js +1 -1
- package/out/tools/dev-tools/gb-fragment-board.run.js.map +1 -1
- package/out/tools/dev-tools/generate-trace-fixture.d.ts +1 -1
- package/out/tools/dev-tools/generate-trace-fixture.js +1 -1
- package/out/tools/dev-tools/grade-seed-cases.d.ts +1 -1
- package/out/tools/dev-tools/grade-seed-cases.js +1 -1
- package/out/tools/dev-tools/{honest-eval.run.d.ts → heldout-geography-eval.run.d.ts} +5 -5
- package/out/tools/dev-tools/heldout-geography-eval.run.d.ts.map +1 -0
- package/out/tools/dev-tools/{honest-eval.run.js → heldout-geography-eval.run.js} +6 -6
- package/out/tools/dev-tools/heldout-geography-eval.run.js.map +1 -0
- package/out/tools/dev-tools/lint-mdx-angles.js +1 -1
- package/out/tools/dev-tools/locality/context-swap.run.js +1 -1
- package/out/tools/dev-tools/locality/reachability.run.js +1 -1
- package/out/tools/dev-tools/man-page.d.ts +1 -1
- package/out/tools/dev-tools/man-page.js +4 -4
- package/out/tools/dev-tools/man-page.js.map +1 -1
- package/out/tools/dev-tools/parse-register-census.run.d.ts +1 -1
- package/out/tools/dev-tools/parse-register-census.run.js +1 -1
- package/out/tools/dev-tools/perturb-golden.run.js +1 -1
- package/out/tools/dev-tools/postcode/coherence/coverage.run.d.ts +1 -1
- package/out/tools/dev-tools/postcode/coherence/coverage.run.js +1 -1
- package/out/tools/dev-tools/probe/referential-delta.run.js +1 -1
- package/out/tools/dev-tools/probe/referential-delta.run.js.map +1 -1
- package/out/tools/dev-tools/same-data-benchmark.run.js +7 -7
- package/out/tools/dev-tools/same-data-benchmark.run.js.map +1 -1
- package/out/tools/dev-tools/street-recall-full-probe.run.d.ts +1 -1
- package/out/tools/dev-tools/street-recall-full-probe.run.js +1 -1
- package/out/tools/dev-tools/undersized-locality-census.run.js +3 -3
- package/out/tools/dev-tools/undersized-locality-census.run.js.map +1 -1
- package/out/tools/dev-tools/us/locality-region-postcode-arms.run.d.ts +4 -3
- package/out/tools/dev-tools/us/locality-region-postcode-arms.run.d.ts.map +1 -1
- package/out/tools/dev-tools/us/locality-region-postcode-arms.run.js +5 -4
- package/out/tools/dev-tools/us/locality-region-postcode-arms.run.js.map +1 -1
- package/out/tools/dev-tools/us/recall-flip-census.run.js +1 -1
- package/out/tools/eval-harness/activity-lexicon/phrase-collision-census.d.ts +1 -1
- package/out/tools/eval-harness/autocomplete-ladder.d.ts +2 -2
- package/out/tools/eval-harness/autocomplete-ladder.js +1 -1
- package/out/tools/eval-harness/capability-manifest.js +1 -1
- package/out/tools/eval-harness/capability-manifest.js.map +1 -1
- package/out/tools/eval-harness/conformance/comparators.d.ts +1 -1
- package/out/tools/eval-harness/conformance/fixture.d.ts +16 -9
- package/out/tools/eval-harness/conformance/fixture.d.ts.map +1 -1
- package/out/tools/eval-harness/conformance/fixture.js +9 -5
- package/out/tools/eval-harness/conformance/fixture.js.map +1 -1
- package/out/tools/eval-harness/conformance/refinement-monotonicity.d.ts +2 -1
- package/out/tools/eval-harness/conformance/refinement-monotonicity.d.ts.map +1 -1
- package/out/tools/eval-harness/conformance/refinement-monotonicity.js +2 -1
- package/out/tools/eval-harness/conformance/refinement-monotonicity.js.map +1 -1
- package/out/tools/eval-harness/conformance/run.d.ts +1 -1
- package/out/tools/eval-harness/demo/cascade/smoke.d.ts.map +1 -1
- package/out/tools/eval-harness/demo/cascade/smoke.js +4 -2
- package/out/tools/eval-harness/demo/cascade/smoke.js.map +1 -1
- package/out/tools/eval-harness/error-analysis.js +2 -2
- package/out/tools/eval-harness/error-analysis.js.map +1 -1
- package/out/tools/eval-harness/es-postcode-centroids.js +1 -1
- package/out/tools/eval-harness/es-postcode-centroids.js.map +1 -1
- package/out/tools/eval-harness/fr-parse-recall.d.ts +1 -1
- package/out/tools/eval-harness/fr-parse-recall.js +1 -1
- package/out/tools/eval-harness/gauntlet/ablation/gazetteer.d.ts.map +1 -1
- package/out/tools/eval-harness/gauntlet/ablation/gazetteer.js +3 -2
- package/out/tools/eval-harness/gauntlet/ablation/gazetteer.js.map +1 -1
- package/out/tools/eval-harness/gauntlet/ablation/types.d.ts +2 -2
- package/out/tools/eval-harness/gauntlet/ablation.d.ts +2 -2
- package/out/tools/eval-harness/gauntlet/ablation.js +4 -4
- package/out/tools/eval-harness/gauntlet/cases/seed-case.d.ts +2 -1
- package/out/tools/eval-harness/gauntlet/cases/seed-case.d.ts.map +1 -1
- package/out/tools/eval-harness/gauntlet/cases/seed-case.js +2 -1
- package/out/tools/eval-harness/gauntlet/cases/seed-case.js.map +1 -1
- package/out/tools/eval-harness/gauntlet/check-case.js +4 -4
- package/out/tools/eval-harness/gauntlet/check-case.js.map +1 -1
- package/out/tools/eval-harness/gauntlet/corpus-stamp.d.ts +2 -2
- package/out/tools/eval-harness/gauntlet/corpus-stamp.js +2 -2
- package/out/tools/eval-harness/gauntlet/harness.d.ts +6 -1
- package/out/tools/eval-harness/gauntlet/harness.d.ts.map +1 -1
- package/out/tools/eval-harness/gauntlet/harness.js +45 -26
- package/out/tools/eval-harness/gauntlet/harness.js.map +1 -1
- package/out/tools/eval-harness/gauntlet/holdout.d.ts +1 -1
- package/out/tools/eval-harness/gauntlet/holdout.js +1 -1
- package/out/tools/eval-harness/gauntlet/regression.d.ts +3 -2
- package/out/tools/eval-harness/gauntlet/regression.d.ts.map +1 -1
- package/out/tools/eval-harness/gauntlet/regression.js +3 -3
- package/out/tools/eval-harness/gauntlet/regression.js.map +1 -1
- package/out/tools/eval-harness/gauntlet/run.d.ts +4 -0
- package/out/tools/eval-harness/gauntlet/run.d.ts.map +1 -1
- package/out/tools/eval-harness/gauntlet/run.js +1 -0
- package/out/tools/eval-harness/gauntlet/run.js.map +1 -1
- package/out/tools/eval-harness/gauntlet/schema.d.ts +1 -1
- package/out/tools/eval-harness/gauntlet/schema.js +1 -1
- package/out/tools/eval-harness/gauntlet/schema.js.map +1 -1
- package/out/tools/eval-harness/hard-case-board.d.ts +1 -1
- package/out/tools/eval-harness/hard-case-board.js +1 -1
- package/out/tools/eval-harness/mask-regression.d.ts +1 -1
- package/out/tools/eval-harness/mask-regression.js +1 -1
- package/out/tools/eval-harness/oa/resolver/admin-match.d.ts +3 -3
- package/out/tools/eval-harness/oa/resolver/admin-match.js +7 -7
- package/out/tools/eval-harness/oa/resolver/admin-match.js.map +1 -1
- package/out/tools/eval-harness/oa/resolver/coordinate-tiers.d.ts +1 -1
- package/out/tools/eval-harness/oa/resolver/options.d.ts +1 -1
- package/out/tools/eval-harness/oa/resolver/parse-rig.d.ts.map +1 -1
- package/out/tools/eval-harness/oa/resolver/parse-rig.js +10 -6
- package/out/tools/eval-harness/oa/resolver/parse-rig.js.map +1 -1
- package/out/tools/eval-harness/oa/resolver/tree-hits.d.ts +2 -2
- package/out/tools/eval-harness/oa/resolver/tree-hits.js +2 -2
- package/out/tools/eval-harness/per/locale-f1.d.ts.map +1 -1
- package/out/tools/eval-harness/per/locale-f1.js +4 -0
- package/out/tools/eval-harness/per/locale-f1.js.map +1 -1
- package/out/tools/eval-harness/phase-2-decision/decision.d.ts +2 -2
- package/out/tools/eval-harness/phase-2-decision/decision.js +1 -1
- package/out/tools/eval-harness/premise-linkage/schema.d.ts +5 -4
- package/out/tools/eval-harness/premise-linkage/schema.d.ts.map +1 -1
- package/out/tools/eval-harness/production-priors.d.ts +24 -0
- package/out/tools/eval-harness/production-priors.d.ts.map +1 -0
- package/out/tools/eval-harness/production-priors.js +37 -0
- package/out/tools/eval-harness/production-priors.js.map +1 -0
- package/out/tools/eval-harness/same-data/concordance.d.ts +2 -2
- package/out/tools/eval-harness/same-data/concordance.js +2 -2
- package/out/tools/eval-harness/same-data/fixture.d.ts +1 -1
- package/out/tools/eval-harness/same-data/fixture.js +1 -1
- package/out/tools/eval-harness/same-data/score.d.ts +1 -2
- package/out/tools/eval-harness/same-data/score.d.ts.map +1 -1
- package/out/tools/eval-harness/same-data/score.js.map +1 -1
- package/out/tools/eval-harness/score/affix.d.ts +1 -1
- package/out/tools/eval-harness/score/affix.d.ts.map +1 -1
- package/out/tools/eval-harness/score/affix.js +4 -1
- package/out/tools/eval-harness/score/affix.js.map +1 -1
- package/out/tools/eval-harness/score/country-homograph.d.ts +2 -2
- package/out/tools/eval-harness/score/country-homograph.d.ts.map +1 -1
- package/out/tools/eval-harness/score/country-homograph.js +7 -4
- package/out/tools/eval-harness/score/country-homograph.js.map +1 -1
- package/out/tools/eval-harness/score/trends.js +5 -5
- package/out/tools/eval-harness/score/trends.js.map +1 -1
- package/out/tools/eval-harness/semantic-utility/probe.d.ts +3 -3
- package/out/tools/gazetteer-pipeline/admin/enrich.d.ts +1 -1
- package/out/tools/gazetteer-pipeline/admin/enrich.js +1 -1
- package/out/tools/gazetteer-pipeline/admin/ingest-wof.d.ts +3 -1
- package/out/tools/gazetteer-pipeline/admin/ingest-wof.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/admin/ingest-wof.js +9 -4
- package/out/tools/gazetteer-pipeline/admin/ingest-wof.js.map +1 -1
- package/out/tools/gazetteer-pipeline/admin/label-point-adjudicator.d.ts +2 -1
- package/out/tools/gazetteer-pipeline/admin/label-point-adjudicator.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/admin/label-point-adjudicator.js +2 -1
- package/out/tools/gazetteer-pipeline/admin/label-point-adjudicator.js.map +1 -1
- package/out/tools/gazetteer-pipeline/admin/manifest.d.ts +2 -2
- package/out/tools/gazetteer-pipeline/admin/manifest.js +3 -3
- package/out/tools/gazetteer-pipeline/admin.js +6 -5
- package/out/tools/gazetteer-pipeline/admin.js.map +1 -1
- package/out/tools/gazetteer-pipeline/borough-pairs.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/borough-pairs.js +6 -7
- package/out/tools/gazetteer-pipeline/borough-pairs.js.map +1 -1
- package/out/tools/gazetteer-pipeline/capitals.d.ts +2 -1
- package/out/tools/gazetteer-pipeline/capitals.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/capitals.js.map +1 -1
- package/out/tools/gazetteer-pipeline/country/plan.d.ts +1 -1
- package/out/tools/gazetteer-pipeline/country/plan.js +1 -1
- package/out/tools/gazetteer-pipeline/defaults.d.ts +0 -12
- package/out/tools/gazetteer-pipeline/defaults.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/defaults.js +3 -15
- package/out/tools/gazetteer-pipeline/defaults.js.map +1 -1
- package/out/tools/gazetteer-pipeline/evidence-lexicons.d.ts +2 -2
- package/out/tools/gazetteer-pipeline/evidence-lexicons.js +2 -2
- package/out/tools/gazetteer-pipeline/fst.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/fst.js +2 -7
- package/out/tools/gazetteer-pipeline/fst.js.map +1 -1
- package/out/tools/gazetteer-pipeline/granularity.d.ts +3 -3
- package/out/tools/gazetteer-pipeline/importance-fanout.d.ts +2 -2
- package/out/tools/gazetteer-pipeline/importance-fanout.js +2 -2
- package/out/tools/gazetteer-pipeline/nsul-layer.d.ts +10 -4
- package/out/tools/gazetteer-pipeline/nsul-layer.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/nsul-layer.js +20 -9
- package/out/tools/gazetteer-pipeline/nsul-layer.js.map +1 -1
- package/out/tools/gazetteer-pipeline/nz-localities.d.ts +1 -1
- package/out/tools/gazetteer-pipeline/nz-localities.js +1 -1
- package/out/tools/gazetteer-pipeline/placetype-census.d.ts +2 -2
- package/out/tools/gazetteer-pipeline/placetype-census.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/placetype-census.js +4 -3
- package/out/tools/gazetteer-pipeline/placetype-census.js.map +1 -1
- package/out/tools/gazetteer-pipeline/poi/build/brands.d.ts +3 -2
- package/out/tools/gazetteer-pipeline/poi/build/brands.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/poi/build/brands.js +3 -2
- package/out/tools/gazetteer-pipeline/poi/build/brands.js.map +1 -1
- package/out/tools/gazetteer-pipeline/poi/build/venue-heads.d.ts +19 -7
- package/out/tools/gazetteer-pipeline/poi/build/venue-heads.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/poi/build/venue-heads.js +33 -12
- package/out/tools/gazetteer-pipeline/poi/build/venue-heads.js.map +1 -1
- package/out/tools/gazetteer-pipeline/poi/capture-recapture.d.ts +2 -1
- package/out/tools/gazetteer-pipeline/poi/capture-recapture.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/poi/capture-recapture.js.map +1 -1
- package/out/tools/gazetteer-pipeline/poi/defaults.d.ts +6 -4
- package/out/tools/gazetteer-pipeline/poi/defaults.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/poi/defaults.js +6 -4
- package/out/tools/gazetteer-pipeline/poi/defaults.js.map +1 -1
- package/out/tools/gazetteer-pipeline/postcode/codepoint/comparison.d.ts +4 -3
- package/out/tools/gazetteer-pipeline/postcode/codepoint/comparison.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline/postcode/codepoint/comparison.js.map +1 -1
- package/out/tools/gazetteer-pipeline/postcode/geonames/tail.d.ts +1 -1
- package/out/tools/gazetteer-pipeline/postcode/locality/base.d.ts +1 -1
- package/out/tools/gazetteer-pipeline/postcode/locality/base.js +1 -1
- package/out/tools/gazetteer-pipeline/postcode/locality/kr.js +4 -4
- package/out/tools/gazetteer-pipeline/postcode/locality/kr.js.map +1 -1
- package/out/tools/gazetteer-pipeline/postcode/ni/osm/parse.d.ts +1 -1
- package/out/tools/gazetteer-pipeline/postcode/ni/osm/parse.js +1 -1
- package/out/tools/gazetteer-pipeline/postcode/prefix.d.ts +1 -1
- package/out/tools/gazetteer-pipeline/postcode/prefix.js +1 -1
- package/out/tools/gazetteer-pipeline/repos/sync.d.ts +2 -2
- package/out/tools/gazetteer-pipeline/repos/sync.js +2 -2
- package/out/tools/gazetteer-pipeline/street-morphology.d.ts +2 -2
- package/out/tools/gazetteer-pipeline/street-morphology.js +1 -1
- package/out/tools/gazetteer-pipeline.d.ts +1 -1
- package/out/tools/gazetteer-pipeline.d.ts.map +1 -1
- package/out/tools/gazetteer-pipeline.js +3 -2
- package/out/tools/gazetteer-pipeline.js.map +1 -1
- package/out/tools/release-tools/publish/demo-assets.d.ts +1 -1
- package/out/tools/release-tools/publish/hf.d.ts +4 -0
- package/out/tools/release-tools/publish/hf.d.ts.map +1 -1
- package/out/tools/release-tools/publish/hf.js +6 -1
- package/out/tools/release-tools/publish/hf.js.map +1 -1
- package/package.json +36 -36
- package/skills/mailwoman/SKILL.md +12 -12
- package/tools/coverage/census.ts +1 -1
- package/tools/coverage/core.ts +4 -4
- package/tools/coverage/jurisdictions.ts +2 -2
- package/tools/dev-tools/build/oa-coord-golden.run.ts +1 -1
- package/tools/dev-tools/ca/province-code-probe.run.ts +4 -4
- package/tools/dev-tools/codex/export-country-surfaces.ts +1 -1
- package/tools/dev-tools/collect-span-confidences.run.ts +1 -1
- package/tools/dev-tools/conformal-calibrate.run.ts +3 -3
- package/tools/dev-tools/corpus/country-less-census.run.ts +1 -1
- package/tools/dev-tools/corpus/dedup/cause-census.run.ts +5 -5
- package/tools/dev-tools/corpus/global-census.run.ts +4 -4
- package/tools/dev-tools/corpus/holdout/leakage.run.ts +7 -7
- package/tools/dev-tools/corpus/jurisdiction-coverage.run.ts +8 -8
- package/tools/dev-tools/corpus/overlay-plan.run.ts +4 -3
- package/tools/dev-tools/corpus/overture-address-census.run.ts +1 -1
- package/tools/dev-tools/corpus/projection-drops.run.ts +1 -1
- package/tools/dev-tools/corpus/region-composition.run.ts +2 -2
- package/tools/dev-tools/corpus/street/type/channel-arms.run.ts +3 -3
- package/tools/dev-tools/corpus/street/type/lexicon-coverage.run.ts +1 -1
- package/tools/dev-tools/corpus/surface-provenance-census.run.ts +1 -1
- package/tools/dev-tools/coverage-funnel.run.ts +1 -1
- package/tools/dev-tools/fr/admin/split/eval.run.ts +1 -1
- package/tools/dev-tools/fr/admin/split/selfvalidation.run.ts +5 -5
- package/tools/dev-tools/gb-fragment-board.run.ts +1 -1
- package/tools/dev-tools/generate-trace-fixture.ts +1 -1
- package/tools/dev-tools/grade-seed-cases.ts +1 -1
- package/tools/dev-tools/{honest-eval.run.ts → heldout-geography-eval.run.ts} +5 -5
- package/tools/dev-tools/lint-mdx-angles.ts +1 -1
- package/tools/dev-tools/locality/context-swap.run.ts +1 -1
- package/tools/dev-tools/locality/reachability.run.ts +1 -1
- package/tools/dev-tools/man-page.ts +4 -4
- package/tools/dev-tools/parse-register-census.run.ts +1 -1
- package/tools/dev-tools/perturb-golden.run.ts +1 -1
- package/tools/dev-tools/postcode/coherence/coverage.run.ts +1 -1
- package/tools/dev-tools/probe/referential-delta.run.ts +1 -1
- package/tools/dev-tools/same-data-benchmark.run.ts +7 -7
- package/tools/dev-tools/street-recall-full-probe.run.ts +1 -1
- package/tools/dev-tools/undersized-locality-census.run.ts +3 -3
- package/tools/dev-tools/us/locality-region-postcode-arms.run.ts +5 -4
- package/tools/dev-tools/us/recall-flip-census.run.ts +1 -1
- package/tools/eval-harness/activity-lexicon/phrase-collision-census.ts +1 -1
- package/tools/eval-harness/autocomplete-ladder.ts +2 -2
- package/tools/eval-harness/capability-manifest.ts +1 -1
- package/tools/eval-harness/conformance/comparators.ts +1 -1
- package/tools/eval-harness/conformance/fixture.ts +19 -10
- package/tools/eval-harness/conformance/refinement-monotonicity.ts +2 -1
- package/tools/eval-harness/conformance/run.ts +1 -1
- package/tools/eval-harness/demo/cascade/smoke.ts +4 -2
- package/tools/eval-harness/error-analysis.ts +2 -2
- package/tools/eval-harness/es-postcode-centroids.ts +1 -1
- package/tools/eval-harness/fr-parse-recall.ts +1 -1
- package/tools/eval-harness/gauntlet/ablation/gazetteer.ts +3 -2
- package/tools/eval-harness/gauntlet/ablation/types.ts +2 -2
- package/tools/eval-harness/gauntlet/ablation.ts +4 -4
- package/tools/eval-harness/gauntlet/cases/gb/family-possessive-qualifier.jsonl +1 -1
- package/tools/eval-harness/gauntlet/cases/gb/regression.jsonl +7 -0
- package/tools/eval-harness/gauntlet/cases/gb/venue-oracle-batch.jsonl +31 -0
- package/tools/eval-harness/gauntlet/cases/seed-case.ts +2 -2
- package/tools/eval-harness/gauntlet/cases/us/regression.jsonl +12 -0
- package/tools/eval-harness/gauntlet/cases/us/venue-oracle-batch.jsonl +1 -0
- package/tools/eval-harness/gauntlet/check-case.ts +4 -4
- package/tools/eval-harness/gauntlet/corpus-stamp.ts +2 -2
- package/tools/eval-harness/gauntlet/harness.ts +61 -29
- package/tools/eval-harness/gauntlet/holdout.ts +1 -1
- package/tools/eval-harness/gauntlet/regression.ts +6 -5
- package/tools/eval-harness/gauntlet/run.ts +5 -0
- package/tools/eval-harness/gauntlet/schema.ts +2 -2
- package/tools/eval-harness/hard-case-board.ts +1 -1
- package/tools/eval-harness/mask-regression.ts +1 -1
- package/tools/eval-harness/oa/resolver/admin-match.ts +7 -7
- package/tools/eval-harness/oa/resolver/coordinate-tiers.ts +1 -1
- package/tools/eval-harness/oa/resolver/options.ts +1 -1
- package/tools/eval-harness/oa/resolver/parse-rig.ts +13 -7
- package/tools/eval-harness/oa/resolver/tree-hits.ts +2 -2
- package/tools/eval-harness/per/locale-f1.ts +5 -0
- package/tools/eval-harness/phase-2-decision/decision.ts +2 -2
- package/tools/eval-harness/premise-linkage/schema.ts +5 -4
- package/tools/eval-harness/production-priors.ts +56 -0
- package/tools/eval-harness/same-data/concordance.ts +2 -2
- package/tools/eval-harness/same-data/fixture.ts +1 -1
- package/tools/eval-harness/same-data/score.ts +1 -2
- package/tools/eval-harness/score/affix.ts +6 -2
- package/tools/eval-harness/score/country-homograph.ts +8 -4
- package/tools/eval-harness/score/trends.ts +5 -5
- package/tools/eval-harness/semantic-utility/probe.ts +3 -3
- package/tools/gazetteer-pipeline/admin/enrich.ts +1 -1
- package/tools/gazetteer-pipeline/admin/ingest-wof.ts +14 -5
- package/tools/gazetteer-pipeline/admin/label-point-adjudicator.ts +2 -1
- package/tools/gazetteer-pipeline/admin/manifest.ts +4 -4
- package/tools/gazetteer-pipeline/admin.ts +6 -6
- package/tools/gazetteer-pipeline/borough-pairs.ts +6 -7
- package/tools/gazetteer-pipeline/capitals.ts +2 -1
- package/tools/gazetteer-pipeline/country/plan.ts +1 -1
- package/tools/gazetteer-pipeline/defaults.ts +3 -16
- package/tools/gazetteer-pipeline/evidence-lexicons.ts +2 -2
- package/tools/gazetteer-pipeline/fst.ts +2 -8
- package/tools/gazetteer-pipeline/granularity.ts +3 -3
- package/tools/gazetteer-pipeline/importance-fanout.ts +2 -2
- package/tools/gazetteer-pipeline/nsul-layer.ts +22 -10
- package/tools/gazetteer-pipeline/nz-localities.ts +1 -1
- package/tools/gazetteer-pipeline/placetype-census.ts +4 -3
- package/tools/gazetteer-pipeline/poi/build/brands.ts +3 -2
- package/tools/gazetteer-pipeline/poi/build/venue-heads.ts +39 -15
- package/tools/gazetteer-pipeline/poi/capture-recapture.ts +2 -1
- package/tools/gazetteer-pipeline/poi/defaults.ts +6 -4
- package/tools/gazetteer-pipeline/postcode/codepoint/comparison.ts +4 -3
- package/tools/gazetteer-pipeline/postcode/geonames/tail.ts +1 -1
- package/tools/gazetteer-pipeline/postcode/locality/base.ts +1 -1
- package/tools/gazetteer-pipeline/postcode/locality/kr.ts +4 -4
- package/tools/gazetteer-pipeline/postcode/ni/osm/parse.ts +2 -2
- package/tools/gazetteer-pipeline/postcode/prefix.ts +1 -1
- package/tools/gazetteer-pipeline/repos/sync.ts +2 -2
- package/tools/gazetteer-pipeline/street-morphology.ts +2 -2
- package/tools/gazetteer-pipeline.ts +4 -3
- package/tools/release-tools/publish/demo-assets.ts +1 -1
- package/tools/release-tools/publish/hf.ts +12 -1
- package/cli/commands/wof/mermaid.tsx +0 -18
- package/out/cli/commands/wof/mermaid.d.ts +0 -17
- package/out/cli/commands/wof/mermaid.d.ts.map +0 -1
- package/out/cli/commands/wof/mermaid.js +0 -14
- package/out/cli/commands/wof/mermaid.js.map +0 -1
- package/out/tools/dev-tools/honest-eval.run.d.ts.map +0 -1
- package/out/tools/dev-tools/honest-eval.run.js.map +0 -1
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ console.log(decodeAsJSON(tree))
|
|
|
31
31
|
|
|
32
32
|
Mailwoman is **not** an LLM and none of it is generative. It is a small
|
|
33
33
|
transformer encoder (~30M params) doing BIO token classification over a 33-label
|
|
34
|
-
address schema
|
|
34
|
+
address schema. That plain NER design suits short, structured strings.
|
|
35
35
|
|
|
36
36
|
The design splits the problem in two:
|
|
37
37
|
|
|
@@ -121,7 +121,7 @@ decodeAsTuples(result.tree)
|
|
|
121
121
|
// [["house_number", "350"], ["street", "5th"], …]
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
-
The tree is hierarchical and
|
|
124
|
+
The tree is hierarchical and records a calibrated confidence on each node:
|
|
125
125
|
|
|
126
126
|
```ts
|
|
127
127
|
for (const root of result.tree.roots) {
|
|
@@ -136,7 +136,7 @@ right about 88% of the time) rather than raw scores.
|
|
|
136
136
|
|
|
137
137
|
### Options
|
|
138
138
|
|
|
139
|
-
Factory options configure the pipeline
|
|
139
|
+
Factory options configure the pipeline, and per-call `PipelineOpts` tune a single parse. The
|
|
140
140
|
ones you'll reach for most:
|
|
141
141
|
|
|
142
142
|
```ts
|
|
@@ -169,7 +169,7 @@ mailwoman geocode "1600 Amphitheatre Pkwy, Mountain View, CA 94043"
|
|
|
169
169
|
Programmatically, build a `WOFSQLitePlaceLookup` backend (from
|
|
170
170
|
`@mailwoman/resolver-wof-sqlite`), pass it to `createWOFResolver` (from `@mailwoman/resolver`),
|
|
171
171
|
and hand the resolver to `createRuntimePipeline({ classifier, resolver })`. The resolved
|
|
172
|
-
`result.tree` roots then
|
|
172
|
+
`result.tree` roots then have a `wof:id` and coordinate. See
|
|
173
173
|
[Getting started → Adding resolution](https://mailwoman.ai/docs/developers/get-started/install-and-first-parse)
|
|
174
174
|
for the worked example.
|
|
175
175
|
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* `mailwoman corpus golden-relabel` — move a golden answer-key version onto the corpus's US
|
|
7
7
|
* street-suffix convention (folded `street` → `street` + `street_suffix`). Writes a new version
|
|
8
8
|
* dir plus a review deck. the parent version is read-only. See
|
|
9
|
-
* `corpus/src/tools/golden-relabel-street.ts` for what it changes and
|
|
10
|
-
* refuses to.
|
|
9
|
+
* `corpus/src/tools/golden-relabel-street.ts` for what it changes and what it
|
|
10
|
+
* refuses to change.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { type CommandSpec, CommandTaskResult, type CommandComponent, useCommandTask } from "#cli-kit"
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
6
|
* `mailwoman corpus migrate-overlays` — rewrite every overlay parquet of a corpus onto the current row
|
|
7
|
-
* schema, where an overlay
|
|
7
|
+
* schema, where an overlay parquet is a file the corpus manifest lists and its base manifest does not, compared
|
|
8
8
|
* by `sha256`.
|
|
9
9
|
*
|
|
10
10
|
* Each migrated file is written beside its original as `<name>.migrated.parquet` and no file is swapped, so the
|
|
@@ -40,7 +40,7 @@ const Cmd: CommandComponent<typeof spec> = ({ options }) => {
|
|
|
40
40
|
|
|
41
41
|
type Manifest = Parameters<typeof baseManifestFiles>[0]
|
|
42
42
|
|
|
43
|
-
// A
|
|
43
|
+
// A manifest file without a hash could match another unhashed file.
|
|
44
44
|
// The migration could then skip an overlay as a base.
|
|
45
45
|
const readHashedFiles = async (path: string) => {
|
|
46
46
|
const files = baseManifestFiles(await readLocalJSONFile<Manifest>(path))
|
|
@@ -46,6 +46,11 @@ export const spec = {
|
|
|
46
46
|
"Split per parquet, comma-separated. Unset puts every file in train. val or test is accepted only for a file `corpus split-slice` wrote, whose name ends .val.parquet or .test.parquet.",
|
|
47
47
|
},
|
|
48
48
|
note: { type: "string", required: true, description: "Manifest note" },
|
|
49
|
+
"replace-source": {
|
|
50
|
+
type: "string",
|
|
51
|
+
description:
|
|
52
|
+
"Base sources to drop, comma-separated. The base's files with each source leave the manifest and its counts, so the added files take their place.",
|
|
53
|
+
},
|
|
49
54
|
},
|
|
50
55
|
} as const satisfies CommandSpec
|
|
51
56
|
|
|
@@ -86,6 +91,7 @@ const Cmd: CommandComponent<typeof spec> = ({ options }) => {
|
|
|
86
91
|
split: (splits[index] ?? "train") as "train" | "val" | "test",
|
|
87
92
|
})),
|
|
88
93
|
note: options.note,
|
|
94
|
+
replaceSources: options.replaceSource ? extractDelimited(options.replaceSource) : [],
|
|
89
95
|
})
|
|
90
96
|
|
|
91
97
|
return "done"
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* `mailwoman corpus split-slice --input <parquet> --out-dir <dir>` — route one overlay parquet
|
|
7
7
|
* through the holdout policy the base build applies, writing a parquet per split it reaches.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* A corpus overlay is appended to a manifest as a train file, so a country whose only rows of a given
|
|
10
10
|
* kind live in an overlay has no held-out row of that kind. Pass the per-split outputs to
|
|
11
11
|
* `mailwoman corpus overlay-manifest --split` so the manifest records where each one belongs.
|
|
12
12
|
*/
|
|
@@ -84,7 +84,7 @@ type UploadedCorpusManifest = Partial<
|
|
|
84
84
|
* `overlay-manifest` rewrites this count on each merge.
|
|
85
85
|
*
|
|
86
86
|
* `total_rows` here counts the same labeled rows as the build manifest's `total_aligned_rows`,
|
|
87
|
-
* so the two are comparable and their difference is what the overlays added.
|
|
87
|
+
* so the two are comparable and their difference is what the corpus overlays added.
|
|
88
88
|
*/
|
|
89
89
|
interface AssembledCorpusManifest {
|
|
90
90
|
total_rows?: number
|
|
@@ -39,7 +39,7 @@ export const spec = {
|
|
|
39
39
|
type: "boolean",
|
|
40
40
|
default: false,
|
|
41
41
|
description:
|
|
42
|
-
"Leave out the data root's manifested databases. The document then
|
|
42
|
+
"Leave out the data root's manifested databases. The document then lists only the four bundles, " +
|
|
43
43
|
"and no component records attribution, source vintage or build revision",
|
|
44
44
|
},
|
|
45
45
|
},
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
|
|
26
26
|
export const description =
|
|
27
27
|
"Report every database in the data root and whether it records how it was built. `layer_manifest` is " +
|
|
28
|
-
"the interface (docs/engineering/reference/layer-interface.mdx)
|
|
28
|
+
"the interface (docs/engineering/reference/layer-interface.mdx). This report shows how much of the root implements it."
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* Native command-line interface consumed by the filesystem command router.
|
|
@@ -36,14 +36,14 @@ export const spec = {
|
|
|
36
36
|
options: {
|
|
37
37
|
"data-root": { type: "string", description: "Override the data root" },
|
|
38
38
|
depth: { type: "string", description: "Directory levels to walk. Default 2" },
|
|
39
|
-
all: { type: "boolean", default: false, description: "List every artifact
|
|
39
|
+
all: { type: "boolean", default: false, description: "List every artifact. The default shows only the summary" },
|
|
40
40
|
json: { type: "boolean", default: false, description: "Emit the report as JSON" },
|
|
41
41
|
},
|
|
42
42
|
} as const satisfies CommandSpec
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
|
-
* The rollup is the actionable view: one builder's identical defect across
|
|
46
|
-
* reads as one problem per directory rather than one problem per file.
|
|
45
|
+
* The rollup is the actionable view: one builder's identical defect across several
|
|
46
|
+
* artifacts reads as one problem per directory rather than one problem per file.
|
|
47
47
|
*/
|
|
48
48
|
function rollup(entries: readonly InventoryEntry[]): string[] {
|
|
49
49
|
const by = new Map<string, { total: number; manifested: number; bytes: number }>()
|
|
@@ -76,7 +76,7 @@ export const spec = {
|
|
|
76
76
|
"dry-run": {
|
|
77
77
|
type: "boolean",
|
|
78
78
|
default: false,
|
|
79
|
-
description: "Print the download plan
|
|
79
|
+
description: "Print the download plan without network access or data writes",
|
|
80
80
|
},
|
|
81
81
|
only: {
|
|
82
82
|
type: "string",
|
|
@@ -102,8 +102,8 @@ export const spec = {
|
|
|
102
102
|
multiple: true,
|
|
103
103
|
choices: OBLIGATION_REFUSALS,
|
|
104
104
|
description:
|
|
105
|
-
`Decline a bundle whose recorded expression
|
|
106
|
-
"
|
|
105
|
+
`Decline a bundle whose recorded expression has this class of obligation (${OBLIGATION_REFUSALS.join(", ")}). ` +
|
|
106
|
+
"Repeatable. Default: $MAILWOMAN_REFUSE_OBLIGATIONS",
|
|
107
107
|
},
|
|
108
108
|
},
|
|
109
109
|
} as const satisfies CommandSpec
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
6
|
* `mailwoman eval oracle-k`: oracle-recall@k over segment-level k-best decodes (stage-2
|
|
7
|
-
* instrumentation). Measures the k-best rerank headroom the top-1 checks can't see:
|
|
7
|
+
* instrumentation). Measures the k-best rerank headroom the top-1 checks can't see: the rate at which the
|
|
8
8
|
* gold value appears anywhere in the top-k whole-segmentation hypotheses decoded from the current
|
|
9
9
|
* model's emissions. Informational (always exits 0). The standing floors stay on `eval parity`.
|
|
10
10
|
*/
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
6
|
* `mailwoman gazetteer anchor-lexicon`: build the gazetteer-anchor lexicon (knowledge-ladder rung
|
|
7
|
-
* 3.2). One generated artifact,
|
|
7
|
+
* 3.2). One generated artifact, built only from codex, consumed by both the
|
|
8
8
|
* Python trainer (gazetteer_anchor.py) and the TS inference side, so the two matchers cannot
|
|
9
9
|
* drift (the PLACETYPE_ORDER lesson: dual implementations silently corrupt).
|
|
10
10
|
*
|
|
@@ -134,7 +134,7 @@ const GazetteerAnchorLexicon: CommandComponent<typeof spec> = ({ options }) => {
|
|
|
134
134
|
for (const map of [entries, codeEntries]) {
|
|
135
135
|
for (const [key, bits] of map) {
|
|
136
136
|
if (bits & BIT.country && bits & BIT.region) {
|
|
137
|
-
// oxlint-disable-next-line oxc/bad-bitwise-operator --
|
|
137
|
+
// oxlint-disable-next-line oxc/bad-bitwise-operator -- an intended bit-set union rather than a mistyped logical or
|
|
138
138
|
map.set(key, bits | BIT.homograph)
|
|
139
139
|
}
|
|
140
140
|
}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
6
|
* `mailwoman gazetteer build coastal` — acquire the Environment Agency's `Mapping (England, 2024)` dataset
|
|
7
|
-
* for National Coastal Erosion Risk and build the sealed `coastal-england.db` layer.
|
|
8
|
-
*
|
|
7
|
+
* for National Coastal Erosion Risk and build the sealed `coastal-england.db` layer. This file only wires steps: the catalogue
|
|
8
|
+
* read, download, build and verify steps all live in `@mailwoman/coastal/sdk`, so each stays unit-testable without Ink
|
|
9
9
|
* or the network in the loop. Mirrors `flood.tsx`'s progress (stderr) / summary (stdout) split.
|
|
10
10
|
*
|
|
11
11
|
* `--measure-resolutions` does not build. The index resolution is measured for this layer.
|
|
@@ -120,7 +120,7 @@ const GazetteerBuildPOI: CommandComponent<typeof spec> = ({ options }) => {
|
|
|
120
120
|
// only on the selected build path, so a top-level import breaks the whole published
|
|
121
121
|
// CLI on a clean install — the smoke test's clean-install leg is what catches it.
|
|
122
122
|
// The osm source branch is build-local by design.
|
|
123
|
-
// It may only resolve its SDK when
|
|
123
|
+
// It may only resolve its SDK when a run selects it.
|
|
124
124
|
const { extractOSMPOIs } = await import("@mailwoman/osm/sdk/extract/poi")
|
|
125
125
|
|
|
126
126
|
for await (const row of extractOSMPOIs(pbf)) {
|
|
@@ -49,7 +49,7 @@ const GazetteerBuildVenueHeads: CommandComponent<typeof spec> = ({ options }) =>
|
|
|
49
49
|
await ingestPlaceNames({ release: options.release, onPhase: (_, detail) => log(detail ?? "") })
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
// Manifest
|
|
52
|
+
// Manifest file paths start with the training host's `/data` root.
|
|
53
53
|
// This host keeps them under the data root.
|
|
54
54
|
const dataRoot = dataRootPath().toString()
|
|
55
55
|
|
|
@@ -123,7 +123,7 @@ const GazetteerCensus: CommandComponent<typeof spec> = ({ options }) => {
|
|
|
123
123
|
|
|
124
124
|
await writeLocalFile(bytes, outPath)
|
|
125
125
|
|
|
126
|
-
// Self-verifying readback over the bytes
|
|
126
|
+
// Self-verifying readback over the bytes this run wrote rather than the in-memory nodes.
|
|
127
127
|
const resolver = new PlacetypeCensusResolver(bytes)
|
|
128
128
|
const probeParents = PROBE_PARENTS_BY_COUNTRY[country]
|
|
129
129
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* `mailwoman wof graph <localRepoDir> <placetype>` — emit a node-link graph of the WOF placetype
|
|
7
7
|
* hierarchy rooted at the given placetype.
|
|
8
8
|
*
|
|
9
|
-
* Use this instead of `wof tree` when the root has
|
|
9
|
+
* Use this instead of `wof tree` when the root has shared descendants, because the graph shape
|
|
10
10
|
* stays compact regardless of DAG topology — each node and edge appears exactly once. The output
|
|
11
11
|
* follows the d3-force / react-flow convention (`nodes`, `links` with `source`/`target`) so it drops
|
|
12
12
|
* into common html graph viewers without translation.
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* `mailwoman
|
|
7
|
-
* placetype hierarchy rooted at the given placetype.
|
|
6
|
+
* `mailwoman gazetteer inspect mermaid <localRepoDir> <placetype>` renders a Mermaid flowchart of
|
|
7
|
+
* the WOF placetype hierarchy rooted at the given placetype.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* It reads `<localRepoDir>/whosonfirst/whosonfirst-placetypes`, the clone that
|
|
10
|
+
* `mailwoman gazetteer inspect sync` produces.
|
|
10
11
|
*/
|
|
11
12
|
|
|
12
13
|
import { Spinner } from "@inkjs/ui"
|
|
@@ -102,7 +103,7 @@ const WOFMermaid: CommandComponent<typeof spec, [string, string]> = ({ args, opt
|
|
|
102
103
|
|
|
103
104
|
if (!placetype) {
|
|
104
105
|
throw new CommandError(
|
|
105
|
-
`No placetype named '${placetypeName}' found. Ensure '${localRepoDirectory.toString()}' contains a
|
|
106
|
+
`No placetype named '${placetypeName}' found. Ensure '${localRepoDirectory.toString()}' contains a whosonfirst/whosonfirst-placetypes clone (run \`mailwoman gazetteer inspect sync\` first).`
|
|
106
107
|
)
|
|
107
108
|
}
|
|
108
109
|
|
|
@@ -52,7 +52,7 @@ import {
|
|
|
52
52
|
const CONCURRENCY = 8
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
|
-
* Above this
|
|
55
|
+
* Above this repository count the final list is summarized instead of printed in full.
|
|
56
56
|
*
|
|
57
57
|
* The `▸` lines above it are complete either way.
|
|
58
58
|
* This bounds the closing frame rather than the record.
|
|
@@ -16,10 +16,7 @@ import {
|
|
|
16
16
|
splitCountryCodes,
|
|
17
17
|
useCommandTask,
|
|
18
18
|
} from "#cli-kit"
|
|
19
|
-
|
|
20
|
-
// Overture prunes old releases from its bucket, so a stale pin makes the default ingest fail.
|
|
21
|
-
// Keep this pin in step with `DEFAULT_RELEASE` in `gazetteer-pipeline/poi/defaults.ts`.
|
|
22
|
-
const DEFAULT_RELEASE = "2026-07-22.0"
|
|
19
|
+
import { DEFAULT_RELEASE } from "#gazetteer/poi/defaults"
|
|
23
20
|
|
|
24
21
|
const S3_GLOB = (release: string) =>
|
|
25
22
|
`s3://overturemaps-us-west-2/release/${release}/theme=addresses/type=address/*.parquet`
|
|
@@ -205,8 +205,8 @@ async function buildDatabase(
|
|
|
205
205
|
}
|
|
206
206
|
|
|
207
207
|
using kdb = new DatabaseClient<WOFDatabase>(outPath)
|
|
208
|
-
// Regenerated artifact: drop any prior table so a re-run with a different country set
|
|
209
|
-
//
|
|
208
|
+
// Regenerated artifact: drop any prior table so a re-run with a different country set fully
|
|
209
|
+
// replaces it and synthetic ids restart from the first id without colliding with stale rows.
|
|
210
210
|
await kdb.schema.dropTable("spr").ifExists().execute()
|
|
211
211
|
|
|
212
212
|
// Schema mirrors postalcode-intl.db's `spr` exactly, as a drop-in `--postcodes` input for build-candidate.
|
package/cli/commands/poi.tsx
CHANGED
|
@@ -133,7 +133,7 @@ async function formatOverpassBlock(intent: POIIntent): Promise<string> {
|
|
|
133
133
|
if (intent.subject.kind === "category") {
|
|
134
134
|
const { getPOICategory } = await import("@mailwoman/poi-taxonomy")
|
|
135
135
|
const { categoryIDs } = intent.subject
|
|
136
|
-
// Every member needs a tag rather than
|
|
136
|
+
// Every member needs a tag rather than only one: a union emitted from the subset that
|
|
137
137
|
// happens to include `osmTag` is a narrower query than the one the POI branch ran.
|
|
138
138
|
// The printed result would hide that difference.
|
|
139
139
|
const untagged = categoryIDs.filter((id) => !getPOICategory(id)?.osmTag)
|
|
@@ -290,8 +290,8 @@ interface MultiSourceSpec {
|
|
|
290
290
|
*/
|
|
291
291
|
role?: "eligibility" | "funding"
|
|
292
292
|
/**
|
|
293
|
-
* Read at most this
|
|
294
|
-
* be sampled without pre-filtering.
|
|
293
|
+
* Read at most this number of rows (the head of the file), so a huge source
|
|
294
|
+
* can be sampled without pre-filtering.
|
|
295
295
|
*/
|
|
296
296
|
limit?: number
|
|
297
297
|
}
|
package/cli/commands/serve.tsx
CHANGED
|
@@ -54,8 +54,8 @@ const ClusterManager: ParsedCommandComponent<ServerConfig> = ({ options: { cpus
|
|
|
54
54
|
setWorkers(Array.from({ length: cpus }, () => cluster.fork()))
|
|
55
55
|
|
|
56
56
|
// Tracks whether any worker has ever reached "listening" — distinguishes a
|
|
57
|
-
//
|
|
58
|
-
//
|
|
57
|
+
// boot failure (every worker died before one of them opened the port) from
|
|
58
|
+
// an ordinary shutdown after a healthy run.
|
|
59
59
|
// `cluster.on("listening", …)` mirrors the per-worker wiring in WorkerStatus,
|
|
60
60
|
// but at the primary, where the exit handler below can see it.
|
|
61
61
|
let anyListened = false
|
|
@@ -85,8 +85,8 @@ const ClusterManager: ParsedCommandComponent<ServerConfig> = ({ options: { cpus
|
|
|
85
85
|
|
|
86
86
|
// Graceful shutdown: a term/INT delivered to the primary pid (docker stop, systemctl stop)
|
|
87
87
|
// never reaches worker JS handlers — Node's cluster teardown bypasses them.
|
|
88
|
-
// Forward the signal explicitly so each worker's serveNode drain
|
|
89
|
-
//
|
|
88
|
+
// Forward the signal explicitly so each worker's serveNode drain runs, then exit
|
|
89
|
+
// once they're gone (bounded — a hung worker must not wedge the shutdown).
|
|
90
90
|
const forward = (signal: NodeJS.Signals) => {
|
|
91
91
|
const alive = Object.values(cluster.workers ?? {}).filter(isPresent)
|
|
92
92
|
|
|
@@ -224,7 +224,7 @@ const ChildThread: ParsedCommandComponent<ServerConfig> = ({ options: { port, ho
|
|
|
224
224
|
// The rest exit silently.
|
|
225
225
|
// Chosen over a primary-side pre-fork check
|
|
226
226
|
// (the primary doesn't otherwise call createServeEngine() at all. An import
|
|
227
|
-
// and database-existence check there
|
|
227
|
+
// and database-existence check there only to avoid forking would change more code)
|
|
228
228
|
// and over routing the message back through the primary's cluster "exit" handler
|
|
229
229
|
// (would require an IPC round-trip for what's a one-line dedupe).
|
|
230
230
|
if (cluster.worker?.id === 1) {
|
|
@@ -76,7 +76,7 @@ export const spec = {
|
|
|
76
76
|
*
|
|
77
77
|
* NH + HI have zero Overture address coverage in this release, so they're absent —
|
|
78
78
|
* interpolation-only states.
|
|
79
|
-
* VI (territory)
|
|
79
|
+
* VI (territory) is also included.
|
|
80
80
|
* Harmless if the parser's region→slug map skips it.
|
|
81
81
|
*/
|
|
82
82
|
const STATES_BY_COVERAGE = [
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* SpatiaLite).
|
|
9
9
|
*
|
|
10
10
|
* A valid cached ZIP is reused. Re-running a state replaces its rows. Pass
|
|
11
|
-
* `--county <FIPS3>` to load
|
|
11
|
+
* `--county <FIPS3>` to load one county (handy for downstream per-county work).
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import { Spinner } from "@inkjs/ui"
|
|
@@ -112,7 +112,7 @@ export function mapPaneCellSize(columns: number, rows: number): { columns: numbe
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
/**
|
|
115
|
-
*
|
|
115
|
+
* The number of output lines visible at once, exported so a caller clamping its scroll
|
|
116
116
|
* offset uses the pane's own arithmetic rather than a second copy.
|
|
117
117
|
*/
|
|
118
118
|
export function outputPaneCapacity(rows: number): number {
|
|
@@ -58,7 +58,7 @@ function formatMsFixed(ms: number): string {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
/**
|
|
61
|
-
* Whether the per-span script
|
|
61
|
+
* Whether to print the per-span script: true when the tree holds more than one writing system,
|
|
62
62
|
* with `Zyyy` excluded because a house number or postcode answers it.
|
|
63
63
|
*/
|
|
64
64
|
function scriptsWorthShowing(tree: AddressTree): boolean {
|
|
@@ -12,7 +12,7 @@ import type { GeocodeTrace } from "#geocode/session"
|
|
|
12
12
|
// #region Shared
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
* What a row shows where the datum
|
|
15
|
+
* What a row shows where the datum does not exist, kept as a single constant
|
|
16
16
|
* so every kind of absence reads the same.
|
|
17
17
|
*/
|
|
18
18
|
export const ABSENT = "—"
|
|
@@ -90,8 +90,8 @@ export function tokensRow(trace: GeocodeTrace | null): string {
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
/**
|
|
93
|
-
* Per channel,
|
|
94
|
-
* an unwired source while `0/12` is a wired channel that matched no entry.
|
|
93
|
+
* Per channel, the count of pieces that contributed a nonzero clue and which ones:
|
|
94
|
+
* `not fed` is an unwired source while `0/12` is a wired channel that matched no entry.
|
|
95
95
|
*/
|
|
96
96
|
export function channelsRow(trace: GeocodeTrace | null): string {
|
|
97
97
|
if (!trace) return ABSENT
|
|
@@ -121,7 +121,7 @@ export function channelsRow(trace: GeocodeTrace | null): string {
|
|
|
121
121
|
|
|
122
122
|
/**
|
|
123
123
|
* What the decode did: algorithm, mean per-token confidence, component sequence,
|
|
124
|
-
* priors that
|
|
124
|
+
* priors that contributed a nonzero bias and repair passes that changed a label.
|
|
125
125
|
*/
|
|
126
126
|
export function decodeRow(trace: GeocodeTrace | null): string {
|
|
127
127
|
if (!trace) return ABSENT
|
package/cli/doctor/checks.ts
CHANGED
|
@@ -639,7 +639,7 @@ export interface LayerLicenseObservation {
|
|
|
639
639
|
/**
|
|
640
640
|
* Lists other `.db` files in the layer's directory when the expected file is absent.
|
|
641
641
|
*
|
|
642
|
-
*
|
|
642
|
+
* A listed file can come from a build written under a name the session does not attach.
|
|
643
643
|
*/
|
|
644
644
|
alternates: string[] | null
|
|
645
645
|
}
|
package/cli/doctor/runner.ts
CHANGED
|
@@ -76,7 +76,7 @@ export interface DoctorDeps {
|
|
|
76
76
|
weightsPackageName(locale: string): string
|
|
77
77
|
dataRoot(): { path: string; fromEnv: boolean }
|
|
78
78
|
/**
|
|
79
|
-
* The candidate.db the tools would
|
|
79
|
+
* The candidate.db the tools would open, with no convention-path fallback —
|
|
80
80
|
* the same precedence geocode and serve apply.
|
|
81
81
|
*/
|
|
82
82
|
envCandidatePath(): Promise<string | null>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Results handed to the render prop:
|
|
12
12
|
*
|
|
13
|
-
* - `"neural"` — weights resolve (pre-existing, or
|
|
13
|
+
* - `"neural"` — weights resolve (pre-existing, or downloaded by this guard); render the real command.
|
|
14
14
|
* - `"declined"` — the user said no, the download failed, or `--degraded` was passed. the caller
|
|
15
15
|
* renders its degraded (encoder-less) mode.
|
|
16
16
|
* - `"unavailable"` — weights absent + non-interactive stdin and no flag. the caller keeps its
|
|
@@ -31,7 +31,7 @@ export const spec = {
|
|
|
31
31
|
validate: (value) => Number.isInteger(value) && value >= 1 && value <= 100,
|
|
32
32
|
validationMessage: "--limit must be an integer between 1 and 100.",
|
|
33
33
|
},
|
|
34
|
-
fst: { type: "string", hint: "path", description: "FST binary
|
|
34
|
+
fst: { type: "string", hint: "path", description: "FST binary. The default comes from $MAILWOMAN_FST_BIN." },
|
|
35
35
|
json: {
|
|
36
36
|
type: "boolean",
|
|
37
37
|
default: false,
|
|
@@ -14,7 +14,7 @@ import { booleanValue, type CommandSpec, runNativeCommand } from "#cli/native/sp
|
|
|
14
14
|
export const spec = {
|
|
15
15
|
name: "doctor",
|
|
16
16
|
description:
|
|
17
|
-
"Check whether this machine can run mailwoman, and what each gap costs you. Runtime first (node, ONNX), then the model weights, then the optional data layers geocoding needs. A missing layer is reported, never fatal, and every failing line
|
|
17
|
+
"Check whether this machine can run mailwoman, and what each gap costs you. Runtime first (node, ONNX), then the model weights, then the optional data layers geocoding needs. A missing layer is reported, never fatal, and every failing line prints the one command that closes it. Then the license posture: the branch of mailwoman's license that applies to this installation, and the obligations each attached layer's recorded license imposes (attribution, share-alike, source offer).",
|
|
18
18
|
options: {
|
|
19
19
|
json: {
|
|
20
20
|
type: "boolean",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import { type GeocodeResult, VariantAliasExemptionSchema } from "@mailwoman/core/geocode"
|
|
10
10
|
import { prettyJSON, stringifyJSON } from "@mailwoman/core/json"
|
|
11
11
|
import type { PipelineTiming } from "@mailwoman/core/pipeline"
|
|
12
|
+
import { DEFAULT_VENUE_HEAD_BIAS_SCALE } from "@mailwoman/neural/venue/head-prior"
|
|
12
13
|
|
|
13
14
|
import { resolveEngineStamp } from "#cli/kit/engine-stamp"
|
|
14
15
|
import {
|
|
@@ -54,7 +55,7 @@ export const spec = {
|
|
|
54
55
|
"default-country": {
|
|
55
56
|
type: "string",
|
|
56
57
|
hint: "country",
|
|
57
|
-
description: "ISO-3166 resolver country scope
|
|
58
|
+
description: "ISO-3166 resolver country scope. Pass none to disable it.",
|
|
58
59
|
},
|
|
59
60
|
"country-scope": {
|
|
60
61
|
type: "string",
|
|
@@ -102,10 +103,16 @@ export const spec = {
|
|
|
102
103
|
},
|
|
103
104
|
"venue-head-bias-scale": {
|
|
104
105
|
type: "number",
|
|
105
|
-
default:
|
|
106
|
+
default: DEFAULT_VENUE_HEAD_BIAS_SCALE,
|
|
106
107
|
hint: "multiplier",
|
|
107
108
|
description: "Multiplier on the venue-head table's biases.",
|
|
108
109
|
},
|
|
110
|
+
"street-morphology-prior": {
|
|
111
|
+
type: "boolean",
|
|
112
|
+
default: true,
|
|
113
|
+
description:
|
|
114
|
+
"Bias a trailing street-type affix toward the street labels when its segment opens with a house number; --no-street-morphology-prior disables it.",
|
|
115
|
+
},
|
|
109
116
|
"place-country": {
|
|
110
117
|
type: "boolean",
|
|
111
118
|
default: true,
|
|
@@ -215,6 +222,7 @@ async function optionsOf(values: Record<string, unknown>): Promise<GeocodeOption
|
|
|
215
222
|
gazetteerPrior: booleanValue(values, "gazetteer-prior"),
|
|
216
223
|
venueHeadPrior: booleanValue(values, "venue-head-prior"),
|
|
217
224
|
venueHeadBiasScale: numberValue(values, "venue-head-bias-scale")!,
|
|
225
|
+
streetMorphologyPrior: booleanValue(values, "street-morphology-prior"),
|
|
218
226
|
placeCountry: booleanValue(values, "place-country"),
|
|
219
227
|
postcodeCountryCoherence: booleanValue(values, "postcode-country-coherence"),
|
|
220
228
|
forkEntity: booleanValue(values, "fork-entity"),
|
|
@@ -60,7 +60,7 @@ import { readMailwomanManifest } from "#metadata"
|
|
|
60
60
|
export const spec = {
|
|
61
61
|
name: "license",
|
|
62
62
|
description:
|
|
63
|
-
"Mint, issue, verify, adopt and refresh commercial license keys. `keygen` writes an Ed25519 signing pair under $MAILWOMAN_CONFIG_ROOT/license and prints the public key with its id
|
|
63
|
+
"Mint, issue, verify, adopt and refresh commercial license keys. `keygen` writes an Ed25519 signing pair under $MAILWOMAN_CONFIG_ROOT/license and prints the public key with its id. `issue` signs a key for a licensee. `verify` checks a token offline against the public keys this build trusts. `register` prints the well-known key file the shipped register derives. `adopt <token> --secret <s>` writes a purchased key to $MAILWOMAN_CONFIG_ROOT/license/key and its refresh secret beside it. `refresh` fetches the current key after a renewal. Without a key the AGPL-3.0-only branch applies — `mailwoman doctor` reports which branch applies and why.",
|
|
64
64
|
positionals: [
|
|
65
65
|
{
|
|
66
66
|
name: "action",
|
|
@@ -79,7 +79,7 @@ export const spec = {
|
|
|
79
79
|
type: "string",
|
|
80
80
|
hint: "secret",
|
|
81
81
|
description:
|
|
82
|
-
"adopt: the refresh secret from the purchase page or the first email, stored beside the key
|
|
82
|
+
"adopt: the refresh secret from the purchase page or the first email, stored beside the key. refresh: the secret, when not reading the credentials file.",
|
|
83
83
|
},
|
|
84
84
|
licensee: {
|
|
85
85
|
type: "string",
|
|
@@ -257,9 +257,9 @@ function refusalFor(verification: LicenseKeyVerification): string | null {
|
|
|
257
257
|
/**
|
|
258
258
|
* The `lid` in a token, when the self-service worker issued it.
|
|
259
259
|
*
|
|
260
|
-
* For a token this build cannot verify the payload is read as written:
|
|
261
|
-
* the license's public status
|
|
262
|
-
*
|
|
260
|
+
* For a token this build cannot verify the payload is read as written: the command
|
|
261
|
+
* asks only for the license's public status for such a token, since it identifies
|
|
262
|
+
* whether the action is an upgrade or a purchase.
|
|
263
263
|
*/
|
|
264
264
|
function licenseIDOf(verification: LicenseKeyVerification, token: string): string | null {
|
|
265
265
|
const payload = "payload" in verification ? verification.payload : decodeLicenseKeyPayload(token)
|
|
@@ -36,7 +36,7 @@ export const spec = {
|
|
|
36
36
|
"polygons-db": {
|
|
37
37
|
type: "string",
|
|
38
38
|
hint: "path",
|
|
39
|
-
description: "Optional polygon sidecar
|
|
39
|
+
description: "Optional polygon sidecar. Without it, containment is approximate.",
|
|
40
40
|
},
|
|
41
41
|
format: {
|
|
42
42
|
type: "string",
|
|
@@ -137,7 +137,7 @@ export const RUNG_RADIUS_FLOOR_KM: Readonly<Record<string, number>> = {
|
|
|
137
137
|
export const COINCIDENT_PLACE_KM = 10
|
|
138
138
|
|
|
139
139
|
/**
|
|
140
|
-
*
|
|
140
|
+
* The log10 population margin by which a name's top candidate must lead the runner-up.
|
|
141
141
|
*/
|
|
142
142
|
export const DECISIVE_MARGIN_LOG10 = 0.5
|
|
143
143
|
|
|
@@ -317,7 +317,7 @@ export function dominanceMarginLog10(places: readonly AblationPlace[]): number {
|
|
|
317
317
|
}
|
|
318
318
|
|
|
319
319
|
/**
|
|
320
|
-
* True if top candidate
|
|
320
|
+
* True if the top candidate leads the runner-up by at least the log10 population margin.
|
|
321
321
|
*/
|
|
322
322
|
export function isDecisive(places: readonly AblationPlace[]): boolean {
|
|
323
323
|
return places.length > 0 && dominanceMarginLog10(places) >= DECISIVE_MARGIN_LOG10
|
|
@@ -821,8 +821,8 @@ export function collapseCoincident(places: readonly AblationPlace[]): AblationPl
|
|
|
821
821
|
/**
|
|
822
822
|
* Coarseness rank: higher is more precise.
|
|
823
823
|
*
|
|
824
|
-
* The tier ladder is `address_point → interpolated → street → admin`, and a deletion
|
|
825
|
-
* walks down it has cost the user precision even when the coordinate barely moved.
|
|
824
|
+
* The tier ladder is `address_point → interpolated → street → postcode → admin`, and a deletion
|
|
825
|
+
* that walks down it has cost the user precision even when the coordinate barely moved.
|
|
826
826
|
*/
|
|
827
827
|
export function tierRank(tier: ResolutionTier): number {
|
|
828
828
|
switch (tier) {
|
|
@@ -830,10 +830,12 @@ export function tierRank(tier: ResolutionTier): number {
|
|
|
830
830
|
case "venue":
|
|
831
831
|
case "address_point":
|
|
832
832
|
case "plus_code":
|
|
833
|
-
return
|
|
833
|
+
return 5
|
|
834
834
|
case "interpolated":
|
|
835
|
-
return
|
|
835
|
+
return 4
|
|
836
836
|
case "street":
|
|
837
|
+
return 3
|
|
838
|
+
case "postcode":
|
|
837
839
|
return 2
|
|
838
840
|
case "admin":
|
|
839
841
|
return 1
|
package/lib/admin-coherence.ts
CHANGED
|
@@ -211,7 +211,8 @@ export interface AdminCoherenceTreeNode extends AdminCoherenceSourceNode {
|
|
|
211
211
|
/**
|
|
212
212
|
* Builds the `admin_coherence` field for a forked-entity answer.
|
|
213
213
|
*
|
|
214
|
-
* The entity has a country but no ancestry, so a parsed region
|
|
214
|
+
* The entity has a country but no ancestry, so a parsed region has no ancestor to match
|
|
215
|
+
* and can come back `unverifiable`.
|
|
215
216
|
*/
|
|
216
217
|
export function forkedEntityCoherenceField(
|
|
217
218
|
roots: readonly AdminCoherenceTreeNode[],
|