77
88from ix .assurance import AssuranceProfileRegistry , assess_ix
99from ix .cli import main
10- from ix .cognition import cognition_obligation_ids
10+ from ix .cognition import cognition_obligation_ids , require_cognition_obligation
1111from ix .parser import parse_ix
1212
1313
@@ -19,8 +19,10 @@ def build_cognition_contract(
1919 claim_boundary : str = "Research candidate only" ,
2020 human_review : str = "Human review required before advancement" ,
2121 handoff_target : str = "IX-CognitionKernel" ,
22+ falsification_overrides : dict [str , str ] | None = None ,
2223) -> str :
2324 selected_obligations = obligation_ids or cognition_obligation_ids ()
25+ overrides = falsification_overrides or {}
2426 lines = [
2527 "attempt wave6_measured_cognition {" ,
2628 f' purpose "{ purpose } "' ,
@@ -32,11 +34,16 @@ def build_cognition_contract(
3234 ]
3335
3436 for obligation_id in selected_obligations :
37+ definition = require_cognition_obligation (obligation_id )
38+ falsification_condition = overrides .get (
39+ obligation_id ,
40+ definition .falsification_conditions [0 ],
41+ )
3542 lines .extend (
3643 [
3744 f" obligation { obligation_id } {{" ,
38- f" evidence_required { obligation_id } _record " ,
39- f" falsify_if { obligation_id } _missing " ,
45+ f" evidence_required { definition . evidence_artifacts [ 0 ] } " ,
46+ f" falsify_if { falsification_condition } " ,
4047 " }" ,
4148 "" ,
4249 ]
@@ -123,6 +130,10 @@ def test_cognition_profile_accepts_complete_canonical_contract(self):
123130 self .assertIn ("cognition_contract.obligations.canonical" , check_ids )
124131 self .assertIn ("cognition_contract.obligation_evidence.present" , check_ids )
125132 self .assertIn ("cognition_contract.obligation_falsification.present" , check_ids )
133+ self .assertIn (
134+ "cognition_contract.obligation_canonical_falsification.present" ,
135+ check_ids ,
136+ )
126137
127138 def test_cognition_profile_fails_missing_core_contract_parts (self ):
128139 program = parse_ix (
@@ -148,6 +159,10 @@ def test_cognition_profile_fails_missing_core_contract_parts(self):
148159 self .assertIn ("cognition_contract.handoff_contract.missing" , check_ids )
149160 self .assertIn ("cognition_contract.required_obligations.missing" , check_ids )
150161 self .assertIn ("cognition_contract.obligation_falsification.missing" , check_ids )
162+ self .assertIn (
163+ "cognition_contract.obligation_canonical_falsification.missing" ,
164+ check_ids ,
165+ )
151166
152167 def test_cognition_profile_fails_missing_required_obligations (self ):
153168 incomplete_ids = tuple (
@@ -188,6 +203,37 @@ def test_cognition_profile_fails_unknown_obligation_ids(self):
188203 self .assertEqual (len (unknown_checks ), 1 )
189204 self .assertIn ("custom_gap_label" , unknown_checks [0 ].data ["unknown_obligations" ])
190205
206+ def test_cognition_profile_fails_noncanonical_falsification_gate (self ):
207+ program = parse_ix (
208+ build_cognition_contract (
209+ falsification_overrides = {
210+ "prediction_before_trial" : "arbitrary_failure_label" ,
211+ }
212+ )
213+ )
214+
215+ report = assess_ix (program , profile = "cognitionkernel-wave6" )
216+ check_ids = {check .check_id for check in report .checks }
217+ missing_checks = [
218+ check
219+ for check in report .checks
220+ if check .check_id
221+ == "cognition_contract.obligation_canonical_falsification.missing"
222+ ]
223+
224+ self .assertEqual (report .status , "fail" )
225+ self .assertIn (
226+ "cognition_contract.obligation_canonical_falsification.missing" ,
227+ check_ids ,
228+ )
229+ self .assertEqual (len (missing_checks ), 1 )
230+ self .assertEqual (missing_checks [0 ].data ["obligation" ], "prediction_before_trial" )
231+ self .assertEqual (
232+ missing_checks [0 ].data ["declared_conditions" ],
233+ ["arbitrary_failure_label" ],
234+ )
235+ self .assertIn ("prediction_missing" , missing_checks [0 ].data ["canonical_conditions" ])
236+
191237 def test_cognition_profile_fails_missing_agi_claim_restriction (self ):
192238 program = parse_ix (
193239 build_cognition_contract (
@@ -302,6 +348,10 @@ def test_cli_assure_json_can_select_cognition_profile(self):
302348 self .assertIn ("cognition_contract.attempt_present" , check_ids )
303349 self .assertIn ("cognition_contract.required_obligations.present" , check_ids )
304350 self .assertIn ("cognition_contract.prohibited_claim_language.absent" , check_ids )
351+ self .assertIn (
352+ "cognition_contract.obligation_canonical_falsification.present" ,
353+ check_ids ,
354+ )
305355
306356 def test_cli_assure_execute_fails_closed_for_cognition_profile (self ):
307357 ix_file = self ._write_ix (VALID_COGNITION_CONTRACT )
0 commit comments