--- type: plan status: active updated: 2026-09-05 --- # Initial plan ## What is defined The envelope, the topic namespace, and the standard OBD-II signals — the ones whose names, units and ranges are fixed by the standard rather than by the car. ## What is not **Z27AG-specific signals.** They do not exist until Phase 2 identifies them from observed traffic. They arrive as DBC entries plus registry rows with `source: "z27ag"`, one at a time as each is confirmed. **Composite payload shapes.** `gnss/fix`, `nav/guidance`, `nav/route` and `system/` have their fields named in `topics.json` but no JSON Schema yet. They get one when a publisher exists to constrain. ## Order 1. Schema validation available to all three languages — the Rust services, the Python fixtures and the Dart client must reject a malformed message identically, or the contract is decorative. 2. `gnss/fix` schema, driven by what `tool-mock` replays. 3. Z27AG signals, as Phase 2 confirms them. ## Consumers | Repo | Reads | |---|---| | `svc-core` | signals, envelope, DBC | | `svc-gw` | topics, envelope | | `svc-nav` | topics, envelope | | `app-flutter` | topics, envelope, signals (for display units) | | `tool-mock` | all of it — fixtures publish the real schema |