{"abstract":"A bowler who delivered 5 balls for 1 run receives the best economy bonus.","category":"Fantasy sports scoring","checks":7,"contract":"Score a T20 bowling spell. Overs use cricket notation (\"3.4\" = 3 overs and 4 balls, 6 balls per over). Each wicket credited to the bowler scores 25 (run outs are not credited); bowled and lbw earn +8 each; haul bonus for 3/4/5+ credited wickets is 4/8/16 (highest only); maiden +12. Economy (exact runs per 6 balls) applies from 2 full overs (12 balls): <5 +6, <6 +4, <=7 +2, <10 0, <=11 -2, <=12 -4, else -6.","evaluation_group":"w2-fantasy-sports-scoring-cricket-bowling","failed_approach":"A strict comparison excludes spells of exactly two overs.","family":"w2-fantasy-sports-scoring-cricket-bowling-economy-minimum-overs-unit","id":"FA-85206","implementations":{"attempt":{"sha256":"31d2e5ced6e9fd9f7768a8f6e1ee42049d8372414c158778a557c164712d67ef","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(spell):\n    whole, _, part = spell['overs'].partition('.')\n    balls = int(whole) * 6 + int(part or 0)\n    wk = [d for d in spell['wickets'] if d != 'run out']\n    pts = 25 * len(wk)\n    pts += 8 * sum(1 for d in wk if d in ('bowled', 'lbw'))\n    if len(wk) >= 5:\n        pts += 16\n    elif len(wk) >= 4:\n        pts += 8\n    elif len(wk) >= 3:\n        pts += 4\n    pts += 12 * spell['maidens']\n    if balls > 12:\n        econ = Fraction(spell['runs'] * 6, balls)\n        if econ < 5:\n            pts += 6\n        elif econ < 6:\n            pts += 4\n        elif econ <= 7:\n            pts += 2\n        elif econ < 10:\n            pass\n        elif econ <= 11:\n            pts -= 2\n        elif econ <= 12:\n            pts -= 4\n        else:\n            pts -= 6\n    return {'balls': balls, 'points': pts}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '0.4', 'runs': 4, 'wickets': ['lbw', 'run out']}], {'balls': 4, 'points': 45}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '2', 'runs': 24, 'wickets': ['caught', 'caught', 'bowled', 'stumped']}],\n   {'balls': 12, 'points': 124}),\n  ('second regression', [{'maidens': 1, 'overs': '1.6', 'runs': 14, 'wickets': []}],\n   {'balls': 12, 'points': 14}),\n  ('normal control 1',\n   [{'maidens': 0,\n     'overs': '4',\n     'runs': 16,\n     'wickets': ['caught', 'bowled', 'run out', 'stumped', 'run out']}],\n   {'balls': 24, 'points': 93}),\n  ('normal control 2', [{'maidens': 0, 'overs': '3.4', 'runs': 44, 'wickets': ['caught', 'caught']}],\n   {'balls': 22, 'points': 46}),\n  ('normal control 3',\n   [{'maidens': 1,\n     'overs': '3.4',\n     'runs': 25,\n     'wickets': ['stumped', 'run out', 'run out', 'caught', 'bowled']}],\n   {'balls': 22, 'points': 101}),\n  ('normal control 4',\n   [{'maidens': 1, 'overs': '4', 'runs': 28, 'wickets': ['bowled', 'caught', 'caught', 'caught']}],\n   {'balls': 24, 'points': 130})],\n [('regression: economy minimum overs unit',\n   [{'maidens': 0, 'overs': '1.5', 'runs': 22, 'wickets': ['bowled', 'bowled', 'caught']}],\n   {'balls': 11, 'points': 95}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '2', 'runs': 14, 'wickets': ['run out', 'caught', 'caught', 'stumped']}],\n   {'balls': 12, 'points': 93}),\n  ('second regression', [{'maidens': 1, 'overs': '1.5', 'runs': 12, 'wickets': ['run out']}],\n   {'balls': 11, 'points': 12}),\n  ('normal control 1', [{'maidens': 0, 'overs': '3.4', 'runs': 44, 'wickets': ['caught', 'lbw']}],\n   {'balls': 22, 'points': 54}),\n  ('normal control 2', [{'maidens': 1, 'overs': '4', 'runs': 48, 'wickets': ['lbw']}],\n   {'balls': 24, 'points': 41}),\n  ('normal control 3',\n   [{'maidens': 0, 'overs': '2.3', 'runs': 17, 'wickets': ['run out', 'stumped', 'caught', 'caught']}],\n   {'balls': 15, 'points': 81}),\n  ('normal control 4', [{'maidens': 0, 'overs': '2.3', 'runs': 30, 'wickets': []}],\n   {'balls': 15, 'points': -4})],\n [('regression: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '1.5', 'runs': 12, 'wickets': ['run out', 'caught', 'lbw', 'bowled']}],\n   {'balls': 11, 'points': 107}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '2.0', 'runs': 14, 'wickets': ['run out', 'caught', 'run out', 'run out']}],\n   {'balls': 12, 'points': 39}),\n  ('second regression', [{'maidens': 1, 'overs': '0.4', 'runs': 0, 'wickets': ['lbw', 'caught']}],\n   {'balls': 4, 'points': 70}),\n  ('normal control 1', [{'maidens': 0, 'overs': '3.4', 'runs': 44, 'wickets': []}],\n   {'balls': 22, 'points': -4}),\n  ('normal control 2', [{'maidens': 0, 'overs': '1.5', 'runs': 15, 'wickets': []}],\n   {'balls': 11, 'points': 0}),\n  ('normal control 3',\n   [{'maidens': 0, 'overs': '3.4', 'runs': 25, 'wickets': ['lbw', 'bowled', 'caught', 'caught']}],\n   {'balls': 22, 'points': 126}),\n  ('normal control 4', [{'maidens': 1, 'overs': '3.4', 'runs': 29, 'wickets': []}],\n   {'balls': 22, 'points': 12})],\n [('regression: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '0.4', 'runs': 4, 'wickets': ['run out', 'bowled', 'run out']}],\n   {'balls': 4, 'points': 45}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '1.6', 'runs': 12, 'wickets': ['caught']}], {'balls': 12, 'points': 39}),\n  ('second regression',\n   [{'maidens': 1, 'overs': '1.5', 'runs': 11, 'wickets': ['lbw', 'caught', 'run out', 'caught']}],\n   {'balls': 11, 'points': 99}),\n  ('normal control 1', [{'maidens': 0, 'overs': '2.3', 'runs': 30, 'wickets': ['caught', 'caught']}],\n   {'balls': 15, 'points': 46}),\n  ('normal control 2', [{'maidens': 0, 'overs': '4', 'runs': 28, 'wickets': ['bowled', 'stumped']}],\n   {'balls': 24, 'points': 60}),\n  ('normal control 3',\n   [{'maidens': 1, 'overs': '4', 'runs': 28, 'wickets': ['stumped', 'stumped', 'stumped', 'stumped', 'lbw']}],\n   {'balls': 24, 'points': 163}),\n  ('normal control 4', [{'maidens': 1, 'overs': '4', 'runs': 28, 'wickets': ['lbw', 'bowled', 'bowled']}],\n   {'balls': 24, 'points': 117})],\n [('regression: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '1.5', 'runs': 12, 'wickets': ['run out', 'caught', 'stumped', 'lbw']}],\n   {'balls': 11, 'points': 99}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '1.6', 'runs': 14, 'wickets': ['lbw', 'stumped', 'caught', 'bowled', 'stumped']}],\n   {'balls': 12, 'points': 171}),\n  ('second regression', [{'maidens': 1, 'overs': '2.0', 'runs': 24, 'wickets': ['caught']}],\n   {'balls': 12, 'points': 33}),\n  ('normal control 1', [{'maidens': 0, 'overs': '4', 'runs': 28, 'wickets': ['run out']}],\n   {'balls': 24, 'points': 2}),\n  ('normal control 2', [{'maidens': 1, 'overs': '2.3', 'runs': 15, 'wickets': ['lbw', 'lbw']}],\n   {'balls': 15, 'points': 80}),\n  ('normal control 3',\n   [{'maidens': 0, 'overs': '3.4', 'runs': 44, 'wickets': ['stumped', 'stumped', 'caught', 'stumped']}],\n   {'balls': 22, 'points': 104}),\n  ('normal control 4',\n   [{'maidens': 0, 'overs': '3.4', 'runs': 22, 'wickets': ['lbw', 'lbw', 'lbw', 'bowled', 'lbw']}],\n   {'balls': 22, 'points': 183})]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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":"b9dd2ee1b97faae40cbb080ba9adad14866af95d9771ec26ccbb5859bfb0b346","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(spell):\n    whole, _, part = spell['overs'].partition('.')\n    balls = int(whole) * 6 + int(part or 0)\n    wk = [d for d in spell['wickets'] if d != 'run out']\n    pts = 25 * len(wk)\n    pts += 8 * sum(1 for d in wk if d in ('bowled', 'lbw'))\n    if len(wk) >= 5:\n        pts += 16\n    elif len(wk) >= 4:\n        pts += 8\n    elif len(wk) >= 3:\n        pts += 4\n    pts += 12 * spell['maidens']\n    if balls >= 2:\n        econ = Fraction(spell['runs'] * 6, balls)\n        if econ < 5:\n            pts += 6\n        elif econ < 6:\n            pts += 4\n        elif econ <= 7:\n            pts += 2\n        elif econ < 10:\n            pass\n        elif econ <= 11:\n            pts -= 2\n        elif econ <= 12:\n            pts -= 4\n        else:\n            pts -= 6\n    return {'balls': balls, 'points': pts}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '0.4', 'runs': 4, 'wickets': ['lbw', 'run out']}], {'balls': 4, 'points': 45}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '2', 'runs': 24, 'wickets': ['caught', 'caught', 'bowled', 'stumped']}],\n   {'balls': 12, 'points': 124}),\n  ('second regression', [{'maidens': 1, 'overs': '1.6', 'runs': 14, 'wickets': []}],\n   {'balls': 12, 'points': 14}),\n  ('normal control 1',\n   [{'maidens': 0,\n     'overs': '4',\n     'runs': 16,\n     'wickets': ['caught', 'bowled', 'run out', 'stumped', 'run out']}],\n   {'balls': 24, 'points': 93}),\n  ('normal control 2', [{'maidens': 0, 'overs': '3.4', 'runs': 44, 'wickets': ['caught', 'caught']}],\n   {'balls': 22, 'points': 46}),\n  ('normal control 3',\n   [{'maidens': 1,\n     'overs': '3.4',\n     'runs': 25,\n     'wickets': ['stumped', 'run out', 'run out', 'caught', 'bowled']}],\n   {'balls': 22, 'points': 101}),\n  ('normal control 4',\n   [{'maidens': 1, 'overs': '4', 'runs': 28, 'wickets': ['bowled', 'caught', 'caught', 'caught']}],\n   {'balls': 24, 'points': 130})],\n [('regression: economy minimum overs unit',\n   [{'maidens': 0, 'overs': '1.5', 'runs': 22, 'wickets': ['bowled', 'bowled', 'caught']}],\n   {'balls': 11, 'points': 95}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '2', 'runs': 14, 'wickets': ['run out', 'caught', 'caught', 'stumped']}],\n   {'balls': 12, 'points': 93}),\n  ('second regression', [{'maidens': 1, 'overs': '1.5', 'runs': 12, 'wickets': ['run out']}],\n   {'balls': 11, 'points': 12}),\n  ('normal control 1', [{'maidens': 0, 'overs': '3.4', 'runs': 44, 'wickets': ['caught', 'lbw']}],\n   {'balls': 22, 'points': 54}),\n  ('normal control 2', [{'maidens': 1, 'overs': '4', 'runs': 48, 'wickets': ['lbw']}],\n   {'balls': 24, 'points': 41}),\n  ('normal control 3',\n   [{'maidens': 0, 'overs': '2.3', 'runs': 17, 'wickets': ['run out', 'stumped', 'caught', 'caught']}],\n   {'balls': 15, 'points': 81}),\n  ('normal control 4', [{'maidens': 0, 'overs': '2.3', 'runs': 30, 'wickets': []}],\n   {'balls': 15, 'points': -4})],\n [('regression: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '1.5', 'runs': 12, 'wickets': ['run out', 'caught', 'lbw', 'bowled']}],\n   {'balls': 11, 'points': 107}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '2.0', 'runs': 14, 'wickets': ['run out', 'caught', 'run out', 'run out']}],\n   {'balls': 12, 'points': 39}),\n  ('second regression', [{'maidens': 1, 'overs': '0.4', 'runs': 0, 'wickets': ['lbw', 'caught']}],\n   {'balls': 4, 'points': 70}),\n  ('normal control 1', [{'maidens': 0, 'overs': '3.4', 'runs': 44, 'wickets': []}],\n   {'balls': 22, 'points': -4}),\n  ('normal control 2', [{'maidens': 0, 'overs': '1.5', 'runs': 15, 'wickets': []}],\n   {'balls': 11, 'points': 0}),\n  ('normal control 3',\n   [{'maidens': 0, 'overs': '3.4', 'runs': 25, 'wickets': ['lbw', 'bowled', 'caught', 'caught']}],\n   {'balls': 22, 'points': 126}),\n  ('normal control 4', [{'maidens': 1, 'overs': '3.4', 'runs': 29, 'wickets': []}],\n   {'balls': 22, 'points': 12})],\n [('regression: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '0.4', 'runs': 4, 'wickets': ['run out', 'bowled', 'run out']}],\n   {'balls': 4, 'points': 45}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '1.6', 'runs': 12, 'wickets': ['caught']}], {'balls': 12, 'points': 39}),\n  ('second regression',\n   [{'maidens': 1, 'overs': '1.5', 'runs': 11, 'wickets': ['lbw', 'caught', 'run out', 'caught']}],\n   {'balls': 11, 'points': 99}),\n  ('normal control 1', [{'maidens': 0, 'overs': '2.3', 'runs': 30, 'wickets': ['caught', 'caught']}],\n   {'balls': 15, 'points': 46}),\n  ('normal control 2', [{'maidens': 0, 'overs': '4', 'runs': 28, 'wickets': ['bowled', 'stumped']}],\n   {'balls': 24, 'points': 60}),\n  ('normal control 3',\n   [{'maidens': 1, 'overs': '4', 'runs': 28, 'wickets': ['stumped', 'stumped', 'stumped', 'stumped', 'lbw']}],\n   {'balls': 24, 'points': 163}),\n  ('normal control 4', [{'maidens': 1, 'overs': '4', 'runs': 28, 'wickets': ['lbw', 'bowled', 'bowled']}],\n   {'balls': 24, 'points': 117})],\n [('regression: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '1.5', 'runs': 12, 'wickets': ['run out', 'caught', 'stumped', 'lbw']}],\n   {'balls': 11, 'points': 99}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '1.6', 'runs': 14, 'wickets': ['lbw', 'stumped', 'caught', 'bowled', 'stumped']}],\n   {'balls': 12, 'points': 171}),\n  ('second regression', [{'maidens': 1, 'overs': '2.0', 'runs': 24, 'wickets': ['caught']}],\n   {'balls': 12, 'points': 33}),\n  ('normal control 1', [{'maidens': 0, 'overs': '4', 'runs': 28, 'wickets': ['run out']}],\n   {'balls': 24, 'points': 2}),\n  ('normal control 2', [{'maidens': 1, 'overs': '2.3', 'runs': 15, 'wickets': ['lbw', 'lbw']}],\n   {'balls': 15, 'points': 80}),\n  ('normal control 3',\n   [{'maidens': 0, 'overs': '3.4', 'runs': 44, 'wickets': ['stumped', 'stumped', 'caught', 'stumped']}],\n   {'balls': 22, 'points': 104}),\n  ('normal control 4',\n   [{'maidens': 0, 'overs': '3.4', 'runs': 22, 'wickets': ['lbw', 'lbw', 'lbw', 'bowled', 'lbw']}],\n   {'balls': 22, 'points': 183})]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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"},"fixed":{"sha256":"91d0af3c54bf916c468a48e69833427d77b41217ca9c54b7734ef941640aace8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(spell):\n    whole, _, part = spell['overs'].partition('.')\n    balls = int(whole) * 6 + int(part or 0)\n    wk = [d for d in spell['wickets'] if d != 'run out']\n    pts = 25 * len(wk)\n    pts += 8 * sum(1 for d in wk if d in ('bowled', 'lbw'))\n    if len(wk) >= 5:\n        pts += 16\n    elif len(wk) >= 4:\n        pts += 8\n    elif len(wk) >= 3:\n        pts += 4\n    pts += 12 * spell['maidens']\n    if balls >= 12:\n        econ = Fraction(spell['runs'] * 6, balls)\n        if econ < 5:\n            pts += 6\n        elif econ < 6:\n            pts += 4\n        elif econ <= 7:\n            pts += 2\n        elif econ < 10:\n            pass\n        elif econ <= 11:\n            pts -= 2\n        elif econ <= 12:\n            pts -= 4\n        else:\n            pts -= 6\n    return {'balls': balls, 'points': pts}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '0.4', 'runs': 4, 'wickets': ['lbw', 'run out']}], {'balls': 4, 'points': 45}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '2', 'runs': 24, 'wickets': ['caught', 'caught', 'bowled', 'stumped']}],\n   {'balls': 12, 'points': 124}),\n  ('second regression', [{'maidens': 1, 'overs': '1.6', 'runs': 14, 'wickets': []}],\n   {'balls': 12, 'points': 14}),\n  ('normal control 1',\n   [{'maidens': 0,\n     'overs': '4',\n     'runs': 16,\n     'wickets': ['caught', 'bowled', 'run out', 'stumped', 'run out']}],\n   {'balls': 24, 'points': 93}),\n  ('normal control 2', [{'maidens': 0, 'overs': '3.4', 'runs': 44, 'wickets': ['caught', 'caught']}],\n   {'balls': 22, 'points': 46}),\n  ('normal control 3',\n   [{'maidens': 1,\n     'overs': '3.4',\n     'runs': 25,\n     'wickets': ['stumped', 'run out', 'run out', 'caught', 'bowled']}],\n   {'balls': 22, 'points': 101}),\n  ('normal control 4',\n   [{'maidens': 1, 'overs': '4', 'runs': 28, 'wickets': ['bowled', 'caught', 'caught', 'caught']}],\n   {'balls': 24, 'points': 130})],\n [('regression: economy minimum overs unit',\n   [{'maidens': 0, 'overs': '1.5', 'runs': 22, 'wickets': ['bowled', 'bowled', 'caught']}],\n   {'balls': 11, 'points': 95}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '2', 'runs': 14, 'wickets': ['run out', 'caught', 'caught', 'stumped']}],\n   {'balls': 12, 'points': 93}),\n  ('second regression', [{'maidens': 1, 'overs': '1.5', 'runs': 12, 'wickets': ['run out']}],\n   {'balls': 11, 'points': 12}),\n  ('normal control 1', [{'maidens': 0, 'overs': '3.4', 'runs': 44, 'wickets': ['caught', 'lbw']}],\n   {'balls': 22, 'points': 54}),\n  ('normal control 2', [{'maidens': 1, 'overs': '4', 'runs': 48, 'wickets': ['lbw']}],\n   {'balls': 24, 'points': 41}),\n  ('normal control 3',\n   [{'maidens': 0, 'overs': '2.3', 'runs': 17, 'wickets': ['run out', 'stumped', 'caught', 'caught']}],\n   {'balls': 15, 'points': 81}),\n  ('normal control 4', [{'maidens': 0, 'overs': '2.3', 'runs': 30, 'wickets': []}],\n   {'balls': 15, 'points': -4})],\n [('regression: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '1.5', 'runs': 12, 'wickets': ['run out', 'caught', 'lbw', 'bowled']}],\n   {'balls': 11, 'points': 107}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '2.0', 'runs': 14, 'wickets': ['run out', 'caught', 'run out', 'run out']}],\n   {'balls': 12, 'points': 39}),\n  ('second regression', [{'maidens': 1, 'overs': '0.4', 'runs': 0, 'wickets': ['lbw', 'caught']}],\n   {'balls': 4, 'points': 70}),\n  ('normal control 1', [{'maidens': 0, 'overs': '3.4', 'runs': 44, 'wickets': []}],\n   {'balls': 22, 'points': -4}),\n  ('normal control 2', [{'maidens': 0, 'overs': '1.5', 'runs': 15, 'wickets': []}],\n   {'balls': 11, 'points': 0}),\n  ('normal control 3',\n   [{'maidens': 0, 'overs': '3.4', 'runs': 25, 'wickets': ['lbw', 'bowled', 'caught', 'caught']}],\n   {'balls': 22, 'points': 126}),\n  ('normal control 4', [{'maidens': 1, 'overs': '3.4', 'runs': 29, 'wickets': []}],\n   {'balls': 22, 'points': 12})],\n [('regression: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '0.4', 'runs': 4, 'wickets': ['run out', 'bowled', 'run out']}],\n   {'balls': 4, 'points': 45}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '1.6', 'runs': 12, 'wickets': ['caught']}], {'balls': 12, 'points': 39}),\n  ('second regression',\n   [{'maidens': 1, 'overs': '1.5', 'runs': 11, 'wickets': ['lbw', 'caught', 'run out', 'caught']}],\n   {'balls': 11, 'points': 99}),\n  ('normal control 1', [{'maidens': 0, 'overs': '2.3', 'runs': 30, 'wickets': ['caught', 'caught']}],\n   {'balls': 15, 'points': 46}),\n  ('normal control 2', [{'maidens': 0, 'overs': '4', 'runs': 28, 'wickets': ['bowled', 'stumped']}],\n   {'balls': 24, 'points': 60}),\n  ('normal control 3',\n   [{'maidens': 1, 'overs': '4', 'runs': 28, 'wickets': ['stumped', 'stumped', 'stumped', 'stumped', 'lbw']}],\n   {'balls': 24, 'points': 163}),\n  ('normal control 4', [{'maidens': 1, 'overs': '4', 'runs': 28, 'wickets': ['lbw', 'bowled', 'bowled']}],\n   {'balls': 24, 'points': 117})],\n [('regression: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '1.5', 'runs': 12, 'wickets': ['run out', 'caught', 'stumped', 'lbw']}],\n   {'balls': 11, 'points': 99}),\n  ('partial repair probe: economy minimum overs unit',\n   [{'maidens': 1, 'overs': '1.6', 'runs': 14, 'wickets': ['lbw', 'stumped', 'caught', 'bowled', 'stumped']}],\n   {'balls': 12, 'points': 171}),\n  ('second regression', [{'maidens': 1, 'overs': '2.0', 'runs': 24, 'wickets': ['caught']}],\n   {'balls': 12, 'points': 33}),\n  ('normal control 1', [{'maidens': 0, 'overs': '4', 'runs': 28, 'wickets': ['run out']}],\n   {'balls': 24, 'points': 2}),\n  ('normal control 2', [{'maidens': 1, 'overs': '2.3', 'runs': 15, 'wickets': ['lbw', 'lbw']}],\n   {'balls': 15, 'points': 80}),\n  ('normal control 3',\n   [{'maidens': 0, 'overs': '3.4', 'runs': 44, 'wickets': ['stumped', 'stumped', 'caught', 'stumped']}],\n   {'balls': 22, 'points': 104}),\n  ('normal control 4',\n   [{'maidens': 0, 'overs': '3.4', 'runs': 22, 'wickets': ['lbw', 'lbw', 'lbw', 'bowled', 'lbw']}],\n   {'balls': 22, 'points': 183})]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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 deterministic toy scoring contract stipulated for this example; it is not the rulebook of any real fantasy platform. 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-fantasy-sports-scoring-cricket-bowling-economy-minimum-overs-unit","generated_at":"2026-09-29T14:50:38.289920+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Bowling points depend on which dismissals are credited and on economy computed from ball counts, not decimal overs.","repair":"Require at least 12 balls (two full overs).","root_cause":"The minimum is compared in balls using the over count 2.","sha256":"4aa9ffd2e310d2ec055b2d6e7a821f7ee27ae738fc6f98e5a04869940b8c67c1","title":"Economy bonus applied after two balls instead of two overs · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.206,"exit_code":1,"observations":[{"actual":{"balls":4,"points":45},"check":"regression: economy minimum overs unit","expected":{"balls":4,"points":45},"passed":true},{"actual":{"balls":12,"points":128},"check":"partial repair probe: economy minimum overs unit","expected":{"balls":12,"points":124},"passed":false},{"actual":{"balls":12,"points":12},"check":"second regression","expected":{"balls":12,"points":14},"passed":false},{"actual":{"balls":24,"points":93},"check":"normal control 1","expected":{"balls":24,"points":93},"passed":true},{"actual":{"balls":22,"points":46},"check":"normal control 2","expected":{"balls":22,"points":46},"passed":true},{"actual":{"balls":22,"points":101},"check":"normal control 3","expected":{"balls":22,"points":101},"passed":true},{"actual":{"balls":24,"points":130},"check":"normal control 4","expected":{"balls":24,"points":130},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: economy minimum overs unit\", \"actual\": {\"balls\": 4, \"points\": 45}, \"expected\": {\"balls\": 4, \"points\": 45}, \"passed\": true}, {\"check\": \"partial repair probe: economy minimum overs unit\", \"actual\": {\"balls\": 12, \"points\": 128}, \"expected\": {\"balls\": 12, \"points\": 124}, \"passed\": false}, {\"check\": \"second regression\", \"actual\": {\"balls\": 12, \"points\": 12}, \"expected\": {\"balls\": 12, \"points\": 14}, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": {\"balls\": 24, \"points\": 93}, \"expected\": {\"balls\": 24, \"points\": 93}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"balls\": 22, \"points\": 46}, \"expected\": {\"balls\": 22, \"points\": 46}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"balls\": 22, \"points\": 101}, \"expected\": {\"balls\": 22, \"points\": 101}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"balls\": 24, \"points\": 130}, \"expected\": {\"balls\": 24, \"points\": 130}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.341,"exit_code":1,"observations":[{"actual":{"balls":4,"points":47},"check":"regression: economy minimum overs unit","expected":{"balls":4,"points":45},"passed":false},{"actual":{"balls":12,"points":124},"check":"partial repair probe: economy minimum overs unit","expected":{"balls":12,"points":124},"passed":true},{"actual":{"balls":12,"points":14},"check":"second regression","expected":{"balls":12,"points":14},"passed":true},{"actual":{"balls":24,"points":93},"check":"normal control 1","expected":{"balls":24,"points":93},"passed":true},{"actual":{"balls":22,"points":46},"check":"normal control 2","expected":{"balls":22,"points":46},"passed":true},{"actual":{"balls":22,"points":101},"check":"normal control 3","expected":{"balls":22,"points":101},"passed":true},{"actual":{"balls":24,"points":130},"check":"normal control 4","expected":{"balls":24,"points":130},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: economy minimum overs unit\", \"actual\": {\"balls\": 4, \"points\": 47}, \"expected\": {\"balls\": 4, \"points\": 45}, \"passed\": false}, {\"check\": \"partial repair probe: economy minimum overs unit\", \"actual\": {\"balls\": 12, \"points\": 124}, \"expected\": {\"balls\": 12, \"points\": 124}, \"passed\": true}, {\"check\": \"second regression\", \"actual\": {\"balls\": 12, \"points\": 14}, \"expected\": {\"balls\": 12, \"points\": 14}, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": {\"balls\": 24, \"points\": 93}, \"expected\": {\"balls\": 24, \"points\": 93}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"balls\": 22, \"points\": 46}, \"expected\": {\"balls\": 22, \"points\": 46}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"balls\": 22, \"points\": 101}, \"expected\": {\"balls\": 22, \"points\": 101}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"balls\": 24, \"points\": 130}, \"expected\": {\"balls\": 24, \"points\": 130}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.835,"exit_code":0,"observations":[{"actual":{"balls":4,"points":45},"check":"regression: economy minimum overs unit","expected":{"balls":4,"points":45},"passed":true},{"actual":{"balls":12,"points":124},"check":"partial repair probe: economy minimum overs unit","expected":{"balls":12,"points":124},"passed":true},{"actual":{"balls":12,"points":14},"check":"second regression","expected":{"balls":12,"points":14},"passed":true},{"actual":{"balls":24,"points":93},"check":"normal control 1","expected":{"balls":24,"points":93},"passed":true},{"actual":{"balls":22,"points":46},"check":"normal control 2","expected":{"balls":22,"points":46},"passed":true},{"actual":{"balls":22,"points":101},"check":"normal control 3","expected":{"balls":22,"points":101},"passed":true},{"actual":{"balls":24,"points":130},"check":"normal control 4","expected":{"balls":24,"points":130},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: economy minimum overs unit\", \"actual\": {\"balls\": 4, \"points\": 45}, \"expected\": {\"balls\": 4, \"points\": 45}, \"passed\": true}, {\"check\": \"partial repair probe: economy minimum overs unit\", \"actual\": {\"balls\": 12, \"points\": 124}, \"expected\": {\"balls\": 12, \"points\": 124}, \"passed\": true}, {\"check\": \"second regression\", \"actual\": {\"balls\": 12, \"points\": 14}, \"expected\": {\"balls\": 12, \"points\": 14}, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": {\"balls\": 24, \"points\": 93}, \"expected\": {\"balls\": 24, \"points\": 93}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"balls\": 22, \"points\": 46}, \"expected\": {\"balls\": 22, \"points\": 46}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"balls\": 22, \"points\": 101}, \"expected\": {\"balls\": 22, \"points\": 101}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"balls\": 24, \"points\": 130}, \"expected\": {\"balls\": 24, \"points\": 130}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}