{"abstract":"\"43.4\" overs is treated as 43.4 decimal overs, skewing net run rate.","category":"Sports scoring and tiebreakers","checks":9,"contract":"Tournament net run rate. Each match row is [runs_for, overs_faced, all_out_for, runs_against, overs_bowled, all_out_against]. Overs strings use cricket notation \"O.B\" where B is balls 0-5 (\"43.4\" = 43 overs 4 balls); a ball digit above 5 returns \"invalid overs\". When a side was all out its innings counts as the full quota of overs. NRR = total runs for / total overs faced - total runs against / total overs bowled, aggregated over all matches before dividing, formatted as \"%+.3f\" of the exact value. If either overs total is zero return \"no overs\".","evaluation_group":"w2-sports-scoring-cricket-net-run-rate","failed_approach":"Treating the ball digit as tenths of six balls (part * 6 // 10) still misweights partial overs.","family":"w2-sports-scoring-cricket-net-run-rate-overs-notation","id":"FA-83961","implementations":{"attempt":{"sha256":"00be4c4d182f6c39334bbbb1c4443700fb0c3b4eff995542c333710fa84921a0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(matches, quota):\n    def balls(text):\n        whole, _, part = text.partition('.')\n        part = int(part or 0)\n        if part > 5:\n            return None\n        return int(whole) * 6 + part * 6 // 10\n    rf = bf = ra = ba = 0\n    for runs_for, faced, out_for, runs_against, bowled, out_against in matches:\n        f = quota * 6 if out_for else balls(faced)\n        g = quota * 6 if out_against else balls(bowled)\n        if f is None or g is None:\n            return 'invalid overs'\n        rf += runs_for\n        bf += f\n        ra += runs_against\n        ba += g\n    if bf == 0 or ba == 0:\n        return 'no overs'\n    value = Fraction(rf * 6, bf) - Fraction(ra * 6, ba)\n    return '%+.3f' % float(value)\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 single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation', ([[332, '21.5', True, 294, '15.2', False]], 50), '-12.534'),\n  ('variant scenario 1', ([[277, '13.1', True, 344, '5', True]], 20), '-3.350'),\n  ('variant scenario 2',\n   ([[290, '37.4', False, 163, '3.4', True], [227, '17.1', False, 84, '26.5', False]], 50),\n   '+6.214')],\n [('control single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation',\n   ([[334, '41.1', False, 189, '29.0', False],\n     [228, '44.4', True, 194, '6.0', False],\n     [213, '10.4', False, 157, '34.4', False],\n     [323, '30.3', False, 228, '0.4', False]],\n    20),\n   '-0.190'),\n  ('variant scenario 1', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('variant scenario 2',\n   ([[106, '30.1', False, 295, '38.1', False],\n     [338, '47.3', False, 295, '10.4', True],\n     [129, '47', True, 106, '50.4', False]],\n    20),\n   '-0.528')],\n [('control single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation',\n   ([[124, '12.2', True, 200, '37.3', False],\n     [249, '50.5', True, 118, '35.0', False],\n     [276, '8.3', False, 220, '32', False],\n     [301, '36.4', True, 141, '30.2', True]],\n    20),\n   '+8.415'),\n  ('variant scenario 1',\n   ([[194, '27', True, 107, '4.0', False],\n     [275, '49.2', True, 248, '36', True],\n     [184, '13.4', True, 319, '49.4', True]],\n    50),\n   '-2.127'),\n  ('variant scenario 2',\n   ([[160, '2.4', False, 141, '30.4', True], [311, '9.0', False, 308, '36.1', False]], 50),\n   '+35.161')],\n [('control single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation',\n   ([[234, '41.0', False, 232, '28.1', False],\n     [337, '0', False, 86, '32.5', False],\n     [282, '26.3', True, 240, '11.7', True],\n     [209, '43.2', False, 101, '12', False]],\n    20),\n   '+3.093'),\n  ('variant scenario 1',\n   ([[100, '7.3', True, 230, '8.1', True],\n     [255, '28', False, 125, '15.2', False],\n     [105, '8.3', False, 323, '24.4', True],\n     [191, '23.5', False, 223, '21.0', True],\n     [291, '34.5', False, 104, '40.4', False],\n     [100, '41.4', False, 344, '31.2', True]],\n    20),\n   '-3.275'),\n  ('variant scenario 2',\n   ([[221, '18.2', True, 95, '18.2', False],\n     [205, '36.4', False, 287, '24.2', False],\n     [180, '43.3', False, 224, '9.3', False]],\n    20),\n   '-5.567')],\n [('control single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation',\n   ([[160, '1.1', False, 175, '22.4', False],\n     [256, '46.1', True, 300, '0.4', False],\n     [303, '43.0', False, 302, '16.3', False],\n     [350, '13', False, 142, '28.4', True],\n     [323, '39.4', True, 266, '42.2', False],\n     [332, '36.1', False, 99, '5.1', False]],\n    50),\n   '-0.432'),\n  ('variant scenario 1',\n   ([[292, '42.1', False, 105, '16.2', False], [154, '36.5', False, 159, '19.5', False]], 50),\n   '-1.654'),\n  ('variant scenario 2', ([[0, '0', False, 0, '0', False]], 50), 'no overs')]]\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":"10c9bd6e6c761d1d3ad803d8491afb5e70df4d1868be3244293b46816374bd07","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(matches, quota):\n    def balls(text):\n        whole, _, part = text.partition('.')\n        part = int(part or 0)\n        if part > 5:\n            return None\n        return round(float(text) * 6)\n    rf = bf = ra = ba = 0\n    for runs_for, faced, out_for, runs_against, bowled, out_against in matches:\n        f = quota * 6 if out_for else balls(faced)\n        g = quota * 6 if out_against else balls(bowled)\n        if f is None or g is None:\n            return 'invalid overs'\n        rf += runs_for\n        bf += f\n        ra += runs_against\n        ba += g\n    if bf == 0 or ba == 0:\n        return 'no overs'\n    value = Fraction(rf * 6, bf) - Fraction(ra * 6, ba)\n    return '%+.3f' % float(value)\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 single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation', ([[332, '21.5', True, 294, '15.2', False]], 50), '-12.534'),\n  ('variant scenario 1', ([[277, '13.1', True, 344, '5', True]], 20), '-3.350'),\n  ('variant scenario 2',\n   ([[290, '37.4', False, 163, '3.4', True], [227, '17.1', False, 84, '26.5', False]], 50),\n   '+6.214')],\n [('control single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation',\n   ([[334, '41.1', False, 189, '29.0', False],\n     [228, '44.4', True, 194, '6.0', False],\n     [213, '10.4', False, 157, '34.4', False],\n     [323, '30.3', False, 228, '0.4', False]],\n    20),\n   '-0.190'),\n  ('variant scenario 1', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('variant scenario 2',\n   ([[106, '30.1', False, 295, '38.1', False],\n     [338, '47.3', False, 295, '10.4', True],\n     [129, '47', True, 106, '50.4', False]],\n    20),\n   '-0.528')],\n [('control single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation',\n   ([[124, '12.2', True, 200, '37.3', False],\n     [249, '50.5', True, 118, '35.0', False],\n     [276, '8.3', False, 220, '32', False],\n     [301, '36.4', True, 141, '30.2', True]],\n    20),\n   '+8.415'),\n  ('variant scenario 1',\n   ([[194, '27', True, 107, '4.0', False],\n     [275, '49.2', True, 248, '36', True],\n     [184, '13.4', True, 319, '49.4', True]],\n    50),\n   '-2.127'),\n  ('variant scenario 2',\n   ([[160, '2.4', False, 141, '30.4', True], [311, '9.0', False, 308, '36.1', False]], 50),\n   '+35.161')],\n [('control single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation',\n   ([[234, '41.0', False, 232, '28.1', False],\n     [337, '0', False, 86, '32.5', False],\n     [282, '26.3', True, 240, '11.7', True],\n     [209, '43.2', False, 101, '12', False]],\n    20),\n   '+3.093'),\n  ('variant scenario 1',\n   ([[100, '7.3', True, 230, '8.1', True],\n     [255, '28', False, 125, '15.2', False],\n     [105, '8.3', False, 323, '24.4', True],\n     [191, '23.5', False, 223, '21.0', True],\n     [291, '34.5', False, 104, '40.4', False],\n     [100, '41.4', False, 344, '31.2', True]],\n    20),\n   '-3.275'),\n  ('variant scenario 2',\n   ([[221, '18.2', True, 95, '18.2', False],\n     [205, '36.4', False, 287, '24.2', False],\n     [180, '43.3', False, 224, '9.3', False]],\n    20),\n   '-5.567')],\n [('control single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation',\n   ([[160, '1.1', False, 175, '22.4', False],\n     [256, '46.1', True, 300, '0.4', False],\n     [303, '43.0', False, 302, '16.3', False],\n     [350, '13', False, 142, '28.4', True],\n     [323, '39.4', True, 266, '42.2', False],\n     [332, '36.1', False, 99, '5.1', False]],\n    50),\n   '-0.432'),\n  ('variant scenario 1',\n   ([[292, '42.1', False, 105, '16.2', False], [154, '36.5', False, 159, '19.5', False]], 50),\n   '-1.654'),\n  ('variant scenario 2', ([[0, '0', False, 0, '0', False]], 50), 'no overs')]]\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"},"fixed":{"sha256":"5997a5cc421c97d4ca357efa021c3d970def1f8e97bee051eed6917d35948b9c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(matches, quota):\n    def balls(text):\n        whole, _, part = text.partition('.')\n        part = int(part or 0)\n        if part > 5:\n            return None\n        return int(whole) * 6 + part\n    rf = bf = ra = ba = 0\n    for runs_for, faced, out_for, runs_against, bowled, out_against in matches:\n        f = quota * 6 if out_for else balls(faced)\n        g = quota * 6 if out_against else balls(bowled)\n        if f is None or g is None:\n            return 'invalid overs'\n        rf += runs_for\n        bf += f\n        ra += runs_against\n        ba += g\n    if bf == 0 or ba == 0:\n        return 'no overs'\n    value = Fraction(rf * 6, bf) - Fraction(ra * 6, ba)\n    return '%+.3f' % float(value)\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 single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation', ([[332, '21.5', True, 294, '15.2', False]], 50), '-12.534'),\n  ('variant scenario 1', ([[277, '13.1', True, 344, '5', True]], 20), '-3.350'),\n  ('variant scenario 2',\n   ([[290, '37.4', False, 163, '3.4', True], [227, '17.1', False, 84, '26.5', False]], 50),\n   '+6.214')],\n [('control single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation',\n   ([[334, '41.1', False, 189, '29.0', False],\n     [228, '44.4', True, 194, '6.0', False],\n     [213, '10.4', False, 157, '34.4', False],\n     [323, '30.3', False, 228, '0.4', False]],\n    20),\n   '-0.190'),\n  ('variant scenario 1', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('variant scenario 2',\n   ([[106, '30.1', False, 295, '38.1', False],\n     [338, '47.3', False, 295, '10.4', True],\n     [129, '47', True, 106, '50.4', False]],\n    20),\n   '-0.528')],\n [('control single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation',\n   ([[124, '12.2', True, 200, '37.3', False],\n     [249, '50.5', True, 118, '35.0', False],\n     [276, '8.3', False, 220, '32', False],\n     [301, '36.4', True, 141, '30.2', True]],\n    20),\n   '+8.415'),\n  ('variant scenario 1',\n   ([[194, '27', True, 107, '4.0', False],\n     [275, '49.2', True, 248, '36', True],\n     [184, '13.4', True, 319, '49.4', True]],\n    50),\n   '-2.127'),\n  ('variant scenario 2',\n   ([[160, '2.4', False, 141, '30.4', True], [311, '9.0', False, 308, '36.1', False]], 50),\n   '+35.161')],\n [('control single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation',\n   ([[234, '41.0', False, 232, '28.1', False],\n     [337, '0', False, 86, '32.5', False],\n     [282, '26.3', True, 240, '11.7', True],\n     [209, '43.2', False, 101, '12', False]],\n    20),\n   '+3.093'),\n  ('variant scenario 1',\n   ([[100, '7.3', True, 230, '8.1', True],\n     [255, '28', False, 125, '15.2', False],\n     [105, '8.3', False, 323, '24.4', True],\n     [191, '23.5', False, 223, '21.0', True],\n     [291, '34.5', False, 104, '40.4', False],\n     [100, '41.4', False, 344, '31.2', True]],\n    20),\n   '-3.275'),\n  ('variant scenario 2',\n   ([[221, '18.2', True, 95, '18.2', False],\n     [205, '36.4', False, 287, '24.2', False],\n     [180, '43.3', False, 224, '9.3', False]],\n    20),\n   '-5.567')],\n [('control single match', ([[300, '50', False, 250, '50', False]], 50), '+1.000'),\n  ('boundary partial over', ([[150, '20.3', False, 150, '25', False]], 50), '+1.317'),\n  ('boundary all out uses quota', ([[120, '15.2', True, 121, '18.1', False]], 20), '-0.661'),\n  ('boundary invalid ball digit', ([[100, '10.6', False, 90, '10', False]], 20), 'invalid overs'),\n  ('control no overs', ([[0, '0', False, 0, '0', False]], 20), 'no overs'),\n  ('control negative rate', ([[100, '20', False, 160, '20', False]], 20), '-3.000'),\n  ('regression: overs notation',\n   ([[160, '1.1', False, 175, '22.4', False],\n     [256, '46.1', True, 300, '0.4', False],\n     [303, '43.0', False, 302, '16.3', False],\n     [350, '13', False, 142, '28.4', True],\n     [323, '39.4', True, 266, '42.2', False],\n     [332, '36.1', False, 99, '5.1', False]],\n    50),\n   '-0.432'),\n  ('variant scenario 1',\n   ([[292, '42.1', False, 105, '16.2', False], [154, '36.5', False, 159, '19.5', False]], 50),\n   '-1.654'),\n  ('variant scenario 2', ([[0, '0', False, 0, '0', False]], 50), 'no overs')]]\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-cricket-net-run-rate-overs-notation","generated_at":"2026-09-29T14:50:26.510258+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Group-stage standings use net run rate as the first tiebreaker after points.","repair":"Split the notation and count the digit after the point as balls.","root_cause":"The overs string is converted with float() and multiplied by six, reading the ball digit as tenths.","sha256":"dc50d8ba705106ab9d9d4c8da981e91abc42f02342d79cd63cb57e2a52bd32cc","title":"Cricket overs notation parsed as a decimal fraction · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.288,"exit_code":1,"observations":[{"actual":"+1.000","check":"control single match","expected":"+1.000","passed":true},{"actual":"+1.438","check":"boundary partial over","expected":"+1.317","passed":false},{"actual":"-0.722","check":"boundary all out uses quota","expected":"-0.661","passed":false},{"actual":"invalid overs","check":"boundary invalid ball digit","expected":"invalid overs","passed":true},{"actual":"no overs","check":"control no overs","expected":"no overs","passed":true},{"actual":"-3.000","check":"control negative rate","expected":"-3.000","passed":true},{"actual":"-12.745","check":"regression: overs notation","expected":"-12.534","passed":false},{"actual":"-3.350","check":"variant scenario 1","expected":"-3.350","passed":true},{"actual":"+6.287","check":"variant scenario 2","expected":"+6.214","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control single match\", \"actual\": \"+1.000\", \"expected\": \"+1.000\", \"passed\": true}, {\"check\": \"boundary partial over\", \"actual\": \"+1.438\", \"expected\": \"+1.317\", \"passed\": false}, {\"check\": \"boundary all out uses quota\", \"actual\": \"-0.722\", \"expected\": \"-0.661\", \"passed\": false}, {\"check\": \"boundary invalid ball digit\", \"actual\": \"invalid overs\", \"expected\": \"invalid overs\", \"passed\": true}, {\"check\": \"control no overs\", \"actual\": \"no overs\", \"expected\": \"no overs\", \"passed\": true}, {\"check\": \"control negative rate\", \"actual\": \"-3.000\", \"expected\": \"-3.000\", \"passed\": true}, {\"check\": \"regression: overs notation\", \"actual\": \"-12.745\", \"expected\": \"-12.534\", \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": \"-3.350\", \"expected\": \"-3.350\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"+6.287\", \"expected\": \"+6.214\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.608,"exit_code":1,"observations":[{"actual":"+1.000","check":"control single match","expected":"+1.000","passed":true},{"actual":"+1.377","check":"boundary partial over","expected":"+1.317","passed":false},{"actual":"-0.661","check":"boundary all out uses quota","expected":"-0.661","passed":true},{"actual":"invalid overs","check":"boundary invalid ball digit","expected":"invalid overs","passed":true},{"actual":"no overs","check":"control no overs","expected":"no overs","passed":true},{"actual":"-3.000","check":"control negative rate","expected":"-3.000","passed":true},{"actual":"-12.745","check":"regression: overs notation","expected":"-12.534","passed":false},{"actual":"-3.350","check":"variant scenario 1","expected":"-3.350","passed":true},{"actual":"+6.257","check":"variant scenario 2","expected":"+6.214","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control single match\", \"actual\": \"+1.000\", \"expected\": \"+1.000\", \"passed\": true}, {\"check\": \"boundary partial over\", \"actual\": \"+1.377\", \"expected\": \"+1.317\", \"passed\": false}, {\"check\": \"boundary all out uses quota\", \"actual\": \"-0.661\", \"expected\": \"-0.661\", \"passed\": true}, {\"check\": \"boundary invalid ball digit\", \"actual\": \"invalid overs\", \"expected\": \"invalid overs\", \"passed\": true}, {\"check\": \"control no overs\", \"actual\": \"no overs\", \"expected\": \"no overs\", \"passed\": true}, {\"check\": \"control negative rate\", \"actual\": \"-3.000\", \"expected\": \"-3.000\", \"passed\": true}, {\"check\": \"regression: overs notation\", \"actual\": \"-12.745\", \"expected\": \"-12.534\", \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": \"-3.350\", \"expected\": \"-3.350\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"+6.257\", \"expected\": \"+6.214\", \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.645,"exit_code":0,"observations":[{"actual":"+1.000","check":"control single match","expected":"+1.000","passed":true},{"actual":"+1.317","check":"boundary partial over","expected":"+1.317","passed":true},{"actual":"-0.661","check":"boundary all out uses quota","expected":"-0.661","passed":true},{"actual":"invalid overs","check":"boundary invalid ball digit","expected":"invalid overs","passed":true},{"actual":"no overs","check":"control no overs","expected":"no overs","passed":true},{"actual":"-3.000","check":"control negative rate","expected":"-3.000","passed":true},{"actual":"-12.534","check":"regression: overs notation","expected":"-12.534","passed":true},{"actual":"-3.350","check":"variant scenario 1","expected":"-3.350","passed":true},{"actual":"+6.214","check":"variant scenario 2","expected":"+6.214","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control single match\", \"actual\": \"+1.000\", \"expected\": \"+1.000\", \"passed\": true}, {\"check\": \"boundary partial over\", \"actual\": \"+1.317\", \"expected\": \"+1.317\", \"passed\": true}, {\"check\": \"boundary all out uses quota\", \"actual\": \"-0.661\", \"expected\": \"-0.661\", \"passed\": true}, {\"check\": \"boundary invalid ball digit\", \"actual\": \"invalid overs\", \"expected\": \"invalid overs\", \"passed\": true}, {\"check\": \"control no overs\", \"actual\": \"no overs\", \"expected\": \"no overs\", \"passed\": true}, {\"check\": \"control negative rate\", \"actual\": \"-3.000\", \"expected\": \"-3.000\", \"passed\": true}, {\"check\": \"regression: overs notation\", \"actual\": \"-12.534\", \"expected\": \"-12.534\", \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": \"-3.350\", \"expected\": \"-3.350\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"+6.214\", \"expected\": \"+6.214\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}