{"abstract":"2-3-4-5-6 suited beats a nine-low flush.","category":"Poker hand evaluation","checks":8,"contract":"Input: [hand_a, hand_b] five distinct cards each. Deuce-to-seven lowball: aces are always high, A-2-3-4-5 is not a straight, straights and flushes count against the hand, and the standard high-hand ordering is inverted so the weaker high hand wins. Return 1 if hand_a wins, -1 if hand_b wins, 0 for a tie.","contract_signature":"x","evaluation_group":"w2-poker_hand_evaluation-deuce-to-seven-lowball","failed_approach":"Mapping it to flush still ranks it below full houses and quads.","family":"w2-poker_hand_evaluation-deuce-to-seven-lowball-straight-flush-category","id":"FA-82086","implementations":{"attempt":{"sha256":"1ca5a355366c3d1a4a4c6fee8da529c4086ff507889864a899d476287bb56f2d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport collections\nN = 1\nobservations = []\ndef solve(x):\n    R='23456789TJQKA'\n    def key(h):\n        vals=sorted((R.index(c[0])+2 for c in h), reverse=True)\n        cnt=collections.Counter(vals)\n        order=sorted(cnt, key=lambda v:(cnt[v],v), reverse=True)\n        shape=sorted(cnt.values(), reverse=True)\n        straight=len(cnt)==5 and vals[0]-vals[4]==4\n        flush=len({c[1] for c in h})==1\n        if straight and flush: return (5,vals)\n        if shape==[4,1]: return (7,order)\n        if shape==[3,2]: return (6,order)\n        if flush: return (5,vals)\n        if straight: return (4,vals)\n        if shape==[3,1,1]: return (3,order)\n        if shape==[2,2,1]: return (2,order)\n        if shape==[2,1,1,1]: return (1,order)\n        return (0,vals)\n    ka,kb=key(x[0]),key(x[1])\n    if ka==kb: return 0\n    return 1 if ka<kb else -1\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('number one vs wheel', [['7h', '5d', '4c', '3s', '2h'], ['Ah', '2d', '3c', '4s', '5h']], 1),\n  ('wheel is ace high', [['Ah', '2d', '3c', '4s', '5h'], ['Kh', 'Qd', 'Jc', '9s', '8h']], -1),\n  ('seven low vs eight low', [['8h', '6d', '4c', '3s', '2h'], ['7c', '6h', '4d', '3c', '2d']], -1),\n  ('flush counts against', [['2h', '4h', '5h', '6h', '8h'], ['9c', '6d', '4d', '3c', '2d']], -1),\n  ('straight counts against', [['3h', '4d', '5c', '6s', '7h'], ['Kh', 'Qd', 'Jc', '9s', '7c']], -1),\n  ('pair loses to king high', [['2h', '2d', '4c', '5s', '7h'], ['Kh', '8d', '6c', '4s', '3h']], -1),\n  ('ace-king gap hand', [['Ah', 'Kd', '7c', '4s', '2h'], ['Qh', 'Jd', 'Tc', '8s', '6h']], -1),\n  ('straight flush vs flush', [['2c', '3c', '4c', '5c', '6c'], ['9d', '7d', '5d', '3d', '2d']],\n   -1)],\n [('flush counts against', [['2h', '4h', '5h', '6h', '8h'], ['9c', '6d', '4d', '3c', '2d']], -1),\n  ('straight counts against', [['3h', '4d', '5c', '6s', '7h'], ['Kh', 'Qd', 'Jc', '9s', '7c']], -1),\n  ('pair loses to king high', [['2h', '2d', '4c', '5s', '7h'], ['Kh', '8d', '6c', '4s', '3h']], -1),\n  ('ace-king gap hand', [['Ah', 'Kd', '7c', '4s', '2h'], ['Qh', 'Jd', 'Tc', '8s', '6h']], -1),\n  ('straight flush vs flush', [['2c', '3c', '4c', '5c', '6c'], ['9d', '7d', '5d', '3d', '2d']], -1),\n  ('tie', [['7h', '5d', '4c', '3s', '2h'], ['7c', '5h', '4d', '3c', '2d']], 0),\n  ('ace high vs pair', [['Ah', 'Qd', '9c', '7s', '5h'], ['3h', '3d', '6c', '5s', '4h']], 1),\n  ('both pairs lower pair wins', [['4h', '4d', 'Kc', 'Qs', 'Jh'], ['5h', '5d', '2c', '3s', '7h']],\n   1)],\n [('ace-king gap hand', [['Ah', 'Kd', '7c', '4s', '2h'], ['Qh', 'Jd', 'Tc', '8s', '6h']], -1),\n  ('straight flush vs flush', [['2c', '3c', '4c', '5c', '6c'], ['9d', '7d', '5d', '3d', '2d']], -1),\n  ('tie', [['7h', '5d', '4c', '3s', '2h'], ['7c', '5h', '4d', '3c', '2d']], 0),\n  ('ace high vs pair', [['Ah', 'Qd', '9c', '7s', '5h'], ['3h', '3d', '6c', '5s', '4h']], 1),\n  ('both pairs lower pair wins', [['4h', '4d', 'Kc', 'Qs', 'Jh'], ['5h', '5d', '2c', '3s', '7h']],\n   1),\n  ('wheel vs pair', [['Ah', '2d', '3c', '4s', '5h'], ['3h', '3d', '6c', '8s', '9h']], 1),\n  ('ace-deuce span vs pair', [['Ah', 'Jd', '8c', '6s', '2h'], ['4h', '4d', '6d', '8d', '9s']], 1),\n  ('ace high vs king high', [['Ah', '9d', '7c', '4s', '2h'], ['Kh', 'Qd', 'Jc', '9s', '8c']], -1)],\n [('number one vs wheel', [['7h', '5d', '4c', '3s', '2h'], ['Ah', '2d', '3c', '4s', '5h']], 1),\n  ('straight flush vs flush', [['2c', '3c', '4c', '5c', '6c'], ['9d', '7d', '5d', '3d', '2d']], -1),\n  ('both pairs lower pair wins', [['4h', '4d', 'Kc', 'Qs', 'Jh'], ['5h', '5d', '2c', '3s', '7h']],\n   1),\n  ('wheel vs pair', [['Ah', '2d', '3c', '4s', '5h'], ['3h', '3d', '6c', '8s', '9h']], 1),\n  ('ace-deuce span vs pair', [['Ah', 'Jd', '8c', '6s', '2h'], ['4h', '4d', '6d', '8d', '9s']], 1),\n  ('ace high vs king high', [['Ah', '9d', '7c', '4s', '2h'], ['Kh', 'Qd', 'Jc', '9s', '8c']], -1),\n  ('second tie', [['Kh', 'Jd', '9c', '6s', '3h'], ['Kc', 'Jh', '9d', '6c', '3d']], 0),\n  ('nine vs ten', [['9h', '7d', '5c', '3s', '2h'], ['Th', '4d', '3c', '6s', '2c']], 1)],\n [('number one vs wheel', [['7h', '5d', '4c', '3s', '2h'], ['Ah', '2d', '3c', '4s', '5h']], 1),\n  ('wheel is ace high', [['Ah', '2d', '3c', '4s', '5h'], ['Kh', 'Qd', 'Jc', '9s', '8h']], -1),\n  ('seven low vs eight low', [['8h', '6d', '4c', '3s', '2h'], ['7c', '6h', '4d', '3c', '2d']], -1),\n  ('flush counts against', [['2h', '4h', '5h', '6h', '8h'], ['9c', '6d', '4d', '3c', '2d']], -1),\n  ('straight flush vs flush', [['2c', '3c', '4c', '5c', '6c'], ['9d', '7d', '5d', '3d', '2d']], -1),\n  ('ace high vs king high', [['Ah', '9d', '7c', '4s', '2h'], ['Kh', 'Qd', 'Jc', '9s', '8c']], -1),\n  ('second tie', [['Kh', 'Jd', '9c', '6s', '3h'], ['Kc', 'Jh', '9d', '6c', '3d']], 0),\n  ('nine vs ten', [['9h', '7d', '5c', '3s', '2h'], ['Th', '4d', '3c', '6s', '2c']], 1)]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'error:' + type(exc).__name__\n    check(label, actual, 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":"86a30fba773d15f4b471d74fcf0c53e3095ae8204696a391d2f29c30cffd63cd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport collections\nN = 1\nobservations = []\ndef solve(x):\n    R='23456789TJQKA'\n    def key(h):\n        vals=sorted((R.index(c[0])+2 for c in h), reverse=True)\n        cnt=collections.Counter(vals)\n        order=sorted(cnt, key=lambda v:(cnt[v],v), reverse=True)\n        shape=sorted(cnt.values(), reverse=True)\n        straight=len(cnt)==5 and vals[0]-vals[4]==4\n        flush=len({c[1] for c in h})==1\n        if straight and flush: return (4,vals)\n        if shape==[4,1]: return (7,order)\n        if shape==[3,2]: return (6,order)\n        if flush: return (5,vals)\n        if straight: return (4,vals)\n        if shape==[3,1,1]: return (3,order)\n        if shape==[2,2,1]: return (2,order)\n        if shape==[2,1,1,1]: return (1,order)\n        return (0,vals)\n    ka,kb=key(x[0]),key(x[1])\n    if ka==kb: return 0\n    return 1 if ka<kb else -1\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('number one vs wheel', [['7h', '5d', '4c', '3s', '2h'], ['Ah', '2d', '3c', '4s', '5h']], 1),\n  ('wheel is ace high', [['Ah', '2d', '3c', '4s', '5h'], ['Kh', 'Qd', 'Jc', '9s', '8h']], -1),\n  ('seven low vs eight low', [['8h', '6d', '4c', '3s', '2h'], ['7c', '6h', '4d', '3c', '2d']], -1),\n  ('flush counts against', [['2h', '4h', '5h', '6h', '8h'], ['9c', '6d', '4d', '3c', '2d']], -1),\n  ('straight counts against', [['3h', '4d', '5c', '6s', '7h'], ['Kh', 'Qd', 'Jc', '9s', '7c']], -1),\n  ('pair loses to king high', [['2h', '2d', '4c', '5s', '7h'], ['Kh', '8d', '6c', '4s', '3h']], -1),\n  ('ace-king gap hand', [['Ah', 'Kd', '7c', '4s', '2h'], ['Qh', 'Jd', 'Tc', '8s', '6h']], -1),\n  ('straight flush vs flush', [['2c', '3c', '4c', '5c', '6c'], ['9d', '7d', '5d', '3d', '2d']],\n   -1)],\n [('flush counts against', [['2h', '4h', '5h', '6h', '8h'], ['9c', '6d', '4d', '3c', '2d']], -1),\n  ('straight counts against', [['3h', '4d', '5c', '6s', '7h'], ['Kh', 'Qd', 'Jc', '9s', '7c']], -1),\n  ('pair loses to king high', [['2h', '2d', '4c', '5s', '7h'], ['Kh', '8d', '6c', '4s', '3h']], -1),\n  ('ace-king gap hand', [['Ah', 'Kd', '7c', '4s', '2h'], ['Qh', 'Jd', 'Tc', '8s', '6h']], -1),\n  ('straight flush vs flush', [['2c', '3c', '4c', '5c', '6c'], ['9d', '7d', '5d', '3d', '2d']], -1),\n  ('tie', [['7h', '5d', '4c', '3s', '2h'], ['7c', '5h', '4d', '3c', '2d']], 0),\n  ('ace high vs pair', [['Ah', 'Qd', '9c', '7s', '5h'], ['3h', '3d', '6c', '5s', '4h']], 1),\n  ('both pairs lower pair wins', [['4h', '4d', 'Kc', 'Qs', 'Jh'], ['5h', '5d', '2c', '3s', '7h']],\n   1)],\n [('ace-king gap hand', [['Ah', 'Kd', '7c', '4s', '2h'], ['Qh', 'Jd', 'Tc', '8s', '6h']], -1),\n  ('straight flush vs flush', [['2c', '3c', '4c', '5c', '6c'], ['9d', '7d', '5d', '3d', '2d']], -1),\n  ('tie', [['7h', '5d', '4c', '3s', '2h'], ['7c', '5h', '4d', '3c', '2d']], 0),\n  ('ace high vs pair', [['Ah', 'Qd', '9c', '7s', '5h'], ['3h', '3d', '6c', '5s', '4h']], 1),\n  ('both pairs lower pair wins', [['4h', '4d', 'Kc', 'Qs', 'Jh'], ['5h', '5d', '2c', '3s', '7h']],\n   1),\n  ('wheel vs pair', [['Ah', '2d', '3c', '4s', '5h'], ['3h', '3d', '6c', '8s', '9h']], 1),\n  ('ace-deuce span vs pair', [['Ah', 'Jd', '8c', '6s', '2h'], ['4h', '4d', '6d', '8d', '9s']], 1),\n  ('ace high vs king high', [['Ah', '9d', '7c', '4s', '2h'], ['Kh', 'Qd', 'Jc', '9s', '8c']], -1)],\n [('number one vs wheel', [['7h', '5d', '4c', '3s', '2h'], ['Ah', '2d', '3c', '4s', '5h']], 1),\n  ('straight flush vs flush', [['2c', '3c', '4c', '5c', '6c'], ['9d', '7d', '5d', '3d', '2d']], -1),\n  ('both pairs lower pair wins', [['4h', '4d', 'Kc', 'Qs', 'Jh'], ['5h', '5d', '2c', '3s', '7h']],\n   1),\n  ('wheel vs pair', [['Ah', '2d', '3c', '4s', '5h'], ['3h', '3d', '6c', '8s', '9h']], 1),\n  ('ace-deuce span vs pair', [['Ah', 'Jd', '8c', '6s', '2h'], ['4h', '4d', '6d', '8d', '9s']], 1),\n  ('ace high vs king high', [['Ah', '9d', '7c', '4s', '2h'], ['Kh', 'Qd', 'Jc', '9s', '8c']], -1),\n  ('second tie', [['Kh', 'Jd', '9c', '6s', '3h'], ['Kc', 'Jh', '9d', '6c', '3d']], 0),\n  ('nine vs ten', [['9h', '7d', '5c', '3s', '2h'], ['Th', '4d', '3c', '6s', '2c']], 1)],\n [('number one vs wheel', [['7h', '5d', '4c', '3s', '2h'], ['Ah', '2d', '3c', '4s', '5h']], 1),\n  ('wheel is ace high', [['Ah', '2d', '3c', '4s', '5h'], ['Kh', 'Qd', 'Jc', '9s', '8h']], -1),\n  ('seven low vs eight low', [['8h', '6d', '4c', '3s', '2h'], ['7c', '6h', '4d', '3c', '2d']], -1),\n  ('flush counts against', [['2h', '4h', '5h', '6h', '8h'], ['9c', '6d', '4d', '3c', '2d']], -1),\n  ('straight flush vs flush', [['2c', '3c', '4c', '5c', '6c'], ['9d', '7d', '5d', '3d', '2d']], -1),\n  ('ace high vs king high', [['Ah', '9d', '7c', '4s', '2h'], ['Kh', 'Qd', 'Jc', '9s', '8c']], -1),\n  ('second tie', [['Kh', 'Jd', '9c', '6s', '3h'], ['Kc', 'Jh', '9d', '6c', '3d']], 0),\n  ('nine vs ten', [['9h', '7d', '5c', '3s', '2h'], ['Th', '4d', '3c', '6s', '2c']], 1)]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'error:' + type(exc).__name__\n    check(label, actual, 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 deterministic toy model with an explicitly stated contract; card strings are rank+suit (for example \"As\", \"Td\"); no claim of conformance to any casino or tournament rulebook. 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-poker_hand_evaluation-deuce-to-seven-lowball-straight-flush-category","generated_at":"2026-09-29T14:50:08.881901+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Lowball variants reuse high-hand evaluators with inverted outcomes, a common source of subtle bugs.","root_cause":"The straight flush case is mapped to the straight category, underrating how bad it is for low.","sha256":"7a0f7d241279756d74b0d174ba13c15f06bd4a248d2ff310c2b9b2e2ce3bfa03","title":"Straight flush scored as a mere straight in lowball · 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.856,"exit_code":1,"observations":[{"actual":1,"check":"number one vs wheel","expected":1,"passed":true},{"actual":-1,"check":"wheel is ace high","expected":-1,"passed":true},{"actual":-1,"check":"seven low vs eight low","expected":-1,"passed":true},{"actual":-1,"check":"flush counts against","expected":-1,"passed":true},{"actual":-1,"check":"straight counts against","expected":-1,"passed":true},{"actual":-1,"check":"pair loses to king high","expected":-1,"passed":true},{"actual":-1,"check":"ace-king gap hand","expected":-1,"passed":true},{"actual":1,"check":"straight flush vs flush","expected":-1,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"number one vs wheel\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"wheel is ace high\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"seven low vs eight low\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"flush counts against\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"straight counts against\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"pair loses to king high\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"ace-king gap hand\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"straight flush vs flush\", \"actual\": 1, \"expected\": -1, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.111,"exit_code":1,"observations":[{"actual":1,"check":"number one vs wheel","expected":1,"passed":true},{"actual":-1,"check":"wheel is ace high","expected":-1,"passed":true},{"actual":-1,"check":"seven low vs eight low","expected":-1,"passed":true},{"actual":-1,"check":"flush counts against","expected":-1,"passed":true},{"actual":-1,"check":"straight counts against","expected":-1,"passed":true},{"actual":-1,"check":"pair loses to king high","expected":-1,"passed":true},{"actual":-1,"check":"ace-king gap hand","expected":-1,"passed":true},{"actual":1,"check":"straight flush vs flush","expected":-1,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"number one vs wheel\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"wheel is ace high\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"seven low vs eight low\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"flush counts against\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"straight counts against\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"pair loses to king high\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"ace-king gap hand\", \"actual\": -1, \"expected\": -1, \"passed\": true}, {\"check\": \"straight flush vs flush\", \"actual\": 1, \"expected\": -1, \"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."}}