FAILURE MAP
← Case archive

FA-85141 / Fantasy sports scoring / Open access

Exactly sixty minutes on ice misses the shutout · case 01

A goalie playing every regulation second of a 1-0 win gets no shutout bonus.

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

ROOT CAUSE

The shutout time requirement uses strictly greater than 3600 seconds.

VERIFIED REPAIR

Require at least 3600 seconds on ice.

Unsuccessful approach: Also requiring a win denies the bonus to a goalie who blanked the opponent and lost the shootout.

Case contract

Score a hockey goalie in tenths. Goals against charged to the goalie exclude empty-net goals scored on his team. shots_faced counts only shots the goalie faced, so saves = shots_faced - goalie goals against. Save 0.2, goal against -2, win 4, overtime loss 1, regulation loss 0. A shutout (+3) needs zero goalie goals against and at least 3600 seconds on ice; the decision does not matter.

Why this case matters

Goalie scoring depends on attribution of empty-net goals and on playing-time conditions for shutouts.

1 / The failure

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

N = 1
observations = []
def solve(g):
    ga = g['team_ga'] - g['empty_net_ga']
    saves = g['shots_faced'] - ga
    pts = saves * 2 - ga * 20
    pts += {'W': 40, 'OTL': 10}.get(g['decision'], 0)
    if ga == 0 and g['toi_sec'] > 3600:
        pts += 30
    return {'saves': saves, 'points': pts}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: shutout playing time',
   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 3, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 36, 'saves': 3}),
  ('partial repair probe: shutout playing time',
   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 9, 'team_ga': 2, 'toi_sec': 3600}],
   {'points': 58, 'saves': 9}),
  ('second regression',
   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 23, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 76, 'saves': 23}),
  ('normal control 1',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 15, 'team_ga': 1, 'toi_sec': 2737}],
   {'points': 18, 'saves': 14}),
  ('normal control 2',
   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 25, 'team_ga': 5, 'toi_sec': 3600}],
   {'points': -16, 'saves': 22}),
  ('normal control 3',
   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 42, 'team_ga': 4, 'toi_sec': 3600}],
   {'points': 28, 'saves': 39}),
  ('normal control 4',
   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 26, 'team_ga': 4, 'toi_sec': 3599}],
   {'points': 8, 'saves': 24})],
 [('regression: shutout playing time',
   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 23, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 76, 'saves': 23}),
  ('partial repair probe: shutout playing time',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 3, 'team_ga': 0, 'toi_sec': 3900}],
   {'points': 46, 'saves': 3}),
  ('second regression',
   [{'decision': 'W', 'empty_net_ga': 2, 'shots_faced': 27, 'team_ga': 2, 'toi_sec': 3600}],
   {'points': 124, 'saves': 27}),
  ('normal control 1',
   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 6, 'team_ga': 0, 'toi_sec': 3540}],
   {'points': 12, 'saves': 6}),
  ('normal control 2',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 1, 'team_ga': 1, 'toi_sec': 2400}],
   {'points': -10, 'saves': 0}),
  ('normal control 3',
   [{'decision': 'W', 'empty_net_ga': 1, 'shots_faced': 18, 'team_ga': 6, 'toi_sec': 3900}],
   {'points': -34, 'saves': 13}),
  ('normal control 4',
   [{'decision': 'W', 'empty_net_ga': 1, 'shots_faced': 15, 'team_ga': 3, 'toi_sec': 2400}],
   {'points': 26, 'saves': 13})],
 [('regression: shutout playing time',
   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 16, 'team_ga': 2, 'toi_sec': 3600}],
   {'points': 72, 'saves': 16}),
  ('partial repair probe: shutout playing time',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 38, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 116, 'saves': 38}),
  ('second regression',
   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 23, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 116, 'saves': 23}),
  ('normal control 1',
   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 34, 'team_ga': 3, 'toi_sec': 3600}],
   {'points': 2, 'saves': 31}),
  ('normal control 2',
   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 26, 'team_ga': 3, 'toi_sec': 3600}],
   {'points': 8, 'saves': 24}),
  ('normal control 3',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 24, 'team_ga': 2, 'toi_sec': 2400}],
   {'points': 14, 'saves': 22}),
  ('normal control 4',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 35, 'team_ga': 1, 'toi_sec': 3283}],
   {'points': 70, 'saves': 35})],
 [('regression: shutout playing time',
   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 10, 'team_ga': 1, 'toi_sec': 3600}],
   {'points': 50, 'saves': 10}),
  ('partial repair probe: shutout playing time',
   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 9, 'team_ga': 2, 'toi_sec': 3900}],
   {'points': 48, 'saves': 9}),
  ('second regression',
   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 31, 'team_ga': 1, 'toi_sec': 3600}],
   {'points': 102, 'saves': 31}),
  ('normal control 1',
   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 6, 'team_ga': 6, 'toi_sec': 681}],
   {'points': -88, 'saves': 1}),
  ('normal control 2',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 35, 'team_ga': 4, 'toi_sec': 3540}],
   {'points': 4, 'saves': 32}),
  ('normal control 3',
   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 19, 'team_ga': 5, 'toi_sec': 3900}],
   {'points': -28, 'saves': 16}),
  ('normal control 4',
   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 29, 'team_ga': 5, 'toi_sec': 3600}],
   {'points': -12, 'saves': 24})],
 [('regression: shutout playing time',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 21, 'team_ga': 1, 'toi_sec': 3600}],
   {'points': 72, 'saves': 21}),
  ('partial repair probe: shutout playing time',
   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 20, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 70, 'saves': 20}),
  ('second regression',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 22, 'team_ga': 1, 'toi_sec': 3600}],
   {'points': 74, 'saves': 22}),
  ('normal control 1',
   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 10, 'team_ga': 6, 'toi_sec': 3900}],
   {'points': -90, 'saves': 5}),
  ('normal control 2',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 20, 'team_ga': 2, 'toi_sec': 3600}],
   {'points': 18, 'saves': 19}),
  ('normal control 3',
   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 27, 'team_ga': 0, 'toi_sec': 2400}],
   {'points': 54, 'saves': 27}),
  ('normal control 4',
   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 18, 'team_ga': 4, 'toi_sec': 3600}],
   {'points': -8, 'saves': 16})]]
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: shutout playing time{'points': 6, 'saves': 3}{'points': 36, 'saves': 3}Failed
partial repair probe: shutout playing time{'points': 28, 'saves': 9}{'points': 58, 'saves': 9}Failed
second regression{'points': 46, 'saves': 23}{'points': 76, 'saves': 23}Failed
normal control 1{'points': 18, 'saves': 14}{'points': 18, 'saves': 14}Passed
normal control 2{'points': -16, 'saves': 22}{'points': -16, 'saves': 22}Passed
normal control 3{'points': 28, 'saves': 39}{'points': 28, 'saves': 39}Passed
normal control 4{'points': 8, 'saves': 24}{'points': 8, 'saves': 24}Passed

