FA-83736 / Card game rule engines / Open access
Aces beat twos · case 01
A single 2 can be topped by an ace.
ROOT CAUSE
The rank order places the 2 at the bottom.
VERIFIED REPAIR
Order ranks 3 through A, then 2.
Unsuccessful approach: Placing the ace above the 2 still inverts the top two ranks.
Case contract
Input [current_combination, play]. Ranks 3 low to 2 high; suits D<C<H<S. A play is 1-3 cards of one rank. On an empty table any valid play is "ok"; otherwise it must have the same size and its highest card must outrank the current highest card (rank, then suit). Empty play is "pass". Return "ok", "invalid" or "pass".
Why this case matters
Card-game engines, scoring apps and online tables apply this rule automatically on every hand.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
cur, play = x
order = '23456789TJQKA'
suits = 'DCHS'
def key(c):
return (order.index(c[0]), suits.index(c[1]))
if not play:
return 'pass'
if len(set(c[0] for c in play)) != 1 or len(play) > 3:
return 'invalid'
if not cur:
return 'ok'
if len(play) != len(cur):
return 'invalid'
if max(key(c) for c in play) > max(key(c) for c in cur):
return 'ok'
return 'invalid'
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[['2C', '2S', '2D'], ['4S', '4C', '4H']], 'invalid'], [[['KC', 'KD'], ['KH', 'KS']], 'ok'], [[['8S', '8C', '8H'], ['KD', 'KC', 'KS']], 'ok'], [[['6S'], ['6H']], 'invalid'], [[['9C'], ['6S']], 'invalid'], [[[], ['3H', '3S', '3C']], 'ok'], [[['7D'], ['7S']], 'ok'], [[['AH'], ['2D']], 'ok']], [[[['8D', '8H'], ['8S', '8D', '8H', '8C']], 'invalid'], [[['AS'], ['AH', 'AC', 'AD']], 'invalid'], [[[], ['3C']], 'ok'], [[['QD'], ['QH']], 'ok'], [[['JD', 'JS'], ['TD', 'TS', 'TC', 'TH']], 'invalid'], [[['9S', '9H'], ['8S', '8C']], 'invalid'], [[['QC', 'QH'], ['2C', '2S']], 'ok'], [[['AS'], ['2D']], 'ok']], [[[['9D', '9C'], ['9D', '9C']], 'invalid'], [[['KD'], ['AH']], 'ok'], [[[], ['KS', 'KD']], 'ok'], [[['JC'], ['7C']], 'invalid'], [[['5S'], ['5H']], 'invalid'], [[['2S'], ['5D']], 'invalid'], [[['2D', '2C'], ['6S', '6D']], 'invalid'], [[['2S'], ['AS']], 'invalid']], [[[['JH', 'JC'], ['JC', 'JS']], 'ok'], [[['7C'], ['2D']], 'ok'], [[['2H'], ['2H']], 'invalid'], [[['TH', 'TD'], ['8D', '2S']], 'invalid'], [[['5H', '5D'], ['JS', 'JC']], 'ok'], [[[], ['QC', 'QH']], 'ok'], [[['2S', '2C'], ['7S', '7D']], 'invalid'], [[['AH'], ['2D']], 'ok']], [[[['6C', '6H'], ['AH', '4D']], 'invalid'], [[['3D', '3H', '3C'], ['3S', '3D', '3H', 'AC']], 'invalid'], [[['5S'], ['3S']], 'invalid'], [[['9C'], ['9C']], 'invalid'], [[['7C', '7S', '7D'], ['3D', '3S', '3C']], 'invalid'], [[['3H', '3C'], ['3D', '3C', '3S', '3H']], 'invalid'], [[['6S', '6H'], ['2S', '2D']], 'ok'], [[['AS'], ['2D']], 'ok']]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("play case %d" % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| play case 0 | ok | invalid | Failed |
| play case 1 | ok | ok | Passed |
| play case 2 | ok | ok | Passed |
| play case 3 | invalid | invalid | Passed |
| play case 4 | invalid | invalid | Passed |
| play case 5 | ok | ok | Passed |
| play case 6 | ok | ok | Passed |
| play case 7 | invalid | ok | Failed |
SHA-256 / 60afbfd60b39c1816df1d53a7eba95b6063e21dbe86b517d40ad34effda13eed
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
cur, play = x
order = '3456789TJQK2A'
suits = 'DCHS'
def key(c):
return (order.index(c[0]), suits.index(c[1]))
if not play:
return 'pass'
if len(set(c[0] for c in play)) != 1 or len(play) > 3:
return 'invalid'
if not cur:
return 'ok'
if len(play) != len(cur):
return 'invalid'
if max(key(c) for c in play) > max(key(c) for c in cur):
return 'ok'
return 'invalid'
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[['2C', '2S', '2D'], ['4S', '4C', '4H']], 'invalid'], [[['KC', 'KD'], ['KH', 'KS']], 'ok'], [[['8S', '8C', '8H'], ['KD', 'KC', 'KS']], 'ok'], [[['6S'], ['6H']], 'invalid'], [[['9C'], ['6S']], 'invalid'], [[[], ['3H', '3S', '3C']], 'ok'], [[['7D'], ['7S']], 'ok'], [[['AH'], ['2D']], 'ok']], [[[['8D', '8H'], ['8S', '8D', '8H', '8C']], 'invalid'], [[['AS'], ['AH', 'AC', 'AD']], 'invalid'], [[[], ['3C']], 'ok'], [[['QD'], ['QH']], 'ok'], [[['JD', 'JS'], ['TD', 'TS', 'TC', 'TH']], 'invalid'], [[['9S', '9H'], ['8S', '8C']], 'invalid'], [[['QC', 'QH'], ['2C', '2S']], 'ok'], [[['AS'], ['2D']], 'ok']], [[[['9D', '9C'], ['9D', '9C']], 'invalid'], [[['KD'], ['AH']], 'ok'], [[[], ['KS', 'KD']], 'ok'], [[['JC'], ['7C']], 'invalid'], [[['5S'], ['5H']], 'invalid'], [[['2S'], ['5D']], 'invalid'], [[['2D', '2C'], ['6S', '6D']], 'invalid'], [[['2S'], ['AS']], 'invalid']], [[[['JH', 'JC'], ['JC', 'JS']], 'ok'], [[['7C'], ['2D']], 'ok'], [[['2H'], ['2H']], 'invalid'], [[['TH', 'TD'], ['8D', '2S']], 'invalid'], [[['5H', '5D'], ['JS', 'JC']], 'ok'], [[[], ['QC', 'QH']], 'ok'], [[['2S', '2C'], ['7S', '7D']], 'invalid'], [[['AH'], ['2D']], 'ok']], [[[['6C', '6H'], ['AH', '4D']], 'invalid'], [[['3D', '3H', '3C'], ['3S', '3D', '3H', 'AC']], 'invalid'], [[['5S'], ['3S']], 'invalid'], [[['9C'], ['9C']], 'invalid'], [[['7C', '7S', '7D'], ['3D', '3S', '3C']], 'invalid'], [[['3H', '3C'], ['3D', '3C', '3S', '3H']], 'invalid'], [[['6S', '6H'], ['2S', '2D']], 'ok'], [[['AS'], ['2D']], 'ok']]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("play case %d" % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| play case 0 | invalid | invalid | Passed |
| play case 1 | ok | ok | Passed |
| play case 2 | ok | ok | Passed |
| play case 3 | invalid | invalid | Passed |
| play case 4 | invalid | invalid | Passed |
| play case 5 | ok | ok | Passed |
| play case 6 | ok | ok | Passed |
| play case 7 | invalid | ok | Failed |
SHA-256 / 344894d22520203f1c9a200da9a1d93e80e343de123b35082516d6aef16b6c8e
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
cur, play = x
order = '3456789TJQKA2'
suits = 'DCHS'
def key(c):
return (order.index(c[0]), suits.index(c[1]))
if not play:
return 'pass'
if len(set(c[0] for c in play)) != 1 or len(play) > 3:
return 'invalid'
if not cur:
return 'ok'
if len(play) != len(cur):
return 'invalid'
if max(key(c) for c in play) > max(key(c) for c in cur):
return 'ok'
return 'invalid'
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[['2C', '2S', '2D'], ['4S', '4C', '4H']], 'invalid'], [[['KC', 'KD'], ['KH', 'KS']], 'ok'], [[['8S', '8C', '8H'], ['KD', 'KC', 'KS']], 'ok'], [[['6S'], ['6H']], 'invalid'], [[['9C'], ['6S']], 'invalid'], [[[], ['3H', '3S', '3C']], 'ok'], [[['7D'], ['7S']], 'ok'], [[['AH'], ['2D']], 'ok']], [[[['8D', '8H'], ['8S', '8D', '8H', '8C']], 'invalid'], [[['AS'], ['AH', 'AC', 'AD']], 'invalid'], [[[], ['3C']], 'ok'], [[['QD'], ['QH']], 'ok'], [[['JD', 'JS'], ['TD', 'TS', 'TC', 'TH']], 'invalid'], [[['9S', '9H'], ['8S', '8C']], 'invalid'], [[['QC', 'QH'], ['2C', '2S']], 'ok'], [[['AS'], ['2D']], 'ok']], [[[['9D', '9C'], ['9D', '9C']], 'invalid'], [[['KD'], ['AH']], 'ok'], [[[], ['KS', 'KD']], 'ok'], [[['JC'], ['7C']], 'invalid'], [[['5S'], ['5H']], 'invalid'], [[['2S'], ['5D']], 'invalid'], [[['2D', '2C'], ['6S', '6D']], 'invalid'], [[['2S'], ['AS']], 'invalid']], [[[['JH', 'JC'], ['JC', 'JS']], 'ok'], [[['7C'], ['2D']], 'ok'], [[['2H'], ['2H']], 'invalid'], [[['TH', 'TD'], ['8D', '2S']], 'invalid'], [[['5H', '5D'], ['JS', 'JC']], 'ok'], [[[], ['QC', 'QH']], 'ok'], [[['2S', '2C'], ['7S', '7D']], 'invalid'], [[['AH'], ['2D']], 'ok']], [[[['6C', '6H'], ['AH', '4D']], 'invalid'], [[['3D', '3H', '3C'], ['3S', '3D', '3H', 'AC']], 'invalid'], [[['5S'], ['3S']], 'invalid'], [[['9C'], ['9C']], 'invalid'], [[['7C', '7S', '7D'], ['3D', '3S', '3C']], 'invalid'], [[['3H', '3C'], ['3D', '3C', '3S', '3H']], 'invalid'], [[['6S', '6H'], ['2S', '2D']], 'ok'], [[['AS'], ['2D']], 'ok']]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("play case %d" % i, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| play case 0 | invalid | invalid | Passed |
| play case 1 | ok | ok | Passed |
| play case 2 | ok | ok | Passed |
| play case 3 | invalid | invalid | Passed |
| play case 4 | invalid | invalid | Passed |
| play case 5 | ok | ok | Passed |
| play case 6 | ok | ok | Passed |
| play case 7 | ok | ok | Passed |
SHA-256 / 57e0acfba63da9b1afcf69693f601aaa62e947502f386524161dc6591b7e2da6
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:50:24.439478+00:00.
Case digest / 6a4752db5f306ad9a83f053881da070b90ba6db7d7130cf3932a216c2c5bb70f