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,537 @@
1
+ # plates/ca-nb.yml — New Brunswick, Canada (PRD-PLATES gate L2/L3, Canada east wave).
2
+ #
3
+ # NEW BRUNSWICK PUTS THE PLATE'S CONTENT IN THE ACT, WHICH ONTARIO AND
4
+ # NEWFOUNDLAND AND LABRADOR DO NOT. Motor Vehicle Act s. 29(2), verbatim: "Every
5
+ # registration plate shall have displayed upon it the registration number
6
+ # assigned to the vehicle for which it is issued, THE NAME OF THE PROVINCE, WHICH
7
+ # MAY BE ABBREVIATED, THE NUMBER OF THE YEAR FOR WHICH IT IS ISSUED, and such
8
+ # other information as the Minister may by order require." A statutory content
9
+ # rule with three mandatory elements — and the third of them, the year, is a
10
+ # legacy of the annual-plate era that the modern permanent plate satisfies through
11
+ # the s. 31 validation sticker rather than by embossing a year.
12
+ #
13
+ # FOUR STRUCTURAL FACTS THAT SHAPE THIS FILE
14
+ #
15
+ # 1. NEW BRUNSWICK BECAME A ONE-PLATE PROVINCE BY STATUTE IN 2019, AND THE
16
+ # AMENDMENT IS DATEABLE. MVA s. 29(1), as it now reads: "On registering a
17
+ # vehicle, the Registrar shall issue to the owner (a) ONE registration plate
18
+ # (i) for a motorcycle, an antique vehicle, a trailer or a semi-trailer, and
19
+ # (ii) for a vehicle that has a gross mass of less than 4 500 kg, and (b) TWO
20
+ # registration plates for a vehicle that has a gross mass of 4 500 kg or more".
21
+ # The section carries the amendment history "1955, c.13, s.20; 1977, c.M-11.1,
22
+ # s.17; 2009, c.4, s.1; 2019, c.6, s.5", and s. 30 — the attachment rule — was
23
+ # substituted by the same 2019 statute. The secondary record dates the front
24
+ # plate's abolition to 15 July 2019; the STATUTE independently shows a 2019
25
+ # amendment to the very subsection that would have to change, which is a rare
26
+ # case of a secondary date being corroborated by an instrument's own history
27
+ # line rather than merely repeated.
28
+ #
29
+ # 2. THE LEGIBILITY TEST IS A DISTANCE IN THE ACT. s. 29(3), verbatim: "Such
30
+ # registration plate and the required letters and numerals thereon, except the
31
+ # year number for which issued, shall be of sufficient size to be plainly
32
+ # readable from a distance of THIRTY METRES during daylight." A statutory
33
+ # legibility distance, with the year number expressly carved out of it.
34
+ #
35
+ # 3. THE PLATE IS THE CROWN'S AND THE FIRST LETTER IS A CLASS CODE. s. 29(4):
36
+ # "Registration plates issued to any person under this section shall remain at
37
+ # all times the property of the Crown." Separately — and this is the parse-
38
+ # relevant fact — New Brunswick reserves FIRST LETTERS by class: C for
39
+ # commercial, D for dealer, F for farm, H for taxi, L for truck, T for trailer,
40
+ # A for antique. Those reservations are the en.wikipedia article's, are tagged
41
+ # `secondary-wikipedia`, and are the closest thing New Brunswick has to Québec's
42
+ # statutory prefix table.
43
+ #
44
+ # 4. NO NEW BRUNSWICK INSTRUMENT LOCATED IN THIS PASS STATES A COLOUR, A DIMENSION
45
+ # OR A SERIAL GRAMMAR. s. 29(2) delegates everything beyond the three mandatory
46
+ # elements to ministerial order, and no such order was located. General
47
+ # Regulation 83-42 under the Act was NOT fetched (see `instrument.fetch_note`)
48
+ # and is the first place a verifier should look.
49
+ #
50
+ # SEPARATOR NOTE (PRD-PLATES §2.6): a New Brunswick plate prints a gap between
51
+ # groups, not a glyph. Every `pattern` spells the emitted space and every regex
52
+ # accepts it as optional.
53
+ jurisdiction: ca-nb
54
+ authority:
55
+ name: Motor Vehicle Branch, Department of Justice and Public Safety (New Brunswick); registration transacted through Service New Brunswick
56
+ url: "https://laws.gnb.ca/en/showfulldoc/cs/M-17"
57
+ url_note: "the Act itself is the authority citation because no New Brunswick agency plate page could be reached — laws.gnb.ca, www2.gnb.ca and www1.gnb.ca all returned HTTP 403 to every attempt on 2026-08-02 (see instrument.fetch_note)"
58
+ binding: vehicle
59
+ binding_note: >-
60
+ MVA s. 29(2) assigns the registration number "to the VEHICLE for which it is
61
+ issued" — vehicle-bound, and the opposite of the Ontario and Nova Scotia
62
+ owner-bound model in plates/ca-on.yml and plates/ca-ns.yml. s. 29(4) still makes
63
+ the physical plate Crown property. s. 32(1)(b) contemplates surrendering the
64
+ plate of a vehicle properly registered in another province as the price of a
65
+ free reciprocal New Brunswick registration.
66
+ instrument:
67
+ statute: "Motor Vehicle Act, R.S.N.B. 1973, c. M-17 — ss. 29 (issuance and content of registration plates), 30 (attachment), 31 (validation stickers), 32 (reciprocal arrangements), 33 (term and expiry), 35(2) (special-plate fees)"
68
+ currency: "the consolidation read is marked 'Current to 1 January 2024'"
69
+ key_amendments:
70
+ - "2019, c. 6, ss. 4-9 — re-headed and substituted ss. 29, 30 and 31; this is the amendment that moved New Brunswick to a single rear plate for vehicles under 4 500 kg"
71
+ - "2025, c. 6, s. 1 — most recent amendment to s. 30 (attachment)"
72
+ - "2009, c. 4, ss. 1-2 — previous substitution of ss. 29 and 31"
73
+ regulations_not_read:
74
+ - "N.B. Reg. 83-42 (General) — the principal regulation under the Act, 21 regulations deep in the Act's own regulation table. NOT FETCHED (gnb.ca 403). Any New Brunswick plate colour, dimension or serial rule that exists in delegated legislation is most likely here."
75
+ fetch_note: >-
76
+ EVERY gnb.ca HOST REFUSED THIS RESEARCH SESSION. laws.gnb.ca returned HTTP 403
77
+ to curl and to WebFetch, in English and in French, over HTTP and HTTPS;
78
+ www2.gnb.ca and www1.gnb.ca did the same. The consolidated Motor Vehicle Act
79
+ quoted throughout this file was therefore read through the Internet Archive's
80
+ copy (snapshot 20251201033750). Recorded so a verifier knows every New
81
+ Brunswick quotation here came through an archive, and so that N.B. Reg. 83-42
82
+ is flagged as unread rather than silently absent.
83
+ sources:
84
+ - "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # Motor Vehicle Act consolidation current to 1 January 2024, read 2026-08-02 — ss. 29(1)-(4), 30(1)-(2), 31(1)-(3), 32, 33 quoted in this file"
85
+ - "https://laws.gnb.ca/en/showfulldoc/cs/M-17 # the official consolidation the archive copy is of; HTTP 403 from this location, see fetch_note"
86
+ licence: >-
87
+ The Motor Vehicle Act is an EDICT OF GOVERNMENT and its text is
88
+ uncopyrightable (PRD-PLATES §4). Every verbatim quotation in this file is of
89
+ statutory text.
90
+
91
+ artwork_risk:
92
+ posture: unresearched
93
+ basis: >-
94
+ No New Brunswick copyright statement could be read, because no gnb.ca page
95
+ could be reached. The province's posture on plate ARTWORK is therefore
96
+ genuinely unknown rather than assumed favourable or adverse, and is recorded
97
+ as `unresearched` per PRD-PLATES §7.1's vocabulary.
98
+ emblem_rule: >-
99
+ PRD-PLATES §3 placeholder default applies with extra force here, since nothing
100
+ is known. The provincial wordmark (the red galley device with "New" /
101
+ "Nouveau" / "Brunswick" / "CANADA") is rendered `placeholder`; it is a
102
+ government wordmark and is likely to carry trade-mark protection independent
103
+ of copyright.
104
+
105
+ common:
106
+ statutory_content:
107
+ text: >-
108
+ MVA s. 29(2), verbatim: "Every registration plate shall have displayed upon
109
+ it the registration number assigned to the vehicle for which it is issued,
110
+ the name of the Province, which may be abbreviated, the number of the year
111
+ for which it is issued, and such other information as the Minister may by
112
+ order require."
113
+ consequence: >-
114
+ Three mandatory elements — number, province name, year — and an open
115
+ ministerial residue. The YEAR element is satisfied in practice by the s. 31
116
+ validation sticker rather than by an embossed year; s. 31(1) lets the
117
+ Minister authorise "a sticker or stickers instead of a registration plate or
118
+ plates", and s. 29(3) expressly excludes "the year number for which issued"
119
+ from the thirty-metre legibility test, which only makes sense if the year is
120
+ carried by something smaller than the serial.
121
+ source: "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 29(2),(3); s. 31(1),(1.1),(2)"
122
+ display:
123
+ text: >-
124
+ MVA s. 30(1), verbatim: "A registration plate issued under paragraph 29(1)(a)
125
+ shall be attached to the vehicle in the REAR and registration plates issued
126
+ under paragraph 29(1)(b) shall be attached to the vehicle, one in the front
127
+ and the other in the rear." s. 30(2): a plate shall at all times "(a) be
128
+ securely fastened to the vehicle for which it is issued so as to prevent the
129
+ plate from swinging, (b) be fastened in a horizontal position at a height of
130
+ at least 30 cm from the ground measuring from the bottom of the plate, (c) be
131
+ in a place and position so that the plate is clearly visible, and (d) be
132
+ maintained free from foreign materials and in a condition so that the plate is
133
+ clearly legible to a person on the highway in front or in rear of the
134
+ vehicle."
135
+ note: "30 cm is the same minimum height Nova Scotia (300 mm), Prince Edward Island (300 mm) and Newfoundland and Labrador (30 centimetres) enact. Four Atlantic statutes, one figure."
136
+ source: "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 30(1),(2), substituted by 2019, c. 6, ss. 6-7 and amended by 2025, c. 6, s. 1"
137
+ plate_count:
138
+ text: >-
139
+ MVA s. 29(1), verbatim: "On registering a vehicle, the Registrar shall issue
140
+ to the owner (a) one registration plate (i) for a motorcycle, an antique
141
+ vehicle, a trailer or a semi-trailer, and (ii) for a vehicle that has a gross
142
+ mass of less than 4 500 kg, and (b) two registration plates for a vehicle that
143
+ has a gross mass of 4 500 kg or more, excluding a vehicle under subparagraph
144
+ (a)(i), but the Minister may order that only one registration plate shall be
145
+ issued for a vehicle for the registration year or years specified in the
146
+ order."
147
+ source: "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 29(1), substituted by 2019, c. 6, s. 5"
148
+ expiry:
149
+ text: >-
150
+ MVA s. 33(1), verbatim: "Unless the regulations provide otherwise, every
151
+ vehicle registration under this Act, other than the registration of a
152
+ commercial vehicle, and every registration certificate and registration plate
153
+ issued under this Act for such vehicle, shall expire at midnight on the
154
+ THIRTY-FIRST DAY OF MARCH of each year."
155
+ note: "A fixed provincial expiry date rather than a staggered birthday system — the opposite of Ontario and Québec. Commercial vehicles are carved out to regulation by s. 33(2)(b)."
156
+ source: "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 33(1),(2)"
157
+ antique_definition:
158
+ text: 'MVA s. 1, verbatim: "\"antique vehicle\" means a motor vehicle that is at least twenty-five years old and has been restored to original condition; (ancien modèle)"'
159
+ note: >-
160
+ TWENTY-FIVE YEARS, not Ontario's thirty (HTA s. 7(1.1)) — and note the
161
+ stronger second limb: New Brunswick requires the vehicle to have been RESTORED
162
+ TO ORIGINAL CONDITION, where Ontario asks only that it be "substantially
163
+ unchanged or unmodified". Two Canadian provinces, two statutory antique tests,
164
+ neither reconcilable with the other.
165
+ source: "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 1 definitions"
166
+ class_first_letters:
167
+ note: >-
168
+ TAGGED SECONDARY, and the nearest New Brunswick equivalent of Québec's
169
+ statutory prefix table. The en.wikipedia article states that the following
170
+ first letters are reserved by class and therefore do not appear in the
171
+ ordinary passenger run: C (commercial), D (dealer), F (farm), H (taxi),
172
+ L (truck), T (trailer), A (antique). No New Brunswick instrument located in
173
+ this pass states any of it. The reservations are encoded in the passenger
174
+ series' `regex_strict` and nowhere else.
175
+ reserved: { C: commercial, D: dealer, F: farm, H: taxi, L: truck, T: trailer, A: antique }
176
+ source: "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_New_Brunswick # TAGGED SECONDARY (PRD-PLATES §4, owner override 2026-08-02), read 2026-08-02: the per-class serial tables and their first-letter reservations"
177
+ dimensions:
178
+ note: >-
179
+ NO NEW BRUNSWICK INSTRUMENT PRESCRIBES A PLATE SIZE. s. 29(3) states a
180
+ LEGIBILITY DISTANCE (thirty metres in daylight) instead, which is a
181
+ functional standard rather than a dimensional one — an unusual and rather
182
+ elegant drafting choice, and the only size-adjacent rule in the Act. The
183
+ 6 in x 12 in North American convention is recorded on the series below as
184
+ `plate_basis: convention`.
185
+
186
+ classes_not_modelled:
187
+ seasonal:
188
+ exists: true
189
+ mechanism: "The en.wikipedia article carries a 'Seasonal plates' section for New Brunswick, and MVA s. 35(2) empowers regulations 'fixing or altering fees in relation to the issuance or holding of SPECIAL PLATES', with the proceeds capable of going to a special purpose account or trust — the statutory hook for New Brunswick's specialty programmes generally."
190
+ why_not_modelled: "No serial grammar, colour or period was captured for the seasonal series in this pass, and no instrument describes it. Recorded as a gap."
191
+ sources:
192
+ - "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 35(2): the special-plate fee power"
193
+ firefighter_and_specialty:
194
+ exists: true
195
+ mechanism: "The article carries 'Firefighter plates' and a 'Specialty plates' section for New Brunswick; MVA s. 35(2) is again the statutory hook."
196
+ why_not_modelled: "PRD-PLATES §2.5 excludes the specialty-design catalogue from v1, and no primary describes any of these. Recorded as a gap."
197
+ sources:
198
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_New_Brunswick # the specialty and firefighter sections, read 2026-08-02"
199
+ prorated:
200
+ exists: true
201
+ mechanism: "The article carries a 'Prorated plates' section — New Brunswick participates in the International Registration Plan as every Canadian province does."
202
+ why_not_modelled: "IRP plates are the commercial series under an apportionment regime; no distinct New Brunswick grammar was located. Contrast plates/ca-qc.yml, where the PRP vignette is prescribed by Règlement art. 112.1."
203
+
204
+ series:
205
+
206
+ # =========================================================================
207
+ # THE CURRENT PASSENGER SERIES — three letters, three numerals, plain base.
208
+ # =========================================================================
209
+ - id: ca-nb-standard-2011
210
+ class: standard
211
+ categories: [car, van, truck]
212
+ period: { start: 2011 }
213
+ period_evidence: secondary-wikipedia
214
+ matching: strict
215
+ format:
216
+ pattern: "LLL 999"
217
+ regex: '\A[A-Z]{3} ?\d{3}\z'
218
+ regex_strict: '\A[BEGIJKMNOPQRSUVWXYZ][A-Z]{2} ?\d{3}\z'
219
+ charset:
220
+ reserved_first_letters: [A, C, D, F, H, L, T]
221
+ notes: >-
222
+ TAGGED SECONDARY — see `common.class_first_letters`. `regex_strict`
223
+ removes the seven reserved class letters from the FIRST position only and
224
+ leaves positions two and three unconstrained, because the article states
225
+ no exclusion for them. That is a deliberately partial strict twin, and
226
+ saying so is the point: a strict twin narrower than the truth would be
227
+ worse than none.
228
+ progression: "the article's issuance record runs JEA 000 upward through the J and K blocks; there is NO date and NO region signal in a New Brunswick serial"
229
+ design:
230
+ plate: { w: 12, h: 6, unit: in, plate_basis: convention }
231
+ plate_note: "NOT a New Brunswick legal claim — the Act states a legibility distance, not a size. See `common.dimensions`."
232
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
233
+ foreground: "#C8102E"
234
+ colour_note: >-
235
+ EMBOSSED RED ON REFLECTIVE WHITE, which makes New Brunswick the only
236
+ red-serial standard plate in the Canada east wave and therefore trivially
237
+ separable from Nova Scotia and Newfoundland and Labrador on sight, though
238
+ NOT from a string — all three provinces run ABC 123. No instrument states
239
+ either colour; both are observed and the claim itself is the article's.
240
+ legend_top: "New Brunswick / Nouveau-Brunswick provincial wordmark, screened, centred above the serial"
241
+ legend_bottom_options: []
242
+ slogan_note: "the 2011 base carries NO slogan. Its immediate predecessor carried the bilingual 'Be... in this place ᐧ Être... ici on le peut'; dropping it is the visible difference between the two series."
243
+ emblem: { present: true, rendered: placeholder, description: "the provincial wordmark: a red galley graphic with 'New' to the left, 'Nouveau' to the right and 'Brunswick' and 'CANADA' below" }
244
+ band: { side: none }
245
+ rear_differs: false
246
+ display: "ONE plate, REAR, for a vehicle under 4 500 kg (MVA ss. 29(1)(a)(ii), 30(1)) — front plates were abolished by 2019, c. 6, s. 5; see notes"
247
+ sources:
248
+ - "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 29(1)(a)(ii) (one plate under 4 500 kg), s. 29(2) (the statutory content rule), s. 29(3) (thirty-metre legibility), s. 29(4) (Crown property), s. 30(1)-(2) (rear attachment, 30 cm, legibility), s. 33(1) (31 March expiry)"
249
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_New_Brunswick # TAGGED SECONDARY: the 2011 base, the ABC 123 format, the removal of the slogan, the issuance range from JEA 000, the red-on-white colours, and the 15 July 2019 abolition of front plates (which the article footnotes to CBC News, 18 June 2019)"
250
+ notes: >-
251
+ THE CURRENT NEW BRUNSWICK PLATE. THE DISPLAY RULE IS PRIMARY AND THE FORMAT
252
+ IS NOT — the split is worth stating because the display rule is the more
253
+ unusual fact. New Brunswick abolished the front plate in 2019, and this file
254
+ does not take that from the newspaper the article cites: MVA s. 29(1) as
255
+ consolidated puts a vehicle under 4 500 kg squarely in the one-plate limb, and
256
+ the section's own amendment history line ends "2019, c. 6, s. 5", with s. 30
257
+ substituted by ss. 6-7 of the same statute. The instrument corroborates the
258
+ secondary's date to the year. THE FORMAT AND THE 2011 BASE ARE THE ARTICLE'S,
259
+ unfootnoted, hence `period_evidence: secondary-wikipedia`. PARSE CAUTION: New
260
+ Brunswick, Nova Scotia and Newfoundland and Labrador all currently issue
261
+ ABC 123, so a bare three-letter three-numeral string is not diagnostic of any
262
+ of them; the province is recoverable only from the plate IMAGE (red serial and
263
+ the galley wordmark here, blue serial and the Bluenose in Nova Scotia, blue
264
+ serial and the pitcher plant in Newfoundland and Labrador).
265
+
266
+ - id: ca-nb-standard-2009
267
+ class: standard
268
+ categories: [car, van, truck]
269
+ period: { start: 2009, end: 2011 }
270
+ period_evidence: secondary-wikipedia
271
+ matching: strict
272
+ format:
273
+ pattern: "LLL 999"
274
+ regex: '\A[A-Z]{3} ?\d{3}\z'
275
+ regex_strict: '\A[BEGIJKMNOPQRSUVWXYZ][A-Z]{2} ?\d{3}\z'
276
+ charset: { reserved_first_letters: [A, C, D, F, H, L, T], notes: "as ca-nb-standard-2011" }
277
+ design:
278
+ plate: { w: 12, h: 6, unit: in, plate_basis: convention }
279
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
280
+ foreground: "#C8102E"
281
+ legend_bottom_options: ["Be... in this place ᐧ Être... ici on le peut"]
282
+ slogan_note: >-
283
+ THE ONLY BILINGUAL SLOGAN IN THE CANADA EAST WAVE, and it is bilingual in a
284
+ way no other plate here is: English and French SIDE BY SIDE on one plate,
285
+ separated by a raised dot, rather than English and French plates issued as
286
+ alternatives (Ontario's YOURS TO DISCOVER / TANT À DÉCOUVRIR, Prince Edward
287
+ Island's PRINCE EDWARD ISLAND / ÎLE-DU-PRINCE-ÉDOUARD). New Brunswick is
288
+ Canada's only constitutionally bilingual province and its plate said so.
289
+ band: { side: top, color: "#FFC72C", note: "curved gold and sky-blue bands across the top of the plate, carrying the provincial wordmark. Observed, per the article; no instrument describes it." }
290
+ emblem: { present: true, rendered: placeholder, description: "the provincial wordmark on the bands: red galley with small blue waves" }
291
+ rear_differs: false
292
+ display: "TWO plates, front and rear — this series predates the 2019 abolition of the front plate, so a 2009-2011 New Brunswick vehicle was plated fore and aft when new"
293
+ sources:
294
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_New_Brunswick # TAGGED SECONDARY: the 2009-2011 banded base with the bilingual slogan, format ABC 123, issuance GXA 000 to GZZ 999 and JAA 000 to JDZ 999"
295
+ - "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 29(1) BEFORE the 2019 substitution is not reproduced in the consolidation, but the section's history line ('2009, c.4, s.1; 2019, c.6, s.5') establishes that the plate-count rule was substituted twice in the relevant window — which is why this series' display note is stated as a consequence of the amendment rather than quoted"
296
+ notes: >-
297
+ ONE SERIES BACK, and cut on DESIGN alone: the format is identical to
298
+ ca-nb-standard-2011 and only the base changed when the slogan and the gold and
299
+ sky-blue bands were dropped. PRD-PLATES §2.3 makes that its own series and
300
+ also means no parse API can tell the two apart from a string. Both boundaries
301
+ are the article's, unfootnoted. The display note is an INFERENCE from the
302
+ dated amendment history and is labelled as one.
303
+
304
+ # =========================================================================
305
+ # COMMERCIAL — first letter C, reserved.
306
+ # =========================================================================
307
+ - id: ca-nb-commercial-2011
308
+ class: standard
309
+ categories: [truck, van]
310
+ period: { start: 2011 }
311
+ period_evidence: secondary-wikipedia
312
+ matching: strict
313
+ format:
314
+ pattern: "CLL 999"
315
+ regex: '\AC[A-Z]{2} ?\d{3}\z'
316
+ charset: { notes: "the literal C in position 1 is the class reservation; the two letters and three numerals that follow are the article's. NOTE that this shape is INSIDE the passenger shape LLL 999 — the class signal is the letter itself, which is why the passenger series' strict twin excludes C from position 1." }
317
+ progression: "CRA 001 upward per the article's issuance record"
318
+ design:
319
+ plate: { w: 12, h: 6, unit: in, plate_basis: convention }
320
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
321
+ foreground: "#C8102E"
322
+ emblem: { present: true, rendered: placeholder, description: "provincial wordmark" }
323
+ band: { side: none }
324
+ rear_differs: false
325
+ display: "ONE plate REAR under 4 500 kg; TWO plates, front and rear, at 4 500 kg or more (MVA ss. 29(1), 30(1)) — so the same New Brunswick commercial series appears in one-plate and two-plate form depending on mass, which is a genuine modelling wrinkle and is recorded rather than flattened"
326
+ sources:
327
+ - "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 29(1)(b): two plates at 4 500 kg or more; s. 33(2)(b): commercial-vehicle registration periods are set by regulation rather than by the 31 March rule"
328
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_New_Brunswick # TAGGED SECONDARY: the CAB 123 commercial format from 2011 and the C reservation"
329
+ notes: >-
330
+ `class: standard` because the vocabulary has no commercial member; the C
331
+ reservation and the category list carry the meaning. THE 4 500 KG HINGE IS
332
+ THE PRIMARY PART: the same commercial serial wears one plate or two according
333
+ to a statutory mass threshold, so plate COUNT is a mass signal in New
334
+ Brunswick in a way it is not in Ontario (always two) or Québec (always one).
335
+
336
+ # =========================================================================
337
+ # HEAVY TRUCK — first letter L.
338
+ # =========================================================================
339
+ - id: ca-nb-truck-2003
340
+ class: standard
341
+ categories: [truck, tractor]
342
+ period: { start: 2003 }
343
+ period_evidence: secondary-wikipedia
344
+ matching: strict
345
+ format:
346
+ pattern: '\L999999'
347
+ regex: '\AL\d{6}\z'
348
+ charset:
349
+ notes: >-
350
+ The literal L is the class reservation. NOTE THE PATTERN ESCAPE: `L` is
351
+ the human-pattern DSL's own token for "any letter", so a plate that PRINTS
352
+ an L writes `\L` (PRD-PLATES §2.2, owner ruling 2026-08-02) — the same
353
+ collision Québec's heavy-truck prefix causes in plates/ca-qc.yml, and for
354
+ the same reason: two provinces independently chose L for "lourd"/"large".
355
+ Written in single quotes so YAML does not eat the backslash.
356
+ design:
357
+ plate: { w: 12, h: 6, unit: in, plate_basis: convention }
358
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
359
+ foreground: "#C8102E"
360
+ emblem: { present: true, rendered: placeholder, description: "provincial wordmark" }
361
+ band: { side: none }
362
+ rear_differs: false
363
+ sources:
364
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_New_Brunswick # TAGGED SECONDARY: the L123456 truck format, replacing L12-345 from 1991"
365
+ - "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 29(1)(b): a truck at or above 4 500 kg carries two plates"
366
+ notes: >-
367
+ period.start 2003 is the article's boundary between the L12-345 and L123456
368
+ forms and is unfootnoted. Authored because the all-numeric six-digit body
369
+ after a fixed L is genuinely distinctive and because the two Canadian
370
+ provinces that reserve L for trucks (New Brunswick and Québec) produce
371
+ COLLIDING strings — L123456 is a valid shape in both — which a parse API must
372
+ be told rather than left to discover.
373
+
374
+ # =========================================================================
375
+ # MOTORCYCLE — three letters, two numerals, one plate.
376
+ # =========================================================================
377
+ - id: ca-nb-motorcycle-2009
378
+ class: motorcycle
379
+ categories: [motorcycle]
380
+ period: { start: 2009 }
381
+ period_evidence: secondary-wikipedia
382
+ matching: strict
383
+ format:
384
+ pattern: "LLL99"
385
+ regex: '\A[A-Z]{3} ?\d{2}\z'
386
+ charset: { notes: "three letters, two numerals, printed as one block; the article's issuance record runs into the Y and Z blocks, which suggests the run is nearing exhaustion" }
387
+ design:
388
+ plate_note: "reduced motorcycle size; no New Brunswick instrument states one and no measured figure was obtained. Deliberately absent rather than guessed."
389
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
390
+ foreground: "#C8102E"
391
+ emblem: { present: true, rendered: placeholder, description: "provincial wordmark" }
392
+ band: { side: none }
393
+ rear_differs: false
394
+ display: "ONE plate, REAR — a motorcycle is in the one-plate limb at MVA s. 29(1)(a)(i) REGARDLESS OF MASS, which is a separate statutory route from the 4 500 kg rule and is why a motorcycle never carried a front plate even before 2019"
395
+ sources:
396
+ - "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 29(1)(a)(i): one plate for a motorcycle, an antique vehicle, a trailer or a semi-trailer — a mass-independent limb"
397
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_New_Brunswick # TAGGED SECONDARY: the ABC12 motorcycle format from 2009 and its issuance range"
398
+ notes: >-
399
+ THE ONE-PLATE LIMB IS PRIMARY AND IT IS THE INTERESTING PART: s. 29(1)(a)(i)
400
+ gives motorcycles, antique vehicles, trailers and semi-trailers a single plate
401
+ by CLASS, not by mass, so those four classes were unaffected by the 2019
402
+ change that abolished the front plate for everything under 4 500 kg. Format
403
+ and period are the article's.
404
+
405
+ # =========================================================================
406
+ # TRAILER — first letter T.
407
+ # =========================================================================
408
+ - id: ca-nb-trailer-2003
409
+ class: trailer
410
+ categories: [trailer, semitrailer]
411
+ period: { start: 2003 }
412
+ period_evidence: secondary-wikipedia
413
+ matching: strict
414
+ format:
415
+ pattern: "TLL 999"
416
+ regex: '\AT[A-Z]{2} ?\d{3}\z'
417
+ charset: { notes: "the literal T is the class reservation; the two letters and three numerals are the article's" }
418
+ design:
419
+ plate: { w: 12, h: 6, unit: in, plate_basis: convention }
420
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
421
+ foreground: "#C8102E"
422
+ emblem: { present: true, rendered: placeholder, description: "provincial wordmark" }
423
+ band: { side: none }
424
+ rear_differs: false
425
+ display: "ONE plate, REAR (MVA ss. 29(1)(a)(i), 30(1)) — a trailer and a semi-trailer are in the mass-independent one-plate limb"
426
+ sources:
427
+ - "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 29(1)(a)(i): one plate for a trailer or semi-trailer"
428
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_New_Brunswick # TAGGED SECONDARY: the TAB 123 trailer format, replacing TA1-234"
429
+ notes: >-
430
+ The T reservation and the arrangement are the article's; the one-plate rule is
431
+ statutory. period.start 2003 is the article's boundary and is unfootnoted.
432
+
433
+ # =========================================================================
434
+ # ANTIQUE — the statutory 25-year class.
435
+ # =========================================================================
436
+ - id: ca-nb-antique-2003
437
+ class: historic
438
+ categories: [car, van, truck, motorcycle]
439
+ period: { start: 2003 }
440
+ period_evidence: secondary-wikipedia
441
+ matching: strict
442
+ format:
443
+ pattern: "LL9 999"
444
+ regex: '\A[A-Z]{2}\d ?\d{3}\z'
445
+ charset: { notes: "two letters, digit, three numerals; the article's issuance record runs AA1 001 upward, so the leading A is in practice the class reservation even though the arrangement is nominally two free letters" }
446
+ design:
447
+ plate: { w: 12, h: 6, unit: in, plate_basis: convention }
448
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
449
+ foreground: "#C8102E"
450
+ emblem: { present: true, rendered: placeholder, description: "provincial wordmark" }
451
+ band: { side: none }
452
+ rear_differs: false
453
+ display: "ONE plate, REAR (MVA ss. 29(1)(a)(i), 30(1))"
454
+ eligibility:
455
+ text: 'MVA s. 1, verbatim: "\"antique vehicle\" means a motor vehicle that is at least twenty-five years old and has been restored to original condition; (ancien modèle)"'
456
+ note: "See `common.antique_definition` for the comparison with Ontario's thirty-year, substantially-unmodified test. New Brunswick's is younger AND stricter — a lower age bar with a restoration requirement."
457
+ sources:
458
+ - "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 1 (the 25-year restored-to-original definition, verbatim above); s. 29(1)(a)(i) (one plate for an antique vehicle); s. 1 'fictitious registration plate' definition, whose carve-outs expressly contemplate an out-of-year plate on 'a motorcycle, an antique vehicle, a trailer, a semi-trailer or a vehicle that has a gross mass of less than 4 500 kg' fitted to the FRONT — the statutory residue of the abolished front plate"
459
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_New_Brunswick # TAGGED SECONDARY: the AB1 234 antique format from 2003 and its issuance range"
460
+ notes: >-
461
+ AUTHORED FOR THE STATUTORY DEFINITION, which is the strongest fact about the
462
+ class and one of the few genuinely comparative facts in this wave: twenty-five
463
+ years and restored to original, against Ontario's thirty years and
464
+ substantially unmodified. THE HIDDEN GEM IS IN THE DEFINITIONS SECTION: New
465
+ Brunswick's definition of "fictitious registration plate" carves out "a
466
+ registration plate not furnished and issued for the current registration year
467
+ that is attached to the FRONT of a motorcycle, an antique vehicle, a trailer,
468
+ a semi-trailer or a vehicle that has a gross mass of less than 4 500 kg" —
469
+ i.e. after 2019 it is lawful to keep an expired plate on the front of your
470
+ car, and the legislature said so in a definition rather than in an operative
471
+ section. Format and period are the article's.
472
+
473
+ # =========================================================================
474
+ # DEALER — first letter D.
475
+ # =========================================================================
476
+ - id: ca-nb-dealer-2009
477
+ class: dealer
478
+ categories: [car, van, truck, motorcycle]
479
+ period: { start: 2009 }
480
+ period_evidence: secondary-wikipedia
481
+ matching: strict
482
+ format:
483
+ pattern: "D99 999"
484
+ regex: '\AD\d{2} ?\d{3}\z'
485
+ charset: { notes: "the literal D is the class reservation; five numerals follow. The article's issuance record reaches D21 547." }
486
+ design:
487
+ plate: { w: 12, h: 6, unit: in, plate_basis: convention }
488
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
489
+ foreground: "#C8102E"
490
+ emblem: { present: true, rendered: placeholder, description: "provincial wordmark" }
491
+ band: { side: none }
492
+ rear_differs: false
493
+ binding: business
494
+ sources:
495
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_New_Brunswick # TAGGED SECONDARY: the D12 345 dealer format from 2009, the D reservation and the issuance range"
496
+ - "https://web.archive.org/web/20251201033750/https://laws.gnb.ca/en/showfulldoc/cs/M-17/ # MVA s. 35(2): the special-plate fee power, the nearest statutory hook located for the dealer regime; the Act's plate sections do not describe dealer plates"
497
+ notes: >-
498
+ ENTIRELY SECONDARY, AND AUTHORED ANYWAY because the D-prefix-plus-five-numerals
499
+ shape is distinctive and because a dealer plate is a `binding: business` object
500
+ that a consumer must not read as a vehicle registration. No New Brunswick
501
+ instrument located in this pass describes a dealer plate — N.B. Reg. 83-42 is
502
+ the likely home of the regime and was unreachable (see
503
+ `instrument.fetch_note`). A verifier should re-pin this from that regulation
504
+ before the file is applied.
505
+
506
+ # =========================================================================
507
+ # OFF-ROAD / ATV.
508
+ # =========================================================================
509
+ - id: ca-nb-atv-2003
510
+ class: standard
511
+ categories: [atv]
512
+ period: { start: 2003 }
513
+ period_evidence: secondary-wikipedia
514
+ matching: strict
515
+ format:
516
+ pattern: "LL9 999"
517
+ regex: '\A[A-Z]{2}\d ?\d{3}\z'
518
+ charset: { notes: "same arrangement as the antique series — two letters, digit, three numerals — and therefore INDISTINGUISHABLE from it as a string. The article's ATV issuance record runs into the Y block while the antique run is in the A block, so in practice the first letter separates them; that is an allocation fact, not a grammar fact, and is not encoded." }
519
+ design:
520
+ plate_note: "no size located; deliberately absent"
521
+ background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
522
+ foreground: "#C8102E"
523
+ emblem: { present: true, rendered: placeholder, description: "provincial wordmark" }
524
+ band: { side: none }
525
+ rear_differs: false
526
+ sources:
527
+ - "https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_New_Brunswick # TAGGED SECONDARY: the AB1-234 ATV format from 2003 (AB12345 from 1986) and the issuance range to YE6 025"
528
+ notes: >-
529
+ AUTHORED WITH ITS OWN COLLISION STATED: the New Brunswick ATV and antique
530
+ series share an arrangement, so a parse API given "AB1 234" must return BOTH
531
+ candidates and rank them by allocation block rather than by grammar. That is
532
+ exactly the situation `matching: strict` is for — each regex is at or inside
533
+ its own series' issuing grammar, and the ambiguity is real rather than an
534
+ artefact of over-broad regexes. `class: standard` because the vocabulary has
535
+ no off-road member. Off-road registration in New Brunswick sits under the
536
+ Off-Road Vehicle Act rather than the Motor Vehicle Act, which was NOT consulted
537
+ in this pass; recorded gap.