vehicles 0.9.0 → 0.9.2

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 (195) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +57 -7
  3. data/README.md +353 -69
  4. data/data/PROVENANCE-vehicles.md +2 -2
  5. data/data/plates/PROVENANCE.md +2 -2
  6. data/data/plates/_decode/at-districts.yml +2 -2
  7. data/data/plates/_decode/cn-issuing-offices.yml +2 -2
  8. data/data/plates/_decode/cn-provinces.yml +2 -2
  9. data/data/plates/_decode/cz-kraj.yml +1 -1
  10. data/data/plates/_decode/dk-serial-blocks.yml +1 -1
  11. data/data/plates/_decode/es-provinces.yml +1 -1
  12. data/data/plates/_decode/fr-departements.yml +2 -2
  13. data/data/plates/_decode/gb-age-identifiers.yml +1 -1
  14. data/data/plates/_decode/gb-memory-tags.yml +1 -1
  15. data/data/plates/_decode/gr-prefectures.yml +1 -1
  16. data/data/plates/_decode/hr-cities.yml +3 -3
  17. data/data/plates/_decode/ie-counties.yml +3 -3
  18. data/data/plates/_decode/in-state-codes.yml +2 -2
  19. data/data/plates/_decode/it-provinces.yml +3 -3
  20. data/data/plates/_decode/jp-office-marks.yml +2 -2
  21. data/data/plates/_decode/jp-use-marks.yml +2 -2
  22. data/data/plates/_decode/kr-authority-marks.yml +1 -1
  23. data/data/plates/_decode/mx-entity-series.yml +1 -1
  24. data/data/plates/_decode/my-index-marks.yml +4 -4
  25. data/data/plates/_decode/pt-trailer-services.yml +1 -1
  26. data/data/plates/_decode/ro-counties.yml +1 -1
  27. data/data/plates/_decode/se-diplomatic.yml +1 -1
  28. data/data/plates/_decode/si-regions.yml +1 -1
  29. data/data/plates/_decode/ua-regions.yml +1 -1
  30. data/data/plates/_meta/classes.yml +1 -1
  31. data/data/plates/_meta/separators.yml +1 -1
  32. data/data/plates/ad.yml +555 -52
  33. data/data/plates/ar.yml +8 -8
  34. data/data/plates/at.yml +91 -10
  35. data/data/plates/au-act.yml +13 -13
  36. data/data/plates/au-nsw.yml +9 -9
  37. data/data/plates/au-nt.yml +13 -14
  38. data/data/plates/au-qld.yml +7 -7
  39. data/data/plates/au-sa.yml +7 -7
  40. data/data/plates/au-tas.yml +10 -10
  41. data/data/plates/au-vic.yml +6 -6
  42. data/data/plates/au-wa.yml +8 -8
  43. data/data/plates/be.yml +11 -11
  44. data/data/plates/br.yml +14 -14
  45. data/data/plates/ca-ab.yml +10 -10
  46. data/data/plates/ca-bc.yml +6 -6
  47. data/data/plates/ca-mb.yml +4 -4
  48. data/data/plates/ca-nb.yml +9 -9
  49. data/data/plates/ca-nl.yml +11 -11
  50. data/data/plates/ca-ns.yml +12 -12
  51. data/data/plates/ca-nt.yml +7 -7
  52. data/data/plates/ca-nu.yml +7 -7
  53. data/data/plates/ca-on.yml +21 -21
  54. data/data/plates/ca-pe.yml +13 -13
  55. data/data/plates/ca-qc.yml +11 -11
  56. data/data/plates/ca-sk.yml +6 -6
  57. data/data/plates/ca-yt.yml +6 -6
  58. data/data/plates/ch.yml +14 -14
  59. data/data/plates/cn.yml +9 -9
  60. data/data/plates/cy.yml +6 -6
  61. data/data/plates/cz.yml +9 -9
  62. data/data/plates/de.yml +8 -8
  63. data/data/plates/dk.yml +12 -12
  64. data/data/plates/ee.yml +13 -13
  65. data/data/plates/eg.yml +708 -0
  66. data/data/plates/es.yml +8 -8
  67. data/data/plates/fi.yml +14 -14
  68. data/data/plates/fr.yml +12 -12
  69. data/data/plates/gb.yml +16 -16
  70. data/data/plates/gr.yml +14 -14
  71. data/data/plates/hr.yml +15 -15
  72. data/data/plates/hu.yml +16 -16
  73. data/data/plates/ie.yml +7 -7
  74. data/data/plates/in.yml +7 -7
  75. data/data/plates/is.yml +3 -3
  76. data/data/plates/it.yml +21 -21
  77. data/data/plates/jp.yml +121 -121
  78. data/data/plates/kr.yml +6 -6
  79. data/data/plates/li.yml +6 -6
  80. data/data/plates/lt.yml +10 -10
  81. data/data/plates/lu.yml +4 -4
  82. data/data/plates/lv.yml +9 -9
  83. data/data/plates/mc.yml +4 -4
  84. data/data/plates/mt.yml +5 -5
  85. data/data/plates/mx.yml +7 -7
  86. data/data/plates/my.yml +18 -18
  87. data/data/plates/ng.yml +346 -0
  88. data/data/plates/nl.yml +5 -5
  89. data/data/plates/no.yml +7 -7
  90. data/data/plates/nz.yml +18 -18
  91. data/data/plates/pl.yml +4 -4
  92. data/data/plates/pt.yml +13 -5
  93. data/data/plates/ro.yml +14 -14
  94. data/data/plates/se.yml +13 -13
  95. data/data/plates/si.yml +8 -8
  96. data/data/plates/sk.yml +15 -15
  97. data/data/plates/sm.yml +7 -7
  98. data/data/plates/th.yml +10 -10
  99. data/data/plates/tr.yml +432 -0
  100. data/data/plates/ua.yml +9 -9
  101. data/data/plates/us-ak.yml +11 -11
  102. data/data/plates/us-al.yml +12 -12
  103. data/data/plates/us-ar.yml +15 -15
  104. data/data/plates/us-as.yml +10 -10
  105. data/data/plates/us-az.yml +10 -10
  106. data/data/plates/us-ca.yml +13 -13
  107. data/data/plates/us-co.yml +14 -14
  108. data/data/plates/us-ct.yml +24 -24
  109. data/data/plates/us-dc.yml +7 -7
  110. data/data/plates/us-de.yml +10 -10
  111. data/data/plates/us-fl.yml +17 -17
  112. data/data/plates/us-ga.yml +10 -10
  113. data/data/plates/us-gu.yml +11 -11
  114. data/data/plates/us-hi.yml +11 -11
  115. data/data/plates/us-ia.yml +9 -9
  116. data/data/plates/us-id.yml +13 -13
  117. data/data/plates/us-il.yml +11 -11
  118. data/data/plates/us-in.yml +9 -9
  119. data/data/plates/us-ks.yml +8 -8
  120. data/data/plates/us-ky.yml +11 -11
  121. data/data/plates/us-la.yml +11 -11
  122. data/data/plates/us-ma.yml +10 -10
  123. data/data/plates/us-md.yml +7 -7
  124. data/data/plates/us-me.yml +16 -16
  125. data/data/plates/us-mi.yml +8 -8
  126. data/data/plates/us-mn.yml +13 -13
  127. data/data/plates/us-mo.yml +13 -13
  128. data/data/plates/us-mp.yml +12 -12
  129. data/data/plates/us-ms.yml +8 -8
  130. data/data/plates/us-mt.yml +12 -12
  131. data/data/plates/us-nc.yml +12 -12
  132. data/data/plates/us-nd.yml +10 -10
  133. data/data/plates/us-ne.yml +10 -10
  134. data/data/plates/us-nh.yml +8 -8
  135. data/data/plates/us-nj.yml +8 -8
  136. data/data/plates/us-nm.yml +14 -14
  137. data/data/plates/us-nv.yml +18 -18
  138. data/data/plates/us-ny.yml +17 -17
  139. data/data/plates/us-oh.yml +13 -13
  140. data/data/plates/us-ok.yml +12 -12
  141. data/data/plates/us-or.yml +15 -15
  142. data/data/plates/us-pa.yml +14 -14
  143. data/data/plates/us-pr.yml +15 -15
  144. data/data/plates/us-ri.yml +10 -10
  145. data/data/plates/us-sc.yml +7 -7
  146. data/data/plates/us-sd.yml +12 -12
  147. data/data/plates/us-tn.yml +8 -8
  148. data/data/plates/us-tx.yml +17 -17
  149. data/data/plates/us-ut.yml +12 -12
  150. data/data/plates/us-va.yml +14 -14
  151. data/data/plates/us-vi.yml +16 -16
  152. data/data/plates/us-vt.yml +9 -9
  153. data/data/plates/us-wa.yml +18 -18
  154. data/data/plates/us-wi.yml +8 -8
  155. data/data/plates/us-wv.yml +9 -9
  156. data/data/plates/us-wy.yml +10 -10
  157. data/data/plates/va.yml +7 -7
  158. data/data/plates/za.yml +11 -11
  159. data/data/vehicles.json +121081 -62015
  160. data/lib/generators/vehicles/templates/initializer.rb +21 -12
  161. data/lib/generators/vehicles/templates/vehicles_refresh_job.rb +8 -4
  162. data/lib/vehicles/color.rb +8 -1
  163. data/lib/vehicles/colors.rb +14 -10
  164. data/lib/vehicles/configuration.rb +82 -3
  165. data/lib/vehicles/data_source.rb +220 -0
  166. data/lib/vehicles/dataset.rb +38 -6
  167. data/lib/vehicles/dataset_resolution.rb +39 -3
  168. data/lib/vehicles/dataset_slice.rb +90 -0
  169. data/lib/vehicles/hosted_result.rb +94 -0
  170. data/lib/vehicles/http.rb +75 -7
  171. data/lib/vehicles/id_lookup.rb +37 -0
  172. data/lib/vehicles/kind_rule.rb +63 -0
  173. data/lib/vehicles/labels.rb +131 -0
  174. data/lib/vehicles/make.rb +45 -19
  175. data/lib/vehicles/model.rb +66 -19
  176. data/lib/vehicles/model_match.rb +16 -2
  177. data/lib/vehicles/model_matcher.rb +6 -7
  178. data/lib/vehicles/plates/series.rb +87 -8
  179. data/lib/vehicles/plates/template_fill.rb +2 -2
  180. data/lib/vehicles/plates/templates.rb +9 -5
  181. data/lib/vehicles/plates.rb +54 -8
  182. data/lib/vehicles/providers/hosted_provider.rb +145 -32
  183. data/lib/vehicles/providers/local_provider.rb +2 -2
  184. data/lib/vehicles/refresh_result.rb +74 -0
  185. data/lib/vehicles/refresher.rb +190 -54
  186. data/lib/vehicles/release_checks.rb +72 -0
  187. data/lib/vehicles/text_matcher.rb +19 -10
  188. data/lib/vehicles/validators/vehicle_make_validator.rb +18 -1
  189. data/lib/vehicles/validators/vehicle_model_validator.rb +17 -1
  190. data/lib/vehicles/version.rb +1 -1
  191. data/lib/vehicles.rb +119 -67
  192. data/rakelib/data_refresh.rake +1 -1
  193. data/rakelib/plates_refresh.rake +1 -1
  194. data/sig/vehicles.rbs +67 -13
  195. metadata +13 -2
