{"abstract":"Finishing 50 with the bull is treated as a bust.","category":"Sports scoring and tiebreakers","checks":9,"contract":"Double-out darts leg from a remaining score. darts lists thrown darts: S/D/T followed by 1-20, SB (25), DB (50, a double) or M (miss). Turns are three darts. After each dart: reaching exactly 0 with a double (D* or DB) checks out and later darts are ignored; a remaining score below 2 otherwise is a bust, the score reverts to its value at the start of the turn and the turn ends immediately (the next dart in the list starts a new turn). Return [remaining, turns used, checked_out].","contract_signature":"start, darts","evaluation_group":"w2-sports-scoring-darts-double-out-bust","failed_approach":"Flagging DB as a double but scoring it 25 breaks every bull finish.","family":"w2-sports-scoring-darts-double-out-bust-bull-double","id":"FA-84216","implementations":{"attempt":{"sha256":"fb1f905f0811107f57cbcac17c2ea5e0d0ff3468daf75b938ea6ba50e4e8d17e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(start, darts):\n    def value(d):\n        if d == 'M':\n            return 0, False\n        if d == 'SB':\n            return 25, False\n        if d == 'DB':\n            return 25, True\n        mult = {'S': 1, 'D': 2, 'T': 3}[d[0]]\n        return mult * int(d[1:]), d[0] == 'D'\n    score = start\n    turns = 0\n    i = 0\n    while i < len(darts):\n        turns += 1\n        turn_start = score\n        for k in range(3):\n            if i >= len(darts):\n                break\n            v, dbl = value(darts[i])\n            i += 1\n            score -= v\n            if score == 0 and dbl:\n                return [0, turns, True]\n            if score < 2:\n                score = turn_start\n                break\n    return [score, turns, False]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control checkout on double', (40, ['D20']), [0, 1, True]),\n  ('boundary finish on single busts', (20, ['S20', 'D10']), [0, 2, True]),\n  ('boundary leave one busts', (21, ['S20', 'S1']), [20, 2, False]),\n  ('control bull finish', (50, ['DB']), [0, 1, True]),\n  ('boundary bust mid-turn reverts', (32, ['S10', 'T20', 'D16']), [0, 2, True]),\n  ('control scoring turn', (101, ['T20', 'S1', 'S20']), [20, 1, False]),\n  ('regression: bull double', (50, ['D2', 'DB', 'DB', 'T15', 'D15', 'D11']), [0, 2, True]),\n  ('variant scenario 1', (27, ['D1', 'S7', 'SB', 'D11', 'SB', 'S7', 'T3']), [11, 3, False]),\n  ('variant scenario 2', (50, ['D4', 'D3', 'D13', 'S7', 'D3', 'S18', 'D3']), [4, 4, False])],\n [('control checkout on double', (40, ['D20']), [0, 1, True]),\n  ('boundary finish on single busts', (20, ['S20', 'D10']), [0, 2, True]),\n  ('boundary leave one busts', (21, ['S20', 'S1']), [20, 2, False]),\n  ('control bull finish', (50, ['DB']), [0, 1, True]),\n  ('boundary bust mid-turn reverts', (32, ['S10', 'T20', 'D16']), [0, 2, True]),\n  ('control scoring turn', (101, ['T20', 'S1', 'S20']), [20, 1, False]),\n  ('regression: bull double', (50, ['D8', 'DB', 'D5', 'D16', 'D4', 'D12', 'D20']), [0, 2, True]),\n  ('regression: bull double',\n   (50, ['D9', 'T13', 'D11', 'D13', 'D6', 'DB', 'M', 'D5', 'D15']),\n   [0, 3, True]),\n  ('variant scenario 1', (32, ['D16', 'SB']), [0, 1, True]),\n  ('variant scenario 2', (40, ['D18', 'T20', 'T14', 'D12', 'S20']), [40, 3, False])],\n [('control checkout on double', (40, ['D20']), [0, 1, True]),\n  ('boundary finish on single busts', (20, ['S20', 'D10']), [0, 2, True]),\n  ('boundary leave one busts', (21, ['S20', 'S1']), [20, 2, False]),\n  ('control bull finish', (50, ['DB']), [0, 1, True]),\n  ('boundary bust mid-turn reverts', (32, ['S10', 'T20', 'D16']), [0, 2, True]),\n  ('control scoring turn', (101, ['T20', 'S1', 'S20']), [20, 1, False]),\n  ('regression: bull double', (50, ['D9', 'T4', 'D13', 'DB', 'D20', 'T13']), [0, 2, True]),\n  ('variant scenario 1', (40, ['D1', 'T4', 'T9', 'DB', 'D9', 'T13']), [40, 3, False]),\n  ('variant scenario 2', (3, ['T3', 'SB', 'T5']), [3, 3, False])],\n [('control checkout on double', (40, ['D20']), [0, 1, True]),\n  ('boundary finish on single busts', (20, ['S20', 'D10']), [0, 2, True]),\n  ('boundary leave one busts', (21, ['S20', 'S1']), [20, 2, False]),\n  ('control bull finish', (50, ['DB']), [0, 1, True]),\n  ('boundary bust mid-turn reverts', (32, ['S10', 'T20', 'D16']), [0, 2, True]),\n  ('control scoring turn', (101, ['T20', 'S1', 'S20']), [20, 1, False]),\n  ('regression: bull double',\n   (40, ['D8', 'D5', 'D13', 'T4', 'DB', 'D18', 'D11', 'S15']),\n   [25, 4, False]),\n  ('regression: bull double', (50, ['T20', 'DB', 'D15', 'D13', 'SB']), [0, 2, True]),\n  ('variant scenario 1', (31, ['T17']), [31, 1, False]),\n  ('variant scenario 2', (32, ['D16']), [0, 1, True])],\n [('control checkout on double', (40, ['D20']), [0, 1, True]),\n  ('boundary finish on single busts', (20, ['S20', 'D10']), [0, 2, True]),\n  ('boundary leave one busts', (21, ['S20', 'S1']), [20, 2, False]),\n  ('control bull finish', (50, ['DB']), [0, 1, True]),\n  ('boundary bust mid-turn reverts', (32, ['S10', 'T20', 'D16']), [0, 2, True]),\n  ('control scoring turn', (101, ['T20', 'S1', 'S20']), [20, 1, False]),\n  ('regression: bull double', (32, ['D6', 'D11', 'DB', 'DB', 'D7', 'D7', 'S17']), [32, 4, False]),\n  ('regression: bull double',\n   (50, ['DB', 'S13', 'D3', 'S20', 'M', 'D18', 'M', 'T1']),\n   [0, 1, True]),\n  ('variant scenario 1', (32, ['T7', 'T20', 'D2', 'T20', 'D6', 'D19', 'D12']), [8, 4, False]),\n  ('variant scenario 2', (40, ['S3', 'S10', 'D16', 'D1', 'D3', 'D3']), [26, 2, False])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(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":"0a800437625b958c5e811a6793c91e470134a5dd5588f8751c4c705bad6f7e1b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(start, darts):\n    def value(d):\n        if d == 'M':\n            return 0, False\n        if d == 'SB':\n            return 25, False\n        if d == 'DB':\n            return 50, False\n        mult = {'S': 1, 'D': 2, 'T': 3}[d[0]]\n        return mult * int(d[1:]), d[0] == 'D'\n    score = start\n    turns = 0\n    i = 0\n    while i < len(darts):\n        turns += 1\n        turn_start = score\n        for k in range(3):\n            if i >= len(darts):\n                break\n            v, dbl = value(darts[i])\n            i += 1\n            score -= v\n            if score == 0 and dbl:\n                return [0, turns, True]\n            if score < 2:\n                score = turn_start\n                break\n    return [score, turns, False]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control checkout on double', (40, ['D20']), [0, 1, True]),\n  ('boundary finish on single busts', (20, ['S20', 'D10']), [0, 2, True]),\n  ('boundary leave one busts', (21, ['S20', 'S1']), [20, 2, False]),\n  ('control bull finish', (50, ['DB']), [0, 1, True]),\n  ('boundary bust mid-turn reverts', (32, ['S10', 'T20', 'D16']), [0, 2, True]),\n  ('control scoring turn', (101, ['T20', 'S1', 'S20']), [20, 1, False]),\n  ('regression: bull double', (50, ['D2', 'DB', 'DB', 'T15', 'D15', 'D11']), [0, 2, True]),\n  ('variant scenario 1', (27, ['D1', 'S7', 'SB', 'D11', 'SB', 'S7', 'T3']), [11, 3, False]),\n  ('variant scenario 2', (50, ['D4', 'D3', 'D13', 'S7', 'D3', 'S18', 'D3']), [4, 4, False])],\n [('control checkout on double', (40, ['D20']), [0, 1, True]),\n  ('boundary finish on single busts', (20, ['S20', 'D10']), [0, 2, True]),\n  ('boundary leave one busts', (21, ['S20', 'S1']), [20, 2, False]),\n  ('control bull finish', (50, ['DB']), [0, 1, True]),\n  ('boundary bust mid-turn reverts', (32, ['S10', 'T20', 'D16']), [0, 2, True]),\n  ('control scoring turn', (101, ['T20', 'S1', 'S20']), [20, 1, False]),\n  ('regression: bull double', (50, ['D8', 'DB', 'D5', 'D16', 'D4', 'D12', 'D20']), [0, 2, True]),\n  ('regression: bull double',\n   (50, ['D9', 'T13', 'D11', 'D13', 'D6', 'DB', 'M', 'D5', 'D15']),\n   [0, 3, True]),\n  ('variant scenario 1', (32, ['D16', 'SB']), [0, 1, True]),\n  ('variant scenario 2', (40, ['D18', 'T20', 'T14', 'D12', 'S20']), [40, 3, False])],\n [('control checkout on double', (40, ['D20']), [0, 1, True]),\n  ('boundary finish on single busts', (20, ['S20', 'D10']), [0, 2, True]),\n  ('boundary leave one busts', (21, ['S20', 'S1']), [20, 2, False]),\n  ('control bull finish', (50, ['DB']), [0, 1, True]),\n  ('boundary bust mid-turn reverts', (32, ['S10', 'T20', 'D16']), [0, 2, True]),\n  ('control scoring turn', (101, ['T20', 'S1', 'S20']), [20, 1, False]),\n  ('regression: bull double', (50, ['D9', 'T4', 'D13', 'DB', 'D20', 'T13']), [0, 2, True]),\n  ('variant scenario 1', (40, ['D1', 'T4', 'T9', 'DB', 'D9', 'T13']), [40, 3, False]),\n  ('variant scenario 2', (3, ['T3', 'SB', 'T5']), [3, 3, False])],\n [('control checkout on double', (40, ['D20']), [0, 1, True]),\n  ('boundary finish on single busts', (20, ['S20', 'D10']), [0, 2, True]),\n  ('boundary leave one busts', (21, ['S20', 'S1']), [20, 2, False]),\n  ('control bull finish', (50, ['DB']), [0, 1, True]),\n  ('boundary bust mid-turn reverts', (32, ['S10', 'T20', 'D16']), [0, 2, True]),\n  ('control scoring turn', (101, ['T20', 'S1', 'S20']), [20, 1, False]),\n  ('regression: bull double',\n   (40, ['D8', 'D5', 'D13', 'T4', 'DB', 'D18', 'D11', 'S15']),\n   [25, 4, False]),\n  ('regression: bull double', (50, ['T20', 'DB', 'D15', 'D13', 'SB']), [0, 2, True]),\n  ('variant scenario 1', (31, ['T17']), [31, 1, False]),\n  ('variant scenario 2', (32, ['D16']), [0, 1, True])],\n [('control checkout on double', (40, ['D20']), [0, 1, True]),\n  ('boundary finish on single busts', (20, ['S20', 'D10']), [0, 2, True]),\n  ('boundary leave one busts', (21, ['S20', 'S1']), [20, 2, False]),\n  ('control bull finish', (50, ['DB']), [0, 1, True]),\n  ('boundary bust mid-turn reverts', (32, ['S10', 'T20', 'D16']), [0, 2, True]),\n  ('control scoring turn', (101, ['T20', 'S1', 'S20']), [20, 1, False]),\n  ('regression: bull double', (32, ['D6', 'D11', 'DB', 'DB', 'D7', 'D7', 'S17']), [32, 4, False]),\n  ('regression: bull double',\n   (50, ['DB', 'S13', 'D3', 'S20', 'M', 'D18', 'M', 'T1']),\n   [0, 1, True]),\n  ('variant scenario 1', (32, ['T7', 'T20', 'D2', 'T20', 'D6', 'D19', 'D12']), [8, 4, False]),\n  ('variant scenario 2', (40, ['S3', 'S10', 'D16', 'D1', 'D3', 'D3']), [26, 2, False])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(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":"Stipulated, bounded toy contract stated in the contract field; not a claim of conformance with any governing body rulebook or operator house 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-sports-scoring-darts-double-out-bust-bull-double","generated_at":"2026-09-29T14:50:28.760003+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Darts scoring apps must implement bust reversion and double-out exactly.","root_cause":"The double-bull value is flagged as a single.","sha256":"01a53472fbdfe4cd1932a409ed08e7260a9e7787fc8832d23be47c17aba83578","title":"Double bull not accepted as a checkout double · 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":42.146,"exit_code":1,"observations":[{"actual":[0,1,true],"check":"control checkout on double","expected":[0,1,true],"passed":true},{"actual":[0,2,true],"check":"boundary finish on single busts","expected":[0,2,true],"passed":true},{"actual":[20,2,false],"check":"boundary leave one busts","expected":[20,2,false],"passed":true},{"actual":[25,1,false],"check":"control bull finish","expected":[0,1,true],"passed":false},{"actual":[0,2,true],"check":"boundary bust mid-turn reverts","expected":[0,2,true],"passed":true},{"actual":[20,1,false],"check":"control scoring turn","expected":[20,1,false],"passed":true},{"actual":[28,3,false],"check":"regression: bull double","expected":[0,2,true],"passed":false},{"actual":[11,3,false],"check":"variant scenario 1","expected":[11,3,false],"passed":true},{"actual":[4,4,false],"check":"variant scenario 2","expected":[4,4,false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control checkout on double\", \"actual\": [0, 1, true], \"expected\": [0, 1, true], \"passed\": true}, {\"check\": \"boundary finish on single busts\", \"actual\": [0, 2, true], \"expected\": [0, 2, true], \"passed\": true}, {\"check\": \"boundary leave one busts\", \"actual\": [20, 2, false], \"expected\": [20, 2, false], \"passed\": true}, {\"check\": \"control bull finish\", \"actual\": [25, 1, false], \"expected\": [0, 1, true], \"passed\": false}, {\"check\": \"boundary bust mid-turn reverts\", \"actual\": [0, 2, true], \"expected\": [0, 2, true], \"passed\": true}, {\"check\": \"control scoring turn\", \"actual\": [20, 1, false], \"expected\": [20, 1, false], \"passed\": true}, {\"check\": \"regression: bull double\", \"actual\": [28, 3, false], \"expected\": [0, 2, true], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [11, 3, false], \"expected\": [11, 3, false], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [4, 4, false], \"expected\": [4, 4, false], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.643,"exit_code":1,"observations":[{"actual":[0,1,true],"check":"control checkout on double","expected":[0,1,true],"passed":true},{"actual":[0,2,true],"check":"boundary finish on single busts","expected":[0,2,true],"passed":true},{"actual":[20,2,false],"check":"boundary leave one busts","expected":[20,2,false],"passed":true},{"actual":[50,1,false],"check":"control bull finish","expected":[0,1,true],"passed":false},{"actual":[0,2,true],"check":"boundary bust mid-turn reverts","expected":[0,2,true],"passed":true},{"actual":[20,1,false],"check":"control scoring turn","expected":[20,1,false],"passed":true},{"actual":[28,4,false],"check":"regression: bull double","expected":[0,2,true],"passed":false},{"actual":[11,3,false],"check":"variant scenario 1","expected":[11,3,false],"passed":true},{"actual":[4,4,false],"check":"variant scenario 2","expected":[4,4,false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control checkout on double\", \"actual\": [0, 1, true], \"expected\": [0, 1, true], \"passed\": true}, {\"check\": \"boundary finish on single busts\", \"actual\": [0, 2, true], \"expected\": [0, 2, true], \"passed\": true}, {\"check\": \"boundary leave one busts\", \"actual\": [20, 2, false], \"expected\": [20, 2, false], \"passed\": true}, {\"check\": \"control bull finish\", \"actual\": [50, 1, false], \"expected\": [0, 1, true], \"passed\": false}, {\"check\": \"boundary bust mid-turn reverts\", \"actual\": [0, 2, true], \"expected\": [0, 2, true], \"passed\": true}, {\"check\": \"control scoring turn\", \"actual\": [20, 1, false], \"expected\": [20, 1, false], \"passed\": true}, {\"check\": \"regression: bull double\", \"actual\": [28, 4, false], \"expected\": [0, 2, true], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [11, 3, false], \"expected\": [11, 3, false], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [4, 4, false], \"expected\": [4, 4, false], \"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."}}