Terminus: the elegant trap

Proposal section 2: the orbit we will not fly

Every engineer on our team drew the same picture first. We suspect every civilization that ever faced a locked planet drew it too.

A terminator-tracking orbit ringing the tidally locked planet, with the price of holding it: 32°/day of plane rotation, ~3.9 km/s of delta-v per day, and ~12.5% of each satellite's mass burned as propellant daily

Last time we established the problem: the towns sit still in an eternal twilight band, but that band swings through space at 32 degrees per day as the planet turns with its orbit. So the obvious answer draws itself — put the satellites in a ring above the sunset line, and make the ring turn those same 32 degrees per day. The satellites would hover over the civilization forever. The star would shine flat onto their solar panels forever. One ring, perfect coverage, perfect power, problem solved.

This section of our proposal exists to kill that idea properly — with numbers, not taste — because an idea this elegant will be proposed again every time a new engineer joins the program. The AI that wrote the RFP asked us to justify our architecture. Here is the justification's first tombstone.

What an orbit actually is

A satellite stays up by falling. Throw a stone, and it arcs to the ground; throw it impossibly hard — about seven kilometers every second near this planet — and the arc of its fall matches the curve of the planet itself. The stone falls forever and never lands. That is all an orbit is.

The path of that endless fall is a ring around the planet, and the ring lies in a flat plane, like a hoop of wire with the planet at its center. Here is the property that matters: left alone, the hoop holds its orientation relative to the distant stars. Not relative to the ground, not relative to the star it orbits — the stars. The planet spins inside the hoop; the hoop does not care.

The band above the towns is the opposite kind of thing, and the locking is why. Proxima b keeps one face to its star, so in the time it takes to travel once around the star — 11.2 Earth days — it must also turn exactly once on its own axis. One revolution, one rotation, and never anything else. The twilight band is welded to that turning face, so the band's plane sweeps a full circle through inertial space in the same 11.2 days: 32.14 degrees every day. That is easier to watch than to read.

Proxima Centauri
Rotations0.000
Terminator turned0.0°
Orbital plane turned0.0°
Mission clockT+ 0.00 d

Proxima b laps Proxima Centauri once every 11.2 Earth days and, tidally locked, rotates exactly once in the same time. The star and the orbit are drawn to scale with each other; the planet is about 70× oversize, or it would be a single pixel.

Two dots labeled α Cen A · B ride the top of the plate, and across the whole lap they never move. That is the point of them. They stand in for the distant stars — far enough away that nothing happening in this system can shift them — and angles measured against them are angles measured in what physics calls the inertial frame. That is the frame the hoop is loyal to. The town marked on the planet's face keeps the other set of books: its frame is bolted to the surface and turns once every 11.2 days, carrying the twilight band around with it.

The plate keeps both sets of books at once, and they disagree all the way around. Let it drift and watch the two readouts pull apart: terminator turned climbs to a full 360°; orbital plane turned sits at 0.00° and stays there. Nothing has gone wrong, and neither number is a rounding error. It is one lap of one planet, measured in two frames — and the gap between those columns is the bill the rest of this section computes.

The two columns do agree in exactly one place in the sky: a single altitude where a satellite's lap takes precisely as long as the planet's turn, so the ground stops sliding beneath it and the frames fall into step. Every spacefaring civilization finds that shelf. We go looking for ours in the next section.

Toggle the plate to hold alignment, and the alternative is on screen: the plane dragged around to follow, burn after burn, for as long as the fleet lives. Nobody pays that bill. What we do instead is spend planes rather than propellant — a wheel of fixed rings, each inheriting the twilight band in turn as the planet carries it past, and none of them ever burning to stay where it is. That fleet gets designed two sections from here. This section exists to prove it is necessary.

A hoop placed perfectly over the band today is misaligned tomorrow and useless within days — unless we grab the hoop and continuously twist it to follow. The question is what the twisting costs.

The currency of spaceflight

Spacecraft maneuvers are priced in a currency called delta-v — "change in velocity," measured in kilometers per second. Every burn of every engine buys some. A probe leaving Earth orbit for another planet spends about three to four kilometers per second, and mission designers guard fractions of it for years.

