Iter 33. Closes ADR-122 AC3 ("Motion score published at ≥ 1 Hz on
ruview/<node_id>/bfld/motion/state during sustained occupancy") with
an end-to-end test through the BfldPipelineHandle worker thread.
Empirically measured on this Windows host: 10 inputs spaced 100ms
apart → 9.96 Hz motion-publish rate (10× the AC3 floor).
Added (in v2/crates/wifi-densepose-bfld/tests/motion_publish_rate.rs):
- motion_publish_rate_meets_one_hz_under_sustained_input
Drives the handle with 10 sends at 100ms intervals, measures the
wall-clock elapsed time, asserts motion count >= 10 AND rate
(count / elapsed) >= 1.00 Hz. Prints throughput to stderr.
- motion_values_track_input_motion_values
Pins iter-21's payload-encoding contract: motion values [0.10,
0.25, 0.50, 0.75, 0.95] flow through as "{:.6}" strings without
quantization drift.
- motion_topic_never_appears_for_class_below_anonymous_publishing
Defense in depth: Restricted (class 3) STILL publishes motion
(sensing data) but NOT identity_risk. Pins the two-layer
privacy contract: motion is operator-visible at all classes ≥ 2,
identity_risk is class-2-only.
Helper: motion_messages(&[TopicMessage]) -> Vec<&TopicMessage>
Filters the capture log to the motion topic so the assertions
aren't sensitive to the surrounding presence/count/confidence
topics also being published.
ADR-124 status (iter step 0 sibling check):
- docs/adr/ADR-124-rvagent-mcp-ruvector-npm-integration.md present
unchanged at 431 lines (sibling agent's SENSE-BRIDGE ADR). Scope
remains orthogonal to BFLD core; no overlap with this iter.
ACs progressed:
- ADR-122 AC3 closed: motion publish rate measured at 9.96 Hz
through the handle worker — 10× the documented floor. Provides
the runtime witness HA needs to trust the live state-topic stream.
- ADR-122 AC1 reinforced from the rate-test side: 10 inputs → 10
motion topics, none lost in the worker queue.
- ADR-118 §1.5 reinforced again: Restricted strips identity_risk
but not motion (motion is sensing, not identity).
Test config:
- cargo test --no-default-features → 72 passed
- cargo test → 224 passed (221 + 3)
Out of scope (next iter target):
- GitHub Actions workflow with mosquitto Docker (lifts iters 24+29
from skip-mode in CI). All remaining unmet ACs at this point
either require external resources (KIT BFId dataset for ADR-121,
Pi5/Nexmon hardware for ADR-123) or CI infra.
Co-Authored-By: claude-flow <ruv@ruv.net>