Commit Graph

3 Commits

Author SHA1 Message Date
ruv 8fb7f16b13 chore(adr-115): expand witness bundle manifest — Matter + release + blueprints + Lovelace + ops
The witness-bundle generator's `ADR_FILES` array was snapshotted at
P10 (commit a4f56d2f1). Since then we've shipped:
- 4 Matter source files (P7+P8a: mod.rs, clusters.rs, bridge.rs,
   commissioning.rs)
- 4 ops/docs files (v0.7.0 release notes, benchmarks.md,
   validate-esp32-mqtt.sh, validate-ha-blueprints.py)
- 9 blueprint files (README + 8 YAMLs under examples/ha-blueprints/)
- 4 Lovelace files (README + 3 dashboard YAMLs)
- Also fixed a typo where the manifest pointed at
   `src/Cargo.toml` instead of the crate-level `Cargo.toml`.

After this commit the witness bundle's `manifest/source-hashes.txt`
covers **55 files** (was 28) — full source surface that ships with
v0.7.0. Bundle still self-verifies end-to-end via `bash VERIFY.sh`.

Local regen + verify on HEAD cb3ea9fbd:
  bash scripts/witness-adr-115.sh
  cd dist/witness-bundle-ADR115-*/ && bash VERIFY.sh
  → ADR-115 witness bundle: VERIFIED ✓

Refs #776, PR #778.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-23 15:30:01 -04:00
ruv fd1803d347 feat(adr-115): ESP32 hardware validation harness + witness integration
## scripts/validate-esp32-mqtt.sh — proof-of-life against real hardware

Standalone bash harness that asserts the full pipeline works
end-to-end with an attached ESP32-S3:

  ESP32-S3 CSI source → sensing-server → MQTT broker → captured
  topics → coverage matrix → report → exit 0 / non-zero

Five phases:
  1. Pre-flight (mosquitto-clients on PATH, cargo on PATH; starts an
     inline mosquitto if no broker reachable)
  2. Start sensing-server with --source esp32 --mqtt (uses the
     example binary that landed in P6)
  3. Capture mosquitto_sub traffic for --duration seconds
  4. Assert coverage matrix: 16 expected HA discovery topics (raw +
     semantic primitives) MUST appear; ≥1 state message MUST land
  5. Write a Markdown report under --report path

Exit codes:
  0 — all assertions passed
  2 — bad CLI args
  3 — missing prereq (mosquitto_pub, cargo)
  4 — no broker reachable AND no mosquitto binary to start one
  5 — sensing-server died on startup (log tail in report)
  6 — coverage assertions failed (details in report)

The script is **runnable without hardware** (will time out cleanly
with state-message-count=0); attach a real ESP32 to get a full PASS.
Default port: 127.0.0.1:11883 + 60 s capture window.

Usage:

    bash scripts/validate-esp32-mqtt.sh \
        --duration 60 \
        --broker 127.0.0.1:11883 \
        --source esp32 \
        --report dist/validation-esp32-<sha>.txt

## scripts/witness-adr-115.sh — integration

Two changes:

1. Always copy `docs/integrations/benchmarks.md` into the bundle's
   `bench-results/` dir so the bench numbers travel with the bundle
   even when `RUVIEW_RUN_BENCH=0` (the captured numbers from
   `ca10df7b0` are still load-bearing).
2. New `RUVIEW_RUN_ESP32=1` opt-in path that runs the validation
   harness above and bakes the report into the bundle as
   `esp32-validation.md`. Without the env var, a placeholder note
   explains how to opt in.

Both scripts pass `bash -n` syntax check on Windows Git Bash.

Refs #776, PR #778.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-23 14:50:52 -04:00
ruv a4f56d2f1b feat(adr-115): P6 + P10 — runnable wiring example + witness bundle (VERIFIED)
## P6 — Wiring example

`v2/crates/wifi-densepose-sensing-server/examples/mqtt_publisher.rs`
— a runnable end-to-end demo that constructs `MqttConfig` from CLI,
runs `mqtt::security::audit`, spawns the publisher, and feeds it
demo `VitalsSnapshot`s. Every line is the production-wiring blueprint
for `main.rs` when `args.mqtt` is true. Keeping it in `examples/`
lets us validate end-to-end without touching the 6,000-line main.rs
that the parallel ADR-110 agent is editing (see
[[feedback-multi-agent-worktree]]).

Run it:

    cargo run --release -p wifi-densepose-sensing-server \
        --features mqtt --example mqtt_publisher -- \
        --mqtt --mqtt-host 127.0.0.1

Compile-checked clean under `--features mqtt`.

## P10 — Witness bundle (VERIFIED)

`scripts/witness-adr-115.sh` — generator that captures everything a
reviewer needs to verify ADR-115 from the receiving end:

- ADR-115 design doc snapshot
- `integration-docs/` — home-assistant.md + semantic-primitives-metrics.md
- `test-results/lib-tests.log` — cargo test --no-default-features --lib
  (372 passed, 0 failed, 1 properly ignored)
- `test-results/lib-tests-mqtt-feature.log` — under --features mqtt
- `test-results/integration-tests.log` — opt-in via RUVIEW_RUN_INTEGRATION=1
- `bench-results/criterion-*.log` — opt-in via RUVIEW_RUN_BENCH=1
- `manifest/source-hashes.txt` — SHA-256 of every ADR-115 source file
- `manifest/git-head.txt` + `git-head-commit.txt` — exact source commit
- `VERIFY.sh` — self-verification script; recipient runs `bash VERIFY.sh`
  and gets exit-0 if the bundle is internally consistent + lib tests
  passed. Local self-test PASSED end-to-end on this commit.
- `WITNESS-LOG-115.md` — per-phase attestation matrix (P1–P10 status)

Bundle dropped at `dist/witness-bundle-ADR115-<sha>-<ts>.tar.gz`.

## Docs

- `docs/user-guide.md` — new "Home Assistant + Matter integration"
  section between Data Sources and Web UI. 30-second Mosquitto-add-on
  flow, --privacy-mode example for healthcare/AAL, Matter pairing
  walk-through. Links back to docs/integrations/home-assistant.md
  for the full reference.
- `CHANGELOG.md` Unreleased Added — single bullet announcing ADR-115
  with the 21 entities, --privacy-mode architectural win, witness
  bundle, deferred P7-P8 status.

## Phase status

| Phase | Status |
|---|---|
| P1 MQTT feature + CLI flags |  |
| P2 HA discovery emitter |  |
| P3 State + publisher |  |
| P4 Mosquitto integration |  (CI-gated) |
| P4.5 Semantic inference (HA-MIND) |  |
| P5 Docs |  |
| P6 Wiring example |  |
| P7-P8 Matter Bridge | ⏸ deferred to v0.7.1+ per §9.10 |
| P9 Security + bench |  |
| P10 Witness bundle |  |

Total lines: ~6000. Total tests: 372 passed. Witness: VERIFIED.

Refs #776.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-23 14:26:14 -04:00