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,427 @@
1
+ # plates/us-ct.yml — Connecticut (PRD-PLATES gate L2, northeast group).
2
+ #
3
+ # WHY CONNECTICUT IS UNUSUAL, and what the statute actually carries: Connecticut
4
+ # is one of the few states whose CURRENT BASE HAS A STATUTORY START DATE and
5
+ # whose LEGENDS ARE LEGISLATED. C.G.S. § 14-21b(a) says the commissioner "shall
6
+ # issue fully reflectorized safety number plates for new registrations and
7
+ # renewal registrations issued ON AND AFTER JANUARY 1, 2000", that "each plate
8
+ # shall bear the words 'Constitution State' and 'Connecticut'", and that the
9
+ # commissioner "shall issue TWO fully reflectorized safety number plates". So
10
+ # the base year, the two legends, the reflectorization and the two-plate rule
11
+ # are all primary — not brochure, not folklore. What the statute does NOT carry
12
+ # is the SERIAL GRAMMAR: Chapter 246 nowhere states a character count, an
13
+ # alphabet or a dimension. Every serial claim below is therefore secondary and
14
+ # is labelled as such (PRD-PLATES §4: Wikipedia is a LOCATOR; ctplates.info and
15
+ # licenseplates.cc are enthusiast corroboration, cited because they were used).
16
+ #
17
+ # THE SEPARATOR PROBLEM, recorded here because Connecticut is the first
18
+ # jurisdiction in the dataset to hit it: Connecticut prints a RAISED MIDDLE DOT
19
+ # between serial groups (AB·12345), not a hyphen and not a space. U+00B7 is in
20
+ # `_meta/separators.yml`'s FORGIVING set — so a lenient consumer already strips
21
+ # it correctly — but it is NOT in the EMITTED set, so the dataset may not spell
22
+ # it (PRD-PLATES §2.6). Every pattern and regex below therefore writes the gap
23
+ # as U+0020 and this note carries the fact. That is a data-honest workaround,
24
+ # not a silent one; whether the emitted set should grow a third member is a
25
+ # `_meta` PR question and is raised in the group dossier, not decided here.
26
+ #
27
+ # ARTWORK: Connecticut turns out to have the most interesting IP evidence in
28
+ # this group and it is NOT favourable — see `artwork_risk`.
29
+ jurisdiction: us-ct
30
+ authority:
31
+ name: Connecticut Department of Motor Vehicles (CT DMV)
32
+ url: "https://portal.ct.gov/dmv"
33
+ binding: vehicle
34
+ statute_edition: >-
35
+ General Statutes of Connecticut, Title 14 Chapter 246 (Motor Vehicles.
36
+ Operators and Motor Vehicles), as published by the Connecticut General
37
+ Assembly and revised to January 1, 2026 — the edition read for this pass.
38
+
39
+ # ---------------------------------------------------------------------------
40
+ # artwork_risk — required per jurisdiction by PRD-PLATES §4.
41
+ # ---------------------------------------------------------------------------
42
+ artwork_risk:
43
+ posture: adverse-evidence-found
44
+ basis: >-
45
+ Connecticut is NOT in the Commons/Wikipedia survey of state public-domain
46
+ postures (no {{PD-CTGov}} template exists on Commons — checked by API this
47
+ pass, result MISSING), so the §105 default applies: a state work is
48
+ copyrighted unless the state says otherwise. Connecticut has said the
49
+ OPPOSITE of otherwise, in statute. C.G.S. § 14-21w(e) expressly authorises
50
+ the Commissioner of Motor Vehicles to "provide for the REPRODUCTION AND
51
+ MARKETING of the Share the Road commemorative number plate IMAGE for use on
52
+ clothing, recreational equipment, posters, mementoes or other products or
53
+ programs", with the proceeds going to a statutory account. A legislature
54
+ that grants its DMV a commercial licensing right over a plate IMAGE is a
55
+ legislature treating that image as a proprietary asset. The same section,
56
+ at (a), adds "No use shall be made of such plates except as official
57
+ registration marker plates." This is direct statutory evidence of an
58
+ asserted interest and it is stronger evidence than the absence of a Commons
59
+ tag. Treat Connecticut as adverse alongside NY/PA/WA/AZ.
60
+ scope_caution: >-
61
+ § 14-21w(e) is about ONE commemorative plate (Share the Road), not about the
62
+ standard base. No instrument was found asserting copyright over the standard
63
+ 2000 base itself, and none was found disclaiming it. The honest reading is:
64
+ Connecticut demonstrably treats at least one plate image as marketable state
65
+ property, and nothing in the corpus suggests the standard base is treated
66
+ differently.
67
+ emblem_rule: >-
68
+ PRD-PLATES §3 placeholder default applies without exception here. The
69
+ Connecticut base carries a screened STATE SHAPE at top left; state-shape and
70
+ state-seal protection independent of copyright is unresearched for
71
+ Connecticut (recorded gap, same gap the FL pilot recorded).
72
+ photograph_caution: >-
73
+ Commons photographs of Connecticut plates carry the PHOTOGRAPHER's licence,
74
+ not the design's — the uploader had no standing over the design. Because our
75
+ renders are generated from spec and never derived from a photograph, those
76
+ obligations never attach (PRD-PLATES §4, §6).
77
+ sources:
78
+ - "https://www.cga.ct.gov/current/pub/chap_246.htm # C.G.S. § 14-21w(a) 'No use shall be made of such plates except as official registration marker plates'; § 14-21w(e) the reproduction-and-marketing authority over the plate IMAGE — the adverse evidence"
79
+ - "https://commons.wikimedia.org/w/api.php?action=query&titles=Template:PD-CTGov # queried this pass: Template:PD-CTGov is MISSING on Commons — no Connecticut public-domain tag exists, unlike PD-FLGov/PD-CAGov/PD-MAGov/PD-MEGov"
80
+ - "https://en.wikipedia.org/wiki/Copyright_status_of_works_by_subnational_governments_of_the_United_States # LOCATOR: Connecticut has no entry in this survey — recorded as unsurveyed, not as favourable"
81
+
82
+ # ---------------------------------------------------------------------------
83
+ # Display rules — all statutory, all quoted from Chapter 246.
84
+ # ---------------------------------------------------------------------------
85
+ display_rules:
86
+ default: "TWO plates. § 14-21b(a): the commissioner 'shall issue two fully reflectorized safety number plates'; § 14-18(a)(2): a vehicle for which two number plates have been issued 'shall ... display in a conspicuous place at the front and the rear of such vehicle the number plates'. § 14-18(a)(1) governs the one-plate case (rear only)."
87
+ legibility: "§ 14-18(c): plates 'shall be entirely unobscured and the numerals and letters thereon shall be plainly legible at all times'; horizontal; 'fastened so as not to swing'; and when lights are required the REAR plate 'shall be so illuminated as to be legible at a distance of fifty feet'."
88
+ one_per_end: "§ 14-18(c): 'Not more than one number plate shall be displayed on the front or rear of any motor vehicle' — subject to a commissioner's permission exception. A genuinely unusual rule; most states legislate a minimum, Connecticut legislates a maximum."
89
+ obstruction: "§ 14-18(c): 'Nothing may be affixed to a motor vehicle or to the official number plates displayed on such vehicle that obscures or impairs the visibility of any information on such number plates.'"
90
+ ownership: "§ 14-18(d): 'All number plates shall be the property of the state and no title therein shall pass to any person registering a motor vehicle' — except that on a new general issue 'the obsolete number plates shall become the property of the registrant upon the expiration date'."
91
+ sample_plates: "§ 14-18(e): the commissioner may issue a plate inscribed with the legend 'SAMPLE', which may not be displayed on any vehicle."
92
+ penalty: "§ 14-18(g): violation of subsection (a), (c), (d), (e) or (f) is an INFRACTION. § 14-21b(c): failure to display issued reflectorized plates as provided in § 14-18 is also an infraction."
93
+ sources:
94
+ - "https://www.cga.ct.gov/current/pub/chap_246.htm # § 14-18(a)(1),(a)(2) display front/rear; (c) legibility, horizontality, 50-foot rear illumination, the not-more-than-one rule, the obstruction rule; (d) state ownership of plates; (e) SAMPLE plates; (g) infraction. § 14-21b(a),(c) two reflectorized plates and the display infraction"
95
+
96
+ # ---------------------------------------------------------------------------
97
+ # The US standards chain, recorded once per jurisdiction file. Nothing below
98
+ # quotes SAE J686 (paywalled, unpinned — the standing rule).
99
+ # ---------------------------------------------------------------------------
100
+ us_standards:
101
+ no_federal_mandate: true
102
+ chain: "SAE J686 -> AAMVA License Plate Standard Edition 3 (September 2025) -> voluntary state adoption. AAMVA writes recommendations in the declarative present; they are RECOMMENDED PRACTICE, not requirement."
103
+ 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 readable in daylight and at night from >=75 feet, materials per ASTM D4956-19 and ISO 7591:1982 cl.3, entrance angle 0.2 deg, observation angle -4 deg, minimum 45 cd/lx/m^2."
104
+ dimensions_delegated: "AAMVA §3.1 sends dimensions and bolt holes to SAE J686, whose text is PAYWALLED and was NOT obtained. No J686 dimension is quoted here. Connecticut's own statute states NO plate dimension at all (Chapter 246 was read in full for this pass; the word 'inches' appears nowhere in a plate-size context) — so the 12x6 in figure below is `observed`, not sourced."
105
+ replacement_cycle_recommendation: "AAMVA §1.1 recommends a rolling or full replacement cycle 'not to exceed 7 to 10 years'. Connecticut legislates NO replacement cycle in Chapter 246 (recorded gap); its 2000 base has been in issue for 26 years, well past the AAMVA recommendation."
106
+ source: "https://www.aamva.org/getmedia/646bcc8a-219b-47d8-b5cd-726240473163/License-Plate-Standard-Edition-3_September-2025-Update.pdf"
107
+ folklore_caution: >-
108
+ The "1956 AMA/AAMVA/NSC standardization agreement" appears in the Connecticut
109
+ Wikipedia article WITH a citation, unlike the US article where it is a bare
110
+ `citation needed` — but the citation is Christopher Garrish, "Reconsidering
111
+ the Standard Plate Size", *Plates* (ALPCA) vol. 62 no. 5, October 2016: a
112
+ hobby-association members' magazine, not obtained, not obtainable online, and
113
+ whose very TITLE announces that it reconsiders the standard story. Recorded
114
+ as COMMONLY REPEATED, STILL UNVERIFIED, with the pointer to the one artefact
115
+ that might settle it. Connecticut's own 6x12 in plate is not in its statute.
116
+
117
+ series:
118
+
119
+ # =========================================================================
120
+ # CURRENT STANDARD ISSUE.
121
+ # =========================================================================
122
+ - id: us-ct-standard-2015
123
+ class: standard
124
+ categories: [car, van, truck, bus]
125
+ period: { start: 2015 }
126
+ period_evidence: secondary-dated
127
+ matching: strict
128
+ format:
129
+ pattern: "LL 99999"
130
+ regex: '\A[A-Z]{2} ?\d{5}\z'
131
+ charset:
132
+ notes: >-
133
+ Reported alphabet: letters I, O and Q not used. THE STATUTE STATES NO
134
+ ALPHABET AND NO LENGTH — Chapter 246 was read in full and contains no
135
+ character-count or character-set rule for standard plates, so this
136
+ exclusion is secondary (Wikipedia locator, sourced there to a Hartford
137
+ Courant report of the September 2015 changeover). It is recorded as a
138
+ note and deliberately NOT promoted to a `regex_strict`: PRD-PLATES
139
+ reserves the strict twin for the AUTHORITY's own alphabet, and laundering
140
+ a newspaper report into a strict twin is exactly the folklore failure
141
+ §4 forbids.
142
+ separator_note: >-
143
+ THE PRINTED SEPARATOR IS A RAISED MIDDLE DOT (U+00B7): the plate reads
144
+ AB·12345. U+00B7 is in `_meta/separators.yml`'s FORGIVING set but not its
145
+ EMITTED set, so the dataset spells the gap as U+0020 here and records the
146
+ true glyph in this note (PRD-PLATES §2.6). A lenient consumer already
147
+ strips U+00B7 correctly; a consumer RENDERING from this data must read
148
+ this note, not the pattern, to place the dot.
149
+ progression: "AA 00001 upward; reported at BW 99865 as of 31 October 2025 (licenseplates.cc — enthusiast corroboration, cited because used)"
150
+ design:
151
+ plate: { w: 12, h: 6, unit: in, w_mm: 304.8, h_mm: 152.4, hex_basis_note: "dimension OBSERVED, not sourced — Connecticut's statute states no plate size" }
152
+ background: { finish: retroreflective }
153
+ colour_note: >-
154
+ NO HEX IS RECORDED. The base is a GRADIENT (reflective sky blue fading to
155
+ white) with a dark blue serial, so a single background hex would be a
156
+ false claim, and § 14-21b mandates reflectorization while naming no
157
+ colour at all. Recorded as a gap rather than invented — the FL pilot's
158
+ lesson applied.
159
+ legend_top: "Connecticut"
160
+ legend_bottom: "Constitution State"
161
+ legend_rule: >-
162
+ STATUTORY. § 14-21b(a), verbatim: "Each plate shall bear the words
163
+ 'Constitution State' and 'Connecticut'." The statute fixes the WORDS but
164
+ not their placement; top/bottom placement is observed. Note the contrast
165
+ with the 1987-1999 base, where the same two words appeared with
166
+ CONNECTICUT at top and CONSTITUTION STATE at bottom after a 1987 swap —
167
+ i.e. the statute has been satisfied by two different layouts.
168
+ emblem: { present: true, rendered: placeholder, description: "screened state shape at top left — observed; see artwork_risk" }
169
+ material: "'fully reflectorized safety number plates' (§ 14-21b(a)); no material is named in statute"
170
+ rear_differs: false
171
+ region_encoding: none
172
+ sources:
173
+ - "https://www.cga.ct.gov/current/pub/chap_246.htm # § 14-21b(a): fully reflectorized plates for registrations issued on and after January 1, 2000; the 'Constitution State' and 'Connecticut' legends; two plates issued. § 14-18: display"
174
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Connecticut # LOCATOR ONLY (PRD-PLATES §4): the August 2015 introduction of the seven-character AB·12345 arrangement, the I/O/Q exclusion, and the AA·00001 start. Its own citation for the changeover is a Hartford Courant news report of 18 September 2015"
175
+ - "https://www.licenseplates.cc/CT # enthusiast corroboration, cited because used: the reported serial high-water mark BW·99865 as of 31 October 2025. No text or image copied"
176
+ notes: >-
177
+ CONNECTICUT CURRENT STANDARD. THE ID IS DATED 2015, NOT 2000, and that is a
178
+ deliberate schema decision: the DESIGN base is statutory from 1 January 2000
179
+ (§ 14-21b) but the SERIAL GRAMMAR changed twice on that base — to the interim
180
+ 1ABCD2 and 1AB·CD2 shapes in 2013, and to the present AB·12345 shape in
181
+ August 2015. PRD-PLATES §2.3 makes a format change its own series, so the
182
+ 2000 base carries three passenger series, of which this is the current one.
183
+ PERIOD EVIDENCE: `secondary-dated` — the 2015 date is a news/locator claim,
184
+ not a statutory one; the STATUTORY date that is beyond doubt is 2000, and it
185
+ belongs to the base, not to this serial format. The two 2013-2015 interim
186
+ formats are recorded in the group dossier and are deliberately NOT given
187
+ series here: they lasted fourteen and twenty months respectively, they are
188
+ the kind of transitional artefact §2.5 excludes, and no primary establishes
189
+ their boundaries.
190
+
191
+ # =========================================================================
192
+ # ONE SERIES BACK — the previous standard grammar on the same 2000 base.
193
+ # =========================================================================
194
+ - id: us-ct-standard-2000
195
+ class: standard
196
+ categories: [car, van, truck, bus]
197
+ period: { start: 2000, end: 2013 }
198
+ period_evidence: statutory-date-start
199
+ matching: strict
200
+ format:
201
+ pattern: "999 LLL"
202
+ regex: '\A\d{3} ?[A-Z]{3}\z'
203
+ charset:
204
+ notes: >-
205
+ Reported: the 'O' series was not used and the 'V' series was reserved
206
+ for Veteran plates. Secondary (locator) — not promoted to a strict twin,
207
+ for the reason given on us-ct-standard-2015.
208
+ separator_note: "printed as a raised middle dot (123·ABC); spelled U+0020 here per PRD-PLATES §2.6 — see the file header"
209
+ progression: "100 NZN to 999 ZZX — i.e. it CONTINUED the sequence of the 1987-1999 base rather than restarting, which is why the 2000 base's first plate is not 100 AAA"
210
+ design:
211
+ plate: { w: 12, h: 6, unit: in }
212
+ background: { finish: retroreflective }
213
+ colour_note: "same gradient sky-blue-to-white base with dark blue serial as us-ct-standard-2015; no hex recorded, same reason"
214
+ legend_top: "Connecticut"
215
+ legend_bottom: "Constitution State"
216
+ legend_rule: "§ 14-21b(a) — identical statutory legends; this series and the current one share a design and differ only in serial grammar"
217
+ emblem: { present: true, rendered: placeholder }
218
+ region_encoding: none
219
+ sources:
220
+ - "https://www.cga.ct.gov/current/pub/chap_246.htm # § 14-21b(a): the 1 January 2000 statutory start of the reflectorized base this series is issued on, and its two legends"
221
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Connecticut # LOCATOR ONLY: the 123·ABC arrangement on the January 2000 - June 2013 window, the 100·NZN to 999·ZZX range continuing from the previous base, the unused 'O' series and the Veteran 'V' reservation"
222
+ notes: >-
223
+ THE PREVIOUS STANDARD GRAMMAR, and the one with the best period evidence in
224
+ the whole Connecticut file: its START is § 14-21b's own "on and after
225
+ January 1, 2000", which is a statutory date, not a collector's recollection.
226
+ Its END (2013) is secondary. The sequence detail is the interesting one for
227
+ a parse API: Connecticut did NOT restart numbering at the base change, so a
228
+ 123·ABC serial alone cannot distinguish a 1987-base plate from a 2000-base
229
+ plate — only the range can, and the boundary (999·NZM / 100·NZN) is
230
+ locator-grade. Recorded rather than smoothed over.
231
+
232
+ # =========================================================================
233
+ # CORE DISTINCT CLASSES (L2 scope: motorcycle, trailer, dealer, government).
234
+ # =========================================================================
235
+ - id: us-ct-motorcycle
236
+ class: motorcycle
237
+ categories: [motorcycle]
238
+ period: { start: 2015 }
239
+ period_evidence: secondary-dated
240
+ matching: strict
241
+ format:
242
+ pattern: "00 LLLL"
243
+ regex: '\A00 ?[A-Z]{4}\z'
244
+ charset: { notes: "a literal '00' prefix followed by four letters — the two zeros are part of the serial, not a pad. Reported secondary; no statutory grammar exists" }
245
+ separator_note: "printed as a raised middle dot (00·ABCD); spelled U+0020 here per PRD-PLATES §2.6"
246
+ design:
247
+ plate: { w: 7, h: 4, unit: in, dimension_note: "MOTORCYCLE PLATE SIZE NOT OBTAINED — Connecticut's statute states no dimension for any plate and no departmental spec was found. This entry is a PLACEHOLDER carrying the conventional US motorcycle size and must not be treated as sourced (recorded gap)" }
248
+ background: { finish: retroreflective }
249
+ legend_top: "Conn"
250
+ legend_bottom: "Motorcycle"
251
+ legend_note: "the top legend is reported as the ABBREVIATION 'Conn', not 'Connecticut' — if correct, this is the one Connecticut plate that does not satisfy § 14-21b(a)'s literal wording, which may simply mean § 14-21b does not reach motorcycles (it names 'passenger, combination and commercial registrations and other registrations as the commissioner deems feasible'). Recorded as an open question, not resolved."
252
+ emblem: { present: false }
253
+ region_encoding: none
254
+ sources:
255
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Connecticut # LOCATOR ONLY: the 00·ABCD motorcycle arrangement introduced 2015 and shared with Classic Vehicle plates; the 'Conn'/'Motorcycle' legends"
256
+ - "https://www.cga.ct.gov/current/pub/chap_246.htm # § 14-21b(a) scopes the reflectorized-plate duty to 'passenger, combination and commercial registrations and other registrations as the commissioner deems feasible' — the statutory reason motorcycles may sit outside the legend rule"
257
+ notes: >-
258
+ MOTORCYCLE. The 00·ABCD block is reported to be SHARED with the Classic
259
+ Vehicle series — two different classes drawing from one serial space, which
260
+ means a serial alone does not determine the class and a parse API must
261
+ return both candidates. That is precisely the ambiguity model PRD-PAID's
262
+ parse endpoint is specified to expose (ranked candidates, not one answer),
263
+ and Connecticut is the first US case of it in this dataset.
264
+
265
+ - id: us-ct-trailer
266
+ class: trailer
267
+ categories: [trailer]
268
+ period: { start: 2015 }
269
+ period_evidence: secondary-dated
270
+ matching: strict
271
+ format:
272
+ pattern: "LL 99999"
273
+ regex: '\A[A-Z]{2} ?\d{5}\z'
274
+ charset: { notes: "commercial trailers now draw the same AB·12345 grammar as passenger plates; the older V·12345 and W·12345 prefixed forms are reported to remain on the road (secondary)" }
275
+ separator_note: "printed as a raised middle dot; spelled U+0020 here per PRD-PLATES §2.6"
276
+ design:
277
+ plate: { w: 12, h: 6, unit: in }
278
+ background: { finish: retroreflective }
279
+ colour_note: "reported as the passenger base with a RED serial and red border line rather than dark blue — a colour-only differentiation; no hex recorded (secondary, and the base is a gradient)"
280
+ legend_top: "Connecticut"
281
+ legend_bottom: "Trailer"
282
+ region_encoding: none
283
+ sources:
284
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Connecticut # LOCATOR ONLY: Trailer plates carry the passenger base with red serial and border and a 'Trailer' bottom legend; serial formats V·12345, W·12345 and now AB·12345"
285
+ - "https://www.cga.ct.gov/current/pub/chap_246.htm # Chapter 246 is the registration authority; it states no trailer plate grammar (recorded gap)"
286
+ notes: >-
287
+ TRAILER. Connecticut differentiates several non-passenger classes by SERIAL
288
+ COLOUR (red) on an otherwise identical base — Trailer, Commercial,
289
+ Apportioned, Construction, Factory, Farm and Fire Apparatus all reportedly
290
+ share the red-serial treatment. Under PRD-PLATES §2.3 a colour-only variant
291
+ of the same format+period is a sub-entry rather than a series; these are
292
+ given separate entries only where the FORMAT also differs. Trailer earns its
293
+ own entry because it also carries a distinct bottom legend, which is a
294
+ design difference.
295
+
296
+ - id: us-ct-dealer
297
+ class: dealer
298
+ categories: [car, van, truck, bus, motorcycle, trailer]
299
+ period: { start: 2015 }
300
+ period_evidence: instrument-in-force-upper-bound
301
+ matching: recall-only
302
+ format:
303
+ pattern: "XL 9999"
304
+ regex: '\AM?[XD][A-Z]{1,2} ?\d{1,4}\z'
305
+ charset:
306
+ notes: >-
307
+ Reported structure: a CLASS PREFIX ('X' new dealer, 'D' used dealer,
308
+ 'MX'/'MD' for the motorcycle equivalents), then one or two sequential
309
+ letters, then a numeric suffix of one to four digits which IDENTIFIES
310
+ THE DEALERSHIP — the letters advance within a dealership, the number
311
+ names it. That is the inverse of the usual arrangement and is the reason
312
+ this series is `recall-only`: the regex is a union across five reported
313
+ width combinations per prefix and is wider than any single issuing
314
+ grammar.
315
+ separator_note: "printed as a raised middle dot (XA·0); spelled U+0020 here per PRD-PLATES §2.6"
316
+ design:
317
+ plate: { w: 12, h: 6, unit: in }
318
+ background: { finish: retroreflective }
319
+ legend_bottom: "Dealer"
320
+ binding: business
321
+ region_encoding: "the NUMERIC SUFFIX identifies the DEALERSHIP, not a geography — a business decode, not a region decode. No decode table was obtained (recorded gap); it would be a per-dealer registry, which is out of PRD-PLATES scope in any event"
322
+ sources:
323
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Connecticut # LOCATOR ONLY: the X/D/MX/MD dealer prefixes, the five reported width combinations each, and the rule that the numeric suffix signifies the dealership"
324
+ - "https://www.cga.ct.gov/current/pub/chap_246.htm # § 14-21c: number plates for manufacturers of motor vehicles or automotive equipment — the statutory hook for the manufacturer end of this class; the dealer grammar itself is not in Chapter 246 (recorded gap)"
325
+ notes: >-
326
+ DEALER. `binding: business` for the same reason as Germany's rote
327
+ Kennzeichen and Florida's dealer plate: the plate follows the dealership,
328
+ not a vehicle. `matching: recall-only` is the honest setting — a hit says
329
+ "this string has a shape Connecticut issues to dealers", not "this is a
330
+ valid dealer plate", because the regex unions five width variants across
331
+ four prefixes and no primary bounds any of them. PERIOD: the start is an
332
+ upper bound from the statute edition read, not a real start; Connecticut
333
+ dealer plates are reported to date to the 1920s.
334
+
335
+ - id: us-ct-municipal
336
+ class: government
337
+ categories: [car, van, truck, bus]
338
+ period: { start: 2015 }
339
+ period_evidence: instrument-in-force-upper-bound
340
+ matching: recall-only
341
+ format:
342
+ pattern: "999 LLL"
343
+ regex: '\A\d{1,3} ?[A-Z]{2,3}\z'
344
+ charset:
345
+ notes: >-
346
+ Reported structure: one to three digits, then TWO OR THREE LETTERS THAT
347
+ NAME THE MUNICIPALITY. Six width combinations are reported (1·AB, 12·AB,
348
+ 123·AB, 1·ABC, 12·ABC, 123·ABC), which is why this is `recall-only`.
349
+ separator_note: "printed as a raised middle dot; spelled U+0020 here per PRD-PLATES §2.6"
350
+ design:
351
+ plate: { w: 12, h: 6, unit: in }
352
+ background: { finish: retroreflective }
353
+ legend_bottom: "Municipal"
354
+ validation_note: "reported to use a 'MUNICIPAL CT' sticker in place of the ordinary validation sticker on the Preserve the Sound variant"
355
+ region_encoding: >-
356
+ YES — AND IT IS THE ONLY REAL GEOGRAPHIC DECODE IN A CONNECTICUT PLATE. The
357
+ two- or three-letter group indicates the TOWN OR CITY that owns the vehicle
358
+ (police cars and dump trucks included). THE DECODE TABLE WAS NOT OBTAINED —
359
+ no official municipal-code list was found in this pass, and Connecticut has
360
+ 169 towns, so the table is substantial. Recorded as a gap and as a
361
+ candidate `plates/_decode/us-ct-municipal.yml` for a later gate. Until it
362
+ lands, a parse API must say "a Connecticut municipal plate" and stop, not
363
+ guess a town.
364
+ sources:
365
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Connecticut # LOCATOR ONLY: the six Municipal width combinations and the statement that 'the letters in the serial indicate the municipality'"
366
+ - "https://www.cga.ct.gov/current/pub/chap_246.htm # Chapter 246 read in full; it contains no municipal plate grammar and no municipal code table (recorded gap)"
367
+ notes: >-
368
+ MUNICIPAL — Connecticut's government class, and the one Connecticut series
369
+ that encodes geography. Modelled `government` rather than `police` even
370
+ though police cars carry it, because the class is defined by OWNERSHIP (the
371
+ town) and not by function; PRD-PLATES's `police` class is for fleets with a
372
+ series distinct from general government, which this is not.
373
+
374
+ # =========================================================================
375
+ # SPECIALTY — PROGRAM INDEX ONLY (PRD-PLATES §2.5). No individual designs.
376
+ # =========================================================================
377
+ - id: us-ct-specialty-index
378
+ class: specialty
379
+ categories: [car, van, truck, motorcycle]
380
+ period: { start: 2015 }
381
+ period_evidence: instrument-in-force-upper-bound
382
+ matching: strict
383
+ format:
384
+ pattern: "LL 99999"
385
+ regex: '\A[A-Z]{2} ?\d{5}\z'
386
+ charset: { notes: "commemorative plates carry ORDINARY serials on an alternative design; § 14-21w(b) is explicit that 'such number plates shall have letters and numbers selected by the Commissioner of Motor Vehicles', and several sections allow the registrant to carry over a previously issued number or a low number under § 14-160" }
387
+ design:
388
+ plate: { w: 12, h: 6, unit: in }
389
+ background: { finish: retroreflective }
390
+ note: "one design per authorised program; individual designs are L4 scope (PRD-PLATES §2.5) and none is described here"
391
+ emblem: { present: true, rendered: placeholder }
392
+ program_index:
393
+ count_statutory: 13
394
+ count_statutory_basis: >-
395
+ THIS COUNT IS PRIMARY, WHICH IS RARE FOR A US SPECIALTY INDEX. Connecticut
396
+ authorises commemorative plates ONE STATUTE AT A TIME, so the program list
397
+ can be counted directly out of Chapter 246's own table of contents rather
398
+ than off a DMV gallery. Thirteen sections carry the phrase "commemorative
399
+ number plates" as of the January 2026 revision: § 14-19b (collegiate),
400
+ 14-21e (Long Island Sound), 14-21i (Greenways), 14-21j (Amistad), 14-21l
401
+ (Olympic Spirit), 14-21o (United We Stand), 14-21q (childhood cancer
402
+ awareness), 14-21s (wildlife conservation), 14-21u (Support Our Troops!),
403
+ 14-21v (support for the nursing profession), 14-21w (Share the Road),
404
+ 14-21x (Men's Health), 14-21y (Hartford Whalers), 14-21z (Save Our Lakes).
405
+ NOTE THE ARITHMETIC: that enumeration lists fourteen sections and the
406
+ phrase-count is thirteen, because § 14-19b's heading spells the program
407
+ differently ("collegiate commemorative number plates") and § 14-21e's does
408
+ not use the word "commemorative" at all. The discrepancy is recorded, not
409
+ resolved by picking a number — PRD-PLATES §5.3.
410
+ open_ended_route: "§ 14-19a additionally lets the commissioner issue SPECIAL number plates by REGULATION to members of qualifying organizations and to colleges, and to DISCONTINUE them — an open-ended route whose current membership is not countable from statute. So the true program count is 'thirteen-to-fourteen named in statute, plus an unknown number authorised by regulation'."
411
+ further_statutory_types: "Chapter 246 separately authorises non-commemorative special plates that are NOT part of the specialty program: § 14-20 (antique/rare/special interest, including year-of-manufacture plates), 14-20a (volunteer firefighters), 14-20b/c/d (veterans, war-period service, families of those killed in action), 14-21 (amateur radio), 14-21a (foreign consul), 14-21d (POW and Congressional Medal of Honor), 14-21h (animal population control), 14-27 (public service vehicles), 14-27a (vanpool)."
412
+ official_list_url: "https://portal.ct.gov/dmv"
413
+ official_list_caution: "CT DMV's own specialty-plate page was NOT successfully fetched in this pass (portal.ct.gov returns 404 on every guessed path and the Wayback CDX index for portal.ct.gov/dmv surfaces only image assets). The count above therefore rests on the STATUTE, which PRD-PLATES §4 prefers anyway — but the DMV's live catalogue remains unpinned (recorded gap)."
414
+ ip_note: "§ 14-21w(e) — the reproduction-and-marketing authority over a plate image — sits inside this program and is the file's artwork_risk evidence. See artwork_risk above."
415
+ region_encoding: none
416
+ sources:
417
+ - "https://www.cga.ct.gov/current/pub/chap_246.htm # the chapter table of contents and section texts: the thirteen 'commemorative number plates' sections counted above; § 14-19a the regulation-made organizational and collegiate route including the discontinuance duty; § 14-21w(b) commissioner-selected letters and numbers, (e) the image-marketing authority"
418
+ notes: >-
419
+ THE CONNECTICUT SPECIALTY INDEX — and the best-sourced specialty index this
420
+ group produced, because Connecticut's legislature does the authorising
421
+ itself. Two things worth carrying forward. First, a statute-countable
422
+ program list is a genuinely better artefact than a DMV gallery: it is dated,
423
+ versioned, PD as an edict of government, and it cannot silently drift.
424
+ Second, the count is NOT a clean integer and the file says so — the
425
+ phrase-count (13) and the section-enumeration (14) disagree because two
426
+ sections word their headings differently, and PRD-PLATES §5.3 forbids
427
+ averaging a disagreement away.