Data engineering + Astrodynamics + Interface
Lodestar ranks 41,884 near-Earth asteroids by estimated mineral value against the Δv needed to reach them, so a screening question — which of these is even worth a second look — can be answered in one view instead of a week of reading.
It is a screening tool and it says so everywhere. No figure it prints is a measurement; each one carries the method that produced it and the width of the error around it, as real columns in the store rather than a disclaimer in a footer.
Screening grade. Never a measurement.
I went in knowing the astronomy would be the hard part and it was not. The orbital mechanics has been published for decades; the catalogues are open; the arithmetic that turns a diameter and a spectral class into a dollar figure is a page long.
What I did not expect was that the hard part would be honesty. Almost every asteroid mining figure in circulation — the trillion-dollar headlines — traces back to a value computed from an assumed composition for an object nobody has ever taken a spectrum of. The number is not wrong so much as it is unaccompanied. Nothing travels with it to say how it was made or how wrong it could be.
That is the pattern that bothered me. A screening tool that hides its uncertainty is not a screening tool, it is a slot machine. So the thesis for Lodestar is narrow and awkward on purpose: every value it shows is an estimate, every estimate carries its provenance and its band, and the interface is not allowed to make an inference look like a measurement.
Cheers,
C.D.
There are 41,884 near-Earth objects in the catalogue I ingest. 267 of them have a measured spectral type. That is six in every thousand. For the rest the composition — and therefore the entire value — is inferred, and a further 571 carry an ML-predicted type rather than a measured one.
Accessibility is uneven in a different way. Benner’s published Δv figures cover 999 objects and are reliable. For everything else there is no number at all, which in practice means people rank by value alone and end up staring at rich objects that would cost more to reach than they are worth. The delivered Δv envelope spans 3.2 to 31 km/s.
Ranking the full catalogue on both axes therefore meant computing both axes myself, for every row, and being explicit about which of the two ways each number was produced.
The single constraint I refused to trade: an inference must be structurally distinguishable from a measurement, everywhere downstream, forever. Not by convention, not by a note in the docs — by columns.
So the store carries value_source, value_is_estimate, value_low, value_high, size_source, spec_is_assumed, spec_source, dv_source and dv_rel_unc on every row. Nine columns that earn their storage by making a certain class of mistake impossible: no consumer of this parquet file can accidentally treat an assumed C-type as a confirmed one, because the flag rides along with the value.
The interface then has almost no judgement to exercise. It reads the flags and dims, widens or labels accordingly. That is why the provenance panel took an afternoon: there was nothing to compute, only something to display.
Phase 0 is the pipeline: uv-managed Python, JPL SBDB and Asterank pulled and normalised into a parquet store, with a coverage report printed at each step. Phase 1 is the data layer and the console: value and Δv computed for the full catalogue, served by FastAPI, ranked and filtered in a React front end that also ships as a static build with the data baked in.
Value runs size → mass → spectral-type composition → commodity value, with a low/high band throughout. Where the spectrum is missing it falls back to an assumed type and the band widens — by a lot, and visibly.
Δv uses Benner where Benner exists. Everywhere else it uses a patched-conic Hohmann rendezvous proxy computed from orbital elements, flagged computed:hohmann-proxy. It validates within roughly 2–25% of published values and, more importantly for a screening tool, it surfaces the genuinely cheap targets — Apophis, Itokawa, 2008 EV5 — in the right order. Ranking is what matters here, not absolute accuracy.
The proxy is the weakest part of the system and I would rather say so than let it be found. A patched-conic Hohmann transfer assumes coplanar circular orbits and a single impulsive burn. Real NEOs are inclined and eccentric, and a 25% error on Δv is the difference between a mission and a paper. It is adequate for sorting a list and nothing more; Phase 2 replaces it with ephemeris-based trajectory math and real launch windows.
The wide bands are honest but they are not yet useful. Telling someone an object is worth between $2.1B and $290B is true and close to actionable-free. Narrowing that span for the objects with no measured spectrum is exactly the job of the ML characterization layer, and it is not built yet — the current system is the ranking engine that will make its predictions worth having.
And the commodity prices underneath the value model assume today’s terrestrial markets, which is close to meaningless at these volumes. Every figure should be read as a relative score, not a price.
The trillion-dollar headline that started this was not a lie; it was a number that had lost its paperwork somewhere between a paper and a press release. Lodestar’s only real ambition is that its numbers cannot lose theirs — the band and the source travel with the value, all the way to the last column of the last row.