tests/test_mechanism_smoke.py
"""End-to-end synthetic integration checks, never carrier qualification tests."""
import importlib.util
import json
from pathlib import Path
import pytest
from mcss.mechanism_pilot.statistics import analyze_history, scene_macro
SCRIPT = Path(__file__).resolve().parents[1] / "scripts" / "run_3d_mechanism_smoke.py"
def script_module():
spec = importlib.util.spec_from_file_location("mechanism_smoke_script", SCRIPT)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
def read(directory, name):
return json.loads((directory / name).read_text())
@pytest.fixture(scope="module")
def smoke_runs(tmp_path_factory):
module = script_module()
first = tmp_path_factory.mktemp("mechanism-first")
second = tmp_path_factory.mktemp("mechanism-replay")
module.run(first)
module.run(second)
return module, first, second
def test_all_candidate_seals_precede_any_query_access(smoke_runs):
_, first, _ = smoke_runs
events = read(first, "access_log.json")["events"]
seal_positions = [i for i, row in enumerate(events) if row["event"] == "seal"]
reads = [(i, row) for i, row in enumerate(events) if row["event"] != "seal"]
assert len(seal_positions) == 33
assert len(reads) == 12
assert max(seal_positions) < min(i for i, _ in reads)
assert all(row["status"] == "completed" for _, row in reads)
manifest = read(first, "state_manifest.json")
assert {row["candidate_id"] for row in events if row["event"] == "seal"} == set(manifest)
assert all(not set(row["observed_ids"]) & {8, 9} for row in manifest.values())
def test_report_counts_and_statistics_recompute_from_saved_rows(smoke_runs):
_, first, _ = smoke_runs
summary = read(first, "summary.json")
dynamic = read(first, "controlled_history_results.json")
static = read(first, "static_state_results.json")
assert summary["scientific_scenes"] == 0
assert summary["dynamic_query_rows"] == len(dynamic) == 48
assert summary["static_query_rows"] == len(static) == 30
assert summary["controlled_pairs"] == len({r["scene_id"] for r in dynamic}) == 3
assert read(first, "history_analysis.json") == analyze_history(
dynamic, draws=10000, seed=20260927, tie_tolerance=1e-8
)
static_analysis = read(first, "static_analysis.json")
for method in ("A", "B", "anchor", "prior", "wrong_scene"):
for metric in ("depth_absrel", "rgb_psnr", "depth_rmse", "coverage"):
assert static_analysis[method][metric] == scene_macro(
[r for r in static if r["method"] == method], metric
)
for scene in range(3):
for query in (8, 9):
rows = [
r
for r in static
if r["scene_id"] == f"synthetic-{scene}" and r["query_id"] == query
]
assert len({row["query_camera_hash"] for row in rows}) == 1
def test_seeded_replay_matches_numeric_artifacts_not_wall_clock(smoke_runs):
_, first, second = smoke_runs
for name in (
"run_lock.json",
"state_manifest.json",
"prediction_hashes.json",
"controlled_history_results.json",
"static_state_results.json",
"history_analysis.json",
"numerical_history_effect.json",
"static_analysis.json",
):
assert read(first, name) == read(second, name), name
def test_existing_run_is_never_overwritten(smoke_runs):
module, first, _ = smoke_runs
previous = (first / "run_lock.json").read_bytes()
with pytest.raises(FileExistsError, match="overwrite"):
module.run(first)
assert (first / "run_lock.json").read_bytes() == previous