{"abstract":"After an eight declared hearts, the eight own suit is still playable.","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":"Allowing the declared suit or the printed suit still accepts the suit the player abandoned.","family":"w2-card-game-rule-engines-crazy-eights-declared-suit-after-eight","id":"FA-83496","implementations":{"attempt":{"sha256":"7a0011a82c466d09835ff4101147d92cbb506b94cbeac6a4e89cd4acd65ebc12","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 or card[1] == top[1]\n    return card[1] == top[1] or card[0] == top[0]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[['3D', '8D', 'S'], False], [['7H', '8C', 'C'], False], [['8C', '8S', 'S'], True], [['JD', '8S', None], False], [['8S', '8H', 'S'], True], [['TS', '3H', None], False], [['8S', '8D', 'H'], True], [['JS', '8S', 'D'], False]], [[['8C', 'JD', None], True], [['6H', 'TC', None], False], [['KC', '6H', None], False], [['2D', '3C', None], False], [['8C', '4D', None], True], [['7C', 'QC', None], True], [['2S', '8C', 'S'], True], [['9S', '8S', 'H'], False]], [[['3D', '8D', 'S'], False], [['JS', '8C', 'C'], False], [['3C', '8H', None], False], [['6C', '8S', 'C'], True], [['AH', 'TC', None], False], [['KH', '8H', 'H'], True], [['3D', 'AS', None], False], [['9S', '8S', 'H'], False]], [[['TC', '8C', 'D'], False], [['2H', '2C', None], True], [['6S', '4D', None], False], [['2S', '8C', 'S'], True], [['AC', '8D', 'S'], False], [['8C', '8C', 'H'], True], [['4D', '8D', 'S'], False], [['4D', '8D', 'S'], False]], [[['AC', '4D', None], False], [['JD', '8C', 'H'], False], [['8C', 'AC', None], True], [['8H', '8D', 'C'], True], [['8H', 'TC', None], True], [['TC', '9D', None], False], [['7S', '8S', 'D'], False], [['9S', '8D', 'S'], 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":"b8ad5b893d96bce7e54716235ceb5a7963a8e1033fb74e954826cad9bfb35761","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    return card[1] == top[1] or card[0] == top[0]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[['3D', '8D', 'S'], False], [['7H', '8C', 'C'], False], [['8C', '8S', 'S'], True], [['JD', '8S', None], False], [['8S', '8H', 'S'], True], [['TS', '3H', None], False], [['8S', '8D', 'H'], True], [['JS', '8S', 'D'], False]], [[['8C', 'JD', None], True], [['6H', 'TC', None], False], [['KC', '6H', None], False], [['2D', '3C', None], False], [['8C', '4D', None], True], [['7C', 'QC', None], True], [['2S', '8C', 'S'], True], [['9S', '8S', 'H'], False]], [[['3D', '8D', 'S'], False], [['JS', '8C', 'C'], False], [['3C', '8H', None], False], [['6C', '8S', 'C'], True], [['AH', 'TC', None], False], [['KH', '8H', 'H'], True], [['3D', 'AS', None], False], [['9S', '8S', 'H'], False]], [[['TC', '8C', 'D'], False], [['2H', '2C', None], True], [['6S', '4D', None], False], [['2S', '8C', 'S'], True], [['AC', '8D', 'S'], False], [['8C', '8C', 'H'], True], [['4D', '8D', 'S'], False], [['4D', '8D', 'S'], False]], [[['AC', '4D', None], False], [['JD', '8C', 'H'], False], [['8C', 'AC', None], True], [['8H', '8D', 'C'], True], [['8H', 'TC', None], True], [['TC', '9D', None], False], [['7S', '8S', 'D'], False], [['9S', '8D', 'S'], 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-declared-suit-after-eight","generated_at":"2026-09-29T14:50:22.055788+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":"The declared-suit branch is missing.","sha256":"c9b299708f7f8dcbc11b983ce510340883b75aa0185941f82b99b2f16b8ea966","title":"The suit printed on the eight overrides the declared suit · 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":40.927,"exit_code":1,"observations":[{"actual":true,"check":"playable case 0","expected":false,"passed":false},{"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":true,"check":"playable case 6","expected":true,"passed":true},{"actual":true,"check":"playable case 7","expected":false,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"playable case 0\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"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\": true, \"expected\": true, \"passed\": true}, {\"check\": \"playable case 7\", \"actual\": true, \"expected\": false, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.884,"exit_code":1,"observations":[{"actual":true,"check":"playable case 0","expected":false,"passed":false},{"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":true,"check":"playable case 6","expected":true,"passed":true},{"actual":true,"check":"playable case 7","expected":false,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"playable case 0\", \"actual\": true, \"expected\": false, \"passed\": false}, {\"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\": true, \"expected\": true, \"passed\": true}, {\"check\": \"playable case 7\", \"actual\": true, \"expected\": false, \"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."}}