data/data/plates/kr.yml CHANGED
@@ -1,4 +1,4 @@
1
- # plates/kr.yml — Republic of Korea (PRD-PLATES gate L3).
1
+ # plates/kr.yml — Republic of Korea (the plates spec gate L3).
2
2
  #
3
3
  # EVERY dimension, colour, layout, class-code range and use-syllable claim in
4
4
  # this file comes from ONE instrument and its annexes: 「자동차 등록번호판 등의
@@ -46,7 +46,7 @@
46
46
  # a rental car (허). It is emphatically NOT a separator and no consumer may
47
47
  # delete it.
48
48
  #
49
- # PRD-PLATES §2.6 fixes the dataset's serial alphabet at A-Z and 0-9 and says in
49
+ # the plates spec §2.6 fixes the dataset's serial alphabet at A-Z and 0-9 and says in
50
50
  # terms that a jurisdiction printing a glyph inside a serial "is a schema
51
51
  # amendment, not a data entry". Korea is that jurisdiction. Until the amendment
52
52
  # lands, this file draws the line exactly where §2.5/§2.6 and the Japan note in
@@ -57,7 +57,7 @@
57
57
  # in printed order, with the hangul element ELIDED. For 123가4568 the
58
58
  # skeleton is 1234568 and the pattern is "9999999".
59
59
  # * `format.hangul_field` (this file's local extension, the `fields[]`
60
- # composition PRD-PLATES §2.2 anticipates for Japan) carries the elided
60
+ # composition the plates spec §2.2 anticipates for Japan) carries the elided
61
61
  # element: its position, its script, its width in millimetres, its closed
62
62
  # value set and a pointer into plates/_decode/kr-use-syllables.yml.
63
63
  # * `matching: strict` is nonetheless correct on these series, and the reason
@@ -138,7 +138,7 @@
138
138
  # in the dossier; the year is asserted, the day is not.
139
139
  #
140
140
  # ---------------------------------------------------------------------------
141
- # WHAT IS DELIBERATELY NOT IN THIS FILE (PRD-PLATES §2.5)
141
+ # WHAT IS DELIBERATELY NOT IN THIS FILE (the plates spec §2.5)
142
142
  # ---------------------------------------------------------------------------
143
143
  # * Military plates. Korean armed-forces registration is a Ministry of
144
144
  # National Defense system outside 「자동차관리법」 and outside this notice;
@@ -383,7 +383,7 @@ series:
383
383
  hex_basis: cmyk-naive
384
384
  cmyk_spec: "Annex 2-2 item 5: 디자인 배경 basic ground 밝은색 C40 M4 Y0 K0 / 중간색 C96 M90 Y0 K1 / 어두운색 C100 M97 Y22 K29; 국가축약문자 KOR same three, KOR outline C9 M7 Y7 K0; 숫자 및 한글 C73 M67 Y65 K80"
