FAILURE MAP
← Case archive

FA-85171 / Fantasy sports scoring / Open access

Century also collects the half-century and thirty bonuses · case 01

A 100-run innings scores 28 milestone points instead of 16.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Milestone checks are independent ifs, so every lower milestone stacks.

VERIFIED REPAIR

Award only the highest milestone reached.

Unsuccessful approach: Chaining only the 50/100 tiers still stacks the 30-run bonus on top.

Case contract

Score a T20 batting innings: 1 per run, +1 per four, +2 per six; only the highest milestone bonus applies (30+ -> 4, 50+ -> 8, 100+ -> 16). A duck (-2) applies when the batter is out for 0 after facing at least one ball, except for BOWL-role players. Strike-rate bonus for non-BOWL players with at least 10 balls, using exact runs*100 vs balls: >170 +6, >150 +4, >=130 +2, >=70 0, >=60 -2, >=50 -4, below -6.

Why this case matters

Cricket fantasy contests hinge on exclusive milestones, duck eligibility and strike-rate bands evaluated exactly.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(inn):
    pts = inn['runs'] + inn['fours'] + inn['sixes'] * 2
    if inn['runs'] >= 100:
        pts += 16
    if inn['runs'] >= 50:
        pts += 8
    if inn['runs'] >= 30:
        pts += 4
    if inn['out'] and inn['runs'] == 0 and inn['balls'] >= 1 and inn['role'] != 'BOWL':
        pts -= 2
    if inn['balls'] >= 10 and inn['role'] != 'BOWL':
        r, b = inn['runs'] * 100, inn['balls']
        if r > 170 * b:
            pts += 6
        elif r > 150 * b:
            pts += 4
        elif r >= 130 * b:
            pts += 2
        elif r >= 70 * b:
            pass
        elif r >= 60 * b:
            pts -= 2
        elif r >= 50 * b:
            pts -= 4
        else:
            pts -= 6
    return pts
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: milestone exclusivity',
   [{'balls': 9, 'fours': 17, 'out': True, 'role': 'WK', 'runs': 100, 'sixes': 5}], 143),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 1, 'fours': 3, 'out': True, 'role': 'BAT', 'runs': 96, 'sixes': 12}], 131),
  ('second regression', [{'balls': 60, 'fours': 15, 'out': False, 'role': 'AR', 'runs': 79, 'sixes': 0}],
   104),
  ('normal control 1', [{'balls': 1, 'fours': 2, 'out': False, 'role': 'BAT', 'runs': 30, 'sixes': 3}], 42),
  ('normal control 2', [{'balls': 46, 'fours': 0, 'out': False, 'role': 'BOWL', 'runs': 17, 'sixes': 0}], 17),
  ('normal control 3', [{'balls': 10, 'fours': 4, 'out': False, 'role': 'BOWL', 'runs': 16, 'sixes': 0}], 20),
  ('normal control 4', [{'balls': 9, 'fours': 0, 'out': True, 'role': 'BAT', 'runs': 0, 'sixes': 0}], -2)],
 [('regression: milestone exclusivity',
   [{'balls': 40, 'fours': 10, 'out': True, 'role': 'BAT', 'runs': 53, 'sixes': 2}], 77),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 20, 'fours': 2, 'out': False, 'role': 'BAT', 'runs': 100, 'sixes': 4}], 132),
  ('second regression', [{'balls': 11, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 50, 'sixes': 5}], 68),
  ('normal control 1', [{'balls': 20, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 0, 'sixes': 0}], 0),
  ('normal control 2', [{'balls': 18, 'fours': 5, 'out': True, 'role': 'BAT', 'runs': 24, 'sixes': 0}], 31),
  ('normal control 3', [{'balls': 11, 'fours': 0, 'out': True, 'role': 'AR', 'runs': 30, 'sixes': 2}], 44),
  ('normal control 4', [{'balls': 9, 'fours': 5, 'out': False, 'role': 'BOWL', 'runs': 30, 'sixes': 0}], 39)],
 [('regression: milestone exclusivity',
   [{'balls': 51, 'fours': 15, 'out': True, 'role': 'BOWL', 'runs': 67, 'sixes': 1}], 92),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 40, 'fours': 11, 'out': True, 'role': 'AR', 'runs': 69, 'sixes': 2}], 98),
  ('second regression', [{'balls': 47, 'fours': 6, 'out': True, 'role': 'AR', 'runs': 62, 'sixes': 5}], 88),
  ('normal control 1', [{'balls': 20, 'fours': 3, 'out': False, 'role': 'BOWL', 'runs': 17, 'sixes': 0}], 20),
  ('normal control 2', [{'balls': 23, 'fours': 4, 'out': False, 'role': 'WK', 'runs': 34, 'sixes': 0}], 44),
  ('normal control 3', [{'balls': 44, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 34, 'sixes': 0}], 38),
  ('normal control 4', [{'balls': 20, 'fours': 6, 'out': False, 'role': 'AR', 'runs': 34, 'sixes': 1}], 50)],
 [('regression: milestone exclusivity',
   [{'balls': 23, 'fours': 3, 'out': True, 'role': 'AR', 'runs': 100, 'sixes': 3}], 131),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 38, 'fours': 0, 'out': False, 'role': 'WK', 'runs': 58, 'sixes': 3}], 76),
  ('second regression', [{'balls': 51, 'fours': 3, 'out': False, 'role': 'BOWL', 'runs': 50, 'sixes': 1}],
   63),
  ('normal control 1', [{'balls': 11, 'fours': 6, 'out': False, 'role': 'BAT', 'runs': 29, 'sixes': 0}], 41),
  ('normal control 2', [{'balls': 19, 'fours': 3, 'out': False, 'role': 'BOWL', 'runs': 25, 'sixes': 1}], 30),
  ('normal control 3', [{'balls': 0, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 0, 'sixes': 0}], 0),
  ('normal control 4', [{'balls': 20, 'fours': 1, 'out': True, 'role': 'BAT', 'runs': 34, 'sixes': 3}], 49)],
 [('regression: milestone exclusivity',
   [{'balls': 20, 'fours': 24, 'out': True, 'role': 'AR', 'runs': 100, 'sixes': 0}], 146),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 10, 'fours': 18, 'out': True, 'role': 'WK', 'runs': 98, 'sixes': 0}], 130),
  ('second regression', [{'balls': 10, 'fours': 17, 'out': True, 'role': 'BOWL', 'runs': 100, 'sixes': 5}],
   143),
  ('normal control 1', [{'balls': 12, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 16, 'sixes': 2}], 20),
  ('normal control 2', [{'balls': 9, 'fours': 0, 'out': False, 'role': 'BOWL', 'runs': 0, 'sixes': 0}], 0),
  ('normal control 3', [{'balls': 11, 'fours': 5, 'out': False, 'role': 'AR', 'runs': 34, 'sixes': 2}], 53),
  ('normal control 4', [{'balls': 47, 'fours': 1, 'out': False, 'role': 'WK', 'runs': 30, 'sixes': 0}], 33)]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: milestone exclusivity155143Failed
