{"abstract":"True anomalies are compressed toward periapsis.","category":"Orbital propagation","checks":7,"contract":"Input [M, e] with e>1 (else None). Solve e sinh H - H = M by Newton from H=asinh(M/e) (60 iterations max, stop when step<1e-13). Return [H, nu, nu_inf] rounded to 9 with nu=2 atan(sqrt((e+1)/(e-1)) tanh(H/2)) and asymptote nu_inf=acos(-1/e).","contract_signature":"x","evaluation_group":"w2-orbital_propagation-kepler_hyperbolic","failed_approach":"Using sqrt(e^2-1) is not the half-angle factor.","family":"w2-orbital_propagation-kepler_hyperbolic-eccentricity-ratio","id":"FA-69606","implementations":{"attempt":{"sha256":"04fbfdf80a554e3dd2afef4417ab15b3769a4c744394767c9a2522d45e144133","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<=1: return None\n    H=math.asinh(M/e)\n    for _ in range(60):\n        d=(e*math.sinh(H)-H-M)/(e*math.cosh(H)-1)\n        H-=d\n        if abs(d)<1e-13: break\n    nu=2*math.atan(math.sqrt(e*e-1)*math.tanh(H/2))\n    return [round(H,9),round(nu,9),round(math.acos(-1/e),9)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('hyperbolic kepler solver [0.5, 1.2]', [0.5, 1.2], [1.097223034, 2.055391897, 2.55590711]), ('hyperbolic kepler solver [2.0, 1.5]', [2.0, 1.5], [1.61268581, 1.961096791, 2.300523983]), ('hyperbolic kepler solver [10.0, 2.5]', [10.0, 2.5], [2.296335107, 1.790713502, 1.982313173]), ('hyperbolic kepler solver [-3.0, 1.1]', [-3.0, 1.1], [-2.270719072, -2.617037695, 2.711892987]), ('hyperbolic kepler solver [0.0, 3.0]', [0.0, 3.0], [0.0, 0.0, 1.910633236]), ('hyperbolic kepler solver [50.0, 1.05]', [50.0, 1.05], [4.645312748, 2.825835675, 2.831748014]), ('hyperbolic kepler solver [-0.2, 4.0]', [-0.2, 4.0], [-0.066601003, -0.085896903, 1.823476582])], [('hyperbolic kepler solver [2.0, 1.5]', [2.0, 1.5], [1.61268581, 1.961096791, 2.300523983]), ('hyperbolic kepler solver [-3.0, 1.1]', [-3.0, 1.1], [-2.270719072, -2.617037695, 2.711892987]), ('hyperbolic kepler solver [0.0, 3.0]', [0.0, 3.0], [0.0, 0.0, 1.910633236]), ('hyperbolic kepler solver [50.0, 1.05]', [50.0, 1.05], [4.645312748, 2.825835675, 2.831748014]), ('hyperbolic kepler solver [-0.2, 4.0]', [-0.2, 4.0], [-0.066601003, -0.085896903, 1.823476582]), ('hyperbolic kepler solver [1.0, 1.0]', [1.0, 1.0], None), ('hyperbolic kepler solver [5.0, 1.8]', [5.0, 1.8], [2.078164038, 1.937063662, 2.159827297])], [('hyperbolic kepler solver [10.0, 2.5]', [10.0, 2.5], [2.296335107, 1.790713502, 1.982313173]), ('hyperbolic kepler solver [-0.2, 4.0]', [-0.2, 4.0], [-0.066601003, -0.085896903, 1.823476582]), ('hyperbolic kepler solver [1.0, 1.0]', [1.0, 1.0], None), ('hyperbolic kepler solver [5.0, 1.8]', [5.0, 1.8], [2.078164038, 1.937063662, 2.159827297]), ('hyperbolic kepler solver [0.8, 10.0]', [0.8, 10.0], [0.088759344, 0.097984305, 1.670963748]), ('hyperbolic kepler solver [0.5, 1.2]', [0.5, 1.2], [1.097223034, 2.055391897, 2.55590711]), ('hyperbolic kepler solver [2.0, 1.5]', [2.0, 1.5], [1.61268581, 1.961096791, 2.300523983])], [('hyperbolic kepler solver [-3.0, 1.1]', [-3.0, 1.1], [-2.270719072, -2.617037695, 2.711892987]), ('hyperbolic kepler solver [0.8, 10.0]', [0.8, 10.0], [0.088759344, 0.097984305, 1.670963748]), ('hyperbolic kepler solver [0.5, 1.2]', [0.5, 1.2], [1.097223034, 2.055391897, 2.55590711]), ('hyperbolic kepler solver [2.0, 1.5]', [2.0, 1.5], [1.61268581, 1.961096791, 2.300523983]), ('hyperbolic kepler solver [10.0, 2.5]', [10.0, 2.5], [2.296335107, 1.790713502, 1.982313173]), ('hyperbolic kepler solver [0.0, 3.0]', [0.0, 3.0], [0.0, 0.0, 1.910633236]), ('hyperbolic kepler solver [50.0, 1.05]', [50.0, 1.05], [4.645312748, 2.825835675, 2.831748014])], [('hyperbolic kepler solver [50.0, 1.05]', [50.0, 1.05], [4.645312748, 2.825835675, 2.831748014]), ('hyperbolic kepler solver [10.0, 2.5]', [10.0, 2.5], [2.296335107, 1.790713502, 1.982313173]), ('hyperbolic kepler solver [-3.0, 1.1]', [-3.0, 1.1], [-2.270719072, -2.617037695, 2.711892987]), ('hyperbolic kepler solver [0.0, 3.0]', [0.0, 3.0], [0.0, 0.0, 1.910633236]), ('hyperbolic kepler solver [-0.2, 4.0]', [-0.2, 4.0], [-0.066601003, -0.085896903, 1.823476582]), ('hyperbolic kepler solver [1.0, 1.0]', [1.0, 1.0], None), ('hyperbolic kepler solver [5.0, 1.8]', [5.0, 1.8], [2.078164038, 1.937063662, 2.159827297])]]\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":"215dd057768ad848a4236922543b55d70f2f72feb1dc51b192770cea17aebebb","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<=1: return None\n    H=math.asinh(M/e)\n    for _ in range(60):\n        d=(e*math.sinh(H)-H-M)/(e*math.cosh(H)-1)\n        H-=d\n        if abs(d)<1e-13: break\n    nu=2*math.atan(math.sqrt((e-1)/(e+1))*math.tanh(H/2))\n    return [round(H,9),round(nu,9),round(math.acos(-1/e),9)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('hyperbolic kepler solver [0.5, 1.2]', [0.5, 1.2], [1.097223034, 2.055391897, 2.55590711]), ('hyperbolic kepler solver [2.0, 1.5]', [2.0, 1.5], [1.61268581, 1.961096791, 2.300523983]), ('hyperbolic kepler solver [10.0, 2.5]', [10.0, 2.5], [2.296335107, 1.790713502, 1.982313173]), ('hyperbolic kepler solver [-3.0, 1.1]', [-3.0, 1.1], [-2.270719072, -2.617037695, 2.711892987]), ('hyperbolic kepler solver [0.0, 3.0]', [0.0, 3.0], [0.0, 0.0, 1.910633236]), ('hyperbolic kepler solver [50.0, 1.05]', [50.0, 1.05], [4.645312748, 2.825835675, 2.831748014]), ('hyperbolic kepler solver [-0.2, 4.0]', [-0.2, 4.0], [-0.066601003, -0.085896903, 1.823476582])], [('hyperbolic kepler solver [2.0, 1.5]', [2.0, 1.5], [1.61268581, 1.961096791, 2.300523983]), ('hyperbolic kepler solver [-3.0, 1.1]', [-3.0, 1.1], [-2.270719072, -2.617037695, 2.711892987]), ('hyperbolic kepler solver [0.0, 3.0]', [0.0, 3.0], [0.0, 0.0, 1.910633236]), ('hyperbolic kepler solver [50.0, 1.05]', [50.0, 1.05], [4.645312748, 2.825835675, 2.831748014]), ('hyperbolic kepler solver [-0.2, 4.0]', [-0.2, 4.0], [-0.066601003, -0.085896903, 1.823476582]), ('hyperbolic kepler solver [1.0, 1.0]', [1.0, 1.0], None), ('hyperbolic kepler solver [5.0, 1.8]', [5.0, 1.8], [2.078164038, 1.937063662, 2.159827297])], [('hyperbolic kepler solver [10.0, 2.5]', [10.0, 2.5], [2.296335107, 1.790713502, 1.982313173]), ('hyperbolic kepler solver [-0.2, 4.0]', [-0.2, 4.0], [-0.066601003, -0.085896903, 1.823476582]), ('hyperbolic kepler solver [1.0, 1.0]', [1.0, 1.0], None), ('hyperbolic kepler solver [5.0, 1.8]', [5.0, 1.8], [2.078164038, 1.937063662, 2.159827297]), ('hyperbolic kepler solver [0.8, 10.0]', [0.8, 10.0], [0.088759344, 0.097984305, 1.670963748]), ('hyperbolic kepler solver [0.5, 1.2]', [0.5, 1.2], [1.097223034, 2.055391897, 2.55590711]), ('hyperbolic kepler solver [2.0, 1.5]', [2.0, 1.5], [1.61268581, 1.961096791, 2.300523983])], [('hyperbolic kepler solver [-3.0, 1.1]', [-3.0, 1.1], [-2.270719072, -2.617037695, 2.711892987]), ('hyperbolic kepler solver [0.8, 10.0]', [0.8, 10.0], [0.088759344, 0.097984305, 1.670963748]), ('hyperbolic kepler solver [0.5, 1.2]', [0.5, 1.2], [1.097223034, 2.055391897, 2.55590711]), ('hyperbolic kepler solver [2.0, 1.5]', [2.0, 1.5], [1.61268581, 1.961096791, 2.300523983]), ('hyperbolic kepler solver [10.0, 2.5]', [10.0, 2.5], [2.296335107, 1.790713502, 1.982313173]), ('hyperbolic kepler solver [0.0, 3.0]', [0.0, 3.0], [0.0, 0.0, 1.910633236]), ('hyperbolic kepler solver [50.0, 1.05]', [50.0, 1.05], [4.645312748, 2.825835675, 2.831748014])], [('hyperbolic kepler solver [50.0, 1.05]', [50.0, 1.05], [4.645312748, 2.825835675, 2.831748014]), ('hyperbolic kepler solver [10.0, 2.5]', [10.0, 2.5], [2.296335107, 1.790713502, 1.982313173]), ('hyperbolic kepler solver [-3.0, 1.1]', [-3.0, 1.1], [-2.270719072, -2.617037695, 2.711892987]), ('hyperbolic kepler solver [0.0, 3.0]', [0.0, 3.0], [0.0, 0.0, 1.910633236]), ('hyperbolic kepler solver [-0.2, 4.0]', [-0.2, 4.0], [-0.066601003, -0.085896903, 1.823476582]), ('hyperbolic kepler solver [1.0, 1.0]', [1.0, 1.0], None), ('hyperbolic kepler solver [5.0, 1.8]', [5.0, 1.8], [2.078164038, 1.937063662, 2.159827297])]]\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_hyperbolic-eccentricity-ratio","generated_at":"2026-09-29T14:48:12.973582+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.","root_cause":"The factor uses sqrt((e-1)/(e+1)).","sha256":"422953faed82002ce329331c2f3ddc7dfc8d2590fb784712b888b35e4d9f1cb3","title":"Hyperbolic Kepler solver: Hyperbolic eccentricity ratio is inverted · 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":41.437,"exit_code":1,"observations":[{"actual":[1.097223034,0.639869131,2.55590711],"check":"hyperbolic kepler solver [0.5, 1.2]","expected":[1.097223034,2.055391897,2.55590711],"passed":false},{"actual":[1.61268581,1.282339475,2.300523983],"check":"hyperbolic kepler solver [2.0, 1.5]","expected":[1.61268581,1.961096791,2.300523983],"passed":false},{"actual":[2.296335107,2.160488344,1.982313173],"check":"hyperbolic kepler solver [10.0, 2.5]","expected":[2.296335107,1.790713502,1.982313173],"passed":false},{"actual":[-2.270719072,-0.713141266,2.711892987],"check":"hyperbolic kepler solver [-3.0, 1.1]","expected":[-2.270719072,-2.617037695,2.711892987],"passed":false},{"actual":[0.0,0.0,1.910633236],"check":"hyperbolic kepler solver [0.0, 3.0]","expected":[0.0,0.0,1.910633236],"passed":true},{"actual":[4.645312748,0.608617381,2.831748014],"check":"hyperbolic kepler solver [50.0, 1.05]","expected":[4.645312748,2.825835675,2.831748014],"passed":false},{"actual":[-0.066601003,-0.256434732,1.823476582],"check":"hyperbolic kepler solver [-0.2, 4.0]","expected":[-0.066601003,-0.085896903,1.823476582],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"hyperbolic kepler solver [0.5, 1.2]\", \"actual\": [1.097223034, 0.639869131, 2.55590711], \"expected\": [1.097223034, 2.055391897, 2.55590711], \"passed\": false}, {\"check\": \"hyperbolic kepler solver [2.0, 1.5]\", \"actual\": [1.61268581, 1.282339475, 2.300523983], \"expected\": [1.61268581, 1.961096791, 2.300523983], \"passed\": false}, {\"check\": \"hyperbolic kepler solver [10.0, 2.5]\", \"actual\": [2.296335107, 2.160488344, 1.982313173], \"expected\": [2.296335107, 1.790713502, 1.982313173], \"passed\": false}, {\"check\": \"hyperbolic kepler solver [-3.0, 1.1]\", \"actual\": [-2.270719072, -0.713141266, 2.711892987], \"expected\": [-2.270719072, -2.617037695, 2.711892987], \"passed\": false}, {\"check\": \"hyperbolic kepler solver [0.0, 3.0]\", \"actual\": [0.0, 0.0, 1.910633236], \"expected\": [0.0, 0.0, 1.910633236], \"passed\": true}, {\"check\": \"hyperbolic kepler solver [50.0, 1.05]\", \"actual\": [4.645312748, 0.608617381, 2.831748014], \"expected\": [4.645312748, 2.825835675, 2.831748014], \"passed\": false}, {\"check\": \"hyperbolic kepler solver [-0.2, 4.0]\", \"actual\": [-0.066601003, -0.256434732, 1.823476582], \"expected\": [-0.066601003, -0.085896903, 1.823476582], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.953,"exit_code":1,"observations":[{"actual":[1.097223034,0.298950529,2.55590711],"check":"hyperbolic kepler solver [0.5, 1.2]","expected":[1.097223034,2.055391897,2.55590711],"passed":false},{"actual":[1.61268581,0.580243592,2.300523983],"check":"hyperbolic kepler solver [2.0, 1.5]","expected":[1.61268581,1.961096791,2.300523983],"passed":false},{"actual":[2.296335107,0.982426696,1.982313173],"check":"hyperbolic kepler solver [10.0, 2.5]","expected":[2.296335107,1.790713502,1.982313173],"passed":false},{"actual":[-2.270719072,-0.351103073,2.711892987],"check":"hyperbolic kepler solver [-3.0, 1.1]","expected":[-2.270719072,-2.617037695,2.711892987],"passed":false},{"actual":[0.0,0.0,1.910633236],"check":"hyperbolic kepler solver [0.0, 3.0]","expected":[0.0,0.0,1.910633236],"passed":true},{"actual":[4.645312748,0.304039504,2.831748014],"check":"hyperbolic kepler solver [50.0, 1.05]","expected":[4.645312748,2.825835675,2.831748014],"passed":false},{"actual":[-0.066601003,-0.05155843,1.823476582],"check":"hyperbolic kepler solver [-0.2, 4.0]","expected":[-0.066601003,-0.085896903,1.823476582],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"hyperbolic kepler solver [0.5, 1.2]\", \"actual\": [1.097223034, 0.298950529, 2.55590711], \"expected\": [1.097223034, 2.055391897, 2.55590711], \"passed\": false}, {\"check\": \"hyperbolic kepler solver [2.0, 1.5]\", \"actual\": [1.61268581, 0.580243592, 2.300523983], \"expected\": [1.61268581, 1.961096791, 2.300523983], \"passed\": false}, {\"check\": \"hyperbolic kepler solver [10.0, 2.5]\", \"actual\": [2.296335107, 0.982426696, 1.982313173], \"expected\": [2.296335107, 1.790713502, 1.982313173], \"passed\": false}, {\"check\": \"hyperbolic kepler solver [-3.0, 1.1]\", \"actual\": [-2.270719072, -0.351103073, 2.711892987], \"expected\": [-2.270719072, -2.617037695, 2.711892987], \"passed\": false}, {\"check\": \"hyperbolic kepler solver [0.0, 3.0]\", \"actual\": [0.0, 0.0, 1.910633236], \"expected\": [0.0, 0.0, 1.910633236], \"passed\": true}, {\"check\": \"hyperbolic kepler solver [50.0, 1.05]\", \"actual\": [4.645312748, 0.304039504, 2.831748014], \"expected\": [4.645312748, 2.825835675, 2.831748014], \"passed\": false}, {\"check\": \"hyperbolic kepler solver [-0.2, 4.0]\", \"actual\": [-0.066601003, -0.05155843, 1.823476582], \"expected\": [-0.066601003, -0.085896903, 1.823476582], \"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."}}