ADR 0001: Layered architecture with an exchangeable transport

Status: accepted (2026-10-07)

Context

The tool should work with USB, Bluetooth and later CAN adapters and be testable without a car. python-OBD is still before 1.0, its API may change.

Decision

Layers transport → protocol → services → ui. The transport layer is a typing.Protocol with open(), close(), write() and read_until(). Third-party libraries are wrapped behind own interfaces.

Consequences

Tests run against a fake transport or the ELM327 emulator. Switching from python-OBD to an own driver only affects the protocol layer.