{"abstract":"5S cannot be played over 5D.","category":"Card game rule engines","checks":8,"contract":"Input [current_combination, play]. Ranks 3 low to 2 high; suits D<C<H<S. A play is 1-3 cards of one rank. On an empty table any valid play is \"ok\"; otherwise it must have the same size and its highest card must outrank the current highest card (rank, then suit). Empty play is \"pass\". Return \"ok\", \"invalid\" or \"pass\".","evaluation_group":"w2-card-game-rule-engines-big-two","failed_approach":"Alphabetical suit order puts clubs below diamonds.","family":"w2-card-game-rule-engines-big-two-suit-tiebreak","id":"FA-83741","implementations":{"attempt":{"sha256":"6932d6b7f88891cc6da012ee7c2d8c8bea029ba4b5c2f718ef4816e18cba2a9a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cur, play = x\n    order = '3456789TJQKA2'\n    suits = 'CDHS'\n    def key(c):\n        return (order.index(c[0]), suits.index(c[1]))\n    if not play:\n        return 'pass'\n    if len(set(c[0] for c in play)) != 1 or len(play) > 3:\n        return 'invalid'\n    if not cur:\n        return 'ok'\n    if len(play) != len(cur):\n        return 'invalid'\n    if max(key(c) for c in play) > max(key(c) for c in cur):\n        return 'ok'\n    return 'invalid'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[], ['KD']], 'ok'], [[['KC', 'KD'], ['KH', 'KS']], 'ok'], [[['8S', '8C', '8H'], ['KD', 'KC', 'KS']], 'ok'], [[['6S'], ['6H']], 'invalid'], [[['9C'], ['6S']], 'invalid'], [[[], ['3H', '3S', '3C']], 'ok'], [[['7D'], ['7S']], 'ok'], [[['9C'], ['9D']], 'invalid']], [[[['8D', '8H'], ['8S', '8D', '8H', '8C']], 'invalid'], [[['AS'], ['AH', 'AC', 'AD']], 'invalid'], [[[], ['3C']], 'ok'], [[['QD'], ['QH']], 'ok'], [[['JD', 'JS'], ['TD', 'TS', 'TC', 'TH']], 'invalid'], [[['9S', '9H'], ['8S', '8C']], 'invalid'], [[['3C', '3H'], ['3S', '3D']], 'ok'], [[['KC'], ['KD']], 'invalid']], [[[['9D', '9C'], ['9D', '9C']], 'invalid'], [[['KD'], ['AH']], 'ok'], [[[], ['KS', 'KD']], 'ok'], [[['JC'], ['7C']], 'invalid'], [[['5S'], ['5H']], 'invalid'], [[['2S'], ['5D']], 'invalid'], [[['2H'], ['2S']], 'ok'], [[['5C'], ['5D']], 'invalid']], [[[['JH', 'JC'], ['JC', 'JS']], 'ok'], [[['7C'], ['2D']], 'ok'], [[['2H'], ['2H']], 'invalid'], [[['TH', 'TD'], ['8D', '2S']], 'invalid'], [[['5H', '5D'], ['JS', 'JC']], 'ok'], [[[], ['QC', 'QH']], 'ok'], [[['TD'], ['TS']], 'ok'], [[['9C'], ['9D']], 'invalid']], [[[['6C', '6H'], ['AH', '4D']], 'invalid'], [[['3D', '3H', '3C'], ['3S', '3D', '3H', 'AC']], 'invalid'], [[['5S'], ['3S']], 'invalid'], [[['9C'], ['9C']], 'invalid'], [[['7C', '7S', '7D'], ['3D', '3S', '3C']], 'invalid'], [[['3H', '3C'], ['3D', '3C', '3S', '3H']], 'invalid'], [[['9D', '9H', '9C'], ['9D', '9H', '9S']], 'ok'], [[['8D'], ['8C']], 'ok']]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"play 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":"a0ae6016fe35b453291c9475fd3e7f74d845b325014cff30320f8c0a45284013","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cur, play = x\n    order = '3456789TJQKA2'\n    suits = 'DCHS'\n    def key(c):\n        return order.index(c[0])\n    if not play:\n        return 'pass'\n    if len(set(c[0] for c in play)) != 1 or len(play) > 3:\n        return 'invalid'\n    if not cur:\n        return 'ok'\n    if len(play) != len(cur):\n        return 'invalid'\n    if max(key(c) for c in play) > max(key(c) for c in cur):\n        return 'ok'\n    return 'invalid'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[], ['KD']], 'ok'], [[['KC', 'KD'], ['KH', 'KS']], 'ok'], [[['8S', '8C', '8H'], ['KD', 'KC', 'KS']], 'ok'], [[['6S'], ['6H']], 'invalid'], [[['9C'], ['6S']], 'invalid'], [[[], ['3H', '3S', '3C']], 'ok'], [[['7D'], ['7S']], 'ok'], [[['9C'], ['9D']], 'invalid']], [[[['8D', '8H'], ['8S', '8D', '8H', '8C']], 'invalid'], [[['AS'], ['AH', 'AC', 'AD']], 'invalid'], [[[], ['3C']], 'ok'], [[['QD'], ['QH']], 'ok'], [[['JD', 'JS'], ['TD', 'TS', 'TC', 'TH']], 'invalid'], [[['9S', '9H'], ['8S', '8C']], 'invalid'], [[['3C', '3H'], ['3S', '3D']], 'ok'], [[['KC'], ['KD']], 'invalid']], [[[['9D', '9C'], ['9D', '9C']], 'invalid'], [[['KD'], ['AH']], 'ok'], [[[], ['KS', 'KD']], 'ok'], [[['JC'], ['7C']], 'invalid'], [[['5S'], ['5H']], 'invalid'], [[['2S'], ['5D']], 'invalid'], [[['2H'], ['2S']], 'ok'], [[['5C'], ['5D']], 'invalid']], [[[['JH', 'JC'], ['JC', 'JS']], 'ok'], [[['7C'], ['2D']], 'ok'], [[['2H'], ['2H']], 'invalid'], [[['TH', 'TD'], ['8D', '2S']], 'invalid'], [[['5H', '5D'], ['JS', 'JC']], 'ok'], [[[], ['QC', 'QH']], 'ok'], [[['TD'], ['TS']], 'ok'], [[['9C'], ['9D']], 'invalid']], [[[['6C', '6H'], ['AH', '4D']], 'invalid'], [[['3D', '3H', '3C'], ['3S', '3D', '3H', 'AC']], 'invalid'], [[['5S'], ['3S']], 'invalid'], [[['9C'], ['9C']], 'invalid'], [[['7C', '7S', '7D'], ['3D', '3S', '3C']], 'invalid'], [[['3H', '3C'], ['3D', '3C', '3S', '3H']], 'invalid'], [[['9D', '9H', '9C'], ['9D', '9H', '9S']], 'ok'], [[['8D'], ['8C']], 'ok']]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"play 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":"331ad83e34e8f386b63d8f2a9b472acc3a79324c9fded1044a5a8dde4bf7eb1b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cur, play = x\n    order = '3456789TJQKA2'\n    suits = 'DCHS'\n    def key(c):\n        return (order.index(c[0]), suits.index(c[1]))\n    if not play:\n        return 'pass'\n    if len(set(c[0] for c in play)) != 1 or len(play) > 3:\n        return 'invalid'\n    if not cur:\n        return 'ok'\n    if len(play) != len(cur):\n        return 'invalid'\n    if max(key(c) for c in play) > max(key(c) for c in cur):\n        return 'ok'\n    return 'invalid'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[], ['KD']], 'ok'], [[['KC', 'KD'], ['KH', 'KS']], 'ok'], [[['8S', '8C', '8H'], ['KD', 'KC', 'KS']], 'ok'], [[['6S'], ['6H']], 'invalid'], [[['9C'], ['6S']], 'invalid'], [[[], ['3H', '3S', '3C']], 'ok'], [[['7D'], ['7S']], 'ok'], [[['9C'], ['9D']], 'invalid']], [[[['8D', '8H'], ['8S', '8D', '8H', '8C']], 'invalid'], [[['AS'], ['AH', 'AC', 'AD']], 'invalid'], [[[], ['3C']], 'ok'], [[['QD'], ['QH']], 'ok'], [[['JD', 'JS'], ['TD', 'TS', 'TC', 'TH']], 'invalid'], [[['9S', '9H'], ['8S', '8C']], 'invalid'], [[['3C', '3H'], ['3S', '3D']], 'ok'], [[['KC'], ['KD']], 'invalid']], [[[['9D', '9C'], ['9D', '9C']], 'invalid'], [[['KD'], ['AH']], 'ok'], [[[], ['KS', 'KD']], 'ok'], [[['JC'], ['7C']], 'invalid'], [[['5S'], ['5H']], 'invalid'], [[['2S'], ['5D']], 'invalid'], [[['2H'], ['2S']], 'ok'], [[['5C'], ['5D']], 'invalid']], [[[['JH', 'JC'], ['JC', 'JS']], 'ok'], [[['7C'], ['2D']], 'ok'], [[['2H'], ['2H']], 'invalid'], [[['TH', 'TD'], ['8D', '2S']], 'invalid'], [[['5H', '5D'], ['JS', 'JC']], 'ok'], [[[], ['QC', 'QH']], 'ok'], [[['TD'], ['TS']], 'ok'], [[['9C'], ['9D']], 'invalid']], [[[['6C', '6H'], ['AH', '4D']], 'invalid'], [[['3D', '3H', '3C'], ['3S', '3D', '3H', 'AC']], 'invalid'], [[['5S'], ['3S']], 'invalid'], [[['9C'], ['9C']], 'invalid'], [[['7C', '7S', '7D'], ['3D', '3S', '3C']], 'invalid'], [[['3H', '3C'], ['3D', '3C', '3S', '3H']], 'invalid'], [[['9D', '9H', '9C'], ['9D', '9H', '9S']], 'ok'], [[['8D'], ['8C']], 'ok']]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"play 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-big-two-suit-tiebreak","generated_at":"2026-09-29T14:50:24.536146+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":"Break rank ties by suit D<C<H<S.","root_cause":"The comparison key ignores suits.","sha256":"17d046ee1754bac07e25ad1960a2312415e9cb6b87e058d40b0ab7f93af9b878","title":"Same-rank plays cannot beat each other by suit · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.713,"exit_code":1,"observations":[{"actual":"ok","check":"play case 0","expected":"ok","passed":true},{"actual":"ok","check":"play case 1","expected":"ok","passed":true},{"actual":"ok","check":"play case 2","expected":"ok","passed":true},{"actual":"invalid","check":"play case 3","expected":"invalid","passed":true},{"actual":"invalid","check":"play case 4","expected":"invalid","passed":true},{"actual":"ok","check":"play case 5","expected":"ok","passed":true},{"actual":"ok","check":"play case 6","expected":"ok","passed":true},{"actual":"ok","check":"play case 7","expected":"invalid","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"play case 0\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 1\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 2\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 3\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"play case 4\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"play case 5\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 6\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 7\", \"actual\": \"ok\", \"expected\": \"invalid\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.141,"exit_code":1,"observations":[{"actual":"ok","check":"play case 0","expected":"ok","passed":true},{"actual":"invalid","check":"play case 1","expected":"ok","passed":false},{"actual":"ok","check":"play case 2","expected":"ok","passed":true},{"actual":"invalid","check":"play case 3","expected":"invalid","passed":true},{"actual":"invalid","check":"play case 4","expected":"invalid","passed":true},{"actual":"ok","check":"play case 5","expected":"ok","passed":true},{"actual":"invalid","check":"play case 6","expected":"ok","passed":false},{"actual":"invalid","check":"play case 7","expected":"invalid","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"play case 0\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 1\", \"actual\": \"invalid\", \"expected\": \"ok\", \"passed\": false}, {\"check\": \"play case 2\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 3\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"play case 4\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"play case 5\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 6\", \"actual\": \"invalid\", \"expected\": \"ok\", \"passed\": false}, {\"check\": \"play case 7\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":42.146,"exit_code":0,"observations":[{"actual":"ok","check":"play case 0","expected":"ok","passed":true},{"actual":"ok","check":"play case 1","expected":"ok","passed":true},{"actual":"ok","check":"play case 2","expected":"ok","passed":true},{"actual":"invalid","check":"play case 3","expected":"invalid","passed":true},{"actual":"invalid","check":"play case 4","expected":"invalid","passed":true},{"actual":"ok","check":"play case 5","expected":"ok","passed":true},{"actual":"ok","check":"play case 6","expected":"ok","passed":true},{"actual":"invalid","check":"play case 7","expected":"invalid","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"play case 0\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 1\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 2\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 3\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"play case 4\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"play case 5\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 6\", \"actual\": \"ok\", \"expected\": \"ok\", \"passed\": true}, {\"check\": \"play case 7\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}