vehicles 0.4.1 → 0.8.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 (189) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +164 -0
  3. data/CHANGELOG.md +321 -0
  4. data/README.md +88 -15
  5. data/data/PROVENANCE-vehicles.md +12 -0
  6. data/data/plates/PROVENANCE.md +10 -0
  7. data/data/plates/_decode/at-districts.yml +287 -0
  8. data/data/plates/_decode/ch-cantons.yml +110 -0
  9. data/data/plates/_decode/cn-issuing-offices.yml +463 -0
  10. data/data/plates/_decode/cn-provinces.yml +614 -0
  11. data/data/plates/_decode/cz-kraj.yml +159 -0
  12. data/data/plates/_decode/dk-serial-blocks.yml +327 -0
  13. data/data/plates/_decode/es-provinces.yml +116 -0
  14. data/data/plates/_decode/fr-departements.yml +191 -0
  15. data/data/plates/_decode/gb-age-identifiers.yml +170 -0
  16. data/data/plates/_decode/gb-memory-tags.yml +202 -0
  17. data/data/plates/_decode/gr-prefectures.yml +1408 -0
  18. data/data/plates/_decode/hr-cities.yml +315 -0
  19. data/data/plates/_decode/ie-counties.yml +227 -0
  20. data/data/plates/_decode/in-state-codes.yml +169 -0
  21. data/data/plates/_decode/is-districts-1938.yml +116 -0
  22. data/data/plates/_decode/it-provinces.yml +348 -0
  23. data/data/plates/_decode/jp-office-marks.yml +960 -0
  24. data/data/plates/_decode/jp-use-marks.yml +205 -0
  25. data/data/plates/_decode/kr-authority-marks.yml +146 -0
  26. data/data/plates/_decode/kr-use-syllables.yml +194 -0
  27. data/data/plates/_decode/lu-series-order.yml +638 -0
  28. data/data/plates/_decode/mx-entity-series.yml +380 -0
  29. data/data/plates/_decode/my-index-marks.yml +271 -0
  30. data/data/plates/_decode/no-counties-1913.yml +148 -0
  31. data/data/plates/_decode/no-districts.yml +901 -0
  32. data/data/plates/_decode/pl-powiats.yml +567 -0
  33. data/data/plates/_decode/pt-trailer-services.yml +96 -0
  34. data/data/plates/_decode/ro-counties.yml +213 -0
  35. data/data/plates/_decode/se-diplomatic.yml +220 -0
  36. data/data/plates/_decode/si-regions.yml +123 -0
  37. data/data/plates/_decode/sk-districts.yml +314 -0
  38. data/data/plates/_decode/th-registration-elements.yml +208 -0
  39. data/data/plates/_decode/ua-regions.yml +393 -0
  40. data/data/plates/_decode/za-licence-marks.yml +215 -0
  41. data/data/plates/_meta/classes.yml +26 -0
  42. data/data/plates/_meta/separators.yml +102 -0
  43. data/data/plates/ad.yml +961 -0
  44. data/data/plates/ar.yml +762 -0
  45. data/data/plates/at.yml +1424 -0
  46. data/data/plates/au-act.yml +472 -0
  47. data/data/plates/au-nsw.yml +282 -0
  48. data/data/plates/au-nt.yml +431 -0
  49. data/data/plates/au-qld.yml +272 -0
  50. data/data/plates/au-sa.yml +248 -0
  51. data/data/plates/au-tas.yml +302 -0
  52. data/data/plates/au-vic.yml +215 -0
  53. data/data/plates/au-wa.yml +309 -0
  54. data/data/plates/be.yml +1840 -0
  55. data/data/plates/br.yml +1152 -0
  56. data/data/plates/ca-ab.yml +430 -0
  57. data/data/plates/ca-bc.yml +697 -0
  58. data/data/plates/ca-mb.yml +499 -0
  59. data/data/plates/ca-nb.yml +537 -0
  60. data/data/plates/ca-nl.yml +743 -0
  61. data/data/plates/ca-ns.yml +808 -0
  62. data/data/plates/ca-nt.yml +610 -0
  63. data/data/plates/ca-nu.yml +280 -0
  64. data/data/plates/ca-on.yml +881 -0
  65. data/data/plates/ca-pe.yml +592 -0
  66. data/data/plates/ca-qc.yml +1036 -0
  67. data/data/plates/ca-sk.yml +256 -0
  68. data/data/plates/ca-yt.yml +656 -0
  69. data/data/plates/ch.yml +1273 -0
  70. data/data/plates/cn.yml +1431 -0
  71. data/data/plates/cy.yml +688 -0
  72. data/data/plates/cz.yml +1179 -0
  73. data/data/plates/de.yml +1107 -0
  74. data/data/plates/dk.yml +1647 -0
  75. data/data/plates/ee.yml +1275 -0
  76. data/data/plates/es.yml +888 -0
  77. data/data/plates/fi.yml +1271 -0
  78. data/data/plates/fr.yml +1265 -0
  79. data/data/plates/gb.yml +1188 -0
  80. data/data/plates/gr.yml +721 -0
  81. data/data/plates/hr.yml +860 -0
  82. data/data/plates/hu.yml +959 -0
  83. data/data/plates/ie.yml +775 -0
  84. data/data/plates/in.yml +1172 -0
  85. data/data/plates/is.yml +667 -0
  86. data/data/plates/it.yml +1317 -0
  87. data/data/plates/jp.yml +3650 -0
  88. data/data/plates/kr.yml +1375 -0
  89. data/data/plates/li.yml +1010 -0
  90. data/data/plates/lt.yml +879 -0
  91. data/data/plates/lu.yml +842 -0
  92. data/data/plates/lv.yml +924 -0
  93. data/data/plates/mc.yml +1024 -0
  94. data/data/plates/mt.yml +854 -0
  95. data/data/plates/mx.yml +1372 -0
  96. data/data/plates/my.yml +685 -0
  97. data/data/plates/nl.yml +1016 -0
  98. data/data/plates/no.yml +1018 -0
  99. data/data/plates/nz.yml +1699 -0
  100. data/data/plates/pl.yml +1296 -0
  101. data/data/plates/pt.yml +847 -0
  102. data/data/plates/ro.yml +785 -0
  103. data/data/plates/se.yml +1091 -0
  104. data/data/plates/si.yml +1105 -0
  105. data/data/plates/sk.yml +1439 -0
  106. data/data/plates/sm.yml +1119 -0
  107. data/data/plates/th.yml +1150 -0
  108. data/data/plates/ua.yml +1672 -0
  109. data/data/plates/us-ak.yml +763 -0
  110. data/data/plates/us-al.yml +457 -0
  111. data/data/plates/us-ar.yml +427 -0
  112. data/data/plates/us-as.yml +454 -0
  113. data/data/plates/us-az.yml +430 -0
  114. data/data/plates/us-ca.yml +892 -0
  115. data/data/plates/us-co.yml +452 -0
  116. data/data/plates/us-ct.yml +427 -0
  117. data/data/plates/us-dc.yml +614 -0
  118. data/data/plates/us-de.yml +551 -0
  119. data/data/plates/us-fl.yml +741 -0
  120. data/data/plates/us-ga.yml +644 -0
  121. data/data/plates/us-gu.yml +658 -0
  122. data/data/plates/us-hi.yml +585 -0
  123. data/data/plates/us-ia.yml +438 -0
  124. data/data/plates/us-id.yml +531 -0
  125. data/data/plates/us-il.yml +516 -0
  126. data/data/plates/us-in.yml +324 -0
  127. data/data/plates/us-ks.yml +351 -0
  128. data/data/plates/us-ky.yml +770 -0
  129. data/data/plates/us-la.yml +568 -0
  130. data/data/plates/us-ma.yml +379 -0
  131. data/data/plates/us-md.yml +536 -0
  132. data/data/plates/us-me.yml +445 -0
  133. data/data/plates/us-mi.yml +408 -0
  134. data/data/plates/us-mn.yml +411 -0
  135. data/data/plates/us-mo.yml +356 -0
  136. data/data/plates/us-mp.yml +402 -0
  137. data/data/plates/us-ms.yml +432 -0
  138. data/data/plates/us-mt.yml +619 -0
  139. data/data/plates/us-nc.yml +602 -0
  140. data/data/plates/us-nd.yml +419 -0
  141. data/data/plates/us-ne.yml +483 -0
  142. data/data/plates/us-nh.yml +394 -0
  143. data/data/plates/us-nj.yml +547 -0
  144. data/data/plates/us-nm.yml +574 -0
  145. data/data/plates/us-nv.yml +655 -0
  146. data/data/plates/us-ny.yml +592 -0
  147. data/data/plates/us-oh.yml +404 -0
  148. data/data/plates/us-ok.yml +513 -0
  149. data/data/plates/us-or.yml +392 -0
  150. data/data/plates/us-pa.yml +506 -0
  151. data/data/plates/us-pr.yml +507 -0
  152. data/data/plates/us-ri.yml +445 -0
  153. data/data/plates/us-sc.yml +605 -0
  154. data/data/plates/us-sd.yml +428 -0
  155. data/data/plates/us-tn.yml +471 -0
  156. data/data/plates/us-tx.yml +535 -0
  157. data/data/plates/us-ut.yml +384 -0
  158. data/data/plates/us-va.yml +567 -0
  159. data/data/plates/us-vi.yml +489 -0
  160. data/data/plates/us-vt.yml +458 -0
  161. data/data/plates/us-wa.yml +484 -0
  162. data/data/plates/us-wi.yml +509 -0
  163. data/data/plates/us-wv.yml +446 -0
  164. data/data/plates/us-wy.yml +523 -0
  165. data/data/plates/va.yml +604 -0
  166. data/data/plates/za.yml +1141 -0
  167. data/data/vehicles.json +160653 -105090
  168. data/lib/vehicles/configuration.rb +18 -2
  169. data/lib/vehicles/dataset.rb +73 -18
  170. data/lib/vehicles/fuzzy.rb +115 -0
  171. data/lib/vehicles/http.rb +48 -0
  172. data/lib/vehicles/make.rb +36 -6
  173. data/lib/vehicles/mcp_server.rb +5 -5
  174. data/lib/vehicles/model.rb +42 -6
  175. data/lib/vehicles/plates/jurisdiction.rb +32 -0
  176. data/lib/vehicles/plates/series.rb +291 -0
  177. data/lib/vehicles/plates/template_fill.rb +188 -0
  178. data/lib/vehicles/plates/templates.rb +162 -0
  179. data/lib/vehicles/plates.rb +122 -0
  180. data/lib/vehicles/providers/hosted_provider.rb +49 -58
  181. data/lib/vehicles/providers/local_provider.rb +4 -3
  182. data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
  183. data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
  184. data/lib/vehicles/version.rb +1 -1
  185. data/lib/vehicles.rb +53 -16
  186. data/rakelib/data_refresh.rake +109 -0
  187. data/rakelib/plates_refresh.rake +29 -0
  188. data/sig/vehicles.rbs +18 -0
  189. metadata +174 -2
@@ -0,0 +1,402 @@
1
+ # plates/us-mp.yml — Commonwealth of the Northern Mariana Islands (PRD-PLATES L2).
2
+ #
3
+ # THE CNMI'S VEHICLE CODE IS REACHABLE AND WELL-STRUCTURED: Title 9 of the
4
+ # Commonwealth Code, Division 2 ("Registration and Licenses"), served
5
+ # section-by-section as PDFs by cnmilaw.org, the Commonwealth Law Revision
6
+ # Commission's site. Chapter 2 establishes the Bureau of Motor Vehicles;
7
+ # §§ 2101-2120 carry registration; § 2106 carries display.
8
+ #
9
+ # THE FIND THAT MAKES THIS FILE WORTH HAVING is in an unexpected place. Title 9
10
+ # never describes the standard plate's design — but § 2116(c)(1), specifying
11
+ # where the word "VETERAN" goes on a VETERAN plate, does it by reference:
12
+ # "Below the line 'HAFA ADAI' will be the word 'VETERAN'...". That single
13
+ # subordinate clause is STATUTORY CONFIRMATION that the CNMI standard plate
14
+ # carries a HAFA ADAI legend, and it is the only instrument-grade design fact
15
+ # available for this jurisdiction. Reading the specialty section to source the
16
+ # standard plate is the kind of thing that only happens if you read the statute
17
+ # rather than the brochure.
18
+ #
19
+ # WHAT IS DELIBERATELY NOT HERE (PRD-PLATES §2.5): individual specialty DESIGNS.
20
+ jurisdiction: us-mp
21
+ authority:
22
+ name: CNMI Bureau of Motor Vehicles, Department of Public Safety
23
+ url: "https://www.cnmilaw.org/cmc.php"
24
+ binding: vehicle
25
+ statute_edition: >-
26
+ 9 CMC (Vehicle Code), Division 2, as served section-by-section by
27
+ cnmilaw.org in this pass. The served text is current at least to PL 24-23 § 2
28
+ (Mar. 11, 2026), which amends § 2116 — so the edition read is a 2026 edition.
29
+ Each section carries a Commission source line and, from roughly PL 18 onward,
30
+ dated amendments; earlier public laws (PL 3-61, PL 5-39, PL 6-5, PL 14-16) are
31
+ cited by NUMBER ONLY in the Commission's text, with no date, which is why
32
+ several period claims below are upper bounds rather than enactment dates.
33
+ authority_url_note: >-
34
+ The Department of Public Safety's own site (dps.gov.mp) returned HTTP 401 on
35
+ every attempt and could not be used. The authority URL therefore points at the
36
+ Commonwealth Code, which is the primary-source home of every claim in this
37
+ file. Recorded as a dead end, not papered over.
38
+
39
+ # ---------------------------------------------------------------------------
40
+ # artwork_risk — required per jurisdiction by PRD-PLATES §4 / §7.1.
41
+ # ---------------------------------------------------------------------------
42
+ artwork_risk:
43
+ posture: unresearched-presumed-protected
44
+ basis: >-
45
+ The same two facts that govern Guam and the US Virgin Islands govern the
46
+ CNMI, and they point the same way. First, US federal copyright law APPLIES:
47
+ the US Copyright Office states that "US federal copyright law applies in the
48
+ US Virgin Islands, Guam, and the Northern Mariana Islands but not in American
49
+ Samoa". Second, NO Commons public-domain tag exists for the CNMI government —
50
+ Template:PD-CNMIGov returns 404 — and {{PD-USGov-Unincorporated}} is limited
51
+ to UNORGANIZED territories, which the CNMI (a Commonwealth in political union
52
+ with the United States, with its own constitution) is emphatically not.
53
+ conclusion: >-
54
+ Treat CNMI plate ARTWORK as presumptively protected. No CNMI statute,
55
+ executive order or Commonwealth court decision on government-work copyright
56
+ was located; that is a recorded gap. Note that 9 CMC § 2116(c)(1) itself
57
+ requires the CNMI FLAG to appear on veteran plates alongside the US flag, and
58
+ flags carry protection regimes independent of copyright — so even a
59
+ favourable copyright finding would not clear that element.
60
+ edicts: >-
61
+ Edicts of government are public domain at every level
62
+ ({{PD-US-GovEdict}}), so 9 CMC — the source of every factual claim in this
63
+ file, including the HAFA ADAI legend — is unambiguously free to use.
64
+ emblem_rule: >-
65
+ PRD-PLATES §3's placeholder default applies to the CNMI flag, the latte stone
66
+ and the Commonwealth seal. Render `emblem: {present: true, rendered:
67
+ placeholder}`. The HAFA ADAI legend is TEXT, is stated in an edict, and is a
68
+ fact rather than artwork — it may be set in a substitute typeface without
69
+ touching the artwork question.
70
+ photograph_caution: >-
71
+ plateshack.com and worldlicenseplates.com carry no reusable licence and are
72
+ treated as all rights reserved; no image was copied.
73
+ sources:
74
+ - "https://commons.wikimedia.org/wiki/Commons:Copyright_rules_by_territory/United_States # the US Copyright Office position that federal copyright law applies in the Northern Mariana Islands; the US Territories tag list, which has no CNMI entry; and the UNORGANIZED-territories limit on {{PD-USGov-Unincorporated}}"
75
+ - "https://commons.wikimedia.org/wiki/Template:PD-CNMIGov # HTTP 404 — a measured negative: no Commons public-domain tag exists for the CNMI government"
76
+ - "https://cnmilaw.org/pdf/cmc_section/T9/2116.pdf # 9 CMC § 2116(c)(1), which requires the CNMI flag on the plate — an element outside copyright's reach either way"
77
+
78
+ # ---------------------------------------------------------------------------
79
+ # The US standards chain. NOTHING here quotes SAE J686 (paywalled, unpinned).
80
+ # ---------------------------------------------------------------------------
81
+ us_standards:
82
+ no_federal_mandate: true
83
+ cnmi_position: >-
84
+ 9 CMC references no external standard. It does, however, legislate a
85
+ LEGIBILITY DISTANCE of its own — § 2106 requires the numbers to be "clearly
86
+ visible from a distance of 50 feet" — which is a Commonwealth requirement, not
87
+ an AAMVA one, and is a third of AAMVA's recommended 75 feet.
88
+ aamva_edition_3:
89
+ dimensions_delegated: "AAMVA §3.1 delegates dimensions and bolt holes to SAE J686, whose text is PAYWALLED and was NOT obtained. No J686 dimension is quoted here."
90
+ retroreflectivity: "AAMVA §3.3 recommends readability 'in both daylight and nighttime from distances of at least 75 feet'. The CNMI legislates 50 feet in § 2106 and says nothing about daylight or darkness — a materially weaker and differently-framed requirement, recorded as a real divergence"
91
+ character_layout: "AAMVA §2.2: characters at least 2.5 in high, spaced at least 0.25 in apart, stroke weight 0.2-0.4 in"
92
+ replacement_cycle: "AAMVA §1.1 recommends a 7-10 year replacement cycle. The CNMI legislates none; § 2107 expires registration annually and § 2106 requires the plate to show the YEAR, so validation rather than replacement is the mechanism"
93
+ source: "https://www.aamva.org/getmedia/646bcc8a-219b-47d8-b5cd-726240473163/License-Plate-Standard-Edition-3_September-2025-Update.pdf"
94
+
95
+ # ---------------------------------------------------------------------------
96
+ # Display rules — statutory, and the CNMI's are unusually well-motivated: the
97
+ # legislature published its reasoning when it tightened them in 2004.
98
+ # ---------------------------------------------------------------------------
99
+ display_rules:
100
+ default: >-
101
+ TWO plates, front and rear, AT THE FACTORY-DESIGNATED POSITION. § 2106,
102
+ verbatim: "Every owner whose vehicle or bicycle is registered shall display
103
+ the plates issued by the bureau showing the registration number AND YEAR. Each
104
+ of these plates shall be attached properly to the front and rear of the
105
+ vehicle or bicycle, AT THE FACTORY DESIGNATED POSITION. The plates shall be
106
+ kept clean and the numbers must be clearly visible from a distance of 50 feet.
107
+ No vehicle or bicycle owner may display an unofficial plate at the front or
108
+ rear of his vehicle or bicycle."
109
+ bicycles_included: >-
110
+ NOTE THE SWEEP, which is unusual and is not a transcription artefact: § 2106
111
+ applies to "vehicle OR BICYCLE" throughout, and § 2107 expires bicycle
112
+ registrations on the same annual cycle. The CNMI registers and plates
113
+ bicycles, and a plate dataset scoped to motor vehicles will silently miss a
114
+ real CNMI series.
115
+ legislative_reason: >-
116
+ RARE AND WORTH RECORDING. PL 14-18 (July 12, 2004), which produced the
117
+ current § 2106, published its findings: "The Legislature finds that many
118
+ vehicle owners do not display both license plates on their vehicle. Many
119
+ vehicle owners choose to only display the plates on the rear of the vehicles.
120
+ This has been problematic for the Department of Public Safety, creating
121
+ difficulty on identifying fleeing vehicles... The legislature further finds
122
+ that the bureau of Motor Vehicles issues TWO license plates upon registration
123
+ of a vehicle." So the two-plate ISSUANCE predates 2004; what 2004 added was
124
+ compulsory DISPLAY of both. That distinction dates the rule precisely and is
125
+ the reason this file's standard series starts at 2004 rather than earlier.
126
+ unofficial_plates_banned: "§ 2106's final sentence bans display of an UNOFFICIAL plate at either end — a novelty-plate prohibition in primary law"
127
+ expiration: >-
128
+ § 2107: every vehicle and bicycle registration expires ANNUALLY at midnight
129
+ on the last day of the month designated by the bureau — a staggered scheme,
130
+ like Guam's. Ten business days' grace, then a $30 late fee to a DPS special
131
+ account for BMV supplies. Since PL 22-34 (Jan. 31, 2023) an owner of two or
132
+ more vehicles may align all their expiry months for $25 per vehicle.
133
+ seizure: "§ 1209 empowers the bureau to SEIZE documents and plates — the CNMI counterpart to Puerto Rico's Art. 2.13 'plates are Department property' rule"
134
+ sources:
135
+ - "https://cnmilaw.org/pdf/cmc_section/T9/2106.pdf # § 2106 (PL 3-61 § 1(§ 206), amended PL 14-18, July 12, 2004): registration number AND year on the plate, front and rear at the factory-designated position, clean and legible at 50 feet, no unofficial plates; and the published PL 14-18 findings quoted above"
136
+ - "https://cnmilaw.org/pdf/cmc_section/T9/2107.pdf # § 2107 (PL 3-61 § 1(§ 207), amended PL 19-18 Nov. 6 2015, repealed and reenacted PL 20-90 Feb. 18 2019, amended PL 22-34 Jan. 31 2023): annual staggered expiry, 10 business days' grace, $30 late fee to the DPS/BMV special account, the $25 multi-vehicle alignment option"
137
+ - "https://cnmilaw.org/pdf/cmc_section/T9/2105.pdf # § 2105 (PL 3-61 § 1(§ 205)): the registration card's contents and the carry-in-vehicle duty"
138
+ - "https://cnmilaw.org/pdf/cmc_section/T9/1209.pdf # § 1209: the bureau's power to seize documents and plates"
139
+
140
+ series:
141
+
142
+ # =========================================================================
143
+ # THE STANDARD-ISSUE SERIES.
144
+ # =========================================================================
145
+ - id: us-mp-standard
146
+ class: standard
147
+ categories: [car, van, truck, bus, motorcycle]
148
+ period: { start: 2004 }
149
+ period_evidence: statutory-amendment-date-upper-bound
150
+ matching: strict
151
+ format:
152
+ pattern: "LLL 999"
153
+ regex: '\A[A-Z]{3} ?\d{3}\z'
154
+ regex_statutory: '\A[A-Z0-9](?: ?[A-Z0-9])*\z'
155
+ charset:
156
+ notes: >-
157
+ 9 CMC STATES NO SERIAL GRAMMAR. § 2106 requires the plate to show "the
158
+ registration number and year" and § 2105 requires the registration card
159
+ to bear "the registration number", and that is the whole of it — no
160
+ alphabet, no width, no exclusions. `regex_statutory` therefore carries no
161
+ width claim. The one place the Code DOES quantify a CNMI serial is
162
+ § 2116(c)(2), for veteran plates, and that grammar is specced separately.
163
+ pattern_note: >-
164
+ THE THREE-LETTER / THREE-NUMERAL ARRANGEMENT IS NOT STATUTORY. It comes
165
+ from a Wikipedia LOCATOR, which reports ABC 123 continuously since 1989
166
+ across two base generations. `matching: strict` because the arrangement
167
+ lies INSIDE the (empty) statutory constraint and a match is a real claim
168
+ about this series; the outer bound is `regex_statutory`.
169
+ progression: "the locator reports sequential three-letter blocks (AAA 000 onward, with a reported jump to the AD-block around 2005); the specific block boundaries are NOT asserted here"
170
+ design:
171
+ plate: { w: 12, h: 6, unit: in, w_mm: 304.8, h_mm: 152.4 }
172
+ plate_dimension_note: "NOT in any CNMI instrument; 12 x 6 in is the reported North American convention and is marked as reported. § 2116(c) confirms only that veteran plates are 'the same standard size and shape as regular passenger vehicle license plates', which fixes a RELATION without fixing a value"
173
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed-secondary }
174
+ colour_note: >-
175
+ THE BACKGROUND IS RECORDED, THE FOREGROUND DELIBERATELY IS NOT. The
176
+ locator describes "dark blue embossed serials on reflective white", and
177
+ while "reflective white" maps to #FFFFFF without invention, "dark blue"
178
+ does not map to any particular hex — assigning one would be manufacturing a
179
+ colour value out of an adjective. The foreground is therefore left absent
180
+ with its description recorded, per PRD-PLATES §9's folklore discipline.
181
+ foreground_description: "dark blue, embossed on the older base and surface-printed on the current one (locator-grade)"
182
+ legend_top: "COMMONWEALTH OF THE NORTHERN MARIANA ISLANDS"
183
+ legend_slogan: "HAFA ADAI"
184
+ legend_slogan_basis: >-
185
+ STATUTORY, AND BY A ROUTE WORTH RECORDING. 9 CMC § 2116(c)(1) specifies
186
+ the veteran plate by describing where its extra text goes relative to the
187
+ standard plate's: "BELOW THE LINE 'HAFA ADAI' will be the word 'VETERAN' or
188
+ 'DISABLED VETERAN' (in black lettering) bordered on the left by the United
189
+ States Flag and on the right by the CNMI Flag." The statute therefore takes
190
+ the existence and position of a HAFA ADAI line on the CNMI plate as given.
191
+ This is the ONLY instrument-grade design fact available for the CNMI, and it
192
+ was found in the specialty section, not the registration one.
193
+ graphic: { present: true, rendered: placeholder, description: "not described in any CNMI instrument; no graphic claim is made" }
194
+ emblem: { present: true, rendered: placeholder }
195
+ mounting_holes_reported: "one round hole top right, horizontal slots in the other three corners since 1989 — the same arrangement reported for Hawaii and Guam; locator-grade"
196
+ band: { side: none }
197
+ rear_differs: false
198
+ validation: "§ 2106 requires the YEAR on the plate itself, not merely on a sticker — the CNMI is one of the jurisdictions where the year is a plate property in law. Photographs of CNMI plates carrying month-and-year expirations (July 2025, March 2020, June 2013, March 2009) corroborate a per-month validation device in practice"
199
+ region_encoding: none
200
+ sources:
201
+ - "https://cnmilaw.org/pdf/cmc_section/T9/2106.pdf # § 2106: the plate shows the registration number AND YEAR; front and rear at the factory-designated position; legible at 50 feet; no unofficial plates. Plus the PL 14-18 (July 12, 2004) legislative findings recording that BMV already issued TWO plates before 2004"
202
+ - "https://cnmilaw.org/pdf/cmc_section/T9/2116.pdf # § 2116(c)(1): 'Below the line HAFA ADAI...' — the statutory confirmation of the standard plate's slogan line; and § 2116(c) 'the same standard size and shape as regular passenger vehicle license plates'"
203
+ - "https://cnmilaw.org/pdf/cmc_section/T9/2101.pdf # § 2101: the registration application, the lawful-ownership and FMVSS-compliance evidence, and the § 2101(d) requirement that liability insurance expire in the same month as the registration"
204
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_the_Northern_Mariana_Islands # LOCATOR ONLY (PRD-PLATES §4): the ABC 123 arrangement since 1989, the reported 1989-2005 and 2005-present base generations and their serial blocks, the dark-blue-on-reflective-white description, the embossed-to-surface-printed change, and the mounting-hole arrangement"
205
+ - "http://www.plateshack.com/y2k/Northern_Marianas/cnmiy2k.html # CORROBORATION ONLY: dated photographs of CNMI plates with July 2025, March 2020, June 2013, March 2009, 2005, 2004, 2000 and 1999 expirations, which is how the per-month validation practice was confirmed. No licence statement; no image or text copied"
206
+ - "http://www.worldlicenseplates.com/world/PA_NMAR.html # CORROBORATION + GAP-FINDER: an independent CNMI page noting historical variants — plates 'with 19 embossed after the registration', the embossed 19 removed for five-digit registrations, and one plate 'Originally a government plate, repurposed and reissued as general issue DUE TO SHORTAGE'. The shortage note is the useful one: it is direct evidence that CNMI government and general serial namespaces are not hermetically separated"
207
+ notes: >-
208
+ CNMI STANDARD ISSUE. THE ID IS DELIBERATELY UNDATED and the period is an
209
+ UPPER BOUND: `start: 2004` is the enactment of PL 14-18, whose published
210
+ findings record that BMV was ALREADY issuing two plates before that date, so
211
+ the true start of the current arrangement is earlier and the locator's 1989
212
+ figure is left in the locator where it belongs. The reported 2005 base change
213
+ is NOT minted as a boundary — it is a surface-printing-versus-embossing change
214
+ with no format consequence and no primary behind it, exactly the kind of
215
+ folklore boundary PRD-PLATES §9 warns against dating. THE ENTRY'S REAL VALUE
216
+ is the HAFA ADAI legend sourced to an edict, and the worldlicenseplates
217
+ shortage finding, which tells any future decode effort that CNMI government
218
+ plates have at least once been recycled into general issue.
219
+
220
+ # =========================================================================
221
+ # CORE DISTINCT CLASSES.
222
+ # =========================================================================
223
+ - id: us-mp-government
224
+ class: government
225
+ categories: [car, van, truck, bus]
226
+ period: { start: 2026 }
227
+ period_evidence: instrument-in-force-upper-bound
228
+ matching: recall-only
229
+ format:
230
+ pattern: "LLL 999"
231
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9])*\z'
232
+ charset: { notes: "no grammar stated; § 2109 addresses only what a government plate need NOT display" }
233
+ pattern_note: "ILLUSTRATIVE PATTERN, CATCH-ALL REGEX. `matching: recall-only` — a match is a shape hit and never a claim that the string is a valid CNMI government plate."
234
+ design:
235
+ plate: { note: "not stated" }
236
+ emblem: { present: true, rendered: placeholder }
237
+ validity: >-
238
+ PERMANENT. § 2109(a)(2): the registration and registration card for a
239
+ Commonwealth-owned vehicle "need not be renewed annually but remains valid
240
+ until the certificate of ownership for the vehicle is suspended, revoked or
241
+ canceled by the bureau for cause or upon transfer of any interest in the
242
+ certificate of ownership." On a change of ownership the vehicle is
243
+ re-registered as a private vehicle and the special plates are surrendered.
244
+ § 2109(a)(3) reserves the bureau's power to suspend, cancel, revoke or renew
245
+ such a registration when reissue is advisable.
246
+ scope: "§ 2109(b): 'Each vehicle purchased from revenue of the Commonwealth government, INCLUDING ITS GOVERNMENT CORPORATIONS, AGENCIES, BOARDS OR COMMISSIONS, shall display a government license plate' — the test is the source of the purchase funds, not the identity of the registered owner"
247
+ textual_anomaly: >-
248
+ RECORDED, NOT SILENTLY CORRECTED. § 2109(a)(1) as served reads: "A license
249
+ plate issued for any vehicle while publicly owned NEED NOT DISPLAY A
250
+ DISTINGUISHING SYMBOL, WORD OR LETTER." Its evident model — Guam's 16 GCA
251
+ § 7136(a), which shares the provision's structure and much of its wording —
252
+ reads the other way round: a government plate need not display THE YEAR
253
+ NUMBER, "but SHALL display a distinguishing symbol, word or letter". The CNMI
254
+ text as compiled therefore appears to have lost the year-number exemption and
255
+ inverted the distinguishing-mark duty. This is flagged as a probable
256
+ compilation or drafting defect and is NOT relied upon in either direction;
257
+ PRD-PLATES §5.3 says record disagreements rather than average them, and the
258
+ same discipline applies to a text that disagrees with itself.
259
+ region_encoding: none
260
+ sources:
261
+ - "https://cnmilaw.org/pdf/cmc_section/T9/2109.pdf # § 2109 (PL 3-61 § 1(§ 209), amended PL 6-5 § 303): the government-plate provisions in full, including the anomalous (a)(1) quoted above, permanent non-renewing registration, surrender and re-registration on transfer, the bureau's reissue power, and the (b) purchased-from-Commonwealth-revenue test"
262
+ - "https://col.guamcourts.gov/sites/default/files/16gc007_0.pdf # Guam 16 GCA § 7136(a), cited ONLY as the comparator that makes the CNMI text's anomaly visible — the two provisions are structurally parallel and read oppositely on the same point"
263
+ - "http://www.worldlicenseplates.com/world/PA_NMAR.html # CORROBORATION: a photographed 1978-series CNMI GOVERNMENT VEHICLE plate, and the note that a government plate was once repurposed and reissued as general issue during a shortage"
264
+ notes: >-
265
+ CNMI GOVERNMENT PLATES. THE PERMANENT-REGISTRATION FACT is the one to carry
266
+ into the parse layer: a CNMI government plate never expires, so the year that
267
+ § 2106 requires on every other plate cannot be relied on here, and
268
+ era-inference from a validation device silently fails on this series.
269
+ `period: {start: 2026}` is the year the Commonwealth Code was read and is an
270
+ upper bound; § 2109's own source line cites PL 3-61 and PL 6-5, for neither of
271
+ which the Commission's text supplies a date, so no earlier year could be
272
+ claimed without inventing it.
273
+
274
+ - id: us-mp-veteran
275
+ class: specialty
276
+ categories: [car, motorcycle]
277
+ period: { start: 2013 }
278
+ period_evidence: statutory-amendment-date-upper-bound
279
+ matching: strict
280
+ format:
281
+ pattern: "L999"
282
+ regex: '\A[A-Z]{1,2}\d{3}\z'
283
+ charset:
284
+ notes: >-
285
+ THE ONLY FULLY-STATED SERIAL GRAMMAR IN CNMI LAW, and it is stated by
286
+ example. § 2116(c)(2), verbatim: "On the next line, centered on the
287
+ license plate, will be the license plate number (IN BLUE LETTERING) IN
288
+ ALPHA NUMERIC FORMAT DESIGNATING BRANCH OF SERVICE AND NUMERICAL
289
+ SEQUENCE. For example, A001 (Army), NG045 (National Guard), or R610
290
+ (Reserves)." Three worked examples give a one- or two-letter branch code
291
+ followed by a three-digit sequence, which is exactly what the regex
292
+ encodes. The branch codes themselves are NOT enumerated in the statute —
293
+ A, NG and R are illustrations, not a closed set — so no decode table is
294
+ asserted.
295
+ progression: "numerical sequence within each branch code"
296
+ design:
297
+ plate: { note: "§ 2116(c): 'the same standard size and shape as regular passenger vehicle license plates' — a stated RELATION to the standard plate rather than an absolute value" }
298
+ legend_slogan: "HAFA ADAI"
299
+ legend_class: "§ 2116(c)(1): below the HAFA ADAI line, the word 'VETERAN' or 'DISABLED VETERAN' in BLACK lettering, bordered on the left by the United States Flag and on the right by the CNMI Flag"
300
+ foreground_class_line: "black lettering for the VETERAN / DISABLED VETERAN line (§ 2116(c)(1)); BLUE lettering for the serial (§ 2116(c)(2)) — the CNMI legislates two different ink colours on one plate, and names neither in a specifiable value"
301
+ accessibility_symbol: "§ 2116(c)(2): for a qualified person with a disability, the veteran plate additionally displays the International Symbol of Accessibility 'in the same size as the letters and numbers on the license plate'"
302
+ emblem: { present: true, rendered: placeholder }
303
+ eligibility: >-
304
+ § 2116(a): "veteran" means a person who served on active duty or in a
305
+ reserve component of any branch of the US Armed Forces and was discharged or
306
+ released under conditions other than dishonorable; "disabled veteran" adds
307
+ certification of at least 10% service-related disability. § 2116(b) accepts a
308
+ DD214, or failing that a certification from the Military and Veterans Affairs
309
+ Office or a VA-issued Veteran Identification Card.
310
+ fee: >-
311
+ § 2116(d): 25% LESS than the fee for a similar plate for the same class of
312
+ vehicle; entirely FREE for a veteran rated by the VA at 100% permanent and
313
+ total disability, on production of the Regional VA Office decision letter.
314
+ issuance_rules: >-
315
+ § 2116(e): issued only to the registered owner or lessee; expressly NOT
316
+ limited to one vehicle per veteran; not transferable to any other person,
317
+ except that the Commissioner "shall allow the SURVIVOR of the qualified
318
+ person, upon request, TO RETAIN THE FRONT LICENSE PLATE AS A MEMORIAL" —
319
+ which is a genuinely distinctive statutory provision, and one that only makes
320
+ sense in a two-plate jurisdiction. Assigned to non-commercial passenger motor
321
+ vehicles and non-commercial MOTORCYCLES.
322
+ region_encoding: none
323
+ sources:
324
+ - "https://cnmilaw.org/pdf/cmc_section/T9/2116.pdf # § 2116 (PL 14-16 § 3; (d) amended PL 18-22 § 2, Oct. 8 2013; (g)-(h) enacted PL 19-26 § 2, Dec. 14 2015; amended PL 20-37 § 2, Jan. 18 2018; (a) and (b)(1) amended PL 24-23 § 2, Mar. 11 2026): the veteran/disabled-veteran definitions and proofs, the HAFA ADAI-relative layout, the two ink colours, the branch-code-plus-sequence serial with its three worked examples, the accessibility symbol, the 25%/100% fee rules, the multi-vehicle and non-transferability rules, and the survivor memorial provision"
325
+ notes: >-
326
+ CNMI VETERAN AND DISABLED VETERAN PLATES. SPECCED SEPARATELY FROM THE
327
+ SPECIALTY INDEX, and deliberately so: PRD-PLATES §2.5 excludes individual
328
+ specialty DESIGNS from L2, but this series carries a FORMAT — a real,
329
+ statutory, alpha-numeric grammar with worked examples — and a format is
330
+ exactly what the dataset exists to hold. PERIOD CAVEAT, STATED PLAINLY:
331
+ § 2116 was enacted by PL 14-16, for which the Commission's source line gives
332
+ NO DATE. The earliest DATED instrument in its amendment chain is PL 18-22 § 2
333
+ (Oct. 8, 2013), so 2013 is an UPPER BOUND on the true start, not the start.
334
+ CLASS CAVEAT: recorded as `specialty` because _meta/classes.yml's `military`
335
+ value means armed-forces REGISTRATION SYSTEMS, which this is not — it is a
336
+ civilian plate recognising prior service.
337
+
338
+ # =========================================================================
339
+ # SPECIALTY — INDEX ONLY, per PRD-PLATES §2.5.
340
+ # =========================================================================
341
+ - id: us-mp-specialty-index
342
+ class: specialty
343
+ categories: [car, van, truck, motorcycle]
344
+ period: { start: 2015 }
345
+ period_evidence: statutory-enactment-date
346
+ matching: recall-only
347
+ format:
348
+ pattern: "LLL 999"
349
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9])*\z'
350
+ charset: { notes: "the one CNMI specialty grammar that IS stated — the veteran branch-code format — is specced at us-mp-veteran; nothing is stated for the rest" }
351
+ pattern_note: "illustrative only — this is an INDEX entry, not a spec"
352
+ design:
353
+ plate: { note: "one design per programme; the designs themselves are L4 scope (PRD-PLATES §2.5) and none is described here" }
354
+ emblem: { present: true, rendered: placeholder }
355
+ program_index:
356
+ count_statutory: 3
357
+ count_basis: >-
358
+ THREE PROGRAMMES ARE CREATED BY 9 CMC ITSELF, all of them inside a single
359
+ section. This is the smallest statutory specialty catalogue found anywhere
360
+ in the US pass, and its smallness is a finding rather than a gap: the CNMI
361
+ legislature has simply not built the sprawling optional-plate market that
362
+ Florida (over 100 programmes) or Texas (506) have.
363
+ statutory_programs:
364
+ - "§ 2116(a)-(f) — VETERAN plates (specced separately as us-mp-veteran because its serial grammar is statutory)"
365
+ - "§ 2116(a)-(f) — DISABLED VETERAN plates, distinguished by the class legend and by the addition of the International Symbol of Accessibility for a qualified person with a disability"
366
+ - "§ 2116(g)-(h) — SPECIAL GOLD STAR plates, enacted by PL 19-26 § 2 (Dec. 14, 2015): issued by BMV on application, type and style set by the Director of BMV together with the Office of Veterans Affairs, 'except that A GOLD STAR SHALL APPEAR ON ONE SIDE OF THE PLATE'; reissued to the original holder; eligibility limited to bereaved parents, stepparents, adoptive and foster parents in loco parentis, children, stepchildren and children through adoption; the fee may not exceed that for a similar plate of the same vehicle class"
367
+ cross_jurisdiction_note: >-
368
+ THE GOLD STAR PROVISION IS NEARLY WORD-FOR-WORD GUAM'S. Compare 16 GCA
369
+ § 7120.3 ("The type and style of the gold star license plates shall be
370
+ determined by the Director ... except that a gold star shall appear on one
371
+ (1) side of the license plate") with 9 CMC § 2116(g). Guam enacted its
372
+ version in P.L. 30-062 (Nov. 27, 2009); the CNMI enacted its version in
373
+ PL 19-26 (Dec. 14, 2015), six years later. This is a documented instance of
374
+ one territory's plate statute being copied by another, and it is worth
375
+ recording because it means the two jurisdictions' gold-star series can be
376
+ expected to behave identically — and because it is a warning that apparent
377
+ independent corroboration between Guam and CNMI sources may be common
378
+ ancestry rather than agreement.
379
+ official_list_url: "https://www.cnmilaw.org/cmc.php"
380
+ official_list_note: >-
381
+ THE STATUTE IS THE CATALOGUE. The Department of Public Safety's site
382
+ returned HTTP 401 throughout and BMV publishes no reachable specialty
383
+ gallery, so 9 CMC § 2116 is the only enumeration available. Whether the
384
+ CNMI Administrative Code carries BMV regulations adding further programmes
385
+ was NOT determined (recorded gap): the NMIAC is served by title at
386
+ cnmilaw.org but no motor-vehicle title was identified in this pass.
387
+ churn_note: "no discontinuation duty analogous to Florida's § 320.08056(8)(a) appears in 9 CMC; CNMI programmes are added by public law and are not automatically retired"
388
+ region_encoding: none
389
+ sources:
390
+ - "https://cnmilaw.org/pdf/cmc_section/T9/2116.pdf # § 2116 in full — the veteran, disabled veteran and gold star programmes, with their per-programme public-law enactment and amendment dates"
391
+ - "https://www.cnmilaw.org/cmc.php # the Commonwealth Code index served by the CNMI Law Revision Commission — the section-by-section source for all of Title 9 used here, and the only reachable official enumeration"
392
+ - "https://col.guamcourts.gov/sites/default/files/16gc007_0.pdf # Guam 16 GCA § 7120.3, cited as the evident source text for the CNMI gold-star provision — the common-ancestry finding recorded above"
393
+ notes: >-
394
+ THE SPECIALTY PROGRAM INDEX — one entry standing for the whole programme, per
395
+ PRD-PLATES §2.5. TWO THINGS WORTH CARRYING FORWARD. First, THREE PROGRAMMES
396
+ IS THE WHOLE STATUTORY CATALOGUE, which makes the CNMI the cleanest specialty
397
+ index in the dataset and a useful counterexample to the assumption that every
398
+ US jurisdiction runs a sprawling optional-plate market. Second, THE
399
+ GOLD-STAR TEXT IS BORROWED FROM GUAM, which is a methodological finding as
400
+ much as a factual one: two territory statutes agreeing is not two
401
+ independent sources, and any verifier treating Guam and CNMI as
402
+ cross-corroborating should check for shared drafting first.