385
385
  note: "The band is a blue gradient, not a flat colour; the hex is a naive CMYK conversion of the mid tone and is for rendering only. This is Korea's equivalent of the EU band and it is NOT an EU band: it carries the national taegeuk and the ISO country abbreviation KOR."
386
- emblem: { present: true, rendered: placeholder, note: "the taegeuk in the band is a national symbol; PRD-PLATES §3 placeholder rule applies until its licence posture is affirmatively cleared" }
386
+ emblem: { present: true, rendered: placeholder, note: "the taegeuk in the band is a national symbol; the plates spec §3 placeholder rule applies until its licence posture is affirmatively cleared" }
387
387
  hologram: { present: true, note: "Annex 2-2 item 4 (홀로그램 패턴) — a 25 mm grid of holographic security marks across the plate face" }
388
388
  rear_differs: false
389
389
  region_encoding: none
@@ -1083,7 +1083,7 @@ series:
1083
1083
  quasi-diplomatic (준외), quasi-consular (준영), international-
1084
1084
  organisation (국기) and other-diplomatic (협정, 대표) plates likewise.
1085
1085
  Same format, same colours, same period — a WORD-only variant, so a
1086
- sub-entry per PRD-PLATES §2.3 rather than six near-identical series.
1086
+ sub-entry per the plates spec §2.3 rather than six near-identical series.
1087
1087
  The full seven-word list with its Korean category names is in
1088
1088
  plates/_decode/kr-use-syllables.yml under `diplomatic`.
1089
1089
  sources:
data/data/plates/li.yml CHANGED
@@ -1,4 +1,4 @@
1
- # plates/li.yml — Liechtenstein (PRD-PLATES gate L1, microstates group).
1
+ # plates/li.yml — Liechtenstein (the plates spec gate L1, microstates group).
2
2
  # DRAFT for verification. All primary text fetched from gesetze.li 2026-08-02.
3
3
  #
4
4
  # ---------------------------------------------------------------------------
@@ -95,7 +95,7 @@
95
95
  # agency-level or is omitted.
96
96
  #
97
97
  # ---------------------------------------------------------------------------
98
- # REGEX POLICY (PRD-PLATES §2.7 tiers)
98
+ # REGEX POLICY (the plates spec §2.7 tiers)
99
99
  # ---------------------------------------------------------------------------
100
100
  # regex the printed form: literal FL, an optional separator, and
101
101
  # 1-5 digits. THE DIGIT CEILING IS NOT IN THE ORDINANCE —
@@ -182,7 +182,7 @@ common:
182
182
  status: RECORDED SCHEMA FINDING — affects every series in this file
183
183
  finding: >-
184
184
  THE HUMAN-PATTERN DSL CANNOT SPELL A LITERAL "L", AND LIECHTENSTEIN IS THE
185
- JURISDICTION WHERE THAT BITES HARDEST. PRD-PLATES §2.2 defines the pattern
185
+ JURISDICTION WHERE THAT BITES HARDEST. The plates spec §2.2 defines the pattern
186
186
  alphabet as "9=digit L=letter, literal separators as printed", and
187
187
  lint_plates.rb implements it by substituting EVERY "9" and EVERY "L" in a
188
188
  pattern with a random digit or letter. There is no escape mechanism. So
@@ -205,7 +205,7 @@ common:
205
205
  A schema amendment would fix this properly — either an escape in the
206
206
  pattern DSL (e.g. a quoted literal) or a `format.literal_prefix` field.
207
207
  Recorded here rather than acted on, because inventing notation in a data
208
- PR is exactly what PRD-PLATES §2.6 forbids for separators and the same
208
+ PR is exactly what the plates spec §2.6 forbids for separators and the same
209
209
  discipline applies to the pattern alphabet. The same limitation forced
210
210
  sm.yml to model the San Marino POLIZIA legend as plate furniture rather
211
211
  than as part of the serial.
@@ -362,7 +362,7 @@ common:
362
362
  Wappengesetz's use article.
363
363
  rendered: placeholder
364
364
  licence_posture: >-
365
- PRD-PLATES §3's placeholder rule applies. The Wappengesetz reserves the
365
+ the plates spec §3's placeholder rule applies. The Wappengesetz reserves the
366
366
  state arms to the State and no affirmatively-clean licence route to the
367
367
  artwork was located, so the emblem slot renders as a neutral placeholder
368
368
  exactly as in ch.yml. Recorded honestly and NOT as legal advice: the
@@ -391,7 +391,7 @@ common:
391
391
  delegation — Liechtenstein does not even delegate the question the way the
392
392
  Swiss ordinance does to the ASTRA.
393
393
  licence: >-
394
- No licensable font is mandated, so per PRD-PLATES §6 the render layer uses
394
+ No licensable font is mandated, so per the plates spec §6 the render layer uses
395
395
  the schematic fallback and records the substitution. No third-party plate
396
396
  font is touched.
397
397
  source: "https://www.gesetze.li/konso/1978.020 # VZV Art. 72 Abs. 2, Art. 74 — the whole of what the ordinance says about characters"
data/data/plates/lt.yml CHANGED
@@ -1,4 +1,4 @@
1
- # plates/lt.yml — Lithuania (PRD-PLATES gate L1, EU/EEA wave 2). DRAFT for
1
+ # plates/lt.yml — Lithuania (the plates spec gate L1, EU/EEA wave 2). DRAFT for
2
2
  # verification: researched by an Opus L1 researcher, never applied directly.
3
3
  #
4
4
  # THE LITHUANIAN SOURCE POSITION, STATED HONESTLY UP FRONT
@@ -61,7 +61,7 @@
61
61
  # which the authority and the secondary sources alike render solid
62
62
  # ("T06868", "H02401", "P28737").
63
63
  # Both choices are RECORDED INFERENCES, flagged per series, and both are made
64
- # safe by PRD-PLATES §2.6: a separator-forgiving consumer collapses the two
64
+ # safe by the plates spec §2.6: a separator-forgiving consumer collapses the two
65
65
  # printed forms to one canonical serial either way.
66
66
  jurisdiction: lt
67
67
  authority:
@@ -103,7 +103,7 @@ common:
103
103
  Regitra's general-use page gives format 5 as 185 x 210 mm; its
104
104
  diplomatic page gives the same slot as 182 x 210 mm. A 3 mm disagreement
105
105
  between two pages of the same authority is RECORDED, not averaged
106
- (PRD-PLATES §5.3). Neither figure is traceable to an instrument here.
106
+ (the plates spec §5.3). Neither figure is traceable to an instrument here.
107
107
  source: "https://www.regitra.lt/en/services/state-number-plates/types-of-vehicle-registration-number-license-plates/of-general-use/"
108
108
  colours:
109
109
  hex_basis_note: >-
@@ -176,7 +176,7 @@ region_encoding_gap:
176
176
  accounts identify DIFFERENT POSITIONS in the mark. No Lithuanian
177
177
  instrument, and no Regitra page, was reached that settles it. Shipping a
