vehicles 0.6.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 (186) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +164 -0
  3. data/CHANGELOG.md +274 -0
  4. data/README.md +55 -10
  5. data/data/PROVENANCE-vehicles.md +12 -0
  6. data/data/plates/PROVENANCE.md +5 -4
  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/fr-departements.yml +191 -0
  14. data/data/plates/_decode/gb-age-identifiers.yml +170 -0
  15. data/data/plates/_decode/gb-memory-tags.yml +202 -0
  16. data/data/plates/_decode/gr-prefectures.yml +1408 -0
  17. data/data/plates/_decode/hr-cities.yml +315 -0
  18. data/data/plates/_decode/ie-counties.yml +227 -0
  19. data/data/plates/_decode/in-state-codes.yml +169 -0
  20. data/data/plates/_decode/is-districts-1938.yml +116 -0
  21. data/data/plates/_decode/it-provinces.yml +348 -0
  22. data/data/plates/_decode/jp-office-marks.yml +960 -0
  23. data/data/plates/_decode/jp-use-marks.yml +205 -0
  24. data/data/plates/_decode/kr-authority-marks.yml +146 -0
  25. data/data/plates/_decode/kr-use-syllables.yml +194 -0
  26. data/data/plates/_decode/lu-series-order.yml +638 -0
  27. data/data/plates/_decode/mx-entity-series.yml +380 -0
  28. data/data/plates/_decode/my-index-marks.yml +271 -0
  29. data/data/plates/_decode/no-counties-1913.yml +148 -0
  30. data/data/plates/_decode/no-districts.yml +901 -0
  31. data/data/plates/_decode/pl-powiats.yml +567 -0
  32. data/data/plates/_decode/pt-trailer-services.yml +96 -0
  33. data/data/plates/_decode/ro-counties.yml +213 -0
  34. data/data/plates/_decode/se-diplomatic.yml +220 -0
  35. data/data/plates/_decode/si-regions.yml +123 -0
  36. data/data/plates/_decode/sk-districts.yml +314 -0
  37. data/data/plates/_decode/th-registration-elements.yml +208 -0
  38. data/data/plates/_decode/ua-regions.yml +393 -0
  39. data/data/plates/_decode/za-licence-marks.yml +215 -0
  40. data/data/plates/_meta/classes.yml +1 -0
  41. data/data/plates/_meta/separators.yml +102 -0
  42. data/data/plates/ad.yml +961 -0
  43. data/data/plates/ar.yml +762 -0
  44. data/data/plates/at.yml +1424 -0
  45. data/data/plates/au-act.yml +472 -0
  46. data/data/plates/au-nsw.yml +282 -0
  47. data/data/plates/au-nt.yml +431 -0
  48. data/data/plates/au-qld.yml +272 -0
  49. data/data/plates/au-sa.yml +248 -0
  50. data/data/plates/au-tas.yml +302 -0
  51. data/data/plates/au-vic.yml +215 -0
  52. data/data/plates/au-wa.yml +309 -0
  53. data/data/plates/be.yml +1840 -0
  54. data/data/plates/br.yml +1152 -0
  55. data/data/plates/ca-ab.yml +430 -0
  56. data/data/plates/ca-bc.yml +697 -0
  57. data/data/plates/ca-mb.yml +499 -0
  58. data/data/plates/ca-nb.yml +537 -0
  59. data/data/plates/ca-nl.yml +743 -0
  60. data/data/plates/ca-ns.yml +808 -0
  61. data/data/plates/ca-nt.yml +610 -0
  62. data/data/plates/ca-nu.yml +280 -0
  63. data/data/plates/ca-on.yml +881 -0
  64. data/data/plates/ca-pe.yml +592 -0
  65. data/data/plates/ca-qc.yml +1036 -0
  66. data/data/plates/ca-sk.yml +256 -0
  67. data/data/plates/ca-yt.yml +656 -0
  68. data/data/plates/ch.yml +1273 -0
  69. data/data/plates/cn.yml +1431 -0
  70. data/data/plates/cy.yml +688 -0
  71. data/data/plates/cz.yml +1179 -0
  72. data/data/plates/de.yml +553 -118
  73. data/data/plates/dk.yml +1647 -0
  74. data/data/plates/ee.yml +1275 -0
  75. data/data/plates/es.yml +228 -32
  76. data/data/plates/fi.yml +1271 -0
  77. data/data/plates/fr.yml +1265 -0
  78. data/data/plates/gb.yml +1188 -0
  79. data/data/plates/gr.yml +721 -0
  80. data/data/plates/hr.yml +860 -0
  81. data/data/plates/hu.yml +959 -0
  82. data/data/plates/ie.yml +775 -0
  83. data/data/plates/in.yml +1172 -0
  84. data/data/plates/is.yml +667 -0
  85. data/data/plates/it.yml +1317 -0
  86. data/data/plates/jp.yml +3650 -0
  87. data/data/plates/kr.yml +1375 -0
  88. data/data/plates/li.yml +1010 -0
  89. data/data/plates/lt.yml +879 -0
  90. data/data/plates/lu.yml +842 -0
  91. data/data/plates/lv.yml +924 -0
  92. data/data/plates/mc.yml +1024 -0
  93. data/data/plates/mt.yml +854 -0
  94. data/data/plates/mx.yml +1372 -0
  95. data/data/plates/my.yml +685 -0
  96. data/data/plates/nl.yml +44 -0
  97. data/data/plates/no.yml +1018 -0
  98. data/data/plates/nz.yml +1699 -0
  99. data/data/plates/pl.yml +1296 -0
  100. data/data/plates/pt.yml +847 -0
  101. data/data/plates/ro.yml +785 -0
  102. data/data/plates/se.yml +1091 -0
  103. data/data/plates/si.yml +1105 -0
  104. data/data/plates/sk.yml +1439 -0
  105. data/data/plates/sm.yml +1119 -0
  106. data/data/plates/th.yml +1150 -0
  107. data/data/plates/ua.yml +1672 -0
  108. data/data/plates/us-ak.yml +763 -0
  109. data/data/plates/us-al.yml +457 -0
  110. data/data/plates/us-ar.yml +427 -0
  111. data/data/plates/us-as.yml +454 -0
  112. data/data/plates/us-az.yml +430 -0
  113. data/data/plates/us-ca.yml +892 -0
  114. data/data/plates/us-co.yml +452 -0
  115. data/data/plates/us-ct.yml +427 -0
  116. data/data/plates/us-dc.yml +614 -0
  117. data/data/plates/us-de.yml +551 -0
  118. data/data/plates/us-fl.yml +319 -96
  119. data/data/plates/us-ga.yml +644 -0
  120. data/data/plates/us-gu.yml +658 -0
  121. data/data/plates/us-hi.yml +585 -0
  122. data/data/plates/us-ia.yml +438 -0
  123. data/data/plates/us-id.yml +531 -0
  124. data/data/plates/us-il.yml +516 -0
  125. data/data/plates/us-in.yml +324 -0
  126. data/data/plates/us-ks.yml +351 -0
  127. data/data/plates/us-ky.yml +770 -0
  128. data/data/plates/us-la.yml +568 -0
  129. data/data/plates/us-ma.yml +379 -0
  130. data/data/plates/us-md.yml +536 -0
  131. data/data/plates/us-me.yml +445 -0
  132. data/data/plates/us-mi.yml +408 -0
  133. data/data/plates/us-mn.yml +411 -0
  134. data/data/plates/us-mo.yml +356 -0
  135. data/data/plates/us-mp.yml +402 -0
  136. data/data/plates/us-ms.yml +432 -0
  137. data/data/plates/us-mt.yml +619 -0
  138. data/data/plates/us-nc.yml +602 -0
  139. data/data/plates/us-nd.yml +419 -0
  140. data/data/plates/us-ne.yml +483 -0
  141. data/data/plates/us-nh.yml +394 -0
  142. data/data/plates/us-nj.yml +547 -0
  143. data/data/plates/us-nm.yml +574 -0
  144. data/data/plates/us-nv.yml +655 -0
  145. data/data/plates/us-ny.yml +592 -0
  146. data/data/plates/us-oh.yml +404 -0
  147. data/data/plates/us-ok.yml +513 -0
  148. data/data/plates/us-or.yml +392 -0
  149. data/data/plates/us-pa.yml +506 -0
  150. data/data/plates/us-pr.yml +507 -0
  151. data/data/plates/us-ri.yml +445 -0
  152. data/data/plates/us-sc.yml +605 -0
  153. data/data/plates/us-sd.yml +428 -0
  154. data/data/plates/us-tn.yml +471 -0
  155. data/data/plates/us-tx.yml +535 -0
  156. data/data/plates/us-ut.yml +384 -0
  157. data/data/plates/us-va.yml +567 -0
  158. data/data/plates/us-vi.yml +489 -0
  159. data/data/plates/us-vt.yml +458 -0
  160. data/data/plates/us-wa.yml +484 -0
  161. data/data/plates/us-wi.yml +509 -0
  162. data/data/plates/us-wv.yml +446 -0
  163. data/data/plates/us-wy.yml +523 -0
  164. data/data/plates/va.yml +604 -0
  165. data/data/plates/za.yml +1141 -0
  166. data/data/vehicles.json +160653 -105090
  167. data/lib/vehicles/configuration.rb +17 -3
  168. data/lib/vehicles/dataset.rb +73 -18
  169. data/lib/vehicles/fuzzy.rb +115 -0
  170. data/lib/vehicles/http.rb +48 -0
  171. data/lib/vehicles/make.rb +36 -6
  172. data/lib/vehicles/mcp_server.rb +5 -5
  173. data/lib/vehicles/model.rb +21 -2
  174. data/lib/vehicles/plates/series.rb +172 -18
  175. data/lib/vehicles/plates/template_fill.rb +188 -0
  176. data/lib/vehicles/plates/templates.rb +162 -0
  177. data/lib/vehicles/plates.rb +12 -0
  178. data/lib/vehicles/providers/hosted_provider.rb +28 -55
  179. data/lib/vehicles/validators/vehicle_make_validator.rb +3 -1
  180. data/lib/vehicles/validators/vehicle_model_validator.rb +1 -1
  181. data/lib/vehicles/version.rb +1 -1
  182. data/lib/vehicles.rb +32 -16
  183. data/rakelib/data_refresh.rake +109 -0
  184. data/rakelib/plates_refresh.rake +29 -0
  185. data/sig/vehicles.rbs +18 -0
  186. metadata +164 -2
