{"abstract":"Save totals drop by one for every empty-net goal.","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.","contract_signature":"g","evaluation_group":"w2-fantasy-sports-scoring-goalie-line","failed_approach":"Subtracting empty-net goals on top of goalie goals double-counts the same mistake.","family":"w2-fantasy-sports-scoring-goalie-line-save-derivation","id":"FA-85136","implementations":{"attempt":{"sha256":"29e4cf2028c898f02379f0e79b74b7127d70355365ab9c2cd1ca9e49bdc74f57","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 - g['empty_net_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: save derivation',\n   [{'decision': 'W', 'empty_net_ga': 2, 'shots_faced': 26, 'team_ga': 4, 'toi_sec': 1645}],\n   {'points': 48, 'saves': 24}),\n  ('partial repair probe: save derivation',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 30, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': 90, 'saves': 30}),\n  ('second regression',\n   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 12, 'team_ga': 5, 'toi_sec': 3900}],\n   {'points': -32, 'saves': 9}),\n  ('normal control 1',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 30, 'team_ga': 5, 'toi_sec': 3599}],\n   {'points': -40, 'saves': 25}),\n  ('normal control 2',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 7, 'team_ga': 3, 'toi_sec': 3600}],\n   {'points': -52, 'saves': 4}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 20, 'team_ga': 5, 'toi_sec': 3600}],\n   {'points': -60, 'saves': 15}),\n  ('normal control 4',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 14, 'team_ga': 0, 'toi_sec': 3540}],\n   {'points': 28, 'saves': 14})],\n [('regression: save derivation',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 33, 'team_ga': 2, 'toi_sec': 2400}],\n   {'points': 44, 'saves': 32}),\n  ('partial repair probe: save derivation',\n   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 9, 'team_ga': 7, 'toi_sec': 3599}],\n   {'points': -82, 'saves': 4}),\n  ('second regression',\n   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 31, 'team_ga': 4, 'toi_sec': 3900}],\n   {'points': 18, 'saves': 29}),\n  ('normal control 1',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 30, 'team_ga': 5, 'toi_sec': 3599}],\n   {'points': -50, 'saves': 25}),\n  ('normal control 2',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 25, 'team_ga': 1, 'toi_sec': 3900}],\n   {'points': 68, 'saves': 24}),\n  ('normal control 3',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 25, 'team_ga': 3, 'toi_sec': 3599}],\n   {'points': 24, 'saves': 22}),\n  ('normal control 4',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 16, 'team_ga': 5, 'toi_sec': 3599}],\n   {'points': -78, 'saves': 11})],\n [('regression: save derivation',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 39, 'team_ga': 3, 'toi_sec': 3600}],\n   {'points': 56, 'saves': 38}),\n  ('partial repair probe: save derivation',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 14, 'team_ga': 6, 'toi_sec': 2400}],\n   {'points': -82, 'saves': 9}),\n  ('second regression',\n   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 21, 'team_ga': 7, 'toi_sec': 2154}],\n   {'points': -68, 'saves': 16}),\n  ('normal control 1',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 32, 'team_ga': 0, 'toi_sec': 2400}],\n   {'points': 64, 'saves': 32}),\n  ('normal control 2',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 22, 'team_ga': 1, 'toi_sec': 3900}],\n   {'points': 32, 'saves': 21}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 29, 'team_ga': 5, 'toi_sec': 3540}],\n   {'points': -42, 'saves': 24}),\n  ('normal control 4',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 35, 'team_ga': 2, 'toi_sec': 866}],\n   {'points': 26, 'saves': 33})],\n [('regression: save derivation',\n   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 26, 'team_ga': 1, 'toi_sec': 3600}],\n   {'points': 82, 'saves': 26}),\n  ('partial repair probe: save derivation',\n   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 14, 'team_ga': 1, 'toi_sec': 3599}],\n   {'points': 28, 'saves': 14}),\n  ('second regression',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 5, 'team_ga': 1, 'toi_sec': 3600}],\n   {'points': 40, 'saves': 5}),\n  ('normal control 1',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 28, 'team_ga': 0, 'toi_sec': 3900}],\n   {'points': 96, 'saves': 28}),\n  ('normal control 2',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 30, 'team_ga': 2, 'toi_sec': 3900}],\n   {'points': 56, 'saves': 28}),\n  ('normal control 3',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 24, 'team_ga': 1, 'toi_sec': 2400}],\n   {'points': 26, 'saves': 23}),\n  ('normal control 4',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 35, 'team_ga': 2, 'toi_sec': 3900}],\n   {'points': 26, 'saves': 33})],\n [('regression: save derivation',\n   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 20, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': 80, 'saves': 20}),\n  ('partial repair probe: save derivation',\n   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 7, 'team_ga': 4, 'toi_sec': 3731}],\n   {'points': -42, 'saves': 4}),\n  ('second regression',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 24, 'team_ga': 1, 'toi_sec': 3540}],\n   {'points': 48, 'saves': 24}),\n  ('normal control 1',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 5, 'team_ga': 2, 'toi_sec': 2400}],\n   {'points': -34, 'saves': 3}),\n  ('normal control 2',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 18, 'team_ga': 3, 'toi_sec': 807}],\n   {'points': -20, 'saves': 15}),\n  ('normal control 3',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 5, 'team_ga': 3, 'toi_sec': 1133}],\n   {'points': -56, 'saves': 2}),\n  ('normal control 4',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 18, 'team_ga': 5, 'toi_sec': 2400}],\n   {'points': -64, 'saves': 13})]]\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":"498ef71aa8630bbc727cee970c7635a77fc52da02f89cbd2790e0d83c89da7a7","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'] - g['team_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: save derivation',\n   [{'decision': 'W', 'empty_net_ga': 2, 'shots_faced': 26, 'team_ga': 4, 'toi_sec': 1645}],\n   {'points': 48, 'saves': 24}),\n  ('partial repair probe: save derivation',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 30, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': 90, 'saves': 30}),\n  ('second regression',\n   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 12, 'team_ga': 5, 'toi_sec': 3900}],\n   {'points': -32, 'saves': 9}),\n  ('normal control 1',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 30, 'team_ga': 5, 'toi_sec': 3599}],\n   {'points': -40, 'saves': 25}),\n  ('normal control 2',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 7, 'team_ga': 3, 'toi_sec': 3600}],\n   {'points': -52, 'saves': 4}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 20, 'team_ga': 5, 'toi_sec': 3600}],\n   {'points': -60, 'saves': 15}),\n  ('normal control 4',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 14, 'team_ga': 0, 'toi_sec': 3540}],\n   {'points': 28, 'saves': 14})],\n [('regression: save derivation',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 33, 'team_ga': 2, 'toi_sec': 2400}],\n   {'points': 44, 'saves': 32}),\n  ('partial repair probe: save derivation',\n   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 9, 'team_ga': 7, 'toi_sec': 3599}],\n   {'points': -82, 'saves': 4}),\n  ('second regression',\n   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 31, 'team_ga': 4, 'toi_sec': 3900}],\n   {'points': 18, 'saves': 29}),\n  ('normal control 1',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 30, 'team_ga': 5, 'toi_sec': 3599}],\n   {'points': -50, 'saves': 25}),\n  ('normal control 2',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 25, 'team_ga': 1, 'toi_sec': 3900}],\n   {'points': 68, 'saves': 24}),\n  ('normal control 3',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 25, 'team_ga': 3, 'toi_sec': 3599}],\n   {'points': 24, 'saves': 22}),\n  ('normal control 4',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 16, 'team_ga': 5, 'toi_sec': 3599}],\n   {'points': -78, 'saves': 11})],\n [('regression: save derivation',\n   [{'decision': 'L', 'empty_net_ga': 2, 'shots_faced': 39, 'team_ga': 3, 'toi_sec': 3600}],\n   {'points': 56, 'saves': 38}),\n  ('partial repair probe: save derivation',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 14, 'team_ga': 6, 'toi_sec': 2400}],\n   {'points': -82, 'saves': 9}),\n  ('second regression',\n   [{'decision': None, 'empty_net_ga': 2, 'shots_faced': 21, 'team_ga': 7, 'toi_sec': 2154}],\n   {'points': -68, 'saves': 16}),\n  ('normal control 1',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 32, 'team_ga': 0, 'toi_sec': 2400}],\n   {'points': 64, 'saves': 32}),\n  ('normal control 2',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 22, 'team_ga': 1, 'toi_sec': 3900}],\n   {'points': 32, 'saves': 21}),\n  ('normal control 3',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 29, 'team_ga': 5, 'toi_sec': 3540}],\n   {'points': -42, 'saves': 24}),\n  ('normal control 4',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 35, 'team_ga': 2, 'toi_sec': 866}],\n   {'points': 26, 'saves': 33})],\n [('regression: save derivation',\n   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 26, 'team_ga': 1, 'toi_sec': 3600}],\n   {'points': 82, 'saves': 26}),\n  ('partial repair probe: save derivation',\n   [{'decision': None, 'empty_net_ga': 1, 'shots_faced': 14, 'team_ga': 1, 'toi_sec': 3599}],\n   {'points': 28, 'saves': 14}),\n  ('second regression',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 5, 'team_ga': 1, 'toi_sec': 3600}],\n   {'points': 40, 'saves': 5}),\n  ('normal control 1',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 28, 'team_ga': 0, 'toi_sec': 3900}],\n   {'points': 96, 'saves': 28}),\n  ('normal control 2',\n   [{'decision': 'W', 'empty_net_ga': 0, 'shots_faced': 30, 'team_ga': 2, 'toi_sec': 3900}],\n   {'points': 56, 'saves': 28}),\n  ('normal control 3',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 24, 'team_ga': 1, 'toi_sec': 2400}],\n   {'points': 26, 'saves': 23}),\n  ('normal control 4',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 35, 'team_ga': 2, 'toi_sec': 3900}],\n   {'points': 26, 'saves': 33})],\n [('regression: save derivation',\n   [{'decision': 'OTL', 'empty_net_ga': 2, 'shots_faced': 20, 'team_ga': 2, 'toi_sec': 3600}],\n   {'points': 80, 'saves': 20}),\n  ('partial repair probe: save derivation',\n   [{'decision': 'OTL', 'empty_net_ga': 1, 'shots_faced': 7, 'team_ga': 4, 'toi_sec': 3731}],\n   {'points': -42, 'saves': 4}),\n  ('second regression',\n   [{'decision': 'L', 'empty_net_ga': 1, 'shots_faced': 24, 'team_ga': 1, 'toi_sec': 3540}],\n   {'points': 48, 'saves': 24}),\n  ('normal control 1',\n   [{'decision': 'L', 'empty_net_ga': 0, 'shots_faced': 5, 'team_ga': 2, 'toi_sec': 2400}],\n   {'points': -34, 'saves': 3}),\n  ('normal control 2',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 18, 'team_ga': 3, 'toi_sec': 807}],\n   {'points': -20, 'saves': 15}),\n  ('normal control 3',\n   [{'decision': None, 'empty_net_ga': 0, 'shots_faced': 5, 'team_ga': 3, 'toi_sec': 1133}],\n   {'points': -56, 'saves': 2}),\n  ('normal control 4',\n   [{'decision': 'OTL', 'empty_net_ga': 0, 'shots_faced': 18, 'team_ga': 5, 'toi_sec': 2400}],\n   {'points': -64, 'saves': 13})]]\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-save-derivation","generated_at":"2026-09-29T14:50:37.663963+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.","root_cause":"Saves subtract the team goals against from shots the goalie faced.","sha256":"2622bd5d415249d86298b65dc27b870164ce4cb7151cb7c4e10b32be74067bc4","title":"Saves reduced by empty-net goals the goalie never faced · 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":39.467,"exit_code":1,"observations":[{"actual":{"points":44,"saves":22},"check":"regression: save derivation","expected":{"points":48,"saves":24},"passed":false},{"actual":{"points":86,"saves":28},"check":"partial repair probe: save derivation","expected":{"points":90,"saves":30},"passed":false},{"actual":{"points":-36,"saves":7},"check":"second regression","expected":{"points":-32,"saves":9},"passed":false},{"actual":{"points":-40,"saves":25},"check":"normal control 1","expected":{"points":-40,"saves":25},"passed":true},{"actual":{"points":-52,"saves":4},"check":"normal control 2","expected":{"points":-52,"saves":4},"passed":true},{"actual":{"points":-60,"saves":15},"check":"normal control 3","expected":{"points":-60,"saves":15},"passed":true},{"actual":{"points":28,"saves":14},"check":"normal control 4","expected":{"points":28,"saves":14},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: save derivation\", \"actual\": {\"saves\": 22, \"points\": 44}, \"expected\": {\"points\": 48, \"saves\": 24}, \"passed\": false}, {\"check\": \"partial repair probe: save derivation\", \"actual\": {\"saves\": 28, \"points\": 86}, \"expected\": {\"points\": 90, \"saves\": 30}, \"passed\": false}, {\"check\": \"second regression\", \"actual\": {\"saves\": 7, \"points\": -36}, \"expected\": {\"points\": -32, \"saves\": 9}, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": {\"saves\": 25, \"points\": -40}, \"expected\": {\"points\": -40, \"saves\": 25}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"saves\": 4, \"points\": -52}, \"expected\": {\"points\": -52, \"saves\": 4}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"saves\": 15, \"points\": -60}, \"expected\": {\"points\": -60, \"saves\": 15}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"saves\": 14, \"points\": 28}, \"expected\": {\"points\": 28, \"saves\": 14}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.22,"exit_code":1,"observations":[{"actual":{"points":44,"saves":22},"check":"regression: save derivation","expected":{"points":48,"saves":24},"passed":false},{"actual":{"points":86,"saves":28},"check":"partial repair probe: save derivation","expected":{"points":90,"saves":30},"passed":false},{"actual":{"points":-36,"saves":7},"check":"second regression","expected":{"points":-32,"saves":9},"passed":false},{"actual":{"points":-40,"saves":25},"check":"normal control 1","expected":{"points":-40,"saves":25},"passed":true},{"actual":{"points":-52,"saves":4},"check":"normal control 2","expected":{"points":-52,"saves":4},"passed":true},{"actual":{"points":-60,"saves":15},"check":"normal control 3","expected":{"points":-60,"saves":15},"passed":true},{"actual":{"points":28,"saves":14},"check":"normal control 4","expected":{"points":28,"saves":14},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: save derivation\", \"actual\": {\"saves\": 22, \"points\": 44}, \"expected\": {\"points\": 48, \"saves\": 24}, \"passed\": false}, {\"check\": \"partial repair probe: save derivation\", \"actual\": {\"saves\": 28, \"points\": 86}, \"expected\": {\"points\": 90, \"saves\": 30}, \"passed\": false}, {\"check\": \"second regression\", \"actual\": {\"saves\": 7, \"points\": -36}, \"expected\": {\"points\": -32, \"saves\": 9}, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": {\"saves\": 25, \"points\": -40}, \"expected\": {\"points\": -40, \"saves\": 25}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"saves\": 4, \"points\": -52}, \"expected\": {\"points\": -52, \"saves\": 4}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"saves\": 15, \"points\": -60}, \"expected\": {\"points\": -60, \"saves\": 15}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"saves\": 14, \"points\": 28}, \"expected\": {\"points\": 28, \"saves\": 14}, \"passed\": true}], \"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."}}