{"abstract":"A seven cannot be played on a seven of another suit.","category":"Card game rule engines","checks":8,"contract":"Input [card, top_card, declared_suit_or_None]. Eights are always playable. When the top card is an 8 with a declared suit, only that suit (or an 8) may follow. Otherwise match suit or rank. Return a bool.","contract_signature":"x","evaluation_group":"w2-card-game-rule-engines-crazy-eights","failed_approach":"Requiring the identical card only works with duplicate decks.","family":"w2-card-game-rule-engines-crazy-eights-rank-match","id":"FA-83501","implementations":{"attempt":{"sha256":"df5a74e39878e2dea1ec93954e9cd06089871b0dec786ded7818c92b0cd7d0f4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    card, top, declared = x\n    if card[0] == '8':\n        return True\n    if top[0] == '8' and declared:\n        return card[1] == declared\n    return card == top or card[1] == top[1]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[['AH', '6H', None], True], [['7H', '8C', 'C'], False], [['8C', '8S', 'S'], True], [['JD', '8S', None], False], [['8S', '8H', 'S'], True], [['TS', '3H', None], False], [['2H', '2C', None], True], [['QS', 'QD', None], True]], [[['8C', 'JD', None], True], [['6H', 'TC', None], False], [['KC', '6H', None], False], [['2D', '3C', None], False], [['8C', '4D', None], True], [['7C', 'QC', None], True], [['JS', 'JH', None], True], [['JS', 'JH', None], True]], [[['JH', '7C', None], False], [['JS', '8C', 'C'], False], [['3C', '8H', None], False], [['6C', '8S', 'C'], True], [['AH', 'TC', None], False], [['KH', '8H', 'H'], True], [['2H', '2C', None], True], [['QS', 'QD', None], True]], [[['TC', '8C', 'D'], False], [['2H', '2C', None], True], [['6S', '4D', None], False], [['2S', '8C', 'S'], True], [['AC', '8D', 'S'], False], [['8C', '8C', 'H'], True], [['2H', '2C', None], True], [['2H', '2C', None], True]], [[['2H', '2C', None], True], [['JD', '8C', 'H'], False], [['8C', 'AC', None], True], [['8H', '8D', 'C'], True], [['8H', 'TC', None], True], [['TC', '9D', None], False], [['3S', '8H', None], False], [['QS', 'QD', None], True]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"playable 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":"90984f1bd22e2a179cbc71d1f094ad2024a74450a99709646b5a5d3852d6d9e2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    card, top, declared = x\n    if card[0] == '8':\n        return True\n    if top[0] == '8' and declared:\n        return card[1] == declared\n    return card[1] == top[1]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[['AH', '6H', None], True], [['7H', '8C', 'C'], False], [['8C', '8S', 'S'], True], [['JD', '8S', None], False], [['8S', '8H', 'S'], True], [['TS', '3H', None], False], [['2H', '2C', None], True], [['QS', 'QD', None], True]], [[['8C', 'JD', None], True], [['6H', 'TC', None], False], [['KC', '6H', None], False], [['2D', '3C', None], False], [['8C', '4D', None], True], [['7C', 'QC', None], True], [['JS', 'JH', None], True], [['JS', 'JH', None], True]], [[['JH', '7C', None], False], [['JS', '8C', 'C'], False], [['3C', '8H', None], False], [['6C', '8S', 'C'], True], [['AH', 'TC', None], False], [['KH', '8H', 'H'], True], [['2H', '2C', None], True], [['QS', 'QD', None], True]], [[['TC', '8C', 'D'], False], [['2H', '2C', None], True], [['6S', '4D', None], False], [['2S', '8C', 'S'], True], [['AC', '8D', 'S'], False], [['8C', '8C', 'H'], True], [['2H', '2C', None], True], [['2H', '2C', None], True]], [[['2H', '2C', None], True], [['JD', '8C', 'H'], False], [['8C', 'AC', None], True], [['8H', '8D', 'C'], True], [['8H', 'TC', None], True], [['TC', '9D', None], False], [['3S', '8H', None], False], [['QS', 'QD', None], True]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"playable 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-crazy-eights-rank-match","generated_at":"2026-09-29T14:50:22.056038+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.","root_cause":"Only the suit match is tested.","sha256":"6d10f37a9871d395f1f54c83f257e75b5896f917d99b9d317425352899d60733","title":"Matching rank without suit is refused · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":38.52,"exit_code":1,"observations":[{"actual":true,"check":"playable case 0","expected":true,"passed":true},{"actual":false,"check":"playable case 1","expected":false,"passed":true},{"actual":true,"check":"playable case 2","expected":true,"passed":true},{"actual":false,"check":"playable case 3","expected":false,"passed":true},{"actual":true,"check":"playable case 4","expected":true,"passed":true},{"actual":false,"check":"playable case 5","expected":false,"passed":true},{"actual":false,"check":"playable case 6","expected":true,"passed":false},{"actual":false,"check":"playable case 7","expected":true,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"playable case 0\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"playable case 1\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"playable case 2\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"playable case 3\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"playable case 4\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"playable case 5\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"playable case 6\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"playable case 7\", \"actual\": false, \"expected\": true, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.0,"exit_code":1,"observations":[{"actual":true,"check":"playable case 0","expected":true,"passed":true},{"actual":false,"check":"playable case 1","expected":false,"passed":true},{"actual":true,"check":"playable case 2","expected":true,"passed":true},{"actual":false,"check":"playable case 3","expected":false,"passed":true},{"actual":true,"check":"playable case 4","expected":true,"passed":true},{"actual":false,"check":"playable case 5","expected":false,"passed":true},{"actual":false,"check":"playable case 6","expected":true,"passed":false},{"actual":false,"check":"playable case 7","expected":true,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"playable case 0\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"playable case 1\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"playable case 2\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"playable case 3\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"playable case 4\", \"actual\": true, \"expected\": true, \"passed\": true}, {\"check\": \"playable case 5\", \"actual\": false, \"expected\": false, \"passed\": true}, {\"check\": \"playable case 6\", \"actual\": false, \"expected\": true, \"passed\": false}, {\"check\": \"playable case 7\", \"actual\": false, \"expected\": true, \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}