Motivation
The taxonomy established by #102 and #103 is intentionally navigational: domain folders and namespaces are not general-purpose dependency boundaries. That remains the right default.
A few high-value seams nevertheless have bidirectional or misplaced dependencies that obscure ownership. Cleaning them up would make those areas easier to test and evolve without introducing additional assemblies or changing the namespace scheme.
Scope
Address the following seams as small, independent changes:
- Core
Devices ↔ Transport: remove unnecessary cross-direction references around FanatecWheelbase, FanatecTransport, and Col03FrameClassifier constants by placing shared contracts or protocol facts with a clear owner.
- Plugin
Devices ↔ UI.Devices: stop FanatecDevicesRegistry from directly constructing UI panel factories while UI also references device types; IDevicePanelFactory is the natural contract-placement seam.
- Updater HTTP ownership: move
GitHubHttpClient from the plugin’s Updates/ domain into FanaBridge.Updater, whose audit boundary should contain the code making update-related network requests. Its only plugin-specific input is currently a version string.
- Plugin composition root: move update orchestration out of
FanatecPlugin into an Updates/UpdateCoordinator, leaving the entry point responsible for composition and lifecycle delegation.
This is dependency-direction cleanup within the ratified taxonomy. It does not propose new assemblies, a new layering model, or changes to the folder-to-namespace convention. The items may land as separate PRs.
Acceptance criteria
Motivation
The taxonomy established by #102 and #103 is intentionally navigational: domain folders and namespaces are not general-purpose dependency boundaries. That remains the right default.
A few high-value seams nevertheless have bidirectional or misplaced dependencies that obscure ownership. Cleaning them up would make those areas easier to test and evolve without introducing additional assemblies or changing the namespace scheme.
Scope
Address the following seams as small, independent changes:
Devices ↔ Transport: remove unnecessary cross-direction references aroundFanatecWheelbase,FanatecTransport, andCol03FrameClassifierconstants by placing shared contracts or protocol facts with a clear owner.Devices ↔ UI.Devices: stopFanatecDevicesRegistryfrom directly constructing UI panel factories while UI also references device types;IDevicePanelFactoryis the natural contract-placement seam.GitHubHttpClientfrom the plugin’sUpdates/domain intoFanaBridge.Updater, whose audit boundary should contain the code making update-related network requests. Its only plugin-specific input is currently a version string.FanatecPlugininto anUpdates/UpdateCoordinator, leaving the entry point responsible for composition and lifecycle delegation.This is dependency-direction cleanup within the ratified taxonomy. It does not propose new assemblies, a new layering model, or changes to the folder-to-namespace convention. The items may land as separate PRs.
Acceptance criteria
UI.Devicespanel factories directly.IDevicePanelFactoryand related abstractions have an owner that permits one-way dependency flow between device registration and UI implementation.FanaBridge.Updater.Updates/UpdateCoordinatorand invoked byFanatecPlugin.