|
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
9.12 kB
| # 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: true` in every payload. Consumption is real; the starting balance is declared. | |
| - **APPROVED is a coordination decision**, not a command to hardware. | |