{"abstract":"The first displacement is too large and seeds a persistent velocity error.","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":"Dropping one h0 factor gives the wrong units.","family":"w2-physics_integrator_stability-time-corrected-verlet-bootstrap-taylor-factor","id":"FA-87136","implementations":{"attempt":{"sha256":"accc176b4f29f2677eeee50ba2da287a801ca7716bd8c58d4b36caa058284e68","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]\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 + 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 = [[[[-0.889, -0.08, 17.128, 2.0, [0.05, 0.01, 0.05, 0.01]], [-0.776487, 1.830242]], [[0.043, 0.281, 14.181, -9.81, [0.03, 0.05, 0.02, 0.02, 0.03, 0.02]], [-0.057871, -1.335146]], [[-0.399, -1.076, 18.618, 2.0, [0.03, 0.03, 0.03, 0.02, 0.01]], [-0.456288, 0.093019]], [[-1.409, 0.693, 7.348, -9.81, [0.02, 0.02, 0.05, 0.05, 0.05, 0.01]], [-1.266157, 0.69937]], [[0.617, -1.642, 8.295, -9.81, [0.05, 0.01, 0.02, 0.01, 0.03, 0.02]], [0.248614, -3.42338]], [[-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.122, 1.423, 17.941, -9.81, [0.03, 0.05, 0.02, 0.03, 0.03, 0.02]], [0.892542, -3.585623]], [[-1.222, -0.036, 10.12, -9.81, [0.02, 0.03]], [-1.220603, 0.053535]]], [[[-1.613, -0.622, 8.807, -9.81, [0.02, 0.03, 0.01, 0.05, 0.03]], [-1.655241, -0.043343]], [[1.227, 0.863, 11.687, 0.0, [0.05, 0.05, 0.01, 0.05, 0.03, 0.03]], [1.068817, -2.042643]], [[1.862, 1.422, 6.208, 2.0, [0.01, 0.03, 0.03, 0.01, 0.01]], [1.950431, 0.584063]], [[1.693, 1.184, 10.982, -9.81, [0.02, 0.03, 0.05, 0.05]], [1.550068, -2.368135]], [[0.833, -0.206, 3.523, 2.0, [0.05, 0.01]], [0.81897, -0.256194]], [[-1.624, 0.809, 19.846, 0.0, [0.03, 0.02, 0.05, 0.03, 0.02, 0.03]], [-0.997463, 5.451991]], [[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.487, 0.867, 0.777, -9.81, [0.05, 0.05, 0.03, 0.01, 0.02, 0.01, 0.05]], [0.430783, -1.12279]]], [[[-0.686, 1.111, 17.91, -9.81, [0.05, 0.03, 0.03, 0.03]], [-0.5152, 1.255652]], [[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.478, -0.428, 14.024, 2.0, [0.01, 0.02, 0.01]], [-1.476913, 0.36867]], [[-0.233, -0.829, 19.928, -9.81, [0.01, 0.03, 0.02, 0.01]], [-0.302753, -1.125418]], [[0.153, -1.246, 15.582, 0.0, [0.01, 0.05, 0.02]], [0.046962, -1.364051]], [[-0.197, 1.673, 9.677, 2.0, [0.03, 0.03, 0.05, 0.05, 0.03, 0.05, 0.02, 0.05]], [0.420067, 2.034313]], [[1.671, -1.397, 3.602, 0.0, [0.01, 0.05, 0.03, 0.02, 0.05, 0.01, 0.02, 0.03]], [1.228659, -2.495971]], [[1.606, 1.967, 9.66, 0.0, [0.05, 0.03, 0.01, 0.02, 0.03, 0.05, 0.01]], [1.674706, -1.223548]]], [[[-1.994, -0.111, 14.711, -9.81, [0.03, 0.05, 0.02, 0.01, 0.01]], [-1.868671, 2.069192]], [[1.703, 1.989, 16.348, -9.81, [0.01, 0.05, 0.02, 0.05, 0.01, 0.03, 0.01, 0.03]], [1.291487, -5.197734]], [[0.774, -1.188, 7.384, 2.0, [0.03, 0.05, 0.05, 0.02]], [0.55902, -1.610601]], [[-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.819, 0.853, 6.729, 0.0, [0.05, 0.02, 0.01, 0.01, 0.05, 0.01, 0.05, 0.03, 0.02]], [1.648448, -2.056524]], [[0.396, 0.753, 11.545, 2.0, [0.01, 0.03, 0.03, 0.05, 0.02]], [0.472972, 0.357792]], [[-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.855, -0.987, 10.095, 2.0, [0.05, 0.02, 0.01]], [-0.899493, -0.170438]], [[-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.471, -0.746, 12.484, 2.0, [0.01, 0.03, 0.02, 0.02, 0.02, 0.01, 0.03, 0.05, 0.05, 0.05]], [0.658164, -4.181996]], [[-0.907, 1.374, 17.435, 0.0, [0.02, 0.01, 0.02, 0.03, 0.03, 0.01]], [-0.637033, 2.967008]], [[1.097, 0.642, 16.162, 2.0, [0.01, 0.03]], [1.110042, 0.246936]], [[-0.083, 1.642, 5.418, -9.81, [0.01, 0.05, 0.01, 0.05]], [0.04482, 0.722016]], [[-0.233, 1.656, 10.109, -9.81, [0.02, 0.03, 0.01]], [-0.147526, 1.223195]], [[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":"bc2f9b8608baf962861fbbbe30f2e76e288acda160e56b11a0d7ad894ffffed7","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] + 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 + 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 = [[[[-0.889, -0.08, 17.128, 2.0, [0.05, 0.01, 0.05, 0.01]], [-0.776487, 1.830242]], [[0.043, 0.281, 14.181, -9.81, [0.03, 0.05, 0.02, 0.02, 0.03, 0.02]], [-0.057871, -1.335146]], [[-0.399, -1.076, 18.618, 2.0, [0.03, 0.03, 0.03, 0.02, 0.01]], [-0.456288, 0.093019]], [[-1.409, 0.693, 7.348, -9.81, [0.02, 0.02, 0.05, 0.05, 0.05, 0.01]], [-1.266157, 0.69937]], [[0.617, -1.642, 8.295, -9.81, [0.05, 0.01, 0.02, 0.01, 0.03, 0.02]], [0.248614, -3.42338]], [[-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.122, 1.423, 17.941, -9.81, [0.03, 0.05, 0.02, 0.03, 0.03, 0.02]], [0.892542, -3.585623]], [[-1.222, -0.036, 10.12, -9.81, [0.02, 0.03]], [-1.220603, 0.053535]]], [[[-1.613, -0.622, 8.807, -9.81, [0.02, 0.03, 0.01, 0.05, 0.03]], [-1.655241, -0.043343]], [[1.227, 0.863, 11.687, 0.0, [0.05, 0.05, 0.01, 0.05, 0.03, 0.03]], [1.068817, -2.042643]], [[1.862, 1.422, 6.208, 2.0, [0.01, 0.03, 0.03, 0.01, 0.01]], [1.950431, 0.584063]], [[1.693, 1.184, 10.982, -9.81, [0.02, 0.03, 0.05, 0.05]], [1.550068, -2.368135]], [[0.833, -0.206, 3.523, 2.0, [0.05, 0.01]], [0.81897, -0.256194]], [[-1.624, 0.809, 19.846, 0.0, [0.03, 0.02, 0.05, 0.03, 0.02, 0.03]], [-0.997463, 5.451991]], [[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.487, 0.867, 0.777, -9.81, [0.05, 0.05, 0.03, 0.01, 0.02, 0.01, 0.05]], [0.430783, -1.12279]]], [[[-0.686, 1.111, 17.91, -9.81, [0.05, 0.03, 0.03, 0.03]], [-0.5152, 1.255652]], [[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.478, -0.428, 14.024, 2.0, [0.01, 0.02, 0.01]], [-1.476913, 0.36867]], [[-0.233, -0.829, 19.928, -9.81, [0.01, 0.03, 0.02, 0.01]], [-0.302753, -1.125418]], [[0.153, -1.246, 15.582, 0.0, [0.01, 0.05, 0.02]], [0.046962, -1.364051]], [[-0.197, 1.673, 9.677, 2.0, [0.03, 0.03, 0.05, 0.05, 0.03, 0.05, 0.02, 0.05]], [0.420067, 2.034313]], [[1.671, -1.397, 3.602, 0.0, [0.01, 0.05, 0.03, 0.02, 0.05, 0.01, 0.02, 0.03]], [1.228659, -2.495971]], [[1.606, 1.967, 9.66, 0.0, [0.05, 0.03, 0.01, 0.02, 0.03, 0.05, 0.01]], [1.674706, -1.223548]]], [[[-1.994, -0.111, 14.711, -9.81, [0.03, 0.05, 0.02, 0.01, 0.01]], [-1.868671, 2.069192]], [[1.703, 1.989, 16.348, -9.81, [0.01, 0.05, 0.02, 0.05, 0.01, 0.03, 0.01, 0.03]], [1.291487, -5.197734]], [[0.774, -1.188, 7.384, 2.0, [0.03, 0.05, 0.05, 0.02]], [0.55902, -1.610601]], [[-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.819, 0.853, 6.729, 0.0, [0.05, 0.02, 0.01, 0.01, 0.05, 0.01, 0.05, 0.03, 0.02]], [1.648448, -2.056524]], [[0.396, 0.753, 11.545, 2.0, [0.01, 0.03, 0.03, 0.05, 0.02]], [0.472972, 0.357792]], [[-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.855, -0.987, 10.095, 2.0, [0.05, 0.02, 0.01]], [-0.899493, -0.170438]], [[-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.471, -0.746, 12.484, 2.0, [0.01, 0.03, 0.02, 0.02, 0.02, 0.01, 0.03, 0.05, 0.05, 0.05]], [0.658164, -4.181996]], [[-0.907, 1.374, 17.435, 0.0, [0.02, 0.01, 0.02, 0.03, 0.03, 0.01]], [-0.637033, 2.967008]], [[1.097, 0.642, 16.162, 2.0, [0.01, 0.03]], [1.110042, 0.246936]], [[-0.083, 1.642, 5.418, -9.81, [0.01, 0.05, 0.01, 0.05]], [0.04482, 0.722016]], [[-0.233, 1.656, 10.109, -9.81, [0.02, 0.03, 0.01]], [-0.147526, 1.223195]], [[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-bootstrap-taylor-factor","generated_at":"2026-09-29T14:50:55.999458+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":"x1 adds a0*h0^2 instead of 0.5*a0*h0^2.","sha256":"2e999ca8118b61a9d675e44acb059e28103b23e31ed898f324266e888baf741f","title":"Verlet bootstrap step uses the full acceleration dt squared · 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":42.378,"exit_code":1,"observations":[{"actual":[0.171156,9.101969],"check":"case 0","expected":[-0.776487,1.830242],"passed":false},{"actual":[-0.861709,-5.499827],"check":"case 1","expected":[-0.057871,-1.335146],"passed":false},{"actual":[0.069466,4.114399],"check":"case 2","expected":[-0.456288,0.093019],"passed":false},{"actual":[-1.21536,0.929263],"check":"case 3","expected":[-1.266157,0.69937],"passed":false},{"actual":[-0.719014,-10.024821],"check":"case 4","expected":[0.248614,-3.42338],"passed":false},{"actual":[0.31554,11.373151],"check":"case 5","expected":[-1.249546,3.301322],"passed":false},{"actual":[-1.483708,-14.50169],"check":"case 6","expected":[0.892542,-3.585623],"passed":false},{"actual":[-1.158155,1.29995],"check":"case 7","expected":[-1.220603,0.053535],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [0.171156, 9.101969], \"expected\": [-0.776487, 1.830242], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [-0.861709, -5.499827], \"expected\": [-0.057871, -1.335146], \"passed\": false}, {\"check\": \"case 2\", \"actual\": [0.069466, 4.114399], \"expected\": [-0.456288, 0.093019], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [-1.21536, 0.929263], \"expected\": [-1.266157, 0.69937], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [-0.719014, -10.024821], \"expected\": [0.248614, -3.42338], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [0.31554, 11.373151], \"expected\": [-1.249546, 3.301322], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [-1.483708, -14.50169], \"expected\": [0.892542, -3.585623], \"passed\": false}, {\"check\": \"case 7\", \"actual\": [-1.158155, 1.29995], \"expected\": [-1.220603, 0.053535], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.358,"exit_code":1,"observations":[{"actual":[-0.726611,2.212964],"check":"case 0","expected":[-0.776487,1.830242],"passed":false},{"actual":[-0.082732,-1.46395],"check":"case 1","expected":[-0.057871,-1.335146],"passed":false},{"actual":[-0.440028,0.217392],"check":"case 2","expected":[-0.456288,0.093019],"passed":false},{"actual":[-1.26512,0.704061],"check":"case 3","expected":[-1.266157,0.69937],"passed":false},{"actual":[0.197687,-3.770824],"check":"case 4","expected":[0.248614,-3.42338],"passed":false},{"actual":[-1.167173,3.726155],"check":"case 5","expected":[-1.249546,3.301322],"passed":false},{"actual":[0.81905,-3.923233],"check":"case 6","expected":[0.892542,-3.585623],"passed":false},{"actual":[-1.219328,0.078972],"check":"case 7","expected":[-1.220603,0.053535],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [-0.726611, 2.212964], \"expected\": [-0.776487, 1.830242], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [-0.082732, -1.46395], \"expected\": [-0.057871, -1.335146], \"passed\": false}, {\"check\": \"case 2\", \"actual\": [-0.440028, 0.217392], \"expected\": [-0.456288, 0.093019], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [-1.26512, 0.704061], \"expected\": [-1.266157, 0.69937], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [0.197687, -3.770824], \"expected\": [0.248614, -3.42338], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [-1.167173, 3.726155], \"expected\": [-1.249546, 3.301322], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [0.81905, -3.923233], \"expected\": [0.892542, -3.585623], \"passed\": false}, {\"check\": \"case 7\", \"actual\": [-1.219328, 0.078972], \"expected\": [-1.220603, 0.053535], \"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."}}