Skip to content

v2.2.0

Choose a tag to compare

@github-actions github-actions released this 18 May 19:58
· 58 commits to main since this release
e5c95c8

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)