@mailwoman/corpus 10.3.0 → 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.
Files changed (291) hide show
  1. package/README.md +17 -17
  2. package/data/PROVENANCE.md +273 -273
  3. package/data/address-source-register.json +517 -23
  4. package/data/license-decisions.json +120 -0
  5. package/data/licenses/PROVENANCE.md +5 -5
  6. package/data/licenses/cdla-permissive-2.0.md +6 -6
  7. package/data/licenses/geonames-publication.md +5 -5
  8. package/data/licenses/licence-ouverte-2.0.md +3 -3
  9. package/data/licenses/national-address-database.md +12 -12
  10. package/data/licenses/nlod-2.0.md +3 -3
  11. package/data/licenses/sirene-publication.md +13 -6
  12. package/data/licenses/whosonfirst-licenses.md +4 -4
  13. package/data/source-resolutions.json +11 -0
  14. package/lib/adapters/cordis/adapter.ts +8 -8
  15. package/lib/adapters/gleif/adapter.ts +7 -8
  16. package/lib/adapters/po-box/adapter.ts +1 -1
  17. package/lib/adapters/source-id.ts +1 -1
  18. package/lib/adapters.ts +2 -2
  19. package/lib/au/adapters/gnaf/adapter.ts +1 -1
  20. package/lib/be/adapters/brussels/adapter.ts +2 -2
  21. package/lib/be/adapters/vlaanderen/adapter.ts +1 -1
  22. package/lib/build.ts +1 -1
  23. package/lib/cz/adapters/cuzk/adapter.ts +1 -1
  24. package/lib/cz/tools/fetch/cuzk.ts +4 -4
  25. package/lib/de/recipes/locale.ts +1 -1
  26. package/lib/dk/adapters/inspire/adapter.ts +1 -1
  27. package/lib/ee/tools/fetch/ads.ts +2 -2
  28. package/lib/es/adapters/bizkaia/adapter.ts +1 -1
  29. package/lib/es/adapters/navarra/adapter.ts +2 -2
  30. package/lib/es/cadastre.ts +2 -2
  31. package/lib/es/tools/fetch/bizkaia.ts +7 -7
  32. package/lib/es/tools/fetch/catastro.ts +6 -6
  33. package/lib/es/tools/fetch/navarra.ts +4 -4
  34. package/lib/fingerprints.ts +3 -3
  35. package/lib/fr/adapters/finess/adapter.ts +6 -5
  36. package/lib/fr/adapters/finess/voie-type.ts +1 -1
  37. package/lib/fr/tools/fetch/annuaire-education.ts +3 -3
  38. package/lib/gb/constituent-country.ts +52 -0
  39. package/lib/inspire/address.ts +3 -3
  40. package/lib/international/recipes/locale.ts +41 -7
  41. package/lib/it/adapters/anac/adapter.ts +4 -3
  42. package/lib/jp/adapters/wof-admin/adapter.ts +2 -2
  43. package/lib/kr/adapters/juso/label-rows.ts +1 -1
  44. package/lib/kr/adapters/localdata/key-index.ts +2 -1
  45. package/lib/lu/adapters/bd-adresses/adapter.ts +1 -1
  46. package/lib/nl/adapters/kadaster/adapter.ts +2 -2
  47. package/lib/nl/tools/fetch/kadaster.ts +1 -1
  48. package/lib/parquet/shuffle.ts +2 -2
  49. package/lib/parquet/span-sql.ts +8 -6
  50. package/lib/parquet/streams.ts +1 -1
  51. package/lib/parquet/writers.ts +2 -2
  52. package/lib/pl/tools/fetch/emuia.ts +2 -2
  53. package/lib/recipes/scaffold.ts +2 -2
  54. package/lib/recipes/sources.ts +3 -3
  55. package/lib/recipes/sub/venue/render.ts +1 -1
  56. package/lib/recipes/sub/venue/sources.ts +4 -3
  57. package/lib/recipes/sub/venue.ts +4 -3
  58. package/lib/recipes/venue.ts +11 -11
  59. package/lib/ro/adapters/retea-scolara/adapter.ts +2 -2
  60. package/lib/runner.ts +3 -3
  61. package/lib/sk/tools/fetch/inspire.ts +3 -3
  62. package/lib/source-register/effective-manifest.ts +2 -2
  63. package/lib/source-register/types.ts +2 -2
  64. package/lib/subvenue/harvest.ts +6 -5
  65. package/lib/subvenue/promotions.ts +3 -3
  66. package/lib/subvenue/table.ts +6 -6
  67. package/lib/surfaces/locale.ts +1 -1
  68. package/lib/synthesizers/anchor-absorption.ts +1 -1
  69. package/lib/synthesizers/boundary-stress.ts +3 -2
  70. package/lib/synthesizers/no-street.ts +1 -1
  71. package/lib/synthesizers/po-box.ts +1 -1
  72. package/lib/synthesizers/tail.ts +2 -2
  73. package/lib/test-kit/corpus-recipe.ts +1 -1
  74. package/lib/tools/align-canonical.ts +3 -2
  75. package/lib/tools/audit.ts +1 -1
  76. package/lib/tools/corpus-stats.ts +1 -1
  77. package/lib/tools/fetch/download/network.ts +1 -1
  78. package/lib/tools/fetch/geonames/dump.ts +1 -1
  79. package/lib/tools/fetch/gleif.ts +1 -1
  80. package/lib/tools/fetch/header.ts +1 -1
  81. package/lib/tools/fetch/inspire-addresses.ts +1 -1
  82. package/lib/tools/fetch/vlaanderen-ad.ts +1 -1
  83. package/lib/tools/fetch/wfs-harvest.ts +6 -6
  84. package/lib/tools/fetch/zip-archive.ts +2 -2
  85. package/lib/tools/golden/expand.ts +1 -1
  86. package/lib/tools/golden/promote.ts +3 -3
  87. package/lib/tools/golden/relabel-street/directory.ts +2 -1
  88. package/lib/tools/lint/recipe-output/vocab.ts +2 -2
  89. package/lib/tools/overlay/manifest.ts +62 -10
  90. package/lib/tools/overlay/split-slice.ts +2 -10
  91. package/lib/tools/postcode-triples.ts +2 -2
  92. package/lib/tools/sub/venue/head-nouns.ts +4 -3
  93. package/lib/types.ts +3 -3
  94. package/lib/us/adapters/state/tx-notaries/adapter.ts +1 -1
  95. package/lib/us/adapters/usgov/irs-bmf/adapter.ts +2 -2
  96. package/lib/us/adapters/usgov/nppes/adapter.ts +1 -1
  97. package/lib/us/synthesizers/intersection.ts +4 -4
  98. package/lib/us/synthesizers/street.ts +3 -3
  99. package/lib/us/tools/fetch/nad.ts +2 -2
  100. package/lib/utils/split.ts +59 -6
  101. package/lib/utils/wof-json.ts +1 -1
  102. package/out/adapters/cordis/adapter.d.ts +7 -7
  103. package/out/adapters/cordis/adapter.js +8 -8
  104. package/out/adapters/cordis/adapter.js.map +1 -1
  105. package/out/adapters/gleif/adapter.d.ts +7 -8
  106. package/out/adapters/gleif/adapter.d.ts.map +1 -1
  107. package/out/adapters/gleif/adapter.js +7 -8
  108. package/out/adapters/gleif/adapter.js.map +1 -1
  109. package/out/adapters/po-box/adapter.d.ts +1 -1
  110. package/out/adapters/source-id.d.ts +1 -1
  111. package/out/adapters/source-id.js +1 -1
  112. package/out/adapters.d.ts +2 -2
  113. package/out/adapters.js +2 -2
  114. package/out/au/adapters/gnaf/adapter.js +1 -1
  115. package/out/be/adapters/brussels/adapter.d.ts +1 -1
  116. package/out/be/adapters/brussels/adapter.js +2 -2
  117. package/out/be/adapters/vlaanderen/adapter.d.ts +1 -1
  118. package/out/build.js +1 -1
  119. package/out/build.js.map +1 -1
  120. package/out/cz/adapters/cuzk/adapter.d.ts +1 -1
  121. package/out/cz/adapters/cuzk/adapter.js +1 -1
  122. package/out/cz/tools/fetch/cuzk.d.ts +2 -2
  123. package/out/cz/tools/fetch/cuzk.js +2 -2
  124. package/out/de/recipes/locale.d.ts +1 -1
  125. package/out/de/recipes/locale.js +1 -1
  126. package/out/dk/adapters/inspire/adapter.js +1 -1
  127. package/out/ee/tools/fetch/ads.d.ts +2 -2
  128. package/out/ee/tools/fetch/ads.js +1 -1
  129. package/out/es/adapters/bizkaia/adapter.js +1 -1
  130. package/out/es/adapters/navarra/adapter.d.ts +2 -2
  131. package/out/es/adapters/navarra/adapter.js +2 -2
  132. package/out/es/cadastre.d.ts +2 -2
  133. package/out/es/cadastre.js +2 -2
  134. package/out/es/tools/fetch/bizkaia.d.ts +5 -5
  135. package/out/es/tools/fetch/bizkaia.js +5 -5
  136. package/out/es/tools/fetch/catastro.d.ts +4 -4
  137. package/out/es/tools/fetch/catastro.js +2 -2
  138. package/out/es/tools/fetch/navarra.d.ts +2 -2
  139. package/out/es/tools/fetch/navarra.js +2 -2
  140. package/out/fingerprints.d.ts +3 -3
  141. package/out/fingerprints.js +3 -3
  142. package/out/fr/adapters/finess/adapter.d.ts +6 -5
  143. package/out/fr/adapters/finess/adapter.d.ts.map +1 -1
  144. package/out/fr/adapters/finess/adapter.js +6 -5
  145. package/out/fr/adapters/finess/adapter.js.map +1 -1
  146. package/out/fr/adapters/finess/voie-type.d.ts +1 -1
  147. package/out/fr/adapters/finess/voie-type.js +1 -1
  148. package/out/fr/tools/fetch/annuaire-education.d.ts +3 -3
  149. package/out/fr/tools/fetch/annuaire-education.js +3 -3
  150. package/out/gb/constituent-country.d.ts +36 -0
  151. package/out/gb/constituent-country.d.ts.map +1 -0
  152. package/out/gb/constituent-country.js +30 -0
  153. package/out/gb/constituent-country.js.map +1 -0
  154. package/out/inspire/address.d.ts +3 -3
  155. package/out/inspire/address.js +3 -3
  156. package/out/international/recipes/locale.d.ts +6 -0
  157. package/out/international/recipes/locale.d.ts.map +1 -1
  158. package/out/international/recipes/locale.js +29 -7
  159. package/out/international/recipes/locale.js.map +1 -1
  160. package/out/it/adapters/anac/adapter.d.ts +1 -1
  161. package/out/it/adapters/anac/adapter.d.ts.map +1 -1
  162. package/out/it/adapters/anac/adapter.js +4 -3
  163. package/out/it/adapters/anac/adapter.js.map +1 -1
  164. package/out/jp/adapters/wof-admin/adapter.d.ts +2 -2
  165. package/out/jp/adapters/wof-admin/adapter.js +2 -2
  166. package/out/kr/adapters/juso/label-rows.d.ts +1 -1
  167. package/out/kr/adapters/localdata/key-index.d.ts +2 -1
  168. package/out/kr/adapters/localdata/key-index.d.ts.map +1 -1
  169. package/out/kr/adapters/localdata/key-index.js +2 -1
  170. package/out/kr/adapters/localdata/key-index.js.map +1 -1
  171. package/out/lu/adapters/bd-adresses/adapter.d.ts +1 -1
  172. package/out/lu/adapters/bd-adresses/adapter.js +1 -1
  173. package/out/nl/adapters/kadaster/adapter.js +2 -2
  174. package/out/nl/tools/fetch/kadaster.d.ts +1 -1
  175. package/out/nl/tools/fetch/kadaster.js +1 -1
  176. package/out/parquet/shuffle.d.ts +2 -2
  177. package/out/parquet/shuffle.js +2 -2
  178. package/out/parquet/span-sql.d.ts +8 -6
  179. package/out/parquet/span-sql.d.ts.map +1 -1
  180. package/out/parquet/span-sql.js +8 -6
  181. package/out/parquet/span-sql.js.map +1 -1
  182. package/out/parquet/streams.d.ts +1 -1
  183. package/out/parquet/writers.d.ts +2 -2
  184. package/out/parquet/writers.js +1 -1
  185. package/out/pl/tools/fetch/emuia.d.ts +2 -2
  186. package/out/recipes/scaffold.d.ts +2 -2
  187. package/out/recipes/sources.d.ts +2 -2
  188. package/out/recipes/sources.js +3 -3
  189. package/out/recipes/sources.js.map +1 -1
  190. package/out/recipes/sub/venue/render.d.ts +1 -1
  191. package/out/recipes/sub/venue/render.js +1 -1
  192. package/out/recipes/sub/venue/sources.d.ts +4 -3
  193. package/out/recipes/sub/venue/sources.d.ts.map +1 -1
  194. package/out/recipes/sub/venue/sources.js +4 -3
  195. package/out/recipes/sub/venue/sources.js.map +1 -1
  196. package/out/recipes/sub/venue.d.ts +3 -2
  197. package/out/recipes/sub/venue.d.ts.map +1 -1
  198. package/out/recipes/sub/venue.js +2 -2
  199. package/out/recipes/sub/venue.js.map +1 -1
  200. package/out/recipes/venue.d.ts +7 -6
  201. package/out/recipes/venue.d.ts.map +1 -1
  202. package/out/recipes/venue.js +11 -10
  203. package/out/recipes/venue.js.map +1 -1
  204. package/out/ro/adapters/retea-scolara/adapter.d.ts +2 -2
  205. package/out/ro/adapters/retea-scolara/adapter.js +2 -2
  206. package/out/runner.d.ts +3 -3
  207. package/out/runner.js +2 -2
  208. package/out/sk/tools/fetch/inspire.d.ts +3 -3
  209. package/out/sk/tools/fetch/inspire.js +1 -1
  210. package/out/source-register/effective-manifest.d.ts +2 -2
  211. package/out/source-register/types.d.ts +2 -2
  212. package/out/subvenue/harvest.d.ts +4 -3
  213. package/out/subvenue/harvest.d.ts.map +1 -1
  214. package/out/subvenue/harvest.js +6 -5
  215. package/out/subvenue/harvest.js.map +1 -1
  216. package/out/subvenue/promotions.d.ts +2 -2
  217. package/out/subvenue/promotions.js +3 -3
  218. package/out/subvenue/promotions.js.map +1 -1
  219. package/out/subvenue/table.d.ts +6 -6
  220. package/out/subvenue/table.js +1 -1
  221. package/out/surfaces/locale.d.ts +1 -1
  222. package/out/surfaces/locale.js +1 -1
  223. package/out/synthesizers/boundary-stress.d.ts.map +1 -1
  224. package/out/synthesizers/boundary-stress.js +2 -1
  225. package/out/synthesizers/boundary-stress.js.map +1 -1
  226. package/out/synthesizers/tail.d.ts +2 -2
  227. package/out/synthesizers/tail.js +2 -2
  228. package/out/test-kit/corpus-recipe.d.ts +1 -1
  229. package/out/test-kit/corpus-recipe.js +1 -1
  230. package/out/tools/align-canonical.d.ts.map +1 -1
  231. package/out/tools/align-canonical.js +3 -2
  232. package/out/tools/align-canonical.js.map +1 -1
  233. package/out/tools/audit.js +1 -1
  234. package/out/tools/corpus-stats.d.ts +1 -1
  235. package/out/tools/fetch/download/network.d.ts +1 -1
  236. package/out/tools/fetch/download/network.js +1 -1
  237. package/out/tools/fetch/geonames/dump.d.ts +1 -1
  238. package/out/tools/fetch/geonames/dump.js +1 -1
  239. package/out/tools/fetch/gleif.d.ts +1 -1
  240. package/out/tools/fetch/gleif.js +1 -1
  241. package/out/tools/fetch/header.d.ts +1 -1
  242. package/out/tools/fetch/header.js +1 -1
  243. package/out/tools/fetch/inspire-addresses.d.ts +1 -1
  244. package/out/tools/fetch/vlaanderen-ad.d.ts +1 -1
  245. package/out/tools/fetch/wfs-harvest.d.ts +3 -3
  246. package/out/tools/fetch/wfs-harvest.js +4 -4
  247. package/out/tools/fetch/wfs-harvest.js.map +1 -1
  248. package/out/tools/fetch/zip-archive.d.ts +2 -2
  249. package/out/tools/fetch/zip-archive.js +2 -2
  250. package/out/tools/golden/expand.js +1 -1
  251. package/out/tools/golden/expand.js.map +1 -1
  252. package/out/tools/golden/promote.d.ts +1 -1
  253. package/out/tools/golden/promote.js +3 -3
  254. package/out/tools/golden/promote.js.map +1 -1
  255. package/out/tools/golden/relabel-street/directory.d.ts +2 -1
  256. package/out/tools/golden/relabel-street/directory.d.ts.map +1 -1
  257. package/out/tools/golden/relabel-street/directory.js.map +1 -1
  258. package/out/tools/lint/recipe-output/vocab.js +2 -2
  259. package/out/tools/overlay/manifest.d.ts +15 -2
  260. package/out/tools/overlay/manifest.d.ts.map +1 -1
  261. package/out/tools/overlay/manifest.js +41 -10
  262. package/out/tools/overlay/manifest.js.map +1 -1
  263. package/out/tools/overlay/split-slice.d.ts.map +1 -1
  264. package/out/tools/overlay/split-slice.js +2 -9
  265. package/out/tools/overlay/split-slice.js.map +1 -1
  266. package/out/tools/postcode-triples.d.ts +1 -1
  267. package/out/tools/postcode-triples.js +2 -2
  268. package/out/tools/postcode-triples.js.map +1 -1
  269. package/out/tools/sub/venue/head-nouns.d.ts +1 -1
  270. package/out/tools/sub/venue/head-nouns.d.ts.map +1 -1
  271. package/out/tools/sub/venue/head-nouns.js +4 -3
  272. package/out/tools/sub/venue/head-nouns.js.map +1 -1
  273. package/out/types.d.ts +3 -3
  274. package/out/types.js +1 -1
  275. package/out/us/adapters/state/tx-notaries/adapter.d.ts +1 -1
  276. package/out/us/adapters/state/tx-notaries/adapter.js +1 -1
  277. package/out/us/adapters/usgov/irs-bmf/adapter.d.ts +1 -1
  278. package/out/us/adapters/usgov/irs-bmf/adapter.js +2 -2
  279. package/out/us/synthesizers/intersection.js +4 -4
  280. package/out/us/synthesizers/intersection.js.map +1 -1
  281. package/out/us/synthesizers/street.js +3 -3
  282. package/out/us/synthesizers/street.js.map +1 -1
  283. package/out/us/tools/fetch/nad.d.ts +2 -2
  284. package/out/us/tools/fetch/nad.js +2 -2
  285. package/out/utils/split.d.ts +21 -0
  286. package/out/utils/split.d.ts.map +1 -1
  287. package/out/utils/split.js +49 -5
  288. package/out/utils/split.js.map +1 -1
  289. package/out/utils/wof-json.d.ts +1 -1
  290. package/out/utils/wof-json.js +1 -1
  291. package/package.json +14 -14
