Tracking issue for the milestones in docs/spec.md.
M5 is the milestone that justifies the project. Everything before it is infrastructure; everything after it is elaboration. Every quantitative figure in the spec is a projection until M5 replaces it with a measurement.
|
Deliverable |
Gate |
Status |
| M0 |
Repository, specification, CI |
— |
✅ done (#1) |
| M1 |
Sgp4<T> generic, double path |
Vallado verification suite passes |
open |
| M2 |
CelesTrak client and cache; TLE-vs-later-TLE divergence; catalogue and globe |
An end-to-end divergence number for the ISS |
open |
| M3 |
PreciseMath, the PreciseNumber path, high-precision π |
Performance gate |
not filed |
| M4 |
Frames (TEME↔ITRF↔GCRF) and EOP; CDDIS/ILRS SP3 |
LAGEOS-1 against laser-ranging truth |
not filed |
| M5 |
Storage comparison panel; Monte-Carlo Δ_data; element inspector |
The decomposition works |
not filed |
| M6 |
Cowell integrator and force model; time inspector |
The Julian Date staircase |
not filed |
| M7 |
Space-Track; JPL Horizons third bodies |
Full catalogue, element-set history |
not filed |
| M8 |
Conjunction screening, polish, documentation |
— |
not filed |
M3 onwards are deliberately not filed yet. Their content is in the spec, and filing thin placeholders for work months out is tracker noise — each gets an issue when it is next.
Upstream dependencies
| Issue |
Blocks |
Effect |
| PreciseNumber#78 |
M3 |
PreciseNumber implements INumber<T> and nothing else — no Sqrt, Sin, Cos, Atan2, all of which SGP4 needs. Osculator.Math.Precise supplies them locally until it lands. |
| PreciseNumber#79 |
M3 |
π carries 26 significant digits against a default division precision of 50, so argument reduction caps the precise path near 21 usable digits. Must be resolved before M5's numbers can be trusted. |
| Semantics#237 |
M1 (ergonomics) |
Vector forms have no From{Unit} factories, so every Position3D is built in raw metres with a hand-written ×1000. |
| Semantics#239 |
M1 |
StorageMath.Sqrt<T> is internal, so the type-generic Newton root has to be reimplemented here. |
| Semantics#240 |
M1 |
No GravitationalParameter dimension, so μ is carried as a bare T. |
| Semantics#244 |
— |
Already worked around with PrivateAssets="all"; recorded so the workaround can be removed when it is fixed. |
| ImGuiApp#411 |
M2 |
No virtualized table, and the catalogue is ~30,000 rows. |
| ImGuiApp#413 |
M2 |
No backend-agnostic 3D; the globe is a CPU raster uploaded per frame until this lands. |
None of these block M1, whose gate is the double path.
A sequencing problem in the spec, worth settling before M2
M2's loop is "propagate an old element set forward and compare against a later one for the same object" — which needs an element-set history. CelesTrak serves the current elements for an object, not past ones. So M2 as specified either:
- accumulates its own history by polling and storing snapshots, which means the first useful divergence measurement is days after the app first runs; or
- needs Space-Track, which the spec schedules at M7 and which is the only source here that carries historical element sets.
Option 2 pulls a credentialed data source forward into the milestone the spec wanted to depend on only CelesTrak. Option 1 keeps M2 auth-free but makes its gate untestable on day one. Raised in #3.
Tracking issue for the milestones in
docs/spec.md.M5 is the milestone that justifies the project. Everything before it is infrastructure; everything after it is elaboration. Every quantitative figure in the spec is a projection until M5 replaces it with a measurement.
Sgp4<T>generic,doublepathPreciseMath, thePreciseNumberpath, high-precision πM3 onwards are deliberately not filed yet. Their content is in the spec, and filing thin placeholders for work months out is tracker noise — each gets an issue when it is next.
Upstream dependencies
PreciseNumberimplementsINumber<T>and nothing else — noSqrt,Sin,Cos,Atan2, all of which SGP4 needs.Osculator.Math.Precisesupplies them locally until it lands.From{Unit}factories, so everyPosition3Dis built in raw metres with a hand-written ×1000.StorageMath.Sqrt<T>isinternal, so the type-generic Newton root has to be reimplemented here.GravitationalParameterdimension, so μ is carried as a bareT.PrivateAssets="all"; recorded so the workaround can be removed when it is fixed.None of these block M1, whose gate is the
doublepath.A sequencing problem in the spec, worth settling before M2
M2's loop is "propagate an old element set forward and compare against a later one for the same object" — which needs an element-set history. CelesTrak serves the current elements for an object, not past ones. So M2 as specified either:
Option 2 pulls a credentialed data source forward into the milestone the spec wanted to depend on only CelesTrak. Option 1 keeps M2 auth-free but makes its gate untestable on day one. Raised in #3.