Receiver Architecture Guide¶
bijux-gnss-receiver owns staged runtime execution. The engine validates
configuration and composes effects; acquisition, tracking, observations, and
optional navigation adapters exchange typed state; artifacts and diagnostics
record what happened without choosing repository placement.
Runtime Structure¶
flowchart LR
config["validated receiver<br/>configuration"]
ports["samples, clock,<br/>sinks, metrics"]
engine["receiver engine"]
acquisition["acquisition"]
tracking["tracking"]
observations["observations"]
navigation["optional navigation"]
artifacts["in-memory artifacts<br/>and diagnostics"]
config --> engine
ports --> engine
engine --> acquisition --> tracking --> observations --> navigation
acquisition --> artifacts
tracking --> artifacts
observations --> artifacts
navigation --> artifacts
Every stage may enrich evidence, but no stage may erase uncertainty, ambiguity, degradation, or refusal from the stage before it.
Locate The Runtime Owner¶
| concern | architecture route | ownership rule |
|---|---|---|
| Configuration, defaults, validation, runtime effects, support, or top-level composition | Module map | engine code owns receiver policy, not command defaults |
| Acquisition, tracking, observations, or optional navigation order | Execution model | pipeline stages own handoff and lifecycle evidence |
| Samples, clocks, artifacts, metrics, tracing, or logs | Integration seams | effects cross explicit ports rather than hidden globals |
| Dependency on core, signal, navigation, infrastructure, or command | Dependency direction | receiver composes lower science and is consumed by higher repository layers |
| Channel state, filter state, artifacts, or persisted runs | State and persistence | receiver owns in-memory runtime state; infrastructure owns durable placement |
| Input, acquisition, tracking, observation, or navigation failure | Error model | failure remains attributable to the earliest failing boundary |
| New stage, adapter, port, or artifact family | Extensibility model | additions require durable runtime responsibility and evidence |
| Cross-stage coupling or imported repository policy | Architecture risks | convenience must not blur scientific or persistence ownership |
State Moves Forward, Evidence Fans Out¶
flowchart TD
candidate["acquisition candidate"]
channel["tracking channel state"]
measurement["observation decision"]
solution["optional navigation outcome"]
acq_evidence["candidate evidence"]
track_evidence["lock and transition evidence"]
obs_evidence["quality and refusal evidence"]
nav_evidence["solution or refusal evidence"]
run["run artifacts"]
candidate --> channel --> measurement --> solution
candidate --> acq_evidence --> run
channel --> track_evidence --> run
measurement --> obs_evidence --> run
solution --> nav_evidence --> run
The runtime path and evidence path are related but not identical. A rejected candidate may never become a channel yet still belongs in acquisition evidence. A refused observation may stop navigation input yet remain essential to diagnosis.
Effects Are Replaceable¶
Stage math must not open repository files, choose run directories, read wall-clock time implicitly, or render command reports. Samples and time enter through owned seams; artifacts, diagnostics, metrics, traces, and logs leave through explicit runtime boundaries. Tests can replace those effects without changing stage semantics.
Optional Navigation Is An Adapter¶
The receiver decides when observations are ready for a navigation call and how the resulting evidence joins a run. Navigation owns orbit, correction, estimation, integrity, PPP, and RTK science. Feature-gating the adapter must not change ownership or semantics of acquisition, tracking, or observations.
Implementation Evidence¶
Use code navigation after identifying the concern. The implementation authorities are the receiver engine, pipeline boundary, runtime ports, sample adapters, artifact model, and simulation boundary.
The crate architecture defines the complete runtime dataflow and dependency boundary.