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,506 @@
1
+ # plates/us-pa.yml — Pennsylvania (PRD-PLATES gate L2, mid-Atlantic group).
2
+ #
3
+ # PENNSYLVANIA IS THE ONE STATE IN THIS GROUP WHOSE ADVERSE POSTURE IS IN
4
+ # STATUTE. New York's is judicial and inferred; Pennsylvania's is a legislative
5
+ # grant: 71 P.S. § 636 gives the Department of General Services the power AND
6
+ # THE DUTY 'to copyright, in the name of the Commonwealth, all publications'.
7
+ # A state that has legislated an affirmative duty to copyright is the strongest
8
+ # adverse posture found anywhere in this group. See `artwork_risk`.
9
+ #
10
+ # THREE THINGS PENNSYLVANIA DOES THAT NO OTHER STATE IN THIS GROUP DOES:
11
+ # 1. It LEGISLATES A REISSUANCE PROGRAM (75 Pa.C.S. § 1331(f)) rather than a
12
+ # fixed cycle — an ongoing duty to replace plates on a staggered basis, and
13
+ # PennDOT is currently executing it against the oldest 'D', 'E' and 'F'
14
+ # configurations. This is the third distinct US answer to 'is there a
15
+ # replacement cadence?' after Florida's flat 10 years and New York's none.
16
+ # 2. It ABOLISHED THE VALIDATION STICKER IN LAW: § 1332(d), in four words that
17
+ # delete a whole layer of US plate anatomy — 'Validating registration
18
+ # stickers shall not be issued or required to be displayed.'
19
+ # 3. It legislates against plate treatments that defeat AUTOMATED ENFORCEMENT
20
+ # and ELECTRONIC TOLL COLLECTION specifically (§ 1332(b)(2)), i.e. it
21
+ # writes machine readability into the display statute.
22
+ #
23
+ # THE SEPARATOR CHANGED IN 2025 AND IT IS SOURCED FROM THE AGENCY'S OWN IMAGE.
24
+ # PennDOT's official sample of the current plate reads ABC0123 — seven
25
+ # characters, NO hyphen, with the Liberty Bell as a watermark BEHIND the
26
+ # characters. The base it replaced reads ABC-1234. So Pennsylvania dropped the
27
+ # printed separator at the 2025 base change, and this file spells each base's
28
+ # separator as that base actually prints it (PRD-PLATES §2.6 rule 2).
29
+ #
30
+ # period_evidence / format_evidence vocabularies as in us-ny.yml.
31
+ jurisdiction: us-pa
32
+ authority:
33
+ name: Pennsylvania Department of Transportation, Bureau of Motor Vehicles (PennDOT)
34
+ url: "https://www.pa.gov/en/agencies/dmv.html"
35
+ binding: vehicle
36
+ statute_edition: "75 Pa.C.S. (Vehicles), Chapter 13, read 2026-08-02. The Pennsylvania General Assembly's own statute service (palegis.us) reset the connection on four attempts in this pass, so §§ 1331 and 1332 were read through a third-party reproduction of the consolidated statutes; edicts of government are public domain at every level so the text is freely usable, but a verifier should re-derive from palegis.us. Recorded gap."
37
+
38
+ # ---------------------------------------------------------------------------
39
+ # artwork_risk — required per jurisdiction by PRD-PLATES §4.
40
+ # ---------------------------------------------------------------------------
41
+ artwork_risk:
42
+ posture: adverse-by-statute
43
+ basis: >-
44
+ Pennsylvania has legislated an affirmative COPYRIGHT DUTY over its own
45
+ publications. 71 P.S. § 636 provides that the Department of General Services
46
+ 'shall have the power, and its duty shall be ... [t]o copyright, in the name
47
+ of the Commonwealth, all publications' including State Reports and other
48
+ publications it deems advisable. Combined with the baseline rule that
49
+ 17 U.S.C. § 105 does not reach the states, that puts Pennsylvania in the most
50
+ adverse column available: not merely 'may assert' (Arizona) or 'courts have
51
+ held copyrightable' (New York), but a statutory instruction to assert. No
52
+ {{PD-PAGov}} template exists on Wikimedia Commons.
53
+ evidence_grade: >-
54
+ HONEST LIMIT: 71 P.S. § 636 was NOT FETCHED. The findlaw reproduction
55
+ returned 403 on both a WebFetch and a browser-user-agent curl, and
56
+ palegis.us reset the connection repeatedly. The citation and the quoted
57
+ clause come from the Wikipedia survey of subnational copyright status, which
58
+ is a LOCATOR under PRD-PLATES §4 and not an authority. The clause is quoted
59
+ here so a verifier knows exactly what to pull and can falsify it in one
60
+ fetch. The conclusion should not be relied on for a render decision until
61
+ the statute itself is in hand.
62
+ scope_caveat: >-
63
+ § 636 speaks of PUBLICATIONS. Whether a registration plate DESIGN is a
64
+ 'publication' of the Department of General Services is a question the
65
+ statute does not answer and this pass did not research. The adverse reading
66
+ is the conservative one and is adopted; the narrower reading — that § 636
67
+ reaches printed State documents and not vehicle registration plates issued
68
+ by a different department — is recorded as the open counter-argument.
69
+ emblem_rule: >-
70
+ RENDER PLACEHOLDER. The current base carries a large Liberty Bell image
71
+ behind the serial and the previous base carries a state outline; neither is
72
+ approached. Note the Liberty Bell itself is a physical object of the 18th
73
+ century and no one holds copyright in the bell — but PennDOT's DRAWING of it
74
+ is a work, and it is the drawing that appears on the plate. Do not confuse
75
+ the public-domain SUBJECT with the state-produced DEPICTION.
76
+ photograph_caution: >-
77
+ Standard §4 reading: Commons photographs carry the photographer's licence on
78
+ the photograph only. PennDOT's own sample image of the current plate was
79
+ READ to establish the serial's printed form and the design description; it
80
+ is NOT copied into the dataset and no render derives from it.
81
+ sources:
82
+ - "https://en.wikipedia.org/wiki/Copyright_status_of_works_by_subnational_governments_of_the_United_States # LOCATOR ONLY: quotes 71 P.S. § 636 - the Department of General Services 'shall have the power, and its duty shall be ... [t]o copyright, in the name of the Commonwealth, all publications'. The statute itself was NOT fetched (403/connection reset on three routes)."
83
+ - "https://commons.wikimedia.org/wiki/Commons:Copyright_rules_by_territory/United_States # the state-exclusion rule and the roster of state PD tags that exist - Pennsylvania is absent from it"
84
+
85
+ # ---------------------------------------------------------------------------
86
+ # The US standards chain. Voluntary; J686 never quoted.
87
+ # ---------------------------------------------------------------------------
88
+ us_standards:
89
+ no_federal_mandate: true
90
+ chain: "SAE J686 -> AAMVA License Plate Standard Edition 3 (September 2025) -> voluntary state adoption."
91
+ aamva_edition_3:
92
+ dimensions_delegated: "AAMVA §3.1 sends dimensions and bolt holes to SAE J686 (paywalled, NOT obtained). 75 Pa.C.S. Chapter 13 states no plate dimension. No sourced dimension is carried here."
93
+ retroreflectivity: "AAMVA §3.3 recommends daylight and nighttime legibility from at least 75 feet, materials per ASTM D4956-19 and ISO 7591:1982 cl.3. Pennsylvania legislates the DUTY but not the value: 75 Pa.C.S. § 1331(d), 'All registration plates, except temporary plates, shall be treated with reflectorizing material in accordance with standards approved by the department.' Standards approved by the department were not obtained (recorded gap)."
94
+ machine_readability: "AAMVA publishes a separate LPR Program Best Practices Guide because machine readability is a design constraint. Pennsylvania is the only state in this group to write it into the DISPLAY STATUTE: § 1332(b)(2) makes it unlawful to display a plate obscured in a way that inhibits automated enforcement or electronic toll collection, and § 1332(b.1) permits a frame only if the plate remains readable BY THOSE SYSTEMS as well as by an officer."
95
+ replacement_cycle: "AAMVA §1.1 recommends a cycle 'not to exceed 7 to 10 years'. Pennsylvania legislates a PROGRAM, not a period — see `replacement_cycle` on us-pa-let-freedom-ring."
96
+ source: "https://www.aamva.org/getmedia/646bcc8a-219b-47d8-b5cd-726240473163/License-Plate-Standard-Edition-3_September-2025-Update.pdf"
97
+ folklore_caution: "The '1956 AMA standardization agreement' is UNCITED in its Wikipedia source and is recorded as COMMONLY REPEATED, UNSOURCED. Pennsylvania has no statutory dimension to put in its place."
98
+
99
+ # ---------------------------------------------------------------------------
100
+ # Display rules.
101
+ # ---------------------------------------------------------------------------
102
+ display_rules:
103
+ default: "ONE plate, displayed on the REAR. SOURCING CAVEAT: 75 Pa.C.S. § 1332(a) speaks throughout of 'every registration plate' in the singular and prescribes no front position, and § 1331 speaks of the department providing 'registration plates' without a count — consistent with one-plate issuance but not stating it. The rear-only rule is asserted by the locator's front/rear survey and NO Pennsylvania instrument stating it was pinned in this pass. RECORDED GAP; a verifier should look to 67 Pa. Code and to § 1332's implementing regulations."
104
+ general_rule: "§ 1332(a): 'Every registration plate shall, at all times, be securely fastened to the vehicle to which it is assigned or on which its use is authorized in accordance with regulations promulgated by the department.' Note the delegation — the MOUNTING SPEC is regulatory, not statutory, and 67 Pa. Code was not obtained (recorded gap)."
105
+ motorcycle_vertical: "§ 1332(a.1): a motorcycle plate may be mounted VERTICALLY only if its identifying characters are themselves displayed vertically; 'A registration plate that has its identifying characters displayed horizontally shall not be displayed and mounted vertically.' The department produces vertical-alignment motorcycle plates on request for a $20 fee in addition to the annual registration. A VERTICAL-CHARACTER PLATE IS A DIFFERENT PHYSICAL OBJECT WITH THE SAME SERIAL — a render-layer fact, not a format fact."
106
+ obstruction: "§ 1332(b): unlawful to display a plate that is (1) so dirty as to be unreadable at a reasonable distance, (2) obscured in a way that inhibits automated enforcement or electronic toll collection, (3) illegible or obstructed at a reasonable distance, (4) obscuring the issuing jurisdiction, or (5) covered by a tinted material."
107
+ frames: "§ 1332(b.1): a frame that 'minimally outlines the registration plate' is permitted provided the plate remains readable by automated systems and by law enforcement."
108
+ penalty: "§ 1332(c): violating § 1332(b)(2) or (b)(4) is a SUMMARY OFFENSE carrying a $100 fine on conviction."
109
+ no_validation_sticker: "§ 1332(d): 'Validating registration stickers shall not be issued or required to be displayed.' Pennsylvania has legislated the registration sticker out of existence — the single most consequential display fact in this file for anyone rendering or parsing a Pennsylvania plate, because the sticker box that every other state's plate reserves simply is not there."
110
+ sources:
111
+ - "https://codes.findlaw.com/pa/title-75-pacsa-vehicles/pa-csa-sect-75-1332.html # 75 Pa.C.S. § 1332 as reproduced by a third party: (a) secure fastening per department regulations; (a.1) motorcycle vertical mounting and the $20 vertical plate; (b) the five obscuring prohibitions including automated enforcement and tolling; (b.1) the minimal frame allowance; (c) the $100 summary penalty; (d) NO VALIDATING STICKERS. Edict of government - public domain - but a REPRODUCTION; palegis.us was unreachable."
112
+ - "https://codes.findlaw.com/pa/title-75-pacsa-vehicles/pa-csa-sect-75-1331.html # 75 Pa.C.S. § 1331: (a) plates provided by the department; (b) plate content; (c) temporary plates; (d) reflectorizing to department standards; (e) issuance by agents; (f) the periodic reissuance program"
113
+
114
+ series:
115
+
116
+ # =========================================================================
117
+ # THE CURRENT STANDARD-ISSUE SERIES.
118
+ # =========================================================================
119
+ - id: us-pa-let-freedom-ring
120
+ class: standard
121
+ categories: [car, van, truck, bus]
122
+ period: { start: 2025 }
123
+ period_evidence: agency-page-in-force
124
+ format_evidence: official-agency-image
125
+ matching: strict
126
+ format:
127
+ pattern: "LLL9999"
128
+ regex: '\A[A-Z]{3}\d{4}\z'
129
+ charset:
130
+ notes: >-
131
+ THE STATUTORY CONSTRAINT IS ALMOST NOTHING. 75 Pa.C.S. § 1331(b):
132
+ 'Every registration plate shall have displayed upon it the identifying
133
+ numbers or letters assigned to the vehicle, the name of the
134
+ Commonwealth, which may be abbreviated, and any other data the
135
+ department may deem necessary.' No length, no alphabet, no exclusions.
136
+ The only official Pennsylvania character rule is on the personalisation
137
+ side: 'Personalized registration plates may contain up to seven letters
138
+ and numbers in combination' (PennDOT), which is consistent with the
139
+ seven-character ordinary serial and is recorded on us-pa-personalized.
140
+ pattern_note: >-
141
+ NO SEPARATOR — AND THAT IS SOURCED, NOT ASSUMED. PennDOT's own sample
142
+ image of this plate (fetched and read 2026-08-02) shows the serial
143
+ ABC0123 as seven contiguous characters with the Liberty Bell rendered as
144
+ a watermark BEHIND them. The base it replaced printed ABC-1234 with a
145
+ hyphen. Pennsylvania therefore dropped the printed separator at the 2025
146
+ base change, and PRD-PLATES §2.6 rule 2 requires each base's regex to be
147
+ written in ITS OWN printed form — which is why this series has no hyphen
148
+ in it and `us-pa-visitpa` does.
149
+ progression: "reported to run MYR0200 onward, reaching NHJ 3386 as of 25 July 2026 (locator). Note the locator's own rendering of the later serial contains a space, which conflicts with PennDOT's contiguous sample; the conflict is recorded, not resolved."
150
+ design:
151
+ background: { color: "#F5F0DC", finish: retroreflective, hex_basis: observed }
152
+ foreground: "#1B3A6B"
153
+ colour_note: >-
154
+ AGENCY WORDING AND AGENCY IMAGE DISAGREE, AND BOTH ARE RECORDED.
155
+ PennDOT's own alt text describes 'a white background with large blue
156
+ letters and numbers'; PennDOT's own image of the same plate shows a
157
+ distinctly CREAM ground, not white, with navy characters and DARK RED
158
+ legends the alt text does not mention. The hex recorded is the observed
159
+ cream. PRD-PLATES §5.3 says record disagreements rather than average
160
+ them, and this is a disagreement inside a single agency page.
161
+ legend_top: "PENNSYLVANIA"
162
+ legend_bottom: "LET FREEDOM RING"
163
+ legend_colour: { value: "#A6192E", hex_basis: observed, note: "state name and slogan both in red - observed from the agency image; not in the alt text and not in statute" }
164
+ graphic:
165
+ present: true
166
+ rendered: placeholder
167
+ description: "a Liberty Bell, large, centred, rendered as a light watermark BEHIND the serial characters. PennDOT's alt text: 'Pennsylvania license plate with a graphic of the Liberty Bell and the text, \"Pennsylvania\" and \"Let Freedom Ring.\"' A watermark UNDER the serial is a distinct render problem from a graphic beside it and is flagged for the render layer."
168
+ emblem: { present: true, rendered: placeholder }
169
+ band: { side: none }
170
+ rear_differs: false
171
+ validation_sticker: { present: false, basis: "75 Pa.C.S. § 1332(d): 'Validating registration stickers shall not be issued or required to be displayed.'" }
172
+ dimension_note: "NO SOURCED DIMENSION (Chapter 13 states none; SAE J686 unpinned)."
173
+ replacement_cycle:
174
+ years: null
175
+ programme: true
176
+ statutory_text: "75 Pa.C.S. § 1331(f) requires the department to establish and administer a PROGRAM for the periodic reissuance of registration plates, addressing fee requirements, replacement on a STAGGERED BASIS, recycling of older plates and such other factors as it deems necessary."
177
+ execution_quote: "PennDOT, in its own words: 'Passenger license plates that start with a tag configuration \"D\", \"E\" and \"F\" are the oldest plates on the road. PennDOT has begun replacing the \"D\", \"E\" and \"F\" configuration through the mail.'"
178
+ note: >-
179
+ A PROGRAM, NOT A PERIOD — the third distinct US model. Florida legislates
180
+ a flat 10 years; New York legislates nothing; Pennsylvania legislates an
181
+ ongoing duty with staggering and recycling and lets the department choose
182
+ the cadence. Note what PennDOT's execution reveals: the replacement front
183
+ is running on SERIAL PREFIX, i.e. Pennsylvania is retiring plates by
184
+ their position in the alphabet-sequence rather than by issue date. That
185
+ makes the serial itself the age proxy, which is genuinely useful
186
+ era-inference signal for a parse API.
187
+ region_encoding: none
188
+ sources:
189
+ - "https://www.pa.gov/en/agencies/dmv/vehicle-services/registration-plates/standard-issue-registration-plate.html # PennDOT: the 'Liberty Bell style' standard plate, a June 2025 introduction, 'white background with large blue letters and numbers', the $14 replacement fee, the D/E/F reissuance front, and the official sample image showing the contiguous ABC0123 serial"
190
+ - "https://codes.findlaw.com/pa/title-75-pacsa-vehicles/pa-csa-sect-75-1331.html # § 1331(b) plate content; (d) reflectorizing; (f) the periodic reissuance program"
191
+ - "https://codes.findlaw.com/pa/title-75-pacsa-vehicles/pa-csa-sect-75-1332.html # § 1332(d) no validating stickers"
192
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Pennsylvania # LOCATOR ONLY (PRD-PLATES §4): a MAY 2025 introduction, ABC1234, MYR0200 to NHJ 3386 as of 25 July 2026"
193
+ notes: >-
194
+ LET FREEDOM RING (2025-) — THE CURRENT PENNSYLVANIA STANDARD ISSUE.
195
+ DATE DISAGREEMENT, RECORDED NOT AVERAGED (PRD-PLATES §5.3): PennDOT's own
196
+ page says JUNE 2025; the locator says MAY 2025. Both are written down;
197
+ neither is split. `period.start: 2025` is safe under either. The design
198
+ name also differs by source — PennDOT calls it the 'Liberty Bell style'
199
+ plate in prose while the plate itself reads LET FREEDOM RING, and this
200
+ entry uses the plate's own legend as the name because that is what a
201
+ person or a camera actually sees. PARALLEL ISSUANCE IS REAL AND
202
+ AGENCY-STATED: PennDOT warns that 'Plates issued by third-party or
203
+ non-Commonwealth vendors may still use the previous design', so the 2017
204
+ base is still entering circulation and the two series legitimately overlap.
205
+
206
+ # =========================================================================
207
+ # ONE SERIES BACK — still being issued, per PennDOT's own warning.
208
+ # =========================================================================
209
+ - id: us-pa-visitpa
210
+ class: standard
211
+ categories: [car, van, truck, bus]
212
+ period: { start: 2017 }
213
+ period_evidence: secondary-locator-unverified
214
+ format_evidence: secondary-locator-unverified
215
+ matching: strict
216
+ format:
217
+ pattern: "LLL-9999"
218
+ regex: '\A[A-Z]{3}-?\d{4}\z'
219
+ charset: { notes: "as us-pa-let-freedom-ring: no statutory charset. Reported range KLF-0000 to MYR-0199, i.e. this base ran out exactly where the current one begins (MYR0200) - a clean, checkable boundary claim and the strongest era-inference signal in the file." }
220
+ pattern_note: "THIS base prints a hyphen. Written in its own printed form per PRD-PLATES §2.6 rule 2; the separator-free twin is derived by the consumer, not shipped."
221
+ design:
222
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
223
+ foreground: "#1B3A6B"
224
+ colour_note: "dark blue on reflective white with a navy band at the top and a yellow band at the bottom (locator); `hex_basis: observed`. No colour value is in statute."
225
+ legend_top: "PENNSYLVANIA"
226
+ legend_bottom: "visitPA.com"
227
+ legend_note: "A URL AS A STATE SLOGAN. Pennsylvania ran www.state.pa.us on the 1999 base and visitPA.com on the 2004 and 2017 bases - two decades of plates carrying a marketing domain. Worth recording because a URL slogan dates a plate more sharply than a graphic does, and because it is the clearest example anywhere of a plate legend that can go stale independently of the plate."
228
+ graphic: { present: true, rendered: placeholder, description: "state outline at the top left, added on the 2017 revision of this base (locator)" }
229
+ emblem: { present: true, rendered: placeholder }
230
+ band: { side: none }
231
+ validation_sticker: { present: false, basis: "75 Pa.C.S. § 1332(d)" }
232
+ region_encoding: none
233
+ sources:
234
+ - "https://www.pa.gov/en/agencies/dmv/vehicle-services/registration-plates/standard-issue-registration-plate.html # PennDOT: 'Plates issued by third-party or non-Commonwealth vendors may still use the previous design' - the official evidence that this series is STILL ISSUING and therefore has no end year"
235
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Pennsylvania # LOCATOR ONLY: June 2017 state-outline revision, visitPA.com slogan, ABC-1234, KLF-0000 to MYR-0199"
236
+ notes: >-
237
+ visitPA.com (2017-) — THE PREVIOUS BASE, WITH NO END YEAR ON PURPOSE.
238
+ PennDOT states that third-party and non-Commonwealth vendors may still be
239
+ issuing it, so closing the period would be a false claim: this is exactly
240
+ the parallel-issuance case PRD-PLATES §2.2 sanctions ('old stock issues
241
+ on'), and it is why this series and us-pa-let-freedom-ring overlap. The
242
+ 2004 base carried the same visitPA.com slogan and the same ABC-1234
243
+ format, differing only in the absence of the state outline; it is NOT given
244
+ a series of its own because the boundary between them is locator-only and
245
+ minting a permanent id on it would be exactly the mistake us-fl-standard
246
+ declined to make.
247
+
248
+ # =========================================================================
249
+ # CORE DISTINCT CLASSES.
250
+ # =========================================================================
251
+ - id: us-pa-motorcycle
252
+ class: motorcycle
253
+ categories: [motorcycle]
254
+ period: { start: 2017 }
255
+ period_evidence: instrument-in-force-upper-bound
256
+ format_evidence: secondary-locator-unverified
257
+ matching: recall-only
258
+ format:
259
+ pattern: "9LL99"
260
+ regex: '\A(?:[A-Z]{3}\d{2}|\d{4}[A-Z]|[A-Z]\d{4}|\d[A-Z]{2}\d{2})\z'
261
+ charset:
262
+ notes: >-
263
+ FOUR ARRANGEMENTS ARE REPORTED FOR PENNSYLVANIA MOTORCYCLE PLATES -
264
+ ABC12, 1234A, A1234 and 1AB23 - AND THE LOCATOR DOES NOT SAY WHICH IS
265
+ CURRENT. Rather than pick one and pretend, this series is
266
+ `matching: recall-only` and its regex is the UNION of all four. A match
267
+ says 'this string has a shape Pennsylvania has issued to a motorcycle'
268
+ and nothing more. PennDOT's own rule caps a personal motorcycle plate
269
+ at five characters, which every one of the four arrangements satisfies.
270
+ pattern_note: "recall-only forbids a regex_strict (PRD-PLATES §2.7) and none is given. When a primary establishes which arrangement is current, this series splits and the union becomes a historic parent."
271
+ design:
272
+ background: { finish: retroreflective }
273
+ legend_top: "PENNSYLVANIA"
274
+ emblem: { present: true, rendered: placeholder }
275
+ vertical_variant: "75 Pa.C.S. § 1332(a.1)(3): PennDOT produces a VERTICAL-ALIGNMENT motorcycle plate on request for a $20 fee in addition to the annual registration. Same serial, rotated characters, different physical object - a render-layer variant, not a format variant."
276
+ dimension_note: "NO SOURCED DIMENSION."
277
+ region_encoding: none
278
+ sources:
279
+ - "https://codes.findlaw.com/pa/title-75-pacsa-vehicles/pa-csa-sect-75-1332.html # § 1332(a.1): the vertical-mounting rule, the prohibition on mounting a horizontal-character plate vertically, and the $20 vertical plate"
280
+ - "https://www.pa.gov/en/agencies/dmv/vehicle-services/registration-plates/personalized-registration-plates.html # PennDOT: 'A personal motorcycle registration plate may contain up to five letters and numbers in combination'"
281
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Pennsylvania # LOCATOR ONLY: the four reported motorcycle arrangements ABC12, 1234A, A1234, 1AB23"
282
+ notes: >-
283
+ MOTORCYCLE — THE GROUP'S SECOND RECALL-ONLY SERIES AND ITS BEST
284
+ JUSTIFICATION. The honest position when four arrangements are reported and
285
+ none is dated is a union with `matching: recall-only`, not a guess dressed
286
+ as a fact. Pennsylvania also gives the dataset its first VERTICAL PLATE:
287
+ § 1332(a.1) treats character orientation as a legal property of the plate,
288
+ which no other statute in this group does.
289
+
290
+ - id: us-pa-trailer
291
+ class: trailer
292
+ categories: [trailer]
293
+ period: { start: 2017 }
294
+ period_evidence: instrument-in-force-upper-bound
295
+ format_evidence: secondary-locator-unverified
296
+ matching: strict
297
+ format:
298
+ pattern: "XLL-9999"
299
+ regex: '\AX[A-Z]{2}-?\d{4}\z'
300
+ charset: { notes: "reported trailer format XBC-1234. The leading X is read as a LITERAL trailer marker because the locator's placeholder convention runs alphabetically and X breaks it - the same inference applied to the New Jersey trailer series, and flagged as an inference here too." }
301
+ design:
302
+ background: { finish: retroreflective }
303
+ legend_top: "PENNSYLVANIA"
304
+ emblem: { present: true, rendered: placeholder }
305
+ region_encoding: none
306
+ sources:
307
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Pennsylvania # LOCATOR ONLY: trailer XBC-1234"
308
+ notes: "TRAILER. Locator-grade with one flagged inference about the X literal."
309
+
310
+ - id: us-pa-dealer
311
+ class: dealer
312
+ categories: [car, van, truck, bus, motorcycle, trailer]
313
+ period: { start: 2017 }
314
+ period_evidence: instrument-in-force-upper-bound
315
+ format_evidence: secondary-locator-unverified
316
+ matching: strict
317
+ binding: business
318
+ format:
319
+ pattern: "H99-999H"
320
+ regex: '\A(?:H\d{2}-?\d{3}H|J\d{2}-?\d{3}J|K\d{2}-?\d{3}K)\z'
321
+ charset:
322
+ notes: >-
323
+ Three dealer arrangements are reported - H12-345H, J12-345J and
324
+ K12-345K - and they share a striking shape: THE SAME LETTER OPENS AND
325
+ CLOSES THE SERIAL. That is a bracketing marker, not a sequence, so the
326
+ regex enumerates the three known letters rather than allowing any
327
+ letter in both positions. If a fourth letter is in use the regex is
328
+ narrow by exactly that letter, which is the safe direction to be wrong.
329
+ design:
330
+ background: { finish: retroreflective }
331
+ legend_top: "PENNSYLVANIA"
332
+ emblem: { present: true, rendered: placeholder }
333
+ region_encoding: none
334
+ sources:
335
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Pennsylvania # LOCATOR ONLY: dealer H12-345H, J12-345J, K12-345K"
336
+ notes: >-
337
+ DEALER. `binding: business`. The bracketing letter is the interesting
338
+ structural fact - Pennsylvania's dealer serial is the only one in this
339
+ group whose first and last characters are constrained to be equal, which
340
+ is a grammar no simple width-and-alphabet model can express.
341
+
342
+ - id: us-pa-temporary
343
+ class: temporary
344
+ categories: [car, van, truck, bus, motorcycle, trailer]
345
+ period: { start: 2017 }
346
+ period_evidence: statutory-authority-undated
347
+ format_evidence: secondary-locator-unverified
348
+ matching: strict
349
+ format:
350
+ pattern: "9999-999"
351
+ regex: '\A\d{4}-?\d{3}\z'
352
+ charset: { notes: "reported paper in-transit plate, four numerals, separator, three numerals." }
353
+ design:
354
+ background: { finish: none, note: "temporary plates are the ONE class Pennsylvania statute exempts from reflectorisation - § 1331(d): 'All registration plates, EXCEPT TEMPORARY PLATES, shall be treated with reflectorizing material'. That exemption is the sourced fact here; the paper stock and the format are locator-grade." }
355
+ legend_top: "PENNSYLVANIA"
356
+ emblem: { present: false }
357
+ validity: "not sourced (recorded gap)"
358
+ region_encoding: none
359
+ sources:
360
+ - "https://codes.findlaw.com/pa/title-75-pacsa-vehicles/pa-csa-sect-75-1331.html # § 1331(c): 'The department shall provide temporary registration plates for use on vehicles which are to be removed from this Commonwealth or for use as necessary pending issuance of permanent registration plates'; § 1331(d) exempts temporary plates from reflectorisation"
361
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Pennsylvania # LOCATOR ONLY: temporary in-transit 1234-567 paper plate"
362
+ notes: >-
363
+ TEMPORARY. THE CLASS IS STATUTORY AND THE STATUTE IS UNUSUALLY EXPLICIT
364
+ about what temporary plates are FOR - removal from the Commonwealth, or
365
+ the gap pending permanent plates - and about their one physical
366
+ distinction, the reflectorisation exemption. The serial format is
367
+ locator-grade. `period_evidence: statutory-authority-undated`: § 1331(c)
368
+ establishes the class without dating it, and the start year here is the
369
+ instrument-in-force floor, not a claim about when temporary plates began.
370
+
371
+ - id: us-pa-government
372
+ class: government
373
+ categories: [car, van, truck, bus]
374
+ period: { start: 2017 }
375
+ period_evidence: instrument-in-force-upper-bound
376
+ format_evidence: secondary-locator-unverified
377
+ matching: strict
378
+ binding: business
379
+ format:
380
+ pattern: "PA-99999"
381
+ regex: '\A(?:PA-?\d{5}|\d{5}-?PA)\z'
382
+ charset: { notes: "reported official-use formats PA-12345 and 12345-PA, i.e. the PA token appears at EITHER END - the same optional-position literal shape as New York's HX historical plates. A commercial official-use variant PA-1234A is also reported and is inside neither alternative; it is recorded here rather than silently widening the regex." }
383
+ design:
384
+ background: { finish: retroreflective }
385
+ legend_top: "PENNSYLVANIA"
386
+ emblem: { present: true, rendered: placeholder }
387
+ display_note: "the locator reports that official-use PASSENGER plates require FRONT AND REAR display while official-use COMMERCIAL plates are rear only - which would make Pennsylvania's government fleet the exception to its own one-plate rule. Locator-grade and unverified; if true it is a notable inversion and worth a primary."
388
+ region_encoding: none
389
+ sources:
390
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Pennsylvania # LOCATOR ONLY: official-use PA-12345 / 12345-PA (passenger, front and rear) and PA-12345 / PA-1234A (commercial, rear only)"
391
+ notes: "GOVERNMENT. Locator-grade throughout; the front-and-rear claim for official passenger plates is the part most worth verifying, because it would contradict the state's general display posture."
392
+
393
+ # =========================================================================
394
+ # PERSONALISED — Pennsylvania publishes the most PRECISE separator rule of
395
+ # any state in this group, and it is encoded exactly.
396
+ # =========================================================================
397
+ - id: us-pa-personalized
398
+ class: personalized
399
+ categories: [car, van, truck, motorcycle, trailer]
400
+ period: { start: 2017 }
401
+ period_evidence: agency-page-in-force
402
+ format_evidence: official-agency-text
403
+ matching: strict
404
+ format:
405
+ pattern: "LLLLLLL"
406
+ regex: '\A(?:[A-Z0-9]{1,7}|[A-Z0-9][- ][A-Z0-9]{1,6}|[A-Z0-9]{2}[- ][A-Z0-9]{1,5}|[A-Z0-9]{3}[- ][A-Z0-9]{1,4}|[A-Z0-9]{4}[- ][A-Z0-9]{1,3}|[A-Z0-9]{5}[- ][A-Z0-9]{1,2}|[A-Z0-9]{6}[- ][A-Z0-9])\z'
407
+ charset:
408
+ notes: >-
409
+ PennDOT, in its own words: 'Personalized registration plates may
410
+ contain up to seven letters and numbers in combination.' And, crucially:
411
+ 'One hyphen or one space is permitted, but not both. Special characters
412
+ are not available.' THAT IS THE MOST EXACT SEPARATOR RULE ANY
413
+ AUTHORITY IN THIS GROUP PUBLISHES, and it is encoded exactly rather
414
+ than approximated - the alternation enumerates the seven ways one
415
+ separator can split at most seven alphanumerics, so the regex accepts
416
+ A-B and ABCDEF-G and rejects A-B-C and the eight-character forms. A
417
+ motorcycle personal plate is capped at five characters instead of seven.
418
+ pattern_note: >-
419
+ WHY THE ALTERNATION AND NOT A LOOKAHEAD: bounding total length with a
420
+ lookahead would require either an unescaped wildcard or a character class
421
+ MIXING separators with the serial alphabet, and PRD-PLATES §2.8 forbids
422
+ the second while the lint rejects the first. The alternation is longer
423
+ and is the only spelling that satisfies the separator contract, which is
424
+ a small but real demonstration that §2.8's rule has teeth.
425
+ eligibility: "PennDOT: 'Requests for personal registration plates are restricted to: passenger vehicles, motorcycles, motor homes, trailers, trucks with a registered gross weight of not more than 14,000 pound'."
426
+ fee: "per Form MV-70S, the Bureau of Motor Vehicles Schedule of Fees; PennDOT does not state the amount on the plate page itself (recorded gap)."
427
+ region_encoding: none
428
+ sources:
429
+ - "https://www.pa.gov/en/agencies/dmv/vehicle-services/registration-plates/personalized-registration-plates.html # PennDOT: seven characters (five for motorcycles); 'One hyphen or one space is permitted, but not both. Special characters are not available.'; the eligible vehicle list; the MV-70S fee pointer"
430
+ notes: >-
431
+ PERSONALISED — THE BEST-SPECIFIED FORMAT IN THE MID-ATLANTIC GROUP.
432
+ Pennsylvania is the only authority here that states its separator rule in
433
+ terms, and the rule it states is unusually strict (exactly one, hyphen or
434
+ space, never both). Encoding it exactly rather than as a loose
435
+ seven-character bound is the difference between a regex that validates and
436
+ one that merely shapes.
437
+
438
+ # =========================================================================
439
+ # SPECIALTY — THE PROGRAM INDEX, per PRD-PLATES §2.5.
440
+ # =========================================================================
441
+ - id: us-pa-specialty-index
442
+ class: specialty
443
+ categories: [car, van, truck, motorcycle, trailer]
444
+ period: { start: 2017 }
445
+ period_evidence: agency-page-in-force
446
+ format_evidence: official-agency-text
447
+ matching: strict
448
+ format:
449
+ pattern: "LLL9999"
450
+ regex: '\A[A-Z]{3}\d{4}\z'
451
+ charset: { notes: "specialty plates carry ordinary serials on an alternative design and PennDOT says 'the majority of which can be personalized', so the seven-character personalisation frame applies to most of them." }
452
+ design:
453
+ background: { finish: retroreflective }
454
+ note: "one design per authorised programme; the designs themselves are L4 scope (PRD-PLATES §2.5) and none is described here"
455
+ emblem: { present: true, rendered: placeholder }
456
+ program_index:
457
+ structure_official: >-
458
+ PennDOT publishes SEVEN plate tracks: Standard Issue, Military, Special
459
+ Fund, Special Organization, Personalized, Specialty, and Plates for
460
+ Persons with Disabilities. Special Fund and Special Organization are the
461
+ two that behave like other states' specialty programmes - Special Fund
462
+ plates direct money to a designated fund, Special Organization plates are
463
+ sponsored by an outside body.
464
+ count_official: null
465
+ count_official_note: >-
466
+ NO COUNT IS PUBLISHED AND NONE IS INVENTED. PennDOT replaced its static
467
+ plate lists with a SEARCH INTERFACE, and both the Special Fund and the
468
+ Special Organization search pages returned 'No results found' for an
469
+ empty query on 2026-08-02 - i.e. the agency's own catalogue is not
470
+ enumerable without knowing what to search for. That is a genuine
471
+ regression in public data and is recorded as such: Pennsylvania is
472
+ HARDER to index today than it was when the lists were static pages.
473
+ official_quote: "PennDOT: 'Pennsylvania also offers Special Fund, Speciality, Military and Special Organization license plates, the majority of which can be personalized.' (agency's own spelling of 'Speciality' preserved)"
474
+ special_organization_quote: "PennDOT: 'We make special organization plates showcasing Pennsylvania as the birthplace of America and featuring the Liberty Bell.'"
475
+ index_url: "https://www.pa.gov/en/agencies/dmv/vehicle-services/registration-plates.html"
476
+ special_fund_url: "https://www.pa.gov/services/dmv/apply-for-special-fund-registration-plates.html"
477
+ special_organization_url: "https://www.pa.gov/services/dmv/apply-for-special-organization-registration-plates.html"
478
+ eligibility_note: "Special Organization plates are available for passenger cars, trucks under 14,000 pounds, trailers, motorcycles (with approved designs) and motorhomes; PennDOT instructs applicants to 'contact your organization to request a Special Organization Registration Plate Application' rather than applying directly."
479
+ churn_note: "no discontinuation rule was located in Chapter 13; recorded gap."
480
+ region_encoding: none
481
+ sources:
482
+ - "https://www.pa.gov/en/agencies/dmv/vehicle-services/registration-plates.html # the seven-track structure and the 'majority of which can be personalized' statement"
483
+ - "https://www.pa.gov/services/dmv/apply-for-special-organization-registration-plates.html # the special-organization description, eligibility list and application route; its search interface returned no results for an empty query"
484
+ - "https://www.pa.gov/services/dmv/apply-for-special-fund-registration-plates.html # the special-fund track; likewise not enumerable"
485
+ notes: >-
486
+ THE SPECIALTY PROGRAM INDEX. Pennsylvania is the negative case that makes
487
+ the index worth having: the programme plainly exists across four tracks,
488
+ PennDOT describes it in prose, and NOBODY - including PennDOT - publishes
489
+ a list or a number. Recording an explicit null with the reason (the
490
+ catalogue is behind a search box that will not enumerate) is the honest
491
+ output, and it tells a future pass exactly what to fix rather than leaving
492
+ a silent hole.
493
+
494
+ # ---------------------------------------------------------------------------
495
+ # GAPS.
496
+ # ---------------------------------------------------------------------------
497
+ gaps:
498
+ - "71 P.S. § 636 - the whole basis of the adverse artwork posture - was NOT FETCHED (403 on findlaw via two routes; palegis.us reset the connection). Highest-priority verification in this file."
499
+ - "palegis.us was unreachable on four attempts; §§ 1331 and 1332 were read through a third-party reproduction. Re-derive before applying."
500
+ - "NO PENNSYLVANIA INSTRUMENT PINNED FOR THE ONE-PLATE / REAR-ONLY RULE. Locator-grade only. Look to 67 Pa. Code."
501
+ - "67 Pa. Code (the department regulations § 1332(a) delegates mounting to, and the reflectorisation standards § 1331(d) delegates to) was not obtained."
502
+ - "NO SOURCED PLATE DIMENSION; Chapter 13 states none."
503
+ - "Introduction date of the current base disagrees between PennDOT (June 2025) and the locator (May 2025). Recorded, not resolved."
504
+ - "PennDOT's alt text says 'white background'; PennDOT's own image is cream. Recorded, not resolved."
505
+ - "Specialty catalogue is not enumerable - both official search pages return no results for an empty query."
506
+ - "Motorcycle: four reported arrangements, none dated; modelled as recall-only until a primary lands."