"""Static fail-closed guards for G0 provenance and migration proof tools.""" from __future__ import annotations import importlib.util import unittest from pathlib import Path from types import ModuleType ROOT = Path(__file__).resolve().parents[1] def _load(name: str, relative_path: str) -> ModuleType: spec = importlib.util.spec_from_file_location(name, ROOT / relative_path) if spec is None or spec.loader is None: raise AssertionError(f"could not load {relative_path}") module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) return module class ProvenanceCensusContractTest(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.module = _load( "measurement_provenance_census", "scripts/check-measurement-provenance-census.py", ) def test_registry_covers_central_and_table_local_producers(self) -> None: self.assertIn("app.measurement_event", self.module.KNOWN_PRODUCER_TABLES) self.assertIn( "app.multimodal_axis_measurement", self.module.KNOWN_PRODUCER_TABLES, ) self.assertIn( "app.calibration_transfer_execution_event", self.module.KNOWN_PRODUCER_TABLES, ) self.assertEqual( self.module.TABLE_SOURCE_KIND_OVERRIDES[ "app.multimodal_axis_measurement" ], {"model_inferred_text", "model_inferred_voice"}, ) def test_dynamic_sql_identifier_rejects_injection(self) -> None: self.assertEqual(self.module._identifier("measurement_event"), '"measurement_event"') with self.assertRaises(self.module.CensusError): self.module._identifier("measurement_event;drop table") class MigrationRehearsalContractTest(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.module = _load( "measurement_migration_rehearsal", "scripts/rehearse-measurement-migration.py", ) def test_temporary_database_scope_is_narrow(self) -> None: value = self.module.TEMP_DATABASE_PREFIX + "0123abcdef" self.assertEqual(self.module._database_identifier(value), f'"{value}"') with self.assertRaises(self.module.RehearsalError): self.module._database_identifier("vignette") def test_rehearsal_applies_all_prerequisites_before_g0(self) -> None: self.assertEqual( self.module.BASE_MIGRATIONS, ( "01_extensions.sql", "02_schema.sql", "03_kb.sql", "04_audit_eval_rls.sql", "05_runtime_auth.sql", "06_session_evaluation.sql", ), ) self.assertEqual( self.module.G0_MIGRATION, "07_measurement_foundation.sql", ) if __name__ == "__main__": unittest.main()