Record self-mocking design: services mock themselves, no separate stubs
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013kj58Jugkic783b8ZrtTVZ
This commit is contained in:
@@ -55,3 +55,27 @@ to be a separate process, that becomes a refactor rather than a rewrite.
|
||||
| Downstream to app | simplex push stream, lossy-tolerant | app connects |
|
||||
| Upstream from app | simplex request/response, acknowledged | app |
|
||||
| Route requests onward | request/response, HTTP | this service |
|
||||
|
||||
## Self-mocking
|
||||
|
||||
The input side sits behind an interface. The real implementation subscribes to the
|
||||
bus; the mock synthesises vehicle state. Everything from aggregation outward — the
|
||||
boundary protocol, serialisation, per-client queues, reconnection — is identical in
|
||||
both, so there is no second implementation of the contract to drift.
|
||||
|
||||
Same shape as `svc-nav`'s routing provider. A service that can produce its own
|
||||
inputs needs no external stub, and `tool-mock` deliberately does not contain one.
|
||||
|
||||
This is what makes `app-flutter` developable against a single binary with no
|
||||
broker, no fixtures and no Jetson.
|
||||
|
||||
Two rules constrain it:
|
||||
|
||||
- **The mock must degrade.** Missing, stale and implausible signals are the normal
|
||||
state in a car. A mock that always emits a complete, fresh, plausible dataset
|
||||
trains the app to assume something false, and the assumption breaks on the first
|
||||
real drive.
|
||||
- **Mock data must be visibly mock downstream.** Synthetic vehicle readings
|
||||
indistinguishable from real ones, on a display in a moving car, is a safety
|
||||
problem rather than a tidiness one. The mode is off by default and flagged in the
|
||||
stream, not merely in a log line at startup.
|
||||
|
||||
Reference in New Issue
Block a user