homeos/tests/Feature
HomeOS Bootstrap a4489ac7d3 feat(addons): Ring backend bridge — ring-mqtt ingest, cloud devices, badge
Second half of the Ring integration (handoff §12):
- RingTopics + RingNormalizer (H3): parse ring/<loc>/<cat>/<id>/<entity>/state,
  map ding/motion/contact/lock/battery; bridge status topic drives the addon
  connection state. Defensive — unknown topics are ignored, never junk devices.
- IngestRingMessage (H4, single ingest path): auto-creates cloud-flagged Ring
  devices on first sight, monotonic race-safe state upsert, broadcasts live.
  Gated on the addon being installed (cached) so a still-running bridge can't
  recreate devices after uninstall.
- Shared AppliesDeviceState trait: the monotonic upsert now lives once, used by
  both Shelly and Ring ingest (MqttTest guards the Shelly path).
- Listener subscribes ring/#. ring-mqtt container (opt-in `addons` compose
  profile) as least-privileged `ring` MQTT user (ACL: ring/# only); gen-passwd
  seeds the account. "Cloud" badge on Ring devices in list + detail.

11 Ring tests (topic parse, normalizer, bridge status, auto-create, install
gate, unknown-topic guard, out-of-order). Suite 40 green; 12/12 tabs clean.
Live-verified: real MQTT ring/.../ding + info publish → cloud device created
with ding + battery state. (Real Ring OAuth login runs in the ring-mqtt sidecar.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 01:58:40 +02:00
..
AddonTest.php feat(addons): installable integrations framework + Ring connect UI 2026-07-18 01:47:02 +02:00
AuthTest.php Phase 1: bootstrap — Docker stack, Laravel 13, design system, auth 2026-07-17 21:06:20 +02:00
AutomationTest.php fix(automations): honor conditions + atomic cooldown claim (R15) 2026-07-18 01:15:22 +02:00
HomeTest.php Fix R15: per-device MQTT ACLs, monotonic presence, real-device online semantics 2026-07-17 23:08:29 +02:00
MqttTest.php Tablet control panel: touch tiles, drag-reorder, light colour modal 2026-07-18 00:58:24 +02:00
RingIngestTest.php feat(addons): Ring backend bridge — ring-mqtt ingest, cloud devices, badge 2026-07-18 01:58:40 +02:00