{"abstract":"A side bowled out early is credited with a very high run rate instead of the full quota.","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\".","contract_signature":"matches, quota","evaluation_group":"w2-sports-scoring-cricket-net-run-rate","failed_approach":"Applying the quota only to overs faced leaves bowled-out opponents at their actual overs.","family":"w2-sports-scoring-cricket-net-run-rate-all-out-quota","id":"FA-83966","implementations":{"attempt":{"sha256":"e455aa67fb1f405c177b00576ecd4c5fe69ae4004d75b3a4d78d1f1f106c8c83","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 = 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: all out quota',\n   ([[274, '11.3', False, 153, '36', False],\n     [141, '9.4', True, 86, '41.3', True],\n     [108, '15', False, 280, '44.5', False]],\n    20),\n   '+6.100'),\n  ('variant scenario 1',\n   ([[341, '0.5', False, 330, '45.0', False],\n     [313, '19.5', False, 220, '25.3', False],\n     [207, '42.1', False, 200, '3.1', False]],\n    20),\n   '+3.522'),\n  ('variant scenario 2',\n   ([[222, '5.1', False, 252, '48.1', True],\n     [92, '24.4', False, 265, '23.3', True],\n     [276, '32.3', False, 297, '6.2', False]],\n    20),\n   '-8.103')],\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: all out quota',\n   ([[323, '8.5', False, 245, '5', True],\n     [198, '15.3', False, 151, '15.4', False],\n     [239, '14.2', False, 121, '24.6', True],\n     [107, '14', True, 94, '39.3', False]],\n    50),\n   '+5.840'),\n  ('variant scenario 1',\n   ([[271, '12.2', False, 108, '19.3', False], [129, '15.7', False, 146, '44.4', False]], 50),\n   'invalid overs'),\n  ('variant scenario 2',\n   ([[260, '42.3', False, 116, '50.2', False],\n     [339, '31.5', False, 320, '34.1', False],\n     [360, '12.5', False, 211, '37.1', False]],\n    50),\n   '+5.684')],\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: all out quota',\n   ([[85, '18.2', True, 137, '19.4', False], [211, '33.3', True, 84, '44.5', True]], 50),\n   '-0.212'),\n  ('variant scenario 1',\n   ([[122, '18.3', True, 178, '35.4', False],\n     [155, '37.3', False, 116, '4.5', False],\n     [134, '45.5', False, 248, '27.4', False]],\n    20),\n   '-3.974'),\n  ('variant scenario 2',\n   ([[353, '23.3', False, 353, '24.4', True],\n     [233, '49.3', False, 281, '18.3', False],\n     [245, '44.4', False, 260, '4.1', True],\n     [278, '44', False, 291, '10.5', True],\n     [222, '27.6', False, 153, '44', True]],\n    50),\n   'invalid overs')],\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: all out quota',\n   ([[294, '24.2', False, 86, '24.2', True],\n     [111, '30', False, 139, '26.2', True],\n     [139, '8.1', True, 316, '35.4', False],\n     [115, '35.3', False, 329, '28.5', False],\n     [171, '34.5', True, 227, '49.2', False]],\n    50),\n   '-0.758'),\n  ('variant scenario 1', ([[0, '0', False, 0, '0', False]], 50), 'no overs'),\n  ('variant scenario 2', ([[345, '2.1', True, 354, '26.5', False]], 20), '+4.057')],\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: all out quota',\n   ([[225, '40.5', False, 354, '9.1', True],\n     [167, '22.1', False, 231, '34', False],\n     [297, '26.0', False, 98, '19', False],\n     [295, '49.2', False, 314, '45.4', False],\n     [293, '46.3', False, 305, '29.1', True]],\n    50),\n   '+0.355'),\n  ('variant scenario 1',\n   ([[183, '19.5', False, 137, '36.6', False],\n     [234, '46.4', False, 179, '46.4', False],\n     [173, '24.1', False, 110, '31.6', False],\n     [287, '24.0', True, 147, '37.1', True]],\n    50),\n   'invalid overs'),\n  ('variant scenario 2',\n   ([[172, '22.1', False, 287, '1.6', False],\n     [352, '8', False, 332, '17.0', False],\n     [126, '0.4', False, 127, '43.3', True]],\n    20),\n   'invalid 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":"de4cdb3d6c00e3ca9347d129f3cef21503ffdb488547617f7cee922cd274d6c6","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 = balls(faced)\n        g = 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: all out quota',\n   ([[274, '11.3', False, 153, '36', False],\n     [141, '9.4', True, 86, '41.3', True],\n     [108, '15', False, 280, '44.5', False]],\n    20),\n   '+6.100'),\n  ('variant scenario 1',\n   ([[341, '0.5', False, 330, '45.0', False],\n     [313, '19.5', False, 220, '25.3', False],\n     [207, '42.1', False, 200, '3.1', False]],\n    20),\n   '+3.522'),\n  ('variant scenario 2',\n   ([[222, '5.1', False, 252, '48.1', True],\n     [92, '24.4', False, 265, '23.3', True],\n     [276, '32.3', False, 297, '6.2', False]],\n    20),\n   '-8.103')],\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: all out quota',\n   ([[323, '8.5', False, 245, '5', True],\n     [198, '15.3', False, 151, '15.4', False],\n     [239, '14.2', False, 121, '24.6', True],\n     [107, '14', True, 94, '39.3', False]],\n    50),\n   '+5.840'),\n  ('variant scenario 1',\n   ([[271, '12.2', False, 108, '19.3', False], [129, '15.7', False, 146, '44.4', False]], 50),\n   'invalid overs'),\n  ('variant scenario 2',\n   ([[260, '42.3', False, 116, '50.2', False],\n     [339, '31.5', False, 320, '34.1', False],\n     [360, '12.5', False, 211, '37.1', False]],\n    50),\n   '+5.684')],\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: all out quota',\n   ([[85, '18.2', True, 137, '19.4', False], [211, '33.3', True, 84, '44.5', True]], 50),\n   '-0.212'),\n  ('variant scenario 1',\n   ([[122, '18.3', True, 178, '35.4', False],\n     [155, '37.3', False, 116, '4.5', False],\n     [134, '45.5', False, 248, '27.4', False]],\n    20),\n   '-3.974'),\n  ('variant scenario 2',\n   ([[353, '23.3', False, 353, '24.4', True],\n     [233, '49.3', False, 281, '18.3', False],\n     [245, '44.4', False, 260, '4.1', True],\n     [278, '44', False, 291, '10.5', True],\n     [222, '27.6', False, 153, '44', True]],\n    50),\n   'invalid overs')],\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: all out quota',\n   ([[294, '24.2', False, 86, '24.2', True],\n     [111, '30', False, 139, '26.2', True],\n     [139, '8.1', True, 316, '35.4', False],\n     [115, '35.3', False, 329, '28.5', False],\n     [171, '34.5', True, 227, '49.2', False]],\n    50),\n   '-0.758'),\n  ('variant scenario 1', ([[0, '0', False, 0, '0', False]], 50), 'no overs'),\n  ('variant scenario 2', ([[345, '2.1', True, 354, '26.5', False]], 20), '+4.057')],\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: all out quota',\n   ([[225, '40.5', False, 354, '9.1', True],\n     [167, '22.1', False, 231, '34', False],\n     [297, '26.0', False, 98, '19', False],\n     [295, '49.2', False, 314, '45.4', False],\n     [293, '46.3', False, 305, '29.1', True]],\n    50),\n   '+0.355'),\n  ('variant scenario 1',\n   ([[183, '19.5', False, 137, '36.6', False],\n     [234, '46.4', False, 179, '46.4', False],\n     [173, '24.1', False, 110, '31.6', False],\n     [287, '24.0', True, 147, '37.1', True]],\n    50),\n   'invalid overs'),\n  ('variant scenario 2',\n   ([[172, '22.1', False, 287, '1.6', False],\n     [352, '8', False, 332, '17.0', False],\n     [126, '0.4', False, 127, '43.3', True]],\n    20),\n   'invalid 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-all-out-quota","generated_at":"2026-09-29T14:50:26.516041+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.","root_cause":"The actual overs faced are used even when the side was all out.","sha256":"0ccf895976980d0948188adc595ef3f8c225aa59097affb67a5bafba816206f8","title":"All-out innings counted at actual overs · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":41.564,"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":"+7.005","check":"regression: all out quota","expected":"+6.100","passed":false},{"actual":"+3.522","check":"variant scenario 1","expected":"+3.522","passed":true},{"actual":"-0.971","check":"variant scenario 2","expected":"-8.103","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.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: all out quota\", \"actual\": \"+7.005\", \"expected\": \"+6.100\", \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": \"+3.522\", \"expected\": \"+3.522\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"-0.971\", \"expected\": \"-8.103\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.079,"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":"+1.166","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":"+10.218","check":"regression: all out quota","expected":"+6.100","passed":false},{"actual":"+3.522","check":"variant scenario 1","expected":"+3.522","passed":true},{"actual":"-0.971","check":"variant scenario 2","expected":"-8.103","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.317\", \"expected\": \"+1.317\", \"passed\": true}, {\"check\": \"boundary all out uses quota\", \"actual\": \"+1.166\", \"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: all out quota\", \"actual\": \"+10.218\", \"expected\": \"+6.100\", \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": \"+3.522\", \"expected\": \"+3.522\", \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": \"-0.971\", \"expected\": \"-8.103\", \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}