{"abstract":"\"QQ\" enumerates 12 combos with no blockers and 9 with one queen dead.","category":"Poker hand evaluation","checks":8,"contract":"Input: {\"hand\": class such as \"AKs\", \"AKo\", \"AK\" or \"QQ\", \"dead\": [known cards, rank upper-case or lower-case, suit lower-case or upper-case]}. Enumerate the concrete two-card combos of the class (suits c,d,h,s) and return how many contain no dead card.","evaluation_group":"w2-poker_hand_evaluation-blocker-combo-enumeration","failed_approach":"Skipping only j<i keeps the impossible same-card pair Qh-Qh.","family":"w2-poker_hand_evaluation-blocker-combo-enumeration-unordered-pair-suits","id":"FA-82156","implementations":{"attempt":{"sha256":"e3d83fa209d84c43fb9a280e59fb71f1d27023cb348c0642276ff0c8cb4bc82c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    S='cdhs'\n    h=x['hand']; dead={c[0].upper()+c[1].lower() for c in x['dead']}\n    r1,r2=h[0],h[1]; suf=h[2:]\n    n=0\n    for i,s1 in enumerate(S):\n        for j,s2 in enumerate(S):\n            if r1==r2 and j<i: continue\n            if suf=='s' and s1!=s2: continue\n            if suf=='o' and s1==s2: continue\n            if r1+s1 in dead or r2+s2 in dead: continue\n            n+=1\n    return n\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3)],\n [('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1),\n  ('offsuit no blockers', {'dead': [], 'hand': 'T9o'}, 12),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1),\n  ('offsuit no blockers', {'dead': [], 'hand': 'T9o'}, 12),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1)],\n [('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 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":"d150c8af410facefd43ad0cf7b0e008fae6411ebba54dfc16cb8603e4f3f76c1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    S='cdhs'\n    h=x['hand']; dead={c[0].upper()+c[1].lower() for c in x['dead']}\n    r1,r2=h[0],h[1]; suf=h[2:]\n    n=0\n    for i,s1 in enumerate(S):\n        for j,s2 in enumerate(S):\n            if r1==r2 and j==i: continue\n            if suf=='s' and s1!=s2: continue\n            if suf=='o' and s1==s2: continue\n            if r1+s1 in dead or r2+s2 in dead: continue\n            n+=1\n    return n\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3)],\n [('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1),\n  ('offsuit no blockers', {'dead': [], 'hand': 'T9o'}, 12),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1),\n  ('offsuit no blockers', {'dead': [], 'hand': 'T9o'}, 12),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1)],\n [('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 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"},"fixed":{"sha256":"4661b1e891e7fab2e354e335542dcdfbe0fd46235b27a4d525c32546bd4298ca","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    S='cdhs'\n    h=x['hand']; dead={c[0].upper()+c[1].lower() for c in x['dead']}\n    r1,r2=h[0],h[1]; suf=h[2:]\n    n=0\n    for i,s1 in enumerate(S):\n        for j,s2 in enumerate(S):\n            if r1==r2 and j<=i: continue\n            if suf=='s' and s1!=s2: continue\n            if suf=='o' and s1==s2: continue\n            if r1+s1 in dead or r2+s2 in dead: continue\n            n+=1\n    return n\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3)],\n [('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1),\n  ('offsuit no blockers', {'dead': [], 'hand': 'T9o'}, 12),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('unrelated dead', {'dead': ['2c', '7d'], 'hand': 'AKs'}, 4),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1),\n  ('offsuit no blockers', {'dead': [], 'hand': 'T9o'}, 12),\n  ('blocked first rank only', {'dead': ['Qs', 'Qh'], 'hand': 'KQs'}, 2)],\n [('pair no blockers', {'dead': [], 'hand': 'QQ'}, 6),\n  ('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 1)],\n [('pair one blocker', {'dead': ['Qh'], 'hand': 'QQ'}, 3),\n  ('suited no blockers', {'dead': [], 'hand': 'AKs'}, 4),\n  ('suited blocked king', {'dead': ['Kd'], 'hand': 'AKs'}, 3),\n  ('offsuit blocked king', {'dead': ['Kd'], 'hand': 'AKo'}, 9),\n  ('any ace king two blockers', {'dead': ['As', 'Kc'], 'hand': 'AK'}, 9),\n  ('lower-case dead', {'dead': ['ah', 'kS'], 'hand': 'AKo'}, 7),\n  ('upper-case suit dead', {'dead': ['JH'], 'hand': 'JTs'}, 3),\n  ('pair two blockers', {'dead': ['9c', '9s'], 'hand': '99'}, 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-blocker-combo-enumeration-unordered-pair-suits","generated_at":"2026-09-29T14:50:09.508548+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Blocker math decides how many value combos an opponent can still hold.","repair":"For pairs, enumerate suit pairs with the second index strictly after the first.","root_cause":"Only identical suits are skipped, so Qc-Qd and Qd-Qc are both counted.","sha256":"ec559c6184da8f162fcc1f138efd56313da0bd9892ef69113aa970f1a8115dcc","title":"Pocket pair combos enumerated as ordered deals · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.266,"exit_code":1,"observations":[{"actual":10,"check":"pair no blockers","expected":6,"passed":false},{"actual":6,"check":"pair one blocker","expected":3,"passed":false},{"actual":4,"check":"suited no blockers","expected":4,"passed":true},{"actual":3,"check":"suited blocked king","expected":3,"passed":true},{"actual":9,"check":"offsuit blocked king","expected":9,"passed":true},{"actual":9,"check":"any ace king two blockers","expected":9,"passed":true},{"actual":7,"check":"lower-case dead","expected":7,"passed":true},{"actual":3,"check":"upper-case suit dead","expected":3,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"pair no blockers\", \"actual\": 10, \"expected\": 6, \"passed\": false}, {\"check\": \"pair one blocker\", \"actual\": 6, \"expected\": 3, \"passed\": false}, {\"check\": \"suited no blockers\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"suited blocked king\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"offsuit blocked king\", \"actual\": 9, \"expected\": 9, \"passed\": true}, {\"check\": \"any ace king two blockers\", \"actual\": 9, \"expected\": 9, \"passed\": true}, {\"check\": \"lower-case dead\", \"actual\": 7, \"expected\": 7, \"passed\": true}, {\"check\": \"upper-case suit dead\", \"actual\": 3, \"expected\": 3, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.012,"exit_code":1,"observations":[{"actual":12,"check":"pair no blockers","expected":6,"passed":false},{"actual":6,"check":"pair one blocker","expected":3,"passed":false},{"actual":4,"check":"suited no blockers","expected":4,"passed":true},{"actual":3,"check":"suited blocked king","expected":3,"passed":true},{"actual":9,"check":"offsuit blocked king","expected":9,"passed":true},{"actual":9,"check":"any ace king two blockers","expected":9,"passed":true},{"actual":7,"check":"lower-case dead","expected":7,"passed":true},{"actual":3,"check":"upper-case suit dead","expected":3,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"pair no blockers\", \"actual\": 12, \"expected\": 6, \"passed\": false}, {\"check\": \"pair one blocker\", \"actual\": 6, \"expected\": 3, \"passed\": false}, {\"check\": \"suited no blockers\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"suited blocked king\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"offsuit blocked king\", \"actual\": 9, \"expected\": 9, \"passed\": true}, {\"check\": \"any ace king two blockers\", \"actual\": 9, \"expected\": 9, \"passed\": true}, {\"check\": \"lower-case dead\", \"actual\": 7, \"expected\": 7, \"passed\": true}, {\"check\": \"upper-case suit dead\", \"actual\": 3, \"expected\": 3, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.624,"exit_code":0,"observations":[{"actual":6,"check":"pair no blockers","expected":6,"passed":true},{"actual":3,"check":"pair one blocker","expected":3,"passed":true},{"actual":4,"check":"suited no blockers","expected":4,"passed":true},{"actual":3,"check":"suited blocked king","expected":3,"passed":true},{"actual":9,"check":"offsuit blocked king","expected":9,"passed":true},{"actual":9,"check":"any ace king two blockers","expected":9,"passed":true},{"actual":7,"check":"lower-case dead","expected":7,"passed":true},{"actual":3,"check":"upper-case suit dead","expected":3,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"pair no blockers\", \"actual\": 6, \"expected\": 6, \"passed\": true}, {\"check\": \"pair one blocker\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"suited no blockers\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"suited blocked king\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"offsuit blocked king\", \"actual\": 9, \"expected\": 9, \"passed\": true}, {\"check\": \"any ace king two blockers\", \"actual\": 9, \"expected\": 9, \"passed\": true}, {\"check\": \"lower-case dead\", \"actual\": 7, \"expected\": 7, \"passed\": true}, {\"check\": \"upper-case suit dead\", \"actual\": 3, \"expected\": 3, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}