{"abstract":"Linear decay reaches zero one step too early.","category":"Learning rate schedules","checks":6,"contract":"Return base*(total-step)/total clipped to [0,total], with zero after total.","contract_signature":"step, base, total","evaluation_group":"lr-schedule-linear-decay","failed_approach":"Using a shorter denominator makes the rate fall too quickly throughout the schedule.","family":"w3-learning-rate-schedules-linear-decay","id":"FA-99046","implementations":{"attempt":{"sha256":"0b2567f4c1d941fc4edc1f7d3771a5eb945b38785e1ba42f2bd983cedfe2aa8c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(step, base, total):\n    return base*(total-step)/(total-1) if step<total else 0\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('interior',solve(N,12,6),12*(6-N)/6); check('start',solve(0,8,4),8); check('last',solve(3,8,4),2); check('end',solve(4,8,4),0); check('after',solve(5,8,4),0); check('fraction',solve(1,10,4),7.5)\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":"97e4b50c682dc7656ba908cae1bc8b18735a04a6ba22499ed268bc949774241a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(step, base, total):\n    return base*max(0,total-step-1)/total\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('interior',solve(N,12,6),12*(6-N)/6); check('start',solve(0,8,4),8); check('last',solve(3,8,4),2); check('end',solve(4,8,4),0); check('after',solve(5,8,4),0); check('fraction',solve(1,10,4),7.5)\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":"These are toy scalar contracts with integer steps and finite parameters; they do not model framework defaults or optimizer state. 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":"w3-learning-rate-schedules-linear-decay","generated_at":"2026-09-30T16:48:19.909485+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"A deterministic scalar schedule makes step-to-rate mapping explicit for a small training loop.","root_cause":"Subtracting one from remaining steps advances the decay by one unit at every point.","sha256":"2dd6e81ab3eb9e39b0b6d683b60a2fd1c3c226f52b0bab6ecdfe7d71cd8a6a7c","title":"Linear decay reaches zero one step too early · case 01","variant":1,"variant_policy":"The fixture code references N, supplied as 1 through 5. Fixed boundary checks may repeat. These records share one mechanism and must remain together in evaluation splits.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":29.892,"exit_code":1,"observations":[{"actual":12.0,"check":"interior","expected":10.0,"passed":false},{"actual":10.666666666666666,"check":"start","expected":8,"passed":false},{"actual":2.6666666666666665,"check":"last","expected":2,"passed":false},{"actual":0,"check":"end","expected":0,"passed":true},{"actual":0,"check":"after","expected":0,"passed":true},{"actual":10.0,"check":"fraction","expected":7.5,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"interior\", \"actual\": 12.0, \"expected\": 10.0, \"passed\": false}, {\"check\": \"start\", \"actual\": 10.666666666666666, \"expected\": 8, \"passed\": false}, {\"check\": \"last\", \"actual\": 2.6666666666666665, \"expected\": 2, \"passed\": false}, {\"check\": \"end\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"after\", \"actual\": 0, \"expected\": 0, \"passed\": true}, {\"check\": \"fraction\", \"actual\": 10.0, \"expected\": 7.5, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":28.195,"exit_code":1,"observations":[{"actual":8.0,"check":"interior","expected":10.0,"passed":false},{"actual":6.0,"check":"start","expected":8,"passed":false},{"actual":0.0,"check":"last","expected":2,"passed":false},{"actual":0.0,"check":"end","expected":0,"passed":true},{"actual":0.0,"check":"after","expected":0,"passed":true},{"actual":5.0,"check":"fraction","expected":7.5,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"interior\", \"actual\": 8.0, \"expected\": 10.0, \"passed\": false}, {\"check\": \"start\", \"actual\": 6.0, \"expected\": 8, \"passed\": false}, {\"check\": \"last\", \"actual\": 0.0, \"expected\": 2, \"passed\": false}, {\"check\": \"end\", \"actual\": 0.0, \"expected\": 0, \"passed\": true}, {\"check\": \"after\", \"actual\": 0.0, \"expected\": 0, \"passed\": true}, {\"check\": \"fraction\", \"actual\": 5.0, \"expected\": 7.5, \"passed\": false}], \"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."}}