Motion is a model, not a datum. Nothing in a position and a velocity says where the satellite will be ten minutes from now. That answer requires a claim about the forces at work, and the claim is called a dynamics model. A propagator is the machine that applies it: photograph in, motion picture out. Every trajectory in every session is some propagator's opinion, and the lab's job is to know exactly which opinion it is running.

The oldest opinion is still the workhorse. Two-body propagation assumes one gravity source and nothing else, and the result is the conic sections Kepler found by hand: closed ellipses, fixed planes, clockwork phase. It is cheap, deterministic, and honest about what it ignores. For a synthetic constellation that exists to generate handovers and latency, it is frequently all the physics the experiment needs.

One step up sits J2. A planet is not a point mass; it bulges at the equator, and the bulge tugs asymmetrically. The visible consequence is drift: orbital planes precess around the pole, perigees creep around their orbits. Slow, steady, secular. That drift is why sun-synchronous orbits work and why a constellation's geometry ages. Here is the model in the actual catalog, from catalog/nodalarc/orbits/earth/leo/earth-leo-starlink.yaml:

orbit:
  id: earth-leo-starlink
  central_body: nodalarc:bodies/earth.yaml
  epoch: '2026-06-08T00:00:00Z'
  shape:
    altitude_km: 550
  orientation:
    inclination_deg: 53.0
    raan_deg: 0.0
    argument_of_perigee_deg: 0.0
  phase:
    mean_anomaly_deg: 0.0
  propagator: j2_mean_elements
  reference: https://fcc.report/IBFS/SAT-MOD-20200417-00037/2269026.pdf

A notebook has to be honest about names. What j2_mean_elements does is apply the secular J2 drift to mean elements, and nothing else. No short-period wobble, no drag, no higher harmonics, no station keeping. The name a model deserves is the name of what it does, and the honest name here is closer to j2_secular_mean: a model that implies more physics than it applies is a rumor.

The third family we already met in post 013 (Which Map, Which Clock). A TLE and SGP4 are a matched pair: elements fitted to one specific propagator, meaningful only through it. That is why a TLE in this grammar is a placement source for one specific spacecraft and not a reusable orbit template. A space node declares exactly one trajectory source, orbit or TLE or state, and the resolver checks that the runtime actually supports what was declared.

The trajectory that is not an orbit

Everything above orbits one body. A Lagrange-point relay does not, and Kepler elements cannot describe it.

The L-points are where two bodies' gravity and the rotation of their system balance. They are only fixed places in the rotating frame that pins the two-body line, and the useful ones are not even stable. A spacecraft does not sit at L2; it flies a halo orbit around it and spends fuel to stay. The trajectory is a citizen of a three-body system, defined by a primary, a secondary, a rotating frame, and an initial state. That is a different species of object from a classical orbit, and the grammar keeps it separate rather than wedging a restricted three-body problem into a field built for ellipses.

The practical answer for these trajectories is humbler than the mathematics. NodalArc needs the resulting motion, not the mission-design problem that produced it. Mission or synthetic ephemerides, SPK kernels and OEM files, replay a time-indexed trajectory somebody already computed and validated. For NRHO-class relays and halo orbiters, replaying an authoritative trajectory beats implementing a trajectory-design suite, and it carries provenance for free.

Halo orbit

A halo orbit is a large, periodic loop around a Lagrange point, existing only in the rotating frame of the two bodies. The Webb telescope flies one around Sun-Earth L2, circling the point roughly twice a year at distances that swing hundreds of thousands of kilometers, with periodic burns to stay on it, because L2 itself is unstable.

The networking consequence: a relay "at L2" is really a moving endpoint on a loop bigger than the Earth-Moon distance. Model it as a fixed point and the range, delay, and pointing geometry are all fiction.

The error that matters is the one the network can feel

Now the doctrine this post exists to state. NodalArc is not a flight dynamics system. Its product is a network stimulus: a coherent moving topology with link appearance, disappearance, occlusion, handover, and range-derived latency. So the correctness of a propagation model is not measured in kilometers. It is measured at the network boundary. Which links exist. In what order they appear and disappear. Approximately when the transitions land. What propagation delay is applied. Whether the same input produces the same event trace, every run. Whether two routing systems can be shown exactly the same trace.

Run the numbers on why kilometers mislead. A 30 kilometer range error changes one-way propagation delay by a tenth of a millisecond. Against an IGP with second-scale timers and tens of milliseconds of orbital delay, that is nothing. The same 30 kilometers at a visibility boundary can move a handover by several seconds, or hand the pass to a different satellite entirely. Same error, opposite verdicts: the magnitude was never the question, only whether the error lands somewhere the network can feel it.

FIG.01 - Where the error lands SAME 30 KM, OPPOSITE VERDICTS
ELEVATION MASK GROUND STATION MID-PASS, THE GAP IS 0.1 MS OF DELAY LINK AT T LINK AT T + SECONDS THE PASS IS FORGIVING IN THE MIDDLE AND UNFORGIVING AT THE MASK.
Two trajectories thirty kilometers apart flying the same pass. In the middle the difference is a tenth of a millisecond of delay; where the arc crosses the elevation mask it is seconds of handover time, or a different satellite winning the pass. The trace, not the trajectory, is the judge.

So the standard reads like this. A propagation model is fit for purpose when it preserves the topology, event timing, and latency characteristics the experiment depends on. It does not need to reproduce the real spacecraft to navigation accuracy, and chasing that accuracy buys nothing once the trace stops changing. The inverse also holds, and it is the sharper edge: a sophisticated model that mixes frames or produces nondeterministic event timing is not fit for purpose at any accuracy. A protocol comparison survives a coarse orbit, because both contenders receive the same generated world. It does not survive a world that is different on every run.

Network-relevant fidelity, not astrodynamics prestige. That is the whole doctrine.

Record the opinion

One obligation follows from everything above. If every trajectory is some model's opinion, the opinion is part of the measurement, and it has to travel with the results.

That is the propagation manifest taking shape on this bench: for every node in the resolved session, the source kind, the referenced document, the dynamics model, the implementing code, and a fidelity class that says plainly whether this trajectory is synthetic-representative, a catalog replay, or an ephemeris replay. The authored YAML stays concise. The resolved record is where the detail belongs, immutable, alongside the event trace it explains. Six months later, the question about a surprising result is never going to be what the latency was. It is going to be which opinion of the sky produced it, and the manifest is the only honest answer.

The model does not need to be sophisticated. It needs to be declared, deterministic, frame-coherent, and on the record.

What's next

The foundations are laid and the contract holds at both ends. The next comparison returns to measurement: same world, same declarations, different forwarding authority. The architecture only matters if it gives the result a clean name.