Skip to content

ADR-125 APPLE-FABRIC: e2e RuView → HomePod via native HAP bridge (live tracking) #796

@ruvnet

Description

@ruvnet

Overview

Track end-to-end implementation of ADR-125 — RuView ↔ Apple Home native HAP bridge using real hardware, no mocks or simulations.

What this is

ADR-125 (codename APPLE-FABRIC) turns the Cognitum Seed into a discoverable HomeKit accessory on the LAN so an Apple HomePod — acting as Home Hub — discovers it via Bonjour/mDNS, and Apple Home / Siri / iPhone Home app become the operator UX for RuView's RF sensing. No connection is made to the HomePod; RuView advertises, HomePod discovers.

Architectural chain (target)

ESP32-C6 (real, COM12, ruv.net)
  └─ ADR-081 rv_feature_state UDP @ 5005 (60-byte packed, CRC32-validated)
     └─ sensing-server-equivalent ingestor (mac-mini, Tailscale)
        └─ BFLD PrivacyGate (ADR-118 §2.2 invariant I1; only class-2/3 cross)
           └─ Semantic event mapper (ADR-125 §2.1.d: Unknown Presence / Unexpected Occupancy / Unrecognized Activity Pattern)
              └─ HAP-1.1 bridge (mDNS-advertised, paired)
                 └─ HomePod (Home Hub) → Apple Home → iPhone Home app + Siri

Why the chain matters

  • ADR-116 §P7 left HAP/Matter as a matter = [] feature-flag stub. This issue closes that gap with the HAP-python sidecar reference impl named in ADR-125 §2.1.a (P2 will replace with Rust-native via the hap crate).
  • ADR-118 §2.2 structural invariant I1 holds at the HomeKit boundary: raw BFI never crosses. The BFLD PrivacyGate (class enum: Raw=0, Derived=1, Anonymous=2, Restricted=3) gates the HAP advertiser — only Anonymous and Restricted classes are HomeKit-eligible. Soul-Signature match probabilities and rf_signature_hash never appear on the wire.
  • ADR-125 §2.1.d: identity_risk_score is not wired to SecuritySystemCurrentState. Continuous probabilities become thresholded semantic events that read as ambient awareness, not threat detection. The naming is the contract.

Substrate (validated before iter 1)

Resource State
ESP32-C6 (Seeed MR60BHA2) COM12 (Windows) — running esp32-csi-node v0.6.9 (May 23 2026)
ESP32-S3 COM9 (Windows) — separate node, not used in this loop
ruv-mac-mini (Tailscale 100.84.53.55, LAN 192.168.1.166) macOS arm64; Python 3.13 venv with HAP-python; sink for C6 UDP stream
HomePod On ruv.net (same SSID as the C6); discovers HAP bridge via Home Hub
iPhone Home app Already paired with RuView Test Bridge 224DF9 (1 paired controller in ~/.ruview-hap/accessory.state)

Iter plan

Iter Increment Stop
1 Provision C6 + document substrate C6 streams UDP feature_state to mac-mini
2 Parse rv_feature_state wire format → HAP toggle iPhone Home app sees motion flip from real C6 presence_score
3 Insert BFLD PrivacyGate + semantic-event naming Class-2 enforced at HAP boundary; characteristic exposed as semantic
4 Wire Rust wifi-densepose-sensing-server as the canonical ingestor Replaces Python feature_state parser
5 Bundle in the multi-arch Docker image (Dockerfile.rust) docker run … hap-accessory --privacy-mode works on Apple Silicon
6 Witness + close Full chain green; CronDelete; close issue

Loop discipline

  • Branch: main. Each commit ≤250 LOC. Real hardware only (no mocks/sims).
  • Cron 4e1bb9f2 (every 5 min) fires the loop.
  • Every iter: branch check → pull → C6+HAP liveness → one increment → commit on green → push → progress comment on this issue.

Comments below track per-iter outcome with the commit SHA, the empirically-measured numbers, and the validated state of the chain.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions