Skip to content

Commit 5a2fd78

Browse files
authored
Add satisfaction and failure report checks in tests
1 parent abf4502 commit 5a2fd78

1 file changed

Lines changed: 60 additions & 3 deletions

File tree

tests/test_ix_cognition_evidence_bundle.py

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ def test_evidence_writer_exports_cognition_contract_artifacts(self):
6262
self.assertIn("falsification-gates.json", relative_files)
6363
self.assertIn("claim-boundaries.json", relative_files)
6464
self.assertIn("kernel-handoff.json", relative_files)
65+
self.assertIn("satisfaction-report.json", relative_files)
66+
self.assertIn("failure-report.json", relative_files)
6567

6668
manifest = json.loads((output_dir / "manifest.json").read_text(encoding="utf-8"))
6769
summary = json.loads((output_dir / "summary.json").read_text(encoding="utf-8"))
@@ -70,14 +72,20 @@ def test_evidence_writer_exports_cognition_contract_artifacts(self):
7072
gates = json.loads((output_dir / "falsification-gates.json").read_text(encoding="utf-8"))
7173
boundaries = json.loads((output_dir / "claim-boundaries.json").read_text(encoding="utf-8"))
7274
kernel_handoff = json.loads((output_dir / "kernel-handoff.json").read_text(encoding="utf-8"))
75+
satisfaction = json.loads((output_dir / "satisfaction-report.json").read_text(encoding="utf-8"))
76+
failure = json.loads((output_dir / "failure-report.json").read_text(encoding="utf-8"))
7377

