fix(toolkit): integrate capture and device corrections for 0.9.2

Integrate reviewed source PRs #2201-#2223, #2225-#2231, #2235-#2240, #2242 and #2243 (firmware README hunks remain in #2247). Regenerate one package manifest after integration, validate native Windows test execution, bound MTK listener startup, support official C6 release bundles, and retain stronger release metadata gates.
This commit is contained in:
ruv committed 2026-10-12 11:49:52 -04:00
1 parent a71634ae8a
commit 3620abff12
109 files changed
+2784 -337

No files matched your search

+9
View File
@@ -65,6 +65,15 @@ def test_parse_discovery_topic_event() -> None:
assert out == ("event", "aabbccddeeff", "fall")
def test_parse_discovery_topic_accepts_default_server_node_id() -> None:
"""The sensing-server's node id defaults to its MQTT client id,
`wifi-densepose-<8 hex>`, with `-node<N>` appended per node."""
out = parse_discovery_topic(
"homeassistant/binary_sensor/wifi_densepose_wifi-densepose-1a2b3c4d-node1/presence/config"
)
assert out == ("binary_sensor", "wifi-densepose-1a2b3c4d-node1", "presence")
def test_parse_discovery_topic_returns_none_for_non_discovery() -> None:
assert parse_discovery_topic("homeassistant/binary_sensor/foo/state") is None
assert parse_discovery_topic("ruview/aabbccddeeff/raw/edge_vitals") is None
+29 -1
View File
@@ -21,7 +21,11 @@ from typing import Any
import pytest
from wifi_densepose.client import RuViewMqttClient
from wifi_densepose.client import (
RuViewMqttClient,
SemanticPrimitive,
SemanticPrimitiveListener,
)
from wifi_densepose.client.mqtt import _topic_matches
@@ -185,6 +189,30 @@ def test_multiple_handlers_for_overlapping_patterns_all_fire() -> None:
assert len(b_received) == 1
def test_documented_ha_state_pattern_subscribes_and_reaches_listener() -> None:
"""The subscription shown in python/README.md and the
SemanticPrimitiveListener docstring. paho rejects mid-level `+`
(e.g. `wifi_densepose_+`) with ValueError on subscribe."""
listener = SemanticPrimitiveListener()
received: list[Any] = []
listener.on(SemanticPrimitive.SomeoneSleeping, received.append)
c = RuViewMqttClient()
c.on_message("homeassistant/+/+/+/state", listener.handle_mqtt_message)
# The real paho client validates the filter before it checks for a
# connection, so this exercises the same subscribe() the broker path runs.
c._on_connect(c._client, None, None, 0)
c._on_message(None, None, _fake_message(
"homeassistant/binary_sensor/wifi_densepose_aabb/someone_sleeping/state",
{"state": "ON", "confidence": 0.9},
))
assert [(e.kind, e.node_id, e.state) for e in received] == [
(SemanticPrimitive.SomeoneSleeping, "aabb", "ON"),
]
# ─── on_connect path ─────────────────────────────────────────────────
+30 -2
View File
@@ -22,12 +22,12 @@ def test_enum_covers_all_10_v1_primitives() -> None:
"someone_sleeping",
"possible_distress",
"room_active",
"elderly_inactivity",
"elderly_inactivity_anomaly",
"meeting_in_progress",
"bathroom_occupied",
"fall_risk_elevated",
"bed_exit",
"no_movement_safety",
"no_movement",
"multi_room_transition",
}
actual = {p.value for p in SemanticPrimitive}
@@ -121,6 +121,34 @@ def test_listener_decodes_numeric_sensor_state() -> None:
assert evt.state == "73"
def test_listener_decodes_server_score_payload() -> None:
"""The sensing-server publishes fall_risk_elevated as a ScorePayload
(`{"score": ..., "ts": ...}`, mqtt/state.rs) with no `state` key."""
listener = SemanticPrimitiveListener()
evt = listener.handle_mqtt_message(
"homeassistant/sensor/wifi_densepose_aabb/fall_risk_elevated/state",
json.dumps({"score": 73.0, "ts": "2026-10-11T12:00:00Z"}),
)
assert evt is not None
assert evt.state == "73.0"
def test_listener_routes_server_topic_slugs() -> None:
"""Slugs must match EntityKind::topic_slug() in the sensing-server's
mqtt/discovery.rs, or the server's state messages are dropped."""
listener = SemanticPrimitiveListener()
received: list[SemanticPrimitive] = []
listener.on_any(lambda e: received.append(e.kind))
for slug in ("elderly_inactivity_anomaly", "no_movement"):
listener.handle_mqtt_message(
f"homeassistant/binary_sensor/wifi_densepose_aabb/{slug}/state", "ON"
)
assert received == [
SemanticPrimitive.ElderlyInactivityAnomaly,
SemanticPrimitive.NoMovementSafety,
]
def test_listener_decodes_bytes_payload() -> None:
listener = SemanticPrimitiveListener()
evt = listener.handle_mqtt_message(