Skip to content

Commit c35a583

Browse files
authored
Enhance cognition contract with falsification overrides
Added require_cognition_obligation to imports and updated build_cognition_contract to handle falsification overrides.
1 parent 00c3826 commit c35a583

1 file changed

Lines changed: 53 additions & 3 deletions

File tree

tests/test_ix_cognition_assurance_profile.py

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
from ix.assurance import AssuranceProfileRegistry, assess_ix
99
from ix.cli import main
10-
from ix.cognition import cognition_obligation_ids
10+
from ix.cognition import cognition_obligation_ids, require_cognition_obligation
1111
from 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

Comments
 (0)