{"abstract":"Warmup decay drops below the terminal floor.","category":"Learning rate schedules","checks":6,"contract":"Warm linearly to base, then linearly decay to floor by total and hold floor.","contract_signature":"step, base, floor, warmup, total","evaluation_group":"lr-schedule-warmup-then-floor","failed_approach":"A lower bound alone bends the interpolation and fails to reach the floor at the endpoint.","family":"w3-learning-rate-schedules-warmup-then-floor","id":"FA-99126","implementations":{"attempt":{"sha256":"84fc2a086cdeff8edc00bb90c22733a8aacbf00ce83c3c8a6f4f2a70f1caff05","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(step, base, floor, warmup, total):\n    if step<warmup: return base*step/warmup\n    return max(floor,base*(total-step)/(total-warmup+1))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('warmup',solve(1,10,2,4,8),2.5); check('boundary',solve(4,10,2,4,8),10); check('decay',solve(6,10,2,4,8),6); check('end',solve(8,10,2,4,8),2); check('after',solve(9,10,2,4,8),2); check('start',solve(0,8,1,3,6),0)\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":"2ef23fa635dc0b7f09d3c8d6cb72240cd57c2d793d96c60e45b7a333076a0c7a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(step, base, floor, warmup, total):\n    if step<warmup: return base*step/warmup\n    return base*(total-step)/(total-warmup)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('warmup',solve(1,10,2,4,8),2.5); check('boundary',solve(4,10,2,4,8),10); check('decay',solve(6,10,2,4,8),6); check('end',solve(8,10,2,4,8),2); check('after',solve(9,10,2,4,8),2); check('start',solve(0,8,1,3,6),0)\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-warmup-then-floor","generated_at":"2026-09-30T16:48:20.799792+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":"The post-warmup interpolation approaches zero and never uses the requested floor.","sha256":"72649431c748e84f25cc31f391f164d2dc002fa04aad6ab0638000f19558cf13","title":"Warmup decay drops below the terminal floor · case 01","variant":1,"variant_policy":"The same explicitly authored fixtures repeat across all five numbered records; runtime N is unused. These records share one mechanism and must remain together in evaluation splits.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":28.816,"exit_code":1,"observations":[{"actual":2.5,"check":"warmup","expected":2.5,"passed":true},{"actual":8.0,"check":"boundary","expected":10,"passed":false},{"actual":4.0,"check":"decay","expected":6,"passed":false},{"actual":2,"check":"end","expected":2,"passed":true},{"actual":2,"check":"after","expected":2,"passed":true},{"actual":0.0,"check":"start","expected":0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"warmup\", \"actual\": 2.5, \"expected\": 2.5, \"passed\": true}, {\"check\": \"boundary\", \"actual\": 8.0, \"expected\": 10, \"passed\": false}, {\"check\": \"decay\", \"actual\": 4.0, \"expected\": 6, \"passed\": false}, {\"check\": \"end\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"after\", \"actual\": 2, \"expected\": 2, \"passed\": true}, {\"check\": \"start\", \"actual\": 0.0, \"expected\": 0, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":28.637,"exit_code":1,"observations":[{"actual":2.5,"check":"warmup","expected":2.5,"passed":true},{"actual":10.0,"check":"boundary","expected":10,"passed":true},{"actual":5.0,"check":"decay","expected":6,"passed":false},{"actual":0.0,"check":"end","expected":2,"passed":false},{"actual":-2.5,"check":"after","expected":2,"passed":false},{"actual":0.0,"check":"start","expected":0,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"warmup\", \"actual\": 2.5, \"expected\": 2.5, \"passed\": true}, {\"check\": \"boundary\", \"actual\": 10.0, \"expected\": 10, \"passed\": true}, {\"check\": \"decay\", \"actual\": 5.0, \"expected\": 6, \"passed\": false}, {\"check\": \"end\", \"actual\": 0.0, \"expected\": 2, \"passed\": false}, {\"check\": \"after\", \"actual\": -2.5, \"expected\": 2, \"passed\": false}, {\"check\": \"start\", \"actual\": 0.0, \"expected\": 0, \"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."}}