feat(lab): seal M4.8R3 occupancy shadows

This commit is contained in:
DCCONSTRUCTIONS
2026-08-26 13:39:54 +03:00
parent 90bdc27785
commit b82a97fe8b
8 changed files with 1498 additions and 0 deletions
@@ -70,6 +70,7 @@ class M48sReplayTimeline:
frames_name: str = "reference-graph-replay-frames.jsonl",
worker_result_name: str = "reference-graph-replay-worker-result.json",
frame_evidence_schema: str = FRAME_EVIDENCE_SCHEMA,
frame_diff_name: str | None = None,
camera_endpoint_root: str = (
"/api/v1/laboratory/m48s/fixed-class-detector"
),
@@ -80,6 +81,10 @@ class M48sReplayTimeline:
if (
Path(frames_name).name != frames_name
or Path(worker_result_name).name != worker_result_name
or (
frame_diff_name is not None
and Path(frame_diff_name).name != frame_diff_name
)
or frame_evidence_schema not in {
FRAME_EVIDENCE_SCHEMA,
M48R3_FRAME_EVIDENCE_SCHEMA,
@@ -92,11 +97,23 @@ class M48sReplayTimeline:
self.camera_endpoint_root = camera_endpoint_root
self.frames_path = (self.result_root / frames_name).resolve(strict=True)
self.worker_path = (self.result_root / worker_result_name).resolve(strict=True)
self.frame_diff_path = (
None
if frame_diff_name is None
else (self.result_root / frame_diff_name).resolve(strict=True)
)
if (
self.frames_path.parent != self.result_root
or self.worker_path.parent != self.result_root
or self.frames_path.is_symlink()
or self.worker_path.is_symlink()
or (
self.frame_diff_path is not None
and (
self.frame_diff_path.parent != self.result_root
or self.frame_diff_path.is_symlink()
)
)
):
raise M48sReplayTimelineError("M4.8S replay artifacts are invalid")
self.profile = load_replay_threat_profile(
@@ -123,6 +140,11 @@ class M48sReplayTimeline:
self.outcomes,
frame_evidence_schema=self.frame_evidence_schema,
)
self.frame_diff_offsets = (
{}
if self.frame_diff_path is None
else _index_frame_diff(self.frame_diff_path)
)
self._cache_lock = Lock()
self._chunk_json_cache: OrderedDict[tuple[int, int], bytes] = OrderedDict()
self._camera_point_json_cache: OrderedDict[int, bytes] = OrderedDict()
@@ -156,6 +178,11 @@ class M48sReplayTimeline:
"camera_point_window_seconds": CAMERA_ACCUMULATION_WINDOW_SECONDS,
"camera_point_sample_limit": CAMERA_ACCUMULATION_POINT_LIMIT,
"world_state_delivery": "source-paced-latest-wins",
"occupancy_provenance_delivery": (
"baseline-versus-additive-component-diff"
if self.frame_diff_path is not None
else None
),
"world_state_frame_count": len(self.index.offsets_by_sequence),
"superseded_frame_count": sum(
value == "superseded" for value in self.outcomes.values()
@@ -399,6 +426,12 @@ class M48sReplayTimeline:
body_frame,
occupied_voxel_size_m=self.profile.corridor.occupied_voxel_size_m,
)
provenance = self._component_provenance(sequence)
for visual in metric_visuals:
visual["occupancy_source"] = provenance.get(
str(visual["component_id"]),
"baseline",
)
associated = set(_strings(row.get("associated_proposal_ids"), "associated ids"))
for proposal in _objects(row.get("detector_proposals"), "detector proposals"):
proposal_id = _text(proposal.get("proposal_id"), "proposal id")
@@ -480,6 +513,27 @@ class M48sReplayTimeline:
raise M48sReplayTimelineError("M4.8S frame row is invalid")
return value
def _component_provenance(self, sequence: int) -> dict[str, str]:
if self.frame_diff_path is None:
return {}
offset = self.frame_diff_offsets.get(sequence)
if offset is None:
raise M48sReplayTimelineError("M4.8R3 frame diff is incomplete")
with self.frame_diff_path.open("rb") as stream:
stream.seek(offset)
line = stream.readline()
value = _object(json.loads(line), "frame diff")
if value.get("sequence") != sequence:
raise M48sReplayTimelineError("M4.8R3 frame diff binding changed")
provenance = value.get("component_provenance")
if not isinstance(provenance, dict) or any(
not isinstance(key, str)
or item not in {"mixed", "additive-low-step"}
for key, item in provenance.items()
):
raise M48sReplayTimelineError("M4.8R3 component provenance changed")
return provenance
def _index_ledger(
path: Path,
@@ -517,6 +571,33 @@ def _index_ledger(
return _LedgerIndex(offsets)
def _index_frame_diff(path: Path) -> dict[int, int]:
offsets: dict[int, int] = {}
with path.open("rb") as stream:
while True:
offset = stream.tell()
line = stream.readline()
if not line:
break
try:
value = json.loads(line)
except json.JSONDecodeError:
raise M48sReplayTimelineError("M4.8R3 frame diff is invalid") from None
if not isinstance(value, dict):
raise M48sReplayTimelineError("M4.8R3 frame diff is invalid")
sequence = value.get("sequence")
if (
not isinstance(sequence, int)
or isinstance(sequence, bool)
or sequence != len(offsets)
):
raise M48sReplayTimelineError("M4.8R3 frame diff sequence changed")
offsets[sequence] = offset
if len(offsets) != EXPECTED_FRAME_COUNT:
raise M48sReplayTimelineError("M4.8R3 frame diff is incomplete")
return offsets
def _ledger_source_envelope(
line: bytes,
*,