Replan
/replanPurpose
Answers the operational question after a satellite fails: what are the options, what does each cost, and how long does each take to restore service.
It returns several plans with a recommendation, so the trade is visible rather than decided for you.
Request
Like /resilience/*, this takes the shape of the
problem rather than a constellation_id. There is no propagation involved; the
question is combinatorial and economic.
| Parameter | Type | Unit | Default | Required | Description |
|---|---|---|---|---|---|
a_ops_km | number | km | — | Yes | Operational semi-major axis. |
inclination_deg | number | deg | — | Yes | Operational inclination. |
phase_gap_deg | number | deg | — | Yes | In-plane phase gap the failure opened. |
raan_gap_deg | number | deg | — | Yes | Cross-plane gap, if the spare must change plane. |
in_plane_spares | integer | count | — | Yes | Spares already in the affected plane. |
parking_spares | integer | count | — | Yes | Spares held in a parking orbit. |
park_altitude_km | number | km | — | Yes | Parking orbit altitude, which sets the raise cost. |
rephase_duration_days | number | days | — | Yes | Time allowed for a rephase. Longer is cheaper in delta-v. |
replacement_lead_time_days | number | days | — | Yes | Time to build and launch a replacement. |
replacement_sat_cost_usd | number | USD | — | Yes | Cost of a replacement satellite. |
replacement_launch_cost_usd | number | USD | — | Yes | Cost of a replacement launch. |
degradation_days | number | days | — | Yes | How long degraded service is tolerable. |
revenue_at_risk_per_day_usd | number | USD/day | — | Yes | Revenue exposed per day of degradation. This is what makes speed comparable to money. |
Example
curl -s -X POST http://127.0.0.1:8080/replan \
-H 'content-type: application/json' \
-d '{
"a_ops_km": 6928.0,
"inclination_deg": 53.0,
"phase_gap_deg": 30.0,
"raan_gap_deg": 10.0,
"in_plane_spares": 1,
"parking_spares": 0,
"park_altitude_km": 400.0,
"rephase_duration_days": 6.0,
"replacement_lead_time_days": 120.0,
"replacement_sat_cost_usd": 1000000.0,
"replacement_launch_cost_usd": 30000000.0,
"degradation_days": 30.0,
"revenue_at_risk_per_day_usd": 50000.0
}'{
"recommended": {
"actions": [
{
"ActivateInPlaneSpare": {
"rephase": {
"delta_a_km": -4.260819925470516,
"delta_v_m_s": 4.664984976009534,
"duration_days": 6.0
}
}
}
],
"restores": true,
"time_to_restore_days": 6.0,
"delta_v_m_s": 4.664984976009534,
"cost_usd": 0.0,
"revenue_at_risk_avoided_usd": 1200000.0
},
"plans": []
}plans held three options in this run; only the recommendation is shown.
Reading the recommendation
| Field | Value | Meaning |
|---|---|---|
restores | true | This plan closes the gap. A plan that does not is still returned, for comparison |
time_to_restore_days | 6.0 | How long until service is whole again |
delta_v_m_s | 4.66 | Propellant cost, spent from the spare’s own budget |
cost_usd | 0.0 | No new hardware and no new launch |
revenue_at_risk_avoided_usd | 1,200,000 | 24 days saved against the 30-day tolerance, at 50,000 per day |
Why the spare wins
The recommendation activates an in-plane spare and rephases it, and the case for it is arithmetic rather than judgment:
| Option | Cash cost | Time to restore | Revenue at risk |
|---|---|---|---|
| Activate in-plane spare | 0 | 6 days | 300,000 |
| Replacement launch | 31,000,000 | 120 days | 1,500,000 at the daily rate, capped by tolerance |
The spare costs nothing but 4.66 m/s of its own propellant and restores service
in 6 days rather than 120. revenue_at_risk_avoided_usd quantifies exactly that
difference.
cost_usd: 0.0 means no cash outlay. It is not free: the plan consumes
4.66 m/s from a spare that was carrying a fixed propellant budget, and it
consumes the spare itself, so the plane now has none.
A recovery plan that leaves you with no spare has changed your resilience
posture. Re-run /resilience/kfailure against the
post-recovery fleet before treating the situation as closed.
The rephase is a drift maneuver
delta_a_km of -4.26 lowers the semi-major axis, which raises the orbital rate
and lets the spare drift forward into the gap. After 6 days at the new rate it
has closed 30 degrees of phase and circularizes again.
Lowering costs delta-v twice, once down and once back up, which is why
rephase_duration_days matters: a longer allowance needs a smaller altitude
offset and therefore less propellant. Speed and propellant trade directly.
See also
/resilience/kfailurefor how much failure the fleet tolerates before recovery is needed./maneuverto propagate the recommended burn.
main (pre-release)