{"abstract":"Interpolation weights are tiny and rendering visibly snaps between states.","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":"Normalizing by max_frame scales alpha by the wrong duration.","family":"w2-physics_integrator_stability-fixed-step-accumulator-interpolation-alpha","id":"FA-86991","implementations":{"attempt":{"sha256":"ee799b5f21d8aff0b646f9e5a164d64d0a7ad0c8a060b602de4c244d2e706672","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 / max_frame, dropped]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[0.015625], 0.03125, 0.25, 2], [[0], 0.5, 0.0]], [[[0.25, 0.078125, 0.625, 0.015625, 0.046875, 0.0625], 0.0625, 0.125, 3], [[2, 1, 2, 0, 1, 1], 0.25, 0.0]], [[[0.046875, 0.015625, 0.046875], 0.015625, 0.25, 4], [[3, 1, 3], 0.0, 0.0]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.03125, 0.0625], 0.0625, 0.25, 3], [[0, 1], 0.5, 0.0]], [[[0.125, 0.25, 0.0, 0.046875, 0.046875, 0.078125], 0.03125, 0.25, 4], [[4, 4, 0, 1, 2, 2], 0.5, 0.125]], [[[0.0], 0.015625, 0.25, 2], [[0], 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.625, 0.0, 0.25, 0.015625], 0.03125, 0.125, 1], [[1, 0, 1, 0], 0.5, 0.1875]], [[[0.25, 0.0, 0.078125], 0.0625, 0.25, 4], [[4, 0, 1], 0.25, 0.0]], [[[0.625, 0.0625, 0.25, 0.0625, 0.015625], 0.0625, 0.125, 2], [[2, 1, 2, 1, 0], 0.25, 0.0]], [[[0.0625, 0.0, 0.078125, 0.0625], 0.03125, 0.25, 3], [[2, 0, 2, 2], 0.5, 0.0]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.0], 0.0625, 0.125, 2], [[0], 0.0, 0.0]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.0625, 0.125, 0.015625, 0.125], 0.03125, 0.25, 2], [[2, 2, 0, 2], 0.5, 0.125]]], [[[[0.078125, 0.25, 0.0625, 0.125], 0.0625, 0.25, 3], [[1, 3, 1, 2], 0.25, 0.0625]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.03125, 0.125, 0.0625, 0.0, 0.015625], 0.03125, 0.125, 2], [[1, 2, 2, 0, 0], 0.5, 0.0625]], [[[0.046875, 0.046875, 0.015625, 0.03125], 0.03125, 0.125, 3], [[1, 2, 0, 1], 0.5, 0.0]], [[[0.25, 0.0625, 0.125, 0.0625, 0.046875, 0.125], 0.015625, 0.125, 1], [[1, 1, 1, 1, 1, 1], 0.0, 0.453125]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.078125, 0.078125, 0.046875, 0.0625, 0.078125], 0.0625, 0.25, 3], [[1, 1, 1, 1, 1], 0.5, 0.0]], [[[0.046875, 0.078125, 0.046875], 0.0625, 0.125, 5], [[0, 2, 0], 0.75, 0.0]]], [[[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.125, 0.625, 0.046875, 0.0625, 0.0, 0.625], 0.0625, 0.25, 2], [[2, 2, 0, 1, 0, 2], 0.75, 0.25]], [[[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.25, 0.125, 0.015625, 0.0625, 0.25, 0.046875], 0.03125, 0.125, 1], [[1, 1, 0, 1, 1, 1], 0.0, 0.34375]], [[[0.625, 0.0625, 0.03125, 0.0], 0.0625, 0.25, 1], [[1, 1, 0, 0], 0.5, 0.1875]], [[[0.0, 0.015625, 0.0625], 0.03125, 0.25, 5], [[0, 0, 2], 0.5, 0.0]], [[[0.078125], 0.0625, 0.25, 3], [[1], 0.25, 0.0]]], [[[[0.0, 0.625, 0.046875], 0.03125, 0.125, 4], [[0, 4, 1], 0.5, 0.0]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.015625], 0.0625, 0.25, 5], [[0], 0.25, 0.0]], [[[0.125, 0.0, 0.0, 0.046875, 0.125, 0.078125], 0.0625, 0.125, 2], [[2, 0, 0, 0, 2, 2], 0.0, 0.0]], [[[0.25, 0.078125, 0.046875, 0.046875, 0.125], 0.03125, 0.125, 5], [[4, 2, 2, 1, 4], 0.5, 0.0]], [[[0.25], 0.03125, 0.125, 3], [[3], 0.0, 0.03125]], [[[0.046875, 0.25, 0.25, 0.625], 0.0625, 0.125, 4], [[0, 2, 2, 2], 0.75, 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":"fe41581ea075e64067abcfdd59283db51d53bd298d07e4128fe35bbbb8aa6467","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, dropped]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[0.015625], 0.03125, 0.25, 2], [[0], 0.5, 0.0]], [[[0.25, 0.078125, 0.625, 0.015625, 0.046875, 0.0625], 0.0625, 0.125, 3], [[2, 1, 2, 0, 1, 1], 0.25, 0.0]], [[[0.046875, 0.015625, 0.046875], 0.015625, 0.25, 4], [[3, 1, 3], 0.0, 0.0]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.03125, 0.0625], 0.0625, 0.25, 3], [[0, 1], 0.5, 0.0]], [[[0.125, 0.25, 0.0, 0.046875, 0.046875, 0.078125], 0.03125, 0.25, 4], [[4, 4, 0, 1, 2, 2], 0.5, 0.125]], [[[0.0], 0.015625, 0.25, 2], [[0], 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.625, 0.0, 0.25, 0.015625], 0.03125, 0.125, 1], [[1, 0, 1, 0], 0.5, 0.1875]], [[[0.25, 0.0, 0.078125], 0.0625, 0.25, 4], [[4, 0, 1], 0.25, 0.0]], [[[0.625, 0.0625, 0.25, 0.0625, 0.015625], 0.0625, 0.125, 2], [[2, 1, 2, 1, 0], 0.25, 0.0]], [[[0.0625, 0.0, 0.078125, 0.0625], 0.03125, 0.25, 3], [[2, 0, 2, 2], 0.5, 0.0]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.0], 0.0625, 0.125, 2], [[0], 0.0, 0.0]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.0625, 0.125, 0.015625, 0.125], 0.03125, 0.25, 2], [[2, 2, 0, 2], 0.5, 0.125]]], [[[[0.078125, 0.25, 0.0625, 0.125], 0.0625, 0.25, 3], [[1, 3, 1, 2], 0.25, 0.0625]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.03125, 0.125, 0.0625, 0.0, 0.015625], 0.03125, 0.125, 2], [[1, 2, 2, 0, 0], 0.5, 0.0625]], [[[0.046875, 0.046875, 0.015625, 0.03125], 0.03125, 0.125, 3], [[1, 2, 0, 1], 0.5, 0.0]], [[[0.25, 0.0625, 0.125, 0.0625, 0.046875, 0.125], 0.015625, 0.125, 1], [[1, 1, 1, 1, 1, 1], 0.0, 0.453125]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.078125, 0.078125, 0.046875, 0.0625, 0.078125], 0.0625, 0.25, 3], [[1, 1, 1, 1, 1], 0.5, 0.0]], [[[0.046875, 0.078125, 0.046875], 0.0625, 0.125, 5], [[0, 2, 0], 0.75, 0.0]]], [[[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.125, 0.625, 0.046875, 0.0625, 0.0, 0.625], 0.0625, 0.25, 2], [[2, 2, 0, 1, 0, 2], 0.75, 0.25]], [[[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.25, 0.125, 0.015625, 0.0625, 0.25, 0.046875], 0.03125, 0.125, 1], [[1, 1, 0, 1, 1, 1], 0.0, 0.34375]], [[[0.625, 0.0625, 0.03125, 0.0], 0.0625, 0.25, 1], [[1, 1, 0, 0], 0.5, 0.1875]], [[[0.0, 0.015625, 0.0625], 0.03125, 0.25, 5], [[0, 0, 2], 0.5, 0.0]], [[[0.078125], 0.0625, 0.25, 3], [[1], 0.25, 0.0]]], [[[[0.0, 0.625, 0.046875], 0.03125, 0.125, 4], [[0, 4, 1], 0.5, 0.0]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.015625], 0.0625, 0.25, 5], [[0], 0.25, 0.0]], [[[0.125, 0.0, 0.0, 0.046875, 0.125, 0.078125], 0.0625, 0.125, 2], [[2, 0, 0, 0, 2, 2], 0.0, 0.0]], [[[0.25, 0.078125, 0.046875, 0.046875, 0.125], 0.03125, 0.125, 5], [[4, 2, 2, 1, 4], 0.5, 0.0]], [[[0.25], 0.03125, 0.125, 3], [[3], 0.0, 0.03125]], [[[0.046875, 0.25, 0.25, 0.625], 0.0625, 0.125, 4], [[0, 2, 2, 2], 0.75, 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-interpolation-alpha","generated_at":"2026-09-29T14:50:54.630041+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":"alpha is acc instead of acc/dt.","sha256":"959771feae38a38946cd5468c6f836571d93cd6a62fd85ad50e2c40f24ce7a5e","title":"Render interpolation factor is returned as raw leftover seconds · 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.832,"exit_code":1,"observations":[{"actual":[[0],0.0625,0.0],"check":"case 0","expected":[[0],0.5,0.0],"passed":false},{"actual":[[2,1,2,0,1,1],0.125,0.0],"check":"case 1","expected":[[2,1,2,0,1,1],0.25,0.0],"passed":false},{"actual":[[3,1,3],0.0,0.0],"check":"case 2","expected":[[3,1,3],0.0,0.0],"passed":true},{"actual":[[1],0.0,0.0],"check":"case 3","expected":[[1],0.0,0.0],"passed":true},{"actual":[[0,1],0.125,0.0],"check":"case 4","expected":[[0,1],0.5,0.0],"passed":false},{"actual":[[4,4,0,1,2,2],0.0625,0.125],"check":"case 5","expected":[[4,4,0,1,2,2],0.5,0.125],"passed":false},{"actual":[[0],0.0,0.0],"check":"case 6","expected":[[0],0.0,0.0],"passed":true},{"actual":[[0,0,2,0],0.375,0.0],"check":"case 7","expected":[[0,0,2,0],0.75,0.0],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[0], 0.0625, 0.0], \"expected\": [[0], 0.5, 0.0], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [[2, 1, 2, 0, 1, 1], 0.125, 0.0], \"expected\": [[2, 1, 2, 0, 1, 1], 0.25, 0.0], \"passed\": false}, {\"check\": \"case 2\", \"actual\": [[3, 1, 3], 0.0, 0.0], \"expected\": [[3, 1, 3], 0.0, 0.0], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [[1], 0.0, 0.0], \"expected\": [[1], 0.0, 0.0], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [[0, 1], 0.125, 0.0], \"expected\": [[0, 1], 0.5, 0.0], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [[4, 4, 0, 1, 2, 2], 0.0625, 0.125], \"expected\": [[4, 4, 0, 1, 2, 2], 0.5, 0.125], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [[0], 0.0, 0.0], \"expected\": [[0], 0.0, 0.0], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [[0, 0, 2, 0], 0.375, 0.0], \"expected\": [[0, 0, 2, 0], 0.75, 0.0], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.648,"exit_code":1,"observations":[{"actual":[[0],0.015625,0.0],"check":"case 0","expected":[[0],0.5,0.0],"passed":false},{"actual":[[2,1,2,0,1,1],0.015625,0.0],"check":"case 1","expected":[[2,1,2,0,1,1],0.25,0.0],"passed":false},{"actual":[[3,1,3],0.0,0.0],"check":"case 2","expected":[[3,1,3],0.0,0.0],"passed":true},{"actual":[[1],0.0,0.0],"check":"case 3","expected":[[1],0.0,0.0],"passed":true},{"actual":[[0,1],0.03125,0.0],"check":"case 4","expected":[[0,1],0.5,0.0],"passed":false},{"actual":[[4,4,0,1,2,2],0.015625,0.125],"check":"case 5","expected":[[4,4,0,1,2,2],0.5,0.125],"passed":false},{"actual":[[0],0.0,0.0],"check":"case 6","expected":[[0],0.0,0.0],"passed":true},{"actual":[[0,0,2,0],0.046875,0.0],"check":"case 7","expected":[[0,0,2,0],0.75,0.0],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[0], 0.015625, 0.0], \"expected\": [[0], 0.5, 0.0], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [[2, 1, 2, 0, 1, 1], 0.015625, 0.0], \"expected\": [[2, 1, 2, 0, 1, 1], 0.25, 0.0], \"passed\": false}, {\"check\": \"case 2\", \"actual\": [[3, 1, 3], 0.0, 0.0], \"expected\": [[3, 1, 3], 0.0, 0.0], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [[1], 0.0, 0.0], \"expected\": [[1], 0.0, 0.0], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [[0, 1], 0.03125, 0.0], \"expected\": [[0, 1], 0.5, 0.0], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [[4, 4, 0, 1, 2, 2], 0.015625, 0.125], \"expected\": [[4, 4, 0, 1, 2, 2], 0.5, 0.125], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [[0], 0.0, 0.0], \"expected\": [[0], 0.0, 0.0], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [[0, 0, 2, 0], 0.046875, 0.0], \"expected\": [[0, 0, 2, 0], 0.75, 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."}}