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,602 @@
1
+ # plates/us-nc.yml — North Carolina (PRD-PLATES gate L2, group southeast-a).
2
+ #
3
+ # THE NORTH CAROLINA FINDING: THE STANDARD PLATE IS A CHOICE OF THREE, AND THE
4
+ # CHOICE IS IN THE STATUTE. N.C. Gen. Stat. § 20-63(b) gives the owner of a
5
+ # private passenger vehicle a statutory election between "(i) a 'First in
6
+ # Flight' plate, (ii) a 'First in Freedom' plate, or (iii) a 'National/State
7
+ # Mottos' plate", and the same subsection then DESCRIBES one of them in law:
8
+ # the First in Flight plate "shall have the words 'First in Flight' printed at
9
+ # the top of the plate above all other letters and numerals. The background of
10
+ # the 'First in Flight' plate shall depict the Wright Brothers biplane flying
11
+ # over Kitty Hawk Beach." A US state legislature specifying the SCENE on its
12
+ # plate is rare, and it makes North Carolina the only state in this group whose
13
+ # standard artwork is described by an edict of government.
14
+ #
15
+ # CONSEQUENCE FOR THE SCHEMA: North Carolina has THREE CONCURRENT CURRENT
16
+ # STANDARD SERIES, not one, and they are not variants of each other — they run
17
+ # in DISJOINT SERIAL BLOCKS, which means the plate string itself tells you
18
+ # which design you are looking at. That is a genuinely useful parse signal and
19
+ # it is modelled as three series under PRD-PLATES §2.3 (own series iff format
20
+ # OR design OR period differs — here design and period both differ).
21
+ #
22
+ # SOURCING PATH DISCLOSURE, REQUIRED BY HONESTY: the North Carolina General
23
+ # Assembly's own statute service (ncleg.gov) returns HTTP 403 from a Cloudflare
24
+ # challenge to every automated fetch attempted in this pass — HTML and PDF,
25
+ # with and without browser headers. § 20-63 and § 20-79.1 were therefore read
26
+ # through a third-party reproduction (codes.findlaw.com). The UNDERLYING TEXT
27
+ # is an edict of government and public domain; the READING PATH is second-hand
28
+ # and is disclosed at every citation below with the marker "[via FindLaw;
29
+ # ncleg.gov 403]". A verifier with browser access should re-derive both
30
+ # sections from ncleg.gov directly before this file is applied.
31
+ #
32
+ # EVIDENCE GRADES — the four defined in us-va.yml: statutory-date,
33
+ # official-agency-date, instrument-in-force-upper-bound,
34
+ # secondary-locator-unverified.
35
+ jurisdiction: us-nc
36
+ authority:
37
+ name: North Carolina Division of Motor Vehicles (NCDMV)
38
+ url: "https://www.ncdot.gov/dmv/title-registration/license-plates/Pages/default.aspx"
39
+ binding: vehicle
40
+ statute_edition: "North Carolina General Statutes, Chapter 20 (Motor Vehicles), Article 3 — §§ 20-63 and 20-79.1 as reproduced by codes.findlaw.com and read 2026-08-01; ncleg.gov itself was unreachable (403)"
41
+
42
+ # ---------------------------------------------------------------------------
43
+ # artwork_risk — required per jurisdiction by PRD-PLATES §4.
44
+ # ---------------------------------------------------------------------------
45
+ artwork_risk:
46
+ posture: public-domain-favourable
47
+ basis: >-
48
+ NORTH CAROLINA IS THE SECOND-BEST POSTURE IN THIS GROUP AFTER GEORGIA'S
49
+ GENERAL RULE, AND UNLIKE GEORGIA IT CARRIES NO PLATE-SPECIFIC CARVE-OUT.
50
+ Two independent supports. First, the public-records statute: N.C. Gen.
51
+ Stat. Chapter 132 provides that "The public records and public information
52
+ compiled by the agencies of North Carolina government or its subdivisions
53
+ are the property of the people. Therefore, it is the policy of this State
54
+ that the people may obtain copies of their public records and public
55
+ information free or at minimal cost unless otherwise specifically provided
56
+ by law." Second, the State Library of North Carolina treats state
57
+ documents in its collection as public domain under US copyright law and
58
+ publishes a State Document Public Domain Notice to that effect. Third, and
59
+ specific to this dataset, the standard plate's artwork is DESCRIBED IN THE
60
+ STATUTE ITSELF (§ 20-63(b), the Wright Brothers biplane over Kitty Hawk
61
+ Beach), and statutes are edicts of government — public domain at every
62
+ level, in every state, including states that assert copyright generally.
63
+ known_exceptions: >-
64
+ North Carolina's general "property of the people" rule is NOT absolute and
65
+ the exceptions are named: state law describes some specific record types
66
+ in which the State may hold copyright — archaeological resources collected
67
+ or excavated from State lands together with associated records and data,
68
+ and original tapes, notes, discs or other records created by stenotype,
69
+ shorthand or stenomask equipment as part of trial recording. NEITHER
70
+ EXCEPTION TOUCHES LICENSE PLATES. That matters: the honest posture is
71
+ "favourable with enumerated carve-outs, none applicable", not "everything
72
+ North Carolina makes is free".
73
+ no_commons_tag: >-
74
+ Wikimedia Commons has NO {{PD-NCGov}} template (HTTP 404, checked
75
+ 2026-08-01), where it does have PD-FLGov, PD-CAGov and PD-GAGov. The
76
+ absence of a Commons tag is NOT evidence against the posture — it is
77
+ evidence that nobody has written the tag. Recorded so that a later reader
78
+ does not mistake a missing template for an adverse finding.
79
+ emblem_rule: >-
80
+ PRD-PLATES §3's placeholder default still applies to the Wright Flyer
81
+ graphic, the quill-pen graphic and the national-flag motif until each is
82
+ affirmatively cleared per-emblem. Even under a favourable copyright
83
+ posture, STATE SEALS AND EMBLEMS carry protection independent of copyright
84
+ and that question is unresearched for North Carolina. Render `emblem:
85
+ {present: true, rendered: placeholder}`.
86
+ photograph_caution: "Commons photographs of North Carolina plates carry the photographer's licence on the photograph, not on the design. Our renders are generated from data, never derived from a photograph, so those obligations never attach."
87
+ sources:
88
+ - "https://www.ncleg.gov/EnactedLegislation/Statutes/HTML/ByChapter/Chapter_132.html # N.C. Gen. Stat. Chapter 132: public records and public information are 'the property of the people' (URL pinned; the host 403s automated fetches, see the header disclosure)"
89
+ - "http://digital.ncdcr.gov/cdm/ref/collection/p249901coll22/id/63754 # State Document Public Domain Notice, State Library of North Carolina"
90
+ - "http://copyright.lib.harvard.edu/states/north_carolina/ # Copyright at Harvard Library, North Carolina: the enumerated exceptions (archaeological resources; stenotype/shorthand/stenomask trial records) in which the State may hold copyright"
91
+ - "https://en.wikipedia.org/wiki/Copyright_status_of_works_by_subnational_governments_of_the_United_States # LOCATOR ONLY: the survey entry that chases to the three primaries above"
92
+ - "https://commons.wikimedia.org/wiki/Template:PD-NCGov # HTTP 404 — no Commons tag exists; recorded so its absence is not misread as adverse"
93
+
94
+ us_standards:
95
+ no_federal_mandate: true
96
+ chain: "SAE J686 -> AAMVA License Plate Standard Edition 3 (September 2025) -> voluntary state adoption; AAMVA's declarative present is RECOMMENDED PRACTICE, not requirement."
97
+ aamva_edition_3:
98
+ dimensions_delegated: "AAMVA §3.1 delegates dimensions and bolt holes to SAE J686, whose text is paywalled and was NOT obtained. No J686 dimension is quoted."
99
+ character_layout: "AAMVA §2.2: characters at least 2.5 in high, spaced at least 0.25 in apart, stroke weight 0.2-0.4 in, at least 1.25 in clear of top and bottom edges"
100
+ legibility_comparison: "AAMVA §3.3 asks for readability from at least 75 feet day AND night. N.C. Gen. Stat. § 20-63(c) legislates 100 feet in daylight — the same figure West Virginia legislates in §17A-3-14(b)(2). Two states of this group, one number, arrived at independently."
101
+ retroreflectivity_gap: >-
102
+ NORTH CAROLINA'S PLATE STATUTE DOES NOT REQUIRE RETROREFLECTIVITY. This
103
+ is a real absence, not an oversight in the research: § 20-63 sets a
104
+ 100-foot DAYLIGHT legibility bar and says nothing about night. Compare
105
+ South Carolina (§ 56-3-1230(B): "The face of the license plate must be
106
+ treated completely with a retroreflective material"), Georgia
107
+ (§ 40-2-31(c), same), West Virginia (§17A-3-14(b)(1): "Plates must
108
+ incorporate reflectorized material") and Florida (§ 320.06(3)(a)). Four
109
+ of the five states in this group legislate reflectivity; North Carolina
110
+ does not. Its plates are reflective in fact — the design descriptions all
111
+ say "reflective white" — but that is DEPARTMENTAL PRACTICE, and this file
112
+ records it as such.
113
+ replacement_cycle: "AAMVA §1.1 recommends a cycle not to exceed 7 to 10 years. No North Carolina replacement cycle was located in § 20-63 (recorded gap)."
114
+ source: "https://www.aamva.org/getmedia/646bcc8a-219b-47d8-b5cd-726240473163/License-Plate-Standard-Edition-3_September-2025-Update.pdf"
115
+ folklore_caution: "The '1956 AMA standardization agreement' remains COMMONLY REPEATED AND NOT PRIMARY-SOURCED; see the fuller note in us-va.yml. North Carolina's plate dimensions are not in § 20-63, so this file makes no North Carolina dimension claim."
116
+
117
+ display_rules:
118
+ default: "ONE plate. § 20-63(a) [via FindLaw; ncleg.gov 403]: 'The Division upon registering a vehicle shall issue to the owner one registration plate for a motorcycle, trailer or semitrailer and for every other motor vehicle.'"
119
+ position: "§ 20-63(d) [via FindLaw; ncleg.gov 403] is drafted for the two-plate case and then falls through: plates 'shall be attached thereto, one in the front and the other in the rear: Provided, that when only one registration plate is issued for a motor vehicle ... said registration plate shall be attached to the rear.' Because § 20-63(a) issues one, the operative North Carolina rule is REAR ONLY — reached through a proviso rather than stated directly, which is worth noting for anyone quoting the statute at a glance."
120
+ legibility: "§ 20-63(c): 'Such registration plate and the required numerals thereon, except the year number for which issued, shall be of sufficient size to be plainly readable from a distance of 100 feet during daylight.' Note the carve-out — the YEAR NUMBER is exempt from the 100-foot rule, so a legibility model must not apply one threshold to the whole plate."
121
+ plate_contents: "§ 20-63(b): 'Every license plate must display the registration number assigned to the vehicle for which it is issued, the name of the State of North Carolina, which may be abbreviated, and the year number for which it is issued or the date of expiration.'"
122
+ sticker_abolition: "OFFICIAL AND DATED: 'Effective October 1, 2026, NCDMV is no longer issuing physical license plate stickers or printed vehicle registration cards.' (NCDMV). A US state removing the validation sticker from the plate entirely is a design change with direct consequences for any renderer or ALPR model that expects one, and it is the single most time-sensitive fact in this file."
123
+ sources:
124
+ - "https://codes.findlaw.com/nc/chapter-20-motor-vehicles/nc-gen-st-sect-20-63.html # N.C. Gen. Stat. § 20-63 [via FindLaw; ncleg.gov 403]: (a) one plate; (b) plate contents and the three-design election, with the First in Flight description; (c) the 100-foot daylight rule and its year-number carve-out; (d) front/rear with the single-plate proviso"
125
+ - "https://www.ncdot.gov/dmv/title-registration/license-plates/Pages/default.aspx # NCDMV: the three standard designs by name, the October 1 2026 abolition of physical stickers and printed registration cards, and the specialty and personalized programmes"
126
+
127
+ series:
128
+
129
+ # =========================================================================
130
+ # CURRENT STANDARD ISSUE — THREE CONCURRENT SERIES, ONE PER STATUTORY
131
+ # DESIGN ELECTION, RUNNING IN DISJOINT SERIAL BLOCKS.
132
+ # =========================================================================
133
+ - id: us-nc-standard-first-in-flight
134
+ class: standard
135
+ categories: [car, van, truck]
136
+ period: { start: 2009 }
137
+ period_evidence: secondary-locator-unverified
138
+ matching: strict
139
+ format:
140
+ pattern: "LLL-9999"
141
+ regex: '\A[A-Z]{3}-?\d{4}\z'
142
+ regex_strict: '\A[A-Z][A-M][A-Z]-?\d{4}\z'
143
+ format_evidence: secondary-locator-unverified
144
+ charset:
145
+ notes: >-
146
+ THE SECOND LETTER IS THE CONSTRAINT, AND IT IS AN ALLOCATION RULE
147
+ RATHER THAN A LOOKALIKE EXCLUSION. On the current North Carolina
148
+ bases the second letter of the serial runs strictly A through M — so
149
+ AMZ is followed by BAA, BMZ by CAA, and so on. That is what
150
+ `regex_strict` encodes. It is a rationing device, not a legibility
151
+ one: North Carolina is not avoiding I/O/Q here, it is halving each
152
+ three-letter block so that three concurrent designs can share one
153
+ alphabet without colliding. The mirror-image rule ran on the
154
+ 1985-2007 base with the second letter strictly N through Z, and the
155
+ switch from N-Z to A-M happened when ZZZ-9999 was reached in 2010.
156
+ progression: >-
157
+ Reported blocks for THIS design: AAA-1001 onwards from December 2010,
158
+ reaching approximately LKE-7520 by mid-2025; the immediately
159
+ preceding stretch of the same design ran ZNE-1001 to ZZZ-9999 from
160
+ October 2009. First letters are therefore in the A-L range and are
161
+ expected to run to N before exhaustion. LOCATOR-GRADE.
162
+ design:
163
+ plate: { w: 12, h: 6, unit: in, dimension_evidence: convention-not-sourced }
164
+ plate_dimension_note: "no North Carolina dimension is sourced — § 20-63 states none. 12 x 6 in is the North American convention (AAMVA -> SAE J686, voluntary), not a North Carolina claim."
165
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
166
+ foreground: "#1F4E9C"
167
+ colour_note: >-
168
+ NO COLOUR IS IN § 20-63, AND NEITHER IS REFLECTIVITY (see
169
+ us_standards.aamva_edition_3.retroreflectivity_gap). Blue serial on
170
+ reflective white with a light blue Wright Flyer graphic is
171
+ `hex_basis: observed` from a locator description. One locator detail
172
+ is worth carrying because it is a legibility fact rather than an
173
+ aesthetic one: North Carolina ran RED serials on this design from
174
+ April 2007 and reverted to blue in October 2009 "following
175
+ complaints that the red serials were too hard to read from a
176
+ distance" — which is precisely the § 20-63(c) 100-foot bar being
177
+ enforced by public complaint rather than by statute.
178
+ legend_top: "First in Flight"
179
+ legend_rule: >-
180
+ § 20-63(b) [via FindLaw; ncleg.gov 403], verbatim: the First in
181
+ Flight plate "shall have the words 'First in Flight' printed at the
182
+ top of the plate above all other letters and numerals. The background
183
+ of the 'First in Flight' plate shall depict the Wright Brothers
184
+ biplane flying over Kitty Hawk Beach." THE STATUTE SPECIFIES THE
185
+ SCENE. This is the only standard-plate artwork in group southeast-a
186
+ that is described by an edict of government, and it is the reason
187
+ North Carolina's design facts are quotable where Virginia's and West
188
+ Virginia's are not.
189
+ graphic: { present: true, rendered: placeholder, description: "Wright Brothers biplane flying over Kitty Hawk Beach, per § 20-63(b)" }
190
+ emblem: { present: true, rendered: placeholder }
191
+ band: { side: none }
192
+ rear_differs: false
193
+ digit_note: "locator-reported: newer production of this and the other two current designs uses an updated '8' glyph to differentiate it from 'B' — a glyph-level anti-confusion change within an unchanged design, invisible to any serial-range model"
194
+ region_encoding:
195
+ kind: optional-county-block
196
+ mechanism: "since 1999 the OBX prefix has been issued as a special series for DARE COUNTY (the Outer Banks). It is a reserved three-letter block carrying a geographic meaning inside an otherwise geography-free serial space."
197
+ evidence: secondary-locator-unverified
198
+ note: "this is the ONLY geographic signal located in a North Carolina serial. It is a reserved BLOCK, not a systematic county encoding: 99 of North Carolina's 100 counties leave no trace in the plate string, so a decode table would have exactly one row. Recorded because a one-row decode table is still a real fact and because a parse API that reports 'OBX -> Dare County' is right."
199
+ sources:
200
+ - "https://codes.findlaw.com/nc/chapter-20-motor-vehicles/nc-gen-st-sect-20-63.html # § 20-63(b) [via FindLaw; ncleg.gov 403]: the three-design election and the verbatim First in Flight description (words at top, Wright Brothers biplane over Kitty Hawk Beach); (a) one plate; (c) 100-foot daylight legibility"
201
+ - "https://www.ncdot.gov/dmv/title-registration/license-plates/Pages/default.aspx # NCDMV names 'First in Flight' as one of three standard designs available for private passenger and private hauler vehicles and states what it commemorates (the Wright Brothers' first powered flight at Kitty Hawk, 1903)"
202
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_North_Carolina # LOCATOR ONLY (PRD-PLATES §4): the October 2009 blue-serial start, the December 2010 AAA-1001 block reset, the second-letter A-M allocation rule, the red-to-blue legibility reversion, the updated '8' glyph, and the OBX/Dare County series. None asserted as sourced."
203
+ notes: >-
204
+ NORTH CAROLINA FIRST IN FLIGHT — the default of the three statutory
205
+ designs and the oldest continuously issued. It is also one of the five
206
+ oldest US plate DESIGNS still in use by lineage (the First in Flight
207
+ concept dates to 1982, when it won ALPCA's Plate of the Year, the only
208
+ time North Carolina has been so honoured). The period recorded here is
209
+ for the CURRENT blue-serial execution from October 2009; the 1982-2007
210
+ lineage is L4 historical depth and is deliberately not modelled at this
211
+ gate. All three current designs share one format and one allocation rule
212
+ and differ only in artwork and serial block — which is exactly why they
213
+ are three series and not one with variants: PRD-PLATES §2.3 makes design
214
+ difference sufficient.
215
+
216
+ - id: us-nc-standard-first-in-freedom
217
+ class: standard
218
+ categories: [car, van, truck]
219
+ period: { start: 2015 }
220
+ period_evidence: secondary-locator-unverified
221
+ matching: strict
222
+ format:
223
+ pattern: "LLL-9999"
224
+ regex: '\A[A-Z]{3}-?\d{4}\z'
225
+ regex_strict: '\A[A-Z][A-M][A-Z]-?\d{4}\z'
226
+ format_evidence: secondary-locator-unverified
227
+ charset: { notes: "same second-letter A-M allocation rule as the other two current designs; see us-nc-standard-first-in-flight for the reasoning" }
228
+ progression: "reported: PAA-1001 onwards from 1 July 2015, reaching approximately RKT-1298 by May 2025, with PMZ followed by RAA and RMZ to be followed by SAA — a P/R/S first-letter block disjoint from First in Flight's A-L and from the Mottos plate's T-V. LOCATOR-GRADE."
229
+ design:
230
+ plate: { w: 12, h: 6, unit: in, dimension_evidence: convention-not-sourced }
231
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
232
+ foreground: "#1F4E9C"
233
+ legend_top: "First In Freedom"
234
+ legend_rule: "§ 20-63(b) [via FindLaw; ncleg.gov 403] names the 'First in Freedom' plate as one of the three elections but — unlike the First in Flight plate — does NOT describe its artwork. The quill-pen graphic and the two commemorative dates are therefore DEPARTMENTAL DESIGN, not statutory, and are recorded at a lower grade than the First in Flight scene."
235
+ graphic: { present: true, rendered: placeholder, description: "quill pen; locator-reported to carry the dates 20 May 1775 and 12 April 1776, commemorating the Mecklenburg Declaration and the Halifax Resolves" }
236
+ emblem: { present: true, rendered: placeholder }
237
+ rear_differs: false
238
+ region_encoding: none
239
+ sources:
240
+ - "https://codes.findlaw.com/nc/chapter-20-motor-vehicles/nc-gen-st-sect-20-63.html # § 20-63(b) [via FindLaw; ncleg.gov 403]: 'First in Freedom' as statutory election (ii), and the absence of any statutory description of its artwork"
241
+ - "https://www.ncdot.gov/dmv/title-registration/license-plates/Pages/default.aspx # NCDMV: 'First in Freedom: Recognizes two important North Carolina milestones in the American Revolution'"
242
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_North_Carolina # LOCATOR ONLY: the 1 July 2015 start, the PAA-1001 block, the quill pen, and the two 1775/1776 dates"
243
+ notes: >-
244
+ NORTH CAROLINA FIRST IN FREEDOM — the second statutory election, added
245
+ 1 July 2015. The instructive contrast with its sibling is the SOURCING
246
+ ASYMMETRY inside a single statutory subsection: § 20-63(b) describes the
247
+ First in Flight plate's background in law and says nothing at all about
248
+ this one's. A dataset that records "statutory" as a property of the
249
+ SERIES rather than of the CLAIM would flatten that difference and be
250
+ wrong twice. Note also the revived slogan: "FIRST IN FREEDOM" was North
251
+ Carolina's plate slogan on the 1975-78 base, retired, and brought back
252
+ forty years later as an optional design.
253
+
254
+ - id: us-nc-standard-national-state-mottos
255
+ class: standard
256
+ categories: [car, van, truck]
257
+ period: { start: 2019 }
258
+ period_evidence: secondary-locator-unverified
259
+ matching: strict
260
+ format:
261
+ pattern: "LLL-9999"
262
+ regex: '\A[A-Z]{3}-?\d{4}\z'
263
+ regex_strict: '\A[A-Z][A-M][A-Z]-?\d{4}\z'
264
+ format_evidence: secondary-locator-unverified
265
+ charset: { notes: "same second-letter A-M allocation rule; see us-nc-standard-first-in-flight" }
266
+ progression: "reported: TAA-1001 onwards from 1 July 2019, reaching approximately VFT-7102 by May 2025, with TMZ followed by VAA and VMZ to be followed by WAA. Note the SKIPPED LETTER: the block runs T then V, not T then U. LOCATOR-GRADE, and the skip is recorded rather than smoothed."
267
+ design:
268
+ plate: { w: 12, h: 6, unit: in, dimension_evidence: convention-not-sourced }
269
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
270
+ foreground: "#1F4E9C"
271
+ legend_top: "IN GOD WE TRUST"
272
+ legend_middle: "To Be Rather Than to Seem"
273
+ legend_rule: "§ 20-63(b) [via FindLaw; ncleg.gov 403] names the 'National/State Mottos' plate as election (iii) without describing it. NCDMV describes it as including both the United States motto ('In God We Trust') and the North Carolina motto ('To Be Rather Than to Seem') — the English translation of Esse quam videri."
274
+ graphic: { present: true, rendered: placeholder, description: "national flag motif at the top, locator-reported" }
275
+ emblem: { present: true, rendered: placeholder }
276
+ rear_differs: false
277
+ region_encoding: none
278
+ sources:
279
+ - "https://codes.findlaw.com/nc/chapter-20-motor-vehicles/nc-gen-st-sect-20-63.html # § 20-63(b) [via FindLaw; ncleg.gov 403]: 'National/State Mottos' as statutory election (iii)"
280
+ - "https://www.ncdot.gov/dmv/title-registration/license-plates/Pages/default.aspx # NCDMV: 'National/State Motto: Includes both the United States motto (In God We Trust) and North Carolina motto (To Be Rather Than to Seem)'"
281
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_North_Carolina # LOCATOR ONLY: the 1 July 2019 start, the TAA-1001 block, the T-then-V letter skip, and the national flag motif"
282
+ notes: >-
283
+ NORTH CAROLINA NATIONAL/STATE MOTTOS — the third and newest statutory
284
+ election, from 1 July 2019. Two details worth carrying. First, the
285
+ letter skip: the block goes T then V, so a consumer inferring "the next
286
+ block after T is U" is wrong, and a serial-range model built on
287
+ arithmetic rather than on the reported allocation will mis-attribute
288
+ U-series plates. Second, this design pairs a NATIONAL motto with a STATE
289
+ motto on the same plate, which is a different move from Florida's "In God
290
+ We Trust" variant (where the state motto simply replaces the county
291
+ legend) and worth distinguishing when the encyclopedia section compares
292
+ them.
293
+
294
+ # =========================================================================
295
+ # ONE SERIES BACK.
296
+ # =========================================================================
297
+ - id: us-nc-standard-first-in-flight-red-2007
298
+ class: standard
299
+ categories: [car, van, truck]
300
+ period: { start: 2007, end: 2009 }
301
+ period_evidence: secondary-locator-unverified
302
+ matching: strict
303
+ format:
304
+ pattern: "LLL-9999"
305
+ regex: '\A[A-Z]{3}-?\d{4}\z'
306
+ regex_strict: '\A[A-Z][N-Z][A-Z]-?\d{4}\z'
307
+ format_evidence: secondary-locator-unverified
308
+ charset:
309
+ notes: >-
310
+ THE ALLOCATION RULE IS THE MIRROR IMAGE OF TODAY'S. On this base and
311
+ its 1985-2007 predecessor the second letter ran strictly N through Z
312
+ — AZZ followed by BNA, BZZ by CNA — and that practice continued until
313
+ ZZZ-9999 was issued in 2010, at which point North Carolina reset to
314
+ AAA-1001 and inverted the rule to A-M. `regex_strict` here therefore
315
+ encodes [N-Z] where the current series encode [A-M], and the two are
316
+ disjoint in the second position. That disjointness is a genuine ERA
317
+ SIGNAL: second letter N-Z means pre-2010 allocation, A-M means
318
+ post-2010, and a parse API can date a North Carolina plate from one
319
+ character.
320
+ progression: "reported: WTF-1976 to approximately ZND-9999, issued mainly as replacements for earlier First in Flight plates carrying the older ABC-123 and ABC-12 formats. LOCATOR-GRADE."
321
+ design:
322
+ plate: { w: 12, h: 6, unit: in, dimension_evidence: convention-not-sourced }
323
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
324
+ foreground: "#C8102E"
325
+ colour_note: "RED serial on reflective white with the light blue Wright Flyer graphic. The red was abandoned in October 2009 after complaints that it was too hard to read at distance — the design difference from the current base is exactly one colour, which under PRD-PLATES §2.3 is enough to make it its own series."
326
+ legend_top: "First in Flight"
327
+ graphic: { present: true, rendered: placeholder, description: "Wright Brothers biplane flying over Kitty Hawk Beach, per § 20-63(b)" }
328
+ emblem: { present: true, rendered: placeholder }
329
+ rear_differs: false
330
+ region_encoding: none
331
+ sources:
332
+ - "https://codes.findlaw.com/nc/chapter-20-motor-vehicles/nc-gen-st-sect-20-63.html # § 20-63(b)-(c) [via FindLaw; ncleg.gov 403]: the same statutory frame and the 100-foot daylight bar the red serial was said to fail in practice"
333
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_North_Carolina # LOCATOR ONLY: April 2007 - October 2009, red serials, the WTF-1976 to ZND-9999 range, the second-letter N-Z rule, and the legibility complaints that ended it"
334
+ notes: >-
335
+ THE PREVIOUS NORTH CAROLINA STANDARD EXECUTION — a colour change, not a
336
+ redesign, and included for two reasons. First, it is the honest "one
337
+ series back" for the First in Flight lineage. Second, it carries the
338
+ second-letter N-Z allocation rule, which is the era signal described in
339
+ its charset notes and is far more useful to a parser than the colour
340
+ itself. The 2009 overlap with the current series is the rollout, with old
341
+ stock issuing on.
342
+
343
+ # =========================================================================
344
+ # CORE CLASSES.
345
+ # =========================================================================
346
+ - id: us-nc-motorcycle
347
+ class: motorcycle
348
+ categories: [motorcycle]
349
+ period: { start: 2026 }
350
+ period_evidence: instrument-in-force-upper-bound
351
+ matching: recall-only
352
+ format:
353
+ pattern: "LLLLLLL"
354
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,6}\z'
355
+ charset:
356
+ notes: >-
357
+ recall-only. § 20-63 states no motorcycle serial arrangement, and
358
+ NCDMV does not publish one. The ONE sourced size fact is indirect but
359
+ real: NCDMV caps a PERSONALIZED private motorcycle plate at SEVEN
360
+ character spaces against EIGHT for a personal vehicle, so the
361
+ motorcycle plate's usable field is one character shorter than the
362
+ car's. The seven-character recall bound here is therefore not
363
+ arbitrary for North Carolina motorcycles — it matches the state's own
364
+ published personalized limit — but it is still a recall bound, not a
365
+ claim about department-assigned serials.
366
+ halfspace_note: "NCDMV: 'Some special characters occupy one-half space in width. Half-space characters are allowed on motorcycle license plates.' A character-space model that counts glyphs rather than WIDTHS will over- or under-count North Carolina motorcycle plates."
367
+ design:
368
+ plate: { unit: in, dimension_note: "reduced-size motorcycle plate; no North Carolina dimension is sourced" }
369
+ background: { finish: retroreflective }
370
+ emblem: { present: true, rendered: placeholder }
371
+ display: "ONE plate, rear (§ 20-63(a) and the (d) proviso)"
372
+ region_encoding: none
373
+ sources:
374
+ - "https://codes.findlaw.com/nc/chapter-20-motor-vehicles/nc-gen-st-sect-20-63.html # § 20-63(a) [via FindLaw; ncleg.gov 403]: one registration plate for a motorcycle; (d): single plate goes on the rear"
375
+ - "https://www.ncdot.gov/dmv/title-registration/license-plates/Pages/default.aspx # NCDMV character-limit table: private motorcycle 7 spaces against 8 for a personal vehicle; the half-space character rule specific to motorcycle plates"
376
+ notes: >-
377
+ NORTH CAROLINA MOTORCYCLE. Modelled separately because the statute names
378
+ motorcycles as their own issuance case in § 20-63(a) and because NCDMV
379
+ publishes a different character capacity for them. The half-space rule is
380
+ the kind of detail that never reaches a plate dataset and quietly breaks
381
+ validators: on a North Carolina motorcycle plate the constraint is
382
+ TYPOGRAPHIC WIDTH, not character count, so "7 characters" and "7 spaces"
383
+ are different limits and the state means the second.
384
+
385
+ - id: us-nc-trailer
386
+ class: trailer
387
+ categories: [trailer]
388
+ period: { start: 2026 }
389
+ period_evidence: instrument-in-force-upper-bound
390
+ matching: recall-only
391
+ format:
392
+ pattern: "LLLLLLL"
393
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,6}\z'
394
+ charset: { notes: "recall-only; § 20-63 names trailers and semitrailers as a distinct issuance case but states no serial arrangement, and NCDMV publishes none. The personalized limit for a private trailer is 8 spaces, the same as a personal vehicle." }
395
+ design:
396
+ plate: { unit: in }
397
+ background: { finish: retroreflective }
398
+ display: "ONE plate, rear (§ 20-63(a) and the (d) proviso)"
399
+ region_encoding: none
400
+ sources:
401
+ - "https://codes.findlaw.com/nc/chapter-20-motor-vehicles/nc-gen-st-sect-20-63.html # § 20-63(a) [via FindLaw; ncleg.gov 403]: 'one registration plate for a motorcycle, trailer or semitrailer' — trailers named as their own case"
402
+ - "https://www.ncdot.gov/dmv/title-registration/license-plates/Pages/default.aspx # NCDMV character-limit table: private trailer 8 spaces"
403
+ notes: >-
404
+ NORTH CAROLINA TRAILER AND SEMITRAILER. Thin by design: the statute
405
+ establishes that trailers are separately handled, the DMV establishes
406
+ that they have their own personalized capacity, and nothing sourced
407
+ establishes a serial arrangement. Recorded rather than invented.
408
+
409
+ - id: us-nc-temporary
410
+ class: temporary
411
+ categories: [car, van, truck, bus, motorcycle, trailer]
412
+ period: { start: 2026 }
413
+ period_evidence: instrument-in-force-upper-bound
414
+ matching: recall-only
415
+ format:
416
+ pattern: "LLLLLLL"
417
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,6}\z'
418
+ charset: { notes: "recall-only. § 20-79.1 requires the DEALER to write information on the face of the plate by hand rather than the Division to assign a serial, so a 'serial format' in the usual sense may not exist for this class at all — which is itself the finding." }
419
+ design:
420
+ plate: { unit: in, dimension_note: "'designed by said Division'; NO design or size specification appears in § 20-79.1 (recorded gap). Contrast South Carolina, which legislates temporary-plate dimensions to the inch." }
421
+ background: { finish: null }
422
+ handwritten_content: >-
423
+ § 20-79.1 [via FindLaw; ncleg.gov 403] requires the dealer to write
424
+ clearly on the plate: the DATES OF ISSUANCE AND EXPIRATION; the MAKE,
425
+ MOTOR NUMBER AND SERIAL NUMBERS of the vehicle; and any other
426
+ information the Division requires. It is an offence to make any
427
+ misstatement of fact or knowingly to write false information on the
428
+ face of the plate or marker.
429
+ validity: >-
430
+ § 20-79.1: temporary plates or markers "shall expire and become void upon
431
+ the receipt of the limited registration plates or the annual registration
432
+ plates from the Division, or upon the rescission of a contract to
433
+ purchase a motor vehicle, or upon the expiration of 30 DAYS from the date
434
+ of issuance, depending upon whichever event shall first occur." A second
435
+ 30-day plate may be issued in stated circumstances where title documents
436
+ cannot be obtained.
437
+ region_encoding: none
438
+ sources:
439
+ - "https://codes.findlaw.com/nc/chapter-20-motor-vehicles/nc-gen-st-sect-20-79-1.html # N.C. Gen. Stat. § 20-79.1 [via FindLaw; ncleg.gov 403]: the 30-day/receipt-of-plates/rescission expiry triple, the second-plate provision, the dealer's hand-written content duty, the falsification offence, and the absence of any size or design specification"
440
+ notes: >-
441
+ NORTH CAROLINA TEMPORARY PLATES, AND A SCHEMA OBSERVATION WORTH THE
442
+ ENTRY. This series' "format" is not a serial grammar at all: § 20-79.1
443
+ makes the DEALER write the dates and the vehicle's make and numbers onto
444
+ the plate face by hand. The identifier on a North Carolina temporary tag
445
+ is thus partly VEHICLE data, not registration data — closer to a
446
+ completed form than to an assigned serial. The regex is recall-only and
447
+ the honest reading of a match is "this could be some North Carolina
448
+ alphanumeric string", nothing more. THE EXPIRY RULE IS THE VALUABLE PART
449
+ and it is a triple, not a duration: whichever of receipt-of-plates,
450
+ contract rescission, or 30 days comes first.
451
+
452
+ - id: us-nc-dealer
453
+ class: dealer
454
+ categories: [car, van, truck, bus, motorcycle, trailer]
455
+ period: { start: 2026 }
456
+ period_evidence: instrument-in-force-upper-bound
457
+ matching: recall-only
458
+ format:
459
+ pattern: "LLLLLLL"
460
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,6}\z'
461
+ charset: { notes: "recall-only; N.C. Gen. Stat. § 20-79 (dealer license plates) was NOT obtained in this pass — ncleg.gov 403s and the FindLaw mirror for that section was not reached. Existence is inferred from § 20-79.1's own title, 'Use of temporary registration plates or markers by purchasers of motor vehicles IN LIEU OF DEALERS' PLATES', which presupposes a dealer plate regime." }
462
+ design:
463
+ plate: { unit: in }
464
+ background: { finish: retroreflective }
465
+ binding: business
466
+ region_encoding: none
467
+ sources:
468
+ - "https://codes.findlaw.com/nc/chapter-20-motor-vehicles/nc-gen-st-sect-20-79-1.html # § 20-79.1's title and text presuppose dealers' plates ('in lieu of dealers' plates'), which sources the EXISTENCE of the class and nothing more"
469
+ notes: >-
470
+ NORTH CAROLINA DEALER PLATES — THE WEAKEST ENTRY IN THIS FILE AND
471
+ LABELLED AS SUCH. § 20-79 is the governing section and it was not
472
+ obtained: the General Assembly's service 403s automated fetches and the
473
+ mirror for that particular section was not reached before this pass
474
+ closed. What is sourced is that the class EXISTS, from the neighbouring
475
+ section's own title. Everything else — plate count rules, legend,
476
+ serial, colour — is a recorded gap. A verifier with browser access should
477
+ open § 20-79 first; it is the single cheapest quality win available for
478
+ North Carolina.
479
+
480
+ # =========================================================================
481
+ # PERSONALIZED — the second officially-sourced glyph-in-serial finding in
482
+ # this group, and the wider of the two.
483
+ # =========================================================================
484
+ - id: us-nc-personalized
485
+ class: personalized
486
+ categories: [car, van, truck, motorcycle, trailer]
487
+ period: { start: 2026 }
488
+ period_evidence: instrument-in-force-upper-bound
489
+ matching: strict
490
+ format:
491
+ pattern: "LLLLLLL"
492
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,6}\z'
493
+ charset:
494
+ notes: >-
495
+ NORTH CAROLINA OFFICIALLY PERMITS FOUR NON-ALPHANUMERIC GLYPHS INSIDE
496
+ A SERIAL, AND THE REGEX ABOVE CANNOT SPELL ANY OF THEM. NCDMV, in its
497
+ own words: "You can use numbers and some special characters,
498
+ including the question mark (?), ampersand (&), dollar sign ($) and
499
+ the 'at' symbol (@)." None of ?, &, $ or @ is in the dataset's serial
500
+ alphabet and none is a separator, so under PRD-PLATES §2.6 this is a
501
+ SCHEMA AMENDMENT — a `never_separator` entry with its source — and
502
+ not something a data file may decide alone. `matching: strict` is
503
+ still the correct value because the regex is NARROWER than what North
504
+ Carolina issues and §2.7 says narrower is strict; the consequence is
505
+ a KNOWN, SOURCED set of false negatives, recorded here rather than
506
+ hidden. SECOND, INDEPENDENT CHARSET FACT, and this one is a genuine
507
+ normalisation trap: "The letter 'O' is automatically converted into a
508
+ zero (0) on your personalized license plate to avoid confusion." So
509
+ North Carolina personalized serials contain NO letter O at all — a
510
+ state-enforced O-to-0 collapse at issue time, which means an OCR
511
+ pipeline that "corrects" 0 to O on a North Carolina vanity plate is
512
+ introducing the error rather than fixing it. THIRD: "Personalized
513
+ special plate requests must contain at least one letter."
514
+ character_limits:
515
+ source_note: "NCDMV's own table, in SPACES not characters (half-space glyphs exist; see us-nc-motorcycle)"
516
+ personal_vehicle: 8
517
+ private_motorcycle: 7
518
+ private_trailer: 8
519
+ disabled_license_plate: 6
520
+ special_license_plate: 4
521
+ note: "the SPECIAL-plate limit of 4 is the striking one: personalizing a North Carolina specialty plate leaves only four spaces, because the programme artwork occupies the rest of the field. Any model that assumes one vanity-length rule per state is wrong here by a factor of two."
522
+ design:
523
+ plate: { unit: in }
524
+ background: { finish: retroreflective }
525
+ note: "standard and specialty designs can both be personalized; personalized plates are manufactured by an outside vendor and take about 6-8 weeks (NCDMV)"
526
+ refusal_policy: >-
527
+ NCDMV reserves the right to refuse submissions deemed offensive to good
528
+ taste and decency, over the space limit, or duplicating another issued
529
+ plate. NCDMV states its own legal theory on the page, which is worth
530
+ quoting because it is the state explaining the doctrine to the public:
531
+ "Supreme Court case law has deemed state-issued license plates as
532
+ 'government speech' and provides the issuing agency with broad discretion
533
+ in refusing to issue or recall a plate with an indecent word/phrase or
534
+ meaning. Therefore, such speech is not subject to a First Amendment
535
+ analysis."
536
+ relinquishment: "a personalized text may not be given away but its RIGHTS may be released: form MVR-27N is filed with the plate, which is returned with a special code that relinquishes the text to a named person, who may then request it (NCDMV)"
537
+ region_encoding: none
538
+ sources:
539
+ - "https://www.ncdot.gov/dmv/title-registration/license-plates/Pages/default.aspx # NCDMV: the permitted special characters (? & $ @), the automatic O-to-0 conversion, the at-least-one-letter rule, the five character-space limits, the half-space rule, the refusal criteria and the government-speech statement, and the MVR-27N relinquishment mechanism"
540
+ notes: >-
541
+ NORTH CAROLINA PERSONALIZED, AND THE STRONGEST SCHEMA FINDING OF GROUP
542
+ SOUTHEAST-A. Two of five states — North Carolina here with ? & $ @, and
543
+ Virginia with the ampersand — officially publish permission to print a
544
+ non-alphanumeric glyph INSIDE a serial. PRD-PLATES §2.6 anticipated this
545
+ exact case and prescribed the remedy: "A jurisdiction that prints a glyph
546
+ inside a serial is a schema amendment, not a data entry. If one lands, it
547
+ goes to _meta/separators.yml's `never_separator` list with its source, and
548
+ every consumer learns about it from one place." Two have landed, from
549
+ first-party DMV pages. The amendment is PROPOSED in the group dossier and
550
+ deliberately NOT made here. The O-to-0 conversion is separately valuable
551
+ and points the opposite way from every OCR heuristic in the field.
552
+
553
+ # =========================================================================
554
+ # SPECIALTY — PROGRAM INDEX ONLY (PRD-PLATES §2.5).
555
+ # =========================================================================
556
+ - id: us-nc-specialty-index
557
+ class: specialty
558
+ categories: [car, van, truck, motorcycle, trailer]
559
+ period: { start: 2026 }
560
+ period_evidence: instrument-in-force-upper-bound
561
+ matching: recall-only
562
+ format:
563
+ pattern: "LLLLLLL"
564
+ regex: '\A[A-Z0-9](?: ?[A-Z0-9]){0,6}\z'
565
+ charset: { notes: "specialty serials are shorter than standard ones — the personalized limit on a special plate is FOUR spaces against eight on a personal vehicle — so no arrangement claim is made and the index is recall-only" }
566
+ design:
567
+ plate: { unit: in }
568
+ background: { finish: retroreflective }
569
+ note: "one design per authorised programme; the designs themselves are L4 scope (PRD-PLATES §2.5) and none is described here"
570
+ emblem: { present: true, rendered: placeholder }
571
+ program_index:
572
+ count_official: "more than 100"
573
+ count_official_quote: "NCDMV, in its own words: 'NCDMV issues specialty license plates representing more than 100 causes and interest groups.'"
574
+ official_list_url: "https://www.ncdot.gov/dmv/title-registration/license-plates/Pages/default.aspx"
575
+ production_model: >-
576
+ THE MOST OPERATIONALLY DISTINCTIVE FACT: North Carolina specialty plates
577
+ are made in LIMITED PRODUCTION RUNS and go out of stock. NCDMV: "Special
578
+ plates are made in limited production runs, so your chosen plate may not
579
+ be available at the time you request it. Some speciality plates are
580
+ replaced with new designs; others may be discontinued. You are free to
581
+ choose another plate that is available, or if the plate is out of stock,
582
+ you may choose to have it mailed to you when it is back in stock." So
583
+ "authorised" and "obtainable" are different states in North Carolina at
584
+ any given moment, and a programme index that models only authorisation
585
+ will overstate what a resident can actually buy.
586
+ membership_gating: "NCDMV: specialty plates for most military and civic clubs are obtainable only on verification of membership or of the specific recognition — e.g. the Purple Heart plate requires proof of the award. The same proof-before-purchase pattern Florida labels a 'special requirement' subtype."
587
+ establishment_process: "organisations may apply to establish a NEW specialty plate through a published multi-step process (NCDMV, 'Process to establish a specialty plate')"
588
+ transfer_restriction: "on an owner's death some specialty plates (military, disabled veteran, disability) cannot transfer to a surviving spouse because the plates carry eligibility requirements; others, such as Prisoner of War, are transferable if the surviving spouse does not remarry and continues to renew annually (NCDMV)"
589
+ region_encoding: none
590
+ sources:
591
+ - "https://www.ncdot.gov/dmv/title-registration/license-plates/Pages/default.aspx # NCDMV: 'more than 100 causes and interest groups'; the limited-production/out-of-stock model; the membership and award verification gating; the establishment process; and the death-transfer restrictions"
592
+ notes: >-
593
+ THE NORTH CAROLINA SPECIALTY PROGRAM INDEX — one entry standing for the
594
+ whole programme, per PRD-PLATES §2.5. The count is NCDMV's own "more than
595
+ 100" and is recorded as an agency estimate, not a count: unlike Virginia,
596
+ North Carolina does not expose a faceted search that would reconcile a
597
+ total. What North Carolina gives instead, and no other state in this group
598
+ does, is an honest statement of the LIMITED-PRODUCTION model — which is
599
+ the fact that explains why enthusiast catalogues and state lists never
600
+ agree anywhere in the US. The right L4 move here is not to chase a count
601
+ but to capture stock state over time, the way the Florida monthly
602
+ active-plate report should be captured.