Skip to contentSkip to Content
ProjectsPRJ-001Architecture

Architecture

Active

Overview

Two Rust crates. The first holds the threat model, the geometry, the estimator and the detector, and has no dependencies at all. The second adds real ephemeris: it loads two-line element sets, propagates them with SGP4, and converts the result into the local frame the first crate estimates in.

The split is the main architectural decision. It exists so the central claim — that a uniform timing offset produces zero displacement — can be verified on any machine with a Rust toolchain, with no crates to resolve, no network, and no version drift. Everything that needs the outside world is quarantined in the second crate.

Components

ComponentResponsibilityImplementationArtifact
geometryENU frame, line-of-sight, geometry matrix H\mathbf{H}, HDOP, Cramér–Rao resolutionthreat-model/src/geometry.rsCODE-001
adversaryClasses A3 to A6 behind a trait, plus an honest baselinethreat-model/src/adversary.rsCODE-001
estimatorGauss–Newton solve for [pE,pN,b][p_E, p_N, b]threat-model/src/estimator.rsCODE-001
detectorDensity-based relay detection, per-cell quota, terminal-count boundthreat-model/src/detector.rsCODE-001
rngSeeded xorshift64* with Box–Mullerthreat-model/src/rng.rsCODE-001
linalg3×3 inverse and least squaresthreat-model/src/linalg.rsCODE-001
constellationWalker-delta fallback, dependency-freethreat-model/src/constellation.rsCODE-001
ephemerisTLE loading, SGP4, TEME→ECEF→ENU, visibility, diverse selectionephemeris/src/lib.rsCODE-002

Artifact identifiers are provisional; the code is not yet registered under artifacts.

Interfaces

BetweenContractFormatFailure mode
ephemeristhreat-modelVec<Satellite> in the site’s local ENU frame, position and velocity in metresIn-processFewer than three satellites: estimator returns Underdetermined rather than a wrong fix
Adversary → detectorVec<Session>, each a set of pseudoranges plus ground truth for scoringIn-processGround truth is never visible to the detector, only to the scorer
Evaluation → paperEight CSVsCSVOnly eval-relay.csv is consumed automatically, by pgfplots at LaTeX compile time
CelesTrak → archiveThree-line TLETextRate-limited with HTTP 403 and a plain-text body; archived rather than fetched at run time

The last row is deliberate. Nothing fetches at run time, so a result is reproducible from the repository alone.

Technology choices

DecisionChosenRejectedReason
Core crate dependenciesNonenalgebra for linear algebraThree unknowns means a hand-rolled 3×3 inverse is clearer and removes the last barrier to reproducing the central theorem
RandomnessHand-rolled xorshift64* + Box–Mullerrand crateA seed must reproduce identical noise across machines and across dependency updates. A crate bump could silently change results
Propagatorsgp4 crateHand-rolled SGP4SGP4 is intricate and getting it subtly wrong would invalidate everything downstream. Validated against a known reference before use
Element setCelesTrak supplemental GP, archivedLive fetch at run timeReproducibility. Also CelesTrak rate-limits, so a live fetch is not reliable
Constellation modelReal TLEsWalker-delta from published shell parametersUsed the Walker model while CelesTrak was unreachable; replaced it as soon as real elements were available. Retained as a dependency-free fallback
Link selectionselect_diverse, greedy max-min angular separationSix highest-elevation satellites2.7× better median HDOP. High satellites cluster near zenith and leave H\mathbf{H} ill-conditioned
Relay detectionDensity over a 2δ2\delta neighbourhoodFixed grid of pitch δ\deltaThe grid fragments a real cluster: 45 of 200 relayed identities in the modal cell
Figure generationpgfplots reading CSV at compile timeExported imageA figure that reads its own data cannot silently disagree with it

Reproducibility

Every component that produces a reported number lives in one repository at a known commit. A run is fully determined by three things: the archived element set, the seed, and the source constants. There is no wall-clock dependence and no network access at run time.

ComponentRepositoryPin
threat-modelund-phd/fall2612dbcc9
ephemerisund-phd/fall2612dbcc9
Element set (primary)ephemeris/data/starlink-supplemental-20260829.tle10,734 elements, median epoch 2026-08-29 21:17:42 UTC
Element set (cross-check)ephemeris/data/starlink-gp-20260830.tle10,731 elements, median epoch 2026-08-30 06:08:36 UTC
Seed20271002

Operating instructions are in SIMULATION.md at the repository root.

Last updated on