{"abstract":"Eccentric anomalies are only good to about three decimals.","category":"Orbital propagation","checks":7,"contract":"Input [M, e] (radians). Return None unless 0<=e<1. Reduce M into [0,2pi), start Newton at M (e<0.8) or pi, iterate E -= (E-e sinE-M)/(1-e cosE) up to 50 times until the step is below 1e-13, and return E rounded to 9 decimals.","evaluation_group":"w2-orbital_propagation-kepler_elliptic","failed_approach":"A 1e-6 tolerance tested before applying the step still returns the stale iterate.","family":"w2-orbital_propagation-kepler_elliptic-convergence-tolerance","id":"FA-69351","implementations":{"attempt":{"sha256":"934a86a8115b11c9de81dcdcf1ac3a20502c99cb11a75b38665ea485eaf1a6f8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    M,e=x\n    if e<0 or e>=1: return None\n    M=math.fmod(M,2*math.pi)\n    if M<0: M+=2*math.pi\n    E=M if e<0.8 else math.pi\n    for _ in range(50):\n        d=(E-e*math.sin(E)-M)/(1-e*math.cos(E))\n        if abs(d)<1e-6: break\n        E-=d\n    return round(E,9)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('elliptic kepler solver [0.05, 0.97]', [0.05, 0.97], 0.588295814), ('elliptic kepler solver [0.5, 0.1]', [0.5, 0.1], 0.552479987), ('elliptic kepler solver [2.0, 0.3]', [2.0, 0.3], 2.236031495), ('elliptic kepler solver [5.5, 0.6]', [5.5, 0.6], 4.911902084), ('elliptic kepler solver [3.0, 0.99]', [3.0, 0.99], 3.070410669), ('elliptic kepler solver [-1.0, 0.2]', [-1.0, 0.2], 5.097861103), ('elliptic kepler solver [7.5, 0.45]', [7.5, 0.45], 1.66482677)], [('elliptic kepler solver [7.5, 0.45]', [7.5, 0.45], 1.66482677), ('elliptic kepler solver [0.05, 0.97]', [0.05, 0.97], 0.588295814), ('elliptic kepler solver [3.0, 0.99]', [3.0, 0.99], 3.070410669), ('elliptic kepler solver [-1.0, 0.2]', [-1.0, 0.2], 5.097861103), ('elliptic kepler solver [20.0, 0.05]', [20.0, 0.05], 1.196991311), ('elliptic kepler solver [0.0, 0.7]', [0.0, 0.7], 0.0), ('elliptic kepler solver [3.141592653589793, 0.5]', [3.141592653589793, 0.5], 3.141592654)], [('elliptic kepler solver [0.2, 0.85]', [0.2, 0.85], 0.823499414), ('elliptic kepler solver [7.5, 0.45]', [7.5, 0.45], 1.66482677), ('elliptic kepler solver [20.0, 0.05]', [20.0, 0.05], 1.196991311), ('elliptic kepler solver [0.0, 0.7]', [0.0, 0.7], 0.0), ('elliptic kepler solver [3.141592653589793, 0.5]', [3.141592653589793, 0.5], 3.141592654), ('elliptic kepler solver [1.0, 1.0]', [1.0, 1.0], None), ('elliptic kepler solver [1.0, -0.1]', [1.0, -0.1], None)], [('elliptic kepler solver [6.0, 0.93]', [6.0, 0.93], 5.162716882), ('elliptic kepler solver [3.141592653589793, 0.5]', [3.141592653589793, 0.5], 3.141592654), ('elliptic kepler solver [1.0, 1.0]', [1.0, 1.0], None), ('elliptic kepler solver [1.0, -0.1]', [1.0, -0.1], None), ('elliptic kepler solver [0.2, 0.85]', [0.2, 0.85], 0.823499414), ('elliptic kepler solver [-8.0, 0.75]', [-8.0, 0.75], 3.999173912), ('elliptic kepler solver [1.3, 0.0]', [1.3, 0.0], 1.3)], [('elliptic kepler solver [0.05, 0.97]', [0.05, 0.97], 0.588295814), ('elliptic kepler solver [-8.0, 0.75]', [-8.0, 0.75], 3.999173912), ('elliptic kepler solver [0.2, 0.85]', [0.2, 0.85], 0.823499414), ('elliptic kepler solver [6.0, 0.93]', [6.0, 0.93], 5.162716882), ('elliptic kepler solver [1.3, 0.0]', [1.3, 0.0], 1.3), ('elliptic kepler solver [0.5, 0.1]', [0.5, 0.1], 0.552479987), ('elliptic kepler solver [2.0, 0.3]', [2.0, 0.3], 2.236031495)]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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":"0fb3057949d61e3522bb07ffeca8d60bb4676b1d53d65e539baa1d4a9590c11d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    M,e=x\n    if e<0 or e>=1: return None\n    M=math.fmod(M,2*math.pi)\n    if M<0: M+=2*math.pi\n    E=M if e<0.8 else math.pi\n    for _ in range(50):\n        d=(E-e*math.sin(E)-M)/(1-e*math.cos(E))\n        E-=d\n        if abs(d)<1e-3: break\n    return round(E,9)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('elliptic kepler solver [0.05, 0.97]', [0.05, 0.97], 0.588295814), ('elliptic kepler solver [0.5, 0.1]', [0.5, 0.1], 0.552479987), ('elliptic kepler solver [2.0, 0.3]', [2.0, 0.3], 2.236031495), ('elliptic kepler solver [5.5, 0.6]', [5.5, 0.6], 4.911902084), ('elliptic kepler solver [3.0, 0.99]', [3.0, 0.99], 3.070410669), ('elliptic kepler solver [-1.0, 0.2]', [-1.0, 0.2], 5.097861103), ('elliptic kepler solver [7.5, 0.45]', [7.5, 0.45], 1.66482677)], [('elliptic kepler solver [7.5, 0.45]', [7.5, 0.45], 1.66482677), ('elliptic kepler solver [0.05, 0.97]', [0.05, 0.97], 0.588295814), ('elliptic kepler solver [3.0, 0.99]', [3.0, 0.99], 3.070410669), ('elliptic kepler solver [-1.0, 0.2]', [-1.0, 0.2], 5.097861103), ('elliptic kepler solver [20.0, 0.05]', [20.0, 0.05], 1.196991311), ('elliptic kepler solver [0.0, 0.7]', [0.0, 0.7], 0.0), ('elliptic kepler solver [3.141592653589793, 0.5]', [3.141592653589793, 0.5], 3.141592654)], [('elliptic kepler solver [0.2, 0.85]', [0.2, 0.85], 0.823499414), ('elliptic kepler solver [7.5, 0.45]', [7.5, 0.45], 1.66482677), ('elliptic kepler solver [20.0, 0.05]', [20.0, 0.05], 1.196991311), ('elliptic kepler solver [0.0, 0.7]', [0.0, 0.7], 0.0), ('elliptic kepler solver [3.141592653589793, 0.5]', [3.141592653589793, 0.5], 3.141592654), ('elliptic kepler solver [1.0, 1.0]', [1.0, 1.0], None), ('elliptic kepler solver [1.0, -0.1]', [1.0, -0.1], None)], [('elliptic kepler solver [6.0, 0.93]', [6.0, 0.93], 5.162716882), ('elliptic kepler solver [3.141592653589793, 0.5]', [3.141592653589793, 0.5], 3.141592654), ('elliptic kepler solver [1.0, 1.0]', [1.0, 1.0], None), ('elliptic kepler solver [1.0, -0.1]', [1.0, -0.1], None), ('elliptic kepler solver [0.2, 0.85]', [0.2, 0.85], 0.823499414), ('elliptic kepler solver [-8.0, 0.75]', [-8.0, 0.75], 3.999173912), ('elliptic kepler solver [1.3, 0.0]', [1.3, 0.0], 1.3)], [('elliptic kepler solver [0.05, 0.97]', [0.05, 0.97], 0.588295814), ('elliptic kepler solver [-8.0, 0.75]', [-8.0, 0.75], 3.999173912), ('elliptic kepler solver [0.2, 0.85]', [0.2, 0.85], 0.823499414), ('elliptic kepler solver [6.0, 0.93]', [6.0, 0.93], 5.162716882), ('elliptic kepler solver [1.3, 0.0]', [1.3, 0.0], 1.3), ('elliptic kepler solver [0.5, 0.1]', [0.5, 0.1], 0.552479987), ('elliptic kepler solver [2.0, 0.3]', [2.0, 0.3], 2.236031495)]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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"},"fixed":{"sha256":"297f7d5315613022a1f01c0e0428c7f1862461d22db031dbd7c3244f1b83efa6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    M,e=x\n    if e<0 or e>=1: return None\n    M=math.fmod(M,2*math.pi)\n    if M<0: M+=2*math.pi\n    E=M if e<0.8 else math.pi\n    for _ in range(50):\n        d=(E-e*math.sin(E)-M)/(1-e*math.cos(E))\n        E-=d\n        if abs(d)<1e-13: break\n    return round(E,9)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('elliptic kepler solver [0.05, 0.97]', [0.05, 0.97], 0.588295814), ('elliptic kepler solver [0.5, 0.1]', [0.5, 0.1], 0.552479987), ('elliptic kepler solver [2.0, 0.3]', [2.0, 0.3], 2.236031495), ('elliptic kepler solver [5.5, 0.6]', [5.5, 0.6], 4.911902084), ('elliptic kepler solver [3.0, 0.99]', [3.0, 0.99], 3.070410669), ('elliptic kepler solver [-1.0, 0.2]', [-1.0, 0.2], 5.097861103), ('elliptic kepler solver [7.5, 0.45]', [7.5, 0.45], 1.66482677)], [('elliptic kepler solver [7.5, 0.45]', [7.5, 0.45], 1.66482677), ('elliptic kepler solver [0.05, 0.97]', [0.05, 0.97], 0.588295814), ('elliptic kepler solver [3.0, 0.99]', [3.0, 0.99], 3.070410669), ('elliptic kepler solver [-1.0, 0.2]', [-1.0, 0.2], 5.097861103), ('elliptic kepler solver [20.0, 0.05]', [20.0, 0.05], 1.196991311), ('elliptic kepler solver [0.0, 0.7]', [0.0, 0.7], 0.0), ('elliptic kepler solver [3.141592653589793, 0.5]', [3.141592653589793, 0.5], 3.141592654)], [('elliptic kepler solver [0.2, 0.85]', [0.2, 0.85], 0.823499414), ('elliptic kepler solver [7.5, 0.45]', [7.5, 0.45], 1.66482677), ('elliptic kepler solver [20.0, 0.05]', [20.0, 0.05], 1.196991311), ('elliptic kepler solver [0.0, 0.7]', [0.0, 0.7], 0.0), ('elliptic kepler solver [3.141592653589793, 0.5]', [3.141592653589793, 0.5], 3.141592654), ('elliptic kepler solver [1.0, 1.0]', [1.0, 1.0], None), ('elliptic kepler solver [1.0, -0.1]', [1.0, -0.1], None)], [('elliptic kepler solver [6.0, 0.93]', [6.0, 0.93], 5.162716882), ('elliptic kepler solver [3.141592653589793, 0.5]', [3.141592653589793, 0.5], 3.141592654), ('elliptic kepler solver [1.0, 1.0]', [1.0, 1.0], None), ('elliptic kepler solver [1.0, -0.1]', [1.0, -0.1], None), ('elliptic kepler solver [0.2, 0.85]', [0.2, 0.85], 0.823499414), ('elliptic kepler solver [-8.0, 0.75]', [-8.0, 0.75], 3.999173912), ('elliptic kepler solver [1.3, 0.0]', [1.3, 0.0], 1.3)], [('elliptic kepler solver [0.05, 0.97]', [0.05, 0.97], 0.588295814), ('elliptic kepler solver [-8.0, 0.75]', [-8.0, 0.75], 3.999173912), ('elliptic kepler solver [0.2, 0.85]', [0.2, 0.85], 0.823499414), ('elliptic kepler solver [6.0, 0.93]', [6.0, 0.93], 5.162716882), ('elliptic kepler solver [1.3, 0.0]', [1.3, 0.0], 1.3), ('elliptic kepler solver [0.5, 0.1]', [0.5, 0.1], 0.552479987), ('elliptic kepler solver [2.0, 0.3]', [2.0, 0.3], 2.236031495)]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, 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 toy two-body model with stipulated constants and conventions; not flight dynamics software or a validated SGP4 implementation. 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-orbital_propagation-kepler_elliptic-convergence-tolerance","generated_at":"2026-09-29T14:48:10.658583+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Orbit determination and mission planning chain many small conversions; one wrong branch or unit silently moves a spacecraft by kilometres.","repair":"Iterate until the step is below 1e-13.","root_cause":"The convergence tolerance is 1e-3 radians.","sha256":"9a8abfe0fb0cdc208775f9565c0b02990b51d89d52fee2f6cdf42516f539949c","title":"Elliptic Kepler solver: Newton loop stops at a millimetre-scale tolerance · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.517,"exit_code":1,"observations":[{"actual":0.588296388,"check":"elliptic kepler solver [0.05, 0.97]","expected":0.588295814,"passed":false},{"actual":0.552479987,"check":"elliptic kepler solver [0.5, 0.1]","expected":0.552479987,"passed":true},{"actual":2.236031495,"check":"elliptic kepler solver [2.0, 0.3]","expected":2.236031495,"passed":true},{"actual":4.911902084,"check":"elliptic kepler solver [5.5, 0.6]","expected":4.911902084,"passed":true},{"actual":3.070410669,"check":"elliptic kepler solver [3.0, 0.99]","expected":3.070410669,"passed":true},{"actual":5.097861103,"check":"elliptic kepler solver [-1.0, 0.2]","expected":5.097861103,"passed":true},{"actual":1.66482684,"check":"elliptic kepler solver [7.5, 0.45]","expected":1.66482677,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"elliptic kepler solver [0.05, 0.97]\", \"actual\": 0.588296388, \"expected\": 0.588295814, \"passed\": false}, {\"check\": \"elliptic kepler solver [0.5, 0.1]\", \"actual\": 0.552479987, \"expected\": 0.552479987, \"passed\": true}, {\"check\": \"elliptic kepler solver [2.0, 0.3]\", \"actual\": 2.236031495, \"expected\": 2.236031495, \"passed\": true}, {\"check\": \"elliptic kepler solver [5.5, 0.6]\", \"actual\": 4.911902084, \"expected\": 4.911902084, \"passed\": true}, {\"check\": \"elliptic kepler solver [3.0, 0.99]\", \"actual\": 3.070410669, \"expected\": 3.070410669, \"passed\": true}, {\"check\": \"elliptic kepler solver [-1.0, 0.2]\", \"actual\": 5.097861103, \"expected\": 5.097861103, \"passed\": true}, {\"check\": \"elliptic kepler solver [7.5, 0.45]\", \"actual\": 1.66482684, \"expected\": 1.66482677, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.574,"exit_code":1,"observations":[{"actual":0.588296388,"check":"elliptic kepler solver [0.05, 0.97]","expected":0.588295814,"passed":false},{"actual":0.552479987,"check":"elliptic kepler solver [0.5, 0.1]","expected":0.552479987,"passed":true},{"actual":2.236031495,"check":"elliptic kepler solver [2.0, 0.3]","expected":2.236031495,"passed":true},{"actual":4.911902084,"check":"elliptic kepler solver [5.5, 0.6]","expected":4.911902084,"passed":true},{"actual":3.070410669,"check":"elliptic kepler solver [3.0, 0.99]","expected":3.070410669,"passed":true},{"actual":5.097861103,"check":"elliptic kepler solver [-1.0, 0.2]","expected":5.097861103,"passed":true},{"actual":1.66482684,"check":"elliptic kepler solver [7.5, 0.45]","expected":1.66482677,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"elliptic kepler solver [0.05, 0.97]\", \"actual\": 0.588296388, \"expected\": 0.588295814, \"passed\": false}, {\"check\": \"elliptic kepler solver [0.5, 0.1]\", \"actual\": 0.552479987, \"expected\": 0.552479987, \"passed\": true}, {\"check\": \"elliptic kepler solver [2.0, 0.3]\", \"actual\": 2.236031495, \"expected\": 2.236031495, \"passed\": true}, {\"check\": \"elliptic kepler solver [5.5, 0.6]\", \"actual\": 4.911902084, \"expected\": 4.911902084, \"passed\": true}, {\"check\": \"elliptic kepler solver [3.0, 0.99]\", \"actual\": 3.070410669, \"expected\": 3.070410669, \"passed\": true}, {\"check\": \"elliptic kepler solver [-1.0, 0.2]\", \"actual\": 5.097861103, \"expected\": 5.097861103, \"passed\": true}, {\"check\": \"elliptic kepler solver [7.5, 0.45]\", \"actual\": 1.66482684, \"expected\": 1.66482677, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.324,"exit_code":0,"observations":[{"actual":0.588295814,"check":"elliptic kepler solver [0.05, 0.97]","expected":0.588295814,"passed":true},{"actual":0.552479987,"check":"elliptic kepler solver [0.5, 0.1]","expected":0.552479987,"passed":true},{"actual":2.236031495,"check":"elliptic kepler solver [2.0, 0.3]","expected":2.236031495,"passed":true},{"actual":4.911902084,"check":"elliptic kepler solver [5.5, 0.6]","expected":4.911902084,"passed":true},{"actual":3.070410669,"check":"elliptic kepler solver [3.0, 0.99]","expected":3.070410669,"passed":true},{"actual":5.097861103,"check":"elliptic kepler solver [-1.0, 0.2]","expected":5.097861103,"passed":true},{"actual":1.66482677,"check":"elliptic kepler solver [7.5, 0.45]","expected":1.66482677,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"elliptic kepler solver [0.05, 0.97]\", \"actual\": 0.588295814, \"expected\": 0.588295814, \"passed\": true}, {\"check\": \"elliptic kepler solver [0.5, 0.1]\", \"actual\": 0.552479987, \"expected\": 0.552479987, \"passed\": true}, {\"check\": \"elliptic kepler solver [2.0, 0.3]\", \"actual\": 2.236031495, \"expected\": 2.236031495, \"passed\": true}, {\"check\": \"elliptic kepler solver [5.5, 0.6]\", \"actual\": 4.911902084, \"expected\": 4.911902084, \"passed\": true}, {\"check\": \"elliptic kepler solver [3.0, 0.99]\", \"actual\": 3.070410669, \"expected\": 3.070410669, \"passed\": true}, {\"check\": \"elliptic kepler solver [-1.0, 0.2]\", \"actual\": 5.097861103, \"expected\": 5.097861103, \"passed\": true}, {\"check\": \"elliptic kepler solver [7.5, 0.45]\", \"actual\": 1.66482677, \"expected\": 1.66482677, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}