{"abstract":"Ace-high runs are invalid because ace only counts low.","category":"Card game rule engines","checks":8,"contract":"Input a list of cards. A set is 3-4 cards of one rank in distinct suits. A run is 3+ consecutive cards of one suit; ace is low (A-2-3) or high (Q-K-A) but runs do not wrap (K-A-2). Return \"set\", \"run\" or \"invalid\".","contract_signature":"x","evaluation_group":"w2-card-game-rule-engines-rummy-meld","failed_approach":"Treating both A and 2 as high cards accepts wrapping runs like K-A-2.","family":"w2-card-game-rule-engines-rummy-meld-ace-high-run","id":"FA-83466","implementations":{"attempt":{"sha256":"6d9d380af234125661e52641305fb8847b89d3d0ff59c4dd15629b96a1d45e28","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cards = x\n    order = 'A23456789TJQK'\n    if len(cards) < 3:\n        return 'invalid'\n    ranks = [c[0] for c in cards]\n    suits = [c[1] for c in cards]\n    if len(set(ranks)) == 1:\n        if len(cards) <= 4 and len(set(suits)) == len(cards):\n            return 'set'\n        return 'invalid'\n    if len(set(suits)) != 1:\n        return 'invalid'\n    idx = sorted(order.index(r) for r in ranks)\n    if all(idx[i + 1] == idx[i] + 1 for i in range(len(idx) - 1)):\n        return 'run'\n    if idx[0] == 0:\n        high = sorted(i + 13 if i < 2 else i for i in idx)\n        if all(high[i + 1] == high[i] + 1 for i in range(len(high) - 1)):\n            return 'run'\n    return 'invalid'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[['9H', '9C', '9D', '9D'], 'invalid'], [['4D', '5D', '3D', '6D'], 'run'], [['KD', '6S', 'QS', '6H'], 'invalid'], [['8H', '8S'], 'invalid'], [['JD', 'QD', '2D', 'KD', 'AD'], 'invalid'], [['8H', '6D', 'AH'], 'invalid'], [['KD', 'TD', 'AD', 'JD', 'QD'], 'run'], [['KH', 'AH', '2H'], 'invalid']], [[['9C', 'JC', 'QC', 'TC'], 'run'], [['7S', '4D', 'JC'], 'invalid'], [['KH', 'QH', 'JH'], 'run'], [['5D', '5S'], 'invalid'], [['KD', 'TD', 'AD', 'JD', 'QD'], 'run'], [['KH', 'KD', 'KC', 'KC', 'KS'], 'invalid'], [['AH', 'QH', 'KH', 'JH'], 'run'], [['AD', '2D', 'KD'], 'invalid']], [[['JD', 'QD', '2D', 'KD', 'AD'], 'invalid'], [['KD', 'TD', 'AD', 'JD', 'QD'], 'run'], [['6C', '2C', '8D', '8C'], 'invalid'], [['5H', '2H', '3H', '6H', '4H'], 'run'], [['4H', '4S', '4C', '4D'], 'set'], [['3D', '3H', '3C'], 'set'], [['4D', 'KC', 'QC'], 'invalid'], [['AD', 'AH', 'AD'], 'invalid']], [[['AD', 'AH', 'AD'], 'invalid'], [['QC', 'QS', 'QD', 'QD'], 'invalid'], [['9S', 'JS', 'QS', '8S', 'TS'], 'run'], [['KS', '4S', '8D', '3C'], 'invalid'], [['9C', 'JC', 'TC', '8C'], 'run'], [['AH', '2H', '3H'], 'run'], [['QH', 'KH', 'AH', '2H'], 'invalid'], [['AH', 'QH', 'KH', 'JH'], 'run']], [[['KD', 'TD', 'AD', 'JD', 'QD'], 'run'], [['9H', 'JH', 'QC', '2D'], 'invalid'], [['5S', 'AH'], 'invalid'], [['TH', 'JH', 'KH', 'QH'], 'run'], [['QC', '6D'], 'invalid'], [['9D', '7D', '3S', '9S'], 'invalid'], [['AS', 'TD'], 'invalid'], [['KH', 'AH', '2H'], 'invalid']]]\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":"8bc21c155c71b0670d741835dd2010a204acc4d3897b8562cd915ae97c150852","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cards = x\n    order = 'A23456789TJQK'\n    if len(cards) < 3:\n        return 'invalid'\n    ranks = [c[0] for c in cards]\n    suits = [c[1] for c in cards]\n    if len(set(ranks)) == 1:\n        if len(cards) <= 4 and len(set(suits)) == len(cards):\n            return 'set'\n        return 'invalid'\n    if len(set(suits)) != 1:\n        return 'invalid'\n    idx = sorted(order.index(r) for r in ranks)\n    if all(idx[i + 1] == idx[i] + 1 for i in range(len(idx) - 1)):\n        return 'run'\n    return 'invalid'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[['9H', '9C', '9D', '9D'], 'invalid'], [['4D', '5D', '3D', '6D'], 'run'], [['KD', '6S', 'QS', '6H'], 'invalid'], [['8H', '8S'], 'invalid'], [['JD', 'QD', '2D', 'KD', 'AD'], 'invalid'], [['8H', '6D', 'AH'], 'invalid'], [['KD', 'TD', 'AD', 'JD', 'QD'], 'run'], [['KH', 'AH', '2H'], 'invalid']], [[['9C', 'JC', 'QC', 'TC'], 'run'], [['7S', '4D', 'JC'], 'invalid'], [['KH', 'QH', 'JH'], 'run'], [['5D', '5S'], 'invalid'], [['KD', 'TD', 'AD', 'JD', 'QD'], 'run'], [['KH', 'KD', 'KC', 'KC', 'KS'], 'invalid'], [['AH', 'QH', 'KH', 'JH'], 'run'], [['AD', '2D', 'KD'], 'invalid']], [[['JD', 'QD', '2D', 'KD', 'AD'], 'invalid'], [['KD', 'TD', 'AD', 'JD', 'QD'], 'run'], [['6C', '2C', '8D', '8C'], 'invalid'], [['5H', '2H', '3H', '6H', '4H'], 'run'], [['4H', '4S', '4C', '4D'], 'set'], [['3D', '3H', '3C'], 'set'], [['4D', 'KC', 'QC'], 'invalid'], [['AD', 'AH', 'AD'], 'invalid']], [[['AD', 'AH', 'AD'], 'invalid'], [['QC', 'QS', 'QD', 'QD'], 'invalid'], [['9S', 'JS', 'QS', '8S', 'TS'], 'run'], [['KS', '4S', '8D', '3C'], 'invalid'], [['9C', 'JC', 'TC', '8C'], 'run'], [['AH', '2H', '3H'], 'run'], [['QH', 'KH', 'AH', '2H'], 'invalid'], [['AH', 'QH', 'KH', 'JH'], 'run']], [[['KD', 'TD', 'AD', 'JD', 'QD'], 'run'], [['9H', 'JH', 'QC', '2D'], 'invalid'], [['5S', 'AH'], 'invalid'], [['TH', 'JH', 'KH', 'QH'], 'run'], [['QC', '6D'], 'invalid'], [['9D', '7D', '3S', '9S'], 'invalid'], [['AS', 'TD'], 'invalid'], [['KH', 'AH', '2H'], 'invalid']]]\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-rummy-meld-ace-high-run","generated_at":"2026-09-29T14:50:21.949547+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 ace-high alternative is never tried.","sha256":"38bc42d1a90b12f94129c364721f092ac22d83e2ce63979889dbd63c358d742f","title":"Queen-king-ace is rejected as a run · 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":41.796,"exit_code":1,"observations":[{"actual":"invalid","check":"meld case 0","expected":"invalid","passed":true},{"actual":"run","check":"meld case 1","expected":"run","passed":true},{"actual":"invalid","check":"meld case 2","expected":"invalid","passed":true},{"actual":"invalid","check":"meld case 3","expected":"invalid","passed":true},{"actual":"run","check":"meld case 4","expected":"invalid","passed":false},{"actual":"invalid","check":"meld case 5","expected":"invalid","passed":true},{"actual":"run","check":"meld case 6","expected":"run","passed":true},{"actual":"run","check":"meld case 7","expected":"invalid","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"meld case 0\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 1\", \"actual\": \"run\", \"expected\": \"run\", \"passed\": true}, {\"check\": \"meld case 2\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 3\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 4\", \"actual\": \"run\", \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"meld case 5\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 6\", \"actual\": \"run\", \"expected\": \"run\", \"passed\": true}, {\"check\": \"meld case 7\", \"actual\": \"run\", \"expected\": \"invalid\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.929,"exit_code":1,"observations":[{"actual":"invalid","check":"meld case 0","expected":"invalid","passed":true},{"actual":"run","check":"meld case 1","expected":"run","passed":true},{"actual":"invalid","check":"meld case 2","expected":"invalid","passed":true},{"actual":"invalid","check":"meld case 3","expected":"invalid","passed":true},{"actual":"invalid","check":"meld case 4","expected":"invalid","passed":true},{"actual":"invalid","check":"meld case 5","expected":"invalid","passed":true},{"actual":"invalid","check":"meld case 6","expected":"run","passed":false},{"actual":"invalid","check":"meld case 7","expected":"invalid","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"meld case 0\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 1\", \"actual\": \"run\", \"expected\": \"run\", \"passed\": true}, {\"check\": \"meld case 2\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 3\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 4\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 5\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 6\", \"actual\": \"invalid\", \"expected\": \"run\", \"passed\": false}, {\"check\": \"meld case 7\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}], \"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."}}