{"abstract":"Arrival burn equals the departure burn geometry.","category":"Orbital propagation","checks":7,"contract":"Input [r1, r2, mu] circular radii. Transfer a=(r1+r2)/2; burn 1 = |v_peri - v_circ1|, burn 2 = |v_circ2 - v_apo| using vis-viva at each end; time of flight is half the transfer period. Works inward (r2<r1) too. Return [dv1, dv2, total] rounded 6 and tof rounded 3.","contract_signature":"x","evaluation_group":"w2-orbital_propagation-hohmann","failed_approach":"Scaling by r2/r1 inverts angular momentum conservation.","family":"w2-orbital_propagation-hohmann-apoapsis-speed","id":"FA-69656","implementations":{"attempt":{"sha256":"0f087622068eb8203175a9128762fa71573e1752b03c3fd921b582ce9bf599f0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    r1,r2,mu=x\n    at=(r1+r2)/2\n    v1=math.sqrt(mu/r1); v2=math.sqrt(mu/r2)\n    vp=math.sqrt(mu*(2/r1-1/at)); va=vp*r2/r1\n    dv1=abs(vp-v1); dv2=abs(v2-va)\n    tof=math.pi*math.sqrt(at**3/mu)\n    return [round(dv1,6),round(dv2,6),round(dv1+dv2,6),round(tof,3)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('hohmann transfer budget [6678.0, 42164.0, 398600.4418]', [6678.0, 42164.0, 398600.4418], [2.425769, 1.466839, 3.892608, 18990.052]), ('hohmann transfer budget [42164.0, 6678.0, 398600.4418]', [42164.0, 6678.0, 398600.4418], [1.466839, 2.425769, 3.892608, 18990.052]), ('hohmann transfer budget [7000.0, 7500.0, 398600.4418]', [7000.0, 7500.0, 398600.4418], [0.129002, 0.126795, 0.255797, 3071.765]), ('hohmann transfer budget [1.0, 1.524, 1.0]', [1.0, 1.524, 1.0], [0.098912, 0.088971, 0.187883, 4.454]), ('hohmann transfer budget [1.0, 5.2, 1.0]', [1.0, 5.2, 1.0], [0.295152, 0.189461, 0.484614, 17.147]), ('hohmann transfer budget [6778.0, 6778.0, 398600.4418]', [6778.0, 6778.0, 398600.4418], [0.0, 0.0, 0.0, 2776.728]), ('hohmann transfer budget [10000.0, 7000.0, 398600.4418]', [10000.0, 7000.0, 398600.4418], [0.58409, 0.638791, 1.222881, 3899.504])], [('hohmann transfer budget [42164.0, 6678.0, 398600.4418]', [42164.0, 6678.0, 398600.4418], [1.466839, 2.425769, 3.892608, 18990.052]), ('hohmann transfer budget [1.0, 1.524, 1.0]', [1.0, 1.524, 1.0], [0.098912, 0.088971, 0.187883, 4.454]), ('hohmann transfer budget [1.0, 5.2, 1.0]', [1.0, 5.2, 1.0], [0.295152, 0.189461, 0.484614, 17.147]), ('hohmann transfer budget [6778.0, 6778.0, 398600.4418]', [6778.0, 6778.0, 398600.4418], [0.0, 0.0, 0.0, 2776.728]), ('hohmann transfer budget [10000.0, 7000.0, 398600.4418]', [10000.0, 7000.0, 398600.4418], [0.58409, 0.638791, 1.222881, 3899.504]), ('hohmann transfer budget [7000.0, 8000.0, 398600.4418]', [7000.0, 8000.0, 398600.4418], [0.247477, 0.239347, 0.486825, 3232.011]), ('hohmann transfer budget [8000.0, 7000.0, 398600.4418]', [8000.0, 7000.0, 398600.4418], [0.239347, 0.247477, 0.486825, 3232.011])], [('hohmann transfer budget [7000.0, 7500.0, 398600.4418]', [7000.0, 7500.0, 398600.4418], [0.129002, 0.126795, 0.255797, 3071.765]), ('hohmann transfer budget [10000.0, 7000.0, 398600.4418]', [10000.0, 7000.0, 398600.4418], [0.58409, 0.638791, 1.222881, 3899.504]), ('hohmann transfer budget [7000.0, 8000.0, 398600.4418]', [7000.0, 8000.0, 398600.4418], [0.247477, 0.239347, 0.486825, 3232.011]), ('hohmann transfer budget [8000.0, 7000.0, 398600.4418]', [8000.0, 7000.0, 398600.4418], [0.239347, 0.247477, 0.486825, 3232.011]), ('hohmann transfer budget [1.0, 1.2, 1.0]', [1.0, 1.2, 1.0], [0.044466, 0.042483, 0.086949, 3.624]), ('hohmann transfer budget [1.3, 1.0, 1.0]', [1.3, 1.0, 1.0], [0.059197, 0.063219, 0.122416, 3.874]), ('hohmann transfer budget [6778.0, 7178.0, 398600.4418]', [6778.0, 7178.0, 398600.4418], [0.109121, 0.107568, 0.216689, 2900.53])], [('hohmann transfer budget [1.0, 1.524, 1.0]', [1.0, 1.524, 1.0], [0.098912, 0.088971, 0.187883, 4.454]), ('hohmann transfer budget [1.0, 1.2, 1.0]', [1.0, 1.2, 1.0], [0.044466, 0.042483, 0.086949, 3.624]), ('hohmann transfer budget [1.3, 1.0, 1.0]', [1.3, 1.0, 1.0], [0.059197, 0.063219, 0.122416, 3.874]), ('hohmann transfer budget [6778.0, 7178.0, 398600.4418]', [6778.0, 7178.0, 398600.4418], [0.109121, 0.107568, 0.216689, 2900.53]), ('hohmann transfer budget [6678.0, 42164.0, 398600.4418]', [6678.0, 42164.0, 398600.4418], [2.425769, 1.466839, 3.892608, 18990.052]), ('hohmann transfer budget [42164.0, 6678.0, 398600.4418]', [42164.0, 6678.0, 398600.4418], [1.466839, 2.425769, 3.892608, 18990.052]), ('hohmann transfer budget [7000.0, 7500.0, 398600.4418]', [7000.0, 7500.0, 398600.4418], [0.129002, 0.126795, 0.255797, 3071.765])], [('hohmann transfer budget [1.0, 5.2, 1.0]', [1.0, 5.2, 1.0], [0.295152, 0.189461, 0.484614, 17.147]), ('hohmann transfer budget [6678.0, 42164.0, 398600.4418]', [6678.0, 42164.0, 398600.4418], [2.425769, 1.466839, 3.892608, 18990.052]), ('hohmann transfer budget [42164.0, 6678.0, 398600.4418]', [42164.0, 6678.0, 398600.4418], [1.466839, 2.425769, 3.892608, 18990.052]), ('hohmann transfer budget [7000.0, 7500.0, 398600.4418]', [7000.0, 7500.0, 398600.4418], [0.129002, 0.126795, 0.255797, 3071.765]), ('hohmann transfer budget [1.0, 1.524, 1.0]', [1.0, 1.524, 1.0], [0.098912, 0.088971, 0.187883, 4.454]), ('hohmann transfer budget [6778.0, 6778.0, 398600.4418]', [6778.0, 6778.0, 398600.4418], [0.0, 0.0, 0.0, 2776.728]), ('hohmann transfer budget [10000.0, 7000.0, 398600.4418]', [10000.0, 7000.0, 398600.4418], [0.58409, 0.638791, 1.222881, 3899.504])]]\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":"40b09ced3fbbb9579c48f6bb9026e4c0ea4cbc54b7159fcf92610588f368cfed","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    r1,r2,mu=x\n    at=(r1+r2)/2\n    v1=math.sqrt(mu/r1); v2=math.sqrt(mu/r2)\n    vp=math.sqrt(mu*(2/r1-1/at)); va=math.sqrt(mu*(2/r1-1/at))\n    dv1=abs(vp-v1); dv2=abs(v2-va)\n    tof=math.pi*math.sqrt(at**3/mu)\n    return [round(dv1,6),round(dv2,6),round(dv1+dv2,6),round(tof,3)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('hohmann transfer budget [6678.0, 42164.0, 398600.4418]', [6678.0, 42164.0, 398600.4418], [2.425769, 1.466839, 3.892608, 18990.052]), ('hohmann transfer budget [42164.0, 6678.0, 398600.4418]', [42164.0, 6678.0, 398600.4418], [1.466839, 2.425769, 3.892608, 18990.052]), ('hohmann transfer budget [7000.0, 7500.0, 398600.4418]', [7000.0, 7500.0, 398600.4418], [0.129002, 0.126795, 0.255797, 3071.765]), ('hohmann transfer budget [1.0, 1.524, 1.0]', [1.0, 1.524, 1.0], [0.098912, 0.088971, 0.187883, 4.454]), ('hohmann transfer budget [1.0, 5.2, 1.0]', [1.0, 5.2, 1.0], [0.295152, 0.189461, 0.484614, 17.147]), ('hohmann transfer budget [6778.0, 6778.0, 398600.4418]', [6778.0, 6778.0, 398600.4418], [0.0, 0.0, 0.0, 2776.728]), ('hohmann transfer budget [10000.0, 7000.0, 398600.4418]', [10000.0, 7000.0, 398600.4418], [0.58409, 0.638791, 1.222881, 3899.504])], [('hohmann transfer budget [42164.0, 6678.0, 398600.4418]', [42164.0, 6678.0, 398600.4418], [1.466839, 2.425769, 3.892608, 18990.052]), ('hohmann transfer budget [1.0, 1.524, 1.0]', [1.0, 1.524, 1.0], [0.098912, 0.088971, 0.187883, 4.454]), ('hohmann transfer budget [1.0, 5.2, 1.0]', [1.0, 5.2, 1.0], [0.295152, 0.189461, 0.484614, 17.147]), ('hohmann transfer budget [6778.0, 6778.0, 398600.4418]', [6778.0, 6778.0, 398600.4418], [0.0, 0.0, 0.0, 2776.728]), ('hohmann transfer budget [10000.0, 7000.0, 398600.4418]', [10000.0, 7000.0, 398600.4418], [0.58409, 0.638791, 1.222881, 3899.504]), ('hohmann transfer budget [7000.0, 8000.0, 398600.4418]', [7000.0, 8000.0, 398600.4418], [0.247477, 0.239347, 0.486825, 3232.011]), ('hohmann transfer budget [8000.0, 7000.0, 398600.4418]', [8000.0, 7000.0, 398600.4418], [0.239347, 0.247477, 0.486825, 3232.011])], [('hohmann transfer budget [7000.0, 7500.0, 398600.4418]', [7000.0, 7500.0, 398600.4418], [0.129002, 0.126795, 0.255797, 3071.765]), ('hohmann transfer budget [10000.0, 7000.0, 398600.4418]', [10000.0, 7000.0, 398600.4418], [0.58409, 0.638791, 1.222881, 3899.504]), ('hohmann transfer budget [7000.0, 8000.0, 398600.4418]', [7000.0, 8000.0, 398600.4418], [0.247477, 0.239347, 0.486825, 3232.011]), ('hohmann transfer budget [8000.0, 7000.0, 398600.4418]', [8000.0, 7000.0, 398600.4418], [0.239347, 0.247477, 0.486825, 3232.011]), ('hohmann transfer budget [1.0, 1.2, 1.0]', [1.0, 1.2, 1.0], [0.044466, 0.042483, 0.086949, 3.624]), ('hohmann transfer budget [1.3, 1.0, 1.0]', [1.3, 1.0, 1.0], [0.059197, 0.063219, 0.122416, 3.874]), ('hohmann transfer budget [6778.0, 7178.0, 398600.4418]', [6778.0, 7178.0, 398600.4418], [0.109121, 0.107568, 0.216689, 2900.53])], [('hohmann transfer budget [1.0, 1.524, 1.0]', [1.0, 1.524, 1.0], [0.098912, 0.088971, 0.187883, 4.454]), ('hohmann transfer budget [1.0, 1.2, 1.0]', [1.0, 1.2, 1.0], [0.044466, 0.042483, 0.086949, 3.624]), ('hohmann transfer budget [1.3, 1.0, 1.0]', [1.3, 1.0, 1.0], [0.059197, 0.063219, 0.122416, 3.874]), ('hohmann transfer budget [6778.0, 7178.0, 398600.4418]', [6778.0, 7178.0, 398600.4418], [0.109121, 0.107568, 0.216689, 2900.53]), ('hohmann transfer budget [6678.0, 42164.0, 398600.4418]', [6678.0, 42164.0, 398600.4418], [2.425769, 1.466839, 3.892608, 18990.052]), ('hohmann transfer budget [42164.0, 6678.0, 398600.4418]', [42164.0, 6678.0, 398600.4418], [1.466839, 2.425769, 3.892608, 18990.052]), ('hohmann transfer budget [7000.0, 7500.0, 398600.4418]', [7000.0, 7500.0, 398600.4418], [0.129002, 0.126795, 0.255797, 3071.765])], [('hohmann transfer budget [1.0, 5.2, 1.0]', [1.0, 5.2, 1.0], [0.295152, 0.189461, 0.484614, 17.147]), ('hohmann transfer budget [6678.0, 42164.0, 398600.4418]', [6678.0, 42164.0, 398600.4418], [2.425769, 1.466839, 3.892608, 18990.052]), ('hohmann transfer budget [42164.0, 6678.0, 398600.4418]', [42164.0, 6678.0, 398600.4418], [1.466839, 2.425769, 3.892608, 18990.052]), ('hohmann transfer budget [7000.0, 7500.0, 398600.4418]', [7000.0, 7500.0, 398600.4418], [0.129002, 0.126795, 0.255797, 3071.765]), ('hohmann transfer budget [1.0, 1.524, 1.0]', [1.0, 1.524, 1.0], [0.098912, 0.088971, 0.187883, 4.454]), ('hohmann transfer budget [6778.0, 6778.0, 398600.4418]', [6778.0, 6778.0, 398600.4418], [0.0, 0.0, 0.0, 2776.728]), ('hohmann transfer budget [10000.0, 7000.0, 398600.4418]', [10000.0, 7000.0, 398600.4418], [0.58409, 0.638791, 1.222881, 3899.504])]]\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-hohmann-apoapsis-speed","generated_at":"2026-09-29T14:48:13.397669+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":"Vis-viva at arrival is evaluated at r1.","sha256":"3be1ef690410a738f6487e312914c99dff79afb7e5f5b0ed7f323e3b5b8109f2","title":"Hohmann transfer budget: Arrival speed uses the departure radius · 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.576,"exit_code":1,"observations":[{"actual":[2.425769,61.021234,63.447003,18990.052],"check":"hohmann transfer budget [6678.0, 42164.0, 398600.4418]","expected":[2.425769,1.466839,3.892608,18990.052],"passed":false},{"actual":[1.466839,7.471189,8.938028,18990.052],"check":"hohmann transfer budget [42164.0, 6678.0, 398600.4418]","expected":[1.466839,2.425769,3.892608,18990.052],"passed":false},{"actual":[0.129002,0.933093,1.062095,3071.765],"check":"hohmann transfer budget [7000.0, 7500.0, 398600.4418]","expected":[0.129002,0.126795,0.255797,3071.765],"passed":false},{"actual":[0.098912,0.8647,0.963611,4.454],"check":"hohmann transfer budget [1.0, 1.524, 1.0]","expected":[0.098912,0.088971,0.187883,4.454],"passed":false},{"actual":[0.295152,6.296263,6.591415,17.147],"check":"hohmann transfer budget [1.0, 5.2, 1.0]","expected":[0.295152,0.189461,0.484614,17.147],"passed":false},{"actual":[0.0,0.0,0.0,2776.728],"check":"hohmann transfer budget [6778.0, 6778.0, 398600.4418]","expected":[0.0,0.0,0.0,2776.728],"passed":true},{"actual":[0.58409,3.53548,4.11957,3899.504],"check":"hohmann transfer budget [10000.0, 7000.0, 398600.4418]","expected":[0.58409,0.638791,1.222881,3899.504],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"hohmann transfer budget [6678.0, 42164.0, 398600.4418]\", \"actual\": [2.425769, 61.021234, 63.447003, 18990.052], \"expected\": [2.425769, 1.466839, 3.892608, 18990.052], \"passed\": false}, {\"check\": \"hohmann transfer budget [42164.0, 6678.0, 398600.4418]\", \"actual\": [1.466839, 7.471189, 8.938028, 18990.052], \"expected\": [1.466839, 2.425769, 3.892608, 18990.052], \"passed\": false}, {\"check\": \"hohmann transfer budget [7000.0, 7500.0, 398600.4418]\", \"actual\": [0.129002, 0.933093, 1.062095, 3071.765], \"expected\": [0.129002, 0.126795, 0.255797, 3071.765], \"passed\": false}, {\"check\": \"hohmann transfer budget [1.0, 1.524, 1.0]\", \"actual\": [0.098912, 0.8647, 0.963611, 4.454], \"expected\": [0.098912, 0.088971, 0.187883, 4.454], \"passed\": false}, {\"check\": \"hohmann transfer budget [1.0, 5.2, 1.0]\", \"actual\": [0.295152, 6.296263, 6.591415, 17.147], \"expected\": [0.295152, 0.189461, 0.484614, 17.147], \"passed\": false}, {\"check\": \"hohmann transfer budget [6778.0, 6778.0, 398600.4418]\", \"actual\": [0.0, 0.0, 0.0, 2776.728], \"expected\": [0.0, 0.0, 0.0, 2776.728], \"passed\": true}, {\"check\": \"hohmann transfer budget [10000.0, 7000.0, 398600.4418]\", \"actual\": [0.58409, 3.53548, 4.11957, 3899.504], \"expected\": [0.58409, 0.638791, 1.222881, 3899.504], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.623,"exit_code":1,"observations":[{"actual":[2.425769,7.076942,9.502711,18990.052],"check":"hohmann transfer budget [6678.0, 42164.0, 398600.4418]","expected":[2.425769,1.466839,3.892608,18990.052],"passed":false},{"actual":[1.466839,6.118012,7.584851,18990.052],"check":"hohmann transfer budget [42164.0, 6678.0, 398600.4418]","expected":[1.466839,2.425769,3.892608,18990.052],"passed":false},{"actual":[0.129002,0.384875,0.513877,3071.765],"check":"hohmann transfer budget [7000.0, 7500.0, 398600.4418]","expected":[0.129002,0.126795,0.255797,3071.765],"passed":false},{"actual":[0.098912,0.28887,0.387781,4.454],"check":"hohmann transfer budget [1.0, 1.524, 1.0]","expected":[0.098912,0.088971,0.187883,4.454],"passed":false},{"actual":[0.295152,0.856623,1.151775,17.147],"check":"hohmann transfer budget [1.0, 5.2, 1.0]","expected":[0.295152,0.189461,0.484614,17.147],"passed":false},{"actual":[0.0,0.0,0.0,2776.728],"check":"hohmann transfer budget [6778.0, 6778.0, 398600.4418]","expected":[0.0,0.0,0.0,2776.728],"passed":true},{"actual":[0.58409,1.816663,2.400753,3899.504],"check":"hohmann transfer budget [10000.0, 7000.0, 398600.4418]","expected":[0.58409,0.638791,1.222881,3899.504],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"hohmann transfer budget [6678.0, 42164.0, 398600.4418]\", \"actual\": [2.425769, 7.076942, 9.502711, 18990.052], \"expected\": [2.425769, 1.466839, 3.892608, 18990.052], \"passed\": false}, {\"check\": \"hohmann transfer budget [42164.0, 6678.0, 398600.4418]\", \"actual\": [1.466839, 6.118012, 7.584851, 18990.052], \"expected\": [1.466839, 2.425769, 3.892608, 18990.052], \"passed\": false}, {\"check\": \"hohmann transfer budget [7000.0, 7500.0, 398600.4418]\", \"actual\": [0.129002, 0.384875, 0.513877, 3071.765], \"expected\": [0.129002, 0.126795, 0.255797, 3071.765], \"passed\": false}, {\"check\": \"hohmann transfer budget [1.0, 1.524, 1.0]\", \"actual\": [0.098912, 0.28887, 0.387781, 4.454], \"expected\": [0.098912, 0.088971, 0.187883, 4.454], \"passed\": false}, {\"check\": \"hohmann transfer budget [1.0, 5.2, 1.0]\", \"actual\": [0.295152, 0.856623, 1.151775, 17.147], \"expected\": [0.295152, 0.189461, 0.484614, 17.147], \"passed\": false}, {\"check\": \"hohmann transfer budget [6778.0, 6778.0, 398600.4418]\", \"actual\": [0.0, 0.0, 0.0, 2776.728], \"expected\": [0.0, 0.0, 0.0, 2776.728], \"passed\": true}, {\"check\": \"hohmann transfer budget [10000.0, 7000.0, 398600.4418]\", \"actual\": [0.58409, 1.816663, 2.400753, 3899.504], \"expected\": [0.58409, 0.638791, 1.222881, 3899.504], \"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."}}