Twisting an orbit's plane is the most expensive purchase in the catalog, and the reason is that velocity is not just a speed — it is a speed in a direction. Our satellite moves at 6.98 km/s along the hoop. To tilt the hoop is to change that direction, and swinging a 6.98 km/s arrow through an angle costs roughly the arrow's length times the angle. There is no clever route around this; it is geometry, and it is worth seeing exactly where it comes from.

The twilight band demands 32.14 degrees — 0.561 radians — of swing per day. The toolkit function that prices it is short enough to read like the formula it implements:

/// Rate at which the terminator plane rotates in inertial space, rad/s.
pub fn terminator_rate(body: &CentralBody) -> f64 {
    2.0 * PI / body.rotation_period
}

/// Idealized lower-bound Δv per Earth day to continuously rotate an
/// orbital plane with the terminator: Δv ≳ v·ΔΩ, m/s per day.
pub fn ideal_plane_change_dv_per_day(body: &CentralBody, altitude: f64) -> f64 {
    orbital_velocity(body, altitude) * terminator_rate(body) * SECONDS_PER_DAY
}

The first function is the lap in the figure above, written down: one full turn, 2π radians, spread evenly over one rotation period. The second takes that swing and charges the satellite's own speed for it.

Why the swing costs the whole arrow

That second function is one line long and hides the piece of geometry that decides this whole section, so it is worth unpacking.

Velocity is a vector — a length and a direction:

v_vec = v · e          v = speed, 6.984 km/s at 1,800 km
                       e = a unit vector pointing along the track

A plane change never touches v. The satellite is exactly as fast when the maneuver ends as when it began; every gram of propellant goes into turning e. And delta-v, the quantity the rocket equation charges for, is not the change in speed. It is the length of the vector difference between the velocity you finished with and the one you started with:

Δv = | v_vec_after − v_vec_before |

Those two vectors have the same length v and differ in direction by the turn angle θ. Draw them tail to tail, and they are two sides of an isosceles triangle; the engine has to supply the third side. That side is a chord, and the chord across an isosceles triangle with sides v and included angle θ is

Δv = 2 v sin(θ/2)
v sin(θ/2)vvθΔv

θ = 60°. Dropping a bisector splits the isosceles triangle into two right triangles, each with hypotenuse v and opposite side v sin(θ/2). The chord is twice that. At this particular angle the triangle is equilateral, so Δv is exactly v — the turn costs the satellite's entire orbital speed and returns nothing but a new direction.

vvθΔvchord and arc: 0.7% apart

θ = 24°. The same construction with the arc (dashed) drawn over the chord (solid). They part by 0.7% here, a two-pixel sliver at this size, which is why Δv ≈ v·θ holds for small turns — and why θ has to be in radians for v·θ to come out as a length at all.

Δv is the third side of the triangle, not the difference between the first two. Both velocities are the same length, so nothing in the maneuver makes the spacecraft faster; the whole chord is spent on direction.

Turn by nothing and pay nothing. Turn by 60 degrees, and the chord is exactly v — you spend the satellite's entire orbital speed and end up going precisely as fast as before, merely in a different direction. Turn by 180 degrees, and it costs 2v to reverse a satellite that was already moving perfectly well. Nothing in the maneuver makes the spacecraft faster. The whole bill buys direction.

For small turns, sin(θ/2) ≈ θ/2 and the chord collapses onto the arc:

Δv ≈ v · θ             θ in radians

That is the arrow's length times the angle, and it is also why the angle must be in radians: v·θ is an arc length — the distance the tip of a v-long arrow travels as it swings through θ. Radians are the unit that turns an angle into a length.

From one shove to a shove that never stops

Our doomed ring is not allowed to turn in a single shove. It must sit on the terminator at every instant, so e has to rotate smoothly, at exactly the rate the band does — ω = 2π / 11.2 days, which is what terminator_rate returns. Hold v fixed and differentiate:

dv_vec/dt = v · de/dt = v · ω · e_perp

A unit vector turning at rate ω sweeps its tip at speed ω, so the acceleration the engine must supply has magnitude v·ω and points at right angles to the track — out of the orbital plane, which is exactly where a plane change has to push. Delta-v is that acceleration integrated over time, and with both factors constant, the integral is just a multiplication:

