core/tests/test_domain_pack_contract.py
Shay a45eab1fe3
fix(epistemic): Phase 2 known bug repairs (#219)
* fix(epistemic): make empty resonance evidence undetermined

* fix(evals): classify verified realizer failures separately

* fix(packs): treat absent domain manifests as valid noop

* test(packs): cover missing manifests and scope boundary domains

* test(epistemic): cover phase 2 known bug fixes

* fix(vault): make FALSIFIED exclusion explicit in _status_admits

FALSIFIED entries previously fell through to the ADMISSIBLE_AS_EVIDENCE
set-check, which excluded them correctly but left the distinction between
CONTRADICTED (FALSIFIED) and UNVERIFIED-POSSIBLE (SPECULATIVE) implicit.
Add an early guard so FALSIFIED is explicitly rejected before the tier
filter, matching the CONTRADICTED semantics from the epistemic taxonomy.
2026-05-24 11:20:32 -07:00

100 lines
3.2 KiB
Python

from __future__ import annotations
import json
from language_packs.domain_contract import parse_domain_contract, validate_domain_contract_pack
def test_absent_domain_contract_is_valid_noop() -> None:
result = parse_domain_contract({"pack_id": "plain_pack"}, pack_id="plain_pack")
assert result.present is False
assert result.valid is True
assert result.contract is None
def test_missing_manifest_is_valid_absent_noop(tmp_path) -> None:
result = validate_domain_contract_pack("missing_pack", data_root=tmp_path)
assert result.present is False
assert result.valid is True
assert result.errors == ()
assert result.contract is None
def test_valid_domain_contract_parses_optional_axioms_rules() -> None:
result = parse_domain_contract(
{
"domain_contract_version": 1,
"domain_id": "mathematics_logic",
"axioms": "axioms/math_logic_v1.jsonl",
"rules": None,
"teaching_chains": ["math_logic_chains_v1"],
"eval_lanes": [
{
"lane": "mathematics_logic",
"version": "v1",
"splits": ["dev", "public", "holdout"],
}
],
"reviewers": ["logic_reviewer"],
"known_gaps": ["gap:mathematics_logic_transitive_chains_below_threshold"],
"provenance": "adr-0090:reviewed:2026-05-21",
},
pack_id="math_logic_seed_v1",
)
assert result.present is True
assert result.valid is True
assert result.errors == ()
assert result.contract is not None
assert result.contract.axioms == "axioms/math_logic_v1.jsonl"
assert result.contract.rules is None
def test_domain_contract_rejects_unsafe_paths_and_marks_unknown_domain_scope_boundary() -> None:
result = parse_domain_contract(
{
"domain_contract_version": 1,
"domain_id": "not_a_domain",
"axioms": "../escape.jsonl",
"rules": "/tmp/rules.jsonl",
"provenance": "",
},
pack_id="bad_pack",
)
assert result.valid is False
assert "scope_boundary:domain_id:unknown" in result.errors
assert "domain_id:unknown" not in result.errors
assert "axioms:unsafe_path" in result.errors
assert "rules:unsafe_path" in result.errors
assert "provenance:required" in result.errors
def test_validate_domain_contract_pack_reads_manifest(tmp_path) -> None:
pack_dir = tmp_path / "pack_v1"
pack_dir.mkdir()
(pack_dir / "manifest.json").write_text(
json.dumps(
{
"domain_contract_version": 1,
"domain_id": "physics",
"axioms": None,
"rules": None,
"teaching_chains": [],
"eval_lanes": [],
"reviewers": [],
"known_gaps": ["gap:physics_pack_absent"],
"provenance": "adr-0090:reviewed:2026-05-21",
}
),
encoding="utf-8",
)
result = validate_domain_contract_pack("pack_v1", data_root=tmp_path)
assert result.present is True
assert result.valid is True
assert result.contract is not None
assert result.contract.domain_id == "physics"