package/README.md CHANGED
@@ -14,7 +14,7 @@ import type { CanonicalRow, LabeledRow } from "@mailwoman/corpus/types"
14
14
  import { alignRow } from "@mailwoman/corpus/utils"
15
15
  ```
16
16
 
17
- `alignRow` lives on `./utils` rather than the barrel; the barrel re-exports `#adapters`,
17
+ `alignRow` lives on `./utils` rather than the barrel. The barrel re-exports `#adapters`,
18
18
  `#build`, `#runner`, `#recipes/index` and `#types` only.
19
19
 
20
20
  ## What it produces
@@ -38,7 +38,7 @@ training pipeline (`corpus-python/`).
38
38
  | Module | Purpose |
39
39
  | --------------------------- | ---------------------------------------------------------------------- |
40
40
  | **`types.ts`** | `CanonicalRow`, `LabeledRow`, `SourceProvenance`, `CorpusAdapter` |
41
- | **`utils/align.ts`** | Tokenize raw address → BIO label sequence; quarantine what refuses |
41
+ | **`utils/align.ts`** | Tokenize raw address → BIO label sequence, and quarantine what refuses |
42
42
  | **`build.ts`** | Drive the end-to-end build, write `labeled.jsonl` + `quarantine.jsonl` |
43
43
  | **`runner.ts`** | Run one adapter or all of them, and emit the run manifest |