Δv = ∫ v ω dt = v · ω · Δt = v · ΔΩ

Which is the function, term for term: orbital velocity, times the terminator rate, times a day's worth of seconds. Put the numbers in, and every column of the table below falls out of that one product:

v = 6.984 km/s          ω = 2π / (11.2 × 86,400 s) = 6.493e-6 rad/s

  a  = v · ω           = 6,984 × 6.493e-6  = 0.0454 m/s²     → accel
  Δv = a × 86,400 s                        = 3,918 m/s       → dv/day
  F  = a × 500 kg                          = 22.7 N          → thrust

One honest footnote, because the two formulas disagree. The chord is always slightly cheaper than the arc, so doing a whole day's turn in one shove would cost 2·v·sin(0.561/2) = 3.87 km/s against the arc's 3.92 — about 1.3 percent off. That is not a loophole. Batching the turn means being aligned for an instant and wrong for the rest of the day, and a fleet willing to be wrong part of the time should not be shopping for a cheaper burn. It should stop burning and put up more rings.

Run the pair across the candidate altitudes, and the bill arrives:

cargo run -p terminus-orbits --example terminator_tracking

  alt (km)     v (km/s)    dv/day (km/s)   accel (m/s2)   thrust (N) propellant %/day
       600         7.56             4.24         0.0491         24.5             13.4
      1200         7.26             4.07         0.0471         23.6             12.9
      1800         6.98             3.92         0.0454         22.7             12.5
      2000         6.90             3.87         0.0448         22.4             12.3

Read the third column twice. The interplanetary probe spent four kilometers per second once, in its lifetime. This ring spends it every single day, at every altitude — and this is the idealized lower bound, before any steering inefficiency. Height barely helps, because orbital speed near a planet is always close to seven kilometers per second.

An engine that never stops pushing

Delta-v per day is another name for continuous thrust. For a 500 kg satellite, the table says 22.7 newtons, held forever — the effort of holding a two-kilogram weight at arm's length, every second, for the life of the spacecraft. For comparison, the most powerful electric thrusters ever flown push with a fraction of one newton, and they are considered muscular.

But suppose the AI's factories build us a monster thruster. Thrust is not the wall. The wall is the fuel.

The equation that eats spacecraft

Rockets work by throwing mass backward, so every maneuver spends the spacecraft itself. Worse, the fuel you will burn tomorrow is mass you must push around today, which takes more fuel, which is also mass — the costs compound, and the arithmetic of that compounding is called the rocket equation. Its verdict is exponential: modest delta-v costs modest mass, and large delta-v costs almost everything you have.

Specific impulse, and why it is quoted in seconds

The efficiency term in that equation is the engine's specific impulse, and it arrives in a unit that looks like a typo: seconds.

The quantity that actually matters is exhaust velocity — how fast the engine throws propellant out of the nozzle. Throw each kilogram out twice as fast, and it leaves with twice the momentum, so it buys twice the delta-v. That is a speed, and it is measured like one. Specific impulse is the same number carrying a divisor:

v_e = g₀ · Isp          g₀ = 9.80665 m/s², standard gravity

The convention comes from quoting an engine's impulse per unit weight of propellant rather than per unit mass. Newtons of thrust divided by newtons per second of propellant weight-flow leaves seconds behind, and the figure comes out identical whether the engineer works in kilograms or in pounds — which is why it outlived the imperial units that motivated it.

The g₀ in that conversion is a defined constant, not a measurement. It is not Proxima b's gravity, not Earth's local gravity, and not anything the spacecraft feels in orbit. It is a fixed number whose only job is turning seconds back into meters per second.

So the 3,000-second ion engine — the best anyone has ever flown — is really an engine with an exhaust velocity of 3,000 × 9.80665 ≈ 29.4 km/s, which is where the "about 30 km/s" comes from. G0 * isp in the function below is that conversion, undoing the convention to recover the speed the physics wants. We will grant our doomed ring nothing less:

