Methodology & Provenance — GM RPO Code Reference
This document records how the RPO reference in docs/rpo/ was
assembled, so the authority of any individual code can be judged and
defended. It is the basis for canonical relevance: a claim's weight is
a function of its source tier and how many independent sources confirm it,
both of which are tracked per code.
Compiled 2026-07-12. Scope: classic-era GM vehicles, model years 1960–1982, seven divisions (Chevrolet passenger cars, Corvette, Chevrolet/GMC trucks, Pontiac, Oldsmobile, Buick, Cadillac).
1. Source tiers (canonical hierarchy)
Every code traces to a source in one of these tiers. Tier is what makes a code canonical vs. corroborating vs. provisional.
| Tier | Definition | Examples | Canonical weight |
|---|---|---|---|
| T1 — Factory primary | GM's own documents: Vehicle Information Kits / dealer order guides, factory optional-equipment tables | GM Heritage Archive kit PDFs (OCR'd, see §4); factory billing records via PHS | Authoritative. A T1 code is canonical on its own. |
| T2 — Records-based enthusiast | Compilations built directly from GM production records or factory paperwork by recognized marque authorities | Camaro Research Group (camaros.org); chevellestuff.net per-year matrix; NCRS |
Near-authoritative. Treated as canonical when it agrees with or substitutes for T1. |
| T3 — Community compilation | Club sites, registries, and enthusiast databases without a stated factory-records chain | nastyz28.com, novaresource.org, 442.com/mirrors, 78ta.com, TeamBuick, CorvSport; Corvette Action Center (T2 until G2-f, 2026-10-01: its production pages name no GM-records source) |
Corroborating. Confirms a code but does not establish it alone. |
| T4 — General reference | Encyclopaedic or editorial context | Wikipedia, magazine articles (Hemmings, Hagerty, MotorTrend) | Context only. Never a sole source for a code. |
The per-code Confidence column encodes the outcome of applying this hierarchy:
confirmed— 2+ independent sources agree, or one T1/T2 source carries it. This is the canonical set.single-source— only one source, and it is T3/T4. Provisional; a candidate for promotion when a factory kit (§4) is mined.disputed— sources conflict. Both readings are recorded verbatim with their sources so the disagreement is visible, never silently resolved.
2. Pipeline overview