SHA-256 / 4849b1f48dfcecfe0bd5c00a30d8b7dc373df08ef6bfca5f363ccd7b883bf6a5

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(g):
    ga = g['team_ga'] - g['empty_net_ga']
    saves = g['shots_faced'] - ga
    pts = saves * 2 - ga * 20
    pts += {'W': 40, 'OTL': 10}.get(g['decision'], 0)
    if ga == 0 and g['toi_sec'] >= 3600 and g['decision'] == 'W':
        pts += 30
    return {'saves': saves, 'points': pts}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: shutout playing time',
   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 3, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 36, 'saves': 3}),
  ('partial repair probe: shutout playing time',
   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 9, 'team_ga': 2, 'toi_sec': 3600}],
   {'points': 58, 'saves': 9}),
  ('second regression',
   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 23, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 76, 'saves': 23}),
  ('normal control 1',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 15, 'team_ga': 1, 'toi_sec': 2737}],
   {'points': 18, 'saves': 14}),
  ('normal control 2',
   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 25, 'team_ga': 5, 'toi_sec': 3600}],
   {'points': -16, 'saves': 22}),
  ('normal control 3',
   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 42, 'team_ga': 4, 'toi_sec': 3600}],
   {'points': 28, 'saves': 39}),
  ('normal control 4',
   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 26, 'team_ga': 4, 'toi_sec': 3599}],
   {'points': 8, 'saves': 24})],
 [('regression: shutout playing time',
   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 23, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 76, 'saves': 23}),
  ('partial repair probe: shutout playing time',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 3, 'team_ga': 0, 'toi_sec': 3900}],
   {'points': 46, 'saves': 3}),
  ('second regression',
   [{'decision': 'W', 'empty_net_ga': 2, 'shots_faced': 27, 'team_ga': 2, 'toi_sec': 3600}],
   {'points': 124, 'saves': 27}),
  ('normal control 1',
   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 6, 'team_ga': 0, 'toi_sec': 3540}],
   {'points': 12, 'saves': 6}),
  ('normal control 2',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 1, 'team_ga': 1, 'toi_sec': 2400}],
   {'points': -10, 'saves': 0}),
  ('normal control 3',
   [{'decision': 'W', 'empty_net_ga': 1, 'shots_faced': 18, 'team_ga': 6, 'toi_sec': 3900}],
   {'points': -34, 'saves': 13}),
  ('normal control 4',
   [{'decision': 'W', 'empty_net_ga': 1, 'shots_faced': 15, 'team_ga': 3, 'toi_sec': 2400}],
   {'points': 26, 'saves': 13})],
 [('regression: shutout playing time',
   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 16, 'team_ga': 2, 'toi_sec': 3600}],
   {'points': 72, 'saves': 16}),
  ('partial repair probe: shutout playing time',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 38, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 116, 'saves': 38}),
  ('second regression',
   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 23, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 116, 'saves': 23}),
  ('normal control 1',
   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 34, 'team_ga': 3, 'toi_sec': 3600}],
   {'points': 2, 'saves': 31}),
  ('normal control 2',
   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 26, 'team_ga': 3, 'toi_sec': 3600}],
   {'points': 8, 'saves': 24}),
  ('normal control 3',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 24, 'team_ga': 2, 'toi_sec': 2400}],
   {'points': 14, 'saves': 22}),
  ('normal control 4',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 35, 'team_ga': 1, 'toi_sec': 3283}],
   {'points': 70, 'saves': 35})],
 [('regression: shutout playing time',
   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 10, 'team_ga': 1, 'toi_sec': 3600}],
   {'points': 50, 'saves': 10}),
  ('partial repair probe: shutout playing time',
   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 9, 'team_ga': 2, 'toi_sec': 3900}],
   {'points': 48, 'saves': 9}),
  ('second regression',
   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 31, 'team_ga': 1, 'toi_sec': 3600}],
   {'points': 102, 'saves': 31}),
  ('normal control 1',
   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 6, 'team_ga': 6, 'toi_sec': 681}],
   {'points': -88, 'saves': 1}),
  ('normal control 2',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 35, 'team_ga': 4, 'toi_sec': 3540}],
   {'points': 4, 'saves': 32}),
  ('normal control 3',
   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 19, 'team_ga': 5, 'toi_sec': 3900}],
   {'points': -28, 'saves': 16}),
  ('normal control 4',
   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 29, 'team_ga': 5, 'toi_sec': 3600}],
   {'points': -12, 'saves': 24})],
 [('regression: shutout playing time',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 21, 'team_ga': 1, 'toi_sec': 3600}],
   {'points': 72, 'saves': 21}),
  ('partial repair probe: shutout playing time',
   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 20, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 70, 'saves': 20}),
  ('second regression',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 22, 'team_ga': 1, 'toi_sec': 3600}],
   {'points': 74, 'saves': 22}),
  ('normal control 1',
   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 10, 'team_ga': 6, 'toi_sec': 3900}],
   {'points': -90, 'saves': 5}),
  ('normal control 2',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 20, 'team_ga': 2, 'toi_sec': 3600}],
   {'points': 18, 'saves': 19}),
  ('normal control 3',
   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 27, 'team_ga': 0, 'toi_sec': 2400}],
   {'points': 54, 'saves': 27}),
  ('normal control 4',
   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 18, 'team_ga': 4, 'toi_sec': 3600}],
   {'points': -8, 'saves': 16})]]
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: shutout playing time{'points': 6, 'saves': 3}{'points': 36, 'saves': 3}Failed
partial repair probe: shutout playing time{'points': 28, 'saves': 9}{'points': 58, 'saves': 9}Failed
second regression{'points': 46, 'saves': 23}{'points': 76, 'saves': 23}Failed
normal control 1{'points': 18, 'saves': 14}{'points': 18, 'saves': 14}Passed
normal control 2{'points': -16, 'saves': 22}{'points': -16, 'saves': 22}Passed
normal control 3{'points': 28, 'saves': 39}{'points': 28, 'saves': 39}Passed
normal control 4{'points': 8, 'saves': 24}{'points': 8, 'saves': 24}Passed

