Releases
v2.2.0
Compare
Sorry, something went wrong.
No results found
2.2.0 (2026-05-18)
✨ Features
🐛 Bug fixes
flow-chart: record RPM when firmware omits frzHealth.temps (#593 ) (1155e9c )
hardware: classify real Pod 5 sensor labels as Pod 5, not Pod 3 (#550 ) (31c7fa8 )
homekit: auto-rotate stranded identities + switch mDNS default to ciao (#578 ) (2a94725 ), closes #566
homekit: post-PR-566 follow-ups — orphan cleanup, wipe-stability docs, transitioning flag (#571 ) (34e5c8d )
homekit: rotate AccessoryPairingID on unpair so iOS isn't stranded (#566 ) (286a570 ), closes #1801 #2089 #3378
install: install sp-* CLI tools before starting service (#547 ) (89bf098 )
occupancy: repair calibrator RAW path; movement-based HomeKit sensor; density-gate chart (#584 ) (f5cf772 ), closes #9
schedule: wake/bedtime inputs persist by rebasing curve points (#595 ) (197b6b4 )
sp-update: biometrics-archiver helper exit code triggered silent OTA rollback (#588 ) (f2bbdb3 ), closes #586 #587
sp-update: run biometrics-archiver install on OTA upgrades (#576 ) (#579 ) (59eb278 ), closes #499
📝 Documentation
build: lead PR install block with sp-update; explain each path (#585 ) (6e8f67b ), closes #584 #584
shrink walkthrough gifs and drop pod-5 side-panel video (#596 ) (72ba3d3 )
🧪 Tests
api: cover export/archive route handler (#560 ) (34b9f55 )
biometrics: cover getVitalsBaseline mean/SD and edge cases (#598 ) (6281941 )
components: cover Schedule/TimeInput (#565 ) (431c90a )
hardware,scheduler: cover instance singletons (#564 ) (bb1dede )
hardware: cover dacTransport error/timeout branches (#563 ) (b75145c )
hooks: cover untested custom hooks (#553 ) (1f2f230 )
hooks: cover useSensorStream + useSchedule gaps (#561 ) (4f3d17f )
lib,hardware: cover formatTemp, determineTrend, dacMonitor knobs (#548 ) (efb6c48 )
lib: cover untested lib utils and url helper (#551 ) (39fbba1 )
lift coverage to 95%/87%/93%/96% across the JS suite (#569 ) (594260f )
scheduler: cover checkLiveness, broadcast payload shape, onTemp fallback (#549 ) (4a9b24b ), closes #543
scheduler: kill LED night-mode mutants + expand mutation matrix (#590 ) (8c85da8 ), closes #543 #543 #543
server: cover archivePush + settings router gaps (#562 ) (0ac836c )
server: cover biometrics router gaps (#558 ) (8f3e898 )
server: cover system router gaps (#559 ) (4066bd7 )
server: cover untested tRPC routers (#552 ) (ba23f9a )
sleep-stages: kill ~95 surviving Stryker mutants (#570 ) (c769719 )
streaming: cover normalizeFrame edge cases (#557 ) (2dded10 )
💚 CI
codecov: add pytest workflow + flag-scoped reports (#544 ) (6d855d0 )
mutation: fire Discord webhook on workflow_dispatch too (#546 ) (f44a5f8 )
mutation: fix scheduled runs and add reporting outputs (#541 ) (3d3b4ea )
mutation: match tracker by state:all and reopen if closed (#592 ) (743fbe4 ), closes #543 #543 #591 #591 #543
mutation: mutate whole repo across 10 area shards (#542 ) (b439cfd )
pin .git-info from github context in dev and main release workflows (#589 ) (a49b26f ), closes #586
🔧 Chores
deps: Update @ajayche/trpc-panel all non-major dependencies (#599 ) (02155db )
deps: Update @formatjs/intl-localematcher all non-major dependencies (#555 ) (21aee2c )
You can’t perform that action at this time.