{"abstract":"5-6-7 in different suits is scored as a run.","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":"Allowing up to two suits still accepts mixed sequences.","family":"w2-card-game-rule-engines-rummy-meld-run-suit-uniformity","id":"FA-83471","implementations":{"attempt":{"sha256":"421e9476047e265bc6b4ee7739ebcfa5d6b2cecc52b2c23dd99e53cf2eb8f6cb","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)) > 2:\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(idx[1:] + [13])\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'], [['5S', '6S', '7D'], 'invalid'], [['5S', '6S', '7D'], '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'], [['5S', '6S', '7S', '8D'], 'invalid'], [['5S', '6S', '7S', '8D'], 'invalid']], [[['JH', '9H', 'TH'], 'run'], [['TH', 'KH', 'QH', 'JH'], 'run'], [['6C', '2C', '8D', '8C'], 'invalid'], [['5H', '2H', '3H', '6H', '4H'], 'run'], [['4H', '4S', '4C', '4D'], 'set'], [['3D', '3H', '3C'], 'set'], [['5S', '6S', '7D'], 'invalid'], [['5S', '6S', '7D'], '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'], [['5S', '6S', '7S', '8D'], 'invalid'], [['5S', '6S', '7S', '8D'], 'invalid']], [[['9C', '3S', '3H'], 'invalid'], [['9H', 'JH', 'QC', '2D'], 'invalid'], [['5S', 'AH'], 'invalid'], [['TH', 'JH', 'KH', 'QH'], 'run'], [['QC', '6D'], 'invalid'], [['9D', '7D', '3S', '9S'], 'invalid'], [['5S', '6S', '7D'], 'invalid'], [['5S', '6S', '7D'], '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":"06bac8803462a44e46985acaf6a53dedce4afd76667ec3dda355cf570a9a1e36","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    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(idx[1:] + [13])\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'], [['5S', '6S', '7D'], 'invalid'], [['5S', '6S', '7D'], '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'], [['5S', '6S', '7S', '8D'], 'invalid'], [['5S', '6S', '7S', '8D'], 'invalid']], [[['JH', '9H', 'TH'], 'run'], [['TH', 'KH', 'QH', 'JH'], 'run'], [['6C', '2C', '8D', '8C'], 'invalid'], [['5H', '2H', '3H', '6H', '4H'], 'run'], [['4H', '4S', '4C', '4D'], 'set'], [['3D', '3H', '3C'], 'set'], [['5S', '6S', '7D'], 'invalid'], [['5S', '6S', '7D'], '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'], [['5S', '6S', '7S', '8D'], 'invalid'], [['5S', '6S', '7S', '8D'], 'invalid']], [[['9C', '3S', '3H'], 'invalid'], [['9H', 'JH', 'QC', '2D'], 'invalid'], [['5S', 'AH'], 'invalid'], [['TH', 'JH', 'KH', 'QH'], 'run'], [['QC', '6D'], 'invalid'], [['9D', '7D', '3S', '9S'], 'invalid'], [['5S', '6S', '7D'], 'invalid'], [['5S', '6S', '7D'], '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-run-suit-uniformity","generated_at":"2026-09-29T14:50:21.948352+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 single-suit check for runs is missing.","sha256":"d4220f759cd11e218003a23ddd1fb5bdc66cbe78180a1f6fb419204f1eca5491","title":"Mixed-suit sequences are accepted as runs · 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.285,"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":"run","check":"meld case 6","expected":"invalid","passed":false},{"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\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 5\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 6\", \"actual\": \"run\", \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"meld case 7\", \"actual\": \"run\", \"expected\": \"invalid\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.537,"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":"run","check":"meld case 6","expected":"invalid","passed":false},{"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\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 5\", \"actual\": \"invalid\", \"expected\": \"invalid\", \"passed\": true}, {\"check\": \"meld case 6\", \"actual\": \"run\", \"expected\": \"invalid\", \"passed\": false}, {\"check\": \"meld case 7\", \"actual\": \"run\", \"expected\": \"invalid\", \"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."}}