{"abstract":"Discarding an ace of another suit steals a trick won by a lower card of the led suit.","category":"Card game rule engines","checks":8,"contract":"Input [cards_in_play_order, leader_seat, trump_or_None, seats]. The highest trump wins; with no trump played the highest card of the led suit wins (A high). Off-suit non-trump cards never win. Return the winning seat, counting clockwise from the leader.","evaluation_group":"w2-card-game-rule-engines-trick-winner","failed_approach":"Excluding only the case where a trump is currently winning still lets off-suit discards beat the led suit.","family":"w2-card-game-rule-engines-trick-winner-off-suit-discard-strength","id":"FA-83346","implementations":{"attempt":{"sha256":"6ddb1a3f5833cde6c21fed99d1fc4d0ffecb003a00c3c6bfd600aa4a524b79eb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cards, leader, trump, seats = x\n    order = '23456789TJQKA'\n    best = 0\n    for i in range(1, len(cards)):\n        card, top = cards[i], cards[best]\n        if card[1] == top[1]:\n            if order.index(card[0]) > order.index(top[0]):\n                best = i\n        elif card[1] == trump or top[1] != trump and order.index(card[0]) > order.index(top[0]):\n            best = i\n    return (leader + best) % seats\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[['KD', 'AC', '5D', 'JH'], 2, 'S', 4], 2], [[['KC', 'AC', '8H', '8D'], 2, None, 4], 3], [[['3H', '9S', 'QD', '5H'], 3, 'D', 4], 1], [[['KD', '2H', '9D', '2D', '6C'], 4, None, 5], 4], [[['QH', '4D', 'TS', '5D', '2S'], 4, None, 5], 4], [[['8H', 'TS', '7D', 'JS'], 2, None, 4], 2], [[['8S', 'AD', 'KC'], 0, None, 3], 0], [[['TD', '5D', 'QS', 'AC', 'KS'], 1, None, 5], 1]], [[[['8H', 'TS', '7D', 'JS'], 2, None, 4], 2], [[['9C', '7D', '8D', '2S', 'TD'], 4, 'D', 5], 3], [[['JD', '2H', 'KD', '5D', 'QS'], 0, None, 5], 2], [[['2D', 'QC', '3S', '3H'], 3, 'S', 4], 1], [[['5C', '6H', '3C', 'AC'], 2, 'D', 4], 1], [[['4D', '6S', 'TH'], 2, 'D', 3], 2], [[['9H', 'KS', '7S', '9C'], 0, 'D', 4], 0], [[['2S', '3C', '9S', 'KH'], 2, None, 4], 0]], [[[['4D', '6S', 'TH'], 2, 'D', 3], 2], [[['5D', 'AD', '8H'], 1, None, 3], 2], [[['TD', '5D', 'QS', 'AC', 'KS'], 1, None, 5], 1], [[['8H', 'QC', 'JS'], 2, 'C', 3], 0], [[['KC', '6C', '4S'], 0, 'D', 3], 0], [[['3S', '6C', 'QS'], 0, 'S', 3], 2], [[['JH', '5H', 'JS'], 2, None, 3], 2], [[['9S', 'QD', '4S'], 2, 'C', 3], 2]], [[[['8S', '5S', 'KS'], 2, 'H', 3], 1], [[['3D', 'QD', '8S', '6D', 'TS'], 2, None, 5], 3], [[['6D', '2H', '4D', '5S', '7S'], 4, 'H', 5], 0], [[['8C', '5H', '6H', '9C'], 2, None, 4], 1], [[['AH', 'TD', '4H', '3S', 'KD'], 1, None, 5], 1], [[['6H', 'AS', '7H', 'JD'], 2, 'D', 4], 1], [[['7H', '3C', '6D', '5C'], 3, 'H', 4], 3], [[['TH', '8D', 'TD', 'JD'], 2, 'C', 4], 2]], [[[['7S', '4S', '8D'], 1, 'S', 3], 1], [[['3S', 'JS', 'TC', '5D', '3H'], 2, 'D', 5], 0], [[['9H', '6H', '3D'], 1, 'S', 3], 1], [[['3H', '8D', '3C'], 0, 'H', 3], 0], [[['AD', 'JH', '8D', '5D'], 1, 'H', 4], 2], [[['8C', '8S', 'AC'], 1, None, 3], 0], [[['6D', 'AS', 'AD'], 1, 'H', 3], 0], [[['6S', 'TD', '6H'], 1, 'C', 3], 1]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"trick case %d\" % i, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"1ab3f566128df4129482d347c9b833831754ae64f4db384dc01dc0e360103733","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cards, leader, trump, seats = x\n    order = '23456789TJQKA'\n    best = 0\n    for i in range(1, len(cards)):\n        card, top = cards[i], cards[best]\n        if card[1] == top[1]:\n            if order.index(card[0]) > order.index(top[0]):\n                best = i\n        elif card[1] == trump or order.index(card[0]) > order.index(top[0]):\n            best = i\n    return (leader + best) % seats\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[['KD', 'AC', '5D', 'JH'], 2, 'S', 4], 2], [[['KC', 'AC', '8H', '8D'], 2, None, 4], 3], [[['3H', '9S', 'QD', '5H'], 3, 'D', 4], 1], [[['KD', '2H', '9D', '2D', '6C'], 4, None, 5], 4], [[['QH', '4D', 'TS', '5D', '2S'], 4, None, 5], 4], [[['8H', 'TS', '7D', 'JS'], 2, None, 4], 2], [[['8S', 'AD', 'KC'], 0, None, 3], 0], [[['TD', '5D', 'QS', 'AC', 'KS'], 1, None, 5], 1]], [[[['8H', 'TS', '7D', 'JS'], 2, None, 4], 2], [[['9C', '7D', '8D', '2S', 'TD'], 4, 'D', 5], 3], [[['JD', '2H', 'KD', '5D', 'QS'], 0, None, 5], 2], [[['2D', 'QC', '3S', '3H'], 3, 'S', 4], 1], [[['5C', '6H', '3C', 'AC'], 2, 'D', 4], 1], [[['4D', '6S', 'TH'], 2, 'D', 3], 2], [[['9H', 'KS', '7S', '9C'], 0, 'D', 4], 0], [[['2S', '3C', '9S', 'KH'], 2, None, 4], 0]], [[[['4D', '6S', 'TH'], 2, 'D', 3], 2], [[['5D', 'AD', '8H'], 1, None, 3], 2], [[['TD', '5D', 'QS', 'AC', 'KS'], 1, None, 5], 1], [[['8H', 'QC', 'JS'], 2, 'C', 3], 0], [[['KC', '6C', '4S'], 0, 'D', 3], 0], [[['3S', '6C', 'QS'], 0, 'S', 3], 2], [[['JH', '5H', 'JS'], 2, None, 3], 2], [[['9S', 'QD', '4S'], 2, 'C', 3], 2]], [[[['8S', '5S', 'KS'], 2, 'H', 3], 1], [[['3D', 'QD', '8S', '6D', 'TS'], 2, None, 5], 3], [[['6D', '2H', '4D', '5S', '7S'], 4, 'H', 5], 0], [[['8C', '5H', '6H', '9C'], 2, None, 4], 1], [[['AH', 'TD', '4H', '3S', 'KD'], 1, None, 5], 1], [[['6H', 'AS', '7H', 'JD'], 2, 'D', 4], 1], [[['7H', '3C', '6D', '5C'], 3, 'H', 4], 3], [[['TH', '8D', 'TD', 'JD'], 2, 'C', 4], 2]], [[[['7S', '4S', '8D'], 1, 'S', 3], 1], [[['3S', 'JS', 'TC', '5D', '3H'], 2, 'D', 5], 0], [[['9H', '6H', '3D'], 1, 'S', 3], 1], [[['3H', '8D', '3C'], 0, 'H', 3], 0], [[['AD', 'JH', '8D', '5D'], 1, 'H', 4], 2], [[['8C', '8S', 'AC'], 1, None, 3], 0], [[['6D', 'AS', 'AD'], 1, 'H', 3], 0], [[['6S', 'TD', '6H'], 1, 'C', 3], 1]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"trick case %d\" % i, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"3667658441c1238ef80a472a08d519eead1d6edc4314f3d31d12e8f09e440211","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cards, leader, trump, seats = x\n    order = '23456789TJQKA'\n    best = 0\n    for i in range(1, len(cards)):\n        card, top = cards[i], cards[best]\n        if card[1] == top[1]:\n            if order.index(card[0]) > order.index(top[0]):\n                best = i\n        elif card[1] == trump:\n            best = i\n    return (leader + best) % seats\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[['KD', 'AC', '5D', 'JH'], 2, 'S', 4], 2], [[['KC', 'AC', '8H', '8D'], 2, None, 4], 3], [[['3H', '9S', 'QD', '5H'], 3, 'D', 4], 1], [[['KD', '2H', '9D', '2D', '6C'], 4, None, 5], 4], [[['QH', '4D', 'TS', '5D', '2S'], 4, None, 5], 4], [[['8H', 'TS', '7D', 'JS'], 2, None, 4], 2], [[['8S', 'AD', 'KC'], 0, None, 3], 0], [[['TD', '5D', 'QS', 'AC', 'KS'], 1, None, 5], 1]], [[[['8H', 'TS', '7D', 'JS'], 2, None, 4], 2], [[['9C', '7D', '8D', '2S', 'TD'], 4, 'D', 5], 3], [[['JD', '2H', 'KD', '5D', 'QS'], 0, None, 5], 2], [[['2D', 'QC', '3S', '3H'], 3, 'S', 4], 1], [[['5C', '6H', '3C', 'AC'], 2, 'D', 4], 1], [[['4D', '6S', 'TH'], 2, 'D', 3], 2], [[['9H', 'KS', '7S', '9C'], 0, 'D', 4], 0], [[['2S', '3C', '9S', 'KH'], 2, None, 4], 0]], [[[['4D', '6S', 'TH'], 2, 'D', 3], 2], [[['5D', 'AD', '8H'], 1, None, 3], 2], [[['TD', '5D', 'QS', 'AC', 'KS'], 1, None, 5], 1], [[['8H', 'QC', 'JS'], 2, 'C', 3], 0], [[['KC', '6C', '4S'], 0, 'D', 3], 0], [[['3S', '6C', 'QS'], 0, 'S', 3], 2], [[['JH', '5H', 'JS'], 2, None, 3], 2], [[['9S', 'QD', '4S'], 2, 'C', 3], 2]], [[[['8S', '5S', 'KS'], 2, 'H', 3], 1], [[['3D', 'QD', '8S', '6D', 'TS'], 2, None, 5], 3], [[['6D', '2H', '4D', '5S', '7S'], 4, 'H', 5], 0], [[['8C', '5H', '6H', '9C'], 2, None, 4], 1], [[['AH', 'TD', '4H', '3S', 'KD'], 1, None, 5], 1], [[['6H', 'AS', '7H', 'JD'], 2, 'D', 4], 1], [[['7H', '3C', '6D', '5C'], 3, 'H', 4], 3], [[['TH', '8D', 'TD', 'JD'], 2, 'C', 4], 2]], [[[['7S', '4S', '8D'], 1, 'S', 3], 1], [[['3S', 'JS', 'TC', '5D', '3H'], 2, 'D', 5], 0], [[['9H', '6H', '3D'], 1, 'S', 3], 1], [[['3H', '8D', '3C'], 0, 'H', 3], 0], [[['AD', 'JH', '8D', '5D'], 1, 'H', 4], 2], [[['8C', '8S', 'AC'], 1, None, 3], 0], [[['6D', 'AS', 'AD'], 1, 'H', 3], 0], [[['6S', 'TD', '6H'], 1, 'C', 3], 1]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"trick case %d\" % i, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A bounded toy rule contract stated explicitly in the contract field; cards are two-character codes (rank, suit). Not a complete implementation of any published rulebook or casino table rules. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-card-game-rule-engines-trick-winner-off-suit-discard-strength","generated_at":"2026-09-29T14:50:20.691444+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Card-game engines, scoring apps and online tables apply this rule automatically on every hand.","repair":"Only a card of the current winning suit or a first trump can take over.","root_cause":"Cards of a different non-trump suit are compared by rank.","sha256":"7aa16f2d0aa333b46efeccc50e0d05ff7512d3510bbf4f2857c2237d987962fb","title":"A high off-suit discard wins the trick · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.475,"exit_code":1,"observations":[{"actual":3,"check":"trick case 0","expected":2,"passed":false},{"actual":3,"check":"trick case 1","expected":3,"passed":true},{"actual":1,"check":"trick case 2","expected":1,"passed":true},{"actual":4,"check":"trick case 3","expected":4,"passed":true},{"actual":4,"check":"trick case 4","expected":4,"passed":true},{"actual":1,"check":"trick case 5","expected":2,"passed":false},{"actual":1,"check":"trick case 6","expected":0,"passed":false},{"actual":4,"check":"trick case 7","expected":1,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trick case 0\", \"actual\": 3, \"expected\": 2, \"passed\": false}, {\"check\": \"trick case 1\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"trick case 2\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"trick case 3\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"trick case 4\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"trick case 5\", \"actual\": 1, \"expected\": 2, \"passed\": false}, {\"check\": \"trick case 6\", \"actual\": 1, \"expected\": 0, \"passed\": false}, {\"check\": \"trick case 7\", \"actual\": 4, \"expected\": 1, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.406,"exit_code":1,"observations":[{"actual":3,"check":"trick case 0","expected":2,"passed":false},{"actual":3,"check":"trick case 1","expected":3,"passed":true},{"actual":1,"check":"trick case 2","expected":1,"passed":true},{"actual":4,"check":"trick case 3","expected":4,"passed":true},{"actual":4,"check":"trick case 4","expected":4,"passed":true},{"actual":1,"check":"trick case 5","expected":2,"passed":false},{"actual":1,"check":"trick case 6","expected":0,"passed":false},{"actual":4,"check":"trick case 7","expected":1,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trick case 0\", \"actual\": 3, \"expected\": 2, \"passed\": false}, {\"check\": \"trick case 1\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"trick case 2\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"trick case 3\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"trick case 4\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"trick case 5\", \"actual\": 1, \"expected\": 2, \"passed\": false}, {\"check\": \"trick case 6\", \"actual\": 1, \"expected\": 0, \"passed\": false}, {\"check\": \"trick case 7\", \"actual\": 4, \"expected\": 1, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.665,"exit_code":0,"observations":[{"actual":2,"check":"trick case 0","expected":2,"passed":true},{"actual":3,"check":"trick case 1","expected":3,"passed":true},{"actual":1,"check":"trick case 2","expected":1,"passed":true},{"actual":4,"check":"trick case 3","expected":4,"passed":true},{"actual":4,"check":"trick case 4","expected":4,"passed":true},{"actual":2,"check":"trick case 5","expected":2,"passed":true},{"actual":0,"check":"trick case 6","expected":0,"passed":true},{"actual":1,"check":"trick case 7","expected":1,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"trick case 0\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"trick case 1\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"trick case 2\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"trick case 3\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"trick case 4\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"trick case 5\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"trick case 6\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"trick case 7\", \"actual\": 1, \"expected\": 1, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}