Space / docs /ARCHITECTURE.md
Harp404's picture
Round 2 β€” Constraint Awareness: Completion Signal
87bb7d6
|
Raw History Blame Contribute Delete
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.