homeos/app
HomeOS Bootstrap 449533b60d fix: preserve raw input value on role/invert change; strict isOnline (R15)
Codex R15 on the previous fix:
- [P2] reclassifyInput derived the raw input level from the already-displayed
  (inverted) contact state, so toggling inversion twice didn't restore the
  original. The ingest + device page now carry the raw `on` inside the contact
  state, so flipping role/inversion is fully reversible. +1 round-trip test.
- Latent: Device::isOnline() could return null (null demo, no last_seen) and
  break the type hint / views. Now returns a strict bool.

Suite 58 green, 12/12 tabs clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 09:03:00 +02:00
..
Console/Commands feat(addons): Ring backend bridge — ring-mqtt ingest, cloud devices, badge 2026-07-18 01:58:40 +02:00
Events Phase 5: UniFi presence — poll, person↔client mapping 2026-07-18 00:31:32 +02:00
Http/Controllers Phase 1: bootstrap — Docker stack, Laravel 13, design system, auth 2026-07-17 21:06:20 +02:00
Jobs fix: preserve raw input value on role/invert change; strict isOnline (R15) 2026-07-18 09:03:00 +02:00
Listeners feat(automations): trigger→condition→action engine with cooldown + dry-run 2026-07-18 01:11:02 +02:00
Livewire fix: preserve raw input value on role/invert change; strict isOnline (R15) 2026-07-18 09:03:00 +02:00
Models fix: preserve raw input value on role/invert change; strict isOnline (R15) 2026-07-18 09:03:00 +02:00
Providers feat(automations): trigger→condition→action engine with cooldown + dry-run 2026-07-18 01:11:02 +02:00
Services feat(panel): make tiles actually control + entity naming + reorder feedback 2026-07-18 08:37:17 +02:00
Support fix: harden MQTT sharing + input roles + dedup (adversarial review) 2026-07-18 08:59:12 +02:00