3. Phase B — Division research
Seven independent research agents ran in parallel, one per division grouping. Each was briefed with the same schema and the same standing rules:
- Use live web search + page fetch. Where a fetch was blocked (bot walls, expired certs, dead domains), fall back to raw HTTP or the Wayback Machine, and record the workaround rather than dropping the source.
- Cross-check every code against at least two independent sources where possible; set the Confidence label honestly.
- On conflict, record
disputedwith both readings — never pick silently. - List every source URL used, at both the division and per-model level.
- Flag coverage gaps explicitly rather than papering over them.
Output: 36 markdown documents (≈5,300 code rows). Each per-model doc
carries YAML frontmatter (division, model, model_aliases, years)
and #year-YYYY anchors so a decoded vehicle links to its exact section.
Provenance is preserved inside each document — every doc ends with a
Sources section listing what was actually used for that model, and the
master bibliography (SOURCES.md) aggregates all of them with access
notes (e.g. 442.com is dead and was read via its classicoldsmobile.com
mirror; AutomotiveMileposts resolves only through the Wayback Machine).
4. Phase C — Adversarial source verification
The sources themselves were then audited, because a compilation is only as canonical as the sources it rests on. A 103-agent research workflow extracted falsifiable claims about each candidate source and subjected each to three independent verification votes; a claim needed 2 of 3 refutes to be killed.
Result: 25 claims adjudicated — 21 confirmed, 4 refuted. This is what
fixed the source tiers in §1. Notable outcomes, all recorded in
VERIFICATION.md:
- Confirmed the GM Heritage Archive as the T1 anchor, and that it
relocated from
gmheritagecenter.comtogm.com/heritage/archive(906 kits). Confirmed CRG and chevellestuff as T2 via code-by-code spot checks. - Refuted CorvSport's claim of complete per-year Corvette coverage (failed 0–3) — demoting it to T3 corroboration, not a standalone source.
- Refuted the claim that PHS covers 1960 — it is 1961–1986 only.
- Established that the Heritage Archive holds zero Pontiac, Buick, or GMC kits, which is why those divisions have no T1 backing and remain the structurally weakest (Buick/GMC have no verified archival source online at all; GM directs Buick records to the Alfred P. Sloan Museum).
5. Phase D — Factory-primary OCR (T1 backfill)
The Heritage kits are image-only PDF scans with no text layer, so they had to be OCR'd to become machine-usable. This converts the reference from "best available enthusiast compilation" to "factory-verified" wherever a kit exists.
Corpus. The 906-kit index was filtered to model years 1960–1982, yielding 282 classic-era kits: Chevrolet cars 240, Chevrolet trucks 23, Cadillac 15, Oldsmobile 4. (Pontiac/Buick/GMC have none — see §4.)
Tooling. No OCR binaries were present on the machine, so a purpose-built
extractor (pdfocr, Swift + Apple Vision framework) was compiled locally.
Key settings, chosen for this document type:
- Pages rendered at 220 DPI to grayscale, then OCR'd.
- Recognition level accurate.
- Language correction disabled — critical, so option codes like
W-30,FE2,Z28are not "corrected" into dictionary words. - Output is plain text with
===== PAGE N =====markers, so any extracted code cites back to a page in the original kit.
Pipeline (run-ocr.sh, resumable, 4-way parallel): download kit →
OCR → write .txt → delete the PDF (only text is retained). Priority order
matched the gaps: Oldsmobile, then trucks, then Cadillac, then Chevrolet
cars. Downloads retry 3×; a kit whose .txt already exists is skipped, so
the run is safely restartable.
Validation. Pilot on the 1970 Oldsmobile 442 kit (339 pages, 38 MB) → 65 s, factory optional-equipment tables legible (W-30, W-31, FE2, C60 and their descriptions verified against the page images).
Storage. Extracted text lives in docs/heritage-ocr/<brand>/<kit>.txt
— deliberately outside docs/rpo/ to keep raw machine output separate
from curated markdown. It is citation backing (T1 evidence), not part of the
published reference.
Status: OCR complete — 282 of 282 kits extracted (Chevrolet cars 240, trucks 23, Cadillac 15, Oldsmobile 4), ~28,700 pages, 41 MB of text. Zero unrecovered failures; three transient gm.com download drops were retried successfully. Quality spot-checked across brands: 1965 truck order-guide codes (V43, K46, T60, P13, V05, Z61), 1963 Cadillac optional-equipment text, and 1969 Camaro codes (Z28, Z11, Z22, Z27, L78, L48, L35, JL8, D80) all extract cleanly.
5b. Phase E — OCR mining (T1 enrichment)
The OCR corpus is only evidence until it is cross-referenced into the reference. Phase E does that cross-referencing: five agents (one per kit-backed scope — Chevrolet cars, Corvette, Chevrolet/GMC trucks, Cadillac, Oldsmobile) worked their division docs code-by-code against the matching kit text. Pontiac, Buick, and car-side GMC have no kits (§4), so they are untouched by this phase and keep their T2/T3 confidence.
Per-code rule, applied conservatively to avoid importing OCR noise:
- A code is acted on only when the kit text shows the code token and a
plausible matching description on/near the same line; the page is read
from the nearest preceding
===== PAGE N =====marker. - Promote — a
single-sourcecode the kit confirms becomesconfirmed. - Resolve — a
disputedcode the kit settles becomesconfirmedwith a(factory kit resolves: …)note. - Fill — a factory code absent from the doc for a kit-covered
year/model is added as a new
confirmedrow. - Garbled OCR, or any code that can't be matched to a description and page, is left unchanged. No code or page number is ever fabricated.
Citation convention. Every row touched in Phase E carries a factory citation token in its Models/Notes cell:
<span class="doc-cite">⛭ GM Heritage — <brand>/<kit-file>.txt p.N</span>
HK = Heritage Kit. This points at the exact OCR file and page, which in
turn corresponds to a page in the original factory PDF — so a confirmed
code can be audited all the way back to the factory document. Each doc
touched also gains a ### Factory kits (T1) subsection in its Sources
listing the kit files used.
Outcome. Five agents (Chevrolet cars, Corvette, Chevrolet/GMC trucks,
Cadillac, Oldsmobile) enriched 14 documents with 2,514 factory <span class="doc-cite">⛭ GM Heritage — …</span>
citations keyed to specific kit pages. Aggregate effect:
- 130+
single-sourcerows promoted toconfirmed— heaviest in Cadillac 1960–66 (whole line-wide tables, e.g. all 24 rows of 1960) and Chevrolet cars (67) and Corvette. - ~19
disputedrows resolved against factory text, including (but see the correction below): 1966 Corvette L72 (5,258 built @ 425 hp; the 450→425 change was to the rating), 1972 Corvette ZR2 (kit flags "Not to be merchandised" — never sold), the 1971–72 optional axle code (ZQ9, not ZQ1), truck N33/N34 (doc had the Sports-Styled/Comfortilt steering wheels swapped), truck tinted-glass codes (A09/A11, not A01/A02), and 1964 Cadillac filler plate (F, not FP). - ~100 new
confirmedfactory rows, concentrated in the previously empty 1960–66 Chevrolet truck order-guide gap (rebuilt from one 21-row table to ~90 factory-cited rows) and Oldsmobile 442. - 1 new dispute surfaced: the 1968 Cadillac shoulder-belt codes (kit reads Z = rear / H = front-convertible, contradicting the doc) — flagged for a second source rather than overturned on a single OCR read.
Conservatism held throughout: homoglyph misreads (O/0, I/1, S/5) and SAE spec-page labels were excluded, ambiguous candidates skipped, and codes with no kit support (e.g. truck K05) downgraded — the pass removed unsupported confidence as well as adding it.
Correction (S2 and G2-b, 2026-10-01). Not every kit page this pass cited is a GM page:
- the Corvette Black Book and Camaro White Book spreads bound into many kits are third-party;
- two cited pages (1967 Corvette p.57, 1968 p.137) are blank; the book pages next to them were meant.
Their 308 citations were re-pointed to a GM page of the same kit (226),
dropped where the row had another GM citation (2), or removed with the row
kept at confirmed (80). Figures taken from the books are credited to them
in the notes. Of the disputes the pass resolved on those pages:
- six are
disputedagain (Corvette 1966 L72, 1970 U69, 1974 C60, 1980 U81 and UN3, 1981 MM4); - 1975 J50 is settled by GM's price schedule at $55.00, not the book's $50.00;
- 1975 Camaro Z86 is confirmed by GM's price schedule.
Row by row: docs/rpo/CLASSIC-HK-EDITS.tsv.
6. Using this for canonical relevance
To judge or defend any code in this reference:
- Find the code's row; read its Confidence and the doc's Sources.
- Map each source to its tier (§1). A
confirmedcode backed by T1 or T2 is canonical. Asingle-sourceT3 code is provisional. - For provisional or
disputedcodes, checkdocs/heritage-ocr/for the matching year/model kit — a factory table there is T1 and settles it. A row already carrying a<span class="doc-cite">⛭ GM Heritage — …</span>citation (Phase E, §5b) has been audited to that factory page. VERIFICATION.mdrecords which sources have been audited and how they voted;SOURCES.mdrecords where each source lives and how to reach it.
The chain for any claim is therefore: code row → confidence + named source → source tier → (if needed) factory kit page. Nothing in the reference is asserted without a traceable position in that chain.
7. Reproducibility & next round
The assembly is re-runnable. The division research briefs, the verification
workflow, and the OCR pipeline (run-ocr.sh + pdfocr.swift) are all
preserved, as are the Phase E mining briefs. Highest-value follow-ups, in
order:
Mine the OCR corpus into the division docs.Done — Phase E (§5b).- Recover Pontiac/Buick/GMC kits (if any) from Wayback captures of the old
gmheritagecenter.comsite — the current archive dropped those brands. These three divisions have no T1 backing until such kits are found. - Add NCRS as the per-year Corvette T2 source (replacing CorvSport's refuted completeness claim).
Modern era (1983–2027): factory-first
The modern era (1983 to model year 2027, where GM has published it) uses the same tiers (§1), confidence labels, standing rules (§3) and adversarial verification (§4) as the classic era. Only the order of the phases differs. The modern era has far more GM paperwork, so the factory evidence is built first, the sources are vetted second, and research then works from factory text, with enthusiast sources corroborating and filling gaps. The classic build ran the other way round (research, then OCR, then mining) because factory text was scarce. Design: docs/superpowers/specs/2026-10-01-modern-rpo-design.md.
Phases and gates
S0 → S1 → S2 → D → A → Q.
- S0 pilot: OCR toolchain, source probes, model inventory (
docs/modern-inventory.md). Ends at gate G1. - S1 factory evidence: OCR every post-1982 Heritage kit; capture the GM Fleet Order Guide, the Wayback copies of its legacy site, GM Upfitter RPO lists and archival order-guide scans.
- S2 source verification: three independent votes on every falsifiable claim about every candidate source, and the tier map in
VERIFICATION.md. Ends at gate G2. - D research waves: Wave 1 covers docs with factory evidence; Wave 2 the rest.
- A citation audit.
- Q final quality check.
Each gate is the user's decision. A phase does not start before its gate passes.
Corpora and the [FD] citation
docs/heritage-ocr/: OCR text of GM Heritage kits, classic and post-1982 (Chevrolet and Chevrolet trucks 1983–2007), cited as<span class="doc-cite">⛭ GM Heritage — <brand>/<file>.txt p.N</span>.docs/factory-docs/<division>/: text of other GM factory documents, cited as<span class="doc-cite">⛭ GM factory document — <division>/<file>.txt p.N</span>, with the same grammar as[HK](;separates groups; severalp.Nallowed). Files are named<year>-<division>-<model>-<doctype>.txt, where<year>is the document's own model year (for Upfitter manuals, read from the PDF name —MY25-…,22_…,…_2017_en_US— or, when the name states none, the earliest model-year page that lists it). Each page starts===== PAGE N =====, or===== PAGE N: <url> =====for web captures, so every page maps back to its URL.docs/factory-docs/MANIFEST.md: one row per file, with title, type, original URL, retrieval date, SHA-256 of the original, provenance and the S2 claims that verified it. Provenance is one of:gm-hosted: fetched from a GM site;archival-verified: a third-party copy of a GM document whose source passed S2;archival-pending: collected, not yet verified.
- Build rule: an
[FD]citation fails the build if its file is missing, its page does not exist, or its provenance isarchival-pending.factory-verifiedmeansconfirmedplus at least one[HK]or[FD]citation. - Never committed: PDFs; the originals live outside the repo (
car_reference/GM/, with anINDEX.tsvof URLs and checksums). The repo is private, and the site publishes codes, descriptions and citations, never document text.
Tools
tools/ocr/:pdfocr.swift(Apple Vision; deterministic reading order,--pages),run-ocr.sh(resumable batch, 4 in parallel, failures inSKIPPED.tsv) andkit-pages.mjs, which classifies every kit page intodocs/heritage-ocr/KIT-PAGES.tsv.tools/capture/: a small tested library (page format, HTML to text, manifest rows, polite fetch with back-off, skip log, resumable runner) and one CLI per source:upfitter.mjs;fog.mjs(Playwright, through the site's own interface);wayback.mjs(Wayback copies of the legacy guide; set-aside captures listed inwayback-set-aside.tsv);archive-item.mjs.
tools/inventory/inventory.mjs: inventory format checks, the evidence map (docs/research-briefs/evidence-map.tsv, then corrected by hand where names do not match, with a note per row) and NICB page lookup.tools/audit/:hk-pages.mjsfinds[HK]citations to third-party, empty or missing pages;hk-proposals.mjsproposes a fix for each.
tools/verify/:claims.mjsparsesS2-CLAIMS.md;tally.mjscounts votes: two refutes kill a claim, two confirms stand it, anything else is split.
- Voting:
docs/research-briefs/s2-workflow.jsruns the votes (three agents per claim, no shared context), withs2-vote.mdas the voter brief.
Capture rules (G1 decisions, 2026-10-01)
- D1a: the live Fleet Order Guide is captured through its normal web interface only, at human pace (≥10 s between page loads). Never call its API, never reuse its token, and cite GM.
- D1b: Wayback copies of the legacy guide enter as
archival-pendingand becomearchival-verifiedonly through S2. They did, on claims WB-1–3. - D2: suspect classic
[HK]citations are audited in S2, but classic docs are only ever changed with the user's approval (docs/rpo/CLASSIC-HK-PROPOSALS.md). - Politeness:
- gmfleetorderguide.com and gmupfitter.com: ≥10 s between requests (
Crawl-delay: 10); - archive.org: ≥5 s;
- gm.saturn.team and saturnarchive.com: ≥10 s (G2-d);
- gm.com kit downloads: at most 4 in parallel.
- gmfleetorderguide.com and gmupfitter.com: ≥10 s between requests (
- Back-off: HTTP 429 waits 10, then 20, then 40 minutes before a skip is logged; network errors and 5xx retry after 5, 15 and 45 s.
- Agents (S2 votes, D, A, Q): an agent checks GM documents against the repo's captures first (
docs/factory-docs/,docs/heritage-ocr/) and makes a live check only when the claim needs one. The pacing rules apply to the site, not to each agent: a workflow runs at most one agent at a time on gmfleetorderguide.com or gmupfitter.com. Agents never open the guide's API host (eog-api…gm.com) or GM's legacyNASApppages (which answer 429). In S2 the three voters of a claim ran together and broke this (report §8). Since G2-h,.claude/settings.jsondenies WebFetch on the API host and on gmfleetorderguide.com. The live guide is a JavaScript app WebFetch cannot read, so this costs nothing and blocks theNASApppages. Browser and shell access are not covered, so the rule above still binds them. - Stop conditions: a login wall, a CAPTCHA or terms that forbid automated access stop the capture and go to the user.
- No silent drops: every skip is logged.
Coverage gap: model years 2010 to 2013
Factory-document coverage is thin for model years 2010 to 2013, and the reference says so rather than fill it with weaker sources. The reason is the document supply, not the research:
- GM's service RPO code lists in the archive end with model year 2009. The service-manual mirror we use has pages for 2010 but no RPO list for that year.
- GM's fleet order guides on the Wayback Machine begin in earnest with model year 2014; they hold one capture each for 2012 and 2013.
- GM Upfitter's 2010 to 2013 body-builder electrical manuals for pickups and vans (2011 onward) carry no RPO code list.
- The order guides that GM Authority hosts for these years are limited to the 2012 Buick Verano; its other hosted guides are for 2014 and later.
What this means for a reader: about two dozen vehicle documents have no codes for some or all of 2010 to 2013 (for example the 2007 to 2014 Silverado, Tahoe and Suburban, the Corvette C6 and the 2009 to 2017 Traverse), and where a row does reach those years it usually rests on a single non-factory source and is graded accordingly. An absent code for those years is not evidence that the option did not exist. A decision to fill the gap from web articles was considered and declined (2026-11-07), because every resulting row would be single-source.
Which kit pages count as factory evidence
Several Camaro and Corvette Heritage kits bind in pages from third-party books: the Camaro White Book and the Corvette Black Book (Michael Bruce Associates). Those pages carry production quantities, QTY and RETAIL columns, "FACTS" sections, editorial notes and mail-order forms. They are not GM documents, so a citation to them is not factory evidence. kit-pages.mjs marks such pages (and blank ones) in KIT-PAGES.tsv. That is a heuristic, checked in S2: it was corrected once for the Black Book year spread (claim HK-4) and then confirmed (HK-5). An [HK] citation must not point at a third-party, empty or missing page; hk-pages.mjs reports any that do. The S2 audit of the classic docs found 308 such citations; the fixes are proposals for the user's decision.