7478
self.assertIn("contract.json", manifest["artifact_files"])
7579
self.assertIn("kernel-handoff.json", manifest["artifact_files"])
80+
self.assertIn("satisfaction-report.json", manifest["artifact_files"])
81+
self.assertIn("failure-report.json", manifest["artifact_files"])
7682
self.assertEqual(summary["counts"]["contract_attempts"], 1)
7783
self.assertEqual(summary["counts"]["contract_obligations"], 1)
7884
self.assertEqual(summary["counts"]["contract_evidence_requirements"], 1)
7985
self.assertEqual(summary["counts"]["contract_falsification_gates"], 1)
8086
self.assertEqual(summary["counts"]["kernel_handoff_packages"], 1)
87+
self.assertEqual(summary["counts"]["satisfaction_report_items"], 1)
88+
self.assertEqual(summary["counts"]["failure_report_gates"], 1)
8189
self.assertEqual(contract["runtime_semantics"], "metadata_only_not_executed")
8290
self.assertEqual(contract["attempts"][0]["name"], "wave6_measured_cognition")
8391
self.assertEqual(obligations["obligations"][0]["id"], "prediction_before_trial")
@@ -117,11 +125,50 @@ def test_evidence_writer_exports_cognition_contract_artifacts(self):
117125
kernel_handoff["packages"][0]["obligations"][0]["canonical_definition"]["id"],
118126
"prediction_before_trial",
119127
)
120-
self.assertIn(
121-
"IX-CognitionKernel handoff packages captured: 1",
122-
(output_dir / "assurance-claims.md").read_text(encoding="utf-8"),
128+
129+
self.assertEqual(satisfaction["report_type"], "ix.cognition.satisfaction_report")
130+
self.assertEqual(satisfaction["status"], "not_evaluated")
131+
self.assertEqual(
132+
satisfaction["attempts"][0]["evaluation_state"],
133+
"pending_downstream_evidence",
134+
)
135+
self.assertEqual(
136+
satisfaction["attempts"][0]["obligations"][0]["status"],
137+
"pending_downstream_evidence",
138+
)
139+
self.assertIsNone(satisfaction["attempts"][0]["obligations"][0]["satisfied"])
140+
self.assertEqual(
141+
satisfaction["attempts"][0]["obligations"][0]["required_evidence"],
142+
["prediction_record"],
143+
)
144+
self.assertEqual(
145+
satisfaction["attempts"][0]["obligations"][0]["received_evidence"],
146+
[],
123147
)
124148

149+
self.assertEqual(failure["report_type"], "ix.cognition.failure_report")
150+
self.assertEqual(failure["status"], "not_evaluated")
151+
self.assertEqual(
152+
failure["attempts"][0]["failure_conditions"][0]["obligation"],
153+
"prediction_before_trial",
154+
)
155+
self.assertEqual(
156+
failure["attempts"][0]["failure_conditions"][0]["condition"],
157+
"prediction_missing",
158+
)
159+
self.assertIsNone(failure["attempts"][0]["failure_conditions"][0]["triggered"])
160+
self.assertTrue(failure["attempts"][0]["failure_conditions"][0]["claim_blocking"])
161+
self.assertEqual(
162+
failure["attempts"][0]["failure_conditions"][0]["required_resolution"],
163+
"human_review",
164+
)
165+
166+
claims_text = (output_dir / "assurance-claims.md").read_text(encoding="utf-8")
167+
self.assertIn("IX-CognitionKernel handoff packages captured: 1", claims_text)
168+
self.assertIn("Satisfaction report obligations listed: 1", claims_text)
169+
self.assertIn("Failure report gates listed: 1", claims_text)
170+
self.assertIn("does not mark cognition obligations as satisfied", claims_text)
171+
125172
def test_kernel_handoff_payload_is_empty_without_kernel_target(self):
126173
source_file = self._write_ix(NON_KERNEL_CONTRACT)
127174
program = parse_ix(source_file.read_text(encoding="utf-8"), filename=str(source_file))
@@ -160,15 +207,21 @@ def test_plain_ix_bundle_exports_empty_cognition_contract_artifacts(self):
160207
gates = json.loads((output_dir / "falsification-gates.json").read_text(encoding="utf-8"))
161208
boundaries = json.loads((output_dir / "claim-boundaries.json").read_text(encoding="utf-8"))
162209
kernel_handoff = json.loads((output_dir / "kernel-handoff.json").read_text(encoding="utf-8"))
210+
satisfaction = json.loads((output_dir / "satisfaction-report.json").read_text(encoding="utf-8"))
211+
failure = json.loads((output_dir / "failure-report.json").read_text(encoding="utf-8"))
163212

164213
self.assertEqual(summary["counts"]["contract_attempts"], 0)
165214
self.assertEqual(summary["counts"]["contract_obligations"], 0)
166215
self.assertEqual(summary["counts"]["kernel_handoff_packages"], 0)
216+
self.assertEqual(summary["counts"]["satisfaction_report_items"], 0)
217+
self.assertEqual(summary["counts"]["failure_report_gates"], 0)
167218
self.assertEqual(contract["attempts"], [])
168219
self.assertEqual(obligations["obligations"], [])
169220
self.assertEqual(gates["falsification_gates"], [])
170221
self.assertEqual(boundaries["attempts"], [])
171222
self.assertEqual(kernel_handoff["packages"], [])
223+
self.assertEqual(satisfaction["attempts"], [])
224+
self.assertEqual(failure["attempts"], [])
172225

173226
def test_cli_evidence_command_lists_cognition_artifacts(self):
174227
source_file = self._write_ix(COGNITION_CONTRACT)
@@ -185,7 +238,11 @@ def test_cli_evidence_command_lists_cognition_artifacts(self):
185238
self.assertIn("- falsification-gates.json", output)
186239
self.assertIn("- claim-boundaries.json", output)
187240
self.assertIn("- kernel-handoff.json", output)
241+
self.assertIn("- satisfaction-report.json", output)
242+
self.assertIn("- failure-report.json", output)
188243
self.assertTrue((output_dir / "kernel-handoff.json").exists())
244+
self.assertTrue((output_dir / "satisfaction-report.json").exists())
245+
self.assertTrue((output_dir / "failure-report.json").exists())
189246

190247
def setUp(self):
191248
self._tempdir = tempfile.TemporaryDirectory()

0 commit comments

Comments
 (0)