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.
![]()
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. 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.
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 anchored 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 can afford it. 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 functions that price it are short enough to read like the formulas they implement:
/// Circular orbital velocity at the given altitude above the surface, m/s.
pub fn orbital_velocity(body: &CentralBody, altitude: f64) -> f64 {
(body.mu / (body.radius + altitude)).sqrt()
}
/// 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 is how fast the satellite must travel to hold a circle at that
altitude. body.mu is the standard gravitational parameter: the planet's
mass times Newton's gravitational constant, a single number for how hard
this world pulls, unpacked in the next section.
Dividing it by the orbital radius before taking the square root is why the
table further down shows v falling as altitude climbs: the higher ring
is the slower one. The second is the lap in the figure above, written down:
one full turn, 2π radians, spread evenly over one rotation period. The
third charges that swing at the satellite's own speed.
Why the swing costs the whole arrow
That last 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)
θ = 60°. Drawing 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.
θ = 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.
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 on to what is changing and what is not. The speed v is fixed; only the
direction e turns. So the entire bill is the cost of turning a unit vector,
and the question narrows to one thing: when you rotate a unit vector, how fast
does its tip move?
Picture a clock hand exactly one unit long. Swing it through an angle and its tip travels along a circular arc. Arc length is radius times angle, and here the radius is 1 — so the tip travels a distance equal to the angle itself. Go the whole way round and the tip has covered the circumference of a unit circle — which is why a full turn measures 2π radians, and where the ω a few lines up comes from: one turn, spread over 11.2 days. Swing the hand at ω radians per second, then, and its tip moves at ω per second. It also moves sideways to the hand, the way every point on a circle does.
Those are the two things the formula names — the size ω, and the direction
e_perp:
dv_vec/dt = v · de/dt = v · ω · e_perp
ω = the rate e turns, rad/s
e_perp = a unit vector at right angles to e,
pointing the way the tip of e is moving
The real velocity vector is v times longer than the unit one, so every
length scales by v. That makes the left side an acceleration of size v·ω,
aimed at right angles to the track — which is to say out of the orbital plane,
exactly where a plane change has to push.
Delta-v is that acceleration added up over time. Both v and ω hold still
here, so the sum is a plain multiplication, and ω times an elapsed time is
nothing more than the total angle turned in that time. Holding that push steady
is an idealization: Two hands on the wheel shows why
it is hardest over the poles and falls to nothing at the equator.
Δ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. The card at the top of this page has been showing this all along: 32 degrees of plane rotation a day, the 3.9 km/s that buys them at 1,800 km, and an eighth of the satellite gone by tomorrow.
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.
Turn that around and it says something sharper: equal fractions of the ship, not equal kilograms, buy equal delta-v. Halving the mass from 500 kg to 250 kg buys exactly what halving it again from 250 to 125 buys, even though the second halving spends half as much propellant. Two halvings buy twice as much as one. So the mass ratios multiply while the delta-v adds up, and the function that turns multiplying into adding is the logarithm — which is also why the mass enters as a ratio rather than a difference:
Δv = v_e · ln( m_start / m_end )
That formula answers "what did it cost?". The function asks the opposite question — what is left? — and getting there takes three moves:
Δv / v_e = ln( m_start / m_end ) divide by the exhaust velocity
m_start / m_end = exp( Δv / v_e ) undo the logarithm
m_end / m_start = exp( −Δv / v_e ) flip the ratio, and the sign flips
The last line is worth dwelling on, because it is where the minus sign is born.
Flipping a ratio means taking one over it, and one over eˣ is e⁻ˣ — a
reciprocal negates an exponent. The minus is not a physical choice about decay;
it is the arithmetic of having turned the question round.
Substitute g₀ · Isp back in for the exhaust velocity, and the exponent is the
one in the code:
m_end / m_start = 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:
ideal_plane_change_dv_per_day(body, altitude) * daysis the delta-v the ring has been asked to buy over the whole stretch.- Dividing by
G0 * ispdivides it by the exhaust velocity. Both are speeds, so the units cancel, and the exponent is a pure number — how many exhaust velocities' worth of delta-v the maneuver demands. .exp()is Rust for e to the power of. Where most languages writeexp(x)as a function wrapped around the number, Rust hangs it off the number as a method, sox.exp()iseˣ. The parentheses around(-dv / (G0 * isp))exist only to give the method something to attach to.- The leading minus is the flipped ratio from three formulas up. Drop it and the expression describes a ship that gains mass as it burns.
The base is e rather than 10 or 2 because the adding up happens continuously:
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.
Two hands on the wheel
We have priced this ring without once saying how it would actually be flown, and the answer is stranger than every satellite firing its engine. It is also already drawn: the picture at the top of this page is a diagram of it, worth a scroll back once the thrusters mean something.
Start with the shape. The ring stands on edge, pole to pole, with the planet's spin axis lying inside it like a diameter drawn across a hoop. Following the twilight band means spinning that hoop about that diameter, the way a coin spins about a line drawn down its face.
Now picture a steering wheel. To turn one you pull down with one hand and push up with the other — opposite directions on opposite sides. Push both hands the same way and the wheel does not turn at all; you have shoved the whole column sideways. Rotation needs opposed pushes.
The ring is not a wheel, though, and here the picture can mislead. The red hoop is a shared path, not a structure: nothing connects those satellites, and each one steers its own orbit. What makes the opposition necessary is not a rigid body but a change of sides. A satellite over the north pole and one over the south pole sit on opposite sides of the planet, so the same push would swing their two orbits in opposite senses. Reverse the push along with the position, and both orbits turn the same way.
So the thrusters must fire opposite ways in the two hemispheres. In the image, remember that what you see is exhaust, and the push is the other way:
| Satellite | Exhaust in the image | Push on the satellite |
|---|---|---|
| North | right | left |
| Equator | none | no steering thrust |
| South | left | right |
The equator satellite is the surprising one, and it is not resting out of thrift. A sideways push there does something real — it tilts the orbit away from polar, changing what the textbooks call inclination. What it does not do is swing the plane around the spin axis, which is the only motion the twilight band asks for. Its contribution to that job, at that instant, is exactly zero. Firing there would buy the wrong rotation.
Over the poles it is the reverse: the whole push goes into the rotation we want, and none of it leaks into tilting. Orbital mechanics has had a name for this for a century — change planes at the node, where the old orbit and the new one cross, because there the two share a position and only direction has to be bought. Today's plane and tomorrow's cross along the axis they both turn about, and that line pierces the ring at the poles. The poles are the nodes. The bookkeeping underneath is the Gauss planetary equations, which say exactly how much of a sideways push lands on each part of an orbit's orientation.
A smooth steering schedule therefore pushes hardest at the poles, tapers off approaching the equator, goes quiet at the crossing, and returns reversed on the far side. That is the pattern in the image. The exact taper is a design choice; the hemisphere reversal is not.
It is also not the cheap way to fly. The table's figures are the floor: what
the turn costs if you hoard it for the poles and spend it there in short,
well-aimed shoves. Steering smoothly the whole way around means thrusting
through latitudes where much of the effort buys the wrong rotation, and the
toolkit prices that law too —
crates/orbits/src/plane_tracking.rs
puts it at 5.0 km/s a day against the floor's 3.9, a peak of 45.4 newtons
where the even spread asked 22.7, and 15.6% of the spacecraft gone daily
rather than 12.5%. The card at the top of this page carries the optimistic
numbers. Neither law rescues the design; both are the bill for insisting that
the ring stay put.
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.