v0.1.12
Bug fixes
MAD floor regression — The relative floor abs(median) * 1e-6 introduced in v0.1.10 caused genuine outliers to be silently skipped on sensors with large change values (e.g. median ≈ 1000 units/h, MAD = 0.0007, floor = 0.001 → spike hidden). Reverted to an absolute floor of 1e-9, which filters only floating-point noise without suppressing real variation.
nonzero_peers len-1 blindspot — When a spike was the sole non-zero reading in its time-of-day peer group, nonzero_peers had length 1 (truthy but insufficient), causing the candidate to be skipped via the len < 2 guard. Now requires len >= 2 before preferring the non-zero subset.
Date range TO field ignored — The TO date field was captured in the UI but never sent to the backend. The scan always ran to utcnow(). The FROM date was converted to an approximate lookback_days integer that drifted by up to 24 h per re-run. Both fields now send precise Unix timestamps (start_ts / end_ts); the WebSocket schema is updated accordingly.
Dead constant — Removed unused _5MIN_MS = 300_000.
Tests — Added two new regression tests and fixed a misleading comment.