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,458 @@
1
+ # plates/us-vt.yml — Vermont (PRD-PLATES gate L2, northeast group).
2
+ #
3
+ # VERMONT DELEGATES MORE COMPLETELY THAN ANY OTHER STATE IN THIS GROUP. 23 V.S.A.
4
+ # § 304(a), verbatim: "The number plate or plates issued shall be OF THE MATERIAL,
5
+ # SIZE, SHAPE, AND COLOR, AND WITH THE NUMERALS OR LETTERS THEREON, THE
6
+ # COMMISSIONER MAY DETERMINE, and shall be reflectorized in part or in whole."
7
+ # Material, size, shape, colour and grammar — all five delegated in one sentence,
8
+ # with exactly one substantive requirement left standing: reflectorization, and
9
+ # even that only "in part or in whole". No slogan mandate (contrast New
10
+ # Hampshire), no legend list (contrast Rhode Island), no character height
11
+ # (contrast Maine), no design description (contrast Maine again). Vermont's plate
12
+ # law is a grant of authority with a single condition attached.
13
+ #
14
+ # WHAT VERMONT DOES LEGISLATE, in detail, is the VANITY AND ORGANIZATION plate
15
+ # regime — § 304(b) runs to a page of criteria — and that turns out to include
16
+ # the only INTELLECTUAL-PROPERTY CLAUSE about plate artwork found in any statute
17
+ # in this group. See artwork_risk and us-vt-specialty-index.
18
+ #
19
+ # The current green base has been in issue since 1 January 1990: thirty-six years,
20
+ # the longest unbroken standard base in the northeast group and one of the oldest
21
+ # in the country.
22
+ jurisdiction: us-vt
23
+ authority:
24
+ name: Vermont Department of Motor Vehicles, Vermont Agency of Transportation
25
+ url: "https://dmv.vermont.gov/"
26
+ binding: vehicle
27
+ statute_edition: >-
28
+ Vermont Statutes Annotated, Title 23 (Motor Vehicles), Chapter 7 (Operators'
29
+ Licenses and Registration) — §§ 304 and 511 read this pass from the Vermont
30
+ General Assembly's statutes service. § 511's amendment line ends "2023, No. 41,
31
+ § 13, eff. November 1, 2023".
32
+
33
+ # ---------------------------------------------------------------------------
34
+ # artwork_risk — required per jurisdiction by PRD-PLATES §4.
35
+ # ---------------------------------------------------------------------------
36
+ artwork_risk:
37
+ posture: unresearched-with-one-statutory-signal
38
+ basis: >-
39
+ No affirmative Vermont public-domain instrument was located. Commons has NO
40
+ {{PD-VTGov}} template (queried by API this pass, result MISSING); Vermont has
41
+ NO entry in the Wikipedia survey of subnational copyright postures; and
42
+ vermont.gov's published policies, which WERE fetched, address only
43
+ PHOTOGRAPHS — "Photos displayed on the Vermont.gov website are copyrighted by
44
+ the photographer. Permission to use the photographs is granted for the
45
+ following limited uses ... Photos may not be sold or used in any way for
46
+ profit or commercial purposes" — plus a DMCA notice-and-takedown procedure
47
+ administered by Tyler Technologies, the state's portal vendor. That policy
48
+ says nothing about state-authored designs, and its stance on the one thing it
49
+ does address is restrictive. With no disclaimer located, the §105 default
50
+ governs: state works are presumed copyrighted.
51
+ one_statutory_signal: >-
52
+ THE INTERESTING PIECE, AND IT CUTS THE OTHER WAY FROM CONNECTICUT'S. Vermont
53
+ is the only state in this group whose plate statute contains an IP clause
54
+ about plate artwork — and the clause places the burden on the SPONSORING
55
+ ORGANIZATION, not on the state. 23 V.S.A. § 304(b)(2)(B): a special
56
+ organization plate's name and emblem "shall not be objectively obscene or
57
+ confusing to the general public and shall not promote, advertise, or endorse
58
+ a product, brand, or service provided for sale. THE ORGANIZATION'S NAME AND
59
+ EMBLEM MUST NOT INFRINGE ON OR VIOLATE A TRADEMARK, TRADE NAME, SERVICE MARK,
60
+ COPYRIGHT, OR OTHER PROPRIETARY OR PROPERTY RIGHT, AND THE ORGANIZATION MUST
61
+ HAVE THE RIGHT TO USE THE NAME AND EMBLEM." Two readings, both worth
62
+ recording. (1) It is direct statutory acknowledgement that plate emblems can
63
+ and do carry third-party IP — the same thing Rhode Island's Doerflinger
64
+ painting and New Hampshire's charity decals show empirically. (2) It says
65
+ nothing at all about the STATE's rights in the plates it designs itself, so it
66
+ does not resolve the general posture in either direction.
67
+ emblem_rule: >-
68
+ PRD-PLATES §3 placeholder default applies. The current base carries no state
69
+ seal; the 1985-1989 base carried a screened sugar maple. Vermont state-emblem
70
+ protection independent of copyright is unresearched (recorded gap). For
71
+ ORGANIZATION plates, § 304(b)(2)(B) makes it the organization's own warranty
72
+ that it may use its emblem — which is a reason to placeholder those emblems
73
+ rather than reproduce them, since the state has expressly not vouched for
74
+ them.
75
+ photograph_caution: "Commons photographs of Vermont plates carry the photographer's licence; and vermont.gov's own photo policy is a live reminder that a state website's images are frequently not the state's to license. Our renders are generated from spec and never derived from a photograph."
76
+ sources:
77
+ - "https://legislature.vermont.gov/statutes/section/23/007/00304 # 23 V.S.A. § 304(b)(2)(B): the organization name-and-emblem clause — no infringement of trademark, trade name, service mark, copyright or other proprietary right, and the organization must have the right to use them"
78
+ - "https://www.vermont.gov/policies # fetched this pass: the state portal's Photo Use Policy (photos copyrighted by the photographer, non-commercial use only) and its DMCA notice procedure via Tyler Technologies. Nothing about state-authored designs"
79
+ - "https://commons.wikimedia.org/w/api.php?action=query&titles=Template:PD-VTGov # queried this pass: MISSING — no Vermont public-domain tag exists on Commons"
80
+ - "https://en.wikipedia.org/wiki/Copyright_status_of_works_by_subnational_governments_of_the_United_States # LOCATOR: Vermont has NO entry — recorded as unsurveyed"
81
+
82
+ display_rules:
83
+ default: "ONE OR TWO, AT THE COMMISSIONER'S ELECTION. 23 V.S.A. § 511(a), verbatim: 'A motor vehicle operated on any highway shall have displayed in a conspicuous place EITHER ONE OR TWO NUMBER PLATES AS THE COMMISSIONER MAY REQUIRE. ... If only one number plate is furnished, the same shall be securely attached to the rear of the vehicle. If two are furnished, one shall be securely attached to the rear and one to the front.' Vermont does not legislate a plate count at all — it legislates what to do with whichever count the commissioner chooses. Reported practice (secondary): two for most classes, rear only for motorcycles and trailers."
84
+ legibility: "§ 511(a): plates 'shall be kept entirely unobscured, and the numerals and letters thereon shall be plainly legible at all times. They shall be kept horizontal, shall be so fastened as not to swing.' No distance test — the third different approach in this group after Connecticut's fifty feet at night, Massachusetts's sixty at night and Rhode Island's hundred in daylight."
85
+ swing_exception: "§ 511(a) carves out a genuinely mechanical exception: a motor truck or truck tractor may carry 'a device that would, upon contact with a substantial object, permit the rear number plate to swing toward the front of the vehicle, provided such device automatically returns the number plate to its original rigid position after contact is released'. A statutorily sanctioned breakaway plate mount."
86
+ ground_clearance: "§ 511(a): the ground clearance of the lower edges of the plate 'shall be established by the Commissioner pursuant to the provisions of 3 V.S.A. chapter 25' — i.e. by administrative rule, not by statute. The rule was not obtained (recorded gap)."
87
+ temporary_plates: "§ 511(e): a vehicle issued a temporary or in-transit registration plate under §§ 312, 458, 463 and 516-518 'shall have the temporary or in-transit registration plate displayed horizontally in a conspicuous place ON THE REAR of the vehicle, INCLUDING IN THE REAR WINDOW'. An express permission to display a temporary plate inside the glass — added by 2021 No. 76 and amended by 2023 No. 41 — which most states leave to practice."
88
+ violation: "§ 511(c): 'A person shall not operate a motor vehicle unless a number plate or number plates are displayed as provided in this section.'"
89
+ sources:
90
+ - "https://legislature.vermont.gov/statutes/section/23/007/00511 # 23 V.S.A. § 511(a): one or two plates as the Commissioner may require, rear-first attachment, unobscured and plainly legible, horizontal and non-swinging, the truck/truck-tractor breakaway exception, and the delegation of ground clearance to rule; (c) the operating prohibition; (e) temporary and in-transit plates displayed on the rear including in the rear window"
91
+ - "https://legislature.vermont.gov/statutes/section/23/007/00304 # § 304(a): the Commissioner assigns a distinctive number and issues the plate or plates; material, size, shape, colour and the numerals or letters are all as the Commissioner may determine; plates 'shall be reflectorized in part or in whole'; certificate and plates delivered free of charge"
92
+
93
+ us_standards:
94
+ no_federal_mandate: true
95
+ chain: "SAE J686 -> AAMVA License Plate Standard Edition 3 (September 2025) -> voluntary state adoption; recommendations, not requirements."
96
+ 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, characters 0.75-1.0 in; §2.2 serial characters >=2.5 in high, >=0.25 in apart, stroke 0.2-0.4 in, >=1.25 in clear of top and bottom; §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."
97
+ vermont_is_the_pure_delegation_case: >-
98
+ Vermont is the state where AAMVA's voluntary standard has the most room to
99
+ operate and the least statutory competition: § 304(a) hands material, size,
100
+ shape, colour and characters to the Commissioner without a single numeric
101
+ constraint. Whether the Commissioner in fact follows AAMVA Ed.3 WAS NOT
102
+ ESTABLISHED — no Vermont departmental plate specification was obtained
103
+ (recorded gap). So for Vermont, AAMVA's geometry is recorded as the general
104
+ US recommendation and expressly NOT as a claim about Vermont plates.
105
+ dimensions_delegated: "AAMVA §3.1 sends dimensions and bolt holes to SAE J686, PAYWALLED and UNPINNED; no J686 dimension is quoted here. Title 23 states no dimension — it says the size is whatever the Commissioner determines — so 12x6 in below is `observed`."
106
+ reflectorization_is_statutory: "§ 304(a): plates 'shall be reflectorized IN PART OR IN WHOLE'. The weakest reflectorization mandate in the group (Rhode Island requires 'fully reflective'; Connecticut requires 'fully reflectorized safety number plates'), and the only one that expressly contemplates a partly reflective plate."
107
+ replacement_cycle: "Vermont legislates none. The current base dates to 1 January 1990 — thirty-six years, roughly four AAMVA §1.1 cycles."
108
+ source: "https://www.aamva.org/getmedia/646bcc8a-219b-47d8-b5cd-726240473163/License-Plate-Standard-Edition-3_September-2025-Update.pdf"
109
+
110
+ series:
111
+
112
+ # =========================================================================
113
+ # CURRENT STANDARD ISSUE — the green base, 1 January 1990 to date.
114
+ # =========================================================================
115
+ - id: us-vt-standard-1990
116
+ class: standard
117
+ categories: [car, van, bus]
118
+ period: { start: 1990 }
119
+ period_evidence: secondary-dated
120
+ matching: strict
121
+ format:
122
+ pattern: "LLL 999"
123
+ regex: '\A[A-Z]{3} ?\d{3}\z'
124
+ charset:
125
+ notes: >-
126
+ Reported alphabet: letters I, J, O, Q and U are not used. Letters V and
127
+ Z were "traditionally skipped" but ARE NOW IN USE as of January 2024,
128
+ starting with the KPV series — a documented, dated alphabet EXPANSION,
129
+ which is a rarer event than a format change and a genuine hazard for any
130
+ strict validator written before 2024. Reported range: intermingled with
131
+ truck, municipal and large-trailer plates from AAB 100 to BNF 999, then
132
+ exclusively passenger from BNG 100 to KXA 509 as of 11 May 2025. THE
133
+ STATUTE STATES NO ALPHABET — § 304(a) delegates "the numerals or letters
134
+ thereon" to the Commissioner — so none of this is promoted to a
135
+ `regex_strict`.
136
+ shared_grammar_note: >-
137
+ THE SAME ABC 123 GRAMMAR IS USED BY THREE OTHER VERMONT CLASSES — Municipal
138
+ (with a red base), large Trailer (with a 'TRA' marker) and, until 2009,
139
+ Truck. And for the first stretch of this base's life the passenger and
140
+ those other classes were INTERMINGLED IN ONE SEQUENCE (AAB 100 to BNF 999)
141
+ rather than partitioned. So for roughly the first third of this series, a
142
+ Vermont serial does not determine a class at all; after BNG 100 it does.
143
+ A parse API needs the boundary, and the boundary is locator-grade.
144
+ progression: "ascending; passenger exclusively from BNG 100"
145
+ design:
146
+ plate: { w: 12, h: 6, unit: in, dimension_note: "OBSERVED — § 304(a) says the size is whatever the Commissioner determines" }
147
+ background: { color: "#006B3C", finish: retroreflective, hex_basis: observed }
148
+ foreground: "#FFFFFF"
149
+ colour_note: >-
150
+ Debossed WHITE serial on a GREEN plate (secondary) — Vermont is the only
151
+ state in this group with a dark-ground plate, and the only one whose
152
+ serial is DEBOSSED rather than embossed. Both hexes are `observed`: § 304(a)
153
+ expressly makes colour the Commissioner's choice and names none, so there
154
+ is no colour authority to cite and no departmental spec was obtained.
155
+ legend_top: "Vermont"
156
+ legend_bottom: "Green Mountain State"
157
+ legend_rule: >-
158
+ NEITHER LEGEND IS STATUTORY. Vermont has no slogan mandate — the sharpest
159
+ available contrast with New Hampshire next door, whose RSA 261:75(II)
160
+ makes 'Live Free or Die' compulsory on every passenger plate. Two adjacent
161
+ New England states, opposite answers to whether a legislature should own
162
+ the words on a plate.
163
+ graphic: { present: false }
164
+ emblem: { present: false }
165
+ rear_differs: false
166
+ region_encoding: none
167
+ sources:
168
+ - "https://legislature.vermont.gov/statutes/section/23/007/00304 # 23 V.S.A. § 304(a): the Commissioner assigns a distinctive number and determines material, size, shape, colour and the numerals or letters; plates reflectorized in part or in whole; delivered free of charge"
169
+ - "https://legislature.vermont.gov/statutes/section/23/007/00511 # § 511(a): display of one or two plates as the Commissioner requires, unobscured, horizontal, non-swinging"
170
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Vermont # LOCATOR ONLY (PRD-PLATES §4): the 1 January 1990 green base, the ABC 123 arrangement, the I/J/O/Q/U exclusion, the January 2024 admission of V and Z beginning with KPV, the intermingled AAB 100 to BNF 999 stretch and the exclusive BNG 100 to KXA 509 range as of 11 May 2025, and the narrow serial dies"
171
+ - "https://www.licenseplates.cc/VT # enthusiast corroboration, cited because used: the reported serial high-water mark. No text or image copied"
172
+ notes: >-
173
+ VERMONT STANDARD ISSUE — thirty-six years on one base, the longest run in
174
+ this group. The finding worth carrying past this gate is the JANUARY 2024
175
+ ALPHABET EXPANSION: Vermont had skipped V and Z by tradition, ran out of
176
+ combinations, and started issuing them. Format changes are anticipated by
177
+ every plate dataset; ALPHABET changes on an unchanged format are not, and a
178
+ regex_strict written against the pre-2024 alphabet would now reject valid
179
+ current plates. This is the strongest concrete argument in the northeast
180
+ group for PRD-PLATES §2.7's insistence that `regex` carry the
181
+ round-trippable shape and `regex_strict` carry the alphabet SEPARATELY: when
182
+ an alphabet moves, only the twin needs revising, and consumers that never
183
+ adopted the twin are unaffected.
184
+
185
+ # =========================================================================
186
+ # ONE SERIES BACK — the 1985 sugar-maple base.
187
+ # =========================================================================
188
+ - id: us-vt-standard-1985
189
+ class: standard
190
+ categories: [car, van, bus]
191
+ period: { start: 1985, end: 1989 }
192
+ period_evidence: secondary-dated
193
+ matching: recall-only
194
+ format:
195
+ pattern: "9L999"
196
+ regex: '\A(?:\d[A-Z]\d{3}|\d{3}[A-Z]\d|\d[A-Z]{2}\d{2}|\d{2}[A-Z]{2}\d)\z'
197
+ charset:
198
+ notes: >-
199
+ FOUR FIVE-CHARACTER GRAMMARS IN FIVE YEARS, which is why this series is
200
+ `recall-only`: 1A234 (1A100 to 9Y999, 1985-87), 123A4 (100A1 to 999Y9,
201
+ 1987-89), 1AB23 (1AA00 to approximately 9FF99, 1989, issued as
202
+ replacements for 1977-84 plates) and 12AB3 (10AA0 to approximately
203
+ 99BC9, 1989, issued only to NEW REGISTRANTS). The last two ran
204
+ simultaneously and were allocated by REGISTRANT TYPE rather than by
205
+ sequence — replacements got one shape, new registrations the other,
206
+ which is an allocation rule this dataset has not seen elsewhere.
207
+ union_note: "a hit on this union says 'a five-character shape Vermont issued on the 1985 base', not which grammar and not that the string is valid"
208
+ design:
209
+ plate: { w: 12, h: 6, unit: in }
210
+ background: { color: "#006B3C", finish: retroreflective, hex_basis: observed }
211
+ foreground: "#FFFFFF"
212
+ colour_note: "debossed white serial on green with a screened white rectangular box around the serial (secondary); hexes observed for the same reason as the current base"
213
+ legend_top: "Vermont"
214
+ legend_bottom: "Green Mountain State"
215
+ graphic: { present: true, rendered: placeholder, description: "white sugar maple screened at top left (secondary)" }
216
+ emblem: { present: true, rendered: placeholder }
217
+ region_encoding: none
218
+ sources:
219
+ - "https://legislature.vermont.gov/statutes/section/23/007/00304 # § 304(a): the delegation under which all four of this base's grammars were chosen — the statute did not change across any of them"
220
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Vermont # LOCATOR ONLY: the 1985-1989 sugar-maple base, its four five-character arrangements with ranges, and the 1989 split between replacement plates (1AB23) and new registrations (12AB3)"
221
+ notes: >-
222
+ THE PREVIOUS BASE. Its 1989 endgame is the instructive part: with the space
223
+ exhausted, Vermont ran two grammars at once and split them by REGISTRANT
224
+ STATUS — replacements on one, new registrations on the other — before
225
+ abandoning both for ABC 123 on 1 January 1990. Parallel issuance allocated
226
+ by administrative category rather than by sequence is exactly the "parallel
227
+ series are REAL" case PRD-PLATES §2.2 has overlap-with-distinct-notes
228
+ semantics for, and it is recorded here as one series with the split stated
229
+ rather than as two, because no primary bounds either half.
230
+
231
+ # =========================================================================
232
+ # CORE DISTINCT CLASSES.
233
+ # =========================================================================
234
+ - id: us-vt-motorcycle
235
+ class: motorcycle
236
+ categories: [motorcycle]
237
+ period: { start: 1990 }
238
+ period_evidence: instrument-in-force-upper-bound
239
+ matching: strict
240
+ format:
241
+ pattern: "LL999"
242
+ regex: '\A[A-Z]{2}\d{3}\z'
243
+ charset: { notes: "reported AA100 to present — a single unbroken five-character grammar, in contrast to the passenger series' history. Vermont's vanity rules cap motorcycle plates at SIX characters against seven for cars (see us-vt-specialty-index), which corroborates a smaller plate" }
244
+ design:
245
+ plate: { w: 7, h: 4, unit: in, dimension_note: "MOTORCYCLE PLATE SIZE NOT OBTAINED — placeholder at the conventional US motorcycle size. § 304(a) makes size the Commissioner's choice and no departmental spec was obtained (recorded gap). The DMV's own vanity form does establish a SIX-character cap for motorcycle plates, which is a character-budget fact, not a size" }
246
+ background: { color: "#006B3C", finish: retroreflective, hex_basis: observed }
247
+ foreground: "#FFFFFF"
248
+ colour_note: "debossed white serial on green with a border line (secondary)"
249
+ legend_top: "VERMONT"
250
+ legend_bottom: "MOTORCYCLE"
251
+ layout_note: "reported to carry 'VERMONT' at TOP LEFT rather than centred, with a debossed box for the revalidation sticker at top right — a two-corner layout that does not match AAMVA §2.1's top-centre recommendation. Recorded as a concrete instance of voluntary adoption not being adoption."
252
+ display_rule: "rear only (secondary practice; § 511(a) leaves the count to the Commissioner)"
253
+ region_encoding: none
254
+ sources:
255
+ - "https://legislature.vermont.gov/statutes/section/23/007/00304 # § 304(a): size, shape and characters as the Commissioner may determine — the authority for a reduced-size motorcycle plate with its own grammar"
256
+ - "https://dmv.vermont.gov/sites/dmv/files/documents/VD-017-Personalized_Plate.pdf # Vermont DMV form VD-017, Special (Vanity) Plate Application: 'Motor Driven Cycle, Motorcycle, and small Trailer plates are limited to a maximum of (6) characters' — an official character budget for this class"
257
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Vermont # LOCATOR ONLY: the AB123 motorcycle arrangement from AA100, the green/white debossed design, the top-left state name and the top-right sticker box"
258
+ notes: >-
259
+ MOTORCYCLE. The character-budget evidence here is better than the size
260
+ evidence, which is the reverse of the usual situation: Vermont's own DMV
261
+ form states a six-character maximum for motorcycles, motor-driven cycles and
262
+ small trailers, while no instrument states a plate dimension for any Vermont
263
+ plate at all.
264
+
265
+ - id: us-vt-trailer-small
266
+ class: trailer
267
+ categories: [trailer]
268
+ period: { start: 1990 }
269
+ period_evidence: instrument-in-force-upper-bound
270
+ matching: strict
271
+ format:
272
+ pattern: "L99999"
273
+ regex: '\A[A-Z]\d{5}\z'
274
+ charset: { notes: "reported A10000 to present. Six characters, matching the six-character vanity cap the DMV form states for 'small Trailer' plates — the format and the cap agree, which is weak but real corroboration" }
275
+ design:
276
+ plate: { w: 7, h: 4, unit: in, dimension_note: "reported to use the MOTORCYCLE plate design and therefore presumably the motorcycle size; not sourced (recorded gap)" }
277
+ background: { color: "#006B3C", finish: retroreflective, hex_basis: observed }
278
+ foreground: "#FFFFFF"
279
+ legend_top: "VERMONT"
280
+ legend_bottom: "TRAILER"
281
+ display_rule: "rear only (secondary practice)"
282
+ region_encoding: none
283
+ sources:
284
+ - "https://dmv.vermont.gov/sites/dmv/files/documents/VD-017-Personalized_Plate.pdf # Vermont DMV form VD-017: the six-character maximum covering 'small Trailer' plates"
285
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Vermont # LOCATOR ONLY: the A12345 small-trailer arrangement from A10000 and its use of the motorcycle plate design with a 'TRAILER' legend"
286
+ notes: >-
287
+ SMALL TRAILER. Vermont splits trailers by SIZE into two separately
288
+ serialized series — this one on the motorcycle-sized plate, and a large
289
+ trailer series sharing the passenger ABC 123 grammar with a 'TRA' marker.
290
+ The large series is not given its own entry here: its grammar is identical
291
+ to the passenger series, its differentiator is a debossed class marker whose
292
+ serial status is the unresolved AAMVA stacked-character question, and L2
293
+ scope does not require it. Recorded as a deliberate omission.
294
+
295
+ - id: us-vt-truck
296
+ class: standard
297
+ categories: [truck]
298
+ period: { start: 2009 }
299
+ period_evidence: secondary-dated
300
+ matching: strict
301
+ format:
302
+ pattern: "999L999"
303
+ regex: '\A\d{3}[A-Z]\d{3}\z'
304
+ charset: { notes: "reported 100A100 to present. Introduced mid-2009 specifically because truck allocations had been INTERMINGLED with passenger plates in the shared ABC 123 format and that arrangement was discontinued — so this series exists to un-share a serial space" }
305
+ design:
306
+ plate: { w: 12, h: 6, unit: in }
307
+ background: { color: "#006B3C", finish: retroreflective, hex_basis: observed }
308
+ foreground: "#FFFFFF"
309
+ legend_top: "Vermont"
310
+ layout_note: "'TRK' debossed vertically to the left of the serial — a stacked class marker, same AAMVA question as elsewhere in this group"
311
+ region_encoding: none
312
+ sources:
313
+ - "https://legislature.vermont.gov/statutes/section/23/007/00304 # § 304(a): the Commissioner's authority over the numerals or letters, under which the 2009 re-cut was made"
314
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Vermont # LOCATOR ONLY: the 123A456 truck arrangement introduced mid-2009 from 100A100, and the statement that it replaced truck allocations intermingled with passenger plates in the ABC 123 format. The secondary source itself flags this claim as uncited (a November 2025 'citation needed'), and it is recorded here at that grade"
315
+ notes: >-
316
+ TRUCK. Recorded as class `standard` with the legend and marker carrying the
317
+ meaning; see the class-vocabulary note in us-ma.yml. FLAGGED EVIDENCE: the
318
+ 2009 date and the un-sharing rationale carry an explicit 'citation needed'
319
+ on the secondary source, so this is the weakest-sourced series in the
320
+ Vermont file and is labelled as such rather than quietly levelled up. What
321
+ is independently visible is that the passenger series' own reported range
322
+ changes character at BNG 100, which is consistent with a de-intermingling
323
+ event, so the claim is plausible as well as unverified.
324
+
325
+ - id: us-vt-municipal
326
+ class: government
327
+ categories: [car, van, truck, bus]
328
+ period: { start: 1990 }
329
+ period_evidence: instrument-in-force-upper-bound
330
+ matching: strict
331
+ format:
332
+ pattern: "LLL 999"
333
+ regex: '\A[A-Z]{3} ?\d{3}\z'
334
+ charset: { notes: "the passenger grammar exactly; reported to start AAA100 with serials beginning AA or AB. Distinguished from the passenger series ONLY by plate colour and a class marker, not by serial shape" }
335
+ design:
336
+ plate: { w: 12, h: 6, unit: in }
337
+ background: { color: "#B22234", finish: retroreflective, hex_basis: observed }
338
+ foreground: "#FFFFFF"
339
+ colour_note: "RED rather than green, otherwise the current passenger base (secondary). The hex is a plausible-but-unsourced approximation of the described red; § 304(a) makes colour the Commissioner's choice and names none"
340
+ legend_top: "Vermont"
341
+ layout_note: "'MUN' debossed vertically to the left of the serial"
342
+ region_encoding: none
343
+ sources:
344
+ - "https://legislature.vermont.gov/statutes/section/23/007/00304 # § 304(a): colour as the Commissioner may determine — the authority for a colour-coded government class"
345
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Vermont # LOCATOR ONLY: the Municipal series on a red base with the 'MUN' marker, sharing the ABC 123 grammar from AAA100, serials starting AA or AB"
346
+ notes: >-
347
+ MUNICIPAL — Vermont's government class. It is a genuine test of
348
+ PRD-PLATES §2.3's series rule: format IDENTICAL to the passenger series,
349
+ period identical, and the only differences are colour and a class marker.
350
+ §2.3 says a COLOUR-ONLY variant of the same format and period is a
351
+ sub-entry, not a series. This is given its own series anyway, because the
352
+ difference is not colour ALONE — the class marker is a second design
353
+ difference and the issuing population is disjoint (municipalities, not
354
+ private registrants). Recorded explicitly so a reviewer can disagree: if the
355
+ house reading is that this should be a sub-entry on us-vt-standard-1990, the
356
+ merge is mechanical and the id can alias.
357
+
358
+ # =========================================================================
359
+ # SPECIALTY — PROGRAM INDEX ONLY (PRD-PLATES §2.5).
360
+ # =========================================================================
361
+ - id: us-vt-specialty-index
362
+ class: specialty
363
+ categories: [car, van, truck, motorcycle]
364
+ period: { start: 2025 }
365
+ period_evidence: instrument-in-force-upper-bound
366
+ matching: recall-only
367
+ format:
368
+ pattern: "LLLLLLL"
369
+ regex: '\A[A-Z0-9]{1,7}\z'
370
+ charset:
371
+ notes: >-
372
+ VERMONT'S VANITY AND ORGANIZATION PLATE RULES ARE THE BEST-DOCUMENTED
373
+ CHARACTER RULES IN THIS GROUP, and they come from the DMV's own form
374
+ plus the statute. From form VD-017 and 23 V.S.A. § 304(b)(1): a maximum
375
+ of SEVEN characters; "No more than two (2) numbers are allowed in
376
+ combination with letters"; "The letter 'O' IS CONSIDERED A NUMBER '0'
377
+ (zero)" — an explicit collapse of a letter into a digit, which is a
378
+ normalisation rule a validator must implement or it will accept
379
+ duplicates the DMV would reject; "Dots, dashes, or other special
380
+ characters or symbols cannot be used"; a single letter is acceptable but
381
+ "cannot be an 'I,' 'J,' or 'O'"; and asterisks are used ON THE
382
+ APPLICATION FORM ONLY to indicate desired spaces, with characters
383
+ centred if none are given. Class caps: 7 characters normally; 6 for
384
+ motor-driven cycle, motorcycle and small trailer; 5 for disabled plates;
385
+ 4 for antique and exhibit plates.
386
+ statutory_backing: >-
387
+ § 304(b)(1) supplies the statutory frame: vanity plates issue on
388
+ application and a $58.00 annual fee, the Commissioner "shall not issue
389
+ two sets of plates bearing the same initials or letters unless the plates
390
+ also contain a distinguishing number", and plates are subject to
391
+ reassignment if not renewed within 60 days of expiry. The DMV form
392
+ restates the same rule in fuller terms: any combination or succession of
393
+ numerals and letters "provided the total ... does not exceed seven, and
394
+ further provided the requested combination ... DOES NOT DUPLICATE OR
395
+ RESEMBLE A REGULAR ISSUE REGISTRATION PLATE" — a rule that makes the
396
+ vanity space the COMPLEMENT of the standard space, not a superset of it.
397
+ union_note: "`recall-only` because the regex is a catch-all across four class caps and cannot express the two-numbers-with-letters rule, the O-is-zero collapse or the do-not-resemble-a-regular-issue rule. A hit is a shape claim only"
398
+ design:
399
+ plate: { w: 12, h: 6, unit: in }
400
+ background: { finish: retroreflective }
401
+ note: "one design per authorised organization; individual designs are L4 scope (PRD-PLATES §2.5) and none is described here"
402
+ emblem: { present: true, rendered: placeholder, note: "and see artwork_risk — § 304(b)(2)(B) makes the ORGANIZATION warrant its right to use its emblem, so the state has expressly not vouched for it" }
403
+ program_index:
404
+ model: >-
405
+ VERMONT AUTHORISES CATEGORIES OF SPONSOR, NOT INDIVIDUAL PLATES — the
406
+ third distinct specialty architecture in this group of six, after
407
+ Connecticut/Rhode Island (one statute per plate) and New Hampshire (one
408
+ plate, many decals). 23 V.S.A. § 304(b)(2) defines two eligible classes
409
+ and lets any qualifying body apply. "SAFETY ORGANIZATIONS are groups that
410
+ provide police and fire protection, rescue squads, the Vermont National
411
+ Guard, organizations required to respond to public emergencies, and
412
+ amateur radio operators licensed by the U.S. Federal Communications
413
+ Commission", and must have at least 100 in-state members in good standing.
414
+ "SERVICE ORGANIZATION" covers congressionally and non-congressionally
415
+ chartered US military veterans' groups, plus any group that (I) has as a
416
+ primary purpose service to the community through specific programs for
417
+ public health, education, or environmental awareness and conservation and
418
+ is not limited to social activities; (II) has 501(c)(3) or (10) status;
419
+ (III) is registered as a nonprofit corporation with the Secretary of
420
+ State; and (IV) except for veterans' groups, has at least 100 in-state
421
+ members in good standing.
422
+ count: unresearched
423
+ count_basis: >-
424
+ NO COUNT IS RECORDED, and that is the honest answer rather than a guess.
425
+ Vermont's model produces no fixed number: the statute defines eligibility
426
+ and the Commissioner approves applications "in order of approval, subject
427
+ to the operating considerations in the Department". The DMV's own plate
428
+ pages returned HTTP 403 to direct fetches and the Wayback capture of
429
+ dmv.vermont.gov/curator/registrations/license-plates was retrieved but
430
+ yielded no enumerated program list. Recorded as a gap. What IS pinned is
431
+ the FORM INVENTORY, which names specific programs: VD-128 Safety and
432
+ Service Organization Plate Application, VD-154 Conservation Plate, VD-102
433
+ Building Bright Futures Plate, VD-003 Legislative Plate, VD-149 Next of
434
+ Kin Family Plate, plus a Gold Star Family plate and a Bronze Star with
435
+ Valor plate (the latter announced in DMV law-enforcement bulletin 24-4).
436
+ one_design_per_organization: "§ 304(b)(2)(B): 'An organization may have only one design, regardless of the number of individual organizational units, squads, or departments within the State' — so Vermont caps the design count at one per sponsor by statute, which is why its program cannot sprawl the way Florida's has."
437
+ design_authority: "§ 304(b)(2)(B): after consulting the organization's principal contact, 'the Commissioner shall determine the design of the special plate ON THE BASIS THAT THE PRIMARY PURPOSE OF MOTOR VEHICLE NUMBER PLATES IS VEHICLE IDENTIFICATION.' A statutory subordination of decoration to legibility — the clearest statement of design philosophy found in any plate statute in this group, and a useful thing to quote at anyone who thinks US specialty plates are unregulated."
438
+ content_restrictions: "§ 304(b)(1) and form VD-017 list the refusal criteria: nothing vulgar, scatological or obscene, no racial or ethnic epithets; nothing connoting breast, genitalia, pubic area or buttocks or relating to sexual or eliminatory functions; no reference to intoxicants or drugs or their users or purveyors; no reference to gender, gender identity, sexual orientation or disability status; nothing suggesting a government or governmental agency; nothing suggesting a privilege not given by law; and no slang term, abbreviation, phonetic spelling or MIRROR IMAGE of any of the above. The mirror-image clause is a nice piece of drafting — it anticipates the plate read in a rear-view mirror."
439
+ fees: "$58.00 annually for a vanity plate (§ 304(b)(1)); $21.00 per set for a special organization plate on top of the annual registration fee (§ 304(b)(2)(B))."
440
+ excluded_vehicle_types: "vanity plates are not issued to vehicles registered under the International Registration Plan (§ 304(b)(1)), nor, per form VD-017, for dealer, transporter, Veteran or service-and-safety-organization plates."
441
+ official_list_url: "https://dmv.vermont.gov/registrations/license-plates"
442
+ region_encoding: none
443
+ sources:
444
+ - "https://legislature.vermont.gov/statutes/section/23/007/00304 # 23 V.S.A. § 304(b): the Commissioner's exclusive authority over vanity and organization plates; (b)(1) the $58 fee, the no-duplicate-initials rule and the 60-day reassignment; (b)(2)(A) the safety-organization and service-organization definitions with their 100-member and 501(c)(3)/(10) tests; (b)(2)(B) the $21 fee, the one-design-per-organization cap, the trademark/copyright warranty, and the vehicle-identification design principle"
445
+ - "https://dmv.vermont.gov/sites/dmv/files/documents/VD-017-Personalized_Plate.pdf # Vermont DMV form VD-017 (Special (Vanity) Plate Application): the seven-character maximum and the 6/5/4-character class caps; no more than two numbers with letters; 'O' treated as zero; no dots, dashes or symbols; the I/J/O single-letter exclusion; the asterisk spacing convention; the do-not-resemble-a-regular-issue rule; and the content-refusal criteria including the mirror-image clause"
446
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Vermont # LOCATOR ONLY: general orientation on Vermont plate types"
447
+ notes: >-
448
+ THE VERMONT SPECIALTY INDEX — an eligibility regime rather than a catalogue,
449
+ and the only one in this group with NO COUNT, recorded as unresearched
450
+ rather than estimated. Two things to carry forward. First, the character
451
+ rules are the most complete in the group and several of them are
452
+ NORMALISATION rules rather than validation rules — 'O' is zero, symbols are
453
+ stripped, spacing is centred by default — which means Vermont is the best
454
+ available test case for the vehicles gem's separator-forgiving tier and for
455
+ whatever canonicalisation the parse API adopts. Second, § 304(b)(2)(B)'s
456
+ declaration that "the primary purpose of motor vehicle number plates is
457
+ vehicle identification" is worth quoting in the encyclopedia section: it is
458
+ a legislature saying out loud what this whole dataset assumes.