@@ -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