Files
svc-core/docs/GUIDELINES.md
mikkeli cce9711119
Rust (L4T) / Clippy, test, build, glibc (push) Failing after 1s
/ crosscheck (push) Successful in 1s
obd-poller over the K-line via the Bluetooth ELM327; gnss publisher; elm_connected
obd-poller drops its CAN socket: the Z27AG answers OBD-II only on ISO 9141-2.
It holds a raw RFCOMM link to the ELM (no pairing, no root), fixes the protocol
(ATSP3) so nothing probes CAN, publishes the obd_* signals, and releases the
adapter after a minute of ECU silence so it can sleep.
gnss: gpsd's fix as yukart/gnss/<signal>. orin-status: elm_connected from BlueZ.
One native deploy script (deploy-native.sh BIN) behind the per-service ones;
/etc/default/yukart-elm holds the adapter's address.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz
2026-10-13 22:57:30 +09:00

1.8 KiB

type
type
guidelines

Core services guidelines

1. One writer: obd-poller, and never on CAN

  • obd-poller is the only thing that sends anything to the car (project-yukart decisions 3 and 30): OBD-II requests, one at a time, on the K-line through the Bluetooth ELM327, with the ELM's protocol fixed so it never probes CAN.
  • Nothing in svc-core transmits on CAN. The recorder and the decoder only read; anything else that writes to can_pcan is a bug.
  • can_pcan still acknowledges frames like any scan tool (listen-only off since 2026-10-12, left so as harmless). Going back is one line in orin-nano-env-setup's /etc/default/can-can_pcan.

2. Capture never waits

  • A frame missed is gone. Producers hand frames to the writer without blocking; what doesn't fit is counted, recorded as an event, and never silently lost.
  • Capture reads SocketCAN and gpsd directly. It does not depend on the broker, a display, or any other service being up.

3. Every failure leaves complete files

  • Append, flush and fdatasync about once a second. Power loss costs at most the last second.
  • Replace files by write-temp, fsync, rename. Never rewrite in place.
  • Anything found half-done at startup is repaired or marked, not deleted.

4. Raw stays raw

  • Recordings are candump -L text plus the gpsd JSON as received, so can-utils, canplayer and anything already written against the first captures keep working.
  • Decoding happens downstream of the recording, never instead of it.

5. Time is evidence, not truth

  • The car unit's clock can boot stale and be stepped mid-drive. Record what is needed to correct it later (sync state, monotonic time, observed steps, GNSS time beside local receive time) rather than trusting it.

6. To be added