The bus is up: decision 4 accepted; orin-status publishes yukart/host/*

Also: std::process::Command breaks the cross-compile fallback (GLIBC_2.39).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz
This commit is contained in:
2026-10-12 16:37:11 +09:00
parent 66b7269f3c
commit b254bb2c55
4 changed files with 16 additions and 5 deletions
+4 -2
View File
@@ -35,6 +35,7 @@ The Orin runs headless: no local video out. The tablet app is the display.
| `decoder` | Raw frames → named signals via DBC | No |
| `recorder` | Persist raw + decoded sessions to disk; raw CAN and GNSS read directly, not via the bus (decision 25) | No |
| `telemetry-gw` | Serve external display clients | No |
| `orin-status` | The Orin's own health: temperatures, CPU/GPU load, memory, network links, UPS battery → `yukart/host/*` | No |
| `vision` | Camera capture (any V4L2 camera; in practice USB UVC, MJPEG), live view, software H.264 recording; on-device inference later. Repo `svc-vision`, Python (decision 29) | No |
Each ships as a systemd unit. The host-level prerequisites they depend on
@@ -60,7 +61,7 @@ traffic; discovered signals are recorded as a DBC rather than as code.
## Message bus
**Proposed: MQTT (mosquitto) on the Jetson.** Rationale:
**MQTT (mosquitto) on the Jetson**, listening on localhost only: displays reach the bus through `svc-gw`. Rationale:
- First-class client libraries on every display target — ESP32 (Arduino
`PubSubClient` / ESP-IDF) and Android (Paho) — which is the deciding factor.
@@ -74,6 +75,7 @@ traffic; discovered signals are recorded as a DBC rather than as code.
yukart/can/raw high-rate raw frames, not retained
yukart/vehicle/<signal> decoded signals (rpm, speed, coolant, …), retained
yukart/gnss/fix position/speed/time, retained
yukart/host/<signal> the Orin itself: temperatures, load, links, UPS battery, retained
yukart/system/<service> health and status, retained
yukart/nav/guidance next manoeuvre, distance, street name, retained
yukart/nav/route active route geometry, retained
@@ -350,7 +352,7 @@ rewriting the document.
| 1 | Separate services over a message bus, not one process | Accepted | 2026-08-14 |
| 2 | Displays are bus subscribers; no display-specific logic upstream | Accepted | 2026-08-14 |
| 3 | Listen-only sniffing + active OBD-II, single writer | Accepted | 2026-08-14 |
| 4 | MQTT as the bus | **Proposed** | 2026-08-14 |
| 4 | MQTT as the bus (raw CAN rate still to confirm) | Accepted | 2026-10-12 |
| 5 | Rust for on-Orin services, Python for off-car tooling, Dart for the display client. One exception: decision 29 | Accepted | 2026-09-04 |
| 21 | Two clocks per envelope; `monotonic` orders, `timestamp` references | Accepted | 2026-09-05 |
| 22 | `signals.json` is the single source for signal name and unit; both are derived, never authored twice | Accepted | 2026-09-05 |
+1 -1
View File
@@ -68,7 +68,7 @@ Ordered by what is lost if a tier is late.
|---|---|---|
| 0 | kernel modules, gpsd, network | Host layer; nothing of ours can precede it |
| 1 | `mosquitto`, `can-bridge`, `recorder` | **Data is lost if late.** Must reach ready fastest |
| 2 | `decoder`, `gnss`, `obd-poller` | Derive from tier 1; a late start loses nothing |
| 2 | `decoder`, `gnss`, `obd-poller`, `orin-status` | Derive from tier 1; a late start loses nothing |
| 3 | `svc-gw`, `svc-nav`, `svc-vision` | Serving; a display can wait |
| 4 | voice — ASR, TTS | Interactive; seconds late is harmless |
+7
View File
@@ -215,6 +215,13 @@ because everything above 2.30 comes from one event: glibc 2.34 merged
`libpthread` and `libdl` into `libc` and re-versioned the moved symbols. Stable,
but not guaranteed the way a native build is.
⚠ **`std::process::Command` breaks it.** Any binary that spawns a process links
`pidfd_spawnp` and `pidfd_getpid` (GLIBC_2.39) from the workstation's sysroot.
They are weak references, but the version requirement is not, so the car Orin
refuses to load the binary. `check-glibc.sh` catches it; such binaries build
natively (svc-core's `orin-status` runs `mmcli`, so its deploy script builds on
the development Orin).
### Writing style
Documents describe **what is and what will be**. They are not changelogs — git
+4 -2
View File
@@ -67,8 +67,10 @@ provides a cross-check for reverse-engineered ones.
## Phase 3 — Bus and contracts
- [ ] Stand up the broker; confirm MQTT holds up at real CAN rates (decision 4
in [ARCHITECTURE.md](ARCHITECTURE.md) is still *proposed*)
- [x] Stand up the broker, 2026-10-12: mosquitto 2.0.11 on the car Orin,
localhost only. First publisher `orin-status` (svc-core,
`yukart/host/*`); `svc-gw` subscribes and serves it to the tablet
- [ ] Confirm MQTT holds up at real CAN rates (`yukart/can/raw`)
- [ ] Freeze v1 of topic names and payload schemas
- [ ] `telemetry-gw` — external client access, including the serial bridge