homeos/database/migrations
HomeOS Bootstrap 71b3028a8e fix: harden MQTT sharing + input roles + dedup (adversarial review)
Multi-agent review (5 confirmed) + Codex found real issues in the rework:

- [P1 security] Shared `shelly` ACL had readwrite +/rpc, so a compromised
  device could inject Switch.Set into ANY other device's <prefix>/rpc. Now
  read-only on +/rpc (receive own commands) + write only homeos/rpc (reply).
  Broker-verified: a shelly publish to victim/rpc is denied; laravel's is not.
- [P2 security] `+` wildcard reaches reserved homeos/ring namespaces → bogus
  device. Ingest now rejects RESERVED_PREFIXES (homeos/ring/$SYS).
- [P2 security] Unbounded auto-onboarding = DB-exhaustion DoS. Added a device
  cap (homeos.mqtt.max_devices, default 250).
- [P2 correctness] Every Shelly `input` became a phantom window contact (wall
  switches shown as windows, possibly inverted). `input` is now a generic
  sensor; the user PROMOTES specific inputs to window/door contacts on the
  device page (invert-aware), stored in config->input_roles and applied in the
  ingest — this is the "assign contacts" flow the user asked for.
- [P3 ux] Motion pill read `active`; producer writes `on`. Now reads both.
- [P1 migrations] Dedup computed survivor keys once; 3+ duplicates could
  collide on unique(device_id,key). Re-query per duplicate (ring + mqtt_prefix).

+9 tests (reserved prefix, cap, input generic/promoted/inverted, demo echo).
Live-verified: input published → onboarded as input → assigned window contact
via UI → appears on Fenster page, persists across messages. Suite 57 green,
12/12 tabs clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-18 08:59:12 +02:00
..
0001_01_01_000000_create_users_table.php Phase 1: bootstrap — Docker stack, Laravel 13, design system, auth 2026-07-17 21:06:20 +02:00
0001_01_01_000001_create_cache_table.php Phase 1: bootstrap — Docker stack, Laravel 13, design system, auth 2026-07-17 21:06:20 +02:00
0001_01_01_000002_create_jobs_table.php Phase 1: bootstrap — Docker stack, Laravel 13, design system, auth 2026-07-17 21:06:20 +02:00
2026_07_17_201001_create_rooms_table.php Home dashboard + Host tab: device state & warnings, server status split out 2026-07-17 21:20:38 +02:00
2026_07_17_201002_create_devices_table.php Home dashboard + Host tab: device state & warnings, server status split out 2026-07-17 21:20:38 +02:00
2026_07_17_201003_create_entities_table.php Home dashboard + Host tab: device state & warnings, server status split out 2026-07-17 21:20:38 +02:00
2026_07_17_201004_create_device_states_table.php Home dashboard + Host tab: device state & warnings, server status split out 2026-07-17 21:20:38 +02:00
2026_07_17_202001_create_commands_table.php Phase 3: MQTT ingest — Mosquitto bus, Shelly driver, live device state 2026-07-17 22:51:14 +02:00
2026_07_17_203001_add_observed_at_to_device_states.php Fix R15: reject out-of-order MQTT state updates (concurrency) 2026-07-17 23:01:32 +02:00
2026_07_17_203002_add_demo_to_devices.php Fix R15: per-device MQTT ACLs, monotonic presence, real-device online semantics 2026-07-17 23:08:29 +02:00
2026_07_18_000001_create_persons_discovery_automations_tables.php All sidebar tabs are real pages (zero console errors) 2026-07-18 00:16:16 +02:00
2026_07_18_010001_add_mac_to_persons.php Phase 5: UniFi presence — poll, person↔client mapping 2026-07-18 00:31:32 +02:00
2026_07_18_020001_create_metrics_table.php Charts: Chart.js MQTT + host traffic on the Host page 2026-07-18 00:40:32 +02:00
2026_07_18_030001_add_panel_to_entities.php Tablet control panel: touch tiles, drag-reorder, light colour modal 2026-07-18 00:58:24 +02:00
2026_07_18_040001_add_dry_run_to_automations.php feat(automations): trigger→condition→action engine with cooldown + dry-run 2026-07-18 01:11:02 +02:00
2026_07_18_050001_create_addons_table.php feat(addons): installable integrations framework + Ring connect UI 2026-07-18 01:47:02 +02:00
2026_07_18_060001_add_ring_id_unique_index_to_devices.php fix: harden MQTT sharing + input roles + dedup (adversarial review) 2026-07-18 08:59:12 +02:00
2026_07_18_070001_add_mqtt_prefix_unique_index_to_devices.php fix: harden MQTT sharing + input roles + dedup (adversarial review) 2026-07-18 08:59:12 +02:00