@@ -0,0 +1,445 @@
1
+ # plates/us-me.yml — Maine (PRD-PLATES gate L2, northeast group).
2
+ #
3
+ # MAINE IS THE BEST-SOURCED CURRENT BASE IN THIS GROUP AND POSSIBLY IN THE US.
4
+ # Where Florida's colours had to be recorded `observed` because Chapter 320 says
5
+ # only "retroreflection material", Maine's legislature legislated the ARTWORK.
6
+ # 29-A M.R.S. §451(4-A)(D), enacted by PL 2023 c.421 §3, states in terms that a
7
+ # new registration plate "must have a buff neutral shaded background that does
8
+ # not interfere with any identifying characteristics on the plate, a distinct
9
+ # border and: (1) Blue identification numbers and letters, A REPRESENTATION OF AN
10
+ # EASTERN WHITE PINE TREE AND A BLUE STAR REPRESENTING THE NORTH STAR on the side
11
+ # of the plate; or (2) Blue identification numbers and letters with no other
12
+ # features." Two statutory design variants, named in law, plus statutory
13
+ # character heights and statutory legends. That is an EDICT OF GOVERNMENT
14
+ # describing a plate design — public domain at every level (PRD-PLATES §4) — and
15
+ # it is why the renderer can build Maine from law rather than from a photograph.
16
+ #
17
+ # IT ALSO PRODUCES THIS FILE'S ONE REAL SOURCE CONFLICT, recorded and not
18
+ # averaged (PRD-PLATES §5.3): the STATUTE says "buff neutral shaded background";
19
+ # every secondary description of the plates actually issued from 1 May 2025 says
20
+ # REFLECTIVE WHITE with a dark blue serial, "MAINE" in dark green at top and
21
+ # "VACATIONLAND" in dark green at bottom. Both are recorded below. Nobody should
22
+ # reconcile them without a departmental colour spec, which was not obtained.
23
+ #
24
+ # PERIOD EVIDENCE IS ALSO STATUTORY, which is rare: §451(1-A) says the Secretary
25
+ # of State "shall begin issuing the new plates NO LATER THAN MAY 1, 2025" and
26
+ # "shall complete the issuance of new plates BEFORE JULY 31, 2026". So Maine has
27
+ # a legislated rollout window — announced/first-issue/full-coverage in one
28
+ # subsection — which is exactly the `period.rollout:` shape PRD-PLATES §2.2
29
+ # anticipated for Mercosur and had not yet needed in the US.
30
+ jurisdiction: us-me
31
+ authority:
32
+ name: Maine Bureau of Motor Vehicles (BMV), Department of the Secretary of State
33
+ url: "https://www.maine.gov/sos/bmv/"
34
+ binding: vehicle
35
+ statute_edition: >-
36
+ Maine Revised Statutes Title 29-A (Motor Vehicles and Traffic), Chapter 5
37
+ Subchapter 1 Article 3 (Registration Plates), §§ 451-453, as served by the
38
+ Maine Office of the Revisor of Statutes with the page footer "Data for this
39
+ page extracted on 10/20/2025" — the edition read for this pass.
40
+
41
+ # ---------------------------------------------------------------------------
42
+ # artwork_risk — required per jurisdiction by PRD-PLATES §4.
43
+ # ---------------------------------------------------------------------------
44
+ artwork_risk:
45
+ posture: favourable-on-the-edict-ground-weak-on-the-general-ground
46
+ basis: >-
47
+ Maine splits cleanly into two questions and the answers differ. (1) THE
48
+ DESIGN AS DESCRIBED IN STATUTE: 29-A M.R.S. §451(4-A) describes the current
49
+ plate's background, border, colour, pine tree, star and legend heights in
50
+ the text of a statute. Edicts of government are uncopyrightable at every
51
+ level of US government ({{PD-US-GovEdict}}), so the DESCRIPTION is
52
+ unambiguously free to use, and a render derived from the statutory
53
+ description rather than from artwork is on the strongest footing available
54
+ anywhere in this group. (2) THE STATE'S GENERAL COPYRIGHT POSTURE: much
55
+ weaker. Commons does carry a {{PD-MEGov}} template — confirmed present by
56
+ API this pass — but its entire content is a bare {{PD-copyright holder}}
57
+ wrapper naming "The State Government of Maine", with NO cited statute, court
58
+ decision, agency statement or terms-of-use page behind it. Compare
59
+ {{PD-FLGov}}, which rests on Microdecisions v. Skinner, or {{PD-MAGov}},
60
+ which quotes the Secretary of the Commonwealth at length. Maine is also
61
+ absent from the Wikipedia survey of subnational copyright postures.
62
+ reading: >-
63
+ Render Maine from §451(4-A)'s words. Do NOT rely on {{PD-MEGov}} for
64
+ anything, and do not record Maine as a public-domain state on its strength:
65
+ an untagged assertion on a wiki is not evidence, and treating it as evidence
66
+ is precisely the laundering PRD-PLATES §4 forbids. Recorded as UNRESEARCHED
67
+ at the general level with the specific edict ground stated.
68
+ emblem_rule: >-
69
+ PRD-PLATES §3 placeholder default applies to the PINE TREE and NORTH STAR
70
+ even here. The 2025 design is reported to pay homage to the Maine state flag
71
+ of 1901-1909, and flag/seal protection independent of copyright is
72
+ unresearched for Maine (recorded gap). Note that the statute describes the
73
+ elements generically — "a representation of an eastern white pine tree",
74
+ "a blue star representing the North Star" — which is a description of a
75
+ SUBJECT, not of a specific drawing; an independently drawn pine and star
76
+ satisfying that description is original work, which is the render posture to
77
+ take.
78
+ photograph_caution: "Commons photographs of Maine plates carry the photographer's licence, not the design's; our renders are generated and never derived from a photograph, so those obligations never attach."
79
+ sources:
80
+ - "https://legislature.maine.gov/statutes/29-A/title29-Asec451.html # 29-A M.R.S. §451(4-A)(D): the statutory design description itself — an edict of government, PD"
81
+ - "https://commons.wikimedia.org/wiki/Template:PD-MEGov # fetched this pass: the template EXISTS but its full text is a bare {{PD-copyright holder|1=The State Government of Maine}} with no cited instrument — recorded as weak evidence, explicitly not relied upon"
82
+ - "https://en.wikipedia.org/wiki/Copyright_status_of_works_by_subnational_governments_of_the_United_States # LOCATOR: Maine has NO entry in this survey"
83
+
84
+ display_rules:
85
+ default: "TWO plates. 29-A M.R.S. §452(1): 'A registration plate must be displayed horizontally. Only one set of Maine registration plates may be displayed on one vehicle. A registration plate must be attached to the front and the rear of each vehicle except as follows.'"
86
+ exceptions:
87
+ - "trailer and semitrailer: plate 'may be attached only to the rear' (§452(1)(A))"
88
+ - "motorcycle: plate 'may not be attached to the front of that motorcycle' (§452(1)(B))"
89
+ - "manufacturer, dealer or transporter: plate 'may be attached only to the rear of the vehicle' (§452(1)(C))"
90
+ - "TRUCK TRACTOR: plate 'may be attached only to the FRONT of that truck tractor' (§452(1)(D)) — front-only, the inverse of the state default. Maine and Florida are now the two confirmed US front-only-truck-tractor jurisdictions in this dataset; the FL pilot called it 'a genuine outlier' and it turns out to have at least one companion"
91
+ swinging_plates: "§452(2): the plate for a FARM TRUCK or a vehicle hauling FOREST PRODUCTS 'may be attached by means of a rigid or semirigid bracket that allows the plate to swing freely' — an explicit statutory carve-out from the near-universal no-swing rule, and a Maine-specific one"
92
+ legibility: "§452(3) 'Registration plates must always be properly displayed'; §452(4) 'Registration plates, including the numbers, letters and words, must always be plainly visible and legible.' Note Maine legislates NO distance test, where Connecticut legislates fifty feet, Massachusetts sixty and Rhode Island a hundred"
93
+ sources:
94
+ - "https://legislature.maine.gov/statutes/29-A/title29-Asec452.html # §452: horizontal display, one set only, front and rear default, the four exceptions including the FRONT-ONLY truck tractor, the farm/forest-products swinging bracket, and the visibility duties"
95
+
96
+ us_standards:
97
+ no_federal_mandate: true
98
+ chain: "SAE J686 -> AAMVA License Plate Standard Edition 3 (September 2025) -> voluntary state adoption; recommended practice, not requirement."
99
+ aamva_geometry: "AAMVA §2.1 jurisdiction name top-centre between the bolt holes, >=0.25 in above the plate number, >=0.125 in from the top edge, jurisdiction characters 0.75-1.0 in; §2.2 serial characters >=2.5 in high, spaced >=0.25 in, stroke 0.2-0.4 in, >=1.25 in clear of top and bottom edges; §3.3 legible day and night from >=75 feet, ASTM D4956-19 and ISO 7591:1982 cl.3, entrance angle 0.2 deg, observation angle -4 deg, minimum 45 cd/lx/m^2."
100
+ maine_exceeds_aamva_on_one_axis: >-
101
+ MAINE LEGISLATES CHARACTER HEIGHTS AND THEY ARE NOT AAMVA'S. §451(4-A)(A):
102
+ the word "Maine" must be "in letters of at least 3/4 inch in height centered
103
+ at the top" — AAMVA §2.1 recommends 0.75-1.0 in for the jurisdiction name, so
104
+ Maine's statutory minimum sits exactly at AAMVA's floor. §451(4-A)(B):
105
+ "Except on motorcycle plates, registration numbers may not be substantially
106
+ less than 3 inches high" — AAMVA §2.2 recommends at least 2.5 in, so Maine
107
+ legislates HIGHER than AAMVA recommends. §451(4-A)(C): "Vacationland" at the
108
+ bottom "in letters not less than 3/4 inch in height". This is the only state
109
+ in the northeast group whose own law states renderable geometry.
110
+ dimensions_delegated: "AAMVA §3.1 sends plate dimensions and bolt holes to SAE J686, PAYWALLED and UNPINNED; no J686 dimension is quoted here. Title 29-A states character heights but NO overall plate dimension, so 12x6 in below is `observed`."
111
+ replacement_cycle: "§451(1) requires 'a new general issue of registration plates periodically as determined by the Legislature', and 'each new general issue must be easily distinguishable BY COLOR from the preceding general issue' — a statutory legibility-of-generations rule rather than a fixed cycle. §451(1-A) is the Legislature exercising that power for 2025-2026."
112
+ manufacture: "§451(6): all Maine registration plates are manufactured at the BOLDUC CORRECTIONAL FACILITY, under the charge of the Warden of the State Prison, and only plates that cannot be produced there or whose anticipated demand is below a threshold set by the Secretary of State may be purchased outside. A statutory single-source manufacturing mandate — no other state in this group legislates where its plates are made."
113
+ source: "https://www.aamva.org/getmedia/646bcc8a-219b-47d8-b5cd-726240473163/License-Plate-Standard-Edition-3_September-2025-Update.pdf"
114
+
115
+ series:
116
+
117
+ # =========================================================================
118
+ # CURRENT STANDARD ISSUE — the 2025 general issue, statutory variant (D)(1).
119
+ # =========================================================================
120
+ - id: us-me-standard-2025-pine
121
+ class: standard
122
+ categories: [car, van, truck, bus]
123
+ period:
124
+ start: 2025
125
+ rollout:
126
+ first_issue_deadline: 2025
127
+ full_coverage_deadline: 2026
128
+ statutory_text: "§451(1-A): the Secretary of State 'shall provide for a new general issue of registration plates and shall begin issuing the new plates no later than May 1, 2025. The Secretary of State shall complete the issuance of new plates before July 31, 2026 to all vehicles required to obtain new plates.'"
129
+ period_evidence: statutory-date
130
+ matching: strict
131
+ format:
132
+ pattern: "999 LLL"
133
+ regex: '\A\d{3} ?[A-Z]{3}\z'
134
+ charset:
135
+ notes: >-
136
+ THE GRAMMAR IS NOT IN THE STATUTE AND THE STATUTE SAYS SO: §451(4-A)(E)
137
+ delegates it — 'The Secretary of State shall devise, with the advice of
138
+ the joint standing committee of the Legislature having jurisdiction over
139
+ transportation matters, A NUMBERING SYSTEM suitable for a new general
140
+ issue of registration plates.' So Maine's format is administrative even
141
+ though its design is statutory, which is the reverse of the usual US
142
+ split. Reported (secondary): three digits, then three letters, with the
143
+ MIDDLE letter progressing first, then the last, then the first; letters
144
+ I and O not used; initial letters A-E reserved for optional and certain
145
+ non-passenger types; F-H reserved for the plain statutory variant (see
146
+ us-me-standard-2025-plain); this variant runs from 101 KAA.
147
+ separator_note: "the group gap is printed as a small raised dot in secondary depictions; spelled U+0020 here because U+00B7 is in the FORGIVING but not the EMITTED set (PRD-PLATES §2.6)"
148
+ progression: "101 KAA upward, middle letter first"
149
+ design:
150
+ plate: { w: 12, h: 6, unit: in, dimension_note: "OBSERVED — Title 29-A states character heights but no plate size" }
151
+ background:
152
+ finish: retroreflective
153
+ statutory_description: "'a buff neutral shaded background that does not interfere with any identifying characteristics on the plate, a distinct border' (§451(4-A)(D))"
154
+ observed_description: "reflective white (secondary)"
155
+ conflict_note: >-
156
+ THE STATUTE AND EVERY SECONDARY DESCRIPTION DISAGREE ABOUT THE
157
+ BACKGROUND. Statute: "buff neutral shaded". Secondary: reflective white.
158
+ NO HEX IS RECORDED, because recording one would be choosing a side.
159
+ PRD-PLATES §5.3: disagreements are recorded, never averaged. Resolving
160
+ this needs a BMV colour specification, which was not obtained.
161
+ foreground_statutory: "'Blue identification numbers and letters' (§451(4-A)(D)(1)); secondary describes the issued plates as DARK BLUE serial — consistent"
162
+ legend_top: "MAINE"
163
+ legend_top_rule: "§451(4-A)(A): 'Registration plates must bear the year of issue or the last 2 numerals of that year and the word \"Maine\" in letters of at least 3/4 inch in height centered at the top of the registration plate.' Secondary reports MAINE screened in DARK GREEN — the statute names no colour for the legend."
164
+ legend_bottom: "VACATIONLAND"
165
+ legend_bottom_rule: "§451(4-A)(C): 'On registration plates issued for private use and trucks, the word \"Vacationland\" must be centered at the bottom in letters not less than 3/4 inch in height, except when the Secretary of State determines that, for other than passenger vehicles, that space may be used for CLASS CODES.' So on Maine non-passenger plates the bottom legend slot is a class-code slot — a statutory design switch, and the reason several Maine classes below carry a code where the slogan would be."
166
+ graphic:
167
+ present: true
168
+ rendered: placeholder
169
+ statutory_description: "'a representation of an eastern white pine tree and a blue star representing the North Star on the side of the plate' (§451(4-A)(D)(1))"
170
+ note: "the statute describes a SUBJECT, not a drawing — an independently drawn pine and star satisfying the description is original work. See artwork_risk."
171
+ emblem: { present: true, rendered: placeholder }
172
+ rear_differs: false
173
+ replacement_cycle:
174
+ statutory_rule: "§451(1): 'The Secretary of State shall provide a new general issue of registration plates periodically as determined by the Legislature. Each new general issue must be easily distinguishable by color from the preceding general issue.'"
175
+ note: "Maine legislates a DISTINGUISHABILITY requirement rather than an interval — a different answer to the same problem AAMVA §1.1 answers with 7-to-10 years, and arguably a better one for a dataset, because it guarantees that generations are visually separable."
176
+ region_encoding: none
177
+ sources:
178
+ - "https://legislature.maine.gov/statutes/29-A/title29-Asec451.html # 29-A M.R.S. §451: (1) periodic general issue distinguishable by colour; (1-A) begin no later than 1 May 2025, complete before 31 July 2026; (4-A)(A) 'Maine' >= 3/4 in at top plus year; (4-A)(B) numbers not substantially less than 3 in; (4-A)(C) 'Vacationland' >= 3/4 in at bottom or class codes; (4-A)(D)(1) buff background, distinct border, blue characters, eastern white pine, blue North Star; (4-A)(E) the numbering system is delegated to the Secretary of State; (6) manufacture at the Bolduc Correctional Facility"
179
+ - "https://legislature.maine.gov/statutes/29-A/title29-Asec452.html # §452: display front and rear, the front-only truck tractor rule"
180
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Maine # LOCATOR ONLY (PRD-PLATES §4): the 123·ABC arrangement, the 101·KAA start, the middle-letter-first progression, the I/O exclusion, the A-E and F-H block reservations, the reported reflective-white/dark-blue/dark-green colours that CONFLICT with the statute's 'buff', and the homage to the 1901-1909 state flag"
181
+ notes: >-
182
+ MAINE 2025 GENERAL ISSUE, PINE TREE VARIANT. This is the only series in the
183
+ northeast group whose START DATE, BACKGROUND, BORDER, CHARACTER COLOUR,
184
+ GRAPHIC SUBJECTS, LEGEND WORDING AND LEGEND HEIGHTS are all statutory, and
185
+ it is therefore the group's reference case for "render from the edict". The
186
+ one thing the statute does NOT give is the serial grammar, which it
187
+ expressly delegates (§451(4-A)(E)) — the exact inverse of Florida, where the
188
+ character cap is statutory and the colours are not. Two states, two
189
+ opposite splits between law and administration; a dataset that assumes
190
+ either split is uniform will mis-source half the country.
191
+
192
+ # =========================================================================
193
+ # CURRENT STANDARD ISSUE — statutory variant (D)(2), the plain base.
194
+ # =========================================================================
195
+ - id: us-me-standard-2025-plain
196
+ class: standard
197
+ categories: [car, van, truck, bus]
198
+ period: { start: 2025 }
199
+ period_evidence: statutory-date
200
+ matching: strict
201
+ format:
202
+ pattern: "999 LLL"
203
+ regex: '\A\d{3} ?[A-Z]{3}\z'
204
+ charset: { notes: "same delegated numbering system as the pine variant; distinguished only by SERIAL BLOCK — letters F to H are reported reserved for this variant, which runs from 101 FAA, against the pine variant's K block" }
205
+ separator_note: "as us-me-standard-2025-pine"
206
+ design:
207
+ plate: { w: 12, h: 6, unit: in }
208
+ background:
209
+ finish: retroreflective
210
+ statutory_description: "same 'buff neutral shaded background ... distinct border' as (D)(1); the same statute/secondary conflict applies and no hex is recorded"
211
+ foreground_statutory: "'Blue identification numbers and letters with no other features' (§451(4-A)(D)(2)) — the operative words are NO OTHER FEATURES"
212
+ legend_top: "MAINE"
213
+ legend_bottom: "VACATIONLAND"
214
+ graphic: { present: false, statutory_basis: "(D)(2) expressly excludes other features — so this variant's ABSENCE of a graphic is itself statutory, which makes it the cleanest thing in the whole dataset to render: there is nothing to approximate" }
215
+ emblem: { present: false }
216
+ region_encoding: none
217
+ sources:
218
+ - "https://legislature.maine.gov/statutes/29-A/title29-Asec451.html # §451(4-A)(D)(2): 'Blue identification numbers and letters with no other features' — the second statutory variant, in the alternative to (D)(1)"
219
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Maine # LOCATOR ONLY: the alternative base 'issued concurrently with the pine tree base' from 1 May 2025, running from 101·FAA"
220
+ notes: >-
221
+ THE PLAIN 2025 VARIANT — its own series and not a sub-entry, because
222
+ §451(4-A)(D) offers (1) and (2) as ALTERNATIVES and the design difference
223
+ (graphic vs no graphic) is exactly the difference PRD-PLATES §2.3 says makes
224
+ a series. It also has a distinct serial block (F-H vs K), so the format
225
+ differs in practice as well. WHY THIS MATTERS BEYOND MAINE: a US state
226
+ offering a deliberately graphic-free standard plate alongside a graphic one
227
+ is the render layer's dream case — the emblem-placeholder problem of
228
+ PRD-PLATES §3 simply does not arise for this variant, and a consumer that
229
+ needs a guaranteed-clean Maine render should ask for this one.
230
+
231
+ # =========================================================================
232
+ # ONE SERIES BACK — the chickadee base, 1999 to April 2025.
233
+ # =========================================================================
234
+ - id: us-me-chickadee-1999
235
+ class: standard
236
+ categories: [car, van, truck, bus]
237
+ period: { start: 1999, end: 2025 }
238
+ period_evidence: secondary-dated
239
+ matching: recall-only
240
+ format:
241
+ pattern: "9999 LL"
242
+ regex: '\A(?:\d{4} ?[A-Z]{2}|\d{3} ?[A-Z]{3})\z'
243
+ charset: { notes: "letter O not used in the 1234 AB era; letters I and O not used in the 123 ABC era (both secondary)" }
244
+ union_note: >-
245
+ THE REGEX IS A UNION AND THAT IS WHY `matching: recall-only`. The
246
+ chickadee base carried TWO serial grammars in its 26-year life: 1234 AB
247
+ from 1 July 1999, then 123 ABC from October 2023 until the base was
248
+ retired on 30 April 2025. A hit on this regex says "this string has a
249
+ shape Maine issued on the chickadee base" and nothing more — it does not
250
+ say which grammar, and it does not say the string is a valid Maine
251
+ registration. Splitting this into two strict series is the right final
252
+ answer and is deliberately deferred: L2 scope allows ONE series back, no
253
+ primary bounds either sub-era, and minting two dated ids on secondary
254
+ boundaries would create two ids to alias later rather than one.
255
+ design:
256
+ plate: { w: 12, h: 6, unit: in }
257
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
258
+ foreground: "#000000"
259
+ colour_note: "embossed BLACK serial on reflective white with a border line (secondary). Recorded with hexes because, unlike the 2025 base, no statute contradicts the observation — §451(4) as it stood set legends and heights but no colour"
260
+ legend_top: "MAINE"
261
+ legend_bottom: "Vacationland"
262
+ legend_placement_note: "'Vacationland' was screened in black INSIDE the pine-forest silhouette at the bottom rather than on a clear field — which satisfies §451(4)(C)'s 'centered at the bottom' while making the slogan part of the graphic"
263
+ graphic: { present: true, rendered: placeholder, description: "black-capped chickadee on a pine cone and tassel screened at left, green pine forest silhouette screened at bottom (secondary)" }
264
+ emblem: { present: true, rendered: placeholder }
265
+ region_encoding: none
266
+ sources:
267
+ - "https://legislature.maine.gov/statutes/29-A/title29-Asec451.html # §451(4) — the design subsection that governed this base before PL 2023 c.421 replaced it for the new general issue: 'Maine' >= 3/4 in at top with the year, numbers not substantially less than 3 in, 'Vacationland' centred at the bottom for private use"
268
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Maine # LOCATOR ONLY: the chickadee base 1 July 1999 - 30 April 2025, the 1234 AB grammar (1 GA to 9999 ZY, letter O unused) and the 123 ABC grammar from October 2023 (101 JAA to 691 JQJ as of 2 May 2025, letters I and O unused)"
269
+ - "https://licenseplates.cc/ME # enthusiast corroboration, cited because used: the reported serial high-water marks. No text or image copied"
270
+ notes: >-
271
+ THE CHICKADEE BASE — 26 years, two grammars, one design, and still
272
+ lawfully on the road during the 2025-2026 rollout window that §451(1-A)
273
+ leaves open until 31 July 2026. That overlap is legislated, not accidental:
274
+ Maine law expressly contemplates old and new plates coexisting for fifteen
275
+ months, which is the `period` overlap PRD-PLATES §2.2 calls legal-iff-noted.
276
+ Recorded with `end: 2025` because issuance stopped on 30 April 2025; a
277
+ chickadee plate seen in June 2026 is valid, not expired.
278
+
279
+ # =========================================================================
280
+ # CORE DISTINCT CLASSES.
281
+ # =========================================================================
282
+ - id: us-me-motorcycle
283
+ class: motorcycle
284
+ categories: [motorcycle]
285
+ period: { start: 2012 }
286
+ period_evidence: secondary-dated
287
+ matching: strict
288
+ format:
289
+ pattern: "999 LL"
290
+ regex: '\A\d{1,3} ?[A-Z]{2}\z'
291
+ charset: { notes: "reported 1 AA to approximately 500 AR (1995-97), 1 AT onward with 'RIDE SAFE' at the bottom (1998 - mid 2012), 501 HV to present on the current variant. Variable leading-digit width, hence the {1,3} quantifier, which makes no width claim beyond three" }
292
+ design:
293
+ plate: { w: 7, h: 4, unit: in, dimension_note: "MOTORCYCLE PLATE SIZE NOT OBTAINED — placeholder carrying the conventional US motorcycle size; must not be treated as sourced (recorded gap)" }
294
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
295
+ foreground: "#00307D"
296
+ colour_note: "embossed blue serial on white with a border line (secondary); hexes observed"
297
+ legend_top: "MAINE"
298
+ legend_bottom: "RIDE SAFE"
299
+ legend_note: "the vertical 'MC' class marker at left was dropped in mid-2012 — the change that dates this series"
300
+ statutory_hook: "§451(4-A)(B) exempts motorcycle plates from the 3-inch character-height minimum in terms ('Except on motorcycle plates'), which is the only place Maine's statute acknowledges a reduced-size plate at all"
301
+ display_rule: "§452(1)(B): a motorcycle plate 'may not be attached to the front of that motorcycle' — rear only"
302
+ region_encoding: none
303
+ sources:
304
+ - "https://legislature.maine.gov/statutes/29-A/title29-Asec451.html # §451(4-A)(B): the express motorcycle exemption from the 3-inch character minimum"
305
+ - "https://legislature.maine.gov/statutes/29-A/title29-Asec452.html # §452(1)(B): motorcycle plates rear only"
306
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Maine # LOCATOR ONLY: the 123 AB motorcycle arrangement, the RIDE SAFE legend from 1998, the mid-2012 removal of the 'MC' marker, and the reported serial ranges"
307
+ notes: >-
308
+ MOTORCYCLE. Maine is the only state in this group whose statute
309
+ acknowledges the reduced-size plate by exempting it from a stated character
310
+ height rather than by delegating "such dimensions as the department deems
311
+ necessary" (Florida's approach). The exemption is therefore a real, if
312
+ indirect, statutory fact about motorcycle plates — and the actual size is
313
+ still a recorded gap, because an exemption from a height rule is not a size
314
+ specification.
315
+
316
+ - id: us-me-commercial
317
+ class: standard
318
+ categories: [truck]
319
+ period: { start: 2007 }
320
+ period_evidence: secondary-dated
321
+ matching: strict
322
+ format:
323
+ pattern: "9L-9999"
324
+ regex: '\A\d[A-Z]-?\d{4}\z'
325
+ charset: { notes: "reported 1A-0001 onward from December 2007; the preceding arrangement on the same base was 123-456 (600-001 to 799-999, July 1999 - December 2007), and before that a plain six-digit 123456 on the lobster base with a vertical 'COM' marker" }
326
+ separator_note: "Maine's commercial plates print a HYPHEN, which IS in the emitted set — so unlike the passenger series this pattern spells the separator exactly as printed (PRD-PLATES §2.6 rule 2)"
327
+ design:
328
+ plate: { w: 12, h: 6, unit: in }
329
+ background: { finish: retroreflective }
330
+ legend_bottom: "COMMERCIAL"
331
+ legend_rule: "this is §451(4-A)(C) in action: the statute lets the Secretary of State use the 'Vacationland' slot for CLASS CODES on other than passenger vehicles, and 'COMMERCIAL' embossed in place of the slogan is that permission exercised"
332
+ region_encoding: none
333
+ sources:
334
+ - "https://legislature.maine.gov/statutes/29-A/title29-Asec451.html # §451(4-A)(C): the statutory authority to replace the bottom slogan with class codes on non-passenger plates — the legal basis for this series' legend"
335
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Maine # LOCATOR ONLY: the 1A-2345 commercial arrangement from December 2007 and its two predecessors"
336
+ notes: >-
337
+ COMMERCIAL. Recorded as class `standard` with the legend carrying the
338
+ meaning (no `commercial` value exists in _meta/classes.yml); see the
339
+ class-vocabulary note in us-ma.yml, which raises the same issue. What makes
340
+ Maine's case worth recording is that the legend swap is STATUTORILY
341
+ AUTHORISED rather than merely departmental — §451(4-A)(C) anticipates
342
+ exactly this substitution.
343
+
344
+ - id: us-me-trailer-longterm
345
+ class: trailer
346
+ categories: [trailer]
347
+ period: { start: 2001 }
348
+ period_evidence: secondary-dated
349
+ matching: recall-only
350
+ format:
351
+ pattern: "99 99999"
352
+ regex: '\A\d{2} ?(?:\d{5}|\d{4}[A-Z])\z'
353
+ charset: { notes: "reported 12 34567 and 12 3456A, where the LEADING TWO DIGITS ARE THE YEAR OF EXPIRATION and the remainder is the sequence. Two tail shapes are reported, hence the union and `recall-only`" }
354
+ design:
355
+ plate: { w: 12, h: 6, unit: in }
356
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
357
+ foreground: "#00693E"
358
+ colour_note: "embossed green serial on white with a border line (secondary)"
359
+ legend_top: "MAINE"
360
+ legend_bottom: "SEMI PERMANENT"
361
+ layout_note: "reported to carry the DAY of expiration at top right and a vertical stacked 'TLR' between the first two digits and the last five — a stacked class marker sitting INSIDE the serial field. AAMVA's rule that stacked characters are part of the official plate number (Ed.3) would make 'TLR' serial-significant; Maine's own usage clearly treats it as a class marker. The contradiction is recorded and belongs to the parse layer, not here."
362
+ serial_encoding:
363
+ kind: expiry-year
364
+ rule: "the first two digits of the serial are the YEAR the registration expires"
365
+ consequence: "Maine registers these trailers for periods 'between 3 and 25 years' (secondary), so the embedded year is doing real work — it is the only way to read a 25-year registration's expiry off the plate. A second US time-encoding after Massachusetts's month digit, and a different one: MA encodes the month in the LAST character, ME the year in the FIRST TWO."
366
+ evidence: secondary
367
+ display_rule: "§452(1)(A): trailer and semitrailer plates 'may be attached only to the rear'"
368
+ region_encoding: none
369
+ sources:
370
+ - "https://legislature.maine.gov/statutes/29-A/title29-Asec452.html # §452(1)(A): trailer plates rear only"
371
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Maine # LOCATOR ONLY: the long-term/semi-permanent trailer series 2001-2018 and after, the year-coded leading digits, the 3-to-25-year registration periods, the stacked 'TLR' marker and the day-of-expiration field"
372
+ notes: >-
373
+ LONG-TERM TRAILER — the second time-encoded serial in this group and the
374
+ one with the longer horizon. Worth flagging for the parse API: a Maine
375
+ trailer plate reading "31 12345" is not a 31-thousand-something serial, it
376
+ is a 2031 expiry with sequence 12345, and any validator that treats the
377
+ leading pair as sequence will sort Maine trailers into nonsense.
378
+
379
+ # =========================================================================
380
+ # SPECIALTY — PROGRAM INDEX ONLY (PRD-PLATES §2.5).
381
+ # =========================================================================
382
+ - id: us-me-specialty-index
383
+ class: specialty
384
+ categories: [car, van, truck]
385
+ period: { start: 2003 }
386
+ period_evidence: secondary-dated
387
+ matching: strict
388
+ format:
389
+ pattern: "999 LLL"
390
+ regex: '\A\d{3} ?[A-Z]{3}\z'
391
+ charset: { notes: "every Maine optional plate introduced from 2003 onward uses the SAME 123 ABC grammar as the standard series and is distinguished ONLY by its assigned three-letter block — so a Maine specialty serial is indistinguishable from a standard serial except by block lookup" }
392
+ design:
393
+ plate: { w: 12, h: 6, unit: in }
394
+ background: { finish: retroreflective }
395
+ note: "one design per authorised program; individual designs are L4 scope (PRD-PLATES §2.5) and none is described here"
396
+ emblem: { present: true, rendered: placeholder }
397
+ program_index:
398
+ count_reported: 9
399
+ count_basis: >-
400
+ NINE optional programs, all introduced from 2003 onward, counted from the
401
+ secondary catalogue: Lobster (1 May 2003), Black Bear (3 November 2003),
402
+ Wabanaki (12 August 2005), Agriculture (1 October 2007), Support Our
403
+ Troops (1 November 2007), Sportsman (7 April 2008), Breast Cancer (1
404
+ October 2008), Animal Welfare (1 October 2009), The Barbara Bush
405
+ Children's Hospital (1 October 2018). This is the SMALLEST specialty
406
+ program in the northeast group by an order of magnitude — Maine has nine
407
+ where Massachusetts's own 2014 booklet lists fifty and Florida claims over
408
+ a hundred. The smallness is the finding: "US states have hundreds of
409
+ specialty plates" is a Florida/Texas generalisation that does not survive
410
+ contact with New England.
411
+ count_currency_caveat: "The BMV's own plate catalogue page was NOT successfully fetched this pass (maine.gov/sos/bmv/registrations/plates.html returned 404; the Wayback CDX index for maine.gov/sos/bmv surfaces forms but not the catalogue). The count above is secondary and undated at the upper end — a tenth program added since 2018 would not appear (recorded gap)."
412
+ serial_block_index:
413
+ mechanism: "each program is assigned one or more THREE-LETTER BLOCKS in the shared 123 ABC space, e.g. Sportsman AKA-AKZ, ASA-ASZ, AVA-AVZ, BDA-BDZ, BHA-BHZ; Breast Cancer ALA-ALZ, ATA-ATZ, AYA-AYZ; Animal Welfare AMA-AMZ, AWA-AWZ, BGA-BGZ; Barbara Bush Children's Hospital BBA-BBZ, BJA-BJZ."
414
+ significance: >-
415
+ THIS IS THE MOST USEFUL SPECIALTY ARTEFACT IN THE WHOLE NORTHEAST GROUP
416
+ AND NO COMPETING DATASET HAS ANYTHING LIKE IT. Because Maine allocates
417
+ specialty programs by three-letter block inside the ordinary passenger
418
+ grammar, a Maine serial's letter group DETERMINES ITS PROGRAM — the plate
419
+ number itself decodes to a charity. That is a genuine `region_encoding`-
420
+ shaped decode table (a `plates/_decode/us-me-optional-blocks.yml`
421
+ candidate) with a program dimension instead of a geographic one, and it
422
+ would let a parse API answer "which Maine plate design is this?" from
423
+ the string alone. NOT BUILT HERE: the block list obtained is partial
424
+ (five of nine programs) and secondary, so building the table on it would
425
+ bake in gaps. Recorded as the single highest-value follow-up this group
426
+ identified.
427
+ statutory_route: "§451(5): 'A vehicle required to be registered in a special class under this Title may display only the number plates designed for that special class of registration' — and the Secretary of State may issue a temporary credential in lieu of a special-class plate, under routine technical rules"
428
+ official_list_url: "https://www.maine.gov/sos/bmv/"
429
+ region_encoding: none
430
+ sources:
431
+ - "https://legislature.maine.gov/statutes/29-A/title29-Asec451.html # §451(5): special classes may display only their own plates; the temporary-credential alternative and the routine-technical-rules authority"
432
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Maine # LOCATOR ONLY: the nine optional programs with their introduction dates, the shared 123·ABC grammar from 2003 onward, and the assigned three-letter serial blocks quoted above"
433
+ notes: >-
434
+ THE MAINE SPECIALTY INDEX — nine programs, a shared grammar, and a
435
+ block-allocation scheme that is effectively a decode table waiting to be
436
+ built. Two things worth carrying forward. First, the count is small enough
437
+ to be complete, which no other US state's index in this dataset can claim.
438
+ Second, Maine's vanity plates are a genuinely notable adjacent fact: the
439
+ legislature removed its vanity review criteria in 2015 as constitutionally
440
+ doubtful, a proliferation followed, and in 2021 it directed the BMV to make
441
+ new rules banning profane, violent and derogatory content — with the review
442
+ committee reportedly consulting Urban Dictionary for arcane lingo. Recorded
443
+ as index colour, not as a series; the vanity grammar itself (form MV-45,
444
+ $25 annual fee, three ranked choices, 10-12 week delivery) was obtained but
445
+ no character rule was stated on the form, so no vanity series is minted.