178
178
  positional decode table while unsure WHICH POSITION it decodes would be the
179
- precise failure PRD-PLATES §2.4 warns about — a decode table that makes the
179
+ precise failure the plates spec §2.4 warns about — a decode table that makes the
180
180
  parse API lie — so none is shipped, in either position.
181
181
  also_unresolved: >-
182
182
  Even taking the county reading at face value, the scheme is described as
@@ -197,7 +197,7 @@ out_of_scope:
197
197
  followed by 777, three identical letters with a low serial, and other
198
198
  premium patterns — in four priced groups. These are ORDINARY general-use
199
199
  marks in the ordinary general-use format, distinguished only by
200
- desirability and price. Under PRD-PLATES §2.3 that is neither a format nor
200
+ desirability and price. Under the plates spec §2.3 that is neither a format nor
201
201
  a design nor a period difference, so it is not a series; a consumer that
202
202
  needs it wants a price list, not a plate record.
203
203
  source: "https://www.regitra.lt/en/services/state-number-plates/types-of-vehicle-registration-number-license-plates/exclusive/"
@@ -218,7 +218,7 @@ out_of_scope:
218
218
  that are being carried" — a repeater plate for a rear-mounted bicycle
219
219
  rack. It duplicates the towing vehicle's existing mark rather than
220
220
  carrying one of its own, so it has no serial grammar of its own, and under
221
- PRD-PLATES §2.7 it would in any case be a `recall-only` echo of whatever
221
+ the plates spec §2.7 it would in any case be a `recall-only` echo of whatever
222
222
  series the car belongs to. Not authored.
223
223
  source: "https://www.regitra.lt/en/services/state-number-plates/types-of-vehicle-registration-number-license-plates/"
224
224
 
@@ -286,7 +286,7 @@ series:
286
286
  RECORDED INFERENCE. Regitra states the composition but not the printed
287
287
  separator. A gap between the letter and digit groups is shown in the
288
288
  authority's own plate imagery on the 520 x 110 blank, and is spelled
289
- here as a space per PRD-PLATES §2.6 rule 2. On the 300 x 150 blank the
289
+ here as a space per the plates spec §2.6 rule 2. On the 300 x 150 blank the
290
290
  mark is very likely set on two rows with no separator at all; a
291
291
  forgiving consumer collapses both forms to one serial.
292
292
  design:
@@ -297,7 +297,7 @@ series:
297
297
  foreground: "#000000"
298
298
  border: { color: "#000000", note: "Regitra: the edging, letters and numbers are black" }
299
299
  band: { side: left, color: "#003399", content: eu-stars+LT, hex_basis: observed }
300
- emblem: { present: true, rendered: placeholder, content: "Vytis, the coat of arms of Lithuania, between the blue band and the letters on format 1; above the EU symbol on the band on the other formats", note: "PRD-PLATES §3 emblem rule: rendered as a neutral placeholder unless the artwork's licence is affirmatively clean" }
300
+ emblem: { present: true, rendered: placeholder, content: "Vytis, the coat of arms of Lithuania, between the blue band and the letters on format 1; above the EU symbol on the band on the other formats", note: "The plates spec §3 emblem rule: rendered as a neutral placeholder unless the artwork's licence is affirmatively clean" }
301
301
  rear_differs: false
302
302
  region_encoding: none
303
303
  sources:
@@ -548,7 +548,7 @@ series:
548
548
  THE EARLIER YELLOW TAXI PLATE. Regitra states that the white standard
549
549
  described above was approved from 3 April 2018 and that yellow plates
550
550
  issued earlier remain valid and "don't have to be changed". Recorded
551
- as a colour-only variant per PRD-PLATES §2.3 rather than as its own
551
+ as a colour-only variant per the plates spec §2.3 rather than as its own
552
552
  series, because the mark and the blanks are unchanged — only the
553
553
  ground colour differs. Its own start is the series start, 13 July 2006.
554
554
  sources:
@@ -818,7 +818,7 @@ series:
818
818
  The third digit's four values are enumerated by the authority and are
819
819
  encoded nowhere else in this file; they are recorded here rather than as
820
820
  a decode table because a four-row enumeration is a `charset` fact, not a
821
- table (PRD-PLATES §2.4 puts small mappings inline by design). The
821
+ table (the plates spec §2.4 puts small mappings inline by design). The
822
822
  MISSION-CODE mapping — which country is 01, which is 14 — is NOT
823
823
  published by Regitra and is NOT shipped; see notes.
824
824
  separator_note: >-
data/data/plates/lu.yml CHANGED
@@ -1,4 +1,4 @@
1
- # plates/lu.yml — Luxembourg (PRD-PLATES gate L1, EU/EEA wave 2).
1
+ # plates/lu.yml — Luxembourg (the plates spec gate L1, EU/EEA wave 2).
2
2
  #
3
3
  # ONE INSTRUMENT, READ END TO END, CARRIES THIS ENTIRE FILE. Every format,
4
4
  # every colour, every dimension, every special series, every historic design
@@ -163,7 +163,7 @@ series:
163
163
  to a cahier des charges approved by the minister, which is NOT published
164
164
  in the Memorial and was not reached. That delegation is the reason the
165
165
  separator position is spelled as the sanctioned separator-only class
166
- `[- ]` (PRD-PLATES §2.8) rather than as a literal: the gap is real, the
166
+ `[- ]` (the plates spec §2.8) rather than as a literal: the gap is real, the
167
167
  glyph is unlegislated.
168
168
  design:
169
169
  plate: { w: 520, h: 110, unit: mm, thickness: [1, 1.5] }
@@ -249,7 +249,7 @@ series:
249
249
  background: { color: "#F9B700", finish: retroreflective, hex_basis: observed }
250
250
  foreground: "#000000"
251
251
  band: { side: left, color: "#003399", hex_basis: observed, content: eu-stars+L }
252
- note: "no design of its own — a personalised number is printed on the ordinary plate. It is a SERIES here rather than a sub-entry because its number grammar and its binding both differ (PRD-PLATES §2.3)."
252
+ note: "no design of its own — a personalised number is printed on the ordinary plate. It is a SERIES here rather than a sub-entry because its number grammar and its binding both differ (the plates spec §2.3)."
253
253
  region_encoding: none
254
254
  sources:
255
255
  - "https://data.legilux.public.lu/eli/etat/leg/rgd/2003/06/17/n2/jo/fr/pdf # RGD 17-06-2003 art. 8 (the three series a personalised number may come from, the waiting list, transfer between the holder's vehicles, the 36-month reservation, inheritance at first degree, and the fees of 50 EUR on first grant / 24 EUR on transfer) and art. 9 §2 (the five renunciation outcomes). Accessed 2026-08-02"
@@ -530,7 +530,7 @@ series:
530
530
  institutional geography of Luxembourg City, written into a plate
531
531
  regulation. THE DECODE TABLE IS A GAP: the instrument states the
532
532
  MECHANISM (first group = the body) and publishes no codes, and no
