{"abstract":"A goalie who allowed one goal is charged three after two late empty-netters.","category":"Fantasy sports scoring","checks":7,"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.","evaluation_group":"w2-fantasy-sports-scoring-goalie-line","failed_approach":"Subtracting at most one empty-net goal still charges the second.","family":"w2-fantasy-sports-scoring-goalie-line-empty-net-attribution","id":"FA-85131","implementations":{"attempt":{"sha256":"34d8511ea417b24cdbe3741c1a0762984f4bb4e606cb019e3e1d41e986ca5cdd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(g):\n    ga = g['team_ga'] - (1 if g['empty_net_ga'] else 0)\n    saves = g['shots_faced'] - ga\n    pts = saves * 2 - ga * 20\n    pts += {'W': 40, 'OTL': 10}.get(g['decision'], 0)\n    if ga == 0 and g['toi_sec'] >= 3600:\n        pts += 30\n    return {'saves': saves, 'points': pts}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: empty-net attribution',\n   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 26, 'team_ga': 1, 'toi_sec': 3540}],\n   {'points': 62, 'saves': 26}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'W', 'empty_net_ga': 2, 'shots_faced': 23, 'team_ga': 5, 'toi_sec': 2400}],\n   {'points': 20, 'saves': 20}),\n  ('second regression',\n   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 16, 'team_ga': 1, 'toi_sec': 2400}],\n   {'points': 32, 'saves': 16}),\n  ('normal control 1',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 7, 'team_ga': 2, 'toi_sec': 3900}],\n   {'points': 10, 'saves': 5}),\n  ('normal control 2',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 13, 'team_ga': 0, 'toi_sec': 2675}],\n   {'points': 36, 'saves': 13}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 26, 'team_ga': 3, 'toi_sec': 3900}],\n   {'points': -4, 'saves': 23}),\n  ('normal control 4',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 32, 'team_ga': 1, 'toi_sec': 3540}],\n   {'points': 42, 'saves': 31})],\n [('regression: empty-net attribution',\n   [{'decision': 'W', 'empty_net_ga': 1, 'shots_faced': 34, 'team_ga': 2, 'toi_sec': 3540}],\n   {'points': 86, 'saves': 33}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 29, 'team_ga': 4, 'toi_sec': 3900}],\n   {'points': 24, 'saves': 27}),\n  ('second regression',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 18, 'team_ga': 3, 'toi_sec': 3900}],\n   {'points': -8, 'saves': 16}),\n  ('normal control 1',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 2, 'team_ga': 1, 'toi_sec': 3600}],\n   {'points': -18, 'saves': 1}),\n  ('normal control 2',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 8, 'team_ga': 1, 'toi_sec': 3599}],\n   {'points': 4, 'saves': 7}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 16, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': -2, 'saves': 14}),\n  ('normal control 4',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 3, 'team_ga': 1, 'toi_sec': 3540}],\n   {'points': -6, 'saves': 2})],\n [('regression: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 38, 'team_ga': 3, 'toi_sec': 2400}],\n   {'points': 32, 'saves': 36}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 39, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': 108, 'saves': 39}),\n  ('second regression',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 39, 'team_ga': 2, 'toi_sec': 3599}],\n   {'points': 56, 'saves': 38}),\n  ('normal control 1',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 36, 'team_ga': 2, 'toi_sec': 2400}],\n   {'points': 28, 'saves': 34}),\n  ('normal control 2',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 20, 'team_ga': 5, 'toi_sec': 2400}],\n   {'points': -30, 'saves': 15}),\n  ('normal control 3',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 17, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': -10, 'saves': 15}),\n  ('normal control 4',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 40, 'team_ga': 0, 'toi_sec': 3600}],\n   {'points': 150, 'saves': 40})],\n [('regression: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 37, 'team_ga': 2, 'toi_sec': 2400}],\n   {'points': 74, 'saves': 37}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 1, 'team_ga': 2, 'toi_sec': 3540}],\n   {'points': 2, 'saves': 1}),\n  ('second regression',\n   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 7, 'team_ga': 2, 'toi_sec': 3900}],\n   {'points': 44, 'saves': 7}),\n  ('normal control 1',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 1, 'team_ga': 1, 'toi_sec': 3600}],\n   {'points': -20, 'saves': 0}),\n  ('normal control 2',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 38, 'team_ga': 5, 'toi_sec': 3540}],\n   {'points': 6, 'saves': 33}),\n  ('normal control 3',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 15, 'team_ga': 0, 'toi_sec': 3540}],\n   {'points': 30, 'saves': 15}),\n  ('normal control 4',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 11, 'team_ga': 0, 'toi_sec': 2400}],\n   {'points': 32, 'saves': 11})],\n [('regression: empty-net attribution',\n   [{'decision': 'W', 'empty_net_ga': 1, 'shots_faced': 40, 'team_ga': 4, 'toi_sec': 3599}],\n   {'points': 54, 'saves': 37}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 33, 'team_ga': 3, 'toi_sec': 2400}],\n   {'points': 44, 'saves': 32}),\n  ('second regression',\n   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 6, 'team_ga': 3, 'toi_sec': 3600}],\n   {'points': -22, 'saves': 4}),\n  ('normal control 1',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 9, 'team_ga': 0, 'toi_sec': 3600}],\n   {'points': 88, 'saves': 9}),\n  ('normal control 2',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 25, 'team_ga': 0, 'toi_sec': 3599}],\n   {'points': 50, 'saves': 25}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 17, 'team_ga': 5, 'toi_sec': 2400}],\n   {'points': -66, 'saves': 12}),\n  ('normal control 4',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 6, 'team_ga': 1, 'toi_sec': 3599}],\n   {'points': 30, 'saves': 5})]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*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":"27d4d82f117197741bfd8fc75020d8053d8549e244536b8a1bc449c52fd17889","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(g):\n    ga = g['team_ga']\n    saves = g['shots_faced'] - ga\n    pts = saves * 2 - ga * 20\n    pts += {'W': 40, 'OTL': 10}.get(g['decision'], 0)\n    if ga == 0 and g['toi_sec'] >= 3600:\n        pts += 30\n    return {'saves': saves, 'points': pts}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: empty-net attribution',\n   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 26, 'team_ga': 1, 'toi_sec': 3540}],\n   {'points': 62, 'saves': 26}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'W', 'empty_net_ga': 2, 'shots_faced': 23, 'team_ga': 5, 'toi_sec': 2400}],\n   {'points': 20, 'saves': 20}),\n  ('second regression',\n   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 16, 'team_ga': 1, 'toi_sec': 2400}],\n   {'points': 32, 'saves': 16}),\n  ('normal control 1',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 7, 'team_ga': 2, 'toi_sec': 3900}],\n   {'points': 10, 'saves': 5}),\n  ('normal control 2',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 13, 'team_ga': 0, 'toi_sec': 2675}],\n   {'points': 36, 'saves': 13}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 26, 'team_ga': 3, 'toi_sec': 3900}],\n   {'points': -4, 'saves': 23}),\n  ('normal control 4',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 32, 'team_ga': 1, 'toi_sec': 3540}],\n   {'points': 42, 'saves': 31})],\n [('regression: empty-net attribution',\n   [{'decision': 'W', 'empty_net_ga': 1, 'shots_faced': 34, 'team_ga': 2, 'toi_sec': 3540}],\n   {'points': 86, 'saves': 33}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 29, 'team_ga': 4, 'toi_sec': 3900}],\n   {'points': 24, 'saves': 27}),\n  ('second regression',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 18, 'team_ga': 3, 'toi_sec': 3900}],\n   {'points': -8, 'saves': 16}),\n  ('normal control 1',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 2, 'team_ga': 1, 'toi_sec': 3600}],\n   {'points': -18, 'saves': 1}),\n  ('normal control 2',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 8, 'team_ga': 1, 'toi_sec': 3599}],\n   {'points': 4, 'saves': 7}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 16, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': -2, 'saves': 14}),\n  ('normal control 4',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 3, 'team_ga': 1, 'toi_sec': 3540}],\n   {'points': -6, 'saves': 2})],\n [('regression: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 38, 'team_ga': 3, 'toi_sec': 2400}],\n   {'points': 32, 'saves': 36}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 39, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': 108, 'saves': 39}),\n  ('second regression',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 39, 'team_ga': 2, 'toi_sec': 3599}],\n   {'points': 56, 'saves': 38}),\n  ('normal control 1',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 36, 'team_ga': 2, 'toi_sec': 2400}],\n   {'points': 28, 'saves': 34}),\n  ('normal control 2',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 20, 'team_ga': 5, 'toi_sec': 2400}],\n   {'points': -30, 'saves': 15}),\n  ('normal control 3',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 17, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': -10, 'saves': 15}),\n  ('normal control 4',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 40, 'team_ga': 0, 'toi_sec': 3600}],\n   {'points': 150, 'saves': 40})],\n [('regression: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 37, 'team_ga': 2, 'toi_sec': 2400}],\n   {'points': 74, 'saves': 37}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 1, 'team_ga': 2, 'toi_sec': 3540}],\n   {'points': 2, 'saves': 1}),\n  ('second regression',\n   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 7, 'team_ga': 2, 'toi_sec': 3900}],\n   {'points': 44, 'saves': 7}),\n  ('normal control 1',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 1, 'team_ga': 1, 'toi_sec': 3600}],\n   {'points': -20, 'saves': 0}),\n  ('normal control 2',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 38, 'team_ga': 5, 'toi_sec': 3540}],\n   {'points': 6, 'saves': 33}),\n  ('normal control 3',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 15, 'team_ga': 0, 'toi_sec': 3540}],\n   {'points': 30, 'saves': 15}),\n  ('normal control 4',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 11, 'team_ga': 0, 'toi_sec': 2400}],\n   {'points': 32, 'saves': 11})],\n [('regression: empty-net attribution',\n   [{'decision': 'W', 'empty_net_ga': 1, 'shots_faced': 40, 'team_ga': 4, 'toi_sec': 3599}],\n   {'points': 54, 'saves': 37}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 33, 'team_ga': 3, 'toi_sec': 2400}],\n   {'points': 44, 'saves': 32}),\n  ('second regression',\n   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 6, 'team_ga': 3, 'toi_sec': 3600}],\n   {'points': -22, 'saves': 4}),\n  ('normal control 1',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 9, 'team_ga': 0, 'toi_sec': 3600}],\n   {'points': 88, 'saves': 9}),\n  ('normal control 2',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 25, 'team_ga': 0, 'toi_sec': 3599}],\n   {'points': 50, 'saves': 25}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 17, 'team_ga': 5, 'toi_sec': 2400}],\n   {'points': -66, 'saves': 12}),\n  ('normal control 4',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 6, 'team_ga': 1, 'toi_sec': 3599}],\n   {'points': 30, 'saves': 5})]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*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":"10cf0cd3546609aa248ddbdb96cd829a507c72b6e43abbd77ca6041d52453a8c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(g):\n    ga = g['team_ga'] - g['empty_net_ga']\n    saves = g['shots_faced'] - ga\n    pts = saves * 2 - ga * 20\n    pts += {'W': 40, 'OTL': 10}.get(g['decision'], 0)\n    if ga == 0 and g['toi_sec'] >= 3600:\n        pts += 30\n    return {'saves': saves, 'points': pts}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: empty-net attribution',\n   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 26, 'team_ga': 1, 'toi_sec': 3540}],\n   {'points': 62, 'saves': 26}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'W', 'empty_net_ga': 2, 'shots_faced': 23, 'team_ga': 5, 'toi_sec': 2400}],\n   {'points': 20, 'saves': 20}),\n  ('second regression',\n   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 16, 'team_ga': 1, 'toi_sec': 2400}],\n   {'points': 32, 'saves': 16}),\n  ('normal control 1',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 7, 'team_ga': 2, 'toi_sec': 3900}],\n   {'points': 10, 'saves': 5}),\n  ('normal control 2',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 13, 'team_ga': 0, 'toi_sec': 2675}],\n   {'points': 36, 'saves': 13}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 26, 'team_ga': 3, 'toi_sec': 3900}],\n   {'points': -4, 'saves': 23}),\n  ('normal control 4',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 32, 'team_ga': 1, 'toi_sec': 3540}],\n   {'points': 42, 'saves': 31})],\n [('regression: empty-net attribution',\n   [{'decision': 'W', 'empty_net_ga': 1, 'shots_faced': 34, 'team_ga': 2, 'toi_sec': 3540}],\n   {'points': 86, 'saves': 33}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 29, 'team_ga': 4, 'toi_sec': 3900}],\n   {'points': 24, 'saves': 27}),\n  ('second regression',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 18, 'team_ga': 3, 'toi_sec': 3900}],\n   {'points': -8, 'saves': 16}),\n  ('normal control 1',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 2, 'team_ga': 1, 'toi_sec': 3600}],\n   {'points': -18, 'saves': 1}),\n  ('normal control 2',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 8, 'team_ga': 1, 'toi_sec': 3599}],\n   {'points': 4, 'saves': 7}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 16, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': -2, 'saves': 14}),\n  ('normal control 4',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 3, 'team_ga': 1, 'toi_sec': 3540}],\n   {'points': -6, 'saves': 2})],\n [('regression: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 38, 'team_ga': 3, 'toi_sec': 2400}],\n   {'points': 32, 'saves': 36}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 39, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': 108, 'saves': 39}),\n  ('second regression',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 39, 'team_ga': 2, 'toi_sec': 3599}],\n   {'points': 56, 'saves': 38}),\n  ('normal control 1',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 36, 'team_ga': 2, 'toi_sec': 2400}],\n   {'points': 28, 'saves': 34}),\n  ('normal control 2',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 20, 'team_ga': 5, 'toi_sec': 2400}],\n   {'points': -30, 'saves': 15}),\n  ('normal control 3',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 17, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': -10, 'saves': 15}),\n  ('normal control 4',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 40, 'team_ga': 0, 'toi_sec': 3600}],\n   {'points': 150, 'saves': 40})],\n [('regression: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 37, 'team_ga': 2, 'toi_sec': 2400}],\n   {'points': 74, 'saves': 37}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 1, 'team_ga': 2, 'toi_sec': 3540}],\n   {'points': 2, 'saves': 1}),\n  ('second regression',\n   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 7, 'team_ga': 2, 'toi_sec': 3900}],\n   {'points': 44, 'saves': 7}),\n  ('normal control 1',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 1, 'team_ga': 1, 'toi_sec': 3600}],\n   {'points': -20, 'saves': 0}),\n  ('normal control 2',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 38, 'team_ga': 5, 'toi_sec': 3540}],\n   {'points': 6, 'saves': 33}),\n  ('normal control 3',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 15, 'team_ga': 0, 'toi_sec': 3540}],\n   {'points': 30, 'saves': 15}),\n  ('normal control 4',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 11, 'team_ga': 0, 'toi_sec': 2400}],\n   {'points': 32, 'saves': 11})],\n [('regression: empty-net attribution',\n   [{'decision': 'W', 'empty_net_ga': 1, 'shots_faced': 40, 'team_ga': 4, 'toi_sec': 3599}],\n   {'points': 54, 'saves': 37}),\n  ('partial repair probe: empty-net attribution',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 33, 'team_ga': 3, 'toi_sec': 2400}],\n   {'points': 44, 'saves': 32}),\n  ('second regression',\n   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 6, 'team_ga': 3, 'toi_sec': 3600}],\n   {'points': -22, 'saves': 4}),\n  ('normal control 1',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 9, 'team_ga': 0, 'toi_sec': 3600}],\n   {'points': 88, 'saves': 9}),\n  ('normal control 2',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 25, 'team_ga': 0, 'toi_sec': 3599}],\n   {'points': 50, 'saves': 25}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 17, 'team_ga': 5, 'toi_sec': 2400}],\n   {'points': -66, 'saves': 12}),\n  ('normal control 4',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 6, 'team_ga': 1, 'toi_sec': 3599}],\n   {'points': 30, 'saves': 5})]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*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":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-fantasy-sports-scoring-goalie-line-empty-net-attribution","generated_at":"2026-09-29T14:50:37.664234+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Goalie scoring depends on attribution of empty-net goals and on playing-time conditions for shutouts.","repair":"Subtract every empty-net goal from the team total.","root_cause":"Goalie goals against are taken from the team total including empty-net goals.","sha256":"e3d3f96b7cd3dbc5e6263a990ac08acf5803619df6dd4f4f160b92deb707f477","title":"Empty-net goals charged to the pulled goalie · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.181,"exit_code":1,"observations":[{"actual":{"points":62,"saves":26},"check":"regression: empty-net attribution","expected":{"points":62,"saves":26},"passed":true},{"actual":{"points":-2,"saves":19},"check":"partial repair probe: empty-net attribution","expected":{"points":20,"saves":20},"passed":false},{"actual":{"points":32,"saves":16},"check":"second regression","expected":{"points":32,"saves":16},"passed":true},{"actual":{"points":10,"saves":5},"check":"normal control 1","expected":{"points":10,"saves":5},"passed":true},{"actual":{"points":36,"saves":13},"check":"normal control 2","expected":{"points":36,"saves":13},"passed":true},{"actual":{"points":-4,"saves":23},"check":"normal control 3","expected":{"points":-4,"saves":23},"passed":true},{"actual":{"points":42,"saves":31},"check":"normal control 4","expected":{"points":42,"saves":31},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: empty-net attribution\", \"actual\": {\"saves\": 26, \"points\": 62}, \"expected\": {\"points\": 62, \"saves\": 26}, \"passed\": true}, {\"check\": \"partial repair probe: empty-net attribution\", \"actual\": {\"saves\": 19, \"points\": -2}, \"expected\": {\"points\": 20, \"saves\": 20}, \"passed\": false}, {\"check\": \"second regression\", \"actual\": {\"saves\": 16, \"points\": 32}, \"expected\": {\"points\": 32, \"saves\": 16}, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": {\"saves\": 5, \"points\": 10}, \"expected\": {\"points\": 10, \"saves\": 5}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"saves\": 13, \"points\": 36}, \"expected\": {\"points\": 36, \"saves\": 13}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"saves\": 23, \"points\": -4}, \"expected\": {\"points\": -4, \"saves\": 23}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"saves\": 31, \"points\": 42}, \"expected\": {\"points\": 42, \"saves\": 31}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.828,"exit_code":1,"observations":[{"actual":{"points":40,"saves":25},"check":"regression: empty-net attribution","expected":{"points":62,"saves":26},"passed":false},{"actual":{"points":-24,"saves":18},"check":"partial repair probe: empty-net attribution","expected":{"points":20,"saves":20},"passed":false},{"actual":{"points":10,"saves":15},"check":"second regression","expected":{"points":32,"saves":16},"passed":false},{"actual":{"points":10,"saves":5},"check":"normal control 1","expected":{"points":10,"saves":5},"passed":true},{"actual":{"points":36,"saves":13},"check":"normal control 2","expected":{"points":36,"saves":13},"passed":true},{"actual":{"points":-4,"saves":23},"check":"normal control 3","expected":{"points":-4,"saves":23},"passed":true},{"actual":{"points":42,"saves":31},"check":"normal control 4","expected":{"points":42,"saves":31},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: empty-net attribution\", \"actual\": {\"saves\": 25, \"points\": 40}, \"expected\": {\"points\": 62, \"saves\": 26}, \"passed\": false}, {\"check\": \"partial repair probe: empty-net attribution\", \"actual\": {\"saves\": 18, \"points\": -24}, \"expected\": {\"points\": 20, \"saves\": 20}, \"passed\": false}, {\"check\": \"second regression\", \"actual\": {\"saves\": 15, \"points\": 10}, \"expected\": {\"points\": 32, \"saves\": 16}, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": {\"saves\": 5, \"points\": 10}, \"expected\": {\"points\": 10, \"saves\": 5}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"saves\": 13, \"points\": 36}, \"expected\": {\"points\": 36, \"saves\": 13}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"saves\": 23, \"points\": -4}, \"expected\": {\"points\": -4, \"saves\": 23}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"saves\": 31, \"points\": 42}, \"expected\": {\"points\": 42, \"saves\": 31}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.453,"exit_code":0,"observations":[{"actual":{"points":62,"saves":26},"check":"regression: empty-net attribution","expected":{"points":62,"saves":26},"passed":true},{"actual":{"points":20,"saves":20},"check":"partial repair probe: empty-net attribution","expected":{"points":20,"saves":20},"passed":true},{"actual":{"points":32,"saves":16},"check":"second regression","expected":{"points":32,"saves":16},"passed":true},{"actual":{"points":10,"saves":5},"check":"normal control 1","expected":{"points":10,"saves":5},"passed":true},{"actual":{"points":36,"saves":13},"check":"normal control 2","expected":{"points":36,"saves":13},"passed":true},{"actual":{"points":-4,"saves":23},"check":"normal control 3","expected":{"points":-4,"saves":23},"passed":true},{"actual":{"points":42,"saves":31},"check":"normal control 4","expected":{"points":42,"saves":31},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: empty-net attribution\", \"actual\": {\"saves\": 26, \"points\": 62}, \"expected\": {\"points\": 62, \"saves\": 26}, \"passed\": true}, {\"check\": \"partial repair probe: empty-net attribution\", \"actual\": {\"saves\": 20, \"points\": 20}, \"expected\": {\"points\": 20, \"saves\": 20}, \"passed\": true}, {\"check\": \"second regression\", \"actual\": {\"saves\": 16, \"points\": 32}, \"expected\": {\"points\": 32, \"saves\": 16}, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": {\"saves\": 5, \"points\": 10}, \"expected\": {\"points\": 10, \"saves\": 5}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"saves\": 13, \"points\": 36}, \"expected\": {\"points\": 36, \"saves\": 13}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"saves\": 23, \"points\": -4}, \"expected\": {\"points\": -4, \"saves\": 23}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"saves\": 31, \"points\": 42}, \"expected\": {\"points\": 42, \"saves\": 31}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}