{"abstract":"Wild twos are undervalued in meld points.","category":"Card game rule engines","checks":8,"contract":"Input a meld (cards; \"JK\" joker and deuces are wild). Valid: >= 3 cards, >= 2 naturals of one rank (not threes), at most 3 wild cards. Card points: joker 50, A and 2 20, 8-K 10, 4-7 and black 3 5. A canasta (7+ cards) earns 500 if natural, 300 if mixed. Return [valid|invalid, bonus, card_points].","contract_signature":"x","evaluation_group":"w2-card-game-rule-engines-canasta-meld","failed_approach":"Valuing deuces like jokers overcounts them.","family":"w2-card-game-rule-engines-canasta-meld-deuce-point-value","id":"FA-83831","implementations":{"attempt":{"sha256":"082a8603e52a1dbded20e92a1f1d6c281e6c1c26c53116977b1281f2abea021d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    meld = x\n    wild = [c for c in meld if c == 'JK' or c[0] == '2']\n    nat = [c for c in meld if c not in wild]\n    if len(meld) < 3 or len(nat) < 2 or len(wild) > 3:\n        return ['invalid', 0, 0]\n    if len(set(c[0] for c in nat)) != 1 or nat[0][0] == '3':\n        return ['invalid', 0, 0]\n    def pts(c):\n        if c == 'JK':\n            return 50\n        if c[0] == 'A':\n            return 20\n        if c[0] == '2':\n            return 50\n        if c[0] in '89TJQK':\n            return 10\n        return 5\n    bonus = 0\n    if len(meld) >= 7:\n        bonus = 500 if not wild else 300\n    return ['valid', bonus, sum(pts(c) for c in meld)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[['AH', 'AS', 'AH', 'AH', 'AH', 'AH', '2H'], ['valid', 300, 140]], [['JH', 'JH', 'JC'], ['valid', 0, 30]], [['JK', '2S', '2H', '2D'], ['invalid', 0, 0]], [['2H', '5C', '2D', '2H', '2D'], ['invalid', 0, 0]], [['2H', '2H', '6H', '2S', '6H'], ['valid', 0, 70]], [['AD', 'AC', 'AS', '2S'], ['valid', 0, 80]], [['TH', '2S', 'TS'], ['valid', 0, 40]], [['2H', '6C', '6D', '6D', '6H', '2S'], ['valid', 0, 60]]], [[['JH', 'JH', '2C', 'JS', '2H'], ['valid', 0, 70]], [['KH', 'JK', 'KD', 'JK', 'KH', 'KC'], ['valid', 0, 140]], [[], ['invalid', 0, 0]], [['3S', 'JK', '3H', '3H', '3D', '2S'], ['invalid', 0, 0]], [['2S', '2D', '5H', '2C', '5C', '5D', 'JK', '5D'], ['invalid', 0, 0]], [['TD', 'TH'], ['invalid', 0, 0]], [['8H', '2C', '8H', '2S'], ['valid', 0, 60]], [['2S', 'AH', 'AS', 'AC', 'AD', 'AH', 'AS', 'AD'], ['valid', 300, 160]]], [[['2H', '2H', '6H', '2S', '6H'], ['valid', 0, 70]], [['KD', 'JS', '2C'], ['invalid', 0, 0]], [['2S', 'AH', 'AS', 'AC', 'AD', 'AH', 'AS', 'AD'], ['valid', 300, 160]], [['2D', 'AC', 'AH', 'AH', '2S'], ['valid', 0, 100]], [['7S', '2H'], ['invalid', 0, 0]], [['2S', '2D'], ['invalid', 0, 0]], [['JK', 'KD', 'KS'], ['valid', 0, 70]], [['2C', '6H', '6C', '2S', '6C', '6H', '6C'], ['valid', 300, 65]]], [[['2H', '6C', '6D', '6D', '6H', '2S'], ['valid', 0, 60]], [['AH', 'AS', 'AD', 'JK', 'AC', 'JK', 'AH', 'AC', '2S'], ['valid', 300, 240]], [['8D'], ['invalid', 0, 0]], [['AD', 'AD', 'AD', 'AH', '2S', 'AH'], ['valid', 0, 120]], [['2D', '9C', '9C', '9S', '9D'], ['valid', 0, 60]], [['KH', 'KD', 'KH', 'KS', 'KH'], ['valid', 0, 50]], [['2C', '6H', '6C', '2S', '6C', '6H', '6C'], ['valid', 300, 65]], [['QS', 'QS', '2S', 'QD', 'QS', '2S', 'QS', 'JK', 'QC', 'QD'], ['valid', 300, 160]]], [[['2D', 'AC', 'AH', 'AH', '2S'], ['valid', 0, 100]], [['TD', 'TH', 'TS', 'TD'], ['valid', 0, 40]], [['2D', '5D', 'JK', '2D', '5S'], ['valid', 0, 100]], [['7S', '2H', '7H', '7S', '6S'], ['invalid', 0, 0]], [['2H', 'JK', 'KC', '2H', 'KD', 'KH'], ['valid', 0, 120]], [['2H', 'TS', 'TD', 'JK'], ['valid', 0, 90]], [['QS', 'QS', '2S', 'QD', 'QS', '2S', 'QS', 'JK', 'QC', 'QD'], ['valid', 300, 160]], [['2C', '2D', 'JH', 'JS', '2H'], ['valid', 0, 80]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"meld 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":"01c53b51b25bbb2a5bd56cf96d8c5d2c16e1ec5667562ba1eaea25627e37385f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    meld = x\n    wild = [c for c in meld if c == 'JK' or c[0] == '2']\n    nat = [c for c in meld if c not in wild]\n    if len(meld) < 3 or len(nat) < 2 or len(wild) > 3:\n        return ['invalid', 0, 0]\n    if len(set(c[0] for c in nat)) != 1 or nat[0][0] == '3':\n        return ['invalid', 0, 0]\n    def pts(c):\n        if c == 'JK':\n            return 50\n        if c[0] == 'A':\n            return 20\n        if c[0] in '89TJQK':\n            return 10\n        return 5\n    bonus = 0\n    if len(meld) >= 7:\n        bonus = 500 if not wild else 300\n    return ['valid', bonus, sum(pts(c) for c in meld)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[['AH', 'AS', 'AH', 'AH', 'AH', 'AH', '2H'], ['valid', 300, 140]], [['JH', 'JH', 'JC'], ['valid', 0, 30]], [['JK', '2S', '2H', '2D'], ['invalid', 0, 0]], [['2H', '5C', '2D', '2H', '2D'], ['invalid', 0, 0]], [['2H', '2H', '6H', '2S', '6H'], ['valid', 0, 70]], [['AD', 'AC', 'AS', '2S'], ['valid', 0, 80]], [['TH', '2S', 'TS'], ['valid', 0, 40]], [['2H', '6C', '6D', '6D', '6H', '2S'], ['valid', 0, 60]]], [[['JH', 'JH', '2C', 'JS', '2H'], ['valid', 0, 70]], [['KH', 'JK', 'KD', 'JK', 'KH', 'KC'], ['valid', 0, 140]], [[], ['invalid', 0, 0]], [['3S', 'JK', '3H', '3H', '3D', '2S'], ['invalid', 0, 0]], [['2S', '2D', '5H', '2C', '5C', '5D', 'JK', '5D'], ['invalid', 0, 0]], [['TD', 'TH'], ['invalid', 0, 0]], [['8H', '2C', '8H', '2S'], ['valid', 0, 60]], [['2S', 'AH', 'AS', 'AC', 'AD', 'AH', 'AS', 'AD'], ['valid', 300, 160]]], [[['2H', '2H', '6H', '2S', '6H'], ['valid', 0, 70]], [['KD', 'JS', '2C'], ['invalid', 0, 0]], [['2S', 'AH', 'AS', 'AC', 'AD', 'AH', 'AS', 'AD'], ['valid', 300, 160]], [['2D', 'AC', 'AH', 'AH', '2S'], ['valid', 0, 100]], [['7S', '2H'], ['invalid', 0, 0]], [['2S', '2D'], ['invalid', 0, 0]], [['JK', 'KD', 'KS'], ['valid', 0, 70]], [['2C', '6H', '6C', '2S', '6C', '6H', '6C'], ['valid', 300, 65]]], [[['2H', '6C', '6D', '6D', '6H', '2S'], ['valid', 0, 60]], [['AH', 'AS', 'AD', 'JK', 'AC', 'JK', 'AH', 'AC', '2S'], ['valid', 300, 240]], [['8D'], ['invalid', 0, 0]], [['AD', 'AD', 'AD', 'AH', '2S', 'AH'], ['valid', 0, 120]], [['2D', '9C', '9C', '9S', '9D'], ['valid', 0, 60]], [['KH', 'KD', 'KH', 'KS', 'KH'], ['valid', 0, 50]], [['2C', '6H', '6C', '2S', '6C', '6H', '6C'], ['valid', 300, 65]], [['QS', 'QS', '2S', 'QD', 'QS', '2S', 'QS', 'JK', 'QC', 'QD'], ['valid', 300, 160]]], [[['2D', 'AC', 'AH', 'AH', '2S'], ['valid', 0, 100]], [['TD', 'TH', 'TS', 'TD'], ['valid', 0, 40]], [['2D', '5D', 'JK', '2D', '5S'], ['valid', 0, 100]], [['7S', '2H', '7H', '7S', '6S'], ['invalid', 0, 0]], [['2H', 'JK', 'KC', '2H', 'KD', 'KH'], ['valid', 0, 120]], [['2H', 'TS', 'TD', 'JK'], ['valid', 0, 90]], [['QS', 'QS', '2S', 'QD', 'QS', '2S', 'QS', 'JK', 'QC', 'QD'], ['valid', 300, 160]], [['2C', '2D', 'JH', 'JS', '2H'], ['valid', 0, 80]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"meld 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-canasta-meld-deuce-point-value","generated_at":"2026-09-29T14:50:25.215335+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 aces are valued at 20.","sha256":"64ed46f09735115efaf6d39452086548ba0d5881f795ba86ca4f391de4079376","title":"Deuces count five points · 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.781,"exit_code":1,"observations":[{"actual":["valid",300,170],"check":"meld case 0","expected":["valid",300,140],"passed":false},{"actual":["valid",0,30],"check":"meld case 1","expected":["valid",0,30],"passed":true},{"actual":["invalid",0,0],"check":"meld case 2","expected":["invalid",0,0],"passed":true},{"actual":["invalid",0,0],"check":"meld case 3","expected":["invalid",0,0],"passed":true},{"actual":["valid",0,160],"check":"meld case 4","expected":["valid",0,70],"passed":false},{"actual":["valid",0,110],"check":"meld case 5","expected":["valid",0,80],"passed":false},{"actual":["valid",0,70],"check":"meld case 6","expected":["valid",0,40],"passed":false},{"actual":["valid",0,120],"check":"meld case 7","expected":["valid",0,60],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"meld case 0\", \"actual\": [\"valid\", 300, 170], \"expected\": [\"valid\", 300, 140], \"passed\": false}, {\"check\": \"meld case 1\", \"actual\": [\"valid\", 0, 30], \"expected\": [\"valid\", 0, 30], \"passed\": true}, {\"check\": \"meld case 2\", \"actual\": [\"invalid\", 0, 0], \"expected\": [\"invalid\", 0, 0], \"passed\": true}, {\"check\": \"meld case 3\", \"actual\": [\"invalid\", 0, 0], \"expected\": [\"invalid\", 0, 0], \"passed\": true}, {\"check\": \"meld case 4\", \"actual\": [\"valid\", 0, 160], \"expected\": [\"valid\", 0, 70], \"passed\": false}, {\"check\": \"meld case 5\", \"actual\": [\"valid\", 0, 110], \"expected\": [\"valid\", 0, 80], \"passed\": false}, {\"check\": \"meld case 6\", \"actual\": [\"valid\", 0, 70], \"expected\": [\"valid\", 0, 40], \"passed\": false}, {\"check\": \"meld case 7\", \"actual\": [\"valid\", 0, 120], \"expected\": [\"valid\", 0, 60], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.665,"exit_code":1,"observations":[{"actual":["valid",300,125],"check":"meld case 0","expected":["valid",300,140],"passed":false},{"actual":["valid",0,30],"check":"meld case 1","expected":["valid",0,30],"passed":true},{"actual":["invalid",0,0],"check":"meld case 2","expected":["invalid",0,0],"passed":true},{"actual":["invalid",0,0],"check":"meld case 3","expected":["invalid",0,0],"passed":true},{"actual":["valid",0,25],"check":"meld case 4","expected":["valid",0,70],"passed":false},{"actual":["valid",0,65],"check":"meld case 5","expected":["valid",0,80],"passed":false},{"actual":["valid",0,25],"check":"meld case 6","expected":["valid",0,40],"passed":false},{"actual":["valid",0,30],"check":"meld case 7","expected":["valid",0,60],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"meld case 0\", \"actual\": [\"valid\", 300, 125], \"expected\": [\"valid\", 300, 140], \"passed\": false}, {\"check\": \"meld case 1\", \"actual\": [\"valid\", 0, 30], \"expected\": [\"valid\", 0, 30], \"passed\": true}, {\"check\": \"meld case 2\", \"actual\": [\"invalid\", 0, 0], \"expected\": [\"invalid\", 0, 0], \"passed\": true}, {\"check\": \"meld case 3\", \"actual\": [\"invalid\", 0, 0], \"expected\": [\"invalid\", 0, 0], \"passed\": true}, {\"check\": \"meld case 4\", \"actual\": [\"valid\", 0, 25], \"expected\": [\"valid\", 0, 70], \"passed\": false}, {\"check\": \"meld case 5\", \"actual\": [\"valid\", 0, 65], \"expected\": [\"valid\", 0, 80], \"passed\": false}, {\"check\": \"meld case 6\", \"actual\": [\"valid\", 0, 25], \"expected\": [\"valid\", 0, 40], \"passed\": false}, {\"check\": \"meld case 7\", \"actual\": [\"valid\", 0, 30], \"expected\": [\"valid\", 0, 60], \"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."}}