{"abstract":"Uneven steps inject spurious forces.","category":"Physics integrator stability","checks":8,"contract":"solve(x0, v0, w2, g, dts): position Verlet with variable steps, acceleration -w2*x+g. First step is Taylor x1=x0+v0*h0+0.5*a(x0)*h0^2; then x_{n+1}=x_n+(x_n-x_{n-1})*(h_n/h_{n-1})+a(x_n)*h_n*(h_n+h_{n-1})/2. Velocity estimate is (x_n-x_{n-1})/h_last. Empty dts returns the initial state. Return [x, v] rounded.","contract_signature":"x0, v0, w2, g, dts","evaluation_group":"w2-physics_integrator_stability-time-corrected-verlet","failed_approach":"Using h*h_prev is still not the time-corrected form.","family":"w2-physics_integrator_stability-time-corrected-verlet-mixed-step-acceleration-term","id":"FA-87131","implementations":{"attempt":{"sha256":"3fcec2eb06c39bfde6e41843aef877b34b48a8fdd1fab7c4ce29b05ad18fd625","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x0, v0, w2, g, dts):\n    def acc(p):\n        return -w2 * p + g\n    if not dts:\n        return [round(x0, 6), round(v0, 6)]\n    prev = x0\n    x = x0 + v0 * dts[0] + 0.5 * acc(x0) * dts[0] * dts[0]\n    for i in range(1, len(dts)):\n        h, hp = dts[i], dts[i - 1]\n        nxt = x + (x - prev) * (h / hp) + acc(x) * h * hp\n        prev, x = x, nxt\n    v = (x - prev) / dts[-1]\n    return [round(x, 6), round(v, 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[-1.118, 1.653, 18.431, 0.0, [0.03, 0.03]], [-0.982706, 2.547717]], [[1.93, 0.372, 11.854, -9.81, [0.01, 0.01, 0.01]], [1.926444, -0.445559]], [[-0.532, -1.331, 9.198, 2.0, [0.03, 0.05]], [-0.615744, -0.938317]], [[-0.112, 0.567, 15.803, 2.0, [0.05, 0.01, 0.01, 0.01, 0.01]], [-0.046765, 0.848706]], [[0.002, 0.745, 4.672, 0.0, [0.03, 0.01, 0.03, 0.05]], [0.090437, 0.729532]], [[-1.559, 0.132, 13.212, 0.0, [0.05, 0.05, 0.02, 0.03, 0.01, 0.01]], [-1.249546, 3.301322]], [[-1.571, -1.847, 12.561, 0.0, [0.05, 0.05]], [-1.654908, -0.324492]], [[-1.514, 1.013, 16.587, -9.81, [0.05, 0.03, 0.02]], [-1.339568, 2.290613]]], [[[1.693, 1.184, 10.982, -9.81, [0.02, 0.03, 0.05, 0.05]], [1.550068, -2.368135]], [[-0.751, -1.653, 15.366, -9.81, [0.01, 0.05, 0.01, 0.03, 0.02, 0.03, 0.01]], [-0.977779, -1.105082]], [[1.862, 1.422, 6.208, 2.0, [0.01, 0.03, 0.03, 0.01, 0.01]], [1.950431, 0.584063]], [[0.454, 0.048, 11.925, 0.0, [0.01, 0.01, 0.01]], [0.453003, -0.087359]], [[-1.613, -0.622, 8.807, -9.81, [0.02, 0.03, 0.01, 0.05, 0.03]], [-1.655241, -0.043343]], [[0.644, -0.151, 13.871, -9.81, [0.02, 0.02, 0.01, 0.01, 0.05, 0.02, 0.03]], [0.387894, -2.717601]], [[-0.524, -1.843, 1.225, 0.0, [0.05, 0.02, 0.03, 0.01]], [-0.722411, -1.763355]], [[1.972, 1.228, 18.377, 2.0, [0.01, 0.03]], [1.993612, 0.36813]]], [[[1.558, 1.408, 12.285, 2.0, [0.02, 0.05, 0.03]], [1.611423, -0.087072]], [[-1.587, -0.211, 17.367, 2.0, [0.03, 0.01, 0.02, 0.02]], [-1.509843, 1.83789]], [[-1.478, -0.428, 14.024, 2.0, [0.01, 0.02, 0.01]], [-1.476913, 0.36867]], [[1.36, 0.701, 17.189, 2.0, [0.03, 0.05, 0.01, 0.03, 0.05, 0.01, 0.03]], [1.046693, -3.241676]], [[-0.045, -0.271, 10.763, 2.0, [0.02, 0.03]], [-0.055405, -0.182724]], [[0.106, -1.937, 2.608, 0.0, [0.03, 0.01, 0.03, 0.05, 0.01, 0.05, 0.05, 0.02]], [-0.374085, -1.858207]], [[-1.655, 0.554, 15.555, -9.81, [0.03, 0.02, 0.01, 0.01, 0.03, 0.01]], [-1.500918, 2.131832]], [[0.68, 1.896, 12.013, -9.81, [0.03, 0.03, 0.03]], [0.775896, 0.500859]]], [[[-0.942, 0.774, 3.875, 0.0, [0.02, 0.02, 0.03, 0.01, 0.02, 0.03]], [-0.811751, 1.170885]], [[1.678, -1.604, 6.016, 2.0, [0.02, 0.03, 0.05, 0.02, 0.05, 0.05, 0.02]], [1.087528, -3.119149]], [[-0.516, 0.344, 13.779, -9.81, [0.01, 0.03, 0.01, 0.01, 0.03, 0.05]], [-0.495793, 0.012391]], [[-0.434, -1.688, 15.899, 0.0, [0.03, 0.05, 0.01, 0.02]], [-0.573341, -0.885589]], [[-0.101, -1.02, 19.226, 2.0, [0.05, 0.01]], [-0.154839, -0.776626]], [[-1.698, 0.325, 6.546, -9.81, [0.02, 0.02]], [-1.683974, 0.363268]], [[0.712, -1.32, 18.303, -9.81, [0.01, 0.05, 0.02, 0.02, 0.05, 0.01, 0.03, 0.01, 0.01]], [-0.001573, -4.938097]], [[-0.458, 0.539, 19.188, -9.81, [0.05, 0.03]], [-0.418741, 0.452873]]], [[[-1.649, -1.262, 17.944, 2.0, [0.05, 0.03, 0.01, 0.03, 0.03, 0.01, 0.05, 0.01, 0.05]], [-0.887193, 5.798575]], [[-0.08, 0.73, 11.393, -9.81, [0.03, 0.03, 0.05, 0.01, 0.01, 0.01, 0.01]], [-0.072953, -0.593702]], [[0.147, 1.147, 10.915, 0.0, [0.03, 0.02, 0.01]], [0.212566, 1.040528]], [[-1.434, -0.348, 10.741, -9.81, [0.03, 0.03, 0.03, 0.01, 0.05, 0.03, 0.03, 0.03, 0.01, 0.01]], [-1.336072, 1.031162]], [[1.03, 0.515, 11.074, 0.0, [0.02, 0.01, 0.02, 0.01, 0.03, 0.02]], [1.017159, -0.63278]], [[1.097, 0.642, 16.162, 2.0, [0.01, 0.03]], [1.110042, 0.246936]], [[1.461, 0.462, 16.321, 2.0, [0.01, 0.01, 0.02, 0.05, 0.01, 0.03, 0.02, 0.05, 0.01, 0.03]], [0.973124, -3.979779]], [[1.94, 0.689, 18.476, 0.0, [0.05, 0.01, 0.03, 0.01, 0.05, 0.02, 0.03, 0.02, 0.02]], [1.133627, -6.57541]]]]\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":"dcaabc2a59528f766b879714a85d6e1ed81aab012f0991ebaad3ebf6f3b6ad7c","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x0, v0, w2, g, dts):\n    def acc(p):\n        return -w2 * p + g\n    if not dts:\n        return [round(x0, 6), round(v0, 6)]\n    prev = x0\n    x = x0 + v0 * dts[0] + 0.5 * acc(x0) * dts[0] * dts[0]\n    for i in range(1, len(dts)):\n        h, hp = dts[i], dts[i - 1]\n        nxt = x + (x - prev) * (h / hp) + acc(x) * h * h\n        prev, x = x, nxt\n    v = (x - prev) / dts[-1]\n    return [round(x, 6), round(v, 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[-1.118, 1.653, 18.431, 0.0, [0.03, 0.03]], [-0.982706, 2.547717]], [[1.93, 0.372, 11.854, -9.81, [0.01, 0.01, 0.01]], [1.926444, -0.445559]], [[-0.532, -1.331, 9.198, 2.0, [0.03, 0.05]], [-0.615744, -0.938317]], [[-0.112, 0.567, 15.803, 2.0, [0.05, 0.01, 0.01, 0.01, 0.01]], [-0.046765, 0.848706]], [[0.002, 0.745, 4.672, 0.0, [0.03, 0.01, 0.03, 0.05]], [0.090437, 0.729532]], [[-1.559, 0.132, 13.212, 0.0, [0.05, 0.05, 0.02, 0.03, 0.01, 0.01]], [-1.249546, 3.301322]], [[-1.571, -1.847, 12.561, 0.0, [0.05, 0.05]], [-1.654908, -0.324492]], [[-1.514, 1.013, 16.587, -9.81, [0.05, 0.03, 0.02]], [-1.339568, 2.290613]]], [[[1.693, 1.184, 10.982, -9.81, [0.02, 0.03, 0.05, 0.05]], [1.550068, -2.368135]], [[-0.751, -1.653, 15.366, -9.81, [0.01, 0.05, 0.01, 0.03, 0.02, 0.03, 0.01]], [-0.977779, -1.105082]], [[1.862, 1.422, 6.208, 2.0, [0.01, 0.03, 0.03, 0.01, 0.01]], [1.950431, 0.584063]], [[0.454, 0.048, 11.925, 0.0, [0.01, 0.01, 0.01]], [0.453003, -0.087359]], [[-1.613, -0.622, 8.807, -9.81, [0.02, 0.03, 0.01, 0.05, 0.03]], [-1.655241, -0.043343]], [[0.644, -0.151, 13.871, -9.81, [0.02, 0.02, 0.01, 0.01, 0.05, 0.02, 0.03]], [0.387894, -2.717601]], [[-0.524, -1.843, 1.225, 0.0, [0.05, 0.02, 0.03, 0.01]], [-0.722411, -1.763355]], [[1.972, 1.228, 18.377, 2.0, [0.01, 0.03]], [1.993612, 0.36813]]], [[[1.558, 1.408, 12.285, 2.0, [0.02, 0.05, 0.03]], [1.611423, -0.087072]], [[-1.587, -0.211, 17.367, 2.0, [0.03, 0.01, 0.02, 0.02]], [-1.509843, 1.83789]], [[-1.478, -0.428, 14.024, 2.0, [0.01, 0.02, 0.01]], [-1.476913, 0.36867]], [[1.36, 0.701, 17.189, 2.0, [0.03, 0.05, 0.01, 0.03, 0.05, 0.01, 0.03]], [1.046693, -3.241676]], [[-0.045, -0.271, 10.763, 2.0, [0.02, 0.03]], [-0.055405, -0.182724]], [[0.106, -1.937, 2.608, 0.0, [0.03, 0.01, 0.03, 0.05, 0.01, 0.05, 0.05, 0.02]], [-0.374085, -1.858207]], [[-1.655, 0.554, 15.555, -9.81, [0.03, 0.02, 0.01, 0.01, 0.03, 0.01]], [-1.500918, 2.131832]], [[0.68, 1.896, 12.013, -9.81, [0.03, 0.03, 0.03]], [0.775896, 0.500859]]], [[[-0.942, 0.774, 3.875, 0.0, [0.02, 0.02, 0.03, 0.01, 0.02, 0.03]], [-0.811751, 1.170885]], [[1.678, -1.604, 6.016, 2.0, [0.02, 0.03, 0.05, 0.02, 0.05, 0.05, 0.02]], [1.087528, -3.119149]], [[-0.516, 0.344, 13.779, -9.81, [0.01, 0.03, 0.01, 0.01, 0.03, 0.05]], [-0.495793, 0.012391]], [[-0.434, -1.688, 15.899, 0.0, [0.03, 0.05, 0.01, 0.02]], [-0.573341, -0.885589]], [[-0.101, -1.02, 19.226, 2.0, [0.05, 0.01]], [-0.154839, -0.776626]], [[-1.698, 0.325, 6.546, -9.81, [0.02, 0.02]], [-1.683974, 0.363268]], [[0.712, -1.32, 18.303, -9.81, [0.01, 0.05, 0.02, 0.02, 0.05, 0.01, 0.03, 0.01, 0.01]], [-0.001573, -4.938097]], [[-0.458, 0.539, 19.188, -9.81, [0.05, 0.03]], [-0.418741, 0.452873]]], [[[-1.649, -1.262, 17.944, 2.0, [0.05, 0.03, 0.01, 0.03, 0.03, 0.01, 0.05, 0.01, 0.05]], [-0.887193, 5.798575]], [[-0.08, 0.73, 11.393, -9.81, [0.03, 0.03, 0.05, 0.01, 0.01, 0.01, 0.01]], [-0.072953, -0.593702]], [[0.147, 1.147, 10.915, 0.0, [0.03, 0.02, 0.01]], [0.212566, 1.040528]], [[-1.434, -0.348, 10.741, -9.81, [0.03, 0.03, 0.03, 0.01, 0.05, 0.03, 0.03, 0.03, 0.01, 0.01]], [-1.336072, 1.031162]], [[1.03, 0.515, 11.074, 0.0, [0.02, 0.01, 0.02, 0.01, 0.03, 0.02]], [1.017159, -0.63278]], [[1.097, 0.642, 16.162, 2.0, [0.01, 0.03]], [1.110042, 0.246936]], [[1.461, 0.462, 16.321, 2.0, [0.01, 0.01, 0.02, 0.05, 0.01, 0.03, 0.02, 0.05, 0.01, 0.03]], [0.973124, -3.979779]], [[1.94, 0.689, 18.476, 0.0, [0.05, 0.01, 0.03, 0.01, 0.05, 0.02, 0.03, 0.02, 0.02]], [1.133627, -6.57541]]]]\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-time-corrected-verlet-mixed-step-acceleration-term","generated_at":"2026-09-29T14:50:55.916267+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 acceleration is scaled by h^2 instead of h*(h+h_prev)/2.","sha256":"a1744c0d0a93b92cf717ab65c7774e7c99f9c0c77e5375a1acef5c894d1fc64d","title":"Variable-step Verlet uses h squared for the acceleration term · 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.235,"exit_code":1,"observations":[{"actual":[-0.982706,2.547717],"check":"case 0","expected":[-0.982706,2.547717],"passed":true},{"actual":[1.926444,-0.445559],"check":"case 1","expected":[1.926444,-0.445559],"passed":true},{"actual":[-0.61936,-1.010638],"check":"case 2","expected":[-0.615744,-0.938317],"passed":false},{"actual":[-0.044177,0.91304],"check":"case 3","expected":[-0.046765,0.848706],"passed":false},{"actual":[0.090579,0.732401],"check":"case 4","expected":[0.090437,0.729532],"passed":false},{"actual":[-1.230846,3.660683],"check":"case 5","expected":[-1.249546,3.301322],"passed":false},{"actual":[-1.654908,-0.324492],"check":"case 6","expected":[-1.654908,-0.324492],"passed":true},{"actual":[-1.331221,2.495801],"check":"case 7","expected":[-1.339568,2.290613],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [-0.982706, 2.547717], \"expected\": [-0.982706, 2.547717], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [1.926444, -0.445559], \"expected\": [1.926444, -0.445559], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [-0.61936, -1.010638], \"expected\": [-0.615744, -0.938317], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [-0.044177, 0.91304], \"expected\": [-0.046765, 0.848706], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [0.090579, 0.732401], \"expected\": [0.090437, 0.729532], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [-1.230846, 3.660683], \"expected\": [-1.249546, 3.301322], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [-1.654908, -0.324492], \"expected\": [-1.654908, -0.324492], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [-1.331221, 2.495801], \"expected\": [-1.339568, 2.290613], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.225,"exit_code":1,"observations":[{"actual":[-0.982706,2.547717],"check":"case 0","expected":[-0.982706,2.547717],"passed":true},{"actual":[1.926444,-0.445559],"check":"case 1","expected":[1.926444,-0.445559],"passed":true},{"actual":[-0.612128,-0.865996],"check":"case 2","expected":[-0.615744,-0.938317],"passed":false},{"actual":[-0.049352,0.784372],"check":"case 3","expected":[-0.046765,0.848706],"passed":false},{"actual":[0.090294,0.726662],"check":"case 4","expected":[0.090437,0.729532],"passed":false},{"actual":[-1.268269,2.939677],"check":"case 5","expected":[-1.249546,3.301322],"passed":false},{"actual":[-1.654908,-0.324492],"check":"case 6","expected":[-1.654908,-0.324492],"passed":true},{"actual":[-1.347929,2.084721],"check":"case 7","expected":[-1.339568,2.290613],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [-0.982706, 2.547717], \"expected\": [-0.982706, 2.547717], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [1.926444, -0.445559], \"expected\": [1.926444, -0.445559], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [-0.612128, -0.865996], \"expected\": [-0.615744, -0.938317], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [-0.049352, 0.784372], \"expected\": [-0.046765, 0.848706], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [0.090294, 0.726662], \"expected\": [0.090437, 0.729532], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [-1.268269, 2.939677], \"expected\": [-1.249546, 3.301322], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [-1.654908, -0.324492], \"expected\": [-1.654908, -0.324492], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [-1.347929, 2.084721], \"expected\": [-1.339568, 2.290613], \"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."}}