SHA-256 / a8e22427e708229b29b494b0e83fa16a28aaef046c124bbee6a6e0ecf0a5dd58

3 / The verified repair

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

N = 1
observations = []
def solve(g):
    ga = g['team_ga'] - g['empty_net_ga']
    saves = g['shots_faced'] - ga
    pts = saves * 2 - ga * 20
    pts += {'W': 40, 'OTL': 10}.get(g['decision'], 0)
    if ga == 0 and g['toi_sec'] >= 3600:
        pts += 30
    return {'saves': saves, 'points': pts}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: shutout playing time',
   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 3, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 36, 'saves': 3}),
  ('partial repair probe: shutout playing time',
   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 9, 'team_ga': 2, 'toi_sec': 3600}],
   {'points': 58, 'saves': 9}),
  ('second regression',
   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 23, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 76, 'saves': 23}),
  ('normal control 1',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 15, 'team_ga': 1, 'toi_sec': 2737}],
   {'points': 18, 'saves': 14}),
  ('normal control 2',
   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 25, 'team_ga': 5, 'toi_sec': 3600}],
   {'points': -16, 'saves': 22}),
  ('normal control 3',
   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 42, 'team_ga': 4, 'toi_sec': 3600}],
   {'points': 28, 'saves': 39}),
  ('normal control 4',
   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 26, 'team_ga': 4, 'toi_sec': 3599}],
   {'points': 8, 'saves': 24})],
 [('regression: shutout playing time',
   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 23, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 76, 'saves': 23}),
  ('partial repair probe: shutout playing time',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 3, 'team_ga': 0, 'toi_sec': 3900}],
   {'points': 46, 'saves': 3}),
  ('second regression',
   [{'decision': 'W', 'empty_net_ga': 2, 'shots_faced': 27, 'team_ga': 2, 'toi_sec': 3600}],
   {'points': 124, 'saves': 27}),
  ('normal control 1',
   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 6, 'team_ga': 0, 'toi_sec': 3540}],
   {'points': 12, 'saves': 6}),
  ('normal control 2',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 1, 'team_ga': 1, 'toi_sec': 2400}],
   {'points': -10, 'saves': 0}),
  ('normal control 3',
   [{'decision': 'W', 'empty_net_ga': 1, 'shots_faced': 18, 'team_ga': 6, 'toi_sec': 3900}],
   {'points': -34, 'saves': 13}),
  ('normal control 4',
   [{'decision': 'W', 'empty_net_ga': 1, 'shots_faced': 15, 'team_ga': 3, 'toi_sec': 2400}],
   {'points': 26, 'saves': 13})],
 [('regression: shutout playing time',
   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 16, 'team_ga': 2, 'toi_sec': 3600}],
   {'points': 72, 'saves': 16}),
  ('partial repair probe: shutout playing time',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 38, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 116, 'saves': 38}),
  ('second regression',
   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 23, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 116, 'saves': 23}),
  ('normal control 1',
   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 34, 'team_ga': 3, 'toi_sec': 3600}],
   {'points': 2, 'saves': 31}),
  ('normal control 2',
   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 26, 'team_ga': 3, 'toi_sec': 3600}],
   {'points': 8, 'saves': 24}),
  ('normal control 3',
   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 24, 'team_ga': 2, 'toi_sec': 2400}],
   {'points': 14, 'saves': 22}),
  ('normal control 4',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 35, 'team_ga': 1, 'toi_sec': 3283}],
   {'points': 70, 'saves': 35})],
 [('regression: shutout playing time',
   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 10, 'team_ga': 1, 'toi_sec': 3600}],
   {'points': 50, 'saves': 10}),
  ('partial repair probe: shutout playing time',
   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 9, 'team_ga': 2, 'toi_sec': 3900}],
   {'points': 48, 'saves': 9}),
  ('second regression',
   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 31, 'team_ga': 1, 'toi_sec': 3600}],
   {'points': 102, 'saves': 31}),
  ('normal control 1',
   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 6, 'team_ga': 6, 'toi_sec': 681}],
   {'points': -88, 'saves': 1}),
  ('normal control 2',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 35, 'team_ga': 4, 'toi_sec': 3540}],
   {'points': 4, 'saves': 32}),
  ('normal control 3',
   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 19, 'team_ga': 5, 'toi_sec': 3900}],
   {'points': -28, 'saves': 16}),
  ('normal control 4',
   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 29, 'team_ga': 5, 'toi_sec': 3600}],
   {'points': -12, 'saves': 24})],
 [('regression: shutout playing time',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 21, 'team_ga': 1, 'toi_sec': 3600}],
   {'points': 72, 'saves': 21}),
  ('partial repair probe: shutout playing time',
   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 20, 'team_ga': 0, 'toi_sec': 3600}],
   {'points': 70, 'saves': 20}),
  ('second regression',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 22, 'team_ga': 1, 'toi_sec': 3600}],
   {'points': 74, 'saves': 22}),
  ('normal control 1',
   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 10, 'team_ga': 6, 'toi_sec': 3900}],
   {'points': -90, 'saves': 5}),
  ('normal control 2',
   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 20, 'team_ga': 2, 'toi_sec': 3600}],
   {'points': 18, 'saves': 19}),
  ('normal control 3',
   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 27, 'team_ga': 0, 'toi_sec': 2400}],
   {'points': 54, 'saves': 27}),
  ('normal control 4',
   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 18, 'team_ga': 4, 'toi_sec': 3600}],
   {'points': -8, 'saves': 16})]]
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: shutout playing time{'points': 36, 'saves': 3}{'points': 36, 'saves': 3}Passed
partial repair probe: shutout playing time{'points': 58, 'saves': 9}{'points': 58, 'saves': 9}Passed
second regression{'points': 76, 'saves': 23}{'points': 76, 'saves': 23}Passed
normal control 1{'points': 18, 'saves': 14}{'points': 18, 'saves': 14}Passed
normal control 2{'points': -16, 'saves': 22}{'points': -16, 'saves': 22}Passed
normal control 3{'points': 28, 'saves': 39}{'points': 28, 'saves': 39}Passed
normal control 4{'points': 8, 'saves': 24}{'points': 8, 'saves': 24}Passed

SHA-256 / 1418363963b788e337e12a5def364c3dc5673485e6a61cc92d79ec858a988214

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.729373+00:00.

Case digest / d858250df40eab24803c6e3aed8c5b0041f042195e9427289f8434dc8af8797f