{"abstract":"A table with no completed deliveries raises or reports a bogus rate.","category":"Sports scoring and tiebreakers","checks":10,"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":"Guarding on zero runs instead of zero balls rejects legitimate low-scoring matches.","family":"w2-sports-scoring-cricket-net-run-rate-zero-overs-guard","id":"FA-83981","implementations":{"attempt":{"sha256":"101ede9fe5ee5ca10720ed93e7b4d23e86da542236908f21d1e77cfd9686e6a6","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 rf == 0 or ra == 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: zero overs guard', ([[0, '0', False, 50, '10', False]], 20), 'no overs'),\n  ('regression: zero overs guard', ([[112, '37.4', False, 359, '0.0', False]], 20), 'no overs'),\n  ('variant scenario 1',\n   ([[97, '37.1', True, 113, '12.3', True], [243, '29.4', False, 120, '28', False]], 20),\n   '+1.991'),\n  ('variant scenario 2',\n   ([[141, '47.4', True, 121, '13.2', True],\n     [241, '15.2', False, 312, '40.3', False],\n     [303, '1.2', False, 251, '21.3', False]],\n    20),\n   '+10.340')],\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: zero overs guard', ([[0, '0', False, 50, '10', False]], 20), 'no overs'),\n  ('regression: zero overs guard', ([[0, '5', False, 30, '5', False]], 20), '-6.000'),\n  ('variant scenario 1',\n   ([[100, '17.2', False, 124, '24.2', False],\n     [116, '23.2', False, 183, '47.4', False],\n     [276, '50.4', True, 337, '28.2', False],\n     [117, '29.3', False, 123, '27.2', False]],\n    20),\n   '+0.746'),\n  ('variant scenario 2',\n   ([[273, '50.3', False, 339, '0.0', False],\n     [266, '31.2', False, 139, '40.2', False],\n     [108, '1.2', False, 177, '39.2', True],\n     [94, '37.2', True, 161, '7.3', False]],\n    20),\n   '-4.847')],\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: zero overs guard', ([[132, '6.3', False, 302, '0.0', False]], 20), 'no overs'),\n  ('variant scenario 1', ([[118, '30.0', True, 121, '46.5', False]], 50), '-0.224'),\n  ('variant scenario 2',\n   ([[133, '6.4', False, 152, '24.4', True],\n     [348, '27.2', False, 234, '38.4', True],\n     [289, '22.1', False, 331, '45', False],\n     [122, '44.3', False, 126, '23.1', False],\n     [240, '11', False, 199, '17.3', False]],\n    20),\n   '+1.846')],\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: zero overs guard', ([[0, '0', False, 50, '10', False]], 20), 'no overs'),\n  ('regression: zero overs guard', ([[0, '5', False, 30, '5', False]], 20), '-6.000'),\n  ('variant scenario 1',\n   ([[133, '4.1', True, 163, '15.4', True],\n     [347, '15.6', False, 137, '28.2', False],\n     [106, '0.1', False, 162, '0.2', False],\n     [128, '7.4', False, 81, '20.5', False],\n     [83, '36.2', False, 189, '21.5', False]],\n    20),\n   'invalid overs'),\n  ('variant scenario 2', ([[177, '43.5', True, 267, '47.4', False]], 20), '+3.249')],\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: zero overs guard', ([[360, '25.4', False, 360, '0.0', False]], 50), 'no overs'),\n  ('variant scenario 1',\n   ([[118, '12.2', True, 179, '28.0', False],\n     [298, '13.1', False, 285, '42.1', False],\n     [181, '50.3', False, 90, '32.3', False]],\n    50),\n   '-0.144'),\n  ('variant scenario 2',\n   ([[338, '28.5', False, 263, '35.1', True],\n     [150, '13.0', False, 270, '26.2', True],\n     [223, '14.2', False, 327, '30.2', True],\n     [299, '0.2', False, 155, '50.4', False],\n     [293, '8.4', False, 283, '0.5', False],\n     [176, '41', False, 100, '11.3', False],\n     [341, '40', False, 314, '34.0', False]],\n    50),\n   '+5.520')]]\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":"5868632e0f97b7cc23d792528fc2197ff8b473d5b45bc7811461c64845c2b69c","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 and 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: zero overs guard', ([[0, '0', False, 50, '10', False]], 20), 'no overs'),\n  ('regression: zero overs guard', ([[112, '37.4', False, 359, '0.0', False]], 20), 'no overs'),\n  ('variant scenario 1',\n   ([[97, '37.1', True, 113, '12.3', True], [243, '29.4', False, 120, '28', False]], 20),\n   '+1.991'),\n  ('variant scenario 2',\n   ([[141, '47.4', True, 121, '13.2', True],\n     [241, '15.2', False, 312, '40.3', False],\n     [303, '1.2', False, 251, '21.3', False]],\n    20),\n   '+10.340')],\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: zero overs guard', ([[0, '0', False, 50, '10', False]], 20), 'no overs'),\n  ('regression: zero overs guard', ([[0, '5', False, 30, '5', False]], 20), '-6.000'),\n  ('variant scenario 1',\n   ([[100, '17.2', False, 124, '24.2', False],\n     [116, '23.2', False, 183, '47.4', False],\n     [276, '50.4', True, 337, '28.2', False],\n     [117, '29.3', False, 123, '27.2', False]],\n    20),\n   '+0.746'),\n  ('variant scenario 2',\n   ([[273, '50.3', False, 339, '0.0', False],\n     [266, '31.2', False, 139, '40.2', False],\n     [108, '1.2', False, 177, '39.2', True],\n     [94, '37.2', True, 161, '7.3', False]],\n    20),\n   '-4.847')],\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: zero overs guard', ([[132, '6.3', False, 302, '0.0', False]], 20), 'no overs'),\n  ('variant scenario 1', ([[118, '30.0', True, 121, '46.5', False]], 50), '-0.224'),\n  ('variant scenario 2',\n   ([[133, '6.4', False, 152, '24.4', True],\n     [348, '27.2', False, 234, '38.4', True],\n     [289, '22.1', False, 331, '45', False],\n     [122, '44.3', False, 126, '23.1', False],\n     [240, '11', False, 199, '17.3', False]],\n    20),\n   '+1.846')],\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: zero overs guard', ([[0, '0', False, 50, '10', False]], 20), 'no overs'),\n  ('regression: zero overs guard', ([[0, '5', False, 30, '5', False]], 20), '-6.000'),\n  ('variant scenario 1',\n   ([[133, '4.1', True, 163, '15.4', True],\n     [347, '15.6', False, 137, '28.2', False],\n     [106, '0.1', False, 162, '0.2', False],\n     [128, '7.4', False, 81, '20.5', False],\n     [83, '36.2', False, 189, '21.5', False]],\n    20),\n   'invalid overs'),\n  ('variant scenario 2', ([[177, '43.5', True, 267, '47.4', False]], 20), '+3.249')],\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: zero overs guard', ([[360, '25.4', False, 360, '0.0', False]], 50), 'no overs'),\n  ('variant scenario 1',\n   ([[118, '12.2', True, 179, '28.0', False],\n     [298, '13.1', False, 285, '42.1', False],\n     [181, '50.3', False, 90, '32.3', False]],\n    50),\n   '-0.144'),\n  ('variant scenario 2',\n   ([[338, '28.5', False, 263, '35.1', True],\n     [150, '13.0', False, 270, '26.2', True],\n     [223, '14.2', False, 327, '30.2', True],\n     [299, '0.2', False, 155, '50.4', False],\n     [293, '8.4', False, 283, '0.5', False],\n     [176, '41', False, 100, '11.3', False],\n     [341, '40', False, 314, '34.0', False]],\n    50),\n   '+5.520')]]\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":"4510de7befa144f895e43bb2196b1310f2e6163ee19beb4f26556d217d78d51c","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: zero overs guard', ([[0, '0', False, 50, '10', False]], 20), 'no overs'),\n  ('regression: zero overs guard', ([[112, '37.4', False, 359, '0.0', False]], 20), 'no overs'),\n  ('variant scenario 1',\n   ([[97, '37.1', True, 113, '12.3', True], [243, '29.4', False, 120, '28', False]], 20),\n   '+1.991'),\n  ('variant scenario 2',\n   ([[141, '47.4', True, 121, '13.2', True],\n     [241, '15.2', False, 312, '40.3', False],\n     [303, '1.2', False, 251, '21.3', False]],\n    20),\n   '+10.340')],\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: zero overs guard', ([[0, '0', False, 50, '10', False]], 20), 'no overs'),\n  ('regression: zero overs guard', ([[0, '5', False, 30, '5', False]], 20), '-6.000'),\n  ('variant scenario 1',\n   ([[100, '17.2', False, 124, '24.2', False],\n     [116, '23.2', False, 183, '47.4', False],\n     [276, '50.4', True, 337, '28.2', False],\n     [117, '29.3', False, 123, '27.2', False]],\n    20),\n   '+0.746'),\n  ('variant scenario 2',\n   ([[273, '50.3', False, 339, '0.0', False],\n     [266, '31.2', False, 139, '40.2', False],\n     [108, '1.2', False, 177, '39.2', True],\n     [94, '37.2', True, 161, '7.3', False]],\n    20),\n   '-4.847')],\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: zero overs guard', ([[132, '6.3', False, 302, '0.0', False]], 20), 'no overs'),\n  ('variant scenario 1', ([[118, '30.0', True, 121, '46.5', False]], 50), '-0.224'),\n  ('variant scenario 2',\n   ([[133, '6.4', False, 152, '24.4', True],\n     [348, '27.2', False, 234, '38.4', True],\n     [289, '22.1', False, 331, '45', False],\n     [122, '44.3', False, 126, '23.1', False],\n     [240, '11', False, 199, '17.3', False]],\n    20),\n   '+1.846')],\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: zero overs guard', ([[0, '0', False, 50, '10', False]], 20), 'no overs'),\n  ('regression: zero overs guard', ([[0, '5', False, 30, '5', False]], 20), '-6.000'),\n  ('variant scenario 1',\n   ([[133, '4.1', True, 163, '15.4', True],\n     [347, '15.6', False, 137, '28.2', False],\n     [106, '0.1', False, 162, '0.2', False],\n     [128, '7.4', False, 81, '20.5', False],\n     [83, '36.2', False, 189, '21.5', False]],\n    20),\n   'invalid overs'),\n  ('variant scenario 2', ([[177, '43.5', True, 267, '47.4', False]], 20), '+3.249')],\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: zero overs guard', ([[360, '25.4', False, 360, '0.0', False]], 50), 'no overs'),\n  ('variant scenario 1',\n   ([[118, '12.2', True, 179, '28.0', False],\n     [298, '13.1', False, 285, '42.1', False],\n     [181, '50.3', False, 90, '32.3', False]],\n    50),\n   '-0.144'),\n  ('variant scenario 2',\n   ([[338, '28.5', False, 263, '35.1', True],\n     [150, '13.0', False, 270, '26.2', True],\n     [223, '14.2', False, 327, '30.2', True],\n     [299, '0.2', False, 155, '50.4', False],\n     [293, '8.4', False, 283, '0.5', False],\n     [176, '41', False, 100, '11.3', False],\n     [341, '40', False, 314, '34.0', False]],\n    50),\n   '+5.520')]]\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-zero-overs-guard","generated_at":"2026-09-29T14:50:26.557206+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":"Return \"no overs\" when either overs total is zero.","root_cause":"The guard requires both overs totals to be zero before bailing out.","sha256":"a07e42f5665b2c457792d211e8599231c675e9b47662a6064e56ba32a4ad3b90","title":"Zero-overs guard checks the wrong totals · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.806,"exit_code":1,"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":"no overs","check":"regression: zero overs guard","expected":"no overs","passed":true},{"actual":"raised ZeroDivisionError","check":"regression: zero overs guard","expected":"no overs","passed":false},{"actual":"+1.991","check":"variant scenario 1","expected":"+1.991","passed":true},{"actual":"+10.340","check":"variant scenario 2","expected":"+10.340","passed":true}],"passed":false,"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: zero overs guard\", \"actual\": \"no overs\", \"expected\": \"no overs\", \"passed\": true}, {\"check\": \"regression: zero overs guard\", \"actual\": \"raised ZeroDivisionError\", \"expected\": \"no overs\", \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": \"+1.991\", \"expected\": \"+1.991\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"+10.340\", \"expected\": \"+10.340\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.397,"exit_code":1,"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":"raised ZeroDivisionError","check":"regression: zero overs guard","expected":"no overs","passed":false},{"actual":"raised ZeroDivisionError","check":"regression: zero overs guard","expected":"no overs","passed":false},{"actual":"+1.991","check":"variant scenario 1","expected":"+1.991","passed":true},{"actual":"+10.340","check":"variant scenario 2","expected":"+10.340","passed":true}],"passed":false,"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: zero overs guard\", \"actual\": \"raised ZeroDivisionError\", \"expected\": \"no overs\", \"passed\": false}, {\"check\": \"regression: zero overs guard\", \"actual\": \"raised ZeroDivisionError\", \"expected\": \"no overs\", \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": \"+1.991\", \"expected\": \"+1.991\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"+10.340\", \"expected\": \"+10.340\", \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.401,"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":"no overs","check":"regression: zero overs guard","expected":"no overs","passed":true},{"actual":"no overs","check":"regression: zero overs guard","expected":"no overs","passed":true},{"actual":"+1.991","check":"variant scenario 1","expected":"+1.991","passed":true},{"actual":"+10.340","check":"variant scenario 2","expected":"+10.340","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: zero overs guard\", \"actual\": \"no overs\", \"expected\": \"no overs\", \"passed\": true}, {\"check\": \"regression: zero overs guard\", \"actual\": \"no overs\", \"expected\": \"no overs\", \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": \"+1.991\", \"expected\": \"+1.991\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"+10.340\", \"expected\": \"+10.340\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}