1
0
Fork 0
Code Issues Pull requests Projects Releases 2 Packages Wiki Activity Actions Pages

Add adapter SDK conformance proofs

This commit is contained in:
Andraxion 2026-07-29 14:23:29 -04:00
parent 85f6629cb1
commit e6523c0c00
5 changed files with 634 additions and 34 deletions

View file

@ -248,6 +248,36 @@ class NonLogicIncrementalLoader(IncrementalLoader):
return replace(super().extract_source(source), logic=())
class CompleteLogicIncrementalLoader(IncrementalLoader):
"""Supply an independent complete Logic oracle alongside the legacy graph oracle."""
def __init__(self, root: Path, *, mismatched_logic: bool = False) -> None:
super().__init__(root)
self.mismatched_logic = mismatched_logic
def load_complete_assembly(self) -> AdapterAssembly:
projection = super().load_projection()
if "guide.workflow" not in self.sources:
return AdapterAssembly(projection)
manifest = self.load_manifest()
workflow = next(
source for source in manifest.sources if source.source_id == "guide.workflow"
)
logic = self.extract_source(workflow).logic
if self.mismatched_logic:
current = logic[0]
logic = (
replace(
current,
nodes=(
current.nodes[0],
replace(current.nodes[1], label="Different complete return"),
),
),
)
return AdapterAssembly(projection, logic)
class AdapterContractTests(unittest.TestCase):
def projection(self, root: Path) -> AdapterProjection:
foundation = Node(
@ -782,6 +812,46 @@ class AdapterContractTests(unittest.TestCase):
self.assertEqual("ok", equivalent["status"])
self.assertEqual(1, equivalent["node_count"])
def test_logic_equivalence_requires_an_independent_complete_oracle(self) -> None:
with tempfile.TemporaryDirectory() as directory:
root = Path(directory).resolve()
project = AdapterProject(
IncrementalLoader(root),
cache_root=root / ".cache" / "logic-without-oracle",
)
with self.assertRaises(DocForgeError) as captured:
project.verify_incremental_equivalence()
self.assertEqual("complete_logic_oracle_required", captured.exception.code)
def test_logic_equivalence_uses_the_complete_assembly_oracle(self) -> None:
with tempfile.TemporaryDirectory() as directory:
root = Path(directory).resolve()
project = AdapterProject(
CompleteLogicIncrementalLoader(root),
cache_root=root / ".cache" / "logic-oracle",
)
result = project.verify_incremental_equivalence()
self.assertEqual("ok", result["status"])
self.assertEqual(1, result["logic_projection_count"])
def test_logic_equivalence_reports_exact_mismatch_field(self) -> None:
with tempfile.TemporaryDirectory() as directory:
root = Path(directory).resolve()
project = AdapterProject(
CompleteLogicIncrementalLoader(root, mismatched_logic=True),
cache_root=root / ".cache" / "logic-mismatch",
)
with self.assertRaises(DocForgeError) as captured:
project.verify_incremental_equivalence()
self.assertEqual("incremental_mismatch", captured.exception.code)
self.assertEqual(["logic"], captured.exception.details["fields"])
def test_incremental_adapter_can_assemble_overlapping_source_evidence(self) -> None:
with tempfile.TemporaryDirectory() as directory:
root = Path(directory).resolve()