{"abstract":"A free damped particle (zero stiffness) is reported stable although its drift mode never decays.","category":"Physics integrator stability","checks":8,"contract":"solve(k, m, c, dt): classify explicit Euler on x'=v, v'=(-k*x-c*v)/m. Eigenvalues are the roots of s^2+(c/m)s+k/m; amplification is max |1+dt*lambda|. Return [\"marginal\" if |amp-1|<=1e-9, else \"stable\" if amp<1, else \"unstable\", amp rounded to 6].","contract_signature":"k, m, c, dt","evaluation_group":"w2-physics_integrator_stability-explicit-euler-stability","failed_approach":"Widening the marginal tolerance to 1e-3 mislabels slightly unstable systems.","family":"w2-physics_integrator_stability-explicit-euler-stability-marginal-classification-precedence","id":"FA-86926","implementations":{"attempt":{"sha256":"3fd219bd5c1f281e7ff39d24df0dc6156aa4ce773894535b32b653df89e5b65e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(k, m, c, dt):\n    a = c / m\n    b = k / m\n    disc = a * a - 4 * b\n    if disc >= 0:\n        r = math.sqrt(disc)\n        lams = [complex((-a + r) / 2, 0), complex((-a - r) / 2, 0)]\n    else:\n        r = math.sqrt(-disc)\n        lams = [complex(-a / 2, r / 2), complex(-a / 2, -r / 2)]\n    amp = max(abs(1 + dt * lam) for lam in lams)\n    if abs(amp - 1) <= 1e-3:\n        label = 'marginal'\n    elif amp < 1:\n        label = 'stable'\n    else:\n        label = 'unstable'\n    return [label, round(amp, 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 2.0, 1.0, 0.1], ['marginal', 1.0]], [[48.787, 2.932, 7.285, 0.05], ['stable', 0.957792]], [[0.0, 3.074, 0.67, 0.1], ['marginal', 1.0]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[33.169, 0.238, 7.307, 0.1], ['unstable', 1.516322]], [[15.317, 1.272, 2.461, 0.1], ['stable', 0.962778]]], [[[0.0, 2.791, 6.117, 0.4], ['marginal', 1.0]], [[34.91, 3.761, 2.904, 1.0], ['unstable', 3.083824]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[5.819, 1.841, 1.025, 0.4], ['unstable', 1.132705]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[47.409, 1.216, 0.706, 0.01], ['stable', 0.999046]], [[0.0, 1.79, 3.179, 0.01], ['marginal', 1.0]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]]], [[[8.315, 3.625, 0.483, 0.01], ['stable', 0.999448]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 2.181, 7.092, 0.01], ['marginal', 1.0]], [[0.0, 1.763, 0.013, 0.8], ['marginal', 1.0]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[0.0, 3.996, 2.36, 1.0], ['marginal', 1.0]], [[40.419, 1.422, 6.433, 0.1], ['stable', 0.912058]], [[6.621, 1.513, 5.261, 0.8], ['unstable', 1.00942]]], [[[21.305, 1.348, 3.845, 0.2], ['unstable', 1.030398]], [[25.334, 1.767, 5.476, 0.8], ['unstable', 2.774282]], [[0.0, 0.88, 2.713, 0.01], ['marginal', 1.0]], [[57.915, 0.684, 2.142, 0.1], ['unstable', 1.238367]], [[0.0, 1.692, 2.361, 0.05], ['marginal', 1.0]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[0.0, 2.091, 5.492, 0.4], ['marginal', 1.0]]], [[[3.053, 1.003, 2.137, 0.1], ['stable', 0.90409]], [[0.0, 0.824, 2.657, 0.1], ['marginal', 1.0]], [[33.574, 1.956, 6.795, 0.1], ['stable', 0.907884]], [[59.414, 2.945, 0.495, 0.2], ['unstable', 1.331678]], [[0.0, 3.877, 2.569, 0.1], ['marginal', 1.0]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 2.0, 1.0, 0.1], ['marginal', 1.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":"56ecce94d9dc314fb620298f5829fd658140c0cef1ec325ac09dd092ecb69859","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(k, m, c, dt):\n    a = c / m\n    b = k / m\n    disc = a * a - 4 * b\n    if disc >= 0:\n        r = math.sqrt(disc)\n        lams = [complex((-a + r) / 2, 0), complex((-a - r) / 2, 0)]\n    else:\n        r = math.sqrt(-disc)\n        lams = [complex(-a / 2, r / 2), complex(-a / 2, -r / 2)]\n    amp = max(abs(1 + dt * lam) for lam in lams)\n    if amp <= 1:\n        label = 'stable'\n    elif abs(amp - 1) <= 1e-9:\n        label = 'marginal'\n    else:\n        label = 'unstable'\n    return [label, round(amp, 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 2.0, 1.0, 0.1], ['marginal', 1.0]], [[48.787, 2.932, 7.285, 0.05], ['stable', 0.957792]], [[0.0, 3.074, 0.67, 0.1], ['marginal', 1.0]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[33.169, 0.238, 7.307, 0.1], ['unstable', 1.516322]], [[15.317, 1.272, 2.461, 0.1], ['stable', 0.962778]]], [[[0.0, 2.791, 6.117, 0.4], ['marginal', 1.0]], [[34.91, 3.761, 2.904, 1.0], ['unstable', 3.083824]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[5.819, 1.841, 1.025, 0.4], ['unstable', 1.132705]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[47.409, 1.216, 0.706, 0.01], ['stable', 0.999046]], [[0.0, 1.79, 3.179, 0.01], ['marginal', 1.0]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]]], [[[8.315, 3.625, 0.483, 0.01], ['stable', 0.999448]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 2.181, 7.092, 0.01], ['marginal', 1.0]], [[0.0, 1.763, 0.013, 0.8], ['marginal', 1.0]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[0.0, 3.996, 2.36, 1.0], ['marginal', 1.0]], [[40.419, 1.422, 6.433, 0.1], ['stable', 0.912058]], [[6.621, 1.513, 5.261, 0.8], ['unstable', 1.00942]]], [[[21.305, 1.348, 3.845, 0.2], ['unstable', 1.030398]], [[25.334, 1.767, 5.476, 0.8], ['unstable', 2.774282]], [[0.0, 0.88, 2.713, 0.01], ['marginal', 1.0]], [[57.915, 0.684, 2.142, 0.1], ['unstable', 1.238367]], [[0.0, 1.692, 2.361, 0.05], ['marginal', 1.0]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[0.0, 2.091, 5.492, 0.4], ['marginal', 1.0]]], [[[3.053, 1.003, 2.137, 0.1], ['stable', 0.90409]], [[0.0, 0.824, 2.657, 0.1], ['marginal', 1.0]], [[33.574, 1.956, 6.795, 0.1], ['stable', 0.907884]], [[59.414, 2.945, 0.495, 0.2], ['unstable', 1.331678]], [[0.0, 3.877, 2.569, 0.1], ['marginal', 1.0]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 2.0, 1.0, 0.1], ['marginal', 1.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-explicit-euler-stability-marginal-classification-precedence","generated_at":"2026-09-29T14:50:54.077194+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 stable branch (amp <= 1) is tested before the marginal tolerance band.","sha256":"163c97deabe92e19b47b5b46a6afac5a226f35109aaa385da8197b1f41e69d92","title":"Unit amplification is labeled stable before the marginal test · 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.098,"exit_code":1,"observations":[{"actual":["marginal",1.0008],"check":"case 0","expected":["unstable",1.0008],"passed":false},{"actual":["stable",0.961803],"check":"case 1","expected":["stable",0.961803],"passed":true},{"actual":["marginal",1.0],"check":"case 2","expected":["marginal",1.0],"passed":true},{"actual":["stable",0.957792],"check":"case 3","expected":["stable",0.957792],"passed":true},{"actual":["marginal",1.0],"check":"case 4","expected":["marginal",1.0],"passed":true},{"actual":["marginal",1.0],"check":"case 5","expected":["marginal",1.0],"passed":true},{"actual":["unstable",1.516322],"check":"case 6","expected":["unstable",1.516322],"passed":true},{"actual":["stable",0.962778],"check":"case 7","expected":["stable",0.962778],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [\"marginal\", 1.0008], \"expected\": [\"unstable\", 1.0008], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [\"stable\", 0.961803], \"expected\": [\"stable\", 0.961803], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [\"marginal\", 1.0], \"expected\": [\"marginal\", 1.0], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [\"stable\", 0.957792], \"expected\": [\"stable\", 0.957792], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [\"marginal\", 1.0], \"expected\": [\"marginal\", 1.0], \"passed\": true}, {\"check\": \"case 5\", \"actual\": [\"marginal\", 1.0], \"expected\": [\"marginal\", 1.0], \"passed\": true}, {\"check\": \"case 6\", \"actual\": [\"unstable\", 1.516322], \"expected\": [\"unstable\", 1.516322], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [\"stable\", 0.962778], \"expected\": [\"stable\", 0.962778], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.344,"exit_code":1,"observations":[{"actual":["unstable",1.0008],"check":"case 0","expected":["unstable",1.0008],"passed":true},{"actual":["stable",0.961803],"check":"case 1","expected":["stable",0.961803],"passed":true},{"actual":["stable",1.0],"check":"case 2","expected":["marginal",1.0],"passed":false},{"actual":["stable",0.957792],"check":"case 3","expected":["stable",0.957792],"passed":true},{"actual":["stable",1.0],"check":"case 4","expected":["marginal",1.0],"passed":false},{"actual":["stable",1.0],"check":"case 5","expected":["marginal",1.0],"passed":false},{"actual":["unstable",1.516322],"check":"case 6","expected":["unstable",1.516322],"passed":true},{"actual":["stable",0.962778],"check":"case 7","expected":["stable",0.962778],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [\"unstable\", 1.0008], \"expected\": [\"unstable\", 1.0008], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [\"stable\", 0.961803], \"expected\": [\"stable\", 0.961803], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [\"stable\", 1.0], \"expected\": [\"marginal\", 1.0], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [\"stable\", 0.957792], \"expected\": [\"stable\", 0.957792], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [\"stable\", 1.0], \"expected\": [\"marginal\", 1.0], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [\"stable\", 1.0], \"expected\": [\"marginal\", 1.0], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [\"unstable\", 1.516322], \"expected\": [\"unstable\", 1.516322], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [\"stable\", 0.962778], \"expected\": [\"stable\", 0.962778], \"passed\": true}], \"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."}}