533
- Ministry of Foreign Affairs list was reached. PRD-PLATES puts diplomatic
533
+ Ministry of Foreign Affairs list was reached. The plates spec puts diplomatic
534
534
  decode tables at gate L4; this entry carries the mechanism so a table can
535
535
  be hung off it later without an id change.
536
536
 
data/data/plates/lv.yml CHANGED
@@ -1,4 +1,4 @@
1
- # plates/lv.yml — Latvia (PRD-PLATES gate L1, EU/EEA wave 2). DRAFT for
1
+ # plates/lv.yml — Latvia (the plates spec gate L1, EU/EEA wave 2). DRAFT for
2
2
  # verification: researched by an Opus L1 researcher, never applied directly.
3
3
  #
4
4
  # THE LATVIAN SOURCE CHAIN — THE FULL INSTRUMENT LINE, DATED TO THE DAY
@@ -154,7 +154,7 @@ common:
154
154
  practice rule the regulation does not contain: "Ja transportlīdzeklim
155
155
  iepriekš bija izsniegta E tipa numura zīme, veicot numuru maiņu, CSDD
156
156
  izsniedz C tipa numura zīmi." A divergence between the instrument and the
157
- issuing authority, recorded and not averaged (PRD-PLATES §5.3).
157
+ issuing authority, recorded and not averaged (the plates spec §5.3).
158
158
  sources:
159
159
  - "https://likumi.lv/ta/id/222145-transportlidzeklu-registracijas-noteikumi # 7. pielikums 1.1-1.7"
160
160
  - "https://www.csdd.lv/numura-zimju-apraksts/nr-zimju-tipi-19 # CSDD's type table and the E-to-C replacement practice"
@@ -248,7 +248,7 @@ region_encoding_gap:
248
248
  vehicle type) and its last digit (the year of validity); the trial plate's
249
249
  "IZM"; the diplomatic plate's "C"/"CC"/"CD"; and the military plate's
250
250
  "L"/"LA". Every one of those is encoded inline in the relevant series'
251
- `charset`, which PRD-PLATES §2.4 makes the right home for a small mapping.
251
+ `charset`, which the plates spec §2.4 makes the right home for a small mapping.
252
252
  No Latvian instrument or CSDD page reached in this pass encodes region,
253
253
  district or era anywhere in a general-use mark.
254
254
  source: "https://likumi.lv/ta/id/222145-transportlidzeklu-registracijas-noteikumi # 7. pielikums, read in full for positional semantics"
@@ -295,7 +295,7 @@ gaps:
295
295
  in 7. pielikums punkts 6. It is sold by the national standards body, its
296
296
  catalogue is JS-rendered, and no edition was obtained: not LVS 20-92, not
297
297
  LVS 20:2003, not /A1:2006, not LVS 20:2009 (the edition CSDD's current page
298
- names). PRD-PLATES §4's SAE J686 posture applies exactly — never quote the
298
+ names). The plates spec §4's SAE J686 posture applies exactly — never quote the
299
299
  standard's values until it is bought. Consequence: this file carries NO
300
300
  character height and NO font for any Latvian series, and its ordinary-plate
301
301
  colours rest on CSDD's wording rather than on a specification.
@@ -356,7 +356,7 @@ series:
356
356
  "A tipa numura zīmēs burti no cipariem atdalīti ar horizontālu svītru."
357
357
  The horizontal stroke is prescribed for the A type ONLY; the B and C
358
358
  blanks carry the same mark with no stroke prescribed. The pattern
359
- spells the A-type printed form, per PRD-PLATES §2.6 rule 2, and a
359
+ spells the A-type printed form, per the plates spec §2.6 rule 2, and a
360
360
  separator-forgiving consumer recovers the B/C form.
361
361
  design:
362
362
  plate: { w: 520, h: 110, unit: mm }
@@ -517,7 +517,7 @@ series:
517
517
  motorcycle takes the C type (240 x 130 mm) or the F type. The pattern
518
518
  therefore spells the mark solid — the same Latvian mark prints WITH a
519
519
  hyphen on a car and WITHOUT one on a motorcycle, which is exactly the
520
- situation PRD-PLATES §2.6 exists to make safe.
520
+ situation the plates spec §2.6 exists to make safe.
521
521
  design:
522
522
  plate: { w: 240, h: 130, unit: mm }
523
523
  background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
@@ -850,7 +850,7 @@ series:
850
850
  this file does not assert it.
851
851
  dsl_collision: >-
852
852
  A GENUINE SCHEMA STRESSOR, RECORDED RATHER THAN WORKED AROUND
853
- SILENTLY. PRD-PLATES §2.2 defines the human pattern DSL as 9=digit,
853
+ SILENTLY. The plates spec §2.2 defines the human pattern DSL as 9=digit,
854
854
  L=letter, everything else literal — so the DSL CANNOT SPELL A LITERAL
855
855
  "L" (nor a literal "9"). Latvia's military mark begins with exactly
856
856
  that letter. Because `pattern` must round-trip against `regex`, and
@@ -861,7 +861,7 @@ series:
861
861
  `issuing_grammar` so no information is lost, and it cannot live in
862
862
  `regex_strict` because §2.7 forbids a strict twin on a recall-only
863
863
  series. THE FIX IS A SCHEMA AMENDMENT (an escape for literal L/9 in
864
- the DSL), not a data edit; flagged for PRD-PLATES §2.6.
864
+ the DSL), not a data edit; flagged for the plates spec §2.6.
865
865
  design:
866
866
  plate: { w: 520, h: 110, unit: mm }
867
867
  plate_variants:
@@ -921,4 +921,4 @@ series:
921
921
  so. No amending regulation was traced to the insertion of 4.8. This is the
922
922
  weakest date in the file and is flagged accordingly. Modelled as its own
923
923
  series because the DESIGN differs (blue symbols) even though the FORMAT
924
- does not — PRD-PLATES §2.3's design limb.
924
+ does not — the plates spec §2.3's design limb.
data/data/plates/mc.yml CHANGED
@@ -1,4 +1,4 @@
1
- # plates/mc.yml — Monaco (PRD-PLATES gate L1, microstates group).
1
+ # plates/mc.yml — Monaco (the plates spec gate L1, microstates group).
2
2
  # DRAFT for verification. All primary text fetched from legimonaco.mc and the
3
3
  # Journal de Monaco archive, 2026-08-02.
4
4
  #
@@ -235,7 +235,7 @@ common:
235
235
  routière in its own right — ratified 6 June 1978, in force for Monaco
236
236
  6 June 1979. Art. 37.1 requires a distinguishing sign on the rear; Annexe
237
237
  3.1 makes it one to three Latin capitals, black on a white ellipse; and
238
- Annexe 3.3 is the provision PRD-PLATES §4 flags — "Le signe distinctif ne
238
+ Annexe 3.3 is the provision the plates spec §4 flags — "Le signe distinctif ne
239
239
  doit pas être incorporé dans le numéro d'immatriculation, ni apposé de
240
240
  façon telle qu'il puisse créer une confusion avec ce dernier ou nuire à sa
241
241
  lisibilité."
@@ -300,7 +300,7 @@ common:
300
300
  The "écusson fuselé rouge et blanc" — the lozengy red-and-white shield of
