{"abstract":"A player at kickoff shows no remaining projection while a nearly finished game shows the whole projection.","category":"Fantasy sports scoring","checks":7,"contract":"Projected final lineup score in tenths. Each player is [actual, full-game projection, status, game seconds left]. Final games count actual points; not-started games count the full projection; live games count actual plus the projection prorated by remaining time over 3600 seconds (floored per player; overtime reports negative seconds, treated as 0 remaining); postponed (ppd) games count 0.","contract_signature":"players","evaluation_group":"w2-fantasy-sports-scoring-live-projection","failed_approach":"Subtracting the floored elapsed share rounds the remaining share up instead of down.","family":"w2-fantasy-sports-scoring-live-projection-remaining-time-proration","id":"FA-85306","implementations":{"attempt":{"sha256":"d1bfb1ce158505a82510740b8319f91e6cfe1c8ea1d7df524fc2c2513e29e922","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(players):\n    total = 0\n    for actual, proj, status, left in players:\n        if status == 'final':\n            total += actual\n        elif status == 'pre':\n            total += proj\n        elif status == 'live':\n            left = max(left, 0)\n            total += actual + proj - proj * (3600 - left) // 3600\n    return total\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: remaining time proration',\n   [[[213, 180, 'final', 3600], [200, 180, 'live', -300], [102, 95, 'live', 1800]]], 562),\n  ('partial repair probe: remaining time proration',\n   [[[36, 0, 'live', 1800], [17, 180, 'live', 900], [72, 0, 'live', 1800], [137, 180, 'pre', -300],\n     [221, 180, 'live', 1], [154, 0, 'live', 1800]]],\n   725),\n  ('second regression', [[[237, 95, 'live', 900], [48, 95, 'live', 3600], [237, 180, 'live', 1800]]], 730),\n  ('normal control 1', [[[110, 0, 'final', 900], [154, 95, 'ppd', 3600]]], 110),\n  ('normal control 2',\n   [[[130, 0, 'live', 0], [150, 120, 'final', 3600], [231, 0, 'live', 1800], [86, 0, 'ppd', 1],\n     [148, 0, 'live', -300], [234, 0, 'final', -300]]],\n   893),\n  ('normal control 3', [[[173, 180, 'pre', 1], [126, 180, 'ppd', 0], [32, 0, 'final', 0]]], 212),\n  ('normal control 4',\n   [[[101, 120, 'ppd', 900], [78, 180, 'ppd', 0], [57, 180, 'final', 900], [220, 120, 'pre', 1800],\n     [192, 120, 'live', 1800]]],\n   429)],\n [('regression: remaining time proration',\n   [[[115, 120, 'live', 1800], [221, 180, 'live', 900], [144, 95, 'ppd', 900], [237, 180, 'live', 3600],\n     [48, 180, 'ppd', 1], [92, 180, 'pre', -300]]],\n   1038),\n  ('partial repair probe: remaining time proration', [[[113, 180, 'pre', 3600], [57, 95, 'live', 1]]], 237),\n  ('second regression', [[[172, 120, 'live', 900], [5, 0, 'final', 3600]]], 207),\n  ('normal control 1',\n   [[[18, 120, 'ppd', 900], [72, 120, 'ppd', 3600], [129, 120, 'pre', 1800], [3, 120, 'pre', 3600],\n     [224, 180, 'pre', 1800]]],\n   420),\n  ('normal control 2',\n   [[[145, 180, 'final', 900], [133, 120, 'pre', 0], [42, 120, 'live', 1800], [39, 120, 'final', -300]]],\n   406),\n  ('normal control 3',\n   [[[250, 180, 'ppd', 1], [227, 0, 'live', 0], [205, 180, 'pre', 1800], [89, 0, 'pre', 0],\n     [49, 180, 'pre', -300]]],\n   587),\n  ('normal control 4', [[[58, 95, 'final', 0], [232, 180, 'final', 1], [166, 95, 'final', 3600]]], 456)],\n [('regression: remaining time proration',\n   [[[-14, 95, 'live', 900], [174, 95, 'ppd', 3600], [40, 180, 'final', -300]]], 49),\n  ('partial repair probe: remaining time proration',\n   [[[150, 120, 'ppd', 1], [80, 95, 'ppd', 900], [4, 120, 'final', 1], [-20, 120, 'live', 1]]], -16),\n  ('second regression',\n   [[[156, 120, 'live', -300], [207, 0, 'ppd', 0], [96, 95, 'live', 3600], [1, 180, 'live', 1800]]], 438),\n  ('normal control 1',\n   [[[131, 180, 'pre', 1], [11, 180, 'ppd', 900], [12, 0, 'ppd', 3600], [73, 0, 'final', 0],\n     [55, 0, 'live', 3600], [86, 120, 'pre', 0]]],\n   428),\n  ('normal control 2', [[[13, 120, 'pre', 0], [212, 0, 'pre', 900]]], 120),\n  ('normal control 3', [[[230, 95, 'ppd', 3600], [245, 0, 'live', 0]]], 245),\n  ('normal control 4',\n   [[[95, 120, 'ppd', 900], [245, 0, 'pre', 1], [37, 0, 'pre', 0], [194, 0, 'final', 0],\n     [94, 180, 'ppd', 1800]]],\n   194)],\n [('regression: remaining time proration',\n   [[[52, 120, 'ppd', 900], [184, 95, 'live', 1], [6, 0, 'pre', 0], [198, 180, 'final', 1],\n     [118, 95, 'live', 0]]],\n   500),\n  ('partial repair probe: remaining time proration',\n   [[[170, 95, 'pre', 1800], [64, 180, 'ppd', 900], [212, 120, 'live', 1], [68, 180, 'final', -300],\n     [61, 0, 'pre', 3600], [102, 120, 'pre', 1]]],\n   495),\n  ('second regression',\n   [[[68, 180, 'live', 1], [84, 95, 'final', 3600], [73, 120, 'ppd', 900], [49, 0, 'live', 0],\n     [48, 0, 'pre', 3600]]],\n   201),\n  ('normal control 1',\n   [[[35, 180, 'pre', 1], [168, 0, 'pre', 900], [69, 95, 'pre', 1], [85, 0, 'live', 900],\n     [43, 0, 'live', 900]]],\n   403),\n  ('normal control 2',\n   [[[23, 0, 'pre', -300], [210, 95, 'pre', 3600], [9, 0, 'live', 900], [3, 0, 'live', -300],\n     [166, 180, 'pre', 3600], [174, 95, 'final', 1800]]],\n   461),\n  ('normal control 3', [[[80, 180, 'final', 1], [118, 180, 'ppd', 3600], [249, 95, 'pre', -300]]], 175),\n  ('normal control 4', [[[185, 120, 'final', 3600], [223, 0, 'pre', 3600]]], 185)],\n [('regression: remaining time proration',\n   [[[231, 0, 'live', 0], [195, 95, 'live', -300], [191, 120, 'ppd', -300]]], 426),\n  ('partial repair probe: remaining time proration',\n   [[[188, 180, 'live', 0], [66, 95, 'pre', 900], [105, 95, 'live', 1800], [227, 120, 'ppd', 900],\n     [124, 0, 'live', 1]]],\n   559),\n  ('second regression', [[[154, 0, 'live', 0], [250, 180, 'live', -300], [44, 120, 'final', 1800]]], 448),\n  ('normal control 1', [[[170, 120, 'ppd', 1800], [186, 180, 'final', 1]]], 186),\n  ('normal control 2', [[[230, 120, 'ppd', 1], [209, 95, 'pre', 1]]], 95),\n  ('normal control 3',\n   [[[171, 0, 'pre', 3600], [55, 120, 'pre', 1800], [204, 0, 'final', 1], [35, 95, 'final', 3600],\n     [211, 120, 'final', 3600]]],\n   570),\n  ('normal control 4',\n   [[[38, 0, 'live', 1800], [-1, 0, 'live', 3600], [94, 120, 'pre', 1], [12, 0, 'live', 1800],\n     [139, 120, 'pre', 0]]],\n   289)]]\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":"bf682f0e0d28d836d17ef36627335ec1ebc5f943675b76fc450dcac017db2457","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(players):\n    total = 0\n    for actual, proj, status, left in players:\n        if status == 'final':\n            total += actual\n        elif status == 'pre':\n            total += proj\n        elif status == 'live':\n            left = max(left, 0)\n            total += actual + proj * (3600 - left) // 3600\n    return total\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: remaining time proration',\n   [[[213, 180, 'final', 3600], [200, 180, 'live', -300], [102, 95, 'live', 1800]]], 562),\n  ('partial repair probe: remaining time proration',\n   [[[36, 0, 'live', 1800], [17, 180, 'live', 900], [72, 0, 'live', 1800], [137, 180, 'pre', -300],\n     [221, 180, 'live', 1], [154, 0, 'live', 1800]]],\n   725),\n  ('second regression', [[[237, 95, 'live', 900], [48, 95, 'live', 3600], [237, 180, 'live', 1800]]], 730),\n  ('normal control 1', [[[110, 0, 'final', 900], [154, 95, 'ppd', 3600]]], 110),\n  ('normal control 2',\n   [[[130, 0, 'live', 0], [150, 120, 'final', 3600], [231, 0, 'live', 1800], [86, 0, 'ppd', 1],\n     [148, 0, 'live', -300], [234, 0, 'final', -300]]],\n   893),\n  ('normal control 3', [[[173, 180, 'pre', 1], [126, 180, 'ppd', 0], [32, 0, 'final', 0]]], 212),\n  ('normal control 4',\n   [[[101, 120, 'ppd', 900], [78, 180, 'ppd', 0], [57, 180, 'final', 900], [220, 120, 'pre', 1800],\n     [192, 120, 'live', 1800]]],\n   429)],\n [('regression: remaining time proration',\n   [[[115, 120, 'live', 1800], [221, 180, 'live', 900], [144, 95, 'ppd', 900], [237, 180, 'live', 3600],\n     [48, 180, 'ppd', 1], [92, 180, 'pre', -300]]],\n   1038),\n  ('partial repair probe: remaining time proration', [[[113, 180, 'pre', 3600], [57, 95, 'live', 1]]], 237),\n  ('second regression', [[[172, 120, 'live', 900], [5, 0, 'final', 3600]]], 207),\n  ('normal control 1',\n   [[[18, 120, 'ppd', 900], [72, 120, 'ppd', 3600], [129, 120, 'pre', 1800], [3, 120, 'pre', 3600],\n     [224, 180, 'pre', 1800]]],\n   420),\n  ('normal control 2',\n   [[[145, 180, 'final', 900], [133, 120, 'pre', 0], [42, 120, 'live', 1800], [39, 120, 'final', -300]]],\n   406),\n  ('normal control 3',\n   [[[250, 180, 'ppd', 1], [227, 0, 'live', 0], [205, 180, 'pre', 1800], [89, 0, 'pre', 0],\n     [49, 180, 'pre', -300]]],\n   587),\n  ('normal control 4', [[[58, 95, 'final', 0], [232, 180, 'final', 1], [166, 95, 'final', 3600]]], 456)],\n [('regression: remaining time proration',\n   [[[-14, 95, 'live', 900], [174, 95, 'ppd', 3600], [40, 180, 'final', -300]]], 49),\n  ('partial repair probe: remaining time proration',\n   [[[150, 120, 'ppd', 1], [80, 95, 'ppd', 900], [4, 120, 'final', 1], [-20, 120, 'live', 1]]], -16),\n  ('second regression',\n   [[[156, 120, 'live', -300], [207, 0, 'ppd', 0], [96, 95, 'live', 3600], [1, 180, 'live', 1800]]], 438),\n  ('normal control 1',\n   [[[131, 180, 'pre', 1], [11, 180, 'ppd', 900], [12, 0, 'ppd', 3600], [73, 0, 'final', 0],\n     [55, 0, 'live', 3600], [86, 120, 'pre', 0]]],\n   428),\n  ('normal control 2', [[[13, 120, 'pre', 0], [212, 0, 'pre', 900]]], 120),\n  ('normal control 3', [[[230, 95, 'ppd', 3600], [245, 0, 'live', 0]]], 245),\n  ('normal control 4',\n   [[[95, 120, 'ppd', 900], [245, 0, 'pre', 1], [37, 0, 'pre', 0], [194, 0, 'final', 0],\n     [94, 180, 'ppd', 1800]]],\n   194)],\n [('regression: remaining time proration',\n   [[[52, 120, 'ppd', 900], [184, 95, 'live', 1], [6, 0, 'pre', 0], [198, 180, 'final', 1],\n     [118, 95, 'live', 0]]],\n   500),\n  ('partial repair probe: remaining time proration',\n   [[[170, 95, 'pre', 1800], [64, 180, 'ppd', 900], [212, 120, 'live', 1], [68, 180, 'final', -300],\n     [61, 0, 'pre', 3600], [102, 120, 'pre', 1]]],\n   495),\n  ('second regression',\n   [[[68, 180, 'live', 1], [84, 95, 'final', 3600], [73, 120, 'ppd', 900], [49, 0, 'live', 0],\n     [48, 0, 'pre', 3600]]],\n   201),\n  ('normal control 1',\n   [[[35, 180, 'pre', 1], [168, 0, 'pre', 900], [69, 95, 'pre', 1], [85, 0, 'live', 900],\n     [43, 0, 'live', 900]]],\n   403),\n  ('normal control 2',\n   [[[23, 0, 'pre', -300], [210, 95, 'pre', 3600], [9, 0, 'live', 900], [3, 0, 'live', -300],\n     [166, 180, 'pre', 3600], [174, 95, 'final', 1800]]],\n   461),\n  ('normal control 3', [[[80, 180, 'final', 1], [118, 180, 'ppd', 3600], [249, 95, 'pre', -300]]], 175),\n  ('normal control 4', [[[185, 120, 'final', 3600], [223, 0, 'pre', 3600]]], 185)],\n [('regression: remaining time proration',\n   [[[231, 0, 'live', 0], [195, 95, 'live', -300], [191, 120, 'ppd', -300]]], 426),\n  ('partial repair probe: remaining time proration',\n   [[[188, 180, 'live', 0], [66, 95, 'pre', 900], [105, 95, 'live', 1800], [227, 120, 'ppd', 900],\n     [124, 0, 'live', 1]]],\n   559),\n  ('second regression', [[[154, 0, 'live', 0], [250, 180, 'live', -300], [44, 120, 'final', 1800]]], 448),\n  ('normal control 1', [[[170, 120, 'ppd', 1800], [186, 180, 'final', 1]]], 186),\n  ('normal control 2', [[[230, 120, 'ppd', 1], [209, 95, 'pre', 1]]], 95),\n  ('normal control 3',\n   [[[171, 0, 'pre', 3600], [55, 120, 'pre', 1800], [204, 0, 'final', 1], [35, 95, 'final', 3600],\n     [211, 120, 'final', 3600]]],\n   570),\n  ('normal control 4',\n   [[[38, 0, 'live', 1800], [-1, 0, 'live', 3600], [94, 120, 'pre', 1], [12, 0, 'live', 1800],\n     [139, 120, 'pre', 0]]],\n   289)]]\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-live-projection-remaining-time-proration","generated_at":"2026-09-29T14:50:39.204850+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Live projections are shown to millions of users during games; status handling and proration must be exact.","root_cause":"The projection is scaled by elapsed rather than remaining seconds.","sha256":"450ed5878680a5484be75d9acc8f77730c324b9bf11ea3b5d272fd2ed2698957","title":"Live projection prorated by elapsed time · 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":40.213,"exit_code":1,"observations":[{"actual":563,"check":"regression: remaining time proration","expected":562,"passed":false},{"actual":726,"check":"partial repair probe: remaining time proration","expected":725,"passed":false},{"actual":731,"check":"second regression","expected":730,"passed":false},{"actual":110,"check":"normal control 1","expected":110,"passed":true},{"actual":893,"check":"normal control 2","expected":893,"passed":true},{"actual":212,"check":"normal control 3","expected":212,"passed":true},{"actual":429,"check":"normal control 4","expected":429,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: remaining time proration\", \"actual\": 563, \"expected\": 562, \"passed\": false}, {\"check\": \"partial repair probe: remaining time proration\", \"actual\": 726, \"expected\": 725, \"passed\": false}, {\"check\": \"second regression\", \"actual\": 731, \"expected\": 730, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": 110, \"expected\": 110, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 893, \"expected\": 893, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 212, \"expected\": 212, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": 429, \"expected\": 429, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.166,"exit_code":1,"observations":[{"actual":742,"check":"regression: remaining time proration","expected":562,"passed":false},{"actual":994,"check":"partial repair probe: remaining time proration","expected":725,"passed":false},{"actual":683,"check":"second regression","expected":730,"passed":false},{"actual":110,"check":"normal control 1","expected":110,"passed":true},{"actual":893,"check":"normal control 2","expected":893,"passed":true},{"actual":212,"check":"normal control 3","expected":212,"passed":true},{"actual":429,"check":"normal control 4","expected":429,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: remaining time proration\", \"actual\": 742, \"expected\": 562, \"passed\": false}, {\"check\": \"partial repair probe: remaining time proration\", \"actual\": 994, \"expected\": 725, \"passed\": false}, {\"check\": \"second regression\", \"actual\": 683, \"expected\": 730, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": 110, \"expected\": 110, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": 893, \"expected\": 893, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": 212, \"expected\": 212, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": 429, \"expected\": 429, \"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."}}