{"abstract":"Accepted steps grow erratically and trigger rejection cascades.","category":"Physics integrator stability","checks":8,"contract":"solve(y0, lam, s, t_end, dt0, tol): integrate y'=-lam*y+s to t_end with the embedded Euler/Heun pair. err=|y_heun-y_euler|/max(1,|y|) at the step start. Accept if err<=tol (propagate Heun); grow h by min(2, 0.9*(tol/err)^(1/2)) (2 when err=0); on reject shrink by max(0.2, 0.9*(tol/err)^(1/2)). Steps are clipped to t_end; at most 500 attempts. Return [y, accepted, rejected, last h] rounded.","contract_signature":"y0, lam, s, t_end, dt0, tol","evaluation_group":"w2-physics_integrator_stability-adaptive-heun-euler","failed_approach":"Exponent 1/3 corresponds to a second-order estimator, not this pair.","family":"w2-physics_integrator_stability-adaptive-heun-euler-controller-exponent","id":"FA-87036","implementations":{"attempt":{"sha256":"8c513a4ea958cbd81524eb78f0a0bd3f57bdb6f39d6244d7784a756241abbae3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(y0, lam, s, t_end, dt0, tol):\n    def f(y):\n        return -lam * y + s\n    t, y, h = 0.0, y0, dt0\n    acc = rej = 0\n    while t < t_end - 1e-12 and acc + rej < 500:\n        h = min(h, t_end - t)\n        k1 = f(y)\n        k2 = f(y + h * k1)\n        y_low = y + h * k1\n        y_high = y + h / 2 * (k1 + k2)\n        err = abs(y_high - y_low) / max(1.0, abs(y))\n        if err <= tol:\n            t += h\n            y = y_high\n            acc += 1\n            grow = 2.0 if err == 0 else min(2.0, 0.9 * (tol / err) ** (1 / 3))\n            h = h * grow\n        else:\n            rej += 1\n            h = h * max(0.2, 0.9 * (tol / err) ** 0.5)\n    return [round(y, 6), acc, rej, round(h, 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[-2.661, 0.0, 0.567, 1.5, 0.05, 0.001], [-1.8105, 5, 0, 1.5]], [[1.455, 0.0, 0.495, 1.5, 0.3, 0.001], [2.1975, 3, 0, 1.2]], [[-0.678, 2.724, 0.55, 1.5, 0.05, 0.01], [0.185448, 16, 0, 0.164424]], [[1.301, 0.0, 1.346, 0.5, 0.1, 0.0001], [1.974, 3, 0, 0.4]], [[1.761, 1.735, -1.932, 1.5, 0.05, 0.01], [-0.898458, 21, 0, 0.089026]], [[1.155, 1.454, 1.298, 1.0, 0.7, 0.001], [0.954176, 14, 2, 0.10605]], [[0.621, 1.843, 0.407, 2.0, 0.3, 0.001], [0.23109, 29, 2, 0.18722]], [[1.121, 4.954, -0.6, 0.5, 0.3, 0.01], [-0.014719, 14, 2, 0.068659]]], [[[2.09, 3.725, -1.778, 1.0, 0.7, 0.0001], [-0.415384, 205, 4, 0.005852]], [[-0.876, 0.0, -0.17, 0.5, 0.05, 0.0001], [-0.961, 4, 0, 0.3]], [[-2.532, 0.766, -0.213, 0.5, 0.3, 0.001], [-1.815013, 9, 1, 0.056945]], [[-2.2, 0.0, -0.933, 1.0, 0.3, 0.001], [-3.133, 3, 0, 0.2]], [[2.431, 0.0, 0.71, 1.0, 0.1, 0.01], [3.141, 4, 0, 0.6]], [[2.544, 3.611, 0.037, 1.5, 0.05, 0.0001], [0.021528, 217, 2, 0.032019]], [[-2.813, 4.676, -0.613, 1.0, 0.1, 0.01], [-0.158154, 23, 1, 0.132111]], [[0.366, 0.277, -0.958, 2.0, 0.3, 0.0001], [-1.260745, 75, 2, 0.009378]]], [[[0.299, 2.489, -1.677, 0.5, 0.3, 0.001], [-0.393348, 24, 2, 0.029906]], [[-1.429, 4.357, 1.585, 2.0, 0.7, 0.001], [0.363343, 71, 3, 0.130298]], [[-2.296, 0.0, -1.609, 1.5, 0.3, 0.001], [-4.7095, 3, 0, 1.2]], [[1.267, 2.693, -0.039, 0.5, 0.7, 0.0001], [0.318914, 87, 3, 0.008112]], [[-0.18, 0.0, 0.811, 2.0, 0.05, 0.0001], [1.442, 6, 0, 0.9]], [[-1.302, 4.391, -1.764, 1.5, 0.3, 0.01], [-0.404267, 18, 2, 0.40767]], [[-2.618, 0.0, -1.013, 1.0, 0.1, 0.001], [-3.631, 4, 0, 0.6]], [[1.412, 4.795, 1.541, 1.0, 0.3, 0.001], [0.330607, 50, 3, 0.043844]]], [[[-2.405, 0.0, -1.998, 1.5, 0.3, 0.0001], [-5.402, 3, 0, 1.2]], [[-1.257, 0.0, -1.478, 0.5, 0.1, 0.01], [-1.996, 3, 0, 0.4]], [[0.67, 3.55, -0.067, 1.0, 0.7, 0.01], [0.002935, 14, 2, 0.005435]], [[-0.836, 1.36, -1.381, 1.0, 0.05, 0.0001], [-0.969367, 34, 1, 0.042607]], [[-0.556, 1.399, -1.805, 0.5, 0.05, 0.0001], [-0.925415, 41, 1, 0.007374]], [[-2.5, 0.0, 0.727, 1.0, 0.05, 0.0001], [-1.773, 5, 0, 0.5]], [[0.551, 2.318, 0.186, 1.5, 0.7, 0.0001], [0.094812, 92, 3, 0.032361]], [[-1.416, 3.263, -0.863, 0.5, 0.05, 0.0001], [-0.489781, 93, 2, 0.002341]]], [[[1.902, 0.0, 1.399, 0.5, 0.1, 0.001], [2.6015, 3, 0, 0.4]], [[-0.195, 0.0, -1.909, 2.0, 0.1, 0.001], [-4.013, 5, 0, 1.0]], [[1.292, 4.788, 1.763, 1.5, 0.1, 0.01], [0.37002, 19, 1, 0.240185]], [[-0.799, 4.136, -0.079, 1.0, 0.7, 0.01], [-0.03315, 15, 2, 0.206325]], [[0.854, 0.751, 1.114, 0.5, 0.05, 0.01], [1.050601, 4, 0, 0.243552]], [[-0.597, 0.0, -0.974, 2.0, 0.7, 0.01], [-2.545, 2, 0, 2.6]], [[-2.168, 3.971, -0.843, 1.5, 0.1, 0.01], [-0.218747, 23, 1, 0.239273]], [[1.604, 3.262, 1.026, 1.0, 0.1, 0.0001], [0.363958, 141, 2, 0.004622]]]]\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":"73cc9b6a066ad171eaad219911252bda968c7f07267a9f9da8cc403b0141ff54","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(y0, lam, s, t_end, dt0, tol):\n    def f(y):\n        return -lam * y + s\n    t, y, h = 0.0, y0, dt0\n    acc = rej = 0\n    while t < t_end - 1e-12 and acc + rej < 500:\n        h = min(h, t_end - t)\n        k1 = f(y)\n        k2 = f(y + h * k1)\n        y_low = y + h * k1\n        y_high = y + h / 2 * (k1 + k2)\n        err = abs(y_high - y_low) / max(1.0, abs(y))\n        if err <= tol:\n            t += h\n            y = y_high\n            acc += 1\n            grow = 2.0 if err == 0 else min(2.0, 0.9 * (tol / err))\n            h = h * grow\n        else:\n            rej += 1\n            h = h * max(0.2, 0.9 * (tol / err) ** 0.5)\n    return [round(y, 6), acc, rej, round(h, 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[-2.661, 0.0, 0.567, 1.5, 0.05, 0.001], [-1.8105, 5, 0, 1.5]], [[1.455, 0.0, 0.495, 1.5, 0.3, 0.001], [2.1975, 3, 0, 1.2]], [[-0.678, 2.724, 0.55, 1.5, 0.05, 0.01], [0.185448, 16, 0, 0.164424]], [[1.301, 0.0, 1.346, 0.5, 0.1, 0.0001], [1.974, 3, 0, 0.4]], [[1.761, 1.735, -1.932, 1.5, 0.05, 0.01], [-0.898458, 21, 0, 0.089026]], [[1.155, 1.454, 1.298, 1.0, 0.7, 0.001], [0.954176, 14, 2, 0.10605]], [[0.621, 1.843, 0.407, 2.0, 0.3, 0.001], [0.23109, 29, 2, 0.18722]], [[1.121, 4.954, -0.6, 0.5, 0.3, 0.01], [-0.014719, 14, 2, 0.068659]]], [[[2.09, 3.725, -1.778, 1.0, 0.7, 0.0001], [-0.415384, 205, 4, 0.005852]], [[-0.876, 0.0, -0.17, 0.5, 0.05, 0.0001], [-0.961, 4, 0, 0.3]], [[-2.532, 0.766, -0.213, 0.5, 0.3, 0.001], [-1.815013, 9, 1, 0.056945]], [[-2.2, 0.0, -0.933, 1.0, 0.3, 0.001], [-3.133, 3, 0, 0.2]], [[2.431, 0.0, 0.71, 1.0, 0.1, 0.01], [3.141, 4, 0, 0.6]], [[2.544, 3.611, 0.037, 1.5, 0.05, 0.0001], [0.021528, 217, 2, 0.032019]], [[-2.813, 4.676, -0.613, 1.0, 0.1, 0.01], [-0.158154, 23, 1, 0.132111]], [[0.366, 0.277, -0.958, 2.0, 0.3, 0.0001], [-1.260745, 75, 2, 0.009378]]], [[[0.299, 2.489, -1.677, 0.5, 0.3, 0.001], [-0.393348, 24, 2, 0.029906]], [[-1.429, 4.357, 1.585, 2.0, 0.7, 0.001], [0.363343, 71, 3, 0.130298]], [[-2.296, 0.0, -1.609, 1.5, 0.3, 0.001], [-4.7095, 3, 0, 1.2]], [[1.267, 2.693, -0.039, 0.5, 0.7, 0.0001], [0.318914, 87, 3, 0.008112]], [[-0.18, 0.0, 0.811, 2.0, 0.05, 0.0001], [1.442, 6, 0, 0.9]], [[-1.302, 4.391, -1.764, 1.5, 0.3, 0.01], [-0.404267, 18, 2, 0.40767]], [[-2.618, 0.0, -1.013, 1.0, 0.1, 0.001], [-3.631, 4, 0, 0.6]], [[1.412, 4.795, 1.541, 1.0, 0.3, 0.001], [0.330607, 50, 3, 0.043844]]], [[[-2.405, 0.0, -1.998, 1.5, 0.3, 0.0001], [-5.402, 3, 0, 1.2]], [[-1.257, 0.0, -1.478, 0.5, 0.1, 0.01], [-1.996, 3, 0, 0.4]], [[0.67, 3.55, -0.067, 1.0, 0.7, 0.01], [0.002935, 14, 2, 0.005435]], [[-0.836, 1.36, -1.381, 1.0, 0.05, 0.0001], [-0.969367, 34, 1, 0.042607]], [[-0.556, 1.399, -1.805, 0.5, 0.05, 0.0001], [-0.925415, 41, 1, 0.007374]], [[-2.5, 0.0, 0.727, 1.0, 0.05, 0.0001], [-1.773, 5, 0, 0.5]], [[0.551, 2.318, 0.186, 1.5, 0.7, 0.0001], [0.094812, 92, 3, 0.032361]], [[-1.416, 3.263, -0.863, 0.5, 0.05, 0.0001], [-0.489781, 93, 2, 0.002341]]], [[[1.902, 0.0, 1.399, 0.5, 0.1, 0.001], [2.6015, 3, 0, 0.4]], [[-0.195, 0.0, -1.909, 2.0, 0.1, 0.001], [-4.013, 5, 0, 1.0]], [[1.292, 4.788, 1.763, 1.5, 0.1, 0.01], [0.37002, 19, 1, 0.240185]], [[-0.799, 4.136, -0.079, 1.0, 0.7, 0.01], [-0.03315, 15, 2, 0.206325]], [[0.854, 0.751, 1.114, 0.5, 0.05, 0.01], [1.050601, 4, 0, 0.243552]], [[-0.597, 0.0, -0.974, 2.0, 0.7, 0.01], [-2.545, 2, 0, 2.6]], [[-2.168, 3.971, -0.843, 1.5, 0.1, 0.01], [-0.218747, 23, 1, 0.239273]], [[1.604, 3.262, 1.026, 1.0, 0.1, 0.0001], [0.363958, 141, 2, 0.004622]]]]\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-adaptive-heun-euler-controller-exponent","generated_at":"2026-09-29T14:50:55.102290+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":"Growth uses 0.9*(tol/err) instead of the square root for a first-order error estimate.","sha256":"7628b261d7da4b22478f3010602ca23a755b4822f074e9347a1912e780550320","title":"Step controller omits the error-order exponent on growth · 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":43.813,"exit_code":1,"observations":[{"actual":[-1.8105,5,0,1.5],"check":"case 0","expected":[-1.8105,5,0,1.5],"passed":true},{"actual":[2.1975,3,0,1.2],"check":"case 1","expected":[2.1975,3,0,1.2],"passed":true},{"actual":[0.185817,17,0,0.219708],"check":"case 2","expected":[0.185448,16,0,0.164424],"passed":false},{"actual":[1.974,3,0,0.4],"check":"case 3","expected":[1.974,3,0,0.4],"passed":true},{"actual":[-0.898778,22,0,0.118055],"check":"case 4","expected":[-0.898458,21,0,0.089026],"passed":false},{"actual":[0.954152,15,2,0.08185],"check":"case 5","expected":[0.954176,14,2,0.10605],"passed":false},{"actual":[0.231058,32,2,0.000582],"check":"case 6","expected":[0.23109,29,2,0.18722],"passed":false},{"actual":[-0.01506,15,2,0.060544],"check":"case 7","expected":[-0.014719,14,2,0.068659],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [-1.8105, 5, 0, 1.5], \"expected\": [-1.8105, 5, 0, 1.5], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [2.1975, 3, 0, 1.2], \"expected\": [2.1975, 3, 0, 1.2], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [0.185817, 17, 0, 0.219708], \"expected\": [0.185448, 16, 0, 0.164424], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [1.974, 3, 0, 0.4], \"expected\": [1.974, 3, 0, 0.4], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [-0.898778, 22, 0, 0.118055], \"expected\": [-0.898458, 21, 0, 0.089026], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [0.954152, 15, 2, 0.08185], \"expected\": [0.954176, 14, 2, 0.10605], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [0.231058, 32, 2, 0.000582], \"expected\": [0.23109, 29, 2, 0.18722], \"passed\": false}, {\"check\": \"case 7\", \"actual\": [-0.01506, 15, 2, 0.060544], \"expected\": [-0.014719, 14, 2, 0.068659], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.695,"exit_code":1,"observations":[{"actual":[-1.8105,5,0,1.5],"check":"case 0","expected":[-1.8105,5,0,1.5],"passed":true},{"actual":[2.1975,3,0,1.2],"check":"case 1","expected":[2.1975,3,0,1.2],"passed":true},{"actual":[0.184312,15,0,0.006089],"check":"case 2","expected":[0.185448,16,0,0.164424],"passed":false},{"actual":[1.974,3,0,0.4],"check":"case 3","expected":[1.974,3,0,0.4],"passed":true},{"actual":[-0.898084,20,4,0.077825],"check":"case 4","expected":[-0.898458,21,0,0.089026],"passed":false},{"actual":[0.954211,13,2,0.147149],"check":"case 5","expected":[0.954176,14,2,0.10605],"passed":false},{"actual":[0.23113,27,3,0.235747],"check":"case 6","expected":[0.23109,29,2,0.18722],"passed":false},{"actual":[-0.014271,13,3,0.080243],"check":"case 7","expected":[-0.014719,14,2,0.068659],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [-1.8105, 5, 0, 1.5], \"expected\": [-1.8105, 5, 0, 1.5], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [2.1975, 3, 0, 1.2], \"expected\": [2.1975, 3, 0, 1.2], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [0.184312, 15, 0, 0.006089], \"expected\": [0.185448, 16, 0, 0.164424], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [1.974, 3, 0, 0.4], \"expected\": [1.974, 3, 0, 0.4], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [-0.898084, 20, 4, 0.077825], \"expected\": [-0.898458, 21, 0, 0.089026], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [0.954211, 13, 2, 0.147149], \"expected\": [0.954176, 14, 2, 0.10605], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [0.23113, 27, 3, 0.235747], \"expected\": [0.23109, 29, 2, 0.18722], \"passed\": false}, {\"check\": \"case 7\", \"actual\": [-0.014271, 13, 3, 0.080243], \"expected\": [-0.014719, 14, 2, 0.068659], \"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."}}