Skip to content

Roadmap: M0 to M8 #2

Description

@matt-edmondson

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:

  1. accumulates its own history by polling and storing snapshots, which means the first useful divergence measurement is days after the app first runs; or
  2. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions