diff --git a/core/cli.py b/core/cli.py index 9900a8bc..44876e7e 100644 --- a/core/cli.py +++ b/core/cli.py @@ -133,6 +133,7 @@ _TEST_SUITES: dict[str, tuple[str, ...]] = { "tests/test_environment_falsification.py", "tests/test_environment_falsification_eval_cli.py", "tests/test_witness_log_importer.py", + "tests/test_tabletop_lab_protocol.py", "tests/test_sensorium_eval_cli.py", "tests/test_efferent_gate.py", ), diff --git a/docs/lab/tabletop_falsification_lab.md b/docs/lab/tabletop_falsification_lab.md new file mode 100644 index 00000000..bce83e57 --- /dev/null +++ b/docs/lab/tabletop_falsification_lab.md @@ -0,0 +1,43 @@ +# Passive Tabletop Falsification Lab Protocol + +## Purpose + +The tabletop lab is an offline evidence source for ADR-0211 falsification. It is +not a live robotics stack and it does not authorize CORE-controlled actuation. + +## Hardware Target + +- Event camera for sparse brightness-change deltas. +- RGB/depth camera for reference visual frames. +- AprilTag calibration board and object tags for pose witness evidence. +- IMU/contact/proprioception logger for afferent sensorimotor evidence. + +## First Lab Mode + +Only passive, human-moved objects are allowed. The lab records logs, imports +them offline, compiles afferent units, builds `ObservationFrame`s, and runs +falsification scenarios. + +```text +passive environment movement + -> offline witness logs + -> deterministic import + -> afferent compilers + -> ObservationFrame sequence + -> FalsificationScenario report +``` + +## Acceptance Gates + +- The same captured log imports to the same frame-sequence hash. +- AprilTag/GTSAM-style pose outputs remain witness evidence only. +- Event-vision and sensorimotor deltas remain compiler-native. +- No raw camera frame, event stream, PCM, trajectory, or actuator trace enters + `ObservationFrame` or falsification traces. +- No CORE motor command path is mounted. + +## Deferred + +Repeated capture statistics, hardware-noise envelopes, live device readers, +robot actuation, and motor decoder work require later ADRs. Exact replay remains +the first gate. diff --git a/tests/test_tabletop_lab_protocol.py b/tests/test_tabletop_lab_protocol.py new file mode 100644 index 00000000..ce7b377d --- /dev/null +++ b/tests/test_tabletop_lab_protocol.py @@ -0,0 +1,14 @@ +from __future__ import annotations + +from pathlib import Path + + +def test_tabletop_lab_protocol_is_passive_and_trace_safe(): + root = Path(__file__).resolve().parents[1] + doc = root / "docs" / "lab" / "tabletop_falsification_lab.md" + assert doc.exists() + text = doc.read_text(encoding="utf-8") + assert "Only passive, human-moved objects are allowed" in text + assert "No CORE motor command path is mounted" in text + assert "No raw camera frame, event stream, PCM, trajectory, or actuator trace enters" in text + assert "Exact replay remains" in text