# CAR-TOOLING BUILD REPORT — 2026-10-22

**Commission:** the owner, 2026-10-22 ~17:34 EDT — *"Let's build it. $0 spend and we build it how we want,"* with the clarifying word a minute later that he will not buy the commercial tools, having had them. **Spend: $0.** The Smith built; the Crew Chief owns; the Assayer graded every stage independently before any of it is called done (both verdict files below). **Architecture:** fully separate tools per make, sharing only paper — the charter, the fences, the session-format spec, and Team Garage as the destination for records. Everything buildable without the cars is built; the build **stops at the owner gates** rather than pretending past them.

**Governing records:** charter `~/workspace/crew-chief-desk/car-tooling-program-charter-2026-10-22.md` · briefs `~/workspace/crew-chief-desk/car-tooling-briefs-2026-10-22.md` · Assayer verdicts `~/workspace/assayer-desk/bmw-line-verdict-2026-10-22.md` + `~/workspace/assayer-desk/audi-line-verdict-2026-10-22.md` · Bench record `bench/BENCH-ADDENDUM-2026-10-22.md`.

---

## Stage 0 — THE BENCH (adopted, verified, graded) — DONE

Built by the sibling Bench run and adopted as this commission's stage 0; this build re-verified it rather than rebuilding it.

- **Suites, independently re-run during this build:** Audi leg **23/23** (exit 0, twice) · BMW leg **7/7** with the probe at **13/13** (manifest + adversarial cases).
- **Assayer record (of record in the addendum):** A1, A2, A4, B1–B4 PROVEN · C1, C2 graded FLAWED in the full report and **fixed the same day** (C1: the BMW SessionLog aligned to the session spec's letter — see the episode note below; C2: record-wording corrections), corrections propagated as CRE-20261022-BENCORR · B5's happy path stands **UNPROVEN** by design (the synthetic AIF block fails the SGBD's own check loudly; the accuracy of that label is itself the graded claim) · measured BMW simulation limits stand as printed (the sim path does not validate DS2 checksums, response addresses, or answer completeness).
- **A3 — FLAWED → fixed → PROVEN (this build closed the owed spot re-grade).** The original flaw: the replay path filed a hash-consistent crafted recording carrying same-length garbage in format-bound fields. The Smith's hardening (exact-length + printable-ASCII + per-DID format rules — F18B 8-digit date, F189 4-digit version, F190 17-char VIN alphabet) was re-graded by the Assayer on fresh, self-produced evidence: 4 regression tests by name pass; the composite attack (F18B → `XXXXXXXX`, trailer hash repaired) is refused at the CLI, **exit 1**; a second, grader-invented off-alphabet-VIN variant is likewise refused; controls replay clean. **Amendment appended to the addendum 2026-10-22: A3 is PROVEN.** Residue, still printed: free-string DIDs carry no content oracle, and the recording hash is integrity, not authentication.
- **Episode note (honesty):** mid-build, the BMW Bench's sources and DLL were briefly skewed (2 tests failing) — the cause was the Bench line's own C1 correction landing at 21:41 UTC, DLL rebuilt 21:42 UTC. This build's Assayer confirmed the pair consistent (an independent rebuild from current sources produces byte-identical output) and the suite green. Recorded so the transient is explained, not smoothed.

### The Bench's physical line (queued, gated, not started)

- **Queue:** `bench/BENCH-QUEUE.md` — the owner's **dead SQ5 ECU and dead SQ5 transmission**, offered as experiment hardware. The dead ECU is the Bench's ideal first physical citizen (zero risk to any car). Queued in order: teardown documentation → connector/pinout mapping against public sources → a current-limited power-up attempt on documented interfaces. **Gates: the owner's hands + the world-scan run's identification sheet.** Fences unchanged — identification and bench craft, never protected-firmware extraction; the dead unit's immobilizer material is not read, dead or alive.
- **Identification update (owner video, 2026-10-22 ~18:02 EDT):** the dead ECU is label-identified as a **Bosch MG1CS002** — VW AG 06M 907 309 L · Bosch 0 261 S19 898 · HW H10 · Made in Germany. The Audi leg's target ECU family is physically settled. **Provenance vs the car: UNKNOWN** (label date 19-08-23 post-dates the car — the unit may be a replacement; what the car carries awaits the in-car read). The world-scan run owns the identification record.
- **Adapter record:** `bench/ADAPTER-RECORD.md` — **MHD WiFi adapter: CLEAN DOOR** (BMW) · **OBDeleven: WALL** (keyed peripheral of its vendor's account/cloud system; no house path through it) · **034Motorsport flashing dongle: entitlement pipe — identification/documentation only** (flashing stays 034's app + his purchased entitlement; no house client). The 034 dongle's generation is UNKNOWN and joins the owner ID-sheet list, settled by the same photo pass.

## Stage 1 — BMW PHASE-1 ID KIT v0.1.0 — **Assayer verdict: PROVEN (all groups)**

`~/workspace/crew-chief-desk/bmw-id-kit/` — the read-only 540i identification tool, self-contained: its own vendored EdiabasLib at the pinned commit (byte-identical to the Bench's copy, diff-verified; GPL-3.0 stays inside this tool's house), its own C# harness, its own simulation corpus, its own session writer implementing the format spec independently.

- **Proven:** suite **8/8** · a scripted session (group/variant identification, SGBD INFO, DME IDENT, FS_LESEN, AIF_LESEN) emitting six hash-sealed recordings + the identification snapshot to `exports/` — the Assayer's own spec-only verifier confirms **6/6 fresh and 6/6 shipped recordings seal-valid**, tamper control detected · snapshot carries the synthetic-fixture disclaimer on its face.
- **No-write, proven three ways:** static scan (zero write-class job names outside refusal/test contexts) · dynamic (a non-allowlist job refused **exit 4, before transport**, at both the Python layer and the compiled harness; per-SGBD allowlist enforced) · CLI surface (`identify / run-job / verify-recording / version` — no write verb) · the harness hard-wires simulation and refuses (exit 3) without it — no real-interface mode exists.
- **Honest limit:** it runs on EdiabasLib's **TEST SGBDs** — the 540i's own SGBD data is BMW-proprietary and not held; the AIF read fails loud on the synthetic block (happy path UNPROVEN, inherited from the Bench).
- **Next step waits on owner gate G-2** — the first real-car Phase-1 session (owner present, battery maintainer on). Nothing pretends past it.

## Stage 2 — SQ5 DASH v0.1 (off-car build) — **Assayer verdict: PROVEN (all groups)**

`~/workspace/crew-chief-desk/sq5-dash/` — the read-only diagnostic dash: the Dash's own UDS client (only service 0x22 exists in it), its own virtual-ECU fixture, its own session writer; a phone-form single-page UI that works offline, sessions sinking to `exports/` as a sealed `.jsonl` + a summary JSON in the charter's session format (the Team Garage-bound record class).

- **Channel map** (`CHANNEL-MAP.md`, every channel graded with evidence): **23 VERIFIED-REACHABLE** (the 12-DID ISO 14229 identification set + 11 live channels on standard SAE J1979 PIDs — RPM, load, MAP, lambda, throttle, timing, IAT, coolant, rail pressure, speed, oil temp) · **1 DERIVED** (boost = MAP − barometric) · **3 PLAUSIBLE** (VAG measuring values with no generic assignment) · **4 NOT-EXPOSED rows covering the 9 DS1-class channels** (per-cylinder knock sums, port-injection duty, DI-reduction %, ethanol %) — printed as not exposed on diagnostic interfaces, with DS1-ecosystem material as the evidence. The Assayer spot-checked the grades against the sources and found none overstated. **Printed limit, in the map, the README, and the UI: aggregate diagnostic polling ≈5–20 samples/sec — NOT a DS1-equivalent logger.**
- **Proven:** suite **14/14** incl. all six adversarial scenarios (timeout, short payload, wrong SID, wrong DID echo, negative response, garbage) — each asserts channels flag ERROR/STALE loudly with failures written into the recording, never a silent freeze on last values · no-write proven statically (no write-service code outside the gate's refusal list) and dynamically (bus-tap: only 3-byte 0x22 requests on the wire; the fixture ECU refuses writes with NRC 0x11) · an export's seal independently recomputed and matched · VERSION 0.1.0 single-sourced into the UI footer, the API, and the session header.
- **Next steps wait on owner gates G-1** (the 2-minute SQ5 software-train read — MHI2 vs MST2 still UNKNOWN — for the real DID/train picture) **and G-2** (the first real-car session).

## Stage 3 — PHASE-2 MACHINERY (bench-proven only) — **Assayer verdict: PROVEN (both engines, one flaw found, repaired, re-graded)**

The backup/restore engines for both makes, proven end-to-end on fixtures so the real-car proofs, when the gates open, are ceremonies rather than experiments. **No write path is pointed at a real car under this commission.**

- **bmw-save v0.1.0** (`~/workspace/crew-chief-desk/bmw-save/`) — record-set bundles with SHA-256 manifests; contains **no transport code at all** (static-scan proven). Cycle proven: save → change-in-sim (scratch only) → verify fails on the changed state → restore → verify passes, fixture original byte-untouched. Tampered and incomplete backups refuse restore loudly; outside-path targets refuse.
  - **Flaw F-1, printed in full because the loop is the point:** the Assayer's grade found the `save` command's bundle destination missing the scratch-only check its sibling commands carry — `save --bundle fixtures` overwrote the pristine fixture and falsified the README's "fixture originals can never be mutated" invariant (group 3e graded FLAWED; the line could not be called done). **Repaired the same day** (the check added at the one site; a full write-path audit found no second hole; a regression test added — suite now **7/7**), and **re-graded PROVEN by the Assayer** on fresh evidence (the original attack plus symlink, subdirectory, and traversal variants — all refused, fixture hash identical before and after). The amendment is appended to the verdict file; the original FLAWED text stands unedited above it.
- **sq5-save v0.1.0** (`~/workspace/crew-chief-desk/sq5-save/`) — a writable **test-double ECU confined to this project** (stated as such in its code and README; shares no code with the Dash's read path) and the engine around it: save → change-in-sim → restore → verify, **5/5**. Its distinctive guard is proven, not asserted: before any write, the engine must read a **fixture-marker DID only the double carries** — pointed at a marker-less read-only responder, all writes refuse (CLI exit 2, zero writes seen), and the code order shows the guard runs *before* the write calls, not after.
- **Next steps wait on the gates:** the BMW real-car save→change→restore→verify ceremony behind **G-2 + the Phase-2 session gate**; the Audi real-car proof (needle-sweep class) behind **G-1 + the Phase-1 real-car gate** (Brief A2 §A2-5).

## Not built — by the charter's gates, named so the boundary is visible

- **Phase 3 (both coders)** — no write path toward a real car is designed, let alone built, until Phase 1 has run on the real cars and a performed, verified Phase-2 cycle exists per make (charter §3, Brief B Phase-3 gate). The briefs' catalogs (15 BMW changes, 21 Audi changes, risk-classed, two-source rule) wait as paper.
- **Phase 4 (skins)** — per-make, behind Phase 3 and (Audi) the G-1 train read.
- **Team Garage app changes** — not commissioned; the tools' session exports in each tool's `exports/` are the Team Garage-bound record class until the owner commissions the app change. No `car-app/` code was touched.
- **One flag for the owner, surfaced not assumed:** the charter's §7 doctrine text was filed as a PROPOSAL; this build ran on the owner's direct commission of 2026-10-22, which is the operative word. §7's formal ruling remains the owner's to give.

## The owner gates, in one place

| Gate | What it is | What it unlocks |
|---|---|---|
| **G-1** | SQ5 MMI Version Information read (~2 min at the car: version + MU version lines) | The Audi branch's real train/DID picture; sq5-save's real Phase-2 path |
| **G-2** | First real-car sessions (owner present, battery maintainer on, charter §4 disciplines) | BMW Phase-1 ID on the 540i; the Dash's Phase-1 read proof; then the Phase-2 ceremonies |
| **ID sheet** | The photo pass (034 dongle generation; dead-hardware labels) | The Bench physical queue: teardown documentation → pinout mapping → current-limited power-up of the dead MG1CS002 |

**Distribution:** this report is dispatched to all 39 network destinations as BLD-20261022 (sender's record: Crew Chief DISPATCH-LOG). Each tool carries its own README, INSTRUCTIONS.md, JOURNAL.md with worth-it ledger, and VERSION — the house build law in full, at **$0**.