301
301
  the Grimaldi arms — is on the front plate and on the estampille. On the
302
302
  princely série spéciale, "les armoiries princières remplacent l'écusson
303
- rouge et blanc et l'estampille". PRD-PLATES §3's placeholder rule applies;
303
+ rouge et blanc et l'estampille". The plates spec §3's placeholder rule applies;
304
304
  no clean licence route to the Grimaldi arms was located.
305
305
  not_modelled:
306
306
  - "NO POLICE SERIES EXISTS IN THE LAW. Art. 6 lists ME (Ministère d'État) and CN (Conseil National) and no Sûreté Publique series at all. The commonly-repeated 'SP + two digits' for police motorcycles has no primary basis located and is NOT modelled — a searched-for negative, not an oversight."
@@ -970,7 +970,7 @@ series:
970
970
  plate: { w: 455, h: 85, unit: mm, note: "the adhesive band for cars — 'longueur : 45,5 cm ; largeur : 8,5 cm'. THE ONLY OVERALL DIMENSION IN THE WHOLE INSTRUMENT, because a band is not a deposited model." }
971
971
  plate_variants:
972
972
  - { w: 205, h: 100, unit: mm, note: "motorcycles — 'longueur : 20,5 cm ; largeur : 10 cm'" }
973
- font: { name: "Swiss721 BT", note: "NAMED IN THE INSTRUMENT — the only typeface named anywhere in the microstates group, and a licensing question PRD-PLATES §6 must answer before any render uses it. Swiss721 is a Bitstream commercial font; the render layer uses the schematic fallback." }
973
+ font: { name: "Swiss721 BT", note: "NAMED IN THE INSTRUMENT — the only typeface named anywhere in the microstates group, and a licensing question the plates spec §6 must answer before any render uses it. Swiss721 is a Bitstream commercial font; the render layer uses the schematic fallback." }
974
974
  band: { side: none }
975
975
  emblem: { present: false }
976
976
  rear_differs: false
data/data/plates/mt.yml CHANGED
@@ -1,4 +1,4 @@
1
- # plates/mt.yml — Malta (PRD-PLATES gate L1, wave 2).
1
+ # plates/mt.yml — Malta (the plates spec gate L1, wave 2).
2
2
  #
3
3
  # THE INTERESTING THING ABOUT MALTA IS THE LETTER BLOCK, AND IT IS PUBLISHED.
4
4
  # Most small jurisdictions allocate class-marking letters by unpublished
@@ -164,7 +164,7 @@ letter_blocks:
164
164
  write. Secondary sources describe a "GM 99" form; no instrument supports
165
165
  the two digits.
166
166
  lapsed:
167
- note: "blocks that were prescribed and then withdrawn — kept because plates issued under them remain on the road, exactly as the period discipline in PRD-PLATES §2.4 requires for decode rows"
167
+ note: "blocks that were prescribed and then withdrawn — kept because plates issued under them remain on the road, exactly as the period discipline in the plates spec §2.4 requires for decode rows"
168
168
  blocks:
169
169
  - { block: BY, meaning: "route buses", period: "2004-2018", note: "replaced by BUS by L.N. 139 of 2018 s.4(a). The familiar DBY / EBY / FBY marks of the old Malta buses are instances of this rule with a varying leading letter — not three separate blocks" }
170
170
  - { block: CY, meaning: "coaches", period: "2004-2011", note: "replaced by PY by L.N. 110 of 2011 s.6(b)" }
@@ -341,7 +341,7 @@ series:
341
341
  for annotations. Unlike Cyprus, which at least publishes drawn
342
342
  specimens, Malta publishes neither a name nor a dimensioned drawing.
343
343
  The letterforms are therefore, on the face of the law, unconstrained.
344
- PRD-PLATES §6 posture: the render layer picks a free face and records
344
+ The plates spec §6 posture: the render layer picks a free face and records
345
345
  the substitution, because there is no statutory drawing to derive from.
346
346
  license: "n/a — nothing prescribed"
347
347
  rear_differs: false
@@ -367,7 +367,7 @@ series:
367
367
  STATING: the EU band did not arrive with that instrument but with L.N. 476
368
368
  of 2004 on 1 MAY 2004, Malta's EU accession day — so there was a
369
369
  seven-week window in which this exact format was issued WITHOUT the band.
370
- That is a genuine design difference and under PRD-PLATES §2.3 it would
370
+ That is a genuine design difference and under the plates spec §2.3 it would
371
371
  merit its own series, but `period` is modelled in INTEGER YEARS and both
372
372
  dates fall in 2004, so the two are indistinguishable in this schema and
373
373
  are recorded as one series with the sequence written into the sources
@@ -851,4 +851,4 @@ series:
851
851
  deserves a shape to match, clearly labelled recall-only. PRE-1952 MALTA IS
852
852
  NOT MODELLED: the Motor Vehicles Regulations 1948 and the calesse-era
853
853
  registrations that secondary sources mention for the 19th century are L4
854
- historical depth under PRD-PLATES §7 and no primary was consulted.
854
+ historical depth under the plates spec §7 and no primary was consulted.
data/data/plates/mx.yml CHANGED
@@ -1,4 +1,4 @@
1
- # plates/mx.yml — Mexico (PRD-PLATES gate L3).
1
+ # plates/mx.yml — Mexico (the plates spec gate L3).
2
2
  #
3
3
  # EVERY format, dimension, character-metric, alphabet and series-allocation
4
4
  # claim in this file comes from ONE primary instrument and its predecessor,
@@ -69,14 +69,14 @@
69
69
  # fix is a REPLACEMENT cycle (canje) whose phase differs per state; the
70
70
  # widely repeated "Mexican states redesign their plates every three years"
71
71
  # is the consequence, not the rule, and the artwork of a given state in a
72
- # given trienio is NOT modelled here (PRD-PLATES §2.5).
72
+ # given trienio is NOT modelled here (the plates spec §2.5).
73
73
  #
74
74
  # 4. THE HYPHENS ARE PHYSICAL. NOM Apéndice A, under every figure, verbatim:
75
75
  # "Las dimensiones de los guiones serán de 16 x 5.6." — the group separator
76
76
  # is a stamped 16 × 5.6 mm bar, not typography, and 5.1.4.3 says the figures
77
77
  # "contienen un guión o dos guiones de separación entre letras y dígitos".
78
78
  # Every regex here therefore spells the hyphen as a MANDATORY literal
79
- # (PRD-PLATES §2.6 rule 2: regexes are written in printed form). The
79
+ # (the plates spec §2.6 rule 2: regexes are written in printed form). The
80
80
  # five-character motorcycle formats print NO separator and carry none.
81
81
  #
82
82
  # 5. FRONT AND REAR DIFFER — BY A LETTER, NOT A COLOUR. NOM 5.3.5, verbatim:
@@ -189,7 +189,7 @@ common:
189
189
  figuras, distintivos o leyendas que dificulten su lectura."
190
190
  font_posture: >-