44
44
  | **`synthesizers/*.ts`** | Synthetic row generators (boundary stress, order variants, etc.) |
@@ -89,15 +89,15 @@ mailwoman corpus fetch geonames-postal
89
89
  require thirteen before a source enters the training set. Read what follows before writing an
90
90
  adapter ([#2323](https://github.com/sister-software/mailwoman/issues/2323)).
91
91
 
92
- **Address role.** `CanonicalRow.addressRole` says what an address is the address of, from the
92
+ **Address role.** `CanonicalRow.addressRole` records what an address is the address of, from the
93
93
  `AddressRole` vocabulary in `lib/types.ts`. Every adapter declares one and `runner.ts` stamps it on
94
- each row the adapter leaves unset; an adapter over a source with more than one address column sets
94
+ each row the adapter leaves unset. An adapter over a source with more than one address column sets
95
95
  the field per row instead. Taiwan's company register is that case — the registered company address
96
96
  (公司地址) and the business address the economic ministry records for companies (營業地址) sit in
97
97
  separate columns of one row, and reading the file without the role field teaches the premise parser
98
98
  registered-office grammar.
99
99
 
100
- The field is required on `CorpusAdapter` and carries no default, because the answer is a property of
100
+ The field is required on `CorpusAdapter` and has no default, because the answer is a property of
101
101
  the source that only the adapter's author has read. Ten of the 23 adapters here emit a non-premise
102
102
  role: four facility (`state-hi-schools`, `usgov-hrsa-fqhc`, `usgov-imls-pls`,
103
103
  `usgov-samhsa-treatment-locator`), three mailing (`invented-po-box`, `state-tx-notaries`,
@@ -108,8 +108,8 @@ role: four facility (`state-hi-schools`, `usgov-hrsa-fqhc`, `usgov-imls-pls`,
108
108
  [`@mailwoman/evidence`](../evidence/lib/status.ts) records what a publisher asserts, per field, in
109
109
  six values: `identity`, `address`, `geometry`, `observation`, `grammar`, `routing`. A company
110
110
  register is an authority on the identifier it issues while the registered-office string on the same
111
- row is an `observation` somebody filed. One verdict for the whole source cannot say both, which is
112
- why `lib/tools/fetch/index.ts` names the assertion and the role per entry rather than grading each
111
+ row is an `observation` somebody filed. One verdict for the whole source cannot state both. For that
112
+ reason `lib/tools/fetch/index.ts` names the assertion and the role per entry rather than grading each
113
113
  source once. The Korean permit registry (지방행정인허가데이터) is the worked example: it grants
114
114
  permit identity, and its address string is what a clerk typed in two address systems with no
115
115
  validation.
@@ -117,9 +117,9 @@ validation.
117
117
  **A label the build reads for obligations.** `license` holds a string, and `utils/license.ts` reads it
118
118
  through `readLicenseRecord` in `@mailwoman/core/license/record`, which resolves it to an SPDX expression
119
119
  and looks up that expression's recorded obligations. `--license-policy share-alike-free` refuses a row
120
- whose expression carries share-alike, and separately a row whose text cites a share-alike license while
121
- stating no grant of its own. Until 2026-09-27 the decision was an anchored prefix match over the column,
122
- which admitted the second class.
120
+ whose expression includes share-alike, and separately a row whose text cites a share-alike license while
121
+ stating no grant of its own. Until 2026-09-27 the decision was an anchored prefix match over the column.
122
+ That match admitted the second class.
123
123
 
124
124
  Which terms the build elects for a dual-licensed source still sits in a docstring rather than in the data.
125
125
  BAN is `Licence Ouverte` or ODbL, and the `ban` adapter stamps the former. Still open.
@@ -137,12 +137,12 @@ terms. It is a backlog made checkable: **twenty-nine rows of 426 are ingest-elig
137
137
  `ingestEligibilityProblems()` answers for the other 397 with the reasons rather than a bare `false`.
138
138
 
139
139
  Two tables. The jurisdiction table enumerates all 250 — every ISO 3166-1 alpha-2 code plus the
140
- operational `XK` — whether or not anybody found a source; the source table holds 426 rows across 240
141
- of them. A jurisdiction with no sources states `researchState` and a `stateReason`, so "nobody has
142
- looked yet" is written down rather than inferred from an empty list.
140
+ operational `XK` — whether or not anybody found a source. The source table holds 426 rows across 240
141
+ of them. A jurisdiction with no sources states `researchState` and a `stateReason`, so "not yet
142
+ researched" is written down rather than inferred from an empty list.
143
143
 
144
144
  `readAddressSourceRegister()` refuses a register that fails its audit. Regenerate it with
145
- `mailwoman corpus source-register`; `data/PROVENANCE.md` carries the command, the input row counts,
145
+ `mailwoman corpus source-register`. `data/PROVENANCE.md` records the command, the input row counts,
146
146
  and the three fields no row resolved.
147
147
 
148
148
  ### When a jurisdiction has no row yet
@@ -154,7 +154,7 @@ jurisdiction the register calls `unexamined`, and promote what you resolve into
154
154
 
155
155
  | Sector | Lookup |
156
156
  | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
157
- | business/legal | GLEIF Global LEI Index, the jurisdiction's own slice |
157
+ | business/legal | GLEIF Global LEI Index, filtered to the jurisdiction's own records |
158
158
  | business register | GLEIF Registration Authorities List, for the local official register |
159
159
  | health | the national Health Facility Master List, discovered or validated through the WHO's geolocated health-facility data |
160
160
  | education | the national school register or EMIS, with Giga Maps' government-sourced records as a discovery layer |
@@ -163,10 +163,10 @@ jurisdiction the register calls `unexamined`, and promote what you resolve into
163
163
  | procurement/grants | the national e-procurement, supplier or award register, and the Open Contracting Partnership's data registry where the country publishes to it |
164
164
  | environment/industry | the national pollutant-release register or industrial permit register, located through PRTR.net or the OECD |
165
165
 
166
- A global aggregator is a locator, never the source. When one carries a national official record,
166
+ A global aggregator is a locator, never the source. When one republishes a national official record,
167
167
  keep the national publisher's provenance — the register has `publisher` and `sourceURL` fields for
168
168
  exactly that, and the one `verified-corpus-stale` row is what happens when an aggregator's copy
169
- stops and nobody checked the national portal behind it.
169
+ stops updating and no researcher checked the national portal behind it.
170
170
 
171
171
  ## Related
172
172