{"abstract":"The spacecraft is placed at apoapsis distance at periapsis.","category":"Orbital propagation","checks":7,"contract":"Input [E, e] (radians, 0<=e<1, E any real). Return [nu, r/a] with nu = 2*atan2(sqrt(1+e) sin(E/2), sqrt(1-e) cos(E/2)) reduced to [0,2pi) and r/a = 1-e cos E, both rounded to 9 decimals.","contract_signature":"x","evaluation_group":"w2-orbital_propagation-true_anomaly","failed_approach":"Using the true anomaly in 1-e cos(nu) mixes the anomaly definitions.","family":"w2-orbital_propagation-true_anomaly-radius-ratio","id":"FA-69386","implementations":{"attempt":{"sha256":"291b596bcff2307dc4d28e41e5822e0e76ee87e9abf5cf1b9186a5facd982eff","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    E,e=x\n    nu=2*math.atan2(math.sqrt(1+e)*math.sin(E/2),math.sqrt(1-e)*math.cos(E/2))\n    nu%=2*math.pi\n    return [round(nu,9),round(1-e*math.cos(nu),9)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('true anomaly from eccentric anomaly [0.4, 0.1]', [0.4, 0.1], [0.440923623, 0.907893901]), ('true anomaly from eccentric anomaly [2.5, 0.3]', [2.5, 0.3], [2.663281246, 1.240343085]), ('true anomaly from eccentric anomaly [4.0, 0.3]', [4.0, 0.3], [3.789582293, 1.196093086]), ('true anomaly from eccentric anomaly [5.9, 0.7]', [5.9, 0.7], [5.418028431, 0.350765098]), ('true anomaly from eccentric anomaly [3.141592653589793, 0.5]', [3.141592653589793, 0.5], [3.141592654, 1.5]), ('true anomaly from eccentric anomaly [0.0, 0.9]', [0.0, 0.9], [0.0, 0.1]), ('true anomaly from eccentric anomaly [7.0, 0.2]', [7.0, 0.2], [0.860249203, 0.849219549])], [('true anomaly from eccentric anomaly [2.5, 0.3]', [2.5, 0.3], [2.663281246, 1.240343085]), ('true anomaly from eccentric anomaly [5.9, 0.7]', [5.9, 0.7], [5.418028431, 0.350765098]), ('true anomaly from eccentric anomaly [3.141592653589793, 0.5]', [3.141592653589793, 0.5], [3.141592654, 1.5]), ('true anomaly from eccentric anomaly [0.0, 0.9]', [0.0, 0.9], [0.0, 0.1]), ('true anomaly from eccentric anomaly [7.0, 0.2]', [7.0, 0.2], [0.860249203, 0.849219549]), ('true anomaly from eccentric anomaly [-1.0, 0.4]', [-1.0, 0.4], [4.892343298, 0.783879078]), ('true anomaly from eccentric anomaly [-4.0, 0.6]', [-4.0, 0.6], [2.691681202, 1.392186173])], [('true anomaly from eccentric anomaly [4.0, 0.3]', [4.0, 0.3], [3.789582293, 1.196093086]), ('true anomaly from eccentric anomaly [7.0, 0.2]', [7.0, 0.2], [0.860249203, 0.849219549]), ('true anomaly from eccentric anomaly [-1.0, 0.4]', [-1.0, 0.4], [4.892343298, 0.783879078]), ('true anomaly from eccentric anomaly [-4.0, 0.6]', [-4.0, 0.6], [2.691681202, 1.392186173]), ('true anomaly from eccentric anomaly [1.2, 0.0]', [1.2, 0.0], [1.2, 1.0]), ('true anomaly from eccentric anomaly [3.5, 0.95]', [3.5, 0.95], [3.199589845, 1.889633853]), ('true anomaly from eccentric anomaly [12.0, 0.15]', [12.0, 0.15], [5.630422415, 0.873421906])], [('true anomaly from eccentric anomaly [5.9, 0.7]', [5.9, 0.7], [5.418028431, 0.350765098]), ('true anomaly from eccentric anomaly [1.2, 0.0]', [1.2, 0.0], [1.2, 1.0]), ('true anomaly from eccentric anomaly [3.5, 0.95]', [3.5, 0.95], [3.199589845, 1.889633853]), ('true anomaly from eccentric anomaly [12.0, 0.15]', [12.0, 0.15], [5.630422415, 0.873421906]), ('true anomaly from eccentric anomaly [0.4, 0.1]', [0.4, 0.1], [0.440923623, 0.907893901]), ('true anomaly from eccentric anomaly [2.5, 0.3]', [2.5, 0.3], [2.663281246, 1.240343085]), ('true anomaly from eccentric anomaly [4.0, 0.3]', [4.0, 0.3], [3.789582293, 1.196093086])], [('true anomaly from eccentric anomaly [3.141592653589793, 0.5]', [3.141592653589793, 0.5], [3.141592654, 1.5]), ('true anomaly from eccentric anomaly [7.0, 0.2]', [7.0, 0.2], [0.860249203, 0.849219549]), ('true anomaly from eccentric anomaly [0.4, 0.1]', [0.4, 0.1], [0.440923623, 0.907893901]), ('true anomaly from eccentric anomaly [2.5, 0.3]', [2.5, 0.3], [2.663281246, 1.240343085]), ('true anomaly from eccentric anomaly [4.0, 0.3]', [4.0, 0.3], [3.789582293, 1.196093086]), ('true anomaly from eccentric anomaly [5.9, 0.7]', [5.9, 0.7], [5.418028431, 0.350765098]), ('true anomaly from eccentric anomaly [0.0, 0.9]', [0.0, 0.9], [0.0, 0.1])]]\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":"281880968aad22079f1798dc245baa017dbb0957f3190b442de689a0e91370f1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    E,e=x\n    nu=2*math.atan2(math.sqrt(1+e)*math.sin(E/2),math.sqrt(1-e)*math.cos(E/2))\n    nu%=2*math.pi\n    return [round(nu,9),round(1+e*math.cos(E),9)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('true anomaly from eccentric anomaly [0.4, 0.1]', [0.4, 0.1], [0.440923623, 0.907893901]), ('true anomaly from eccentric anomaly [2.5, 0.3]', [2.5, 0.3], [2.663281246, 1.240343085]), ('true anomaly from eccentric anomaly [4.0, 0.3]', [4.0, 0.3], [3.789582293, 1.196093086]), ('true anomaly from eccentric anomaly [5.9, 0.7]', [5.9, 0.7], [5.418028431, 0.350765098]), ('true anomaly from eccentric anomaly [3.141592653589793, 0.5]', [3.141592653589793, 0.5], [3.141592654, 1.5]), ('true anomaly from eccentric anomaly [0.0, 0.9]', [0.0, 0.9], [0.0, 0.1]), ('true anomaly from eccentric anomaly [7.0, 0.2]', [7.0, 0.2], [0.860249203, 0.849219549])], [('true anomaly from eccentric anomaly [2.5, 0.3]', [2.5, 0.3], [2.663281246, 1.240343085]), ('true anomaly from eccentric anomaly [5.9, 0.7]', [5.9, 0.7], [5.418028431, 0.350765098]), ('true anomaly from eccentric anomaly [3.141592653589793, 0.5]', [3.141592653589793, 0.5], [3.141592654, 1.5]), ('true anomaly from eccentric anomaly [0.0, 0.9]', [0.0, 0.9], [0.0, 0.1]), ('true anomaly from eccentric anomaly [7.0, 0.2]', [7.0, 0.2], [0.860249203, 0.849219549]), ('true anomaly from eccentric anomaly [-1.0, 0.4]', [-1.0, 0.4], [4.892343298, 0.783879078]), ('true anomaly from eccentric anomaly [-4.0, 0.6]', [-4.0, 0.6], [2.691681202, 1.392186173])], [('true anomaly from eccentric anomaly [4.0, 0.3]', [4.0, 0.3], [3.789582293, 1.196093086]), ('true anomaly from eccentric anomaly [7.0, 0.2]', [7.0, 0.2], [0.860249203, 0.849219549]), ('true anomaly from eccentric anomaly [-1.0, 0.4]', [-1.0, 0.4], [4.892343298, 0.783879078]), ('true anomaly from eccentric anomaly [-4.0, 0.6]', [-4.0, 0.6], [2.691681202, 1.392186173]), ('true anomaly from eccentric anomaly [1.2, 0.0]', [1.2, 0.0], [1.2, 1.0]), ('true anomaly from eccentric anomaly [3.5, 0.95]', [3.5, 0.95], [3.199589845, 1.889633853]), ('true anomaly from eccentric anomaly [12.0, 0.15]', [12.0, 0.15], [5.630422415, 0.873421906])], [('true anomaly from eccentric anomaly [5.9, 0.7]', [5.9, 0.7], [5.418028431, 0.350765098]), ('true anomaly from eccentric anomaly [1.2, 0.0]', [1.2, 0.0], [1.2, 1.0]), ('true anomaly from eccentric anomaly [3.5, 0.95]', [3.5, 0.95], [3.199589845, 1.889633853]), ('true anomaly from eccentric anomaly [12.0, 0.15]', [12.0, 0.15], [5.630422415, 0.873421906]), ('true anomaly from eccentric anomaly [0.4, 0.1]', [0.4, 0.1], [0.440923623, 0.907893901]), ('true anomaly from eccentric anomaly [2.5, 0.3]', [2.5, 0.3], [2.663281246, 1.240343085]), ('true anomaly from eccentric anomaly [4.0, 0.3]', [4.0, 0.3], [3.789582293, 1.196093086])], [('true anomaly from eccentric anomaly [3.141592653589793, 0.5]', [3.141592653589793, 0.5], [3.141592654, 1.5]), ('true anomaly from eccentric anomaly [7.0, 0.2]', [7.0, 0.2], [0.860249203, 0.849219549]), ('true anomaly from eccentric anomaly [0.4, 0.1]', [0.4, 0.1], [0.440923623, 0.907893901]), ('true anomaly from eccentric anomaly [2.5, 0.3]', [2.5, 0.3], [2.663281246, 1.240343085]), ('true anomaly from eccentric anomaly [4.0, 0.3]', [4.0, 0.3], [3.789582293, 1.196093086]), ('true anomaly from eccentric anomaly [5.9, 0.7]', [5.9, 0.7], [5.418028431, 0.350765098]), ('true anomaly from eccentric anomaly [0.0, 0.9]', [0.0, 0.9], [0.0, 0.1])]]\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-true_anomaly-radius-ratio","generated_at":"2026-09-29T14:48:10.914124+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":"r/a is computed as 1+e cos E.","sha256":"3aefa80248355cb8f9560cea3c90bd4eee6e7012e1e8d2dd281aa7f4628c585b","title":"True anomaly from eccentric anomaly: Radius ratio uses the wrong sign on the eccentric term · 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.764,"exit_code":1,"observations":[{"actual":[0.440923623,0.909564213],"check":"true anomaly from eccentric anomaly [0.4, 0.1]","expected":[0.440923623,0.907893901],"passed":false},{"actual":[2.663281246,1.266332024],"check":"true anomaly from eccentric anomaly [2.5, 0.3]","expected":[2.663281246,1.240343085],"passed":false},{"actual":[3.789582293,1.23918965],"check":"true anomaly from eccentric anomaly [4.0, 0.3]","expected":[3.789582293,1.196093086],"passed":false},{"actual":[5.418028431,0.546035503],"check":"true anomaly from eccentric anomaly [5.9, 0.7]","expected":[5.418028431,0.350765098],"passed":false},{"actual":[3.141592654,1.5],"check":"true anomaly from eccentric anomaly [3.141592653589793, 0.5]","expected":[3.141592654,1.5],"passed":true},{"actual":[0.0,0.1],"check":"true anomaly from eccentric anomaly [0.0, 0.9]","expected":[0.0,0.1],"passed":true},{"actual":[0.860249203,0.869550282],"check":"true anomaly from eccentric anomaly [7.0, 0.2]","expected":[0.860249203,0.849219549],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"true anomaly from eccentric anomaly [0.4, 0.1]\", \"actual\": [0.440923623, 0.909564213], \"expected\": [0.440923623, 0.907893901], \"passed\": false}, {\"check\": \"true anomaly from eccentric anomaly [2.5, 0.3]\", \"actual\": [2.663281246, 1.266332024], \"expected\": [2.663281246, 1.240343085], \"passed\": false}, {\"check\": \"true anomaly from eccentric anomaly [4.0, 0.3]\", \"actual\": [3.789582293, 1.23918965], \"expected\": [3.789582293, 1.196093086], \"passed\": false}, {\"check\": \"true anomaly from eccentric anomaly [5.9, 0.7]\", \"actual\": [5.418028431, 0.546035503], \"expected\": [5.418028431, 0.350765098], \"passed\": false}, {\"check\": \"true anomaly from eccentric anomaly [3.141592653589793, 0.5]\", \"actual\": [3.141592654, 1.5], \"expected\": [3.141592654, 1.5], \"passed\": true}, {\"check\": \"true anomaly from eccentric anomaly [0.0, 0.9]\", \"actual\": [0.0, 0.1], \"expected\": [0.0, 0.1], \"passed\": true}, {\"check\": \"true anomaly from eccentric anomaly [7.0, 0.2]\", \"actual\": [0.860249203, 0.869550282], \"expected\": [0.860249203, 0.849219549], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.985,"exit_code":1,"observations":[{"actual":[0.440923623,1.092106099],"check":"true anomaly from eccentric anomaly [0.4, 0.1]","expected":[0.440923623,0.907893901],"passed":false},{"actual":[2.663281246,0.759656915],"check":"true anomaly from eccentric anomaly [2.5, 0.3]","expected":[2.663281246,1.240343085],"passed":false},{"actual":[3.789582293,0.803906914],"check":"true anomaly from eccentric anomaly [4.0, 0.3]","expected":[3.789582293,1.196093086],"passed":false},{"actual":[5.418028431,1.649234902],"check":"true anomaly from eccentric anomaly [5.9, 0.7]","expected":[5.418028431,0.350765098],"passed":false},{"actual":[3.141592654,0.5],"check":"true anomaly from eccentric anomaly [3.141592653589793, 0.5]","expected":[3.141592654,1.5],"passed":false},{"actual":[0.0,1.9],"check":"true anomaly from eccentric anomaly [0.0, 0.9]","expected":[0.0,0.1],"passed":false},{"actual":[0.860249203,1.150780451],"check":"true anomaly from eccentric anomaly [7.0, 0.2]","expected":[0.860249203,0.849219549],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"true anomaly from eccentric anomaly [0.4, 0.1]\", \"actual\": [0.440923623, 1.092106099], \"expected\": [0.440923623, 0.907893901], \"passed\": false}, {\"check\": \"true anomaly from eccentric anomaly [2.5, 0.3]\", \"actual\": [2.663281246, 0.759656915], \"expected\": [2.663281246, 1.240343085], \"passed\": false}, {\"check\": \"true anomaly from eccentric anomaly [4.0, 0.3]\", \"actual\": [3.789582293, 0.803906914], \"expected\": [3.789582293, 1.196093086], \"passed\": false}, {\"check\": \"true anomaly from eccentric anomaly [5.9, 0.7]\", \"actual\": [5.418028431, 1.649234902], \"expected\": [5.418028431, 0.350765098], \"passed\": false}, {\"check\": \"true anomaly from eccentric anomaly [3.141592653589793, 0.5]\", \"actual\": [3.141592654, 0.5], \"expected\": [3.141592654, 1.5], \"passed\": false}, {\"check\": \"true anomaly from eccentric anomaly [0.0, 0.9]\", \"actual\": [0.0, 1.9], \"expected\": [0.0, 0.1], \"passed\": false}, {\"check\": \"true anomaly from eccentric anomaly [7.0, 0.2]\", \"actual\": [0.860249203, 1.150780451], \"expected\": [0.860249203, 0.849219549], \"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."}}