"""The catch engine must fire on the exact cues and stay quiet otherwise.""" from witnessbox.contradictions import ContradictionEngine def test_timeline_catch(): eng = ContradictionEngine() r = eng.detect( "The wire cleared on March 6th — before the board approved it on the 14th.", caught_ids=set(), ) assert r is not None and r.is_catch and r.lie.id == "timeline" def test_authorization_catch(): eng = ContradictionEngine() r = eng.detect( "Anything over $5 million requires the CFO's sign-off — and your credentials are on the authorization log.", caught_ids=set(), ) assert r is not None and r.is_catch and r.lie.id == "authorization" def test_relationship_catch(): eng = ContradictionEngine() r = eng.detect( "You were cc'd on Meridian's incorporation filing two years ago — Dana Voss, your old colleague.", caught_ids=set(), ) assert r is not None and r.is_catch and r.lie.id == "relationship" def test_irrelevant_question_is_not_a_catch(): eng = ContradictionEngine() r = eng.detect("Were you in the office on Tuesday morning?", caught_ids=set()) assert r is None or not r.is_catch def test_partial_authorization_is_not_a_catch(): # Naming the CFO sign-off alone (no policy/log backing) is a near-miss, not a catch. eng = ContradictionEngine() r = eng.detect("Didn't you authorize it yourself?", caught_ids=set()) assert r is not None and not r.is_catch # gate passes, score short def test_already_caught_lie_is_skipped(): eng = ContradictionEngine() r = eng.detect( "The wire cleared on March 6th, before the board approved it on the 14th.", caught_ids={"timeline"}, ) assert r is None or r.lie.id != "timeline"