{"abstract":"Whenever the frame time changes the implied velocity jumps.","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":"Scaling by h_{n-1}/h_n inverts the correction.","family":"w2-physics_integrator_stability-time-corrected-verlet-step-ratio-correction","id":"FA-87126","implementations":{"attempt":{"sha256":"00dfaae004ff29b9dbfc9cbd7480a7b227d2ea9d85c4c8361f34ff20b8598e7f","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) * (hp / h) + acc(x) * h * (h + hp) / 2\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.122, 1.423, 17.941, -9.81, [0.03, 0.05, 0.02, 0.03, 0.03, 0.02]], [0.892542, -3.585623]], [[-1.571, -1.847, 12.561, 0.0, [0.05, 0.05]], [-1.654908, -0.324492]], [[0.69, -1.106, 19.376, 2.0, [0.01, 0.03, 0.02, 0.01, 0.01]], [0.567186, -1.883264]], [[1.282, -0.856, 0.733, -9.81, [0.05, 0.05, 0.05, 0.03]], [0.95467, -2.61524]], [[1.699, 1.89, 11.648, 2.0, [0.01, 0.01, 0.01]], [1.747613, 1.439167]], [[1.207, 1.792, 8.666, 0.0, [0.02, 0.05, 0.02, 0.02, 0.03]], [1.350164, 0.395333]], [[1.835, -1.641, 6.597, 2.0, [0.02, 0.02]], [1.761368, -1.939568]], [[0.223, -0.287, 16.575, 2.0, [0.05, 0.03, 0.05]], [0.173161, -0.43558]]], [[[-0.913, -1.493, 2.034, 0.0, [0.02, 0.02, 0.02, 0.03, 0.03]], [-1.077985, -1.282343]], [[1.693, 1.184, 10.982, -9.81, [0.02, 0.03, 0.05, 0.05]], [1.550068, -2.368135]], [[1.735, 0.846, 4.974, 2.0, [0.03, 0.03, 0.05, 0.03, 0.05, 0.01]], [1.768339, -0.484358]], [[0.454, 0.048, 11.925, 0.0, [0.01, 0.01, 0.01]], [0.453003, -0.087359]], [[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.121, 1.284, 14.702, 2.0, [0.01, 0.01, 0.02, 0.03, 0.03, 0.03, 0.01]], [0.086716, 1.603261]], [[-0.075, 1.691, 14.847, 2.0, [0.05, 0.02, 0.03]], [0.105977, 1.863265]], [[1.972, 1.228, 18.377, 2.0, [0.01, 0.03]], [1.993612, 0.36813]]], [[[0.68, 1.896, 12.013, -9.81, [0.03, 0.03, 0.03]], [0.775896, 0.500859]], [[0.012, 0.753, 6.017, 0.0, [0.01, 0.03, 0.02]], [0.056914, 0.743966]], [[-0.26, 1.352, 14.082, 0.0, [0.02, 0.02, 0.05, 0.02, 0.03, 0.05, 0.03, 0.02]], [0.121919, 1.619287]], [[-1.478, -0.428, 14.024, 2.0, [0.01, 0.02, 0.01]], [-1.476913, 0.36867]], [[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]], [[-0.045, -0.271, 10.763, 2.0, [0.02, 0.03]], [-0.055405, -0.182724]], [[0.104, 2.0, 8.382, 2.0, [0.05, 0.02, 0.01, 0.01, 0.03, 0.02, 0.05]], [0.485754, 1.959947]], [[0.637, -0.169, 4.032, 0.0, [0.01, 0.03]], [0.62819, -0.233063]]], [[[-1.698, 0.325, 6.546, -9.81, [0.02, 0.02]], [-1.683974, 0.363268]], [[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.434, -1.688, 15.899, 0.0, [0.03, 0.05, 0.01, 0.02]], [-0.573341, -0.885589]], [[0.423, 1.658, 5.012, -9.81, [0.01, 0.05, 0.02, 0.03, 0.03, 0.01, 0.03]], [0.523014, -0.377134]], [[0.774, -1.188, 7.384, 2.0, [0.03, 0.05, 0.05, 0.02]], [0.55902, -1.610601]], [[-0.757, 0.123, 15.508, 0.0, [0.01, 0.03]], [-0.742705, 0.415925]], [[-0.101, -1.02, 19.226, 2.0, [0.05, 0.01]], [-0.154839, -0.776626]], [[-0.582, 0.602, 4.289, 2.0, [0.02, 0.03, 0.01]], [-0.537873, 0.844843]]], [[[0.328, -1.645, 18.837, -9.81, [0.02, 0.03]], [0.226274, -2.187599]], [[0.777, 1.48, 11.801, 0.0, [0.05, 0.01, 0.01, 0.02, 0.02]], [0.881554, 0.495811]], [[0.705, -0.579, 5.962, 0.0, [0.03, 0.05, 0.03, 0.03, 0.02, 0.03, 0.05, 0.03, 0.02, 0.03]], [0.333218, -1.592526]], [[-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.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]], [[1.097, 0.642, 16.162, 2.0, [0.01, 0.03]], [1.110042, 0.246936]], [[0.391, 1.387, 17.389, -9.81, [0.05, 0.03, 0.01]], [0.447014, -0.078323]], [[-0.957, 1.594, 5.217, 0.0, [0.05, 0.03]], [-0.814041, 1.900589]]]]\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":"a7148a8c372842a01a288f28d7c42adc2242e64aef91caabeb0dcbe873018379","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) + acc(x) * h * (h + hp) / 2\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.122, 1.423, 17.941, -9.81, [0.03, 0.05, 0.02, 0.03, 0.03, 0.02]], [0.892542, -3.585623]], [[-1.571, -1.847, 12.561, 0.0, [0.05, 0.05]], [-1.654908, -0.324492]], [[0.69, -1.106, 19.376, 2.0, [0.01, 0.03, 0.02, 0.01, 0.01]], [0.567186, -1.883264]], [[1.282, -0.856, 0.733, -9.81, [0.05, 0.05, 0.05, 0.03]], [0.95467, -2.61524]], [[1.699, 1.89, 11.648, 2.0, [0.01, 0.01, 0.01]], [1.747613, 1.439167]], [[1.207, 1.792, 8.666, 0.0, [0.02, 0.05, 0.02, 0.02, 0.03]], [1.350164, 0.395333]], [[1.835, -1.641, 6.597, 2.0, [0.02, 0.02]], [1.761368, -1.939568]], [[0.223, -0.287, 16.575, 2.0, [0.05, 0.03, 0.05]], [0.173161, -0.43558]]], [[[-0.913, -1.493, 2.034, 0.0, [0.02, 0.02, 0.02, 0.03, 0.03]], [-1.077985, -1.282343]], [[1.693, 1.184, 10.982, -9.81, [0.02, 0.03, 0.05, 0.05]], [1.550068, -2.368135]], [[1.735, 0.846, 4.974, 2.0, [0.03, 0.03, 0.05, 0.03, 0.05, 0.01]], [1.768339, -0.484358]], [[0.454, 0.048, 11.925, 0.0, [0.01, 0.01, 0.01]], [0.453003, -0.087359]], [[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.121, 1.284, 14.702, 2.0, [0.01, 0.01, 0.02, 0.03, 0.03, 0.03, 0.01]], [0.086716, 1.603261]], [[-0.075, 1.691, 14.847, 2.0, [0.05, 0.02, 0.03]], [0.105977, 1.863265]], [[1.972, 1.228, 18.377, 2.0, [0.01, 0.03]], [1.993612, 0.36813]]], [[[0.68, 1.896, 12.013, -9.81, [0.03, 0.03, 0.03]], [0.775896, 0.500859]], [[0.012, 0.753, 6.017, 0.0, [0.01, 0.03, 0.02]], [0.056914, 0.743966]], [[-0.26, 1.352, 14.082, 0.0, [0.02, 0.02, 0.05, 0.02, 0.03, 0.05, 0.03, 0.02]], [0.121919, 1.619287]], [[-1.478, -0.428, 14.024, 2.0, [0.01, 0.02, 0.01]], [-1.476913, 0.36867]], [[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]], [[-0.045, -0.271, 10.763, 2.0, [0.02, 0.03]], [-0.055405, -0.182724]], [[0.104, 2.0, 8.382, 2.0, [0.05, 0.02, 0.01, 0.01, 0.03, 0.02, 0.05]], [0.485754, 1.959947]], [[0.637, -0.169, 4.032, 0.0, [0.01, 0.03]], [0.62819, -0.233063]]], [[[-1.698, 0.325, 6.546, -9.81, [0.02, 0.02]], [-1.683974, 0.363268]], [[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.434, -1.688, 15.899, 0.0, [0.03, 0.05, 0.01, 0.02]], [-0.573341, -0.885589]], [[0.423, 1.658, 5.012, -9.81, [0.01, 0.05, 0.02, 0.03, 0.03, 0.01, 0.03]], [0.523014, -0.377134]], [[0.774, -1.188, 7.384, 2.0, [0.03, 0.05, 0.05, 0.02]], [0.55902, -1.610601]], [[-0.757, 0.123, 15.508, 0.0, [0.01, 0.03]], [-0.742705, 0.415925]], [[-0.101, -1.02, 19.226, 2.0, [0.05, 0.01]], [-0.154839, -0.776626]], [[-0.582, 0.602, 4.289, 2.0, [0.02, 0.03, 0.01]], [-0.537873, 0.844843]]], [[[0.328, -1.645, 18.837, -9.81, [0.02, 0.03]], [0.226274, -2.187599]], [[0.777, 1.48, 11.801, 0.0, [0.05, 0.01, 0.01, 0.02, 0.02]], [0.881554, 0.495811]], [[0.705, -0.579, 5.962, 0.0, [0.03, 0.05, 0.03, 0.03, 0.02, 0.03, 0.05, 0.03, 0.02, 0.03]], [0.333218, -1.592526]], [[-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.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]], [[1.097, 0.642, 16.162, 2.0, [0.01, 0.03]], [1.110042, 0.246936]], [[0.391, 1.387, 17.389, -9.81, [0.05, 0.03, 0.01]], [0.447014, -0.078323]], [[-0.957, 1.594, 5.217, 0.0, [0.05, 0.03]], [-0.814041, 1.900589]]]]\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-step-ratio-correction","generated_at":"2026-09-29T14:50:55.915132+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 displacement x-prev is reused without scaling by h/h_prev.","sha256":"cd09f705043683443e676b3cb836dcd0d1e1f344aca617f5c2d951b018b973ec","title":"Verlet inertia term ignores the change in step length · 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.362,"exit_code":1,"observations":[{"actual":[0.536241,-10.299188],"check":"case 0","expected":[0.892542,-3.585623],"passed":false},{"actual":[-1.654908,-0.324492],"check":"case 1","expected":[-1.654908,-0.324492],"passed":true},{"actual":[0.557116,-4.517333],"check":"case 2","expected":[0.567186,-1.883264],"passed":false},{"actual":[0.837734,-6.513105],"check":"case 3","expected":[0.95467,-2.61524],"passed":false},{"actual":[1.747613,1.439167],"check":"case 4","expected":[1.747613,1.439167],"passed":true},{"actual":[1.165247,-0.813252],"check":"case 5","expected":[1.350164,0.395333],"passed":false},{"actual":[1.761368,-1.939568],"check":"case 6","expected":[1.761368,-1.939568],"passed":true},{"actual":[0.157997,-0.387497],"check":"case 7","expected":[0.173161,-0.43558],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [0.536241, -10.299188], \"expected\": [0.892542, -3.585623], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [-1.654908, -0.324492], \"expected\": [-1.654908, -0.324492], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [0.557116, -4.517333], \"expected\": [0.567186, -1.883264], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [0.837734, -6.513105], \"expected\": [0.95467, -2.61524], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [1.747613, 1.439167], \"expected\": [1.747613, 1.439167], \"passed\": true}, {\"check\": \"case 5\", \"actual\": [1.165247, -0.813252], \"expected\": [1.350164, 0.395333], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [1.761368, -1.939568], \"expected\": [1.761368, -1.939568], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [0.157997, -0.387497], \"expected\": [0.173161, -0.43558], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.046,"exit_code":1,"observations":[{"actual":[0.781189,-5.6062],"check":"case 0","expected":[0.892542,-3.585623],"passed":false},{"actual":[-1.654908,-0.324492],"check":"case 1","expected":[-1.654908,-0.324492],"passed":true},{"actual":[0.584845,-2.62431],"check":"case 2","expected":[0.567186,-1.883264],"passed":false},{"actual":[0.910819,-4.076939],"check":"case 3","expected":[0.95467,-2.61524],"passed":false},{"actual":[1.747613,1.439167],"check":"case 4","expected":[1.747613,1.439167],"passed":true},{"actual":[1.260638,-0.17639],"check":"case 5","expected":[1.350164,0.395333],"passed":false},{"actual":[1.761368,-1.939568],"check":"case 6","expected":[1.761368,-1.939568],"passed":true},{"actual":[0.16793,-0.40844],"check":"case 7","expected":[0.173161,-0.43558],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [0.781189, -5.6062], \"expected\": [0.892542, -3.585623], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [-1.654908, -0.324492], \"expected\": [-1.654908, -0.324492], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [0.584845, -2.62431], \"expected\": [0.567186, -1.883264], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [0.910819, -4.076939], \"expected\": [0.95467, -2.61524], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [1.747613, 1.439167], \"expected\": [1.747613, 1.439167], \"passed\": true}, {\"check\": \"case 5\", \"actual\": [1.260638, -0.17639], \"expected\": [1.350164, 0.395333], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [1.761368, -1.939568], \"expected\": [1.761368, -1.939568], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [0.16793, -0.40844], \"expected\": [0.173161, -0.43558], \"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."}}