{"abstract":"Flyby bending is underestimated by half.","category":"Orbital propagation","checks":7,"contract":"Input [r, vinf, mu]: circular parking radius and required hyperbolic excess speed. Periapsis speed vp=sqrt(vinf^2+2mu/r); burn dv=vp-sqrt(mu/r); eccentricity e=1+r vinf^2/mu; turn angle delta=2 asin(1/e) in degrees. Return [vp, dv, e rounded 6, delta rounded 4].","contract_signature":"x","evaluation_group":"w2-orbital_propagation-hyperbolic_departure","failed_approach":"Using 2 acos(1/e) returns the supplementary geometry.","family":"w2-orbital_propagation-hyperbolic_departure-turn-angle","id":"FA-69836","implementations":{"attempt":{"sha256":"edaa02657f7c23d779707833627f1eafdbd7744abe990c59fd3e596cc6c0557a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    r,vinf,mu=x\n    vp=math.sqrt(vinf*vinf+2*mu/r)\n    dv=vp-math.sqrt(mu/r)\n    e=1+r*vinf*vinf/mu\n    delta=math.degrees(2*math.acos(1/e))\n    return [round(vp,6),round(dv,6),round(e,6),round(delta,4)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('hyperbolic departure from a parking orbit [6678.0, 3.0, 398600.4418]', [6678.0, 3.0, 398600.4418], [11.330366, 3.604526, 1.150783, 120.6792]), ('hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]', [6678.0, 0.5, 398600.4418], [10.937422, 3.211582, 1.004188, 169.5303]), ('hyperbolic departure from a parking orbit [7000.0, 6.0, 398600.4418]', [7000.0, 6.0, 398600.4418], [12.242787, 4.696734, 1.632212, 75.565]), ('hyperbolic departure from a parking orbit [42164.0, 1.5, 398600.4418]', [42164.0, 1.5, 398600.4418], [4.59969, 1.525023, 1.238005, 107.7536]), ('hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]', [1.0, 1.0, 1.0], [1.732051, 0.732051, 2.0, 60.0]), ('hyperbolic departure from a parking orbit [2.0, 0.3, 1.0]', [2.0, 0.3, 1.0], [1.044031, 0.336924, 1.18, 115.8724]), ('hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]', [6578.0, 11.0, 398600.4418], [15.562519, 7.778176, 2.996832, 38.9853])], [('hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]', [6678.0, 0.5, 398600.4418], [10.937422, 3.211582, 1.004188, 169.5303]), ('hyperbolic departure from a parking orbit [42164.0, 1.5, 398600.4418]', [42164.0, 1.5, 398600.4418], [4.59969, 1.525023, 1.238005, 107.7536]), ('hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]', [1.0, 1.0, 1.0], [1.732051, 0.732051, 2.0, 60.0]), ('hyperbolic departure from a parking orbit [2.0, 0.3, 1.0]', [2.0, 0.3, 1.0], [1.044031, 0.336924, 1.18, 115.8724]), ('hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]', [6578.0, 11.0, 398600.4418], [15.562519, 7.778176, 2.996832, 38.9853]), ('hyperbolic departure from a parking orbit [1.0, 0.0, 1.0]', [1.0, 0.0, 1.0], [1.414214, 0.414214, 1.0, 180.0]), ('hyperbolic departure from a parking orbit [6678.0, 3.0, 398600.4418]', [6678.0, 3.0, 398600.4418], [11.330366, 3.604526, 1.150783, 120.6792])], [('hyperbolic departure from a parking orbit [7000.0, 6.0, 398600.4418]', [7000.0, 6.0, 398600.4418], [12.242787, 4.696734, 1.632212, 75.565]), ('hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]', [6578.0, 11.0, 398600.4418], [15.562519, 7.778176, 2.996832, 38.9853]), ('hyperbolic departure from a parking orbit [1.0, 0.0, 1.0]', [1.0, 0.0, 1.0], [1.414214, 0.414214, 1.0, 180.0]), ('hyperbolic departure from a parking orbit [6678.0, 3.0, 398600.4418]', [6678.0, 3.0, 398600.4418], [11.330366, 3.604526, 1.150783, 120.6792]), ('hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]', [6678.0, 0.5, 398600.4418], [10.937422, 3.211582, 1.004188, 169.5303]), ('hyperbolic departure from a parking orbit [42164.0, 1.5, 398600.4418]', [42164.0, 1.5, 398600.4418], [4.59969, 1.525023, 1.238005, 107.7536]), ('hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]', [1.0, 1.0, 1.0], [1.732051, 0.732051, 2.0, 60.0])], [('hyperbolic departure from a parking orbit [42164.0, 1.5, 398600.4418]', [42164.0, 1.5, 398600.4418], [4.59969, 1.525023, 1.238005, 107.7536]), ('hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]', [6678.0, 0.5, 398600.4418], [10.937422, 3.211582, 1.004188, 169.5303]), ('hyperbolic departure from a parking orbit [7000.0, 6.0, 398600.4418]', [7000.0, 6.0, 398600.4418], [12.242787, 4.696734, 1.632212, 75.565]), ('hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]', [1.0, 1.0, 1.0], [1.732051, 0.732051, 2.0, 60.0]), ('hyperbolic departure from a parking orbit [2.0, 0.3, 1.0]', [2.0, 0.3, 1.0], [1.044031, 0.336924, 1.18, 115.8724]), ('hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]', [6578.0, 11.0, 398600.4418], [15.562519, 7.778176, 2.996832, 38.9853]), ('hyperbolic departure from a parking orbit [1.0, 0.0, 1.0]', [1.0, 0.0, 1.0], [1.414214, 0.414214, 1.0, 180.0])], [('hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]', [1.0, 1.0, 1.0], [1.732051, 0.732051, 2.0, 60.0]), ('hyperbolic departure from a parking orbit [2.0, 0.3, 1.0]', [2.0, 0.3, 1.0], [1.044031, 0.336924, 1.18, 115.8724]), ('hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]', [6578.0, 11.0, 398600.4418], [15.562519, 7.778176, 2.996832, 38.9853]), ('hyperbolic departure from a parking orbit [1.0, 0.0, 1.0]', [1.0, 0.0, 1.0], [1.414214, 0.414214, 1.0, 180.0]), ('hyperbolic departure from a parking orbit [6678.0, 3.0, 398600.4418]', [6678.0, 3.0, 398600.4418], [11.330366, 3.604526, 1.150783, 120.6792]), ('hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]', [6678.0, 0.5, 398600.4418], [10.937422, 3.211582, 1.004188, 169.5303]), ('hyperbolic departure from a parking orbit [7000.0, 6.0, 398600.4418]', [7000.0, 6.0, 398600.4418], [12.242787, 4.696734, 1.632212, 75.565])]]\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":"43cace94c212bf7443d4ba559abd32ef6d1867a135ea7765025bafc4fd4ba4ce","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    r,vinf,mu=x\n    vp=math.sqrt(vinf*vinf+2*mu/r)\n    dv=vp-math.sqrt(mu/r)\n    e=1+r*vinf*vinf/mu\n    delta=math.degrees(math.asin(1/e))\n    return [round(vp,6),round(dv,6),round(e,6),round(delta,4)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('hyperbolic departure from a parking orbit [6678.0, 3.0, 398600.4418]', [6678.0, 3.0, 398600.4418], [11.330366, 3.604526, 1.150783, 120.6792]), ('hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]', [6678.0, 0.5, 398600.4418], [10.937422, 3.211582, 1.004188, 169.5303]), ('hyperbolic departure from a parking orbit [7000.0, 6.0, 398600.4418]', [7000.0, 6.0, 398600.4418], [12.242787, 4.696734, 1.632212, 75.565]), ('hyperbolic departure from a parking orbit [42164.0, 1.5, 398600.4418]', [42164.0, 1.5, 398600.4418], [4.59969, 1.525023, 1.238005, 107.7536]), ('hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]', [1.0, 1.0, 1.0], [1.732051, 0.732051, 2.0, 60.0]), ('hyperbolic departure from a parking orbit [2.0, 0.3, 1.0]', [2.0, 0.3, 1.0], [1.044031, 0.336924, 1.18, 115.8724]), ('hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]', [6578.0, 11.0, 398600.4418], [15.562519, 7.778176, 2.996832, 38.9853])], [('hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]', [6678.0, 0.5, 398600.4418], [10.937422, 3.211582, 1.004188, 169.5303]), ('hyperbolic departure from a parking orbit [42164.0, 1.5, 398600.4418]', [42164.0, 1.5, 398600.4418], [4.59969, 1.525023, 1.238005, 107.7536]), ('hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]', [1.0, 1.0, 1.0], [1.732051, 0.732051, 2.0, 60.0]), ('hyperbolic departure from a parking orbit [2.0, 0.3, 1.0]', [2.0, 0.3, 1.0], [1.044031, 0.336924, 1.18, 115.8724]), ('hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]', [6578.0, 11.0, 398600.4418], [15.562519, 7.778176, 2.996832, 38.9853]), ('hyperbolic departure from a parking orbit [1.0, 0.0, 1.0]', [1.0, 0.0, 1.0], [1.414214, 0.414214, 1.0, 180.0]), ('hyperbolic departure from a parking orbit [6678.0, 3.0, 398600.4418]', [6678.0, 3.0, 398600.4418], [11.330366, 3.604526, 1.150783, 120.6792])], [('hyperbolic departure from a parking orbit [7000.0, 6.0, 398600.4418]', [7000.0, 6.0, 398600.4418], [12.242787, 4.696734, 1.632212, 75.565]), ('hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]', [6578.0, 11.0, 398600.4418], [15.562519, 7.778176, 2.996832, 38.9853]), ('hyperbolic departure from a parking orbit [1.0, 0.0, 1.0]', [1.0, 0.0, 1.0], [1.414214, 0.414214, 1.0, 180.0]), ('hyperbolic departure from a parking orbit [6678.0, 3.0, 398600.4418]', [6678.0, 3.0, 398600.4418], [11.330366, 3.604526, 1.150783, 120.6792]), ('hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]', [6678.0, 0.5, 398600.4418], [10.937422, 3.211582, 1.004188, 169.5303]), ('hyperbolic departure from a parking orbit [42164.0, 1.5, 398600.4418]', [42164.0, 1.5, 398600.4418], [4.59969, 1.525023, 1.238005, 107.7536]), ('hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]', [1.0, 1.0, 1.0], [1.732051, 0.732051, 2.0, 60.0])], [('hyperbolic departure from a parking orbit [42164.0, 1.5, 398600.4418]', [42164.0, 1.5, 398600.4418], [4.59969, 1.525023, 1.238005, 107.7536]), ('hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]', [6678.0, 0.5, 398600.4418], [10.937422, 3.211582, 1.004188, 169.5303]), ('hyperbolic departure from a parking orbit [7000.0, 6.0, 398600.4418]', [7000.0, 6.0, 398600.4418], [12.242787, 4.696734, 1.632212, 75.565]), ('hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]', [1.0, 1.0, 1.0], [1.732051, 0.732051, 2.0, 60.0]), ('hyperbolic departure from a parking orbit [2.0, 0.3, 1.0]', [2.0, 0.3, 1.0], [1.044031, 0.336924, 1.18, 115.8724]), ('hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]', [6578.0, 11.0, 398600.4418], [15.562519, 7.778176, 2.996832, 38.9853]), ('hyperbolic departure from a parking orbit [1.0, 0.0, 1.0]', [1.0, 0.0, 1.0], [1.414214, 0.414214, 1.0, 180.0])], [('hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]', [1.0, 1.0, 1.0], [1.732051, 0.732051, 2.0, 60.0]), ('hyperbolic departure from a parking orbit [2.0, 0.3, 1.0]', [2.0, 0.3, 1.0], [1.044031, 0.336924, 1.18, 115.8724]), ('hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]', [6578.0, 11.0, 398600.4418], [15.562519, 7.778176, 2.996832, 38.9853]), ('hyperbolic departure from a parking orbit [1.0, 0.0, 1.0]', [1.0, 0.0, 1.0], [1.414214, 0.414214, 1.0, 180.0]), ('hyperbolic departure from a parking orbit [6678.0, 3.0, 398600.4418]', [6678.0, 3.0, 398600.4418], [11.330366, 3.604526, 1.150783, 120.6792]), ('hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]', [6678.0, 0.5, 398600.4418], [10.937422, 3.211582, 1.004188, 169.5303]), ('hyperbolic departure from a parking orbit [7000.0, 6.0, 398600.4418]', [7000.0, 6.0, 398600.4418], [12.242787, 4.696734, 1.632212, 75.565])]]\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-hyperbolic_departure-turn-angle","generated_at":"2026-09-29T14:48:15.162667+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":"delta is asin(1/e) without the factor two.","sha256":"b24c85115b8c263a232548f882afb074cd58d2ff4d794e65beff805333ba2d7e","title":"Hyperbolic departure from a parking orbit: Turn angle is half its value · 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":64.634,"exit_code":1,"observations":[{"actual":[11.330366,3.604526,1.150783,59.3208],"check":"hyperbolic departure from a parking orbit [6678.0, 3.0, 398600.4418]","expected":[11.330366,3.604526,1.150783,120.6792],"passed":false},{"actual":[10.937422,3.211582,1.004188,10.4697],"check":"hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]","expected":[10.937422,3.211582,1.004188,169.5303],"passed":false},{"actual":[12.242787,4.696734,1.632212,104.435],"check":"hyperbolic departure from a parking orbit [7000.0, 6.0, 398600.4418]","expected":[12.242787,4.696734,1.632212,75.565],"passed":false},{"actual":[4.59969,1.525023,1.238005,72.2464],"check":"hyperbolic departure from a parking orbit [42164.0, 1.5, 398600.4418]","expected":[4.59969,1.525023,1.238005,107.7536],"passed":false},{"actual":[1.732051,0.732051,2.0,120.0],"check":"hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]","expected":[1.732051,0.732051,2.0,60.0],"passed":false},{"actual":[1.044031,0.336924,1.18,64.1276],"check":"hyperbolic departure from a parking orbit [2.0, 0.3, 1.0]","expected":[1.044031,0.336924,1.18,115.8724],"passed":false},{"actual":[15.562519,7.778176,2.996832,141.0147],"check":"hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]","expected":[15.562519,7.778176,2.996832,38.9853],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"hyperbolic departure from a parking orbit [6678.0, 3.0, 398600.4418]\", \"actual\": [11.330366, 3.604526, 1.150783, 59.3208], \"expected\": [11.330366, 3.604526, 1.150783, 120.6792], \"passed\": false}, {\"check\": \"hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]\", \"actual\": [10.937422, 3.211582, 1.004188, 10.4697], \"expected\": [10.937422, 3.211582, 1.004188, 169.5303], \"passed\": false}, {\"check\": \"hyperbolic departure from a parking orbit [7000.0, 6.0, 398600.4418]\", \"actual\": [12.242787, 4.696734, 1.632212, 104.435], \"expected\": [12.242787, 4.696734, 1.632212, 75.565], \"passed\": false}, {\"check\": \"hyperbolic departure from a parking orbit [42164.0, 1.5, 398600.4418]\", \"actual\": [4.59969, 1.525023, 1.238005, 72.2464], \"expected\": [4.59969, 1.525023, 1.238005, 107.7536], \"passed\": false}, {\"check\": \"hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]\", \"actual\": [1.732051, 0.732051, 2.0, 120.0], \"expected\": [1.732051, 0.732051, 2.0, 60.0], \"passed\": false}, {\"check\": \"hyperbolic departure from a parking orbit [2.0, 0.3, 1.0]\", \"actual\": [1.044031, 0.336924, 1.18, 64.1276], \"expected\": [1.044031, 0.336924, 1.18, 115.8724], \"passed\": false}, {\"check\": \"hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]\", \"actual\": [15.562519, 7.778176, 2.996832, 141.0147], \"expected\": [15.562519, 7.778176, 2.996832, 38.9853], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":36.864,"exit_code":1,"observations":[{"actual":[11.330366,3.604526,1.150783,60.3396],"check":"hyperbolic departure from a parking orbit [6678.0, 3.0, 398600.4418]","expected":[11.330366,3.604526,1.150783,120.6792],"passed":false},{"actual":[10.937422,3.211582,1.004188,84.7651],"check":"hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]","expected":[10.937422,3.211582,1.004188,169.5303],"passed":false},{"actual":[12.242787,4.696734,1.632212,37.7825],"check":"hyperbolic departure from a parking orbit [7000.0, 6.0, 398600.4418]","expected":[12.242787,4.696734,1.632212,75.565],"passed":false},{"actual":[4.59969,1.525023,1.238005,53.8768],"check":"hyperbolic departure from a parking orbit [42164.0, 1.5, 398600.4418]","expected":[4.59969,1.525023,1.238005,107.7536],"passed":false},{"actual":[1.732051,0.732051,2.0,30.0],"check":"hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]","expected":[1.732051,0.732051,2.0,60.0],"passed":false},{"actual":[1.044031,0.336924,1.18,57.9362],"check":"hyperbolic departure from a parking orbit [2.0, 0.3, 1.0]","expected":[1.044031,0.336924,1.18,115.8724],"passed":false},{"actual":[15.562519,7.778176,2.996832,19.4926],"check":"hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]","expected":[15.562519,7.778176,2.996832,38.9853],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"hyperbolic departure from a parking orbit [6678.0, 3.0, 398600.4418]\", \"actual\": [11.330366, 3.604526, 1.150783, 60.3396], \"expected\": [11.330366, 3.604526, 1.150783, 120.6792], \"passed\": false}, {\"check\": \"hyperbolic departure from a parking orbit [6678.0, 0.5, 398600.4418]\", \"actual\": [10.937422, 3.211582, 1.004188, 84.7651], \"expected\": [10.937422, 3.211582, 1.004188, 169.5303], \"passed\": false}, {\"check\": \"hyperbolic departure from a parking orbit [7000.0, 6.0, 398600.4418]\", \"actual\": [12.242787, 4.696734, 1.632212, 37.7825], \"expected\": [12.242787, 4.696734, 1.632212, 75.565], \"passed\": false}, {\"check\": \"hyperbolic departure from a parking orbit [42164.0, 1.5, 398600.4418]\", \"actual\": [4.59969, 1.525023, 1.238005, 53.8768], \"expected\": [4.59969, 1.525023, 1.238005, 107.7536], \"passed\": false}, {\"check\": \"hyperbolic departure from a parking orbit [1.0, 1.0, 1.0]\", \"actual\": [1.732051, 0.732051, 2.0, 30.0], \"expected\": [1.732051, 0.732051, 2.0, 60.0], \"passed\": false}, {\"check\": \"hyperbolic departure from a parking orbit [2.0, 0.3, 1.0]\", \"actual\": [1.044031, 0.336924, 1.18, 57.9362], \"expected\": [1.044031, 0.336924, 1.18, 115.8724], \"passed\": false}, {\"check\": \"hyperbolic departure from a parking orbit [6578.0, 11.0, 398600.4418]\", \"actual\": [15.562519, 7.778176, 2.996832, 19.4926], \"expected\": [15.562519, 7.778176, 2.996832, 38.9853], \"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."}}