/// Fraction of the spacecraft's initial mass remaining after sustaining
/// the ideal plane-tracking Δv for the given number of Earth days.
pub fn remaining_mass_fraction(body: &CentralBody, altitude: f64, isp: f64, days: f64) -> f64 {
    let dv = ideal_plane_change_dv_per_day(body, altitude) * days;
    (-dv / (G0 * isp)).exp()
}

Reading the fraction back

The rocket equation itself is momentum bookkeeping. Throw a small mass dm backward at v_e, and a ship of mass m gains dv = v_e · dm/m. That dm/m is the whole difficulty: the same kilogram of propellant buys more delta-v late in a burn, when there is less ship left to shove. Add up every kilogram, and the running total is a logarithm:

Δv = v_e · ln( m_start / m_end )

Turn it around to ask what survives rather than what it costs, and the logarithm becomes the exponential the function returns:

m_end / m_start = exp( −Δv / v_e ) = exp( −Δv / (g₀ · Isp) )

That is remaining_mass_fraction, term for term. It reads inside-out, the way Rust's postfix methods make you read arithmetic:

The base is e rather than 10 or 2 for the same reason the integral was a logarithm: the propellant lost in any instant is proportional to the mass still there to lose. That is the one relationship e exists to describe.

Which makes the exponent the number worth carrying around. Spend exactly one exhaust velocity of delta-v, and e⁻¹ = 0.368 — 63% of the spacecraft is gone, whatever it weighed at launch and whatever engine you used. Spend two, and 86% is gone. Our ring spends 0.133 of an exhaust velocity every day, which sounds survivable until you notice it needs only seven and a half days to reach that first one.

What the function hands back, then, is a bare number between 0 and 1: what share of everything that left the launch pad is still aboard. Return 1.0, and nothing has been spent. Return 0.5, and half the spacecraft has gone out of the nozzle as exhaust.

Two consequences follow, and the ring suffers both. Delta-v and propellant are not proportional — double the delta-v, and you do not double the fuel; you square the surviving fraction. And time multiplies rather than adds: each day costs the same fraction of whatever is still there, so ten days is that fraction raised to the tenth power, not ten times the first day's loss.

At 1,800 km, the best row of the table, the ring burns 12.5% of each spacecraft's total mass every day. Compounded:

Compounding at 1,800 km, Isp = 3000 s:
mass remaining after one local year (11.2 Earth days): 22.5%
mass remaining after 30 Earth days: 1.8%

Sit with that. On this planet, a year lasts 11.2 Earth days — and in one of those years, a satellite launched at 500 kg has thrown 388 of those kilograms out of its own engines. A month in, 98% of the fleet's launched mass is gone, and that is with every kilogram counted as fuel: no panels, no radios, no computers, no structure. The constellation does not serve the civilization; it cremates itself above them, a ring of shrinking machines glowing faintly in the twilight sky. Somewhere in the AI's archives, we suspect, there are records of builders who tried.

The treasure in the trap

An idea this wrong usually contains something worth stealing, and this one does. A ring riding the terminator enjoys perfect power geometry: the star sits broadside to the ring's plane. Hence, panels face it squarely at all times, and a satellite over the twilight line never passes through the planet's shadow. No eclipses means no batteries drained every orbit, no freeze-thaw cycling, full power forever. For satellites that must carry radios — and, spoiler, far hungrier payloads — that is treasure.

We are not abandoning the treasure; we are declining to pay 3.9 km/s a day for it. Our constellation will fly fixed hoops — several of them, at angles around the planet, costing nothing to maintain — and let the twilight band sweep past them. At any moment, one hoop happens to be the aligned one: it enjoys the perfect sunlight and carries the traffic, then hands the duty to the next hoop as the planet turns. The rotation we refused to fight becomes a shift schedule.

That decision is recorded as ADR-0001 — an architecture decision record, the project's numbered log of every choice it commits to — priced by the numbers above. What it leaves open is everything else: how many hoops, how high, how many satellites on each — and height, it turns out, is a war between four things that all speak different units. Latency wants the satellites low. Coverage wants them high. Handovers want them slow. And one altitude the planet offers looks perfect for standing still — directly over the towns, forever — until you check whether the star lets it exist. Next time, we survey every shelf of the sky.