{"abstract":"A frame exactly one fixed step long runs no physics step and the renderer lags a frame.","category":"Physics integrator stability","checks":8,"contract":"solve(frames, dt, max_frame, max_steps): game loop accumulator. Each frame delta is clamped to max_frame and added; run steps while acc >= dt up to max_steps; if a full dt still remains, whole multiples of dt are dropped (spiral-of-death guard). Return [steps per frame, acc/dt after last frame, dropped time].","contract_signature":"frames, dt, max_frame, max_steps","evaluation_group":"w2-physics_integrator_stability-fixed-step-accumulator","failed_approach":"Consuming when acc >= dt/2 advances physics ahead of real time.","family":"w2-physics_integrator_stability-fixed-step-accumulator-whole-step-threshold","id":"FA-86971","implementations":{"attempt":{"sha256":"f65d932c200fb024963415f311f7974f14184c677b07375169b0436e9155403c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(frames, dt, max_frame, max_steps):\n    acc = 0.0\n    dropped = 0.0\n    steps = []\n    for delta in frames:\n        acc += min(delta, max_frame)\n        n = 0\n        while acc >= dt - dt / 2 and n < max_steps:\n            acc -= dt\n            n += 1\n        if acc >= dt:\n            keep = acc % dt\n            dropped += acc - keep\n            acc = keep\n        steps.append(n)\n    return [steps, acc / dt, dropped]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[0.078125, 0.0625, 0.03125, 0.03125], 0.0625, 0.25, 5], [[1, 1, 0, 1], 0.25, 0.0]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.125, 0.0625, 0.25], 0.0625, 0.25, 2], [[2, 1, 2], 0.0, 0.125]], [[[0.046875, 0.25, 0.0625, 0.046875, 0.015625, 0.0], 0.0625, 0.125, 4], [[0, 2, 1, 1, 0, 0], 0.75, 0.0]], [[[0.046875, 0.125, 0.0625, 0.0, 0.03125, 0.046875], 0.03125, 0.25, 5], [[1, 4, 2, 0, 1, 2], 0.0, 0.0]], [[[0.0, 0.03125, 0.625, 0.015625], 0.0625, 0.125, 5], [[0, 0, 2, 0], 0.75, 0.0]], [[[0.25, 0.25, 0.125, 0.0], 0.03125, 0.125, 2], [[2, 2, 2, 0], 0.0, 0.1875]], [[[0.0625], 0.0625, 0.125, 3], [[1], 0.0, 0.0]]], [[[[0.015625, 0.046875, 0.015625], 0.03125, 0.25, 5], [[0, 2, 0], 0.5, 0.0]], [[[0.078125, 0.125], 0.0625, 0.125, 1], [[1, 1], 0.25, 0.0625]], [[[0.125, 0.25, 0.25], 0.03125, 0.125, 3], [[3, 3, 3], 0.0, 0.09375]], [[[0.03125, 0.0625, 0.015625], 0.03125, 0.25, 5], [[1, 2, 0], 0.5, 0.0]], [[[0.625, 0.0, 0.25, 0.015625], 0.03125, 0.125, 1], [[1, 0, 1, 0], 0.5, 0.1875]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.0625, 0.25, 0.078125], 0.0625, 0.125, 5], [[1, 2, 1], 0.25, 0.0]], [[[0.25, 0.03125], 0.015625, 0.125, 3], [[3, 2], 0.0, 0.078125]]], [[[[0.0625, 0.0, 0.25, 0.0625], 0.015625, 0.25, 2], [[2, 0, 2, 2], 0.0, 0.28125]], [[[0.046875], 0.0625, 0.25, 2], [[0], 0.75, 0.0]], [[[0.0625, 0.015625, 0.046875, 0.0, 0.046875, 0.078125], 0.03125, 0.125, 2], [[2, 0, 2, 0, 1, 2], 0.0, 0.03125]], [[[0.25, 0.125, 0.625, 0.015625], 0.015625, 0.25, 2], [[2, 2, 2, 1], 0.0, 0.53125]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.125, 0.03125], 0.0625, 0.25, 1], [[1, 0], 0.5, 0.0625]], [[[0.625, 0.0625], 0.015625, 0.25, 2], [[2, 2], 0.0, 0.25]], [[[0.0625, 0.125, 0.625, 0.046875, 0.0, 0.0625], 0.0625, 0.125, 1], [[1, 1, 1, 0, 0, 1], 0.75, 0.125]]], [[[[0.0625, 0.625, 0.125, 0.625, 0.25], 0.0625, 0.125, 1], [[1, 1, 1, 1, 1], 0.0, 0.25]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.03125, 0.25, 0.125, 0.625, 0.125, 0.078125], 0.03125, 0.25, 4], [[1, 4, 4, 4, 4, 2], 0.5, 0.25]], [[[0.0625], 0.015625, 0.125, 4], [[4], 0.0, 0.0]], [[[0.0, 0.078125, 0.078125], 0.015625, 0.125, 2], [[0, 2, 2], 0.0, 0.09375]], [[[0.0625, 0.078125, 0.078125, 0.125, 0.015625], 0.03125, 0.125, 5], [[2, 2, 3, 4, 0], 0.5, 0.0]], [[[0.125, 0.078125], 0.03125, 0.125, 4], [[4, 2], 0.5, 0.0]], [[[0.0625, 0.046875, 0.0, 0.078125], 0.015625, 0.125, 2], [[2, 2, 0, 2], 0.0, 0.09375]]], [[[[0.625, 0.125, 0.625, 0.046875, 0.125], 0.015625, 0.25, 3], [[3, 3, 3, 3, 3], 0.0, 0.5625]], [[[0.046875, 0.125, 0.078125], 0.03125, 0.125, 2], [[1, 2, 2], 0.0, 0.09375]], [[[0.0625], 0.015625, 0.125, 5], [[4], 0.0, 0.0]], [[[0.046875, 0.625, 0.0, 0.625, 0.25], 0.015625, 0.25, 4], [[3, 4, 0, 4, 4], 0.0, 0.5625]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.015625, 0.0], 0.03125, 0.125, 3], [[0, 0], 0.5, 0.0]], [[[0.078125, 0.078125, 0.25, 0.078125], 0.015625, 0.25, 1], [[1, 1, 1, 1], 0.0, 0.421875]], [[[0.078125], 0.03125, 0.25, 5], [[2], 0.5, 0.0]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"case %d\" % i, 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":"dd59ff009658f55c37a191ad38c24995aa4646b700d8d030c3b73417b6d090ed","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(frames, dt, max_frame, max_steps):\n    acc = 0.0\n    dropped = 0.0\n    steps = []\n    for delta in frames:\n        acc += min(delta, max_frame)\n        n = 0\n        while acc > dt and n < max_steps:\n            acc -= dt\n            n += 1\n        if acc >= dt:\n            keep = acc % dt\n            dropped += acc - keep\n            acc = keep\n        steps.append(n)\n    return [steps, acc / dt, dropped]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[0.078125, 0.0625, 0.03125, 0.03125], 0.0625, 0.25, 5], [[1, 1, 0, 1], 0.25, 0.0]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.125, 0.0625, 0.25], 0.0625, 0.25, 2], [[2, 1, 2], 0.0, 0.125]], [[[0.046875, 0.25, 0.0625, 0.046875, 0.015625, 0.0], 0.0625, 0.125, 4], [[0, 2, 1, 1, 0, 0], 0.75, 0.0]], [[[0.046875, 0.125, 0.0625, 0.0, 0.03125, 0.046875], 0.03125, 0.25, 5], [[1, 4, 2, 0, 1, 2], 0.0, 0.0]], [[[0.0, 0.03125, 0.625, 0.015625], 0.0625, 0.125, 5], [[0, 0, 2, 0], 0.75, 0.0]], [[[0.25, 0.25, 0.125, 0.0], 0.03125, 0.125, 2], [[2, 2, 2, 0], 0.0, 0.1875]], [[[0.0625], 0.0625, 0.125, 3], [[1], 0.0, 0.0]]], [[[[0.015625, 0.046875, 0.015625], 0.03125, 0.25, 5], [[0, 2, 0], 0.5, 0.0]], [[[0.078125, 0.125], 0.0625, 0.125, 1], [[1, 1], 0.25, 0.0625]], [[[0.125, 0.25, 0.25], 0.03125, 0.125, 3], [[3, 3, 3], 0.0, 0.09375]], [[[0.03125, 0.0625, 0.015625], 0.03125, 0.25, 5], [[1, 2, 0], 0.5, 0.0]], [[[0.625, 0.0, 0.25, 0.015625], 0.03125, 0.125, 1], [[1, 0, 1, 0], 0.5, 0.1875]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.0625, 0.25, 0.078125], 0.0625, 0.125, 5], [[1, 2, 1], 0.25, 0.0]], [[[0.25, 0.03125], 0.015625, 0.125, 3], [[3, 2], 0.0, 0.078125]]], [[[[0.0625, 0.0, 0.25, 0.0625], 0.015625, 0.25, 2], [[2, 0, 2, 2], 0.0, 0.28125]], [[[0.046875], 0.0625, 0.25, 2], [[0], 0.75, 0.0]], [[[0.0625, 0.015625, 0.046875, 0.0, 0.046875, 0.078125], 0.03125, 0.125, 2], [[2, 0, 2, 0, 1, 2], 0.0, 0.03125]], [[[0.25, 0.125, 0.625, 0.015625], 0.015625, 0.25, 2], [[2, 2, 2, 1], 0.0, 0.53125]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.125, 0.03125], 0.0625, 0.25, 1], [[1, 0], 0.5, 0.0625]], [[[0.625, 0.0625], 0.015625, 0.25, 2], [[2, 2], 0.0, 0.25]], [[[0.0625, 0.125, 0.625, 0.046875, 0.0, 0.0625], 0.0625, 0.125, 1], [[1, 1, 1, 0, 0, 1], 0.75, 0.125]]], [[[[0.0625, 0.625, 0.125, 0.625, 0.25], 0.0625, 0.125, 1], [[1, 1, 1, 1, 1], 0.0, 0.25]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.03125, 0.25, 0.125, 0.625, 0.125, 0.078125], 0.03125, 0.25, 4], [[1, 4, 4, 4, 4, 2], 0.5, 0.25]], [[[0.0625], 0.015625, 0.125, 4], [[4], 0.0, 0.0]], [[[0.0, 0.078125, 0.078125], 0.015625, 0.125, 2], [[0, 2, 2], 0.0, 0.09375]], [[[0.0625, 0.078125, 0.078125, 0.125, 0.015625], 0.03125, 0.125, 5], [[2, 2, 3, 4, 0], 0.5, 0.0]], [[[0.125, 0.078125], 0.03125, 0.125, 4], [[4, 2], 0.5, 0.0]], [[[0.0625, 0.046875, 0.0, 0.078125], 0.015625, 0.125, 2], [[2, 2, 0, 2], 0.0, 0.09375]]], [[[[0.625, 0.125, 0.625, 0.046875, 0.125], 0.015625, 0.25, 3], [[3, 3, 3, 3, 3], 0.0, 0.5625]], [[[0.046875, 0.125, 0.078125], 0.03125, 0.125, 2], [[1, 2, 2], 0.0, 0.09375]], [[[0.0625], 0.015625, 0.125, 5], [[4], 0.0, 0.0]], [[[0.046875, 0.625, 0.0, 0.625, 0.25], 0.015625, 0.25, 4], [[3, 4, 0, 4, 4], 0.0, 0.5625]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.015625, 0.0], 0.03125, 0.125, 3], [[0, 0], 0.5, 0.0]], [[[0.078125, 0.078125, 0.25, 0.078125], 0.015625, 0.25, 1], [[1, 1, 1, 1], 0.0, 0.421875]], [[[0.078125], 0.03125, 0.25, 5], [[2], 0.5, 0.0]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"case %d\" % i, 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 bounded teaching model with stipulated toy conventions and rounded float output; not a production physics engine or a proof of numerical stability. 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-physics_integrator_stability-fixed-step-accumulator-whole-step-threshold","generated_at":"2026-09-29T14:50:54.467360+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Game and robotics physics loops depend on integrator update order, step control and stabilization terms; a wrong decision point turns a stable simulation into drifting or exploding motion.","root_cause":"The loop condition is acc > dt.","sha256":"b8e6c0a1495b8a0fb874e60ab50c1374128f6c46490583e15c544511b55ef1dd","title":"Accumulator requires strictly more than one step of 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":39.897,"exit_code":1,"observations":[{"actual":[[1,1,1,0],0.25,0.0],"check":"case 0","expected":[[1,1,0,1],0.25,0.0],"passed":false},{"actual":[[0],0.0,0.0],"check":"case 1","expected":[[0],0.0,0.0],"passed":true},{"actual":[[2,1,2],0.0,0.125],"check":"case 2","expected":[[2,1,2],0.0,0.125],"passed":true},{"actual":[[1,2,1,1,0,0],-0.25,0.0],"check":"case 3","expected":[[0,2,1,1,0,0],0.75,0.0],"passed":false},{"actual":[[2,4,2,0,1,1],0.0,0.0],"check":"case 4","expected":[[1,4,2,0,1,2],0.0,0.0],"passed":false},{"actual":[[0,1,2,0],-0.25,0.0],"check":"case 5","expected":[[0,0,2,0],0.75,0.0],"passed":false},{"actual":[[2,2,2,0],0.0,0.1875],"check":"case 6","expected":[[2,2,2,0],0.0,0.1875],"passed":true},{"actual":[[1],0.0,0.0],"check":"case 7","expected":[[1],0.0,0.0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[1, 1, 1, 0], 0.25, 0.0], \"expected\": [[1, 1, 0, 1], 0.25, 0.0], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [[0], 0.0, 0.0], \"expected\": [[0], 0.0, 0.0], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [[2, 1, 2], 0.0, 0.125], \"expected\": [[2, 1, 2], 0.0, 0.125], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [[1, 2, 1, 1, 0, 0], -0.25, 0.0], \"expected\": [[0, 2, 1, 1, 0, 0], 0.75, 0.0], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [[2, 4, 2, 0, 1, 1], 0.0, 0.0], \"expected\": [[1, 4, 2, 0, 1, 2], 0.0, 0.0], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [[0, 1, 2, 0], -0.25, 0.0], \"expected\": [[0, 0, 2, 0], 0.75, 0.0], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [[2, 2, 2, 0], 0.0, 0.1875], \"expected\": [[2, 2, 2, 0], 0.0, 0.1875], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [[1], 0.0, 0.0], \"expected\": [[1], 0.0, 0.0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.263,"exit_code":1,"observations":[{"actual":[[1,1,0,1],0.25,0.0],"check":"case 0","expected":[[1,1,0,1],0.25,0.0],"passed":true},{"actual":[[0],0.0,0.0],"check":"case 1","expected":[[0],0.0,0.0],"passed":true},{"actual":[[1,0,2],0.0,0.25],"check":"case 2","expected":[[2,1,2],0.0,0.125],"passed":false},{"actual":[[0,2,1,1,0,0],0.75,0.0],"check":"case 3","expected":[[0,2,1,1,0,0],0.75,0.0],"passed":true},{"actual":[[1,4,2,0,1,1],0.0,0.03125],"check":"case 4","expected":[[1,4,2,0,1,2],0.0,0.0],"passed":false},{"actual":[[0,0,2,0],0.75,0.0],"check":"case 5","expected":[[0,0,2,0],0.75,0.0],"passed":true},{"actual":[[2,2,2,0],0.0,0.1875],"check":"case 6","expected":[[2,2,2,0],0.0,0.1875],"passed":true},{"actual":[[0],0.0,0.0625],"check":"case 7","expected":[[1],0.0,0.0],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[1, 1, 0, 1], 0.25, 0.0], \"expected\": [[1, 1, 0, 1], 0.25, 0.0], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [[0], 0.0, 0.0], \"expected\": [[0], 0.0, 0.0], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [[1, 0, 2], 0.0, 0.25], \"expected\": [[2, 1, 2], 0.0, 0.125], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [[0, 2, 1, 1, 0, 0], 0.75, 0.0], \"expected\": [[0, 2, 1, 1, 0, 0], 0.75, 0.0], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [[1, 4, 2, 0, 1, 1], 0.0, 0.03125], \"expected\": [[1, 4, 2, 0, 1, 2], 0.0, 0.0], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [[0, 0, 2, 0], 0.75, 0.0], \"expected\": [[0, 0, 2, 0], 0.75, 0.0], \"passed\": true}, {\"check\": \"case 6\", \"actual\": [[2, 2, 2, 0], 0.0, 0.1875], \"expected\": [[2, 2, 2, 0], 0.0, 0.1875], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [[0], 0.0, 0.0625], \"expected\": [[1], 0.0, 0.0], \"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."}}