191
191
  The glyph shapes are STATUTORY DRAWINGS (figuras 36-39 of Apéndice A
192
- Normativo), not a named typeface — the same posture PRD-PLATES §6 records
192
+ Normativo), not a named typeface — the same posture the plates spec §6 records
193
193
  for the UK, Germany and Spain. No licensable font is mandated and none is
194
194
  recorded here.
195
195
  source: "https://www.dof.gob.mx/nota_detalle.php?codigo=5442476&fecha=24/06/2016 # 5.1.3.1, 5.1.3.2, 5.1.4.3 (guiones 16 x 5.6)"
@@ -1004,7 +1004,7 @@ series:
1004
1004
  notes: >-
1005
1005
  AMBULANCIAS and BOMBEROS. Tabla C gives them two rows and ONE order
1006
1006
  (AA-000-AA), and Apéndice A gives them ONE figure (34), so under
1007
- PRD-PLATES §2.3 they are one series with a shared format and design rather
1007
+ the plates spec §2.3 they are one series with a shared format and design rather
1008
1008
  than two — the color-only-variant rule applied to a leyenda-only variant.
1009
1009
 
1010
1010
  - id: mx-civil-protection-2016
@@ -1036,7 +1036,7 @@ series:
1036
1036
  SISTEMA NACIONAL DE PROTECCIÓN CIVIL — the ONLY series in this file whose
1037
1037
  colours the NOM prescribes, which is why it is the only one carrying a
1038
1038
  background hex. The hexes are `observed` renderings of the NAMED Pantone
1039
- references (200 C red, Cool Gray 10 grey): PRD-PLATES §6 lets us build to a
1039
+ references (200 C red, Cool Gray 10 grey): The plates spec §6 lets us build to a
1040
1040
  colour standard and forbids reproducing it, and Pantone's own coordinates
1041
1041
  are a licensed dataset, so the numbered colour is cited and the hex is
1042
1042
  marked observed — the same posture plates/gb.yml takes for BS AU 145e.
@@ -1103,7 +1103,7 @@ series:
1103
1103
  notes: >-
1104
1104
  TRASLADO NACIONAL — the federal transfer/ferry plate for moving an
1105
1105
  unregistered vehicle across the country, which is Mexico's `temporary`
1106
- class in the PRD vocabulary sense (short-validity, movement-only). Distinct
1106
+ class in the spec vocabulary sense (short-validity, movement-only). Distinct
1107
1107
  from the state DEMOSTRACIÓN plates above, which are bound to a dealer
1108
1108
  rather than to a journey.
1109
1109
 
data/data/plates/my.yml CHANGED
@@ -1,4 +1,4 @@
1
- # plates/my.yml — Malaysia (PRD-PLATES gate L3). DRAFT for verification.
1
+ # plates/my.yml — Malaysia (the plates spec gate L3). DRAFT for verification.
2
2
  #
3
3
  # ===========================================================================
4
4
  # THE CENTRAL SOURCING FACT, STATED FIRST BECAUSE IT SHAPES EVERY ENTRY
@@ -80,7 +80,7 @@
80
80
  # the CURRENT format of every Malaysian state in one pass. Its readings are
81
81
  # recorded per row in plates/_decode/my-index-marks.yml and drive the two
82
82
  # standard series below. This is as close to a registration-corpus test
83
- # (PRD-PLATES §5.2) as a jurisdiction without open registry data can get.
83
+ # (the plates spec §5.2) as a jurisdiction without open registry data can get.
84
84
  #
85
85
  # WHAT THE SNAPSHOT PROVES, mechanically, from 28 successful readings:
86
86
  # * TWO live arrangements coexist nationwide, not one.
@@ -112,7 +112,7 @@
112
112
  # THE EXCLUDED LETTERS — AND A FOLKLORE CORRECTION THIS FILE MAKES EXPLICITLY
113
113
  # ===========================================================================
114
114
  # The rule Malaysia actually runs, per both the English and Malay Wikipedia
115
- # articles (the mandatory finding aid, PRD-PLATES §4) and CONSISTENT WITH every
115
+ # articles (the mandatory finding aid, the plates spec §4) and CONSISTENT WITH every
116
116
  # one of the 28 live JPJ readings above: the letters I and O are never issued
117
117
  # (confusable with 1 and 0) and Z is reserved for military vehicles. The Malay
118
118
  # article states it directly — "Huruf I dan O ditiadakan daripada urutan abjad
@@ -130,7 +130,7 @@
130
130
  # NOTE THE ONE PLACE THE EXCLUSION IS NOT VISIBLE: it is an ISSUING rule, not a
131
131
  # spelling rule, so `format.regex` cannot carry it (the lint generates "I" and
132
132
  # "O" from `pattern`). It lives in `format.regex_strict` on every series that
133
- # has one, which is exactly what PRD-PLATES §2.7 built the twin for.
133
+ # has one, which is exactly what the plates spec §2.7 built the twin for.
134
134
  #
135
135
  # ===========================================================================
136
136
  # WHAT IS DELIBERATELY NOT MODELLED
@@ -142,7 +142,7 @@
142
142
  # (FA, FB, FC, FD, FE, FF, FFF, FG, FH), university series, NGO series, event
143
143
  # series, the national "MALAYSIA 1-9999" series. Each is an ORDINARY
144
144
  # registration whose mark was auctioned; none has its own format, design or
145
- # period. PRD-PLATES §2.5 excludes exactly this, so the programme is recorded
145
+ # period. The plates spec §2.5 excludes exactly this, so the programme is recorded
146
146
  # once, as a class note on my-standard-prefix (see `special_series` in
147
147
  # `common`), and no series is authored for any individual release. The one
148
148
  # exception is `my-jpjeplate-ev-2024`, which is a genuinely different PLATE
@@ -188,7 +188,7 @@ instrument:
188
188
  Chambers. Unless and until reprinted pursuant to the powers of the
189
189
  Commissioner of Law Revision under subsection 14(1) of the Revision of Laws
190
190
  Act 1968 [Act 1], this text is NOT AN AUTHENTIC TEXT." Recorded because
191
- PRD-PLATES §5.3 says the authority is the authority: this is the authority's
191
+ the plates spec §5.3 says the authority is the authority: this is the authority's
192
192
  own updated text, published by the authority, flagged by the authority as
193
193
  non-authentic. Every quotation above and below is from it.
194
194
  sections_used:
@@ -222,7 +222,7 @@ charset_defaults:
222
222
  the Malay- and English-language Wikipedia articles and is CONSISTENT WITH
223
223
  all 28 live JPJ readings of 3 August 2026, none of which contains I, O or
224
224
  Z. Tagged `secondary-wikipedia` wherever it is load-bearing, per
225
- PRD-PLATES §4.
225
+ the plates spec §4.
226
226
  digits_note: >-
227
227
  "No leading zeroes permitted" is stated by the English Wikipedia article
228
228
  and is corroborated by every one of the 28 live JPJ readings (859, 1644,
@@ -283,9 +283,9 @@ common:
283
283
  "MALAYSIA 1-9999" series, and well over a hundred others) is an ORDINARY
284
284
  registration under my-standard-prefix or my-standard-suffix whose mark
285
285
  was auctioned rather than allocated in sequence. No separate series is
