wip(k1): checkpoint connection recovery rewrite
Capture the current unreleased K1 connection, recovery, lifecycle, viewer, and test work as a single known-bad baseline for subsequent fixes.
This commit is contained in:
@@ -97,6 +97,8 @@ def test_live_ingress_wire_is_self_delimiting_and_explicitly_non_authoritative()
|
||||
header_bytes = struct.unpack("!I", encoded[:4])[0]
|
||||
header = json.loads(encoded[4 : 4 + header_bytes])
|
||||
assert header["schema_version"] == LIVE_INGRESS_WIRE_SCHEMA
|
||||
assert header["session_id"] == "session-1"
|
||||
assert header["session_generation"] == 1
|
||||
assert header["payload_bytes"] == 4
|
||||
assert header["commands_enabled"] is False
|
||||
assert header["navigation_or_safety_accepted"] is False
|
||||
@@ -157,14 +159,45 @@ def test_live_ingress_new_session_discards_queued_events_from_previous_session()
|
||||
events.append(event)
|
||||
assert len(events) == 1
|
||||
assert events[0].session_id == "session-2"
|
||||
assert events[0].session_generation == 2
|
||||
assert events[0].modality == "control"
|
||||
assert events[0].payload == b'{"event":"session-start"}'
|
||||
|
||||
|
||||
def test_live_result_admission_is_bound_to_exact_session_generation() -> None:
|
||||
ingress = LivePerceptionIngress()
|
||||
ingress.begin_session("session-1")
|
||||
first_generation = ingress.snapshot()["session_generation"]
|
||||
ingress.end_session("session-1")
|
||||
ingress.begin_session("session-2")
|
||||
second_generation = ingress.snapshot()["session_generation"]
|
||||
received: list[str] = []
|
||||
|
||||
assert (
|
||||
ingress.admit_result(
|
||||
session_id="session-1",
|
||||
session_generation=first_generation,
|
||||
receiver=lambda: not received.append("stale"),
|
||||
)
|
||||
is False
|
||||
)
|
||||
assert (
|
||||
ingress.admit_result(
|
||||
session_id="session-2",
|
||||
session_generation=second_generation,
|
||||
receiver=lambda: not received.append("current"),
|
||||
)
|
||||
is True
|
||||
)
|
||||
assert received == ["current"]
|
||||
|
||||
|
||||
def test_live_result_round_trip_keeps_video_mask_boxes_and_shadow_authority() -> None:
|
||||
mask = np.zeros((600, 800), dtype=np.uint8)
|
||||
mask[100:120, 200:240] = 4
|
||||
encoded = encode_live_perception_result(
|
||||
session_id="session-1",
|
||||
session_generation=1,
|
||||
frame_index=12,
|
||||
source_frame_index=44,
|
||||
session_seconds=1.25,
|
||||
@@ -188,6 +221,8 @@ def test_live_result_round_trip_keeps_video_mask_boxes_and_shadow_authority() ->
|
||||
frame = decode_live_perception_result(encoded)
|
||||
|
||||
assert frame.frame_index == 12
|
||||
assert frame.session_id == "session-1"
|
||||
assert frame.session_generation == 1
|
||||
assert frame.source_frame_index == 44
|
||||
assert frame.image_jpeg == b"\xff\xd8test\xff\xd9"
|
||||
assert frame.segmentation_mask is not None
|
||||
@@ -200,6 +235,8 @@ def test_live_result_round_trip_keeps_video_mask_boxes_and_shadow_authority() ->
|
||||
def test_live_result_rejects_tampering_and_partial_cuboid() -> None:
|
||||
with pytest.raises(ValueError, match="cuboid is incomplete"):
|
||||
encode_live_perception_result(
|
||||
session_id="session-1",
|
||||
session_generation=1,
|
||||
frame_index=0,
|
||||
source_frame_index=0,
|
||||
session_seconds=0.0,
|
||||
@@ -218,6 +255,8 @@ def test_live_result_rejects_tampering_and_partial_cuboid() -> None:
|
||||
delivery={"health": "degraded"},
|
||||
)
|
||||
encoded = encode_live_perception_result(
|
||||
session_id="session-1",
|
||||
session_generation=1,
|
||||
frame_index=0,
|
||||
source_frame_index=0,
|
||||
session_seconds=0.0,
|
||||
|
||||
Reference in New Issue
Block a user