@mailwoman/corpus 8.6.0 → 9.1.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 (497) hide show
  1. package/README.md +2 -2
  2. package/data/PROVENANCE.md +214 -0
  3. package/data/sub-venue-lexicon.json +18269 -0
  4. package/out/src/adapters/ban/adapter.d.ts +5 -4
  5. package/out/src/adapters/ban/adapter.d.ts.map +1 -1
  6. package/out/src/adapters/ban/adapter.js +62 -69
  7. package/out/src/adapters/ban/adapter.js.map +1 -1
  8. package/out/src/adapters/ban/street-decompose.d.ts.map +1 -1
  9. package/out/src/adapters/ban/street-decompose.js +18 -25
  10. package/out/src/adapters/ban/street-decompose.js.map +1 -1
  11. package/out/src/adapters/fcc-bdc/adapter.d.ts +1 -7
  12. package/out/src/adapters/fcc-bdc/adapter.d.ts.map +1 -1
  13. package/out/src/adapters/fcc-bdc/adapter.js +4 -26
  14. package/out/src/adapters/fcc-bdc/adapter.js.map +1 -1
  15. package/out/src/adapters/geonames/adapter.d.ts +1 -1
  16. package/out/src/adapters/geonames/adapter.d.ts.map +1 -1
  17. package/out/src/adapters/geonames/adapter.js +72 -78
  18. package/out/src/adapters/geonames/adapter.js.map +1 -1
  19. package/out/src/adapters/geonames-postal/adapter.d.ts +1 -1
  20. package/out/src/adapters/geonames-postal/adapter.d.ts.map +1 -1
  21. package/out/src/adapters/geonames-postal/adapter.js +46 -51
  22. package/out/src/adapters/geonames-postal/adapter.js.map +1 -1
  23. package/out/src/adapters/gnaf/adapter.d.ts +1 -1
  24. package/out/src/adapters/gnaf/adapter.d.ts.map +1 -1
  25. package/out/src/adapters/gnaf/adapter.js +6 -9
  26. package/out/src/adapters/gnaf/adapter.js.map +1 -1
  27. package/out/src/adapters/gnaf/assemble.d.ts.map +1 -1
  28. package/out/src/adapters/gnaf/assemble.js +7 -12
  29. package/out/src/adapters/gnaf/assemble.js.map +1 -1
  30. package/out/src/adapters/index.d.ts +1 -1
  31. package/out/src/adapters/index.d.ts.map +1 -1
  32. package/out/src/adapters/index.js +1 -1
  33. package/out/src/adapters/index.js.map +1 -1
  34. package/out/src/adapters/openaddresses/adapter.d.ts +1 -1
  35. package/out/src/adapters/openaddresses/adapter.d.ts.map +1 -1
  36. package/out/src/adapters/openaddresses/adapter.js +5 -10
  37. package/out/src/adapters/openaddresses/adapter.js.map +1 -1
  38. package/out/src/adapters/overture/adapter.d.ts +1 -1
  39. package/out/src/adapters/overture/adapter.d.ts.map +1 -1
  40. package/out/src/adapters/overture/adapter.js +5 -9
  41. package/out/src/adapters/overture/adapter.js.map +1 -1
  42. package/out/src/adapters/state-hi-schools/adapter.d.ts +1 -1
  43. package/out/src/adapters/state-hi-schools/adapter.d.ts.map +1 -1
  44. package/out/src/adapters/state-hi-schools/adapter.js +57 -75
  45. package/out/src/adapters/state-hi-schools/adapter.js.map +1 -1
  46. package/out/src/adapters/state-ia-contractors/adapter.d.ts +1 -1
  47. package/out/src/adapters/state-ia-contractors/adapter.d.ts.map +1 -1
  48. package/out/src/adapters/state-ia-contractors/adapter.js +60 -78
  49. package/out/src/adapters/state-ia-contractors/adapter.js.map +1 -1
  50. package/out/src/adapters/state-ny-notaries/adapter.d.ts +1 -1
  51. package/out/src/adapters/state-ny-notaries/adapter.d.ts.map +1 -1
  52. package/out/src/adapters/state-ny-notaries/adapter.js +69 -87
  53. package/out/src/adapters/state-ny-notaries/adapter.js.map +1 -1
  54. package/out/src/adapters/state-tx-notaries/adapter.d.ts +1 -1
  55. package/out/src/adapters/state-tx-notaries/adapter.d.ts.map +1 -1
  56. package/out/src/adapters/state-tx-notaries/adapter.js +71 -89
  57. package/out/src/adapters/state-tx-notaries/adapter.js.map +1 -1
  58. package/out/src/adapters/synth-po-box/adapter.d.ts +3 -3
  59. package/out/src/adapters/synth-po-box/adapter.d.ts.map +1 -1
  60. package/out/src/adapters/synth-po-box/adapter.js +10 -18
  61. package/out/src/adapters/synth-po-box/adapter.js.map +1 -1
  62. package/out/src/adapters/tiger/adapter.d.ts +1 -1
  63. package/out/src/adapters/tiger/adapter.d.ts.map +1 -1
  64. package/out/src/adapters/tiger/adapter.js +2 -2
  65. package/out/src/adapters/tiger/adapter.js.map +1 -1
  66. package/out/src/adapters/tiger/street-decompose.d.ts.map +1 -1
  67. package/out/src/adapters/tiger/street-decompose.js +18 -27
  68. package/out/src/adapters/tiger/street-decompose.js.map +1 -1
  69. package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts +4 -4
  70. package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts.map +1 -1
  71. package/out/src/adapters/usgov-hrsa-fqhc/adapter.js +64 -82
  72. package/out/src/adapters/usgov-hrsa-fqhc/adapter.js.map +1 -1
  73. package/out/src/adapters/usgov-imls-pls/adapter.d.ts +1 -1
  74. package/out/src/adapters/usgov-imls-pls/adapter.d.ts.map +1 -1
  75. package/out/src/adapters/usgov-imls-pls/adapter.js +62 -84
  76. package/out/src/adapters/usgov-imls-pls/adapter.js.map +1 -1
  77. package/out/src/adapters/usgov-irs-bmf/adapter.d.ts +1 -1
  78. package/out/src/adapters/usgov-irs-bmf/adapter.d.ts.map +1 -1
  79. package/out/src/adapters/usgov-irs-bmf/adapter.js +59 -66
  80. package/out/src/adapters/usgov-irs-bmf/adapter.js.map +1 -1
  81. package/out/src/adapters/usgov-nad/adapter.d.ts +1 -1
  82. package/out/src/adapters/usgov-nad/adapter.d.ts.map +1 -1
  83. package/out/src/adapters/usgov-nad/adapter.js +6 -9
  84. package/out/src/adapters/usgov-nad/adapter.js.map +1 -1
  85. package/out/src/adapters/usgov-nppes/adapter.d.ts +1 -1
  86. package/out/src/adapters/usgov-nppes/adapter.d.ts.map +1 -1
  87. package/out/src/adapters/usgov-nppes/adapter.js +60 -78
  88. package/out/src/adapters/usgov-nppes/adapter.js.map +1 -1
  89. package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.d.ts +1 -1
  90. package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.d.ts.map +1 -1
  91. package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js +53 -73
  92. package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js.map +1 -1
  93. package/out/src/{adapter.d.ts → adapters/utils/index.d.ts} +43 -2
  94. package/out/src/adapters/utils/index.d.ts.map +1 -0
  95. package/out/src/{adapter.js → adapters/utils/index.js} +47 -2
  96. package/out/src/adapters/utils/index.js.map +1 -0
  97. package/out/src/adapters/wof-admin-jp/adapter.d.ts +1 -1
  98. package/out/src/adapters/wof-admin-jp/adapter.d.ts.map +1 -1
  99. package/out/src/adapters/wof-admin-jp/adapter.js +24 -6
  100. package/out/src/adapters/wof-admin-jp/adapter.js.map +1 -1
  101. package/out/src/adapters/wof-admin-json/adapter.d.ts +2 -2
  102. package/out/src/adapters/wof-admin-json/adapter.d.ts.map +1 -1
  103. package/out/src/adapters/wof-admin-json/adapter.js +2 -2
  104. package/out/src/adapters/wof-admin-json/adapter.js.map +1 -1
  105. package/out/src/adapters/wof-postalcode-json/adapter.d.ts +2 -2
  106. package/out/src/adapters/wof-postalcode-json/adapter.d.ts.map +1 -1
  107. package/out/src/adapters/wof-postalcode-json/adapter.js +2 -2
  108. package/out/src/adapters/wof-postalcode-json/adapter.js.map +1 -1
  109. package/out/src/build.d.ts +3 -4
  110. package/out/src/build.d.ts.map +1 -1
  111. package/out/src/build.js +6 -8
  112. package/out/src/build.js.map +1 -1
  113. package/out/src/index.d.ts +3 -17
  114. package/out/src/index.d.ts.map +1 -1
  115. package/out/src/index.js +3 -17
  116. package/out/src/index.js.map +1 -1
  117. package/out/src/name-prone-us-suffixes.d.ts +12 -0
  118. package/out/src/name-prone-us-suffixes.d.ts.map +1 -0
  119. package/out/src/name-prone-us-suffixes.js +12 -0
  120. package/out/src/name-prone-us-suffixes.js.map +1 -0
  121. package/out/src/parquet-wrapper/reader.d.ts +8 -0
  122. package/out/src/parquet-wrapper/reader.d.ts.map +1 -1
  123. package/out/src/parquet-wrapper/reader.js +16 -0
  124. package/out/src/parquet-wrapper/reader.js.map +1 -1
  125. package/out/src/parquet-wrapper/schema.d.ts +4 -0
  126. package/out/src/parquet-wrapper/schema.d.ts.map +1 -1
  127. package/out/src/parquet-wrapper/schema.js.map +1 -1
  128. package/out/src/runner.d.ts +2 -2
  129. package/out/src/runner.d.ts.map +1 -1
  130. package/out/src/runner.js +1 -1
  131. package/out/src/runner.js.map +1 -1
  132. package/out/src/shard-recipes/anchor-absorption.d.ts.map +1 -1
  133. package/out/src/shard-recipes/anchor-absorption.js +5 -4
  134. package/out/src/shard-recipes/anchor-absorption.js.map +1 -1
  135. package/out/src/shard-recipes/boundary-stress.d.ts.map +1 -1
  136. package/out/src/shard-recipes/boundary-stress.js +2 -2
  137. package/out/src/shard-recipes/boundary-stress.js.map +1 -1
  138. package/out/src/shard-recipes/country-balanced.d.ts.map +1 -1
  139. package/out/src/shard-recipes/country-balanced.js +75 -75
  140. package/out/src/shard-recipes/country-balanced.js.map +1 -1
  141. package/out/src/shard-recipes/fr-admin-split.js +2 -2
  142. package/out/src/shard-recipes/fr-admin-split.js.map +1 -1
  143. package/out/src/shard-recipes/fr-fragment.d.ts.map +1 -1
  144. package/out/src/shard-recipes/fr-fragment.js +8 -5
  145. package/out/src/shard-recipes/fr-fragment.js.map +1 -1
  146. package/out/src/shard-recipes/fr-lieudit.js +2 -2
  147. package/out/src/shard-recipes/fr-lieudit.js.map +1 -1
  148. package/out/src/shard-recipes/fr-order.d.ts.map +1 -1
  149. package/out/src/shard-recipes/fr-order.js +18 -72
  150. package/out/src/shard-recipes/fr-order.js.map +1 -1
  151. package/out/src/shard-recipes/german.d.ts.map +1 -1
  152. package/out/src/shard-recipes/german.js +17 -70
  153. package/out/src/shard-recipes/german.js.map +1 -1
  154. package/out/src/shard-recipes/house-venue.d.ts.map +1 -1
  155. package/out/src/shard-recipes/house-venue.js +1 -1
  156. package/out/src/shard-recipes/house-venue.js.map +1 -1
  157. package/out/src/shard-recipes/index.d.ts.map +1 -1
  158. package/out/src/shard-recipes/index.js +4 -1
  159. package/out/src/shard-recipes/index.js.map +1 -1
  160. package/out/src/shard-recipes/intersection.d.ts +2 -2
  161. package/out/src/shard-recipes/intersection.d.ts.map +1 -1
  162. package/out/src/shard-recipes/intersection.js +28 -72
  163. package/out/src/shard-recipes/intersection.js.map +1 -1
  164. package/out/src/shard-recipes/locale.d.ts +5 -5
  165. package/out/src/shard-recipes/locale.d.ts.map +1 -1
  166. package/out/src/shard-recipes/locale.js +25 -35
  167. package/out/src/shard-recipes/locale.js.map +1 -1
  168. package/out/src/shard-recipes/no-fragment.d.ts.map +1 -1
  169. package/out/src/shard-recipes/no-fragment.js +8 -5
  170. package/out/src/shard-recipes/no-fragment.js.map +1 -1
  171. package/out/src/shard-recipes/no-street-led.d.ts.map +1 -1
  172. package/out/src/shard-recipes/no-street-led.js +8 -5
  173. package/out/src/shard-recipes/no-street-led.js.map +1 -1
  174. package/out/src/shard-recipes/no-street.d.ts.map +1 -1
  175. package/out/src/shard-recipes/no-street.js +1 -1
  176. package/out/src/shard-recipes/no-street.js.map +1 -1
  177. package/out/src/shard-recipes/po-box-cedex.d.ts +3 -3
  178. package/out/src/shard-recipes/po-box-cedex.d.ts.map +1 -1
  179. package/out/src/shard-recipes/po-box-cedex.js +101 -127
  180. package/out/src/shard-recipes/po-box-cedex.js.map +1 -1
  181. package/out/src/shard-recipes/po-box.d.ts.map +1 -1
  182. package/out/src/shard-recipes/po-box.js +1 -1
  183. package/out/src/shard-recipes/po-box.js.map +1 -1
  184. package/out/src/shard-recipes/scaffold.d.ts +58 -9
  185. package/out/src/shard-recipes/scaffold.d.ts.map +1 -1
  186. package/out/src/shard-recipes/scaffold.js +87 -29
  187. package/out/src/shard-recipes/scaffold.js.map +1 -1
  188. package/out/src/shard-recipes/street-affix.d.ts +54 -0
  189. package/out/src/shard-recipes/street-affix.d.ts.map +1 -1
  190. package/out/src/shard-recipes/street-affix.js +253 -111
  191. package/out/src/shard-recipes/street-affix.js.map +1 -1
  192. package/out/src/shard-recipes/street-bare.d.ts.map +1 -1
  193. package/out/src/shard-recipes/street-bare.js +3 -3
  194. package/out/src/shard-recipes/street-bare.js.map +1 -1
  195. package/out/src/shard-recipes/street.d.ts.map +1 -1
  196. package/out/src/shard-recipes/street.js +2 -2
  197. package/out/src/shard-recipes/street.js.map +1 -1
  198. package/out/src/shard-recipes/sub-venue-sources.d.ts +228 -0
  199. package/out/src/shard-recipes/sub-venue-sources.d.ts.map +1 -0
  200. package/out/src/shard-recipes/sub-venue-sources.js +664 -0
  201. package/out/src/shard-recipes/sub-venue-sources.js.map +1 -0
  202. package/out/src/shard-recipes/sub-venue.d.ts +269 -0
  203. package/out/src/shard-recipes/sub-venue.d.ts.map +1 -0
  204. package/out/src/shard-recipes/sub-venue.js +709 -0
  205. package/out/src/shard-recipes/sub-venue.js.map +1 -0
  206. package/out/src/shard-recipes/unit.d.ts +1 -1
  207. package/out/src/shard-recipes/unit.d.ts.map +1 -1
  208. package/out/src/shard-recipes/unit.js +26 -74
  209. package/out/src/shard-recipes/unit.js.map +1 -1
  210. package/out/src/{synthesize-anchor-absorption.d.ts → synthesizers/anchor-absorption.d.ts} +1 -1
  211. package/out/src/synthesizers/anchor-absorption.d.ts.map +1 -0
  212. package/out/src/{synthesize-anchor-absorption.js → synthesizers/anchor-absorption.js} +1 -1
  213. package/out/src/synthesizers/anchor-absorption.js.map +1 -0
  214. package/out/src/{synthesize-boundary-stress.d.ts → synthesizers/boundary-stress.d.ts} +3 -3
  215. package/out/src/synthesizers/boundary-stress.d.ts.map +1 -0
  216. package/out/src/{synthesize-boundary-stress.js → synthesizers/boundary-stress.js} +2 -2
  217. package/out/src/synthesizers/boundary-stress.js.map +1 -0
  218. package/out/src/{synthesize-german.d.ts → synthesizers/german.d.ts} +2 -2
  219. package/out/src/synthesizers/german.d.ts.map +1 -0
  220. package/out/src/{synthesize-german.js → synthesizers/german.js} +2 -2
  221. package/out/src/synthesizers/german.js.map +1 -0
  222. package/out/src/{synthesize-house-venue.d.ts → synthesizers/house-venue.d.ts} +4 -4
  223. package/out/src/synthesizers/house-venue.d.ts.map +1 -0
  224. package/out/src/{synthesize-house-venue.js → synthesizers/house-venue.js} +4 -4
  225. package/out/src/synthesizers/house-venue.js.map +1 -0
  226. package/out/src/{synthesize-intersection.d.ts → synthesizers/intersection.d.ts} +2 -2
  227. package/out/src/synthesizers/intersection.d.ts.map +1 -0
  228. package/out/src/{synthesize-intersection.js → synthesizers/intersection.js} +1 -1
  229. package/out/src/synthesizers/intersection.js.map +1 -0
  230. package/out/src/{synthesize-no-street.d.ts → synthesizers/no-street.d.ts} +3 -3
  231. package/out/src/synthesizers/no-street.d.ts.map +1 -0
  232. package/out/src/{synthesize-no-street.js → synthesizers/no-street.js} +2 -2
  233. package/out/src/synthesizers/no-street.js.map +1 -0
  234. package/out/src/{synthesize-po-box.d.ts → synthesizers/po-box.d.ts} +2 -2
  235. package/out/src/synthesizers/po-box.d.ts.map +1 -0
  236. package/out/src/{synthesize-po-box.js → synthesizers/po-box.js} +1 -1
  237. package/out/src/synthesizers/po-box.js.map +1 -0
  238. package/out/src/{synthesize-street.d.ts → synthesizers/street.d.ts} +2 -2
  239. package/out/src/synthesizers/street.d.ts.map +1 -0
  240. package/out/src/{synthesize-street.js → synthesizers/street.js} +2 -2
  241. package/out/src/synthesizers/street.js.map +1 -0
  242. package/out/src/{synthesize.d.ts → synthesizers/utils.d.ts} +3 -3
  243. package/out/src/synthesizers/utils.d.ts.map +1 -0
  244. package/out/src/{synthesize.js → synthesizers/utils.js} +4 -15
  245. package/out/src/synthesizers/utils.js.map +1 -0
  246. package/out/src/tools/align-shard.d.ts.map +1 -1
  247. package/out/src/tools/align-shard.js +4 -8
  248. package/out/src/tools/align-shard.js.map +1 -1
  249. package/out/src/tools/audit.d.ts.map +1 -1
  250. package/out/src/tools/audit.js +4 -4
  251. package/out/src/tools/audit.js.map +1 -1
  252. package/out/src/tools/corpus-stats.d.ts +2 -2
  253. package/out/src/tools/corpus-stats.d.ts.map +1 -1
  254. package/out/src/tools/corpus-stats.js +18 -31
  255. package/out/src/tools/corpus-stats.js.map +1 -1
  256. package/out/src/tools/fetch/download.d.ts.map +1 -1
  257. package/out/src/tools/fetch/download.js +5 -6
  258. package/out/src/tools/fetch/download.js.map +1 -1
  259. package/out/src/tools/fetch/imls-pls.d.ts.map +1 -1
  260. package/out/src/tools/fetch/imls-pls.js +3 -15
  261. package/out/src/tools/fetch/imls-pls.js.map +1 -1
  262. package/out/src/tools/fetch/index.d.ts +14 -1
  263. package/out/src/tools/fetch/index.d.ts.map +1 -1
  264. package/out/src/tools/fetch/index.js +14 -1
  265. package/out/src/tools/fetch/index.js.map +1 -1
  266. package/out/src/tools/fetch/nad.d.ts +1 -1
  267. package/out/src/tools/fetch/nad.js +1 -1
  268. package/out/src/tools/fetch/nppes.d.ts.map +1 -1
  269. package/out/src/tools/fetch/nppes.js +8 -14
  270. package/out/src/tools/fetch/nppes.js.map +1 -1
  271. package/out/src/tools/fetch/openaddresses.d.ts +1 -1
  272. package/out/src/tools/fetch/openaddresses.js +1 -1
  273. package/out/src/tools/fetch/ourairports.d.ts +45 -0
  274. package/out/src/tools/fetch/ourairports.d.ts.map +1 -0
  275. package/out/src/tools/fetch/ourairports.js +123 -0
  276. package/out/src/tools/fetch/ourairports.js.map +1 -0
  277. package/out/src/tools/fetch/wikidata-subvenue.d.ts +171 -0
  278. package/out/src/tools/fetch/wikidata-subvenue.d.ts.map +1 -0
  279. package/out/src/tools/fetch/wikidata-subvenue.js +275 -0
  280. package/out/src/tools/fetch/wikidata-subvenue.js.map +1 -0
  281. package/out/src/tools/golden-expand.d.ts.map +1 -1
  282. package/out/src/tools/golden-expand.js +18 -16
  283. package/out/src/tools/golden-expand.js.map +1 -1
  284. package/out/src/tools/golden-promote.d.ts.map +1 -1
  285. package/out/src/tools/golden-promote.js +12 -6
  286. package/out/src/tools/golden-promote.js.map +1 -1
  287. package/out/src/tools/golden-relabel-street.d.ts +196 -0
  288. package/out/src/tools/golden-relabel-street.d.ts.map +1 -0
  289. package/out/src/tools/golden-relabel-street.js +440 -0
  290. package/out/src/tools/golden-relabel-street.js.map +1 -0
  291. package/out/src/tools/index.d.ts +4 -0
  292. package/out/src/tools/index.d.ts.map +1 -1
  293. package/out/src/tools/index.js +4 -0
  294. package/out/src/tools/index.js.map +1 -1
  295. package/out/src/tools/jsonl-to-parquet.d.ts.map +1 -1
  296. package/out/src/tools/jsonl-to-parquet.js +3 -2
  297. package/out/src/tools/jsonl-to-parquet.js.map +1 -1
  298. package/out/src/tools/lint-shard-vocab.d.ts.map +1 -1
  299. package/out/src/tools/lint-shard-vocab.js +3 -2
  300. package/out/src/tools/lint-shard-vocab.js.map +1 -1
  301. package/out/src/tools/lint-shard.d.ts +3 -3
  302. package/out/src/tools/lint-shard.d.ts.map +1 -1
  303. package/out/src/tools/lint-shard.js +23 -32
  304. package/out/src/tools/lint-shard.js.map +1 -1
  305. package/out/src/tools/overlay-manifest.d.ts.map +1 -1
  306. package/out/src/tools/overlay-manifest.js +2 -1
  307. package/out/src/tools/overlay-manifest.js.map +1 -1
  308. package/out/src/tools/overture-subvenue.d.ts +112 -0
  309. package/out/src/tools/overture-subvenue.d.ts.map +1 -0
  310. package/out/src/tools/overture-subvenue.js +144 -0
  311. package/out/src/tools/overture-subvenue.js.map +1 -0
  312. package/out/src/tools/shard-kryptonite.d.ts +1 -1
  313. package/out/src/tools/shard-kryptonite.d.ts.map +1 -1
  314. package/out/src/tools/shard-kryptonite.js +6 -6
  315. package/out/src/tools/shard-kryptonite.js.map +1 -1
  316. package/out/src/tools/shard-translit.d.ts +6 -3
  317. package/out/src/tools/shard-translit.d.ts.map +1 -1
  318. package/out/src/tools/shard-translit.js +9 -8
  319. package/out/src/tools/shard-translit.js.map +1 -1
  320. package/out/src/tools/sub-venue-lexicon.d.ts +507 -0
  321. package/out/src/tools/sub-venue-lexicon.d.ts.map +1 -0
  322. package/out/src/tools/sub-venue-lexicon.js +817 -0
  323. package/out/src/tools/sub-venue-lexicon.js.map +1 -0
  324. package/out/src/tools/sub-venue-promotions.d.ts +94 -0
  325. package/out/src/tools/sub-venue-promotions.d.ts.map +1 -0
  326. package/out/src/tools/sub-venue-promotions.js +266 -0
  327. package/out/src/tools/sub-venue-promotions.js.map +1 -0
  328. package/out/src/{align.d.ts → utils/align.d.ts} +1 -1
  329. package/out/src/utils/align.d.ts.map +1 -0
  330. package/out/src/utils/align.js.map +1 -0
  331. package/out/src/{golden.d.ts → utils/golden.d.ts} +5 -0
  332. package/out/src/utils/golden.d.ts.map +1 -0
  333. package/out/src/{golden.js → utils/golden.js} +24 -10
  334. package/out/src/utils/golden.js.map +1 -0
  335. package/out/src/utils/index.d.ts +14 -0
  336. package/out/src/utils/index.d.ts.map +1 -0
  337. package/out/src/utils/index.js +14 -0
  338. package/out/src/utils/index.js.map +1 -0
  339. package/out/src/utils/license.d.ts.map +1 -0
  340. package/out/src/utils/license.js.map +1 -0
  341. package/out/src/{parquet.d.ts → utils/parquet.d.ts} +2 -2
  342. package/out/src/utils/parquet.d.ts.map +1 -0
  343. package/out/src/{parquet.js → utils/parquet.js} +3 -15
  344. package/out/src/utils/parquet.js.map +1 -0
  345. package/out/src/{split.d.ts → utils/split.d.ts} +8 -1
  346. package/out/src/utils/split.d.ts.map +1 -0
  347. package/out/src/{split.js → utils/split.js} +7 -0
  348. package/out/src/utils/split.js.map +1 -0
  349. package/out/src/utils/tokenize.d.ts.map +1 -0
  350. package/out/src/utils/tokenize.js.map +1 -0
  351. package/out/src/{wof-json.d.ts → utils/wof-json.d.ts} +2 -2
  352. package/out/src/utils/wof-json.d.ts.map +1 -0
  353. package/out/src/{wof-json.js → utils/wof-json.js} +5 -8
  354. package/out/src/utils/wof-json.js.map +1 -0
  355. package/package.json +66 -20
  356. package/src/adapters/ban/adapter.ts +58 -68
  357. package/src/adapters/ban/street-decompose.ts +17 -25
  358. package/src/adapters/fcc-bdc/adapter.ts +5 -36
  359. package/src/adapters/geonames/adapter.ts +67 -76
  360. package/src/adapters/geonames-postal/adapter.ts +45 -54
  361. package/src/adapters/gnaf/adapter.ts +7 -11
  362. package/src/adapters/gnaf/assemble.ts +7 -11
  363. package/src/adapters/index.ts +3 -2
  364. package/src/adapters/openaddresses/adapter.ts +6 -12
  365. package/src/adapters/overture/adapter.ts +6 -10
  366. package/src/adapters/state-hi-schools/adapter.ts +53 -77
  367. package/src/adapters/state-ia-contractors/adapter.ts +55 -80
  368. package/src/adapters/state-ny-notaries/adapter.ts +64 -89
  369. package/src/adapters/state-tx-notaries/adapter.ts +63 -88
  370. package/src/adapters/synth-po-box/adapter.ts +12 -23
  371. package/src/adapters/tiger/adapter.ts +4 -3
  372. package/src/adapters/tiger/street-decompose.ts +21 -31
  373. package/src/adapters/usgov-hrsa-fqhc/adapter.ts +64 -88
  374. package/src/adapters/usgov-imls-pls/adapter.ts +57 -86
  375. package/src/adapters/usgov-irs-bmf/adapter.ts +55 -66
  376. package/src/adapters/usgov-nad/adapter.ts +7 -11
  377. package/src/adapters/usgov-nppes/adapter.ts +54 -79
  378. package/src/adapters/usgov-samhsa-treatment-locator/adapter.ts +48 -75
  379. package/src/{adapter.ts → adapters/utils/index.ts} +59 -3
  380. package/src/adapters/wof-admin-jp/adapter.ts +35 -9
  381. package/src/adapters/wof-admin-json/adapter.ts +3 -4
  382. package/src/adapters/wof-postalcode-json/adapter.ts +3 -4
  383. package/src/build.ts +12 -11
  384. package/src/index.ts +3 -17
  385. package/src/name-prone-us-suffixes.ts +12 -0
  386. package/src/parquet-wrapper/reader.ts +19 -0
  387. package/src/parquet-wrapper/schema.ts +4 -0
  388. package/src/runner.ts +7 -2
  389. package/src/shard-recipes/anchor-absorption.ts +5 -4
  390. package/src/shard-recipes/boundary-stress.ts +6 -2
  391. package/src/shard-recipes/country-balanced.ts +77 -91
  392. package/src/shard-recipes/fr-admin-split.ts +3 -3
  393. package/src/shard-recipes/fr-fragment.ts +10 -7
  394. package/src/shard-recipes/fr-lieudit.ts +3 -3
  395. package/src/shard-recipes/fr-order.ts +18 -83
  396. package/src/shard-recipes/german.ts +17 -80
  397. package/src/shard-recipes/house-venue.ts +2 -1
  398. package/src/shard-recipes/index.ts +4 -1
  399. package/src/shard-recipes/intersection.ts +37 -74
  400. package/src/shard-recipes/locale.ts +31 -39
  401. package/src/shard-recipes/no-fragment.ts +10 -7
  402. package/src/shard-recipes/no-street-led.ts +10 -7
  403. package/src/shard-recipes/no-street.ts +2 -1
  404. package/src/shard-recipes/po-box-cedex.ts +127 -161
  405. package/src/shard-recipes/po-box.ts +6 -1
  406. package/src/shard-recipes/scaffold.ts +125 -27
  407. package/src/shard-recipes/street-affix.ts +335 -134
  408. package/src/shard-recipes/street-bare.ts +4 -3
  409. package/src/shard-recipes/street.ts +3 -2
  410. package/src/shard-recipes/sub-venue-sources.ts +895 -0
  411. package/src/shard-recipes/sub-venue.ts +982 -0
  412. package/src/shard-recipes/unit.ts +27 -85
  413. package/src/{synthesize-boundary-stress.ts → synthesizers/boundary-stress.ts} +2 -2
  414. package/src/{synthesize-german.ts → synthesizers/german.ts} +2 -2
  415. package/src/{synthesize-house-venue.ts → synthesizers/house-venue.ts} +4 -4
  416. package/src/{synthesize-intersection.ts → synthesizers/intersection.ts} +1 -1
  417. package/src/{synthesize-no-street.ts → synthesizers/no-street.ts} +2 -2
  418. package/src/{synthesize-po-box.ts → synthesizers/po-box.ts} +1 -1
  419. package/src/{synthesize-street.ts → synthesizers/street.ts} +2 -2
  420. package/src/{synthesize.ts → synthesizers/utils.ts} +4 -18
  421. package/src/tools/align-shard.ts +4 -7
  422. package/src/tools/audit.ts +6 -5
  423. package/src/tools/corpus-stats.ts +25 -33
  424. package/src/tools/fetch/download.ts +7 -5
  425. package/src/tools/fetch/imls-pls.ts +4 -18
  426. package/src/tools/fetch/index.ts +14 -1
  427. package/src/tools/fetch/nad.ts +1 -1
  428. package/src/tools/fetch/nppes.ts +9 -16
  429. package/src/tools/fetch/openaddresses.ts +1 -1
  430. package/src/tools/fetch/ourairports.ts +166 -0
  431. package/src/tools/fetch/wikidata-subvenue.ts +386 -0
  432. package/src/tools/golden-expand.ts +18 -13
  433. package/src/tools/golden-promote.ts +15 -6
  434. package/src/tools/golden-relabel-street.ts +685 -0
  435. package/src/tools/index.ts +4 -0
  436. package/src/tools/jsonl-to-parquet.ts +3 -2
  437. package/src/tools/lint-shard-vocab.ts +3 -2
  438. package/src/tools/lint-shard.ts +33 -36
  439. package/src/tools/overlay-manifest.ts +2 -1
  440. package/src/tools/overture-subvenue.ts +215 -0
  441. package/src/tools/shard-kryptonite.ts +8 -9
  442. package/src/tools/shard-translit.ts +22 -11
  443. package/src/tools/sub-venue-lexicon.ts +1250 -0
  444. package/src/tools/sub-venue-promotions.ts +330 -0
  445. package/src/{align.ts → utils/align.ts} +1 -1
  446. package/src/{golden.ts → utils/golden.ts} +25 -11
  447. package/src/utils/index.ts +14 -0
  448. package/src/{parquet.ts → utils/parquet.ts} +5 -19
  449. package/src/{split.ts → utils/split.ts} +8 -2
  450. package/src/{wof-json.ts → utils/wof-json.ts} +5 -8
  451. package/out/src/adapter.d.ts.map +0 -1
  452. package/out/src/adapter.js.map +0 -1
  453. package/out/src/align.d.ts.map +0 -1
  454. package/out/src/align.js.map +0 -1
  455. package/out/src/format.d.ts +0 -14
  456. package/out/src/format.d.ts.map +0 -1
  457. package/out/src/format.js +0 -14
  458. package/out/src/format.js.map +0 -1
  459. package/out/src/golden.d.ts.map +0 -1
  460. package/out/src/golden.js.map +0 -1
  461. package/out/src/license.d.ts.map +0 -1
  462. package/out/src/license.js.map +0 -1
  463. package/out/src/parquet.d.ts.map +0 -1
  464. package/out/src/parquet.js.map +0 -1
  465. package/out/src/split.d.ts.map +0 -1
  466. package/out/src/split.js.map +0 -1
  467. package/out/src/synthesize-anchor-absorption.d.ts.map +0 -1
  468. package/out/src/synthesize-anchor-absorption.js.map +0 -1
  469. package/out/src/synthesize-boundary-stress.d.ts.map +0 -1
  470. package/out/src/synthesize-boundary-stress.js.map +0 -1
  471. package/out/src/synthesize-german.d.ts.map +0 -1
  472. package/out/src/synthesize-german.js.map +0 -1
  473. package/out/src/synthesize-house-venue.d.ts.map +0 -1
  474. package/out/src/synthesize-house-venue.js.map +0 -1
  475. package/out/src/synthesize-intersection.d.ts.map +0 -1
  476. package/out/src/synthesize-intersection.js.map +0 -1
  477. package/out/src/synthesize-no-street.d.ts.map +0 -1
  478. package/out/src/synthesize-no-street.js.map +0 -1
  479. package/out/src/synthesize-po-box.d.ts.map +0 -1
  480. package/out/src/synthesize-po-box.js.map +0 -1
  481. package/out/src/synthesize-street.d.ts.map +0 -1
  482. package/out/src/synthesize-street.js.map +0 -1
  483. package/out/src/synthesize.d.ts.map +0 -1
  484. package/out/src/synthesize.js.map +0 -1
  485. package/out/src/tokenize.d.ts.map +0 -1
  486. package/out/src/tokenize.js.map +0 -1
  487. package/out/src/wof-json.d.ts.map +0 -1
  488. package/out/src/wof-json.js.map +0 -1
  489. package/src/format.ts +0 -14
  490. /package/out/src/{align.js → utils/align.js} +0 -0
  491. /package/out/src/{license.d.ts → utils/license.d.ts} +0 -0
  492. /package/out/src/{license.js → utils/license.js} +0 -0
  493. /package/out/src/{tokenize.d.ts → utils/tokenize.d.ts} +0 -0
  494. /package/out/src/{tokenize.js → utils/tokenize.js} +0 -0
  495. /package/src/{synthesize-anchor-absorption.ts → synthesizers/anchor-absorption.ts} +0 -0
  496. /package/src/{license.ts → utils/license.ts} +0 -0
  497. /package/src/{tokenize.ts → utils/tokenize.ts} +0 -0
