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,408 @@
1
+ # plates/us-mi.yml — Michigan (PRD-PLATES gate L2, group midwest-a).
2
+ #
3
+ # WHAT MICHIGAN CONTRIBUTES THAT NO OTHER STATE IN THIS GROUP DOES: a
4
+ # LEGISLATED PLATE LIFETIME, stated as a prohibition rather than as a schedule.
5
+ # MCL 257.224 says a registration plate 'shall not be renewed 10 years after the
6
+ # date that registration plate was issued'. Read that carefully — Michigan does
7
+ # not order a replating, it forbids a renewal, which achieves the same end from
8
+ # the other direction and means the ten-year clock runs per PLATE, from ITS
9
+ # issue date, not per fleet and not per base. Florida legislated a 10-year
10
+ # replacement cycle; Michigan legislated a 10-year renewal bar. Same number,
11
+ # different instrument, and only one of them produces a synchronised state-wide
12
+ # reissue.
13
+ #
14
+ # MICHIGAN'S SECOND CONTRIBUTION IS A COLOUR RULE THAT SPECIFIES A PROPERTY, NOT
15
+ # A VALUE. MCL 257.225 requires 'a marked contrast between the color of the
16
+ # registration plate and the numerals or letters on the plate' — the same
17
+ # legislative move as Florida's 'distinguishing color' for Horseless Carriage
18
+ # plates. A dataset that only stores hexes cannot represent this claim at all;
19
+ # it is recorded here as a constraint, and no hex is invented to satisfy it.
20
+ #
21
+ # FETCH-PROVENANCE NOTE: www.legislature.mi.gov reset the connection on every
22
+ # attempt and www.michigan.gov returned 403 from this environment. Statutory
23
+ # text below was read from codes.findlaw.com, a third-party REPRODUCTION of the
24
+ # same edict; the canonical legislature.mi.gov citation accompanies each source
25
+ # line and was NOT fetched.
26
+ #
27
+ # NOT HERE, DELIBERATELY: individual specialty/fundraising DESIGNS (L4 per
28
+ # PRD-PLATES §2.5); the MOTORCYCLE series, because no source in this pass gave a
29
+ # Michigan motorcycle serial format and a plates file should carry a declared
30
+ # gap rather than a plausible guess (see the dossier); and the personalized
31
+ # series, which is outside the L2 core-class list.
32
+ jurisdiction: us-mi
33
+ authority:
34
+ name: Michigan Department of State (Secretary of State)
35
+ url: "https://www.michigan.gov/sos"
36
+ binding: vehicle
37
+ statute_edition: "Michigan Compiled Laws, Chapter 257 (Michigan Vehicle Code), as reproduced by codes.findlaw.com and read 2026-08-02. FindLaw warns its text 'may not reflect the most recent version of the law'; currency is UNVERIFIED."
38
+
39
+ # ---------------------------------------------------------------------------
40
+ # artwork_risk — required per jurisdiction by PRD-PLATES §4.
41
+ # ---------------------------------------------------------------------------
42
+ artwork_risk:
43
+ posture: unresearched-default-adverse
44
+ basis: >-
45
+ No favourable Michigan authority was located. The governing default is that
46
+ 17 U.S.C. §105 does not extend to the states, so a state work is copyrighted
47
+ unless the state says otherwise. Both surveys checked are silent on
48
+ Michigan: the Wikipedia survey of subnational copyright status covers
49
+ seventeen states and Michigan is NOT among them, and Commons'
50
+ copyright-rules-by-territory page for the United States lists the state PD
51
+ tags that exist — CA, FL, GA, MA, ME plus narrow agency tags for MN, OK, WA
52
+ and one Alabama municipality — with no {{PD-MIGov}}. No Michigan statute, AG
53
+ opinion or case establishing public-domain status for state works was found.
54
+ TREAT THE ARTWORK AS COPYRIGHTED.
55
+ WHAT IS SAFE REGARDLESS: MCL 257.224's reflectorization and 100-foot
56
+ legibility requirements, MCL 257.225's contrast rule and mounting height, and
57
+ the ten-year renewal bar are all EDICTS OF GOVERNMENT and public domain at
58
+ every level. The adverse posture bites on the artwork, not the spec.
59
+ emblem_rule: >-
60
+ PRD-PLATES §3's placeholder default applies. The current base carries the
61
+ 'Pure Michigan' wordmark — which raises a question the copyright analysis does
62
+ not reach: Pure Michigan is the state's TOURISM BRAND, and brand marks carry
63
+ TRADEMARK protection entirely independent of copyright and of any public-
64
+ records rule. A state seal statute would be the analogous hazard; here it is a
65
+ marketing mark. Render `emblem: {present: true, rendered: placeholder}` and do
66
+ not reproduce the wordmark. This trademark exposure is UNRESEARCHED and is
67
+ flagged as its own open question, distinct from the copyright posture above.
68
+ photograph_caution: >-
69
+ Standing rule: a CC tag on a Commons photograph of a Michigan plate is the
70
+ PHOTOGRAPHER's licence on the PHOTOGRAPH, not on the design. Our renders are
71
+ generated from this file, never derived from a photograph, so those
72
+ obligations never attach.
73
+ sources:
74
+ - "https://en.wikipedia.org/wiki/Copyright_status_of_works_by_subnational_governments_of_the_United_States # LOCATOR + NEGATIVE FINDING: Michigan is not among the states covered"
75
+ - "https://commons.wikimedia.org/wiki/Commons:Copyright_rules_by_territory/United_States # the §105-does-not-reach-the-states rule and the complete state PD-tag list — no Michigan tag"
76
+ - "https://codes.findlaw.com/mi/chapter-257-motor-vehicles/mi-comp-laws-257-224.html # FETCHED. The plate spec that IS available is statutory and therefore a PD edict"
77
+
78
+ us_standards:
79
+ no_federal_mandate: true
80
+ chain: "SAE J686 -> AAMVA License Plate Standard Edition 3 (September 2025) -> voluntary state adoption. Recommendations in the declarative present; read as RECOMMENDED PRACTICE."
81
+ aamva_edition_3:
82
+ dimensions_delegated: "AAMVA §3.1 sends dimensions and bolt holes to SAE J686, whose text is paywalled and was NOT obtained. Michigan legislates no plate dimension either, so NO DIMENSION IS RECORDED for the Michigan plate — a gap, deliberately left open rather than filled from the 1956 folklore."
83
+ 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, at least 1.25 in clear of top and bottom edges"
84
+ jurisdiction_name_layout: "AAMVA §2.1: jurisdiction name top centre between the bolt holes, at least 0.25 in above the plate number, 0.125 in from the top edge; characters 0.75-1.0 in"
85
+ stacked_characters: "AAMVA: stacked characters are part of the official plate number, at most two stacked"
86
+ retroreflectivity: "AAMVA §3.3: readable in daylight and at night from at least 75 feet. MCL 257.224 legislates BOTH halves of that independently: 'made of fully reflectorized material and shall be clearly visible at night' and 'of sufficient size to be plainly readable from a distance of 100 feet during daylight'."
87
+ replacement_cycle: "AAMVA §1.1 recommends a cycle 'not to exceed 7 to 10 years'. MICHIGAN LEGISLATED THE TOP OF THE RANGE AS A RENEWAL BAR — see `plate_lifetime` below. It is the mechanism, not the number, that is unusual."
88
+ source: "https://www.aamva.org/getmedia/646bcc8a-219b-47d8-b5cd-726240473163/License-Plate-Standard-Edition-3_September-2025-Update.pdf"
89
+ folklore_caution: >-
90
+ The "1956 AMA standardization agreement" is UNCITED in its Wikipedia source
91
+ and is not relied on here. The Michigan article repeats it in the form
92
+ '1956 standardized plate size... (except those for motorcycles)', which is the
93
+ same circular text. No Michigan plate dimension is recorded in this file.
94
+
95
+ # ---------------------------------------------------------------------------
96
+ # plate_lifetime — Michigan's signature fact, recorded once at file level
97
+ # because it is a property of Michigan law rather than of any one series.
98
+ # ---------------------------------------------------------------------------
99
+ plate_lifetime:
100
+ mechanism: renewal-bar
101
+ years: 10
102
+ statutory_text: "MCL 257.224: 'a registration plate issued by the department under this section shall not be renewed 10 years after the date that registration plate was issued'"
103
+ consequence: >-
104
+ Because the bar runs from EACH PLATE's own issue date, Michigan's fleet
105
+ turns over continuously rather than in a synchronised reissue. Two data
106
+ consequences follow and both matter for a parse API. First, a Michigan plate
107
+ observed today is at most ten years old, which puts a hard floor under any
108
+ era inference — something no other state in this group provides. Second, the
109
+ owner may ask for the SAME NUMBER back on the replacement plate (the
110
+ department 'may reissue plates with the same registration number upon
111
+ request'), so a serial can outlive the piece of metal it was first stamped
112
+ on, and serial continuity does not imply plate continuity.
113
+ exceptions: "plates for state-owned vehicles and certain nonprofits do not expire on time at all; they expire when 'worn out or illegible' (MCL 257.224)"
114
+ reported_but_unquoted: "the same section was reported to expire most plates on 31 December in the fifth year following issuance; that sentence was NOT captured verbatim and is recorded as reported-only, not as a claim"
115
+ source: "https://codes.findlaw.com/mi/chapter-257-motor-vehicles/mi-comp-laws-257-224.html # FETCHED. MCL 257.224: one plate per vehicle, contents, fully reflectorized material, 100-foot daylight legibility, the ten-year renewal bar, replacement on payment of the fee, same-number reissue on request, and the worn-out-or-illegible rule for state and nonprofit plates"
116
+
117
+ display_rules:
118
+ default: "ONE plate, REAR. MCL 257.224: 'upon registering a vehicle, the secretary of state shall issue to the owner 1 registration plate'. MCL 257.225: 'a registration plate issued for a vehicle shall be attached to the rear of the vehicle.'"
119
+ front_plate_required_when:
120
+ - "TRUCK TRACTOR or ROAD TRACTOR: 'A registration plate issued for a truck tractor or road tractor shall be attached to the front of the vehicle' (MCL 257.225) — front-ONLY, since Michigan issues just one plate. The same inversion as Florida and Ohio, and a third independent instance of it in this dataset: a US front/rear model that does not carry a per-class exception will be wrong in at least three states."
121
+ mounting: "MCL 257.225: 'The plate shall be attached at a height of not less than 12 inches from the ground, measured from the bottom of the plate' — twelve inches, against Illinois's five. Michigan also requires the plate be kept clearly visible and free from foreign materials."
122
+ colour_constraint: "MCL 257.225: 'A registration plate or an expiration tab on the registration plate shall be of a different color designated by the secretary of state with a marked contrast between the color of the registration plate and the numerals or letters on the plate.' A statutory colour PROPERTY with no value — see the file header."
123
+ legibility: "MCL 257.224: the plate must be 'of sufficient size to be plainly readable from a distance of 100 feet during daylight' and 'made of fully reflectorized material and shall be clearly visible at night'"
124
+ penalty: "MCL 257.225: 'A person who violates this section is responsible for a civil infraction.' Note this is CIVIL — contrast Ohio's minor misdemeanor and Illinois's Class A misdemeanor for deliberate concealment."
125
+ historic_military_exception: "MCL 257.225 allows a historic military vehicle to carry its plate INSIDE the vehicle if it was not originally equipped with exterior mounting provisions — a display exemption of the same family as Florida's former-military exemption under s. 320.086(5)"
126
+ rear_only_history: "Michigan is reported to have required only rear plates since 1981 (secondary). The statute corroborates the present rule but dates nothing."
127
+ sources:
128
+ - "https://codes.findlaw.com/mi/chapter-257-motor-vehicles/mi-comp-laws-257-225.html # FETCHED. MCL 257.225: rear attachment, the truck-tractor/road-tractor front exception, the 12-inch minimum height, horizontal secure fastening, the marked-contrast colour rule, the historic-military interior-storage allowance, and the civil-infraction penalty"
129
+ - "https://www.legislature.mi.gov/Laws/MCL?objectName=MCL-257-225 # CANONICAL citation for the same edict — NOT fetched (connection reset)"
130
+ - "https://codes.findlaw.com/mi/chapter-257-motor-vehicles/mi-comp-laws-257-224.html # FETCHED. MCL 257.224: one plate issued, 100-foot legibility, fully reflectorized material"
131
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Michigan # LOCATOR ONLY: 'Only rear plates have been required since 1981.'"
132
+
133
+ series:
134
+
135
+ - id: us-mi-standard-2013
136
+ class: standard
137
+ categories: [car, van, truck, bus]
138
+ period: { start: 2013 }
139
+ period_evidence: secondary-first-issue
140
+ matching: strict
141
+ format:
142
+ pattern: "LLL 9999"
143
+ regex: '\A[A-Z]{3} ?\d{4}\z'
144
+ evidence: secondary
145
+ charset:
146
+ notes: >-
147
+ Three letters then four numerals. NO MICHIGAN STATUTE STATES A SERIAL
148
+ ARRANGEMENT: MCL 257.224 requires only that the plate carry 'the
149
+ registration number' plus the state name and an expiration indication
150
+ 'which may be shown by a tab or sticker furnished by the secretary of
151
+ state'. MCL 257.803b, the personalized-plate section, is equally
152
+ silent on length — 'Personalized plates must bear letters and numbers as
153
+ the secretary of state prescribes' — so unlike Illinois or Wisconsin,
154
+ Michigan gives no statutory character cap even indirectly, and this
155
+ file therefore carries NO `regex_statutory`. There is nothing to bound
156
+ it with.
157
+ progression: "observed DAA 0000 to approximately FAZ 9999 as of January 2026 (secondary) — a three-letter block advancing over a four-digit counter"
158
+ design:
159
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
160
+ colour_note: >-
161
+ Reflective white field with a blue band at the BOTTOM and a dark serial.
162
+ Only the white field is hexed, and it is marked observed. The blue is not
163
+ hexed: Michigan's statute prescribes contrast, not colour, the Department
164
+ of State site was unreachable, and a hex sampled from a photograph would
165
+ be a fabricated fact.
166
+ band: { side: bottom, colour_named: blue, content: "michigan.org" }
167
+ legend_top: "MICHIGAN"
168
+ legend_slogan: "Pure Michigan"
169
+ graphic: { present: true, rendered: placeholder, description: "'Pure Michigan' wordmark at top and a blue band at the bottom carrying michigan.org; secondary observation only, and see artwork_risk for the trademark caution on the wordmark" }
170
+ emblem: { present: true, rendered: placeholder }
171
+ validation_sticker: { position: "corner", content: "expiration", source_note: "MCL 257.224: expiration 'may be shown by a tab or sticker furnished by the secretary of state'; MCL 257.225 requires the TAB itself to contrast with the plate" }
172
+ region_encoding: "none. Michigan encodes no geography in the serial and prints no county legend."
173
+ sources:
174
+ - "https://codes.findlaw.com/mi/chapter-257-motor-vehicles/mi-comp-laws-257-224.html # FETCHED. MCL 257.224: one plate per vehicle; plate contents (registration number, state name, expiration by tab or sticker); fully reflectorized material; 100-foot daylight legibility; the ten-year renewal bar; same-number reissue on request"
175
+ - "https://www.legislature.mi.gov/Laws/MCL?objectName=MCL-257-224 # CANONICAL, not fetched (connection reset)"
176
+ - "https://codes.findlaw.com/mi/chapter-257-motor-vehicles/mi-comp-laws-257-803b.html # FETCHED. MCL 257.803b: 'Personalized plates must bear letters and numbers as the secretary of state prescribes', must be of the same material as standard plates, must not duplicate another plate, and the sequence is not reassigned in a subsequent year unless the holder fails to reapply — evidence that Michigan delegates the character grammar entirely"
177
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Michigan # LOCATOR ONLY: 'Pure Michigan' base from April 2013, serial format ABC 1234, range DAA 0000 to ~FAZ 9999 as of January 2026, blue band at bottom, michigan.org"
178
+ notes: >-
179
+ MICHIGAN STANDARD ISSUE, CURRENT BASE. `start: 2013` rests on a secondary
180
+ first-issue month (April 2013) and carries `period_evidence:
181
+ secondary-first-issue` to say so. The entry's most consequential content is
182
+ not the format but the file-level `plate_lifetime` block it inherits: the
183
+ ten-year renewal bar puts an upper bound on the age of any Michigan plate
184
+ in circulation, while the same-number reissue right means the SERIAL can be
185
+ much older than the metal. Those two facts pull in opposite directions and
186
+ a parse API must hold both.
187
+
188
+ - id: us-mi-standard-2007
189
+ class: standard
190
+ categories: [car, van, truck, bus]
191
+ period: { start: 2007, end: 2013 }
192
+ period_evidence: secondary-first-issue
193
+ matching: strict
194
+ format:
195
+ pattern: "LLL 9999"
196
+ regex: '\A[A-Z]{3} ?\d{4}\z'
197
+ evidence: secondary
198
+ charset: { notes: "identical grammar to the current base — the 2013 change moved the blue band from top to bottom and changed the URL legend, not the serial" }
199
+ progression: "observed BAA 0000 to approximately CPS 0999 (secondary) — note the blocks run CONTINUOUSLY into the 2013 base's DAA start, which is why the serial cannot date the base"
200
+ design:
201
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
202
+ colour_note: "reflective white with a blue band at the TOP; no band hex recorded"
203
+ band: { side: top, colour_named: blue, content: "www.Michigan.gov" }
204
+ legend_top: "MICHIGAN"
205
+ emblem: { present: true, rendered: placeholder }
206
+ region_encoding: none
207
+ sources:
208
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Michigan # LOCATOR ONLY: the 1 January 2007 to April 2013 base, blue band at top, www.Michigan.gov legend, serial format ABC 1234, range BAA 0000 to ~CPS 0999"
209
+ - "https://codes.findlaw.com/mi/chapter-257-motor-vehicles/mi-comp-laws-257-224.html # FETCHED. The same statutory frame governed this base; it is why no format difference is recorded"
210
+ notes: >-
211
+ ONE SERIES BACK (2007-2013). The serial BLOCKS are the interesting record
212
+ here: B through C on this base, D through F on the next, with no gap. So
213
+ Michigan's letter block is a coarse era signal even though the FORMAT is
214
+ not — the opposite arrangement from Illinois, where the format changed at
215
+ the base boundary and the blocks restarted. Two neighbouring states, two
216
+ incompatible era-inference strategies; the dataset must carry the block
217
+ ranges (secondary) or lose the signal entirely.
218
+
219
+ - id: us-mi-trailer
220
+ class: trailer
221
+ categories: [trailer]
222
+ period: { start: 2026 }
223
+ period_evidence: instrument-in-force-upper-bound
224
+ matching: strict
225
+ format:
226
+ pattern: "L999999"
227
+ regex: '\A[A-Z]\d{6}\z'
228
+ evidence: secondary
229
+ charset: { notes: "one letter then six numerals, no printed separator observed; the letter is a block marker rather than a class token — observed D through F, so it does not identify the class the way Indiana's TR does" }
230
+ progression: "observed D000000 to F134612 as of October 2024 (secondary)"
231
+ design:
232
+ background: { finish: retroreflective }
233
+ legend_bottom: "PERMANENT TRAILER"
234
+ emblem: { present: true, rendered: placeholder }
235
+ validity: "PERMANENT — the legend says so on the plate itself, which makes this a series whose end condition is the vehicle's, not the year's"
236
+ region_encoding: none
237
+ sources:
238
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Michigan # LOCATOR ONLY: trailer plates D000000 to F134612 as of October 2024, marked 'PERMANENT TRAILER'"
239
+ - "https://codes.findlaw.com/mi/chapter-257-motor-vehicles/mi-comp-laws-257-224.html # FETCHED. MCL 257.224's one-plate rule and reflectorization requirement apply to trailer plates as to others"
240
+ notes: >-
241
+ PERMANENT TRAILER. `period.start` is an instrument-in-force upper bound: no
242
+ source dated this series. The permanence is worth noting against the
243
+ file-level ten-year renewal bar — a plate that is never renewed cannot be
244
+ caught by a bar on renewal, so the trailer plate escapes Michigan's own
245
+ lifetime rule by construction. That interaction is the kind of thing a
246
+ claims model should be able to express.
247
+
248
+ - id: us-mi-dealer
249
+ class: dealer
250
+ categories: [car, van, truck, bus, motorcycle, trailer]
251
+ period: { start: 2026 }
252
+ period_evidence: instrument-in-force-upper-bound
253
+ matching: strict
254
+ format:
255
+ pattern: "999 D 999"
256
+ regex: '\A\d{3} ?D ?\d{3}\z'
257
+ evidence: secondary
258
+ charset: { notes: "an infix class token: the letter D sits BETWEEN two numeric groups rather than prefixing them. Observed 000 D 000 to 077 D 999 as of May 2026. Michigan is the only state in this group that marks a class mid-serial, which breaks any parser that assumes class tokens are prefixes." }
259
+ design:
260
+ background: { finish: retroreflective }
261
+ legend_bottom: "DEALER"
262
+ emblem: { present: true, rendered: placeholder }
263
+ binding: business
264
+ permitted_use: >-
265
+ MCL 257.244: 'A dealer owning a vehicle otherwise required to be registered
266
+ under this act may operate or move the vehicle on a street or highway
267
+ without registering the vehicle if the vehicle displays, as prescribed under
268
+ section 225, a special plate issued to the owner by the secretary of state.'
269
+ A vehicle bearing the dealer plate 'may be driven on a street or highway for
270
+ demonstration purposes by a prospective buyer or lessee for a period of 72
271
+ hours', and a new purchaser or lessee may likewise use it for up to 72 hours
272
+ after taking possession while registration is completed. 'The secretary of
273
+ state shall determine the number of plates a manufacturer, dealer, or
274
+ transporter reasonably needs in its business.'
275
+ region_encoding: none
276
+ sources:
277
+ - "https://codes.findlaw.com/mi/chapter-257-motor-vehicles/mi-comp-laws-257-244.html # FETCHED. MCL 257.244: the dealer-plate authorisation, display per section 225, the 72-hour demonstration and post-sale windows, and the secretary of state's power to set the number of plates a business needs"
278
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Michigan # LOCATOR ONLY: dealer serial range 000 D 000 to 077 D 999 as of May 2026, marked 'DEALER'"
279
+ notes: >-
280
+ DEALER PLATES. `binding: business` — MCL 257.244 attaches the plate to the
281
+ dealer, not the vehicle, and the 72-hour demonstration window is the
282
+ clearest statement in this group of what a trade plate actually LICENSES: a
283
+ period of use, not a registration. The infix D is the format curiosity.
284
+
285
+ - id: us-mi-government
286
+ class: government
287
+ categories: [car, van, truck, bus]
288
+ period: { start: 2026 }
289
+ period_evidence: instrument-in-force-upper-bound
290
+ matching: strict
291
+ format:
292
+ pattern: "999 X 999"
293
+ regex: '\A\d{3} ?X ?\d{3}\z'
294
+ evidence: secondary
295
+ charset: { notes: "the same infix-token shape as the dealer plate, with X in place of D. Observed 130 X 000 to approximately 136 X 999 as of January 2026." }
296
+ design:
297
+ background: { finish: retroreflective }
298
+ emblem: { present: true, rendered: placeholder }
299
+ binding: vehicle
300
+ validity: "MCL 257.224 exempts state-owned and certain nonprofit plates from time expiry entirely — they expire when 'worn out or illegible'. So a Michigan government plate has no expiry date at all, only a condition."
301
+ region_encoding: none
302
+ sources:
303
+ - "https://codes.findlaw.com/mi/chapter-257-motor-vehicles/mi-comp-laws-257-224.html # FETCHED. MCL 257.224: plates for state-owned vehicles and certain nonprofits do not expire on time but when worn out or illegible"
304
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Michigan # LOCATOR ONLY: government/municipal serial range 130 X 000 to ~136 X 999 as of January 2026"
305
+ notes: >-
306
+ GOVERNMENT / MUNICIPAL. The statutory fact is the good one: this is a plate
307
+ class whose VALIDITY IS A CONDITION rather than a date. PRD-PLATES's runs
308
+ shape handles open-ended periods, but 'ends when worn out' is not a year and
309
+ cannot be made into one — recorded in prose, deliberately, rather than
310
+ forced into `period.end`.
311
+
312
+ - id: us-mi-temporary
313
+ class: temporary
314
+ categories: [car, van, truck, bus, motorcycle, trailer]
315
+ period: { start: 2026 }
316
+ period_evidence: instrument-in-force-upper-bound
317
+ matching: strict
318
+ format:
319
+ pattern: "999999"
320
+ regex: '\A\d+\z'
321
+ evidence: statutory-inferred
322
+ charset:
323
+ notes: >-
324
+ MCL 257.226a: 'All temporary registration plates or markers must be
325
+ serially numbered and upon issuance the number must be noted on the
326
+ statement of vehicle sale form'. SERIALLY NUMBERED is the whole of the
327
+ statutory grammar — a numeric series with NO STATED WIDTH, so the
328
+ quantifier is unbounded and makes no width claim, exactly as Florida's
329
+ Horseless Carriage series does under an equivalently open statute. The
330
+ inference that 'serially numbered' means digits only is marked
331
+ `statutory-inferred` rather than `statutory`: it is a reading of the
332
+ phrase, not a quotation of a character set.
333
+ design:
334
+ material: "paper or card marker. MCL 257.226a: 'A temporary registration plate or marker must show in ink the date of issue, a description of the vehicle for which issued, and any other information required by the secretary of state.'"
335
+ background: { finish: none }
336
+ emblem: { present: false }
337
+ destruction_rule: "MCL 257.226a: 'When the regular plate is attached to a vehicle for which a temporary registration plate or marker was issued, the temporary plate must be destroyed.'"
338
+ validity: "THIRTY DAYS. MCL 257.226a issues the temporary plate 'for a period not to exceed 30 days pending receipt of regular registration plates' — against Ohio's forty-five next door, which is the clearest single illustration in this group that temporary validity is a per-state variable."
339
+ region_encoding: none
340
+ sources:
341
+ - "https://codes.findlaw.com/mi/chapter-257-motor-vehicles/mi-comp-laws-257-226a.html # FETCHED. MCL 257.226a: the 30-day maximum, the in-ink date and vehicle description, serial numbering with the number noted on the statement of vehicle sale, and the destruction requirement"
342
+ - "https://www.legislature.mi.gov/Laws/MCL?objectName=MCL-257-226a # CANONICAL, not fetched (connection reset)"
343
+ notes: >-
344
+ TEMPORARY REGISTRATION PLATE OR MARKER. Michigan legislates the temporary
345
+ plate's LIFECYCLE — issue, note the number on the sale form, destroy on
346
+ receipt of the regular plate — while legislating almost nothing about its
347
+ appearance. The destruction duty is unusual enough to be worth carrying: it
348
+ means a Michigan temporary marker is not merely expired but SUPPOSED NOT TO
349
+ EXIST after the regular plate arrives, which is a different fact about the
350
+ world than an expired plate sitting in a glovebox.
351
+
352
+ - id: us-mi-specialty-index
353
+ class: specialty
354
+ categories: [car, van, truck, motorcycle]
355
+ period: { start: 2026 }
356
+ period_evidence: instrument-in-force-upper-bound
357
+ matching: strict
358
+ format:
359
+ pattern: "LLL 9999"
360
+ regex: '\A[A-Z]{3} ?\d{4}\z'
361
+ evidence: secondary
362
+ charset: { notes: "fundraising and university plates carry ordinary serials on an alternative design; no distinct grammar was sourced" }
363
+ design:
364
+ background: { finish: retroreflective }
365
+ note: "one design per authorising public act; the designs themselves are L4 scope (PRD-PLATES §2.5) and none is described here"
366
+ emblem: { present: true, rendered: placeholder }
367
+ program_index:
368
+ count_official: null
369
+ count_status: RECORDED-GAP-WITH-SECONDARY-FIGURE
370
+ count_secondary: "20 authorised at one time (excluding universities), of which 14 reported in production"
371
+ count_note: >-
372
+ No OFFICIAL count was obtained: www.michigan.gov returned 403 to every
373
+ request from this environment. A secondary source states that 'State law
374
+ limits the number of fundraising plates (excluding universities)
375
+ available at one time to 20, and 14 are currently in production.' That
376
+ figure is recorded as SECONDARY and unreconciled — the statutory cap it
377
+ describes was NOT located in the section of MCL 257.811e that was read,
378
+ so the '20' is a claim about a statute rather than a quotation from one,
379
+ and a verifier should either find the cap or strike the figure. Per
380
+ PRD-PLATES §5.3 the discrepancy is recorded, not averaged away.
381
+ official_list_url: "https://www.michigan.gov/sos/vehicle/plates"
382
+ official_list_fetch_status: "BLOCKED — HTTP 403 on every attempt, 2026-08-02"
383
+ statutory_basis: >-
384
+ MCL 257.811e is the mechanism, and Michigan's is the most legislature-
385
+ heavy in this group: a fundraising plate exists only if A PUBLIC ACT
386
+ AUTHORISES IT, and that act must identify the purpose of the plate and
387
+ create or designate a nonprofit fund (naming its administrator where a
388
+ fund is created). A start-up fee covering the 'three-year average of the
389
+ cost to the secretary of state of developing a new fund-raising plate'
390
+ must be paid within eighteen months. Critically, the section imposes NO
391
+ MINIMUM APPLICATION THRESHOLD — where Illinois requires 2,000
392
+ applications and Wisconsin 500 signatures, Michigan requires an act of
393
+ the legislature and money. Three states, three completely different
394
+ gatekeeping mechanisms for the same product.
395
+ region_encoding: none
396
+ sources:
397
+ - "https://codes.findlaw.com/mi/chapter-257-motor-vehicles/mi-comp-laws-257-811e.html # FETCHED. MCL 257.811e: authorisation by public act, the purpose and nonprofit-fund requirements, the three-year-average start-up fee payable within 18 months, and the absence of any application threshold"
398
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Michigan # LOCATOR ONLY: 'State law limits the number of fundraising plates (excluding universities) available at one time to 20, and 14 are currently in production.'"
399
+ notes: >-
400
+ THE MICHIGAN SPECIALTY PROGRAM INDEX — one entry for the whole programme per
401
+ PRD-PLATES §2.5, with the official count declared a gap and a secondary
402
+ figure carried, flagged, alongside. The durable finding is the mechanism:
403
+ Michigan gates specialty plates through the LEGISLATURE, Illinois through a
404
+ 2,000-application petition, Wisconsin through 500 signatures, Ohio through
405
+ individual authorising statutes, and Indiana through a dedicated code
406
+ article. Whatever the catalogue counts turn out to be, those five
407
+ mechanisms are the structural fact — and they predict the churn rate of
408
+ each state's catalogue better than any snapshot count could.