feat(laboratory): publish repeated M48S load envelope

This commit is contained in:
DCCONSTRUCTIONS
2026-08-25 22:31:27 +03:00
parent f50e0077c5
commit 209d0bfc26
9 changed files with 898 additions and 173 deletions
+21 -12
View File
@@ -38,7 +38,7 @@ def test_m48s_lab_seals_visual_comparison_and_load_evidence(tmp_path: Path) -> N
assert manifest["result_id"] == result.result_id
assert result.result_id.endswith(identity_digest)
assert manifest["identity_sha256"] == identity_digest
assert len(manifest["artifacts"]) == 39
assert len(manifest["artifacts"]) == 45
assert manifest["method"]["completeness"] == "complete"
assert manifest["bounded_question_accepted"] is True
assert manifest["ground_truth"] is False
@@ -50,10 +50,10 @@ def test_m48s_lab_seals_visual_comparison_and_load_evidence(tmp_path: Path) -> N
"integrated_world_state_gate_passed": True,
"full_replay_visual_published": True,
"load_envelope_evaluated": True,
"production_rate_repeatability_passed": False,
"production_rate_repeatability_passed": True,
"reserve_12_fps_passed": True,
"limit_15_fps_passed": True,
"load_envelope_accepted": False,
"load_envelope_accepted": True,
"detector_replacement_authorized": False,
"production_accepted": False,
}
@@ -86,22 +86,31 @@ def test_m48s_lab_seals_visual_comparison_and_load_evidence(tmp_path: Path) -> N
assert hardening["startup"]["prewarm_duration_ms"] == 420.721918
assert hardening["startup"]["validation_frames"] == 1_000
envelope = manifest["metrics"]["load_envelope"]
assert envelope["schema_version"] == "missioncore.m48s-load-envelope-comparison/v1"
assert envelope["production_rate_repeatability_passed"] is False
assert envelope["schema_version"] == "missioncore.m48s-load-envelope-comparison/v2"
assert envelope["repeat_count_per_rate"] == 3
assert envelope["production_rate_repeatability_passed"] is True
assert envelope["reserve_12_fps_passed"] is True
assert envelope["limit_15_fps_passed"] is True
assert envelope["load_envelope_accepted"] is False
assert envelope["load_envelope_accepted"] is True
assert envelope["compute_capacity_at_least_fps"] == 15.0
production, reserve, limit = envelope["scenarios"]
assert production["delivered_world_states"] == 4_483
assert production["superseded_frames"] == 6
assert production["operating_target_gate_passed"] is False
assert reserve["delivered_world_states"] == 4_477
assert reserve["superseded_frames"] == 12
assert production["delivered_world_states"] >= 4_485
assert production["superseded_frames"] <= 5
assert production["operating_target_gate_passed"] is True
assert reserve["delivered_world_states"] >= 4_467
assert reserve["superseded_frames"] <= 22
assert reserve["operating_target_gate_passed"] is True
assert limit["delivered_world_states"] == 4_488
assert limit["superseded_frames"] == 1
assert limit["operating_target_gate_passed"] is True
assert all(item["repeat_count"] == 3 for item in envelope["scenarios"])
assert all(len(item["repetitions"]) == 3 for item in envelope["scenarios"])
assert all(item["all_repetitions_passed"] is True for item in envelope["scenarios"])
assert all(item["hot_loop_decode_p95_ms"] < 30 for item in envelope["scenarios"])
assert all(
item["source_prefetch_preparation_maximum_ms"] > 3_000
for item in envelope["scenarios"]
)
assert all(item["additional_inference_passes"] == 0 for item in envelope["scenarios"])
catalog = json.loads((result.result_root / "catalog.json").read_text("utf-8"))
@@ -122,7 +131,7 @@ def test_m48s_lab_seals_visual_comparison_and_load_evidence(tmp_path: Path) -> N
)
proof = verify_laboratory_evidence_result(definition, result.result_root)
assert proof["result_id"] == result.result_id
assert proof["artifact_count"] == 39
assert proof["artifact_count"] == 45
with pytest.raises(M48SFixedClassDetectorLabError, match="already exists"):
build_m48s_fixed_class_detector_lab(
@@ -52,9 +52,11 @@ def test_m48s_lab_api_projects_verified_result_frame_and_camera(tmp_path: Path)
assert hardening["hardened"]["delivered_world_states"] == 4_488
assert hardening["startup"]["prewarmed"]["world_state_ms"] == 60.516957
envelope = result.json()["metrics"]["load_envelope"]
assert envelope["production_rate_repeatability_passed"] is False
assert envelope["production_rate_repeatability_passed"] is True
assert envelope["reserve_12_fps_passed"] is True
assert envelope["limit_15_fps_passed"] is True
assert envelope["load_envelope_accepted"] is True
assert envelope["repeat_count_per_rate"] == 3
assert [item["requested_source_rate_hz"] for item in envelope["scenarios"]] == [
10.0,
12.0,
+18 -1
View File
@@ -6,7 +6,7 @@ from pathlib import Path
from unittest.mock import patch
from k1link.perception.detector import DetectorFrameTiming
from k1link.perception.recorded_source import DecodedFrameTiming
from k1link.perception.recorded_source import DecodedFrameTiming, SourcePacingTiming
REPOSITORY_ROOT = Path(__file__).resolve().parents[1]
RUNNER_PATH = REPOSITORY_ROOT / "experiments/perception/run_m48s_reference_graph_shadow_worker.py"
@@ -19,6 +19,14 @@ SPEC.loader.exec_module(RUNNER)
def test_frame_timing_store_closes_provider_and_unattributed_time() -> None:
store = RUNNER.FrameTimingStore()
store.observe_decode(DecodedFrameTiming(sequence=7, duration_ns=5))
store.observe_pacing(
SourcePacingTiming(
sequence=7,
scheduled_monotonic_ns=80,
emitted_monotonic_ns=90,
lateness_ns=10,
)
)
store.observe_detector(
DetectorFrameTiming(
sequence=7,
@@ -50,6 +58,14 @@ def test_frame_timing_store_closes_provider_and_unattributed_time() -> None:
def test_pipeline_timing_metrics_preserve_single_pass_stage_breakdown() -> None:
store = RUNNER.FrameTimingStore()
store.observe_decode(DecodedFrameTiming(sequence=3, duration_ns=1_000_000))
store.observe_pacing(
SourcePacingTiming(
sequence=3,
scheduled_monotonic_ns=0,
emitted_monotonic_ns=1_000_000,
lateness_ns=1_000_000,
)
)
store.observe_detector(
DetectorFrameTiming(
sequence=3,
@@ -79,6 +95,7 @@ def test_pipeline_timing_metrics_preserve_single_pass_stage_breakdown() -> None:
assert metrics["detector_ms"]["inference_transport"]["maximum"] == 3.0
assert metrics["provider_ms"]["threat"]["maximum"] == 5.0
assert metrics["graph_unattributed_ms"]["maximum"] == 6.0
assert metrics["delivered_source_pacing_lateness_ms"]["maximum"] == 1.0
assert metrics["maximum_graph_sequence"] == 3
assert metrics["additional_inference_passes"] == 0