@@ -0,0 +1,196 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Golden-set street-suffix relabel — v0.1.2 → v0.1.3.
7
+ *
8
+ * ## Why this exists
9
+ *
10
+ * The golden answer key and the training corpus disagreed about ONE thing, and the v9.0.0
11
+ * promotion gate read the disagreement as a model regression (`us.street` 87.4 vs a floor of
12
+ * 87.8). The corpus SPLITS a US street into `street` + `street_suffix` — TIGER's adapter
13
+ * decomposes at `corpus/src/adapters/tiger/street-decompose.ts`, the `street-affix` shard recipe
14
+ * teaches it from USPS Pub-28, and `ComponentTag` carries `street_suffix` as a first-class tag.
15
+ * The golden set FOLDED it: 2,216 US rows carry a `street`, and exactly 2 of them label a
16
+ * `street_suffix`. Operator ruling, 2026-08-06: **the split is canonical**; the golden is the
17
+ * stale side. This tool moves the answer key onto the corpus convention.
18
+ *
19
+ * ## The instrument
20
+ *
21
+ * `matchTrailingSuffix` from `@mailwoman/codex/us` — the USPS Pub-28 Appendix C table, which is
22
+ * also what the corpus shard recipe splits on. The table is NOT re-implemented here, and the
23
+ * libpostal dictionary TIGER reads is deliberately not used: measured on this golden set the two
24
+ * disagree on 51 US rows, and the disagreements run in the codex table's favour (libpostal's
25
+ * `directionals.txt` lists `center|c`, so TIGER reads the `C` of "C STREET" as a directional
26
+ * prefix and then emits no suffix at all).
27
+ *
28
+ * ## What it changes, and what it refuses to
29
+ *
30
+ * Applied only to rows whose `country` is `US`. Three branches, mirroring the SHAPE of TIGER's
31
+ * `decomposeStreet` on codex tables:
32
+ *
33
+ * - **street type** — the last whitespace-separated word is a Pub-28 suffix, and something is left
34
+ * over: "Main St" → `street: "Main"`, `street_suffix: "St"` (1,559 rows).
35
+ * - **street type + post-directional** — the last word is a directional AND the one before it is a
36
+ * Pub-28 suffix: "Pennsylvania Avenue NW" → `street: "Pennsylvania"`,
37
+ * `street_suffix: "Avenue NW"` (347 rows). The post-directional joins the suffix rather than
38
+ * becoming a tag of its own, because that is what the corpus adapter emits; there is no
39
+ * `street_postfix` tag to move it to.
40
+ * - **everything else is left folded** and reported. In particular a BARE post-directional tail
41
+ * ("Seymour East", "BROADWAY N" — 16 rows) is NOT split: a directional is not a Pub-28 suffix,
42
+ * and the observed rows in that class are unit-contaminated ("1ST AVE SW BOX E", where the
43
+ * trailing "E" is a box letter).
44
+ *
45
+ * FR rows are untouched, deliberately and permanently as far as this tool is concerned. French
46
+ * street typology puts the type FIRST ("Rue de la Paix") and the golden labels only 7 of 665 FR
47
+ * street rows with a `street_prefix`; whether FR should split at all is a different question with
48
+ * a different table behind it, and nothing here should be read as having answered it.
49
+ *
50
+ * ## Surface bytes
51
+ *
52
+ * The split is a cut at a whitespace run in the ORIGINAL string — no trimming, no case
53
+ * normalization, no re-joining of tokens. `street + gap + street_suffix` reconstructs the input
54
+ * byte-for-byte, so the whitespace between them belongs to neither span (the same shape the corpus
55
+ * adapter's spans have). The tool asserts this per row and refuses to write a file if it ever
56
+ * fails.
57
+ */
58
+ /**
59
+ * A golden-set row, as stored one-per-line in `us.jsonl` / `fr.jsonl` / `adversarial.jsonl`. Only the fields this tool
60
+ * reads are modeled; every other key rides through untouched.
61
+ */
62
+ export interface GoldenStreetRow {
63
+ raw: string;
64
+ components: Record<string, string>;
65
+ country?: string;
66
+ source?: string;
67
+ notes?: string;
68
+ [key: string]: unknown;
69
+ }
70
+ /**
71
+ * What the tool decided about one row. Every value except the two `split-*` classes means "left folded".
72
+ */
73
+ export type GoldenRelabelClass = "split-suffix" | "split-suffix-postdirectional" | "split-prefix-only" | "already-split" | "single-token" | "suffix-only-street" | "postdirectional-tail-only" | "no-suffix-match" | "no-street" | "not-us" | "untrimmed-street";
74
+ /**
75
+ * A review trigger on a row the tool DID change. A flag is never an adjudication — it marks the row for the operator's
76
+ * deck, and the split is applied either way.
77
+ */
78
+ export interface GoldenRelabelFlag {
79
+ kind: "name-prone-suffix" | "venue-context" | "remainder-is-affix";
80
+ detail: string;
81
+ }
82
+ /**
83
+ * Row-level relabel outcome.
84
+ */
85
+ export interface GoldenRelabelResult {
86
+ /**
87
+ * The row to write. Identical object reference when nothing changed.
88
+ */
89
+ row: GoldenStreetRow;
90
+ changed: boolean;
91
+ rowClass: GoldenRelabelClass;
92
+ flags: GoldenRelabelFlag[];
93
+ /**
94
+ * A leading directional was lifted into `street_prefix` on this row.
95
+ */
96
+ prefixSplit: boolean;
97
+ /**
98
+ * The street span as it stood in the parent version — recorded for the review deck.
99
+ */
100
+ beforeStreet?: string;
101
+ }
102
+ /**
103
+ * Options for {@linkcode relabelGoldenStreetRow}.
104
+ */
105
+ export interface RelabelStreetRowOptions {
106
+ /**
107
+ * Also lift a folded LEADING directional out into `street_prefix`. Default true.
108
+ *
109
+ * On by default because the fold cuts both ways and the answer key has to be corrected on both, or the correction is
110
+ * not a correction: 207 of the 1,682 split dev rows (12.3%) still opened with a directional after the suffix move —
111
+ * "N Desmet Avenue" would have graded `street: "N Desmet"` against a model that says `street_prefix: "N", street:
112
+ * "Desmet"`. Turn it OFF only to measure what the prefix fold alone costs.
113
+ */
114
+ splitPrefix?: boolean;
115
+ }
116
+ /**
117
+ * Decide, and apply, the US street-span split for ONE golden row. Pure: never mutates its argument, and returns the
118
+ * same object reference when the row is left alone.
119
+ */
120
+ export declare function relabelGoldenStreetRow(row: GoldenStreetRow, options?: RelabelStreetRowOptions): GoldenRelabelResult;
121
+ /**
122
+ * Per-class row counts for one relabelled file.
123
+ */
124
+ export type GoldenRelabelCounts = Record<GoldenRelabelClass, number>;
125
+ /**
126
+ * One line of the review deck: what a changed (or notably unchanged) row looked like before and after.
127
+ */
128
+ export interface GoldenRelabelDeckEntry {
129
+ file: string;
130
+ line: number;
131
+ raw: string;
132
+ rowClass: GoldenRelabelClass;
133
+ before: Record<string, string>;
134
+ after: Record<string, string>;
135
+ flags: GoldenRelabelFlag[];
136
+ }
137
+ /**
138
+ * Options for {@linkcode relabelGoldenDirectory}.
139
+ */
140
+ export interface RelabelGoldenOptions {
141
+ /**
142
+ * Parent golden version dir (read-only), e.g. `data/eval/golden/v0.1.2`.
143
+ */
144
+ input: string;
145
+ /**
146
+ * Output golden version dir. Created; never overwritten in place.
147
+ */
148
+ output: string;
149
+ /**
150
+ * Review-deck JSONL path. Default `<output>/REVIEW-DECK.jsonl`.
151
+ */
152
+ deck?: string;
153
+ /**
154
+ * Parent version label recorded in the manifest. Default: the input dir's basename.
155
+ */
156
+ parentLabel?: string;
157
+ /**
158
+ * Tool provenance recorded in the manifest — the commit the relabel ran at.
159
+ */
160
+ commit?: string;
161
+ /**
162
+ * Passed through to {@linkcode relabelGoldenStreetRow}. Default true.
163
+ */
164
+ splitPrefix?: boolean;
165
+ }
166
+ /**
167
+ * Aggregate outcome for a whole golden version.
168
+ */
169
+ export interface RelabelGoldenReport {
170
+ files: Record<string, {
171
+ entries: number;
172
+ changed: number;
173
+ flagged: number;
174
+ prefixSplit: number;
175
+ counts: GoldenRelabelCounts;
176
+ }>;
177
+ deckPath: string;
178
+ outputDir: string;
179
+ totalChanged: number;
180
+ totalFlagged: number;
181
+ }
182
+ /**
183
+ * Relabel every `.jsonl` in a golden version dir, writing a new version dir plus a review deck and a MANIFEST that
184
+ * records the convention, the parent, and the counts. Non-JSONL siblings (README, split manifests) are copied forward
185
+ * so the new version is self-contained; nested split dirs (`dev/`, `test/`) are relabelled recursively.
186
+ */
187
+ export declare function relabelGoldenDirectory(options: RelabelGoldenOptions, report?: (line: string) => void): Promise<RelabelGoldenReport>;
188
+ /**
189
+ * Every relabel class that means the row was left folded, for callers that want to report the residue.
190
+ */
191
+ export declare function isLeftFolded(rowClass: GoldenRelabelClass): boolean;
192
+ /**
193
+ * True when a golden dir declares the US-split convention — i.e. it is safe to grade it with an UNFOLDED scorer.
194
+ */
195
+ export declare function goldenDeclaresSplitStreets(dir: string): boolean;
196
+ //# sourceMappingURL=golden-relabel-street.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"golden-relabel-street.d.ts","sourceRoot":"","sources":["../../../src/tools/golden-relabel-street.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,440 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Golden-set street-suffix relabel — v0.1.2 → v0.1.3.
7
+ *
8
+ * ## Why this exists
9
+ *
10
+ * The golden answer key and the training corpus disagreed about ONE thing, and the v9.0.0
11
+ * promotion gate read the disagreement as a model regression (`us.street` 87.4 vs a floor of
12
+ * 87.8). The corpus SPLITS a US street into `street` + `street_suffix` — TIGER's adapter
13
+ * decomposes at `corpus/src/adapters/tiger/street-decompose.ts`, the `street-affix` shard recipe
14
+ * teaches it from USPS Pub-28, and `ComponentTag` carries `street_suffix` as a first-class tag.
15
+ * The golden set FOLDED it: 2,216 US rows carry a `street`, and exactly 2 of them label a
16
+ * `street_suffix`. Operator ruling, 2026-08-06: **the split is canonical**; the golden is the
17
+ * stale side. This tool moves the answer key onto the corpus convention.
18
+ *
19
+ * ## The instrument
20
+ *
21
+ * `matchTrailingSuffix` from `@mailwoman/codex/us` — the USPS Pub-28 Appendix C table, which is
22
+ * also what the corpus shard recipe splits on. The table is NOT re-implemented here, and the
23
+ * libpostal dictionary TIGER reads is deliberately not used: measured on this golden set the two
24
+ * disagree on 51 US rows, and the disagreements run in the codex table's favour (libpostal's
25
+ * `directionals.txt` lists `center|c`, so TIGER reads the `C` of "C STREET" as a directional
26
+ * prefix and then emits no suffix at all).
27
+ *
28
+ * ## What it changes, and what it refuses to
29
+ *
30
+ * Applied only to rows whose `country` is `US`. Three branches, mirroring the SHAPE of TIGER's
31
+ * `decomposeStreet` on codex tables:
32
+ *
33
+ * - **street type** — the last whitespace-separated word is a Pub-28 suffix, and something is left
34
+ * over: "Main St" → `street: "Main"`, `street_suffix: "St"` (1,559 rows).
35
+ * - **street type + post-directional** — the last word is a directional AND the one before it is a
36
+ * Pub-28 suffix: "Pennsylvania Avenue NW" → `street: "Pennsylvania"`,
37
+ * `street_suffix: "Avenue NW"` (347 rows). The post-directional joins the suffix rather than
38
+ * becoming a tag of its own, because that is what the corpus adapter emits; there is no
39
+ * `street_postfix` tag to move it to.
40
+ * - **everything else is left folded** and reported. In particular a BARE post-directional tail
41
+ * ("Seymour East", "BROADWAY N" — 16 rows) is NOT split: a directional is not a Pub-28 suffix,
42
+ * and the observed rows in that class are unit-contaminated ("1ST AVE SW BOX E", where the
43
+ * trailing "E" is a box letter).
44
+ *
45
+ * FR rows are untouched, deliberately and permanently as far as this tool is concerned. French
46
+ * street typology puts the type FIRST ("Rue de la Paix") and the golden labels only 7 of 665 FR
47
+ * street rows with a `street_prefix`; whether FR should split at all is a different question with
48
+ * a different table behind it, and nothing here should be read as having answered it.
49
+ *
50
+ * ## Surface bytes
51
+ *
52
+ * The split is a cut at a whitespace run in the ORIGINAL string — no trimming, no case
53
+ * normalization, no re-joining of tokens. `street + gap + street_suffix` reconstructs the input
54
+ * byte-for-byte, so the whitespace between them belongs to neither span (the same shape the corpus
55
+ * adapter's spans have). The tool asserts this per row and refuses to write a file if it ever
56
+ * fails.
57
+ */
58
+ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
59
+ import { basename, join } from "node:path";
60
+ import { isStreetDirectionalToken, matchTrailingSuffix } from "@mailwoman/codex/us";
61
+ import { parseJSONStrict, tryParsingJSON } from "@mailwoman/core/objects";
62
+ import { sha256File } from "@mailwoman/core/utils";
63
+ import { TextSpliterator } from "spliterator";
64
+ import { NAME_PRONE_US_SUFFIXES } from "../name-prone-us-suffixes.js";
65
+ /**
66
+ * Cut `s` at its LAST whitespace run, returning the three pieces verbatim. Null when there is no interior whitespace,
67
+ * when the head would be empty, or when `s` carries leading/trailing whitespace (a golden row is stored trimmed; an
68
+ * untrimmed one is reported rather than silently normalized).
69
+ */
70
+ function splitLastWord(s) {
71
+ if (s !== s.trim() || !s)
72
+ return null;
73
+ const match = /^(.*\S)(\s+)(\S+)$/.exec(s);
74
+ if (!match)
75
+ return null;
76
+ return { head: match[1], gap: match[2], tail: match[3] };
77
+ }
78
+ /**
79
+ * Cut `s` at its FIRST whitespace run — the leading-directional counterpart of {@link splitLastWord}. `head` is the
80
+ * first word, `tail` the rest, both verbatim.
81
+ */
82
+ function splitFirstWord(s) {
83
+ if (s !== s.trim() || !s)
84
+ return null;
85
+ const match = /^(\S+)(\s+)(\S.*)$/.exec(s);
86
+ if (!match)
87
+ return null;
88
+ return { head: match[1], gap: match[2], tail: match[3] };
89
+ }
90
+ // ── Row-level relabel ──────────────────────────────────────────────────────
91
+ /**
92
+ * Rebuild `components` with `street_suffix` inserted immediately after `street`, so the written row reads in address
93
+ * order rather than with the new tag appended at the end.
94
+ */
95
+ function withStreetSpans(components, spans) {
96
+ const out = {};
97
+ for (const [key, value] of Object.entries(components)) {
98
+ if (key === "street") {
99
+ if (spans.prefix) {
100
+ out.street_prefix = spans.prefix;
101
+ }
102
+ out.street = spans.street;
103
+ if (spans.suffix) {
104
+ out.street_suffix = spans.suffix;
105
+ }
106
+ continue;
107
+ }
108
+ if (key === "street_prefix" || key === "street_suffix")
109
+ continue;
110
+ out[key] = value;
111
+ }
112
+ return out;
113
+ }
114
+ /**
115
+ * Decide, and apply, the US street-span split for ONE golden row. Pure: never mutates its argument, and returns the
116
+ * same object reference when the row is left alone.
117
+ */
118
+ export function relabelGoldenStreetRow(row, options = {}) {
119
+ const splitPrefix = options.splitPrefix ?? true;
120
+ const keep = (rowClass) => ({
121
+ row,
122
+ changed: false,
123
+ rowClass,
124
+ flags: [],
125
+ prefixSplit: false,
126
+ });
127
+ if ((row.country ?? "").toUpperCase() !== "US")
128
+ return keep("not-us");
129
+ const street = row.components.street;
130
+ if (!street)
131
+ return keep("no-street");
132
+ if (row.components.street_suffix)
133
+ return keep("already-split");
134
+ if (street !== street.trim())
135
+ return keep("untrimmed-street");
136
+ const flags = [];
137
+ let rowClass;
138
+ let name = street;
139
+ let suffix;
140
+ let suffixGap = "";
141
+ let canonical;
142
+ const cut = splitLastWord(street);
143
+ if (!cut) {
144
+ rowClass = matchTrailingSuffix(street) ? "suffix-only-street" : "single-token";
145
+ }
146
+ else if (isStreetDirectionalToken(cut.tail)) {
147
+ // Street type + post-directional ("Pennsylvania Avenue NW"). The corpus adapter emits the pair as
148
+ // ONE suffix span, and there is no post-directional tag to move it to.
149
+ const inner = splitLastWord(cut.head);
150
+ const typeMatch = inner ? matchTrailingSuffix(inner.tail) : null;
151
+ if (!inner || !typeMatch) {
152
+ rowClass = "postdirectional-tail-only";
153
+ }
154
+ else {
155
+ rowClass = "split-suffix-postdirectional";
156
+ name = inner.head;
157
+ suffix = `${inner.tail}${cut.gap}${cut.tail}`;
158
+ suffixGap = inner.gap;
159
+ canonical = typeMatch.canonical;
160
+ }
161
+ }
162
+ else {
163
+ const typeMatch = matchTrailingSuffix(street);
164
+ if (!typeMatch) {
165
+ rowClass = "no-suffix-match";
166
+ }
167
+ else {
168
+ rowClass = "split-suffix";
169
+ name = cut.head;
170
+ suffix = cut.tail;
171
+ suffixGap = cut.gap;
172
+ canonical = typeMatch.canonical;
173
+ }
174
+ }
175
+ // Leading directional → street_prefix, on whatever name survived the suffix move. Independent of the
176
+ // suffix branch, because "N Main" is as folded as "N Main St" is.
177
+ let prefix;
178
+ let prefixGap = "";
179
+ if (splitPrefix && !row.components.street_prefix) {
180
+ const lead = splitFirstWord(name);
181
+ if (lead && isStreetDirectionalToken(lead.head)) {
182
+ prefix = lead.head;
183
+ prefixGap = lead.gap;
184
+ name = lead.tail;
185
+ }
186
+ }
187
+ if (!suffix && !prefix)
188
+ return keep(rowClass);
189
+ if (!suffix) {
190
+ rowClass = "split-prefix-only";
191
+ }
192
+ // The invariant this tool exists to keep: the spans plus the whitespace between them ARE the original
193
+ // span, byte for byte. Anything else means a token was rewritten.
194
+ const rebuilt = `${prefix ? prefix + prefixGap : ""}${name}${suffix ? suffixGap + suffix : ""}`;
195
+ if (rebuilt !== street) {
196
+ throw new Error(`golden-relabel: span reconstruction failed for ${JSON.stringify(street)}`);
197
+ }
198
+ if (canonical && NAME_PRONE_US_SUFFIXES.has(canonical)) {
199
+ flags.push({
200
+ kind: "name-prone-suffix",
201
+ detail: `${canonical} heads proper names as often as street types`,
202
+ });
203
+ }
204
+ const venue = row.components.venue;
205
+ if (suffix && venue && new RegExp(`(^|\\W)${escapeRegExp(suffix)}(\\W|$)`, "i").test(venue)) {
206
+ flags.push({
207
+ kind: "venue-context",
208
+ detail: `venue ${JSON.stringify(venue)} also carries ${JSON.stringify(suffix)}`,
209
+ });
210
+ }
211
+ // Narrow on purpose: a name that happens to be a Pub-28 canonical is NOT interesting ("Mountain Rd",
212
+ // "Valley Dr", "Mills Ln" are ordinary streets, and flagging them buried the deck — 108 rows of noise
213
+ // on the first run). A name that is a bare DIRECTIONAL is: "East Rd" leaves `street: "East"`, which is
214
+ // a direction, not a name.
215
+ if (isStreetDirectionalToken(name)) {
216
+ flags.push({
217
+ kind: "remainder-is-affix",
218
+ detail: `street would become the bare directional ${JSON.stringify(name)}`,
219
+ });
220
+ }
221
+ return {
222
+ row: {
223
+ ...row,
224
+ components: withStreetSpans(row.components, {
225
+ ...(prefix ? { prefix } : row.components.street_prefix ? { prefix: row.components.street_prefix } : {}),
226
+ street: name,
227
+ ...(suffix ? { suffix } : {}),
228
+ }),
229
+ },
230
+ changed: true,
231
+ rowClass,
232
+ flags,
233
+ prefixSplit: Boolean(prefix),
234
+ beforeStreet: street,
235
+ };
236
+ }
237
+ function escapeRegExp(s) {
238
+ return s.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&");
239
+ }
240
+ const EMPTY_COUNTS = () => ({
241
+ "split-suffix": 0,
242
+ "split-suffix-postdirectional": 0,
243
+ "split-prefix-only": 0,
244
+ "already-split": 0,
245
+ "single-token": 0,
246
+ "suffix-only-street": 0,
247
+ "postdirectional-tail-only": 0,
248
+ "no-suffix-match": 0,
249
+ "no-street": 0,
250
+ "not-us": 0,
251
+ "untrimmed-street": 0,
252
+ });
253
+ /**
254
+ * Classes that are LEFT FOLDED but still belong in the deck, because the operator asked to see them by name: a street
255
+ * that is entirely one suffix word, and a bare post-directional tail.
256
+ */
257
+ const DECK_WORTHY_UNCHANGED = new Set([
258
+ "suffix-only-street",
259
+ "postdirectional-tail-only",
260
+ "untrimmed-street",
261
+ ]);
262
+ /**
263
+ * Relabel every `.jsonl` in a golden version dir, writing a new version dir plus a review deck and a MANIFEST that
264
+ * records the convention, the parent, and the counts. Non-JSONL siblings (README, split manifests) are copied forward
265
+ * so the new version is self-contained; nested split dirs (`dev/`, `test/`) are relabelled recursively.
266
+ */
267
+ export async function relabelGoldenDirectory(options, report = console.log) {
268
+ const { input, output } = options;
269
+ const deckPath = options.deck ?? join(output, "REVIEW-DECK.jsonl");
270
+ mkdirSync(output, { recursive: true });
271
+ const deck = [];
272
+ const files = {};
273
+ const walk = (dirIn, dirOut, prefix) => {
274
+ mkdirSync(dirOut, { recursive: true });
275
+ for (const name of readdirSync(dirIn, { withFileTypes: true })) {
276
+ const from = join(dirIn, name.name);
277
+ const to = join(dirOut, name.name);
278
+ if (name.isDirectory()) {
279
+ walk(from, to, `${prefix}${name.name}/`);
280
+ continue;
281
+ }
282
+ if (!name.name.endsWith(".jsonl")) {
283
+ // MANIFEST is rewritten below; everything else (README, SPLIT-MANIFEST) rides forward.
284
+ if (name.name !== "MANIFEST.json") {
285
+ writeFileSync(to, readFileSync(from));
286
+ }
287
+ continue;
288
+ }
289
+ const counts = EMPTY_COUNTS();
290
+ let changed = 0;
291
+ let flagged = 0;
292
+ let prefixSplit = 0;
293
+ const out = [];
294
+ let lineNumber = 0;
295
+ for (const line of TextSpliterator.from(readFileSync(from, "utf8"))) {
296
+ if (!line.trim())
297
+ continue;
298
+ lineNumber++;
299
+ // A corrupt answer-key line must STOP the relabel, not silently drop a row — a golden file
300
+ // short by one row is a floor cut against a different denominator.
301
+ const row = parseJSONStrict(line);
302
+ const result = relabelGoldenStreetRow(row, { splitPrefix: options.splitPrefix ?? true });
303
+ counts[result.rowClass]++;
304
+ if (result.changed) {
305
+ changed++;
306
+ }
307
+ if (result.prefixSplit) {
308
+ prefixSplit++;
309
+ }
310
+ if (result.flags.length) {
311
+ flagged++;
312
+ }
313
+ if (result.changed || DECK_WORTHY_UNCHANGED.has(result.rowClass)) {
314
+ deck.push({
315
+ file: `${prefix}${name.name}`,
316
+ line: lineNumber,
317
+ raw: row.raw,
318
+ rowClass: result.rowClass,
319
+ before: row.components,
320
+ after: result.row.components,
321
+ flags: result.flags,
322
+ });
323
+ }
324
+ out.push(JSON.stringify(result.row));
325
+ }
326
+ writeFileSync(to, out.join("\n") + "\n");
327
+ files[`${prefix}${name.name}`] = { entries: lineNumber, changed, flagged, prefixSplit, counts };
328
+ report(` ${prefix}${name.name}: ${lineNumber} rows, ${changed} changed (${prefixSplit} with a prefix lift), ${flagged} flagged`);
329
+ }
330
+ };
331
+ report(`relabel ${input} → ${output}`);
332
+ walk(input, output, "");
333
+ writeFileSync(deckPath, deck.map((entry) => JSON.stringify(entry)).join("\n") + "\n");
334
+ writeFileSync(deckPath.replace(/\.jsonl$/, ".md"), renderDeckMarkdown(deck, basename(input), basename(output)));
335
+ const manifestFiles = {};
336
+ for (const [name, stats] of Object.entries(files)) {
337
+ manifestFiles[name] = {
338
+ entries: stats.entries,
339
+ sha256: await sha256File(join(output, name)),
340
+ changed: stats.changed,
341
+ flagged: stats.flagged,
342
+ prefix_split: stats.prefixSplit,
343
+ };
344
+ }
345
+ const totalChanged = Object.values(files).reduce((n, f) => n + f.changed, 0);
346
+ const totalFlagged = Object.values(files).reduce((n, f) => n + f.flagged, 0);
347
+ const manifest = {
348
+ version: basename(output),
349
+ parent: options.parentLabel ?? basename(input),
350
+ generated_at: new Date().toISOString(),
351
+ tool: "corpus/src/tools/golden-relabel-street.ts (mailwoman corpus golden-relabel)",
352
+ ...(options.commit ? { commit: options.commit } : {}),
353
+ convention: {
354
+ street_convention: { US: "split", "*": "folded" },
355
+ declared: "US street spans are labeled SPLIT: a leading directional is its own `street_prefix` span, the Pub-28 " +
356
+ "street type (plus a post-directional, when one trails it) is its own `street_suffix` span, and `street` " +
357
+ "carries only the name. Non-US rows keep the folded convention of the parent version. A scorer that " +
358
+ "folds `street_prefix`/`street`/`street_suffix` back together before comparing is NOT grading this " +
359
+ "answer key.",
360
+ instrument: "@mailwoman/codex/us — matchTrailingSuffix (USPS Pub-28 Appendix C) for the type, " +
361
+ "isStreetDirectionalToken for the directionals",
362
+ left_folded: "single-token streets, streets that are entirely one suffix word, bare post-directional tails, and any " +
363
+ "street whose trailing word is not in the Pub-28 table",
364
+ prefix_split: options.splitPrefix ?? true,
365
+ },
366
+ counts: {
367
+ changed: totalChanged,
368
+ flagged: totalFlagged,
369
+ prefix_split: Object.values(files).reduce((n, f) => n + f.prefixSplit, 0),
370
+ per_file: Object.fromEntries(Object.entries(files).map(([name, stats]) => [name, stats.counts])),
371
+ },
372
+ files: manifestFiles,
373
+ review_deck: basename(deckPath),
374
+ };
375
+ writeFileSync(join(output, "MANIFEST.json"), JSON.stringify(manifest, null, "\t") + "\n");
376
+ report(`✓ ${totalChanged} rows split, ${totalFlagged} flagged — deck at ${deckPath}`);
377
+ return { files, deckPath, outputDir: output, totalChanged, totalFlagged };
378
+ }
379
+ /**
380
+ * Render the operator-facing half of the review deck: the flagged rows first (those are the ones asking for a ruling),
381
+ * then the classes the tool LEFT FOLDED by name, then a sample of the ordinary corrections. The JSONL sibling carries
382
+ * every row; this file is the one a human reads.
383
+ */
384
+ function renderDeckMarkdown(deck, parent, version) {
385
+ const span = (components) => [components.street_prefix, components.street, components.street_suffix]
386
+ .filter(Boolean)
387
+ .map((s) => JSON.stringify(s))
388
+ .join(" + ");
389
+ // The split dirs are copies of the same rows — dedupe the deck to the top-level files for reading.
390
+ const top = deck.filter((entry) => !entry.file.includes("/"));
391
+ const flagged = top.filter((entry) => entry.flags.length);
392
+ const folded = top.filter((entry) => isLeftFolded(entry.rowClass));
393
+ const plain = top.filter((entry) => !entry.flags.length && !isLeftFolded(entry.rowClass));
394
+ const rows = (entries) => entries
395
+ .map((entry) => `| ${entry.file}:${entry.line} | ${span(entry.before)} | ${span(entry.after)} | ${entry.flags.map((f) => f.kind).join(", ") || "—"} | ${JSON.stringify(entry.raw)} |`)
396
+ .join("\n");
397
+ const header = "| row | before | after | flags | raw |\n|---|---|---|---|---|";
398
+ return [
399
+ `# Golden street-suffix relabel review deck — ${parent} → ${version}`,
400
+ "",
401
+ "Rows are deduped to the top-level files (`dev/` and `test/` carry the same rows).",
402
+ "A flag is a REVIEW TRIGGER, not an adjudication: the split below is already applied.",
403
+ "",
404
+ `## Flagged (${flagged.length}) — needs a ruling`,
405
+ "",
406
+ header,
407
+ rows(flagged),
408
+ "",
409
+ `## Left folded (${folded.length}) — the tool declined to split these`,
410
+ "",
411
+ header,
412
+ rows(folded),
413
+ "",
414
+ `## Ordinary corrections (${plain.length}) — first 100 shown; the JSONL deck has all`,
415
+ "",
416
+ header,
417
+ rows(plain.slice(0, 100)),
418
+ "",
419
+ ].join("\n");
420
+ }
421
+ /**
422
+ * Every relabel class that means the row was left folded, for callers that want to report the residue.
423
+ */
424
+ export function isLeftFolded(rowClass) {
425
+ return rowClass !== "split-suffix" && rowClass !== "split-suffix-postdirectional" && rowClass !== "split-prefix-only";
426
+ }
427
+ /**
428
+ * True when a golden dir declares the US-split convention — i.e. it is safe to grade it with an UNFOLDED scorer.
429
+ */
430
+ export function goldenDeclaresSplitStreets(dir) {
431
+ for (const candidate of [join(dir, "MANIFEST.json"), join(dir, "..", "MANIFEST.json")]) {
432
+ if (!existsSync(candidate))
433
+ continue;
434
+ const manifest = tryParsingJSON(readFileSync(candidate, "utf8"));
435
+ if (manifest?.convention?.street_convention?.US === "split")
436
+ return true;
437
+ }
438
+ return false;
439
+ }
440
+ //# sourceMappingURL=golden-relabel-street.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"golden-relabel-street.js","sourceRoot":"","sources":["../../../src/tools/golden-relabel-street.ts"],"names":[],"mappings":"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"}