Parent
Architecture review (2026-06-21) — report at /var/folders/kl/cxpcwl9j0yd22tzsgxzyv0qm0000gn/T/architecture-review-1782017816.html. Top recommendation from the cross-repo comparison (Satellite, Dish-Android). This issue is the parent of the next five ("VhciBackend pub", "HotplugMonitor wire/delete", "Discovery TXT seam", "Ownership discipline", "Android base classes") — those cannot land coherently until the source of truth is fixed.
What to build
Adopt CONTEXT.md as the single owner of module-ownership claims and module-responsibility boundaries. Every other doc (CLAUDE.md, ARCHITECTURE.md, PROTOCOL.md, ROADMAP.md, docs/PERFORMANCE.md, docs/SETUP.md) is verified against it, not the other way around. Walk the 12+ known divergences and for each pick: (a) build the code to match the doc, or (b) rewrite the doc to match the code. Either direction is correct — the agent chooses per case.
Add a "module ownership" section to CONTEXT.md that names one owner per concern:
- ConfigOwner:
Server::app_state (the one place that reads and writes the merged config)
- MetricsOwner:
Server::app_state (the one place that increments; do not delete dead statics until this lands)
- VhciBackendOwner:
Client (the one place that constructs a VhciBackend)
- HotplugOwner:
Server (the one place that constructs a HotplugMonitor) — or "deleted as fiction" if wire/delete goes the other way
- DiscoveryTxtOwner:
usbip-core::discovery_txt (the one place that encodes and decodes)
- AndroidStateOwner, AndroidComposerOwner, AndroidControllerOwner: each names a single Kotlin class once Slice 6 lands
Acceptance criteria
Blocked by
None — can start immediately. Blocks the next five slices.
Parent
Architecture review (2026-06-21) — report at
/var/folders/kl/cxpcwl9j0yd22tzsgxzyv0qm0000gn/T/architecture-review-1782017816.html. Top recommendation from the cross-repo comparison (Satellite, Dish-Android). This issue is the parent of the next five ("VhciBackend pub", "HotplugMonitor wire/delete", "Discovery TXT seam", "Ownership discipline", "Android base classes") — those cannot land coherently until the source of truth is fixed.What to build
Adopt CONTEXT.md as the single owner of module-ownership claims and module-responsibility boundaries. Every other doc (CLAUDE.md, ARCHITECTURE.md, PROTOCOL.md, ROADMAP.md, docs/PERFORMANCE.md, docs/SETUP.md) is verified against it, not the other way around. Walk the 12+ known divergences and for each pick: (a) build the code to match the doc, or (b) rewrite the doc to match the code. Either direction is correct — the agent chooses per case.
Add a "module ownership" section to CONTEXT.md that names one owner per concern:
Server::app_state(the one place that reads and writes the merged config)Server::app_state(the one place that increments; do not delete dead statics until this lands)Client(the one place that constructs aVhciBackend)Server(the one place that constructs aHotplugMonitor) — or "deleted as fiction" if wire/delete goes the other wayusbip-core::discovery_txt(the one place that encodes and decodes)Acceptance criteria
rusbdep) orrusbis moved to a feature-gated pathfind . -name '*.rs' -path '*/tests/*' | wc -l)handle_urb_loopmeasurementsdocs/adr/capturing the anti-patterns from the architecture review (UDP-only, REST-only topology, MSG_RUMBLE opcodes, Cemuhook DSU axis layout)cargo test --workspace --releaseandcargo clippy --workspace -- -D warningspass after every divergence fixBlocked by
None — can start immediately. Blocks the next five slices.