FAILURE MAP
← Case archive

FA-98996 / Optimizer update state / Open access

Adam local update leaves its parameter step counter stale · case 01

Adam local update leaves its parameter step counter stale.

Verified by executionVariant 1 · 6 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

After guarding the first update, the stored local count is reused without incrementing it.

THE FAILURE

After guarding the first update, the stored local count is reused without incrementing it.

Unsuccessful approach: Incrementing twice advances both moments past the actual number of parameter updates.

Case contract

Given [m,v,t], increment this parameter t and return [mhat,vhat,new_t] with beta values .5.

Why this case matters

Optimizer implementations must associate each parameter with its own mathematically specified update state.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(m, v, t):
    nt=max(1,t)
    return [m/(1-0.5**nt),v/(1-0.5**nt),nt]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('first local update',solve(2,4,0),[4,8,1])
check('after skipped rounds',solve(2,4,3),[32/15,64/15,4])
check('second local update',solve(1,3,1),[4/3,4,2])
check('zero moments',solve(0,0,5),[0,0,6])
check('larger first moment',solve(5,2,2),[40/7,16/7,3])
check('step state returned',solve(1,1,N),[1/(1-0.5**(N+1)),1/(1-0.5**(N+1)),N+1])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
first local update[4.0, 8.0, 1][4, 8, 1]Passed
after skipped rounds[2.2857142857142856, 4.571428571428571, 3][2.1333333333333333, 4.266666666666667, 4]Failed
second local update[2.0, 6.0, 1][1.3333333333333333, 4, 2]Failed
zero moments[0.0, 0.0, 5][0, 0, 6]Failed
larger first moment[6.666666666666667, 2.6666666666666665, 2][5.714285714285714, 2.2857142857142856, 3]Failed
step state returned[2.0, 2.0, 1][1.3333333333333333, 1.3333333333333333, 2]Failed

SHA-256 / d5b5c17f90ff4ce516ae9fa90a232e9e6058f63990337ec055ad2e973c23802a

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(m, v, t):
    nt=t+2
    return [m/(1-0.5**nt),v/(1-0.5**nt),nt]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('first local update',solve(2,4,0),[4,8,1])
check('after skipped rounds',solve(2,4,3),[32/15,64/15,4])
check('second local update',solve(1,3,1),[4/3,4,2])
check('zero moments',solve(0,0,5),[0,0,6])
check('larger first moment',solve(5,2,2),[40/7,16/7,3])
check('step state returned',solve(1,1,N),[1/(1-0.5**(N+1)),1/(1-0.5**(N+1)),N+1])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
first local update[2.6666666666666665, 5.333333333333333, 2][4, 8, 1]Failed
after skipped rounds[2.064516129032258, 4.129032258064516, 5][2.1333333333333333, 4.266666666666667, 4]Failed
second local update[1.1428571428571428, 3.4285714285714284, 3][1.3333333333333333, 4, 2]Failed
zero moments[0.0, 0.0, 7][0, 0, 6]Failed
larger first moment[5.333333333333333, 2.1333333333333333, 4][5.714285714285714, 2.2857142857142856, 3]Failed
step state returned[1.1428571428571428, 1.1428571428571428, 3][1.3333333333333333, 1.3333333333333333, 2]Failed

SHA-256 / b950093b4e5877f934f925e7a596a2b25cf27ff2d8a6b825926e684176202a8f

HELD IN THE MEMBER ARCHIVE

The verified repair and its recorded checks are member-only.

This mechanism has 6 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.

Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.

Member access is invitation-based. Sign in with your invited account to inspect the repair.

Sign in to the archive ↗

Verification & scope

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.

Observations recorded using Python 3.12.14 at 2026-09-30T16:48:18.999649+00:00.

Case digest / dbe2483f243895ac510e139740a2382bc797424de36612c33977b5567928bd11