import importlib.util import json from pathlib import Path REPO = Path(__file__).resolve().parents[1] spec = importlib.util.spec_from_file_location('admission', REPO / 'scripts/research_admission.py') admission = importlib.util.module_from_spec(spec) spec.loader.exec_module(admission) def block(value): return '```json\n' + json.dumps(value) + '\n```' def test_captured_carniato_failure_is_blocked(): result = admission.audit(REPO / 'research/bench/infospaces/carniato-authority-03') assert result['structural_status'] == 'blocked' assert any('candidate contract' in f for f in result['findings']) assert any("'C01'" in f for f in result['findings']) assert any("'C02'" in f for f in result['findings']) assert result['admission'] == 'not_granted' def test_missing_known_use_evidence_and_recurrence_are_blocked(): candidates = {'candidates': [{'id': 'P01', 'known_uses': [ {'implementation': 'generic chat example'}], 'recurrence': 'supported'}]} result = admission.screen(block(candidates), block([])) assert any('known use lacks' in f for f in result['findings']) assert any('recurrence lacks' in f for f in result['findings']) def test_unknown_and_empty_findings_do_not_grant_admission(): for candidates in ([], [{'id': 'P01', 'known_uses': [], 'recurrence': 'unknown'}]): result = admission.screen(block({'candidates': candidates}), block([])) assert result['structural_status'] == 'passed' assert result['admission'] == 'not_granted' assert result['semantic_review'] == 'required' def test_duplicates_and_malformed_contracts_fail_closed(): item = {'id': 'P01', 'known_uses': [], 'recurrence': 'unknown'} for candidates, edges in [({'candidates': [item, item]}, []), ({'candidates': [item]}, {}), ({'candidates': [None]}, []), ({'candidates': [item]}, [None])]: assert admission.screen(block(candidates), block(edges))['structural_status'] == 'blocked' def test_claim_endpoint_rejected_even_with_valid_candidate_ledger(): candidate = {'id': 'P01', 'known_uses': [], 'recurrence': 'unknown'} edge = {'subject_candidate_id': 'P01', 'object_candidate_id': 'C01', 'relation': 'requires', 'rationale': 'context', 'source_claim_and_locator': 'C01 Passage A', 'counterexample': 'local authority', 'observation_versus_hypothesis': 'hypothesis'} result = admission.screen(block({'candidates': [candidate]}), block([edge])) assert len(result['findings']) == 1 assert 'invalid object_candidate_id' in result['findings'][0] def test_live_negative_result_with_terminal_json_is_valid(): result = admission.audit(REPO / 'research/bench/infospaces/local-first-authority-06') assert result['structural_status'] == 'passed' assert result['admission'] == 'not_granted' def test_ambiguous_or_malformed_bare_json_is_not_repaired(): for text in ('{}\n{}', '{"candidates": []}\nextra prose', '{"candidates": [}', '```json\n{}\n```\n```json\n{}\n```'): assert admission.screen(text, block([]))['structural_status'] == 'blocked'