{"abstract":"A debugger pause produces a burst of dropped time and a huge catch-up.","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":"Clamping to max_frame*max_steps still admits oversized hitches.","family":"w2-physics_integrator_stability-fixed-step-accumulator-frame-time-clamp","id":"FA-86976","implementations":{"attempt":{"sha256":"140d6d41bbb560fb5ca2c826b7336c8551367676ef0bf02b1493c69fce446695","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 * max_steps)\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.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.0, 0.046875, 0.0, 0.125, 0.25, 0.625], 0.015625, 0.125, 1], [[0, 1, 0, 1, 1, 1], 0.0, 0.359375]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.0625, 0.0, 0.25, 0.125, 0.015625, 0.125], 0.0625, 0.125, 5], [[1, 0, 2, 2, 0, 2], 0.25, 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.03125, 0.25, 0.015625, 0.625, 0.015625, 0.015625], 0.015625, 0.125, 3], [[2, 3, 1, 3, 1, 1], 0.0, 0.15625]], [[[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.25, 0.015625, 0.03125, 0.125, 0.046875, 0.25], 0.03125, 0.125, 5], [[4, 0, 1, 4, 2, 4], 0.0, 0.0]]], [[[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.0, 0.046875, 0.125, 0.0], 0.015625, 0.25, 5], [[0, 3, 5, 0], 0.0, 0.046875]], [[[0.625], 0.03125, 0.125, 2], [[2], 0.0, 0.0625]], [[[0.125, 0.25, 0.25], 0.03125, 0.125, 3], [[3, 3, 3], 0.0, 0.09375]], [[[0.125, 0.046875, 0.625, 0.0, 0.0, 0.125], 0.03125, 0.25, 5], [[4, 1, 5, 0, 0, 4], 0.5, 0.09375]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.015625, 0.0, 0.078125, 0.03125, 0.25], 0.015625, 0.125, 2], [[1, 0, 2, 2, 2], 0.0, 0.140625]], [[[0.25, 0.03125], 0.015625, 0.125, 3], [[3, 2], 0.0, 0.078125]]], [[[[0.125, 0.078125], 0.015625, 0.25, 4], [[4, 4], 0.0, 0.078125]], [[[0.078125, 0.625, 0.125, 0.25, 0.0, 0.25], 0.015625, 0.25, 5], [[5, 5, 5, 5, 0, 5], 0.0, 0.5625]], [[[0.25], 0.03125, 0.125, 2], [[2], 0.0, 0.0625]], [[[0.03125, 0.625, 0.046875, 0.125, 0.25], 0.0625, 0.125, 4], [[0, 2, 1, 2, 2], 0.25, 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.0625, 0.078125, 0.25, 0.0625, 0.015625, 0.625], 0.015625, 0.125, 5], [[4, 5, 5, 4, 1, 5], 0.0, 0.09375]], [[[0.0625, 0.046875, 0.078125, 0.078125, 0.625], 0.03125, 0.25, 5], [[2, 1, 3, 2, 5], 0.5, 0.09375]]], [[[[0.125, 0.015625, 0.0, 0.625, 0.625, 0.25], 0.015625, 0.25, 4], [[4, 1, 0, 4, 4, 4], 0.0, 0.625]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.125, 0.25, 0.125, 0.25, 0.25], 0.03125, 0.125, 2], [[2, 2, 2, 2, 2], 0.0, 0.3125]], [[[0.25, 0.625, 0.03125], 0.0625, 0.125, 3], [[2, 2, 0], 0.5, 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.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.0625, 0.046875, 0.015625, 0.0, 0.125, 0.0625], 0.03125, 0.125, 4], [[2, 1, 1, 0, 4, 2], 0.0, 0.0]], [[[0.046875, 0.25, 0.0625, 0.125, 0.125], 0.015625, 0.125, 3], [[3, 3, 3, 3, 3], 0.0, 0.25]]], [[[[0.078125, 0.078125, 0.625, 0.046875, 0.25], 0.03125, 0.25, 2], [[2, 2, 2, 1, 2], 0.5, 0.40625]], [[[0.625, 0.046875, 0.015625, 0.015625], 0.015625, 0.25, 3], [[3, 3, 1, 1], 0.0, 0.203125]], [[[0.0, 0.625, 0.046875], 0.03125, 0.125, 4], [[0, 4, 1], 0.5, 0.0]], [[[0.0625, 0.015625, 0.625, 0.25], 0.015625, 0.25, 5], [[4, 1, 5, 5], 0.0, 0.34375]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.078125, 0.046875, 0.03125], 0.03125, 0.125, 1], [[1, 1, 1], 0.0, 0.0625]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[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":"a0c36dd544ccc3f097b6e0c6930fb8f936737b2514d03195c6bcf81b660633f3","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 += delta\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.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.0, 0.046875, 0.0, 0.125, 0.25, 0.625], 0.015625, 0.125, 1], [[0, 1, 0, 1, 1, 1], 0.0, 0.359375]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.0625, 0.0, 0.25, 0.125, 0.015625, 0.125], 0.0625, 0.125, 5], [[1, 0, 2, 2, 0, 2], 0.25, 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.03125, 0.25, 0.015625, 0.625, 0.015625, 0.015625], 0.015625, 0.125, 3], [[2, 3, 1, 3, 1, 1], 0.0, 0.15625]], [[[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.25, 0.015625, 0.03125, 0.125, 0.046875, 0.25], 0.03125, 0.125, 5], [[4, 0, 1, 4, 2, 4], 0.0, 0.0]]], [[[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.0, 0.046875, 0.125, 0.0], 0.015625, 0.25, 5], [[0, 3, 5, 0], 0.0, 0.046875]], [[[0.625], 0.03125, 0.125, 2], [[2], 0.0, 0.0625]], [[[0.125, 0.25, 0.25], 0.03125, 0.125, 3], [[3, 3, 3], 0.0, 0.09375]], [[[0.125, 0.046875, 0.625, 0.0, 0.0, 0.125], 0.03125, 0.25, 5], [[4, 1, 5, 0, 0, 4], 0.5, 0.09375]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.015625, 0.0, 0.078125, 0.03125, 0.25], 0.015625, 0.125, 2], [[1, 0, 2, 2, 2], 0.0, 0.140625]], [[[0.25, 0.03125], 0.015625, 0.125, 3], [[3, 2], 0.0, 0.078125]]], [[[[0.125, 0.078125], 0.015625, 0.25, 4], [[4, 4], 0.0, 0.078125]], [[[0.078125, 0.625, 0.125, 0.25, 0.0, 0.25], 0.015625, 0.25, 5], [[5, 5, 5, 5, 0, 5], 0.0, 0.5625]], [[[0.25], 0.03125, 0.125, 2], [[2], 0.0, 0.0625]], [[[0.03125, 0.625, 0.046875, 0.125, 0.25], 0.0625, 0.125, 4], [[0, 2, 1, 2, 2], 0.25, 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.0625, 0.078125, 0.25, 0.0625, 0.015625, 0.625], 0.015625, 0.125, 5], [[4, 5, 5, 4, 1, 5], 0.0, 0.09375]], [[[0.0625, 0.046875, 0.078125, 0.078125, 0.625], 0.03125, 0.25, 5], [[2, 1, 3, 2, 5], 0.5, 0.09375]]], [[[[0.125, 0.015625, 0.0, 0.625, 0.625, 0.25], 0.015625, 0.25, 4], [[4, 1, 0, 4, 4, 4], 0.0, 0.625]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[0.125, 0.25, 0.125, 0.25, 0.25], 0.03125, 0.125, 2], [[2, 2, 2, 2, 2], 0.0, 0.3125]], [[[0.25, 0.625, 0.03125], 0.0625, 0.125, 3], [[2, 2, 0], 0.5, 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.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.0625, 0.046875, 0.015625, 0.0, 0.125, 0.0625], 0.03125, 0.125, 4], [[2, 1, 1, 0, 4, 2], 0.0, 0.0]], [[[0.046875, 0.25, 0.0625, 0.125, 0.125], 0.015625, 0.125, 3], [[3, 3, 3, 3, 3], 0.0, 0.25]]], [[[[0.078125, 0.078125, 0.625, 0.046875, 0.25], 0.03125, 0.25, 2], [[2, 2, 2, 1, 2], 0.5, 0.40625]], [[[0.625, 0.046875, 0.015625, 0.015625], 0.015625, 0.25, 3], [[3, 3, 1, 1], 0.0, 0.203125]], [[[0.0, 0.625, 0.046875], 0.03125, 0.125, 4], [[0, 4, 1], 0.5, 0.0]], [[[0.0625, 0.015625, 0.625, 0.25], 0.015625, 0.25, 5], [[4, 1, 5, 5], 0.0, 0.34375]], [[[0.0], 0.015625, 0.25, 2], [[0], 0.0, 0.0]], [[[0.078125, 0.046875, 0.03125], 0.03125, 0.125, 1], [[1, 1, 1], 0.0, 0.0625]], [[[0.015625], 0.015625, 0.25, 2], [[1], 0.0, 0.0]], [[[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-frame-time-clamp","generated_at":"2026-09-29T14:50:54.502565+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 raw delta is added without the max_frame clamp.","sha256":"190cedddaef9e339bb84b72319e737027a4bce34fdb2c977eadee1a5e5aac808","title":"Accumulator adds unclamped frame deltas · 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":40.191,"exit_code":1,"observations":[{"actual":[[1],0.0,0.0],"check":"case 0","expected":[[1],0.0,0.0],"passed":true},{"actual":[[0,1,0,1,1,1],0.0,0.359375],"check":"case 1","expected":[[0,1,0,1,1,1],0.0,0.359375],"passed":true},{"actual":[[0],0.0,0.0],"check":"case 2","expected":[[0],0.0,0.0],"passed":true},{"actual":[[1,0,4,2,0,2],0.25,0.0],"check":"case 3","expected":[[1,0,2,2,0,2],0.25,0.0],"passed":false},{"actual":[[3,1,3,0,1,1],0.25,0.25],"check":"case 4","expected":[[2,1,2,0,1,1],0.25,0.0],"passed":false},{"actual":[[2,3,1,3,1,1],0.0,0.53125],"check":"case 5","expected":[[2,3,1,3,1,1],0.0,0.15625],"passed":false},{"actual":[[4,4,0,1,2,2],0.5,0.125],"check":"case 6","expected":[[4,4,0,1,2,2],0.5,0.125],"passed":true},{"actual":[[5,0,1,4,2,5],0.0,0.1875],"check":"case 7","expected":[[4,0,1,4,2,4],0.0,0.0],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[1], 0.0, 0.0], \"expected\": [[1], 0.0, 0.0], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [[0, 1, 0, 1, 1, 1], 0.0, 0.359375], \"expected\": [[0, 1, 0, 1, 1, 1], 0.0, 0.359375], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [[0], 0.0, 0.0], \"expected\": [[0], 0.0, 0.0], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [[1, 0, 4, 2, 0, 2], 0.25, 0.0], \"expected\": [[1, 0, 2, 2, 0, 2], 0.25, 0.0], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [[3, 1, 3, 0, 1, 1], 0.25, 0.25], \"expected\": [[2, 1, 2, 0, 1, 1], 0.25, 0.0], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [[2, 3, 1, 3, 1, 1], 0.0, 0.53125], \"expected\": [[2, 3, 1, 3, 1, 1], 0.0, 0.15625], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [[4, 4, 0, 1, 2, 2], 0.5, 0.125], \"expected\": [[4, 4, 0, 1, 2, 2], 0.5, 0.125], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [[5, 0, 1, 4, 2, 5], 0.0, 0.1875], \"expected\": [[4, 0, 1, 4, 2, 4], 0.0, 0.0], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.761,"exit_code":1,"observations":[{"actual":[[1],0.0,0.0],"check":"case 0","expected":[[1],0.0,0.0],"passed":true},{"actual":[[0,1,0,1,1,1],0.0,0.984375],"check":"case 1","expected":[[0,1,0,1,1,1],0.0,0.359375],"passed":false},{"actual":[[0],0.0,0.0],"check":"case 2","expected":[[0],0.0,0.0],"passed":true},{"actual":[[1,0,4,2,0,2],0.25,0.0],"check":"case 3","expected":[[1,0,2,2,0,2],0.25,0.0],"passed":false},{"actual":[[3,1,3,0,1,1],0.25,0.5],"check":"case 4","expected":[[2,1,2,0,1,1],0.25,0.0],"passed":false},{"actual":[[2,3,1,3,1,1],0.0,0.78125],"check":"case 5","expected":[[2,3,1,3,1,1],0.0,0.15625],"passed":false},{"actual":[[4,4,0,1,2,2],0.5,0.125],"check":"case 6","expected":[[4,4,0,1,2,2],0.5,0.125],"passed":true},{"actual":[[5,0,1,4,2,5],0.0,0.1875],"check":"case 7","expected":[[4,0,1,4,2,4],0.0,0.0],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[1], 0.0, 0.0], \"expected\": [[1], 0.0, 0.0], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [[0, 1, 0, 1, 1, 1], 0.0, 0.984375], \"expected\": [[0, 1, 0, 1, 1, 1], 0.0, 0.359375], \"passed\": false}, {\"check\": \"case 2\", \"actual\": [[0], 0.0, 0.0], \"expected\": [[0], 0.0, 0.0], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [[1, 0, 4, 2, 0, 2], 0.25, 0.0], \"expected\": [[1, 0, 2, 2, 0, 2], 0.25, 0.0], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [[3, 1, 3, 0, 1, 1], 0.25, 0.5], \"expected\": [[2, 1, 2, 0, 1, 1], 0.25, 0.0], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [[2, 3, 1, 3, 1, 1], 0.0, 0.78125], \"expected\": [[2, 3, 1, 3, 1, 1], 0.0, 0.15625], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [[4, 4, 0, 1, 2, 2], 0.5, 0.125], \"expected\": [[4, 4, 0, 1, 2, 2], 0.5, 0.125], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [[5, 0, 1, 4, 2, 5], 0.0, 0.1875], \"expected\": [[4, 0, 1, 4, 2, 4], 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."}}