286
- authored for any of them (PRD-PLATES §2.5); a consumer wanting the
286
+ authored for any of them (the plates spec §2.5); a consumer wanting the
287
287
  programme index should treat it as the Malaysian analogue of a US
288
- specialty-plate index, which PRD-PLATES puts at L2/L4.
288
+ specialty-plate index, which the plates spec puts at L2/L4.
289
289
  statutory_basis: "Act 333 s. 66(1)(jj), verbatim: 'to prescribe the procedures relating to tender of registration numbers'"
290
290
  source: "https://lom.agc.gov.my/ilims/upload/portal/akta/outputaktap/1871744_BI/Act%20333_Final_15%20Oct%202023%20(25.3.24).pdf # s. 66(1)(jj). Accessed 2026-08-02"
291
291
 
@@ -325,7 +325,7 @@ series:
325
325
  NO SEPARATOR GLYPH is prescribed by anything located, and Malaysian
326
326
  plates print a GAP between the letter group and the number group. The
327
327
  space in `pattern` is that gap; every regex accepts it as optional and
328
- also accepts a hyphen, per PRD-PLATES §2.8 (a separator-only class).
328
+ also accepts a hyphen, per the plates spec §2.8 (a separator-only class).
329
329
  design:
330
330
  background: { color: "#000000", finish: non-reflective, hex_basis: observed }
331
331
  foreground: "#FFFFFF"
@@ -342,7 +342,7 @@ series:
342
342
  Arial Bold with Calisto MT Italic and Franklin Gothic Bold as
343
343
  alternates; the diagram is an image and was not read in this pass.
344
344
  Charles Wright and FE-Schrift are both common in the wild and both are
345
- aftermarket choices, not standards. PRD-PLATES §6's schematic-render
345
+ aftermarket choices, not standards. The plates spec §6's schematic-render
346
346
  fallback applies.
347
347
  region_encoding: "plates/_decode/my-index-marks.yml"
348
348
  sources:
@@ -386,7 +386,7 @@ series:
386
386
  Sarawak to prevent collision with the division prefixes; that
387
387
  refinement is NOT carried in regex_strict because the live sample
388
388
  contains a Q suffix (SU 7665 Q, Keningau) which contradicts it.
389
- Recorded as a disagreement, not averaged (PRD-PLATES §5.3).
389
+ Recorded as a disagreement, not averaged (the plates spec §5.3).
390
390
  separator_note: "two printed gaps, both optional in the regexes and both spelled as separator-only classes"
391
391
  design:
392
392
  background: { color: "#000000", finish: non-reflective, hex_basis: observed }
@@ -405,7 +405,7 @@ series:
405
405
  Sabah and Sarawak arrangement, it is now also Johor's (the J…J series),
406
406
  Langkawi's (KV) and was Kuala Lumpur's during the W run-out before the V
407
407
  series began. Separate series from my-standard-prefix because the FORMAT
408
- differs (PRD-PLATES §2.3); same statutory frame, same colours, same
408
+ differs (the plates spec §2.3); same statutory frame, same colours, same
409
409
  period, and both are live — which is why both carry distinct notes and
410
410
  the lint's overlap rule is satisfied honestly rather than by accident.
411
411
  period.start 1987 is the Act in force, not the arrangement's origin; the
@@ -465,7 +465,7 @@ series:
465
465
  pattern_note: >-
466
466
  Country code, rank/serial number, and the literal DC. The two numeric
467
467
  groups and the DC marking are printed as three groups; the country-code
468
- group's own table is a RECORDED GAP (PRD-PLATES puts diplomatic decode
468
+ group's own table is a RECORDED GAP (the plates spec puts diplomatic decode
469
469
  tables at L4) and \d{1,3} is a practical bound, not a sourced one. The
470
470
  RANK BLOCK of the second group IS sourced, in detail, and is carried in
471
471
  plates/_decode/my-index-marks.yml.
@@ -473,7 +473,7 @@ series:
473
473
  - { name: country_code, note: "the sending state's code — table not located, recorded gap" }
474
474
  - { name: rank_number, note: "allocated by diplomatic rank: 01 head of mission's official car, 02/03 head of mission's personal car, 04 deputy chief of mission / deputy high commissioner / minister, 05 minister counsellor, 06-09 counsellor, 10-19 first secretary, 20-29 second secretary, 30-39 third secretary, 40-59 attaché (including military advisers, trade representatives and defence advisers), 60-99 a diplomat's SECOND duty-free car, 101 and above vehicles registered in the name of the mission — Wisma Putra, Protocol Department, paras 6.4, 6.6, 6.8" }
475
475
  - { name: marking, value: "DC", note: "Diplomatic Corps" }
476
- separator_note: "printed as three groups; the regexes spell the gap as an emitted separator class per PRD-PLATES §2.8"
476
+ separator_note: "printed as three groups; the regexes spell the gap as an emitted separator class per the plates spec §2.8"
477
477
  design:
478
478
  background: { color: "#CC0000", finish: non-reflective, hex_basis: observed }
479
479
  foreground: "#FFFFFF"
@@ -495,7 +495,7 @@ series:
495
495
  or 'UN' respectively." So RED means a PERSON (an accredited diplomat);
496
496
  BLACK means an INSTITUTION (the mission, the consular corps, a UN
497
497
  office). Colour-only variant of the same format and period, hence a
498
- sub-entry per PRD-PLATES §2.3.
498
+ sub-entry per the plates spec §2.3.
499
499
  sources:
500
500
  - "https://web.archive.org/web/20140714163606/http://www.kln.gov.my/web/guest/diplomat # Ministry of Foreign Affairs Malaysia, Protocol > Foreign Missions > Diplomat, 'MOTOR VEHICLES' para 6.9 'Colour Identification Of Registration Plate'. Accessed 2026-08-02"
501
501
  region_encoding: "plates/_decode/my-index-marks.yml"
@@ -651,7 +651,7 @@ series:
651
651
  note: >-
652
652
  The MARK is an ordinary Malaysian registration — this is a different
653
653
  PLATE, not a different numbering system, which is exactly the
654
- PRD-PLATES §2.3 test for a series of its own (design differs, format
654
+ the plates spec §2.3 test for a series of its own (design differs, format
655
655
  and period do not).
656
656
  design:
657
657
  plate_note: >-
@@ -660,7 +660,7 @@ series:
660
660
  background: { color: "#FFFFFF", finish: retroreflective, hex_basis: observed }
661
661
  foreground: "#000000"
662
662
  band: { side: left, color: "#009000", content: "green stripe + Jalur Gemilang (national flag) + the international distinguishing code MAL", hex_basis: observed }
663
- emblem: { present: true, rendered: placeholder, note: "the national flag is a state emblem — PRD-PLATES §3 placeholder rule applies, artwork not reproduced" }
663
+ emblem: { present: true, rendered: placeholder, note: "the national flag is a state emblem — the plates spec §3 placeholder rule applies, artwork not reproduced" }
664
664
  rear_differs: false
665
665
  features: >-
666
666
  Embossed characters in FE-Schrift on a white retroreflective ground with