Download docs/ARCHITECTURE.md from Harp404/Space: direct link, hf CLI and curl.
- Browser
- Download file 9.12 kB
-
https://huggingface.co/spaces/Harp404/Space/resolve/main/docs/ARCHITECTURE.md
- Command line
-
hf download hf://spaces/Harp404/Space/docs/ARCHITECTURE.md
-
curl -L -o ARCHITECTURE.md https://huggingface.co/spaces/Harp404/Space/resolve/main/docs/ARCHITECTURE.md
Architecture & Scale
AstroMesh Round 2 β Challenge #518, Constraint Awareness: Completion Signal
1. The shape of it
ββββββββββββββββββββββββββββββββββββββββββββ
β CONSTRAINT ENGINE β
β dev/constraints/engine.js β
β β
rulebook ββββββββββΊ β rulebook + context β completion signal β
context ββββββββββΊ β β
β COMPLETE Β· PARTIAL Β· BLOCKED Β· β
β UNRESOLVED β
β β
β Knows nothing about satellites. β
ββββββββββββββββ¬ββββββββββββββββββββββββββββ
β
ββββββββββββββββββββ¬ββββββββββββ΄ββββββββββββ¬βββββββββββββββββββββ
βΌ βΌ βΌ βΌ
βββββββββββββ βββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β maneuver β β re-entry β β authored β β release β
β rulebook β β rulebook β β (English β β β gate β
β 19 rules β β 9 rules β β verified) β β 10 rules β
βββββββββββββ βββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β β NOT SPACE β
β β the portability
βΌ βΌ proof
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β vote gate (409) Β· deterministic poll Β· propellant ledger β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The engine is the product. The rulebooks are data. That separation is what makes the capability theme-independent, and it is verified by a test that runs a software release gate through the same code path.
2. Where the inputs come from
| Layer | Source | Live? | Feeds |
|---|---|---|---|
| Catalogue | Space-Track, ~31k objects, 3Γ/day | yes | FR-00, FR-03, FR-22 |
| Conjunctions | our own SGP4 screening | computed | FR-01, FR-10, FR-12 |
| CDMs | 19th SDS via Space-Track | yes | FR-11 |
| Operator ephemeris | SpaceX Starlink Space Safety | operator-gated (403) | FR-11 β reports UNEVALUATED without access |
| Space weather | NOAA SWPC, no API key | yes, 5 min | FR-19, FR-20, FR-21 |
| Solar X-ray | NOAA GOES XRS, two bands | yes, 2 min | FR-19 predictive deadline |
| Ground consequence | GeoNames + OpenFlights + Natural Earth | static, 4.4 MB | FR-17a, FR-17b, FR-23 |
| Maritime | not loaded | no | FR-24 β UNEVALUATED, never "clear water" |
| Models | trained offline, shipped as JSON | n/a | FR-07, FR-10, FR-13 |
Every absent source degrades to UNEVALUATED. Nothing defaults, nothing imputes, nothing assumes a quiet Sun or an empty ocean.
3. Scale
What it handles today
| Quantity | Measured |
|---|---|
| Catalogue screened | 31,572 objects |
| Conjunction screening | apogee/perigee sieve β coarse β fine TCA refine |
| Ground raster | 259,200 cells, 100% characterised, 4.4 MB |
| Monte Carlo footprint | 20,000 samples per deorbit, deterministic |
| Constraint evaluation | 28 rules Γ N events, pure arithmetic, no I/O |
| Refresh cadence | 8 h catalogue Β· 5 min space weather Β· 2 min X-ray |
| Consensus | 4 nodes, quorum 3, sub-second failover |
| Formal verification | 148,163 states exhaustively checked |
How each part scales
The constraint engine is the easy part. It is stateless and linear in
rules Γ events with no I/O β 28 rules over 38 events is roughly a thousand comparisons.
100,000 events would still be milliseconds. It is not, and will not become, the bottleneck.
Conjunction screening is the real cost. All-pairs over a catalogue is O(nΒ²) β for 31,572 objects that is half a billion pairs. The sieve is what makes it tractable:
apogee/perigee filter O(nΒ²) pair rejection on scalars, no propagation
β ~99% rejected
coarse screen 300 s steps over a 24 h window
β
fine TCA refinement only for candidates inside the gate
Naming the ceiling. At ~31k objects a full screening pass takes 1β2 minutes on one core. At 100k it becomes the bottleneck β which is precisely where a GNN pre-filter earns its place (published work reports 100,000 objects in 920 ms at 90.3% recall). The architecture for that is already the one we use elsewhere: the model proposes, the physics disposes, and anything flagged-but-unverified sits at UNRESOLVED rather than being silently trusted.
Consensus. Quorum is βn/2β+1; nothing assumes four nodes. Forty operators works with the
same protocol and the same TLA+ model, re-checked with a larger Nodes constant.
The demo path has no scaling risk at all. SNAPSHOT=1 serves 13.9 MB of frozen real data,
and FR-00 still audits its age.
4. Failure behaviour
This is the part worth reading twice, because it is the product.
| Failure | What happens |
|---|---|
| Space-Track stale | FR-00 BLOCKS the whole system. It audits our own evidence first |
| NOAA down | FR-19/FR-21 β UNEVALUATED β UNRESOLVED. Never "conditions are fine" |
| GOES X-ray down | FR-19 loses its predictive deadline, keeps its current-state check |
| Operator feed gated | FR-11 β UNEVALUATED. We never label screening-grade data operator-grade |
| Model artefact absent | The rule it feeds reports UNEVALUATED. No default, no imputation |
| Model artefact mismatched | REFUSED at load. Better no model than one fed the wrong columns |
| A rule evaluator throws | That rule becomes UNEVALUATED, never SATISFIED |
| Sources disagree | UNRESOLVED. We do not average two disagreeing measurements |
| Verifier unreachable | An authored rule is refused, not admitted unverified |
| Snapshot goes stale | FR-00 blocks, exactly as with live data |
There is no path in this system where absence becomes permission.
5. Verification
| What | How | Result |
|---|---|---|
| Engine semantics | node dev/constraints/engine.test.js |
65/65, offline, <1 s |
| Vote determinism | same event Γ 200 polls | 1 distinct outcome |
| Formal safety | tlc -config ConstraintGate.cfg |
148,163 states, 0 violations |
| The old bug | tlc -config ConstraintGateBug.cfg |
2-state counterexample |
| Propagator | vs ESA dSGP4, 800 propagations | 0.000 m |
| Classifier | real catalogue rows | ISSβCREWED, STARLINKβAUTOMATED_COLA, DEBβNONMANEUVERABLE |
| Portability | release-gate rulebook | 4/4 states, 0 engine changes |
6. Honest limitations
Stated here rather than waiting to be asked.
- Population is settlement-based (GeoNames β₯15,000), not gridded. Rural exposure is undercounted, so our casualty numbers are optimistic. GHSL at 100 m is the upgrade.
- Maritime exposure is not modelled. FR-24 reports UNEVALUATED.
- Debris casualty area is taken from published survivability data, not modelled. Fragment ablation is a research programme.
- The classifier's MANEUVERABLE precision is 0.52. Weak supervision from names; the objects it exists for are the ones we cannot score.
- The maneuver detector separates active from inert by only 3.2% vs 2.0%. A robust z-score adapts to each object, so a constellation that manoeuvres constantly gets a wide baseline and its own burns stop looking anomalous. Most useful on objects that manoeuvre rarely.
- The flare forecast projects the peak of a flare already beginning. It does not predict onset from a quiet Sun.
- Propellant state is operator-declared and simulated here; no public feed exists. Flagged
simulated: truein every payload. Consumption is real; the starting balance is declared. - APPROVED is a coordination decision, not a command to hardware.