{"abstract":"Overdamped systems whose fast root leaves the unit disc are reported stable.","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":"Taking the minimum reports the least dangerous mode.","family":"w2-physics_integrator_stability-explicit-euler-stability-dominant-root-selection","id":"FA-86911","implementations":{"attempt":{"sha256":"d16acf06736616a0efe6c213edc9ff8257ec0bb6d38e9f96dbef34f7802e6ad7","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 = min(abs(1 + dt * lam) for lam in lams)\n    if abs(amp - 1) <= 1e-9:\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.179, 7.263, 0.4], ['unstable', 1.464122]], [[0.0, 3.279, 2.912, 0.2], ['marginal', 1.0]], [[0.0, 2.0, 1.0, 0.1], ['marginal', 1.0]], [[0.0, 1.112, 6.445, 0.8], ['unstable', 3.636691]], [[2.156, 1.67, 6.019, 0.8], ['unstable', 1.560685]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[0.0, 1.812, 5.536, 0.4], ['marginal', 1.0]], [[49.596, 2.586, 6.61, 0.2], ['unstable', 1.120684]]], [[[0.0, 0.677, 1.41, 1.0], ['unstable', 1.082718]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[0.0, 0.317, 0.575, 0.05], ['marginal', 1.0]], [[0.0, 2.0, 1.0, 0.1], ['marginal', 1.0]], [[54.495, 0.307, 4.164, 0.1], ['unstable', 1.191104]], [[0.178, 0.403, 1.4, 0.05], ['stable', 0.993391]], [[12.654, 0.648, 7.929, 0.8], ['unstable', 7.279383]], [[7.713, 0.795, 5.016, 0.4], ['stable', 0.462028]]], [[[0.0, 2.0, 1.0, 0.1], ['marginal', 1.0]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[0.0, 0.322, 4.742, 1.0], ['unstable', 13.726708]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 0.737, 2.778, 0.05], ['marginal', 1.0]], [[0.0, 0.897, 5.697, 0.4], ['unstable', 1.540468]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[23.145, 2.844, 4.936, 0.1], ['stable', 0.952798]]], [[[0.0, 1.715, 7.493, 0.01], ['marginal', 1.0]], [[0.0, 2.0, 1.0, 0.1], ['marginal', 1.0]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[0.0, 1.558, 4.258, 0.8], ['unstable', 1.186393]], [[0.0, 0.821, 6.576, 1.0], ['unstable', 7.009744]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[0.0, 1.1, 4.516, 0.1], ['marginal', 1.0]]], [[[12.171, 2.869, 0.163, 0.8], ['unstable', 1.915616]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[0.0, 0.76, 4.988, 1.0], ['unstable', 5.563158]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 2.0, 1.0, 0.1], ['marginal', 1.0]], [[12.144, 0.347, 6.718, 0.8], ['unstable', 12.873758]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[0.0, 3.191, 7.686, 0.01], ['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":"a24ccd03e1ad16513a2d8d1dc9e822549f85ed85709ace2b0a5c77a5ba11683a","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 = abs(1 + dt * lams[0])\n    if abs(amp - 1) <= 1e-9:\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.179, 7.263, 0.4], ['unstable', 1.464122]], [[0.0, 3.279, 2.912, 0.2], ['marginal', 1.0]], [[0.0, 2.0, 1.0, 0.1], ['marginal', 1.0]], [[0.0, 1.112, 6.445, 0.8], ['unstable', 3.636691]], [[2.156, 1.67, 6.019, 0.8], ['unstable', 1.560685]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[0.0, 1.812, 5.536, 0.4], ['marginal', 1.0]], [[49.596, 2.586, 6.61, 0.2], ['unstable', 1.120684]]], [[[0.0, 0.677, 1.41, 1.0], ['unstable', 1.082718]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[0.0, 0.317, 0.575, 0.05], ['marginal', 1.0]], [[0.0, 2.0, 1.0, 0.1], ['marginal', 1.0]], [[54.495, 0.307, 4.164, 0.1], ['unstable', 1.191104]], [[0.178, 0.403, 1.4, 0.05], ['stable', 0.993391]], [[12.654, 0.648, 7.929, 0.8], ['unstable', 7.279383]], [[7.713, 0.795, 5.016, 0.4], ['stable', 0.462028]]], [[[0.0, 2.0, 1.0, 0.1], ['marginal', 1.0]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[0.0, 0.322, 4.742, 1.0], ['unstable', 13.726708]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 0.737, 2.778, 0.05], ['marginal', 1.0]], [[0.0, 0.897, 5.697, 0.4], ['unstable', 1.540468]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[23.145, 2.844, 4.936, 0.1], ['stable', 0.952798]]], [[[0.0, 1.715, 7.493, 0.01], ['marginal', 1.0]], [[0.0, 2.0, 1.0, 0.1], ['marginal', 1.0]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[0.0, 1.558, 4.258, 0.8], ['unstable', 1.186393]], [[0.0, 0.821, 6.576, 1.0], ['unstable', 7.009744]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[0.0, 1.1, 4.516, 0.1], ['marginal', 1.0]]], [[[12.171, 2.869, 0.163, 0.8], ['unstable', 1.915616]], [[0.0, 1.0, 1.0, 0.5], ['marginal', 1.0]], [[0.0, 0.76, 4.988, 1.0], ['unstable', 5.563158]], [[1.0, 1.0, 3.0, 0.1], ['stable', 0.961803]], [[0.0, 2.0, 1.0, 0.1], ['marginal', 1.0]], [[12.144, 0.347, 6.718, 0.8], ['unstable', 12.873758]], [[0.0, 1.0, 2.0008, 1.0], ['unstable', 1.0008]], [[0.0, 3.191, 7.686, 0.01], ['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-dominant-root-selection","generated_at":"2026-09-29T14:50:53.993493+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":"Only lams[0] is used for the amplification factor.","sha256":"9d34f91f111ff40c1d9349c512d9ed2fd2ef0db5b9f781a946b2fbea701f4273","title":"Stability test checks only the first characteristic root · 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.956,"exit_code":1,"observations":[{"actual":["marginal",1.0],"check":"case 0","expected":["unstable",1.464122],"passed":false},{"actual":["stable",0.822385],"check":"case 1","expected":["marginal",1.0],"passed":false},{"actual":["stable",0.95],"check":"case 2","expected":["marginal",1.0],"passed":false},{"actual":["marginal",1.0],"check":"case 3","expected":["unstable",3.636691],"passed":false},{"actual":["stable",0.677332],"check":"case 4","expected":["unstable",1.560685],"passed":false},{"actual":["stable",0.5],"check":"case 5","expected":["marginal",1.0],"passed":false},{"actual":["stable",0.222075],"check":"case 6","expected":["marginal",1.0],"passed":false},{"actual":["unstable",1.120684],"check":"case 7","expected":["unstable",1.120684],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [\"marginal\", 1.0], \"expected\": [\"unstable\", 1.464122], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [\"stable\", 0.822385], \"expected\": [\"marginal\", 1.0], \"passed\": false}, {\"check\": \"case 2\", \"actual\": [\"stable\", 0.95], \"expected\": [\"marginal\", 1.0], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [\"marginal\", 1.0], \"expected\": [\"unstable\", 3.636691], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [\"stable\", 0.677332], \"expected\": [\"unstable\", 1.560685], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [\"stable\", 0.5], \"expected\": [\"marginal\", 1.0], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [\"stable\", 0.222075], \"expected\": [\"marginal\", 1.0], \"passed\": false}, {\"check\": \"case 7\", \"actual\": [\"unstable\", 1.120684], \"expected\": [\"unstable\", 1.120684], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.701,"exit_code":1,"observations":[{"actual":["marginal",1.0],"check":"case 0","expected":["unstable",1.464122],"passed":false},{"actual":["marginal",1.0],"check":"case 1","expected":["marginal",1.0],"passed":true},{"actual":["marginal",1.0],"check":"case 2","expected":["marginal",1.0],"passed":true},{"actual":["marginal",1.0],"check":"case 3","expected":["unstable",3.636691],"passed":false},{"actual":["stable",0.677332],"check":"case 4","expected":["unstable",1.560685],"passed":false},{"actual":["marginal",1.0],"check":"case 5","expected":["marginal",1.0],"passed":true},{"actual":["marginal",1.0],"check":"case 6","expected":["marginal",1.0],"passed":true},{"actual":["unstable",1.120684],"check":"case 7","expected":["unstable",1.120684],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [\"marginal\", 1.0], \"expected\": [\"unstable\", 1.464122], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [\"marginal\", 1.0], \"expected\": [\"marginal\", 1.0], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [\"marginal\", 1.0], \"expected\": [\"marginal\", 1.0], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [\"marginal\", 1.0], \"expected\": [\"unstable\", 3.636691], \"passed\": false}, {\"check\": \"case 4\", \"actual\": [\"stable\", 0.677332], \"expected\": [\"unstable\", 1.560685], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [\"marginal\", 1.0], \"expected\": [\"marginal\", 1.0], \"passed\": true}, {\"check\": \"case 6\", \"actual\": [\"marginal\", 1.0], \"expected\": [\"marginal\", 1.0], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [\"unstable\", 1.120684], \"expected\": [\"unstable\", 1.120684], \"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."}}