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,411 @@
1
+ # plates/us-mn.yml — Minnesota (PRD-PLATES gate L2, group midwest-b).
2
+ #
3
+ # MINNESOTA'S STATUTE IS THE MOST PHYSICALLY SPECIFIC IN THIS GROUP AND THE LEAST
4
+ # FORMAT-SPECIFIC. Minn. Stat. § 168.12 subd. 1 will tell you that a plate must be
5
+ # "at least 100 times brighter than the conventional painted number plates" and
6
+ # must be "visible for a distance of not less than 1,500 feet and readable for a
7
+ # distance of not less than 110 feet" from a vehicle with standard headlights —
8
+ # a testable photometric specification of a kind no other state in group
9
+ # midwest-b legislates. It will not tell you how many characters are on the
10
+ # plate or in what order. That asymmetry drives this whole file.
11
+ #
12
+ # THREE MINNESOTA FACTS WORTH THE READER'S ATTENTION:
13
+ #
14
+ # 1. THE PLATE ENCODES WEIGHT, NOT GEOGRAPHY. § 168.12 subd. 1(b): "When a
15
+ # vehicle is registered on the basis of total gross weight, the plates issued
16
+ # must clearly indicate by letters or other suitable insignia the maximum
17
+ # gross weight for which the tax has been paid." Minnesota is the only state
18
+ # in this group with a statutory weight-class encoding on the plate itself.
19
+ #
20
+ # 2. THE PLATE CAN SAY "NONCOMMERCIAL". § 168.12 subd. 1(c) requires that legend
21
+ # on noncommercial-vehicle plates unless a special plate is displayed — a
22
+ # mandated negative legend, which is an unusual instrument.
23
+ #
24
+ # 3. MINNESOTA REGISTERS ROADABLE AIRCRAFT WITH THEIR FAA TAIL NUMBERS.
25
+ # § 168.12 subd. 1(i), in terms. That is a direct, statutory bridge between
26
+ # this dataset's road layer and the aircraft layer PRD-PLATES §7 puts at gate
27
+ # L6, and it is specified below as its own series because it genuinely is one.
28
+ #
29
+ # WHAT THIS FILE COULD NOT GET: Minnesota's serial ARRANGEMENT and its current
30
+ # base design. § 168.12 delegates both to the commissioner's rules, and the
31
+ # Minnesota DVS website sits behind a bot-protection layer that refused every
32
+ # request in this pass. The standard series is therefore `recall-only` and its
33
+ # arrangement is a recorded gap, not a guess.
34
+ jurisdiction: us-mn
35
+ authority:
36
+ name: Minnesota Department of Public Safety, Driver and Vehicle Services (DVS)
37
+ url: "https://www.revisor.mn.gov/statutes/cite/168.12"
38
+ binding: vehicle
39
+ statute_edition: "Minnesota Statutes Chapter 168 (Vehicle Registration, Taxation, Sale), §§ 168.10 and 168.12 as published by the Office of the Revisor of Statutes at revisor.mn.gov. § 168.12 was last amended by 2024 c 104 art 1 s 17, so the design provisions read here are current to the 2024 session."
40
+
41
+ # ---------------------------------------------------------------------------
42
+ # artwork_risk — required per jurisdiction by PRD-PLATES §4. Minnesota is one of
43
+ # only two states in group midwest-b for which ANY evidence exists — and the
44
+ # evidence is that the question is genuinely open.
45
+ # ---------------------------------------------------------------------------
46
+ artwork_risk:
47
+ posture: contested-unresolved
48
+ basis: >-
49
+ MINNESOTA IS THE ONE STATE IN THIS GROUP WHERE THE COPYRIGHT QUESTION HAS BEEN
50
+ LITIGATED IN OPINIONS AND STILL HAS NO ANSWER. Two official Minnesota legal opinions
51
+ conflict and no court has resolved them. A state commissioner's statement of December
52
+ 1994 reads, in part, that 'unless specified by the legislature, the public's right of
53
+ access to and use of public government data cannot be curtailed by a government
54
+ entity's claim of intellectual property rights in those data' — language a reader
55
+ might take for a public-domain rule. An Attorney General statement of December 1995
56
+ expressly contradicts that reading, claims higher authority, and confines the earlier
57
+ statement to ACCESS rather than COPYRIGHT, offering the narrower phrasing that 'The
58
+ department may not assert copyright ownership to deny members of the public their
59
+ right "to inspect and copy public government data at reasonable times and places"
60
+ under Minn. Stat. § 13.03, subd. 3'.
61
+ THE STATUTE ITSELF POINTS THE OTHER WAY, and narrowly. Minn. Stat. § 13.03 subd. 5,
62
+ FETCHED AND READ FOR THIS FILE, provides verbatim: 'A government entity may enforce a
63
+ copyright or acquire a patent for a COMPUTER SOFTWARE PROGRAM or components of a
64
+ program created by that government entity without statutory authority. In the event
65
+ that a government entity acquires a patent to a computer software program or component
66
+ of a program, the data shall be treated as trade secret information pursuant to section
67
+ 13.37.' Expressly authorising copyright for software and for nothing else is weak
68
+ evidence that other works are free and weak evidence that they are protected — it is
69
+ simply a provision about software.
70
+ (Textual note, since this file quotes a primary against a secondary: the survey renders
71
+ the opening words as 'may enforce copyright'; the statute as served by the Revisor reads
72
+ 'may enforce A copyright'. Immaterial to the meaning, recorded because the primary was
73
+ read rather than trusted.)
74
+ CONCLUSION: contested and unresolved. Treat Minnesota plate ARTWORK as protected by
75
+ default, per the dossier's rule that state works are presumed copyrighted absent a
76
+ contrary declaration, and note that Minnesota has arguably made a contrary declaration
77
+ that its own Attorney General has disclaimed. Do not record Minnesota as public domain
78
+ on the strength of the 1994 statement.
79
+ edict_carve_out: >-
80
+ Every claim in this file cites the Minnesota Statutes. Edicts of government are
81
+ uncopyrightable at every level ({{PD-US-GovEdict}}), and this carve-out is doing more
82
+ work in Minnesota than elsewhere precisely BECAUSE the general posture is contested:
83
+ the photometric specification, the weight-encoding rule, the 'noncommercial' legend,
84
+ the seven-year plate period and the roadable-aircraft rule are all free to use
85
+ whatever the answer on artwork turns out to be.
86
+ emblem_rule: >-
87
+ PRD-PLATES §3's placeholder default applies to whatever graphic the current Minnesota
88
+ base carries — which this pass could not identify, since the DVS site refused every
89
+ request. Render `emblem: {present: true, rendered: placeholder}`. Minnesota state-seal
90
+ misuse statutes are a protection regime independent of copyright and are unresearched.
91
+ sources:
92
+ - "https://en.wikipedia.org/wiki/Copyright_status_of_works_by_subnational_governments_of_the_United_States # LOCATOR ONLY (PRD-PLATES §4): the Minnesota section, which sets out the conflicting 1994 commissioner and 1995 Attorney General statements and quotes Minn. Stat. § 13.03 subd. 5. The conflict is recorded here, not resolved (PRD-PLATES §5.3)"
93
+ - "https://www.revisor.mn.gov/statutes/cite/13.03 # Minn. Stat. § 13.03 subd. 5, FETCHED AND READ: the software-only copyright authorization and its trade-secret consequence — an edict, PD, and the primary the secondary account turns on"
94
+
95
+ us_standards:
96
+ no_federal_mandate: true
97
+ chain: "SAE J686 -> AAMVA License Plate Standard Edition 3 (September 2025) -> voluntary state adoption. AAMVA has no enforcement power; its declarative present is RECOMMENDED PRACTICE."
98
+ dimensions_delegated: "AAMVA §3.1 sends dimensions and bolt holes to SAE J686, whose text is PAYWALLED and UNPINNED. No J686 dimension is quoted anywhere in this file."
99
+ geometry_available: "AAMVA §2.1 (jurisdiction name top-centre between the bolt holes, >=0.25 in above the number, >=0.125 in from the top edge, characters 0.75-1.0 in) and §2.2 (characters >=2.5 in high, >=0.25 in apart, stroke 0.2-0.4 in, >=1.25 in clear of top and bottom)."
100
+ retroreflectivity: >-
101
+ AAMVA §3.3 asks for legibility 'in both daylight and nighttime from distances of at
102
+ least 75 feet', with ASTM D4956-19 and ISO 7591:1982 clause 3 as the materials
103
+ standards and a minimum 45 cd/lx/m^2 at 0.2 deg entrance / -4 deg observation.
104
+ MINNESOTA'S OWN STATUTORY SPECIFICATION IS FAR MORE DEMANDING and is expressed
105
+ differently — see `design.photometric_spec` on us-mn-standard: 100x brighter than
106
+ conventional painted plates, visible at 1,500 feet, readable at 110 feet. Minnesota's
107
+ 110-foot READABILITY floor is not directly comparable to AAMVA's 75-foot legibility
108
+ figure, but it is plainly stricter, and it is in statute rather than in a recommendation.
109
+ replacement_cycle_recommendation: "AAMVA §1.1 recommends a cycle 'not to exceed 7 to 10 years'. MINNESOTA LEGISLATED SEVEN — the bottom of AAMVA's range and a genuine mandatory replacement, not a floor. See `replacement_cycle` on us-mn-standard."
110
+ source: "https://www.aamva.org/getmedia/646bcc8a-219b-47d8-b5cd-726240473163/License-Plate-Standard-Edition-3_September-2025-Update.pdf"
111
+ folklore_caution: >-
112
+ The '1956 AMA standardization agreement' is UNCITED in its Wikipedia source (a
113
+ `citation needed` since 2017, copied across articles). Recorded as COMMONLY REPEATED,
114
+ UNSOURCED. A second piece of Minnesota-specific folklore is flagged here for the same
115
+ treatment: the widely repeated claim that Minnesota's base design dates from 1978 and
116
+ is among the oldest in continuous US use appears in the dossier only as a WIKIPEDIA
117
+ assertion, and § 168.12's seven-year mandatory REPLACEMENT cycle concerns the physical
118
+ plate rather than the design. Neither the 1978 date nor its continuity is asserted
119
+ anywhere in this file; both are recorded as unsourced.
120
+
121
+ # ---------------------------------------------------------------------------
122
+ # Display rules. NOT ESTABLISHED — recorded as a gap rather than assumed.
123
+ # ---------------------------------------------------------------------------
124
+ display_rules:
125
+ status: not-established
126
+ note: >-
127
+ MINNESOTA'S PLATE-DISPLAY RULES LIVE IN Minn. Stat. § 169.79, WHICH WAS NOT READ IN
128
+ THIS PASS. § 168.12 subd. 1(f)(4) cross-references it, so its existence and relevance
129
+ are sourced, but its contents are not. Whether Minnesota requires one plate or two,
130
+ and where, is therefore NOT recorded here. This is a deliberate omission: the
131
+ front-plate question is exactly the kind of per-state statutory fact the dossier warns
132
+ against importing from an aggregate table (§1.2 — 'The dataset should model
133
+ front-plate requirement as a per-jurisdiction field with a statute citation, not import
134
+ a list'), and no Minnesota statute stating it was fetched.
135
+ follow_up: "read Minn. Stat. § 169.79 and record display, mounting and orientation from it"
136
+ sources:
137
+ - "https://www.revisor.mn.gov/statutes/cite/168.12 # Minn. Stat. § 168.12 subd. 1(f)(4) cross-references § 169.79 for veterans' plates issued for life — the pointer establishing where Minnesota's display rules live"
138
+
139
+ series:
140
+
141
+ # =========================================================================
142
+ # THE STANDARD-ISSUE SERIES — photometrically specified, format-delegated.
143
+ # =========================================================================
144
+ - id: us-mn-standard
145
+ class: standard
146
+ categories: [car, van, truck, bus]
147
+ period: { start: 2024 }
148
+ period_evidence: instrument-in-force-upper-bound
149
+ matching: recall-only
150
+ format:
151
+ pattern: "999LLL"
152
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,6}\z'
153
+ charset:
154
+ notes: >-
155
+ § 168.12 subd. 1(a) is the whole statutory constraint on the serial, and it is
156
+ almost content-free: the commissioner issues plates 'bearing the state name and
157
+ an assigned vehicle registration number', and 'The number assigned by the
158
+ commissioner may be a combination of a letter or sign with figures.' The
159
+ arrangement is then delegated outright — the plates 'must be lettered, spaced, or
160
+ distinguished to suitably indicate the registration of the vehicle ACCORDING TO
161
+ THE RULES OF THE COMMISSIONER.' NO WIDTH, NO ARRANGEMENT and NO LETTER EXCLUSIONS
162
+ appear in the statute. Note the striking phrase 'a letter or SIGN with figures':
163
+ Minnesota law contemplates a non-alphanumeric SIGN in a registration number,
164
+ which if ever exercised would be a `never_separator` amendment under
165
+ PRD-PLATES §2.6 rule 3. No such sign is known to be in use.
166
+ pattern_note: >-
167
+ REPRESENTATIVE SHAPE ONLY, on the nl-export precedent, AND AN HONEST ADMISSION.
168
+ Neither Minnesota's serial width nor its arrangement was sourced in this pass: the
169
+ statute delegates both to the commissioner's rules, the relevant rules were not
170
+ located (Minnesota Rules chapter 7410 was fetched and is DRIVER LICENSING, not
171
+ plates), and the DVS website refused every request behind a bot-protection layer.
172
+ The regex is therefore the widest defensible alphanumeric frame and
173
+ `matching: recall-only` states plainly that a hit is a shape hit and nothing more.
174
+ Pinning the Minnesota arrangement is the single highest-value follow-up in this
175
+ group, because Minnesota is its largest state by vehicle count.
176
+ design:
177
+ contrast_rule: "§ 168.12 subd. 1(a): 'The color of the plates and the color of the abbreviation of the state name and the number assigned must be in marked contrast.'"
178
+ photometric_spec: >-
179
+ THE MOST DEMANDING PLATE SPECIFICATION IN GROUP MIDWEST-B, and it is legislated
180
+ rather than recommended. § 168.12 subd. 1(e), verbatim: 'The plates must be so
181
+ treated as to be at least 100 times brighter than the conventional painted number
182
+ plates. When properly mounted on an unlighted vehicle, the plates, when viewed from
183
+ a vehicle equipped with standard headlights, must be visible for a distance of not
184
+ less than 1,500 feet and readable for a distance of not less than 110 feet.' Three
185
+ testable quantities — a brightness RATIO against a named baseline, a visibility
186
+ distance and a readability distance — where most states legislate the word
187
+ 'reflectorized' and stop.
188
+ weight_encoding: >-
189
+ § 168.12 subd. 1(b), verbatim: 'When a vehicle is registered on the basis of total
190
+ gross weight, the plates issued must clearly indicate by letters or other suitable
191
+ insignia the maximum gross weight for which the tax has been paid.' This is a
192
+ WEIGHT-CLASS ENCODING ON THE PLATE, mandated by statute — the Minnesota analogue of
193
+ a region code, and the reason `region_encoding` below is not simply 'none'. The
194
+ letters or insignia used, and their mapping to weight bands, are set by the
195
+ commissioner and were NOT obtained (recorded gap).
196
+ noncommercial_legend: >-
197
+ § 168.12 subd. 1(c), verbatim: 'Plates issued to a noncommercial vehicle must bear
198
+ the inscription "noncommercial" unless the vehicle is displaying a special plate
199
+ authorized and issued under this chapter.' A mandated NEGATIVE legend — the plate
200
+ declares what the vehicle is not — and one that a special plate switches off, so
201
+ the legend's absence proves nothing about the vehicle.
202
+ one_ton_pickup_rule: "§ 168.12 subd. 1(d): a one-ton pickup truck used for commercial purposes and subject to § 168.185 is nonetheless eligible to display special plates authorized under the chapter"
203
+ colour_note: >-
204
+ NO HEX IS RECORDED. § 168.12 mandates 'marked contrast' and a brightness ratio but
205
+ names no colour, and no Minnesota departmental colour specification or DVS page was
206
+ reachable. Recorded gap rather than an eyedropped value.
207
+ emblem: { present: true, rendered: placeholder }
208
+ replacement_cycle:
209
+ years: 7
210
+ statutory_text: >-
211
+ § 168.12 subd. 1(f)(2): 'Plates issued for passenger automobiles must be issued for
212
+ a seven-year period. All plates issued under this paragraph must be replaced if they
213
+ are seven years old or older at the time of registration renewal or will become so
214
+ during the registration period.'
215
+ note: >-
216
+ A GENUINE MANDATORY REPLACEMENT, at the bottom of AAMVA §1.1's recommended 7-to-10
217
+ year band — and note the forward-looking trigger, which is a nice piece of drafting:
218
+ a plate must be replaced not only if it IS seven years old at renewal but if it WILL
219
+ BECOME so during the coming registration period, so no plate is ever lawfully driven
220
+ past seven years. Contrast Missouri, whose statute sets a six-year FLOOR and no
221
+ ceiling, and North Dakota, which legislates no cycle at all.
222
+ other_classes: "§ 168.12 subd. 1(f)(5): plates for vehicles not otherwise specified 'must be issued for the life of the vehicle' — so the seven-year rule is a PASSENGER-CAR rule, and a Minnesota trailer or truck plate may be arbitrarily old and still current"
223
+ exempt_agency_plates: "§ 168.12 subd. 1(f)(1): plates issued under § 168.012 subd. 1 to an exempt agency last as long as the agency owns the vehicle, are not transferable between vehicles, but MAY transfer with the vehicle from one tax-exempt agency to another"
224
+ veterans_plates: "§ 168.12 subd. 1(f)(4): plates under subds. 2c and 2d and §§ 168.123, 168.1235 and 168.1255 are issued for the LIFE OF THE VETERAN under § 169.79"
225
+ stickers: "§ 168.12 subd. 1(g): in a year in which plates are not issued the commissioner issues a registration sticker showing the year or years for which it is issued; plates and stickers may not be transferred to another vehicle during that period, except for vehicles registered under § 168.187"
226
+ driver_education_transfer: "§ 168.12 subd. 1(h): plates on a vehicle used for behind-the-wheel instruction in a public-school driver education course may be transferred to another vehicle used for the same purpose without any additional fee, on notice to the commissioner"
227
+ region_encoding:
228
+ geographic: none
229
+ weight_class: >-
230
+ PRESENT AND STATUTORY, though not geographic: § 168.12 subd. 1(b) requires
231
+ gross-weight-registered vehicles to carry letters or insignia indicating the maximum
232
+ gross weight for which tax has been paid. A Minnesota plate on a weight-registered
233
+ vehicle therefore decodes to a WEIGHT BAND, which is a real decode target for the
234
+ parse API and is the Minnesota entry in this dataset's region_encoding slot.
235
+ decode_status: "the letter-or-insignia to weight-band mapping is set by the commissioner and was NOT obtained (recorded gap); a decode file is warranted once it is"
236
+ decode_file_planned: "plates/_decode/us-mn-gross-weight-letters.yml"
237
+ sources:
238
+ - "https://www.revisor.mn.gov/statutes/cite/168.12 # Minn. Stat. § 168.12 subd. 1(a): state name and assigned number, 'a combination of a letter or sign with figures', marked contrast, and delegation of lettering and spacing to the commissioner's rules; (b) the gross-weight letters or insignia; (c) the mandatory 'noncommercial' inscription and its special-plate exception; (d) the one-ton pickup rule; (e) the 100x brightness ratio, 1,500-foot visibility and 110-foot readability; (f)(1)-(5) the issuance periods including the seven-year passenger replacement and the life-of-vehicle default; (g) stickers in non-issue years; (h) the driver-education transfer. History: 2024 c 104 art 1 s 17"
239
+ - "https://www.aamva.org/getmedia/646bcc8a-219b-47d8-b5cd-726240473163/License-Plate-Standard-Edition-3_September-2025-Update.pdf # AAMVA Ed.3 §1.1's 7-10 year recommendation, whose floor Minnesota legislated, and §3.3's 75-foot legibility figure against which Minnesota's statutory photometrics are markedly stricter"
240
+ notes: >-
241
+ MINNESOTA STANDARD ISSUE. THE ID IS DELIBERATELY UNDATED and the series is
242
+ deliberately `recall-only`, and the two go together: Minnesota legislates how BRIGHT
243
+ a plate must be and how LONG it may live, but delegates what is printed on it, so
244
+ this dataset can state Minnesota's physics precisely and its grammar not at all.
245
+ Recording that split honestly is more useful than a plausible-looking regex would be.
246
+ PERIOD CAVEAT: `start: 2024` is the last amendment year of § 168.12 and is an UPPER
247
+ BOUND on the true start of the current base, not a claim about it. THE ONE SERIES
248
+ BACK IS A RECORDED GAP: no primary establishing any Minnesota base-design boundary was
249
+ obtained, the DVS site was unreachable, and the commonly repeated 1978 date is
250
+ Wikipedia-grade and is not asserted here (see us_standards.folklore_caution).
251
+
252
+ # =========================================================================
253
+ # ROADABLE AIRCRAFT — the statutory bridge to the aircraft layer. This is a
254
+ # real series with a real, fully-specified format that Minnesota did not write.
255
+ # =========================================================================
256
+ - id: us-mn-roadable-aircraft
257
+ class: standard
258
+ categories: [aircraft]
259
+ period: { start: 2024 }
260
+ period_evidence: instrument-in-force-upper-bound
261
+ matching: strict
262
+ format:
263
+ pattern: "N99999"
264
+ regex: '\AN\d{1,5}[A-Z]{0,2}\z'
265
+ charset:
266
+ notes: >-
267
+ MINNESOTA ADOPTS A FEDERAL FORMAT BY REFERENCE. § 168.12 subd. 1(i), verbatim:
268
+ 'In lieu of plates required under this section, the commissioner must issue a
269
+ registration number identical to the federally issued tail number assigned to a
270
+ roadable aircraft.' The grammar is therefore 14 CFR 47.15(b)'s, not Minnesota's:
271
+ 'A U.S. registration number may not exceed five symbols in addition to the prefix
272
+ letter "N". These symbols may be all numbers (N10000), one to four numbers and one
273
+ suffix letter (N 1000A), or one to three numbers and two suffix letters (N 100AB).
274
+ The letters "I" and "O" may not be used. The first zero in a number must always be
275
+ preceded by at least one of the numbers 1 through 9.'
276
+ excluded: ["I", "O"]
277
+ excluded_basis: "14 CFR 47.15(b): 'The letters \"I\" and \"O\" may not be used' — a federal exclusion, and the only sourced letter exclusion anywhere in group midwest-b"
278
+ regex_strict: '\AN(?:[1-9]\d{0,4}|[1-9]\d{0,3}[A-HJ-NP-Z]|[1-9]\d{0,2}[A-HJ-NP-Z]{2})\z'
279
+ pattern_note: >-
280
+ `regex` is the shape of an N-number; `regex_strict` is the AUTHORITY'S OWN GRAMMAR
281
+ and narrows it on two counts the round-trippable form cannot carry — the I/O
282
+ exclusion, spelled as the ranges A-H, J-N and P-Z, and the leading-zero prohibition,
283
+ spelled by requiring the first symbol after N to be 1-9. This is a textbook case of
284
+ why PRD-PLATES §2.7's strict twin exists: the charset restriction is real, sourced
285
+ and unrepresentable in a regex that must round-trip a human pattern.
286
+ design:
287
+ note: "no plate design is prescribed — subd. 1(i) issues a registration NUMBER 'in lieu of plates required under this section', so what is displayed is the aircraft's existing tail number"
288
+ emblem: { present: false }
289
+ binding: vehicle
290
+ region_encoding: "none — an N-number encodes no geography; the FAA assigns it nationally"
291
+ sources:
292
+ - "https://www.revisor.mn.gov/statutes/cite/168.12 # Minn. Stat. § 168.12 subd. 1(i): 'the commissioner must issue a registration number identical to the federally issued tail number assigned to a roadable aircraft'"
293
+ - "https://www.ecfr.gov/current/title-14/section-47.15 # 14 CFR 47.15(b): the N-number grammar Minnesota adopts by reference — five symbols after the N prefix, the three permitted arrangements, the I/O exclusion and the leading-zero rule. A US federal edict, public domain"
294
+ notes: >-
295
+ ROADABLE AIRCRAFT. This series is small, strange and genuinely valuable to the
296
+ dataset, because it is a STATUTORY BRIDGE between the road-vehicle layer this program
297
+ is building now and the aircraft layer PRD-PLATES §7 schedules for gate L6: Minnesota
298
+ law says a roadable aircraft's road registration number IS its FAA tail number. Two
299
+ consequences worth carrying forward. First, `categories: [aircraft]` exercises the
300
+ schema's kind-extensibility exactly as PRD-PLATES §2.2 anticipated, with no schema
301
+ change. Second, this is the only series in group midwest-b whose format is fully
302
+ specified by a fetched primary INCLUDING its charset exclusions, which is why it is
303
+ the only one here carrying a `regex_strict` — and the specification came from the
304
+ Code of Federal Regulations rather than from any state. The FAA additionally publishes
305
+ a free bulk registration database (registry.faa.gov/database/ReleasableAircraft.zip),
306
+ which would make this the one series in the group testable against a real corpus.
307
+
308
+ # =========================================================================
309
+ # COLLECTOR-VEHICLE FAMILY — four statutory inscriptions, one regime, and a
310
+ # permanent validity that makes them invisible to any era inference.
311
+ # =========================================================================
312
+ - id: us-mn-collector
313
+ class: historic
314
+ categories: [car, truck]
315
+ period: { start: 2024 }
316
+ period_evidence: instrument-in-force-upper-bound
317
+ matching: recall-only
318
+ format:
319
+ pattern: "LLL999"
320
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,6}\z'
321
+ pattern_note: >-
322
+ REPRESENTATIVE SHAPE ONLY. § 168.10 gives each of these plates 'the registration
323
+ number OR OTHER COMBINATION OF CHARACTERS authorized under section 168.12,
324
+ subdivision 2a' — i.e. the serial may be an ordinary assigned number or a
325
+ personalized combination, so the series' own space is a union and
326
+ `matching: recall-only` is mandatory. § 168.12 subd. 2a itself was NOT read in this
327
+ pass (recorded gap), so the personalized frame it authorises is not encoded.
328
+ design:
329
+ legend_variants: ["Pioneer", "Classic Car", "Collector", "Street Rod"]
330
+ legend_rule: >-
331
+ § 168.10 prescribes the inscription for each sub-regime in near-identical terms:
332
+ the plate 'shall bear the inscription "Pioneer," "Minnesota" and the registration
333
+ number or other combination of characters authorized under section 168.12,
334
+ subdivision 2a, BUT NO DATE', and likewise for 'Classic Car', 'Collector' and
335
+ 'Street Rod'. Four legends, one grammar, one validity rule.
336
+ no_date: "each of the four expressly bears NO DATE — which is the visible consequence of the permanent validity below, and a real trap for anyone dating a Minnesota vehicle from its plate"
337
+ emblem: { present: true, rendered: placeholder }
338
+ colour_note: "no hex recorded; § 168.10 prescribes inscriptions and silence on colour"
339
+ plate_count: "a SINGLE plate is issued for the Pioneer, Classic Car, Collector and Street Rod regimes ('shall issue a single number plate', § 168.10); a separate Collector provision issues plates in the plural, so the count is not uniform across the family"
340
+ validity: >-
341
+ PERMANENT AND UNRENEWED: 'The number plate is valid without renewal as long as the
342
+ vehicle is in existence in Minnesota' (§ 168.10, repeated for each sub-regime). The
343
+ commissioner may revoke for failure to comply with the subdivision.
344
+ region_encoding: none
345
+ sources:
346
+ - "https://www.revisor.mn.gov/statutes/cite/168.10 # Minn. Stat. § 168.10: the 'Pioneer', 'Classic Car', 'Collector' and 'Street Rod' inscriptions, each with 'Minnesota' and the registration number or a § 168.12 subd. 2a character combination but NO DATE; single-plate issuance; validity without renewal as long as the vehicle exists in Minnesota; the commissioner's revocation power"
347
+ - "https://www.revisor.mn.gov/statutes/cite/168.12 # Minn. Stat. § 168.12 subd. 2a, cross-referenced by § 168.10 as the source of the alternative character combinations (text not read in this pass — recorded gap)"
348
+ notes: >-
349
+ THE MINNESOTA COLLECTOR FAMILY — Pioneer, Classic Car, Collector and Street Rod —
350
+ modelled as ONE series with four legend variants rather than four series, because
351
+ § 168.10 gives them a single grammar, a single validity rule and a single no-date
352
+ rule, and PRD-PLATES §2.3 makes a variant its own series only where format OR design
353
+ OR period differs. Here only the inscription word differs.
354
+ THE FACT WORTH CARRYING FORWARD is the interaction of two provisions: these plates
355
+ bear NO DATE and are valid FOREVER without renewal. A Minnesota collector plate
356
+ therefore carries no temporal information whatsoever, cannot be aged from its own
357
+ face, and may have been issued at any point since the regime began — which, together
358
+ with the year-of-manufacture regimes in North Dakota and Kansas, means every state in
359
+ this group has at least one class of plate that defeats era inference.
360
+ ELIGIBILITY THRESHOLDS for each of the four regimes are in § 168.10's subdivisions and
361
+ were not extracted in this pass (recorded gap).
362
+
363
+ # =========================================================================
364
+ # SPECIALTY — THE PROGRAM INDEX, per PRD-PLATES §2.5.
365
+ # =========================================================================
366
+ - id: us-mn-specialty-index
367
+ class: specialty
368
+ categories: [car, van, truck, motorcycle]
369
+ period: { start: 2024 }
370
+ period_evidence: instrument-in-force-upper-bound
371
+ matching: recall-only
372
+ format:
373
+ pattern: "999LLL"
374
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,6}\z'
375
+ pattern_note: "REPRESENTATIVE SHAPE ONLY; the index stands for many programs whose arrangements are not individually stated and whose common frame was not sourced"
376
+ design:
377
+ note: "one design per authorised program; the designs themselves are L4 scope (PRD-PLATES §2.5) and none is described here"
378
+ emblem: { present: true, rendered: placeholder }
379
+ program_index:
380
+ count_official: null
381
+ count_status: >-
382
+ NOT ESTABLISHED. No Minnesota specialty-plate count was obtained: DVS pages sit
383
+ behind a bot-protection layer that refused every request in this pass, and the
384
+ statutory enumeration — Minnesota creates special plates in a long run of
385
+ subdivisions of § 168.12 and in §§ 168.123, 168.1235, 168.1255 and neighbours — was
386
+ not completed. Recording null with an explicit status is better than importing a
387
+ secondary figure.
388
+ structural_note: >-
389
+ WHAT IS SOURCED about the structure: § 168.12 subd. 1(c) shows special plates
390
+ DISPLACING the mandatory 'noncommercial' legend, and subd. 1(d) shows a commercial
391
+ one-ton pickup remaining eligible for them, so Minnesota special plates are
392
+ substitutes for the standard plate rather than overlays on it. § 168.12 subd. 2
393
+ (amateur radio) is one worked example: the commissioner issues amateur radio plates
394
+ to an owner of a passenger automobile or recreational vehicle who is a Minnesota
395
+ resident holding an FCC amateur or citizens-band class D licence in good standing,
396
+ on payment of the § 168.12 subd. 5 special-plate fee.
397
+ known_program_hooks: ["168.12 subd. 2 (amateur radio)", "168.12 subds. 2a, 2c, 2d", "168.123", "168.1235", "168.1255"]
398
+ official_list_url: "https://www.revisor.mn.gov/statutes/cite/168.12"
399
+ dvs_status: "the Minnesota DVS website (mn.gov/dps/dvs) was UNREACHABLE in this pass — a ShieldSquare/bot-protection challenge on every request, via two clients; recorded so a later run does not mistake it for unfetched-but-fine"
400
+ region_encoding: none
401
+ sources:
402
+ - "https://www.revisor.mn.gov/statutes/cite/168.12 # Minn. Stat. § 168.12 subd. 2: the amateur radio plate and its eligibility and fee conditions, the worked example of a Minnesota special-plate authorization; subd. 1(c)-(d): special plates displacing the 'noncommercial' legend and remaining available to commercial one-ton pickups"
403
+ - "https://www.revisor.mn.gov/statutes/cite/168.10 # Minn. Stat. § 168.10: the collector-vehicle plate regimes, which sit alongside the specialty programs and are specified separately above"
404
+ notes: >-
405
+ THE SPECIALTY PROGRAM INDEX — present as required by PRD-PLATES §2.5, CARRYING NO
406
+ COUNT. Minnesota and Kansas are the two states in group midwest-b that yielded no
407
+ specialty figure at all, in both cases because the issuing agency's website refused
408
+ automated requests and the statutory enumeration was not completed. The honest record
409
+ is `count_official: null` plus the sourced structural facts and the specific hooks a
410
+ later pass should enumerate — which is materially more useful to a verifier than a
411
+ borrowed number would be.