- Add create_collector() factory function that auto-detects platform and never raises
- Add LinuxWifiCollector.is_available() classmethod for probe-without-exception
- Refactor ws_server.py to use create_collector(), removing ~30 lines of duplicated platform detection
- Add 10 unit tests covering all platform paths and edge cases
- Add ADR-049 documenting the cross-platform detection and fallback chain
Docker, WSL, and headless users now get SimulatedCollector automatically
with a clear WARNING log instead of a RuntimeError crash.
Closes#148Closes#155
Co-Authored-By: claude-flow <ruv@ruv.net>
Add comprehensive test suite (36 tests) for the ADR-013 commodity sensing
module covering all components: RingBuffer, SimulatedCollector determinism,
feature extraction (time-domain stats, FFT spectral analysis, band power
isolation), CUSUM change-point detection, presence/motion classification,
and end-to-end CommodityBackend pipeline.
Fix feature_extractor.py: add missing _trim_to_window method that caused
AttributeError on the WifiSample extraction path, add post-trim sample
count guard, and handle constant-signal edge case in skewness/kurtosis
computation to prevent scipy RuntimeWarning.
https://claude.ai/code/session_01Ki7pvEZtJDvqJkmyn6B714