{"abstract":"Adam local update leaves its parameter step counter stale.","category":"Optimizer update state","checks":6,"contract":"Given [m,v,t], increment this parameter t and return [mhat,vhat,new_t] with beta values .5.","contract_signature":"m, v, t","evaluation_group":"optimizer-toy-per-parameter-step","failed_approach":"Incrementing twice advances both moments past the actual number of parameter updates.","family":"w3-optimizer-update-state-per-parameter-step","id":"FA-98996","implementations":{"attempt":{"sha256":"b950093b4e5877f934f925e7a596a2b25cf27ff2d8a6b825926e684176202a8f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(m, v, t):\n    nt=t+2\n    return [m/(1-0.5**nt),v/(1-0.5**nt),nt]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('first local update',solve(2,4,0),[4,8,1])\ncheck('after skipped rounds',solve(2,4,3),[32/15,64/15,4])\ncheck('second local update',solve(1,3,1),[4/3,4,2])\ncheck('zero moments',solve(0,0,5),[0,0,6])\ncheck('larger first moment',solve(5,2,2),[40/7,16/7,3])\ncheck('step state returned',solve(1,1,N),[1/(1-0.5**(N+1)),1/(1-0.5**(N+1)),N+1])\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":"d5b5c17f90ff4ce516ae9fa90a232e9e6058f63990337ec055ad2e973c23802a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(m, v, t):\n    nt=max(1,t)\n    return [m/(1-0.5**nt),v/(1-0.5**nt),nt]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncheck('first local update',solve(2,4,0),[4,8,1])\ncheck('after skipped rounds',solve(2,4,3),[32/15,64/15,4])\ncheck('second local update',solve(1,3,1),[4/3,4,2])\ncheck('zero moments',solve(0,0,5),[0,0,6])\ncheck('larger first moment',solve(5,2,2),[40/7,16/7,3])\ncheck('step state returned',solve(1,1,N),[1/(1-0.5**(N+1)),1/(1-0.5**(N+1)),N+1])\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 deterministic scalar or short-vector toy contracts, not claims about production optimizer APIs or training quality. 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-optimizer-update-state-per-parameter-step","generated_at":"2026-09-30T16:48:18.999649+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Optimizer implementations must associate each parameter with its own mathematically specified update state.","root_cause":"After guarding the first update, the stored local count is reused without incrementing it.","sha256":"dbe2483f243895ac510e139740a2382bc797424de36612c33977b5567928bd11","title":"Adam local update leaves its parameter step counter stale · 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":30.75,"exit_code":1,"observations":[{"actual":[2.6666666666666665,5.333333333333333,2],"check":"first local update","expected":[4,8,1],"passed":false},{"actual":[2.064516129032258,4.129032258064516,5],"check":"after skipped rounds","expected":[2.1333333333333333,4.266666666666667,4],"passed":false},{"actual":[1.1428571428571428,3.4285714285714284,3],"check":"second local update","expected":[1.3333333333333333,4,2],"passed":false},{"actual":[0.0,0.0,7],"check":"zero moments","expected":[0,0,6],"passed":false},{"actual":[5.333333333333333,2.1333333333333333,4],"check":"larger first moment","expected":[5.714285714285714,2.2857142857142856,3],"passed":false},{"actual":[1.1428571428571428,1.1428571428571428,3],"check":"step state returned","expected":[1.3333333333333333,1.3333333333333333,2],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"first local update\", \"actual\": [2.6666666666666665, 5.333333333333333, 2], \"expected\": [4, 8, 1], \"passed\": false}, {\"check\": \"after skipped rounds\", \"actual\": [2.064516129032258, 4.129032258064516, 5], \"expected\": [2.1333333333333333, 4.266666666666667, 4], \"passed\": false}, {\"check\": \"second local update\", \"actual\": [1.1428571428571428, 3.4285714285714284, 3], \"expected\": [1.3333333333333333, 4, 2], \"passed\": false}, {\"check\": \"zero moments\", \"actual\": [0.0, 0.0, 7], \"expected\": [0, 0, 6], \"passed\": false}, {\"check\": \"larger first moment\", \"actual\": [5.333333333333333, 2.1333333333333333, 4], \"expected\": [5.714285714285714, 2.2857142857142856, 3], \"passed\": false}, {\"check\": \"step state returned\", \"actual\": [1.1428571428571428, 1.1428571428571428, 3], \"expected\": [1.3333333333333333, 1.3333333333333333, 2], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":30.931,"exit_code":1,"observations":[{"actual":[4.0,8.0,1],"check":"first local update","expected":[4,8,1],"passed":true},{"actual":[2.2857142857142856,4.571428571428571,3],"check":"after skipped rounds","expected":[2.1333333333333333,4.266666666666667,4],"passed":false},{"actual":[2.0,6.0,1],"check":"second local update","expected":[1.3333333333333333,4,2],"passed":false},{"actual":[0.0,0.0,5],"check":"zero moments","expected":[0,0,6],"passed":false},{"actual":[6.666666666666667,2.6666666666666665,2],"check":"larger first moment","expected":[5.714285714285714,2.2857142857142856,3],"passed":false},{"actual":[2.0,2.0,1],"check":"step state returned","expected":[1.3333333333333333,1.3333333333333333,2],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"first local update\", \"actual\": [4.0, 8.0, 1], \"expected\": [4, 8, 1], \"passed\": true}, {\"check\": \"after skipped rounds\", \"actual\": [2.2857142857142856, 4.571428571428571, 3], \"expected\": [2.1333333333333333, 4.266666666666667, 4], \"passed\": false}, {\"check\": \"second local update\", \"actual\": [2.0, 6.0, 1], \"expected\": [1.3333333333333333, 4, 2], \"passed\": false}, {\"check\": \"zero moments\", \"actual\": [0.0, 0.0, 5], \"expected\": [0, 0, 6], \"passed\": false}, {\"check\": \"larger first moment\", \"actual\": [6.666666666666667, 2.6666666666666665, 2], \"expected\": [5.714285714285714, 2.2857142857142856, 3], \"passed\": false}, {\"check\": \"step state returned\", \"actual\": [2.0, 2.0, 1], \"expected\": [1.3333333333333333, 1.3333333333333333, 2], \"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."}}