partial repair probe: milestone exclusivity135131Failed
second regression108104Failed
normal control 14242Passed
normal control 21717Passed
normal control 32020Passed
normal control 4-2-2Passed

SHA-256 / a38c32b18b5a2de449a3d543ab568d6401c311e237ee136cef6361349175c9e1

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(inn):
    pts = inn['runs'] + inn['fours'] + inn['sixes'] * 2
    if inn['runs'] >= 100:
        pts += 16
    elif inn['runs'] >= 50:
        pts += 8
    if inn['runs'] >= 30:
        pts += 4
    if inn['out'] and inn['runs'] == 0 and inn['balls'] >= 1 and inn['role'] != 'BOWL':
        pts -= 2
    if inn['balls'] >= 10 and inn['role'] != 'BOWL':
        r, b = inn['runs'] * 100, inn['balls']
        if r > 170 * b:
            pts += 6
        elif r > 150 * b:
            pts += 4
        elif r >= 130 * b:
            pts += 2
        elif r >= 70 * b:
            pass
        elif r >= 60 * b:
            pts -= 2
        elif r >= 50 * b:
            pts -= 4
        else:
            pts -= 6
    return pts
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: milestone exclusivity',
   [{'balls': 9, 'fours': 17, 'out': True, 'role': 'WK', 'runs': 100, 'sixes': 5}], 143),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 1, 'fours': 3, 'out': True, 'role': 'BAT', 'runs': 96, 'sixes': 12}], 131),
  ('second regression', [{'balls': 60, 'fours': 15, 'out': False, 'role': 'AR', 'runs': 79, 'sixes': 0}],
   104),
  ('normal control 1', [{'balls': 1, 'fours': 2, 'out': False, 'role': 'BAT', 'runs': 30, 'sixes': 3}], 42),
  ('normal control 2', [{'balls': 46, 'fours': 0, 'out': False, 'role': 'BOWL', 'runs': 17, 'sixes': 0}], 17),
  ('normal control 3', [{'balls': 10, 'fours': 4, 'out': False, 'role': 'BOWL', 'runs': 16, 'sixes': 0}], 20),
  ('normal control 4', [{'balls': 9, 'fours': 0, 'out': True, 'role': 'BAT', 'runs': 0, 'sixes': 0}], -2)],
 [('regression: milestone exclusivity',
   [{'balls': 40, 'fours': 10, 'out': True, 'role': 'BAT', 'runs': 53, 'sixes': 2}], 77),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 20, 'fours': 2, 'out': False, 'role': 'BAT', 'runs': 100, 'sixes': 4}], 132),
  ('second regression', [{'balls': 11, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 50, 'sixes': 5}], 68),
  ('normal control 1', [{'balls': 20, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 0, 'sixes': 0}], 0),
  ('normal control 2', [{'balls': 18, 'fours': 5, 'out': True, 'role': 'BAT', 'runs': 24, 'sixes': 0}], 31),
  ('normal control 3', [{'balls': 11, 'fours': 0, 'out': True, 'role': 'AR', 'runs': 30, 'sixes': 2}], 44),
  ('normal control 4', [{'balls': 9, 'fours': 5, 'out': False, 'role': 'BOWL', 'runs': 30, 'sixes': 0}], 39)],
 [('regression: milestone exclusivity',
   [{'balls': 51, 'fours': 15, 'out': True, 'role': 'BOWL', 'runs': 67, 'sixes': 1}], 92),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 40, 'fours': 11, 'out': True, 'role': 'AR', 'runs': 69, 'sixes': 2}], 98),
  ('second regression', [{'balls': 47, 'fours': 6, 'out': True, 'role': 'AR', 'runs': 62, 'sixes': 5}], 88),
  ('normal control 1', [{'balls': 20, 'fours': 3, 'out': False, 'role': 'BOWL', 'runs': 17, 'sixes': 0}], 20),
  ('normal control 2', [{'balls': 23, 'fours': 4, 'out': False, 'role': 'WK', 'runs': 34, 'sixes': 0}], 44),
  ('normal control 3', [{'balls': 44, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 34, 'sixes': 0}], 38),
  ('normal control 4', [{'balls': 20, 'fours': 6, 'out': False, 'role': 'AR', 'runs': 34, 'sixes': 1}], 50)],
 [('regression: milestone exclusivity',
   [{'balls': 23, 'fours': 3, 'out': True, 'role': 'AR', 'runs': 100, 'sixes': 3}], 131),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 38, 'fours': 0, 'out': False, 'role': 'WK', 'runs': 58, 'sixes': 3}], 76),
  ('second regression', [{'balls': 51, 'fours': 3, 'out': False, 'role': 'BOWL', 'runs': 50, 'sixes': 1}],
   63),
  ('normal control 1', [{'balls': 11, 'fours': 6, 'out': False, 'role': 'BAT', 'runs': 29, 'sixes': 0}], 41),
  ('normal control 2', [{'balls': 19, 'fours': 3, 'out': False, 'role': 'BOWL', 'runs': 25, 'sixes': 1}], 30),
  ('normal control 3', [{'balls': 0, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 0, 'sixes': 0}], 0),
  ('normal control 4', [{'balls': 20, 'fours': 1, 'out': True, 'role': 'BAT', 'runs': 34, 'sixes': 3}], 49)],
 [('regression: milestone exclusivity',
   [{'balls': 20, 'fours': 24, 'out': True, 'role': 'AR', 'runs': 100, 'sixes': 0}], 146),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 10, 'fours': 18, 'out': True, 'role': 'WK', 'runs': 98, 'sixes': 0}], 130),
  ('second regression', [{'balls': 10, 'fours': 17, 'out': True, 'role': 'BOWL', 'runs': 100, 'sixes': 5}],
   143),
  ('normal control 1', [{'balls': 12, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 16, 'sixes': 2}], 20),
  ('normal control 2', [{'balls': 9, 'fours': 0, 'out': False, 'role': 'BOWL', 'runs': 0, 'sixes': 0}], 0),
  ('normal control 3', [{'balls': 11, 'fours': 5, 'out': False, 'role': 'AR', 'runs': 34, 'sixes': 2}], 53),
  ('normal control 4', [{'balls': 47, 'fours': 1, 'out': False, 'role': 'WK', 'runs': 30, 'sixes': 0}], 33)]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: milestone exclusivity147143Failed
partial repair probe: milestone exclusivity135131Failed
second regression108104Failed
normal control 14242Passed
normal control 21717Passed
normal control 32020Passed
normal control 4-2-2Passed

SHA-256 / c6a7c8ccc917e62b5b34f0ad648f77f6002dfc0e6db8881f4d60d96e49715df2

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(inn):
    pts = inn['runs'] + inn['fours'] + inn['sixes'] * 2
    if inn['runs'] >= 100:
        pts += 16
    elif inn['runs'] >= 50:
        pts += 8
    elif inn['runs'] >= 30:
        pts += 4
    if inn['out'] and inn['runs'] == 0 and inn['balls'] >= 1 and inn['role'] != 'BOWL':
        pts -= 2
    if inn['balls'] >= 10 and inn['role'] != 'BOWL':
        r, b = inn['runs'] * 100, inn['balls']
        if r > 170 * b:
            pts += 6
        elif r > 150 * b:
            pts += 4
        elif r >= 130 * b:
            pts += 2
        elif r >= 70 * b:
            pass
        elif r >= 60 * b:
            pts -= 2
        elif r >= 50 * b:
            pts -= 4
        else:
            pts -= 6
    return pts
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: milestone exclusivity',
   [{'balls': 9, 'fours': 17, 'out': True, 'role': 'WK', 'runs': 100, 'sixes': 5}], 143),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 1, 'fours': 3, 'out': True, 'role': 'BAT', 'runs': 96, 'sixes': 12}], 131),
  ('second regression', [{'balls': 60, 'fours': 15, 'out': False, 'role': 'AR', 'runs': 79, 'sixes': 0}],
   104),
  ('normal control 1', [{'balls': 1, 'fours': 2, 'out': False, 'role': 'BAT', 'runs': 30, 'sixes': 3}], 42),
  ('normal control 2', [{'balls': 46, 'fours': 0, 'out': False, 'role': 'BOWL', 'runs': 17, 'sixes': 0}], 17),
  ('normal control 3', [{'balls': 10, 'fours': 4, 'out': False, 'role': 'BOWL', 'runs': 16, 'sixes': 0}], 20),
  ('normal control 4', [{'balls': 9, 'fours': 0, 'out': True, 'role': 'BAT', 'runs': 0, 'sixes': 0}], -2)],
 [('regression: milestone exclusivity',
   [{'balls': 40, 'fours': 10, 'out': True, 'role': 'BAT', 'runs': 53, 'sixes': 2}], 77),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 20, 'fours': 2, 'out': False, 'role': 'BAT', 'runs': 100, 'sixes': 4}], 132),
  ('second regression', [{'balls': 11, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 50, 'sixes': 5}], 68),
  ('normal control 1', [{'balls': 20, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 0, 'sixes': 0}], 0),
  ('normal control 2', [{'balls': 18, 'fours': 5, 'out': True, 'role': 'BAT', 'runs': 24, 'sixes': 0}], 31),
  ('normal control 3', [{'balls': 11, 'fours': 0, 'out': True, 'role': 'AR', 'runs': 30, 'sixes': 2}], 44),
  ('normal control 4', [{'balls': 9, 'fours': 5, 'out': False, 'role': 'BOWL', 'runs': 30, 'sixes': 0}], 39)],
 [('regression: milestone exclusivity',
   [{'balls': 51, 'fours': 15, 'out': True, 'role': 'BOWL', 'runs': 67, 'sixes': 1}], 92),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 40, 'fours': 11, 'out': True, 'role': 'AR', 'runs': 69, 'sixes': 2}], 98),
  ('second regression', [{'balls': 47, 'fours': 6, 'out': True, 'role': 'AR', 'runs': 62, 'sixes': 5}], 88),
  ('normal control 1', [{'balls': 20, 'fours': 3, 'out': False, 'role': 'BOWL', 'runs': 17, 'sixes': 0}], 20),
  ('normal control 2', [{'balls': 23, 'fours': 4, 'out': False, 'role': 'WK', 'runs': 34, 'sixes': 0}], 44),
  ('normal control 3', [{'balls': 44, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 34, 'sixes': 0}], 38),
  ('normal control 4', [{'balls': 20, 'fours': 6, 'out': False, 'role': 'AR', 'runs': 34, 'sixes': 1}], 50)],
 [('regression: milestone exclusivity',
   [{'balls': 23, 'fours': 3, 'out': True, 'role': 'AR', 'runs': 100, 'sixes': 3}], 131),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 38, 'fours': 0, 'out': False, 'role': 'WK', 'runs': 58, 'sixes': 3}], 76),
  ('second regression', [{'balls': 51, 'fours': 3, 'out': False, 'role': 'BOWL', 'runs': 50, 'sixes': 1}],
   63),
  ('normal control 1', [{'balls': 11, 'fours': 6, 'out': False, 'role': 'BAT', 'runs': 29, 'sixes': 0}], 41),
  ('normal control 2', [{'balls': 19, 'fours': 3, 'out': False, 'role': 'BOWL', 'runs': 25, 'sixes': 1}], 30),
  ('normal control 3', [{'balls': 0, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 0, 'sixes': 0}], 0),
  ('normal control 4', [{'balls': 20, 'fours': 1, 'out': True, 'role': 'BAT', 'runs': 34, 'sixes': 3}], 49)],
 [('regression: milestone exclusivity',
   [{'balls': 20, 'fours': 24, 'out': True, 'role': 'AR', 'runs': 100, 'sixes': 0}], 146),
  ('partial repair probe: milestone exclusivity',
   [{'balls': 10, 'fours': 18, 'out': True, 'role': 'WK', 'runs': 98, 'sixes': 0}], 130),
  ('second regression', [{'balls': 10, 'fours': 17, 'out': True, 'role': 'BOWL', 'runs': 100, 'sixes': 5}],
   143),
  ('normal control 1', [{'balls': 12, 'fours': 0, 'out': True, 'role': 'BOWL', 'runs': 16, 'sixes': 2}], 20),
  ('normal control 2', [{'balls': 9, 'fours': 0, 'out': False, 'role': 'BOWL', 'runs': 0, 'sixes': 0}], 0),
  ('normal control 3', [{'balls': 11, 'fours': 5, 'out': False, 'role': 'AR', 'runs': 34, 'sixes': 2}], 53),
  ('normal control 4', [{'balls': 47, 'fours': 1, 'out': False, 'role': 'WK', 'runs': 30, 'sixes': 0}], 33)]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: milestone exclusivity143143Passed
partial repair probe: milestone exclusivity131131Passed
second regression104104Passed
normal control 14242Passed
normal control 21717Passed
normal control 32020Passed
normal control 4-2-2Passed

SHA-256 / 22fd208a4dae3cd8c94bfa0b71f77734ab85bbdba73460e669e833b5d446e80a

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:50:37.933609+00:00.

Case digest / 38c01fd63dcd5724829d6b18a4201bdb3a574e28ffa557434780fb3745c8ef19