Skip to content

Receiver Ownership Boundaries

bijux-gnss-receiver owns live receiver execution: configuration, sample consumption, acquisition and tracking stages, channel lifecycle, observation production, optional navigation handoff, runtime diagnostics, and in-memory run evidence.

It coordinates signal and navigation capabilities without taking ownership of their science. It emits artifacts without defining repository persistence.

Place Runtime Behavior

flowchart TD
    proposal["proposed capability"]
    run{"Does it depend on one receiver<br/>run, channel history,<br/>or stage ordering?"}
    signal{"Is it reusable signal math<br/>without receiver policy?"}
    nav{"Is it navigation-domain<br/>correction or estimation?"}
    persistence{"Does it define repository<br/>layout or durable storage?"}

    proposal --> run
    run -->|yes| receiver["receiver owner"]
    run -->|no| signal
    signal -->|yes| signal_owner["signal owner"]
    signal -->|no| nav
    nav -->|yes| nav_owner["navigation owner"]
    nav -->|no| persistence
    persistence -->|yes| infra["infrastructure owner"]
    persistence -->|no| neighbor["core or command owner"]

Receiver is the right owner for:

  • composing acquisition, tracking, observation, and navigation stages;
  • consuming samples through runtime source boundaries;
  • scheduling channels and retaining per-channel history;
  • declaring lock, degradation, refusal, loss, and reacquisition transitions;
  • applying runtime configuration and stage budgets;
  • converting stage outputs into observations and run artifacts;
  • emitting metrics, traces, diagnostics, and sink events;
  • executing deterministic synthetic scenarios through the receiver pipeline;
  • receiver-boundary validation that assesses emitted runtime evidence.

Reusable Math Versus Operational Policy

Signal and receiver code both discuss code phase, carrier phase, correlation, C/N0, loop updates, and uncertainty. The boundary is how much run context the decision requires.

reusable signal responsibility receiver responsibility
generate or sample a code at an explicit phase choose the code, phase seed, and search interval for a channel
advance an NCO or local-code model preserve channel continuity across epochs and interruptions
compute a discriminator or loop update from explicit inputs choose loop profile, apply lifecycle policy, and decide degradation
correlate samples with an explicit replica schedule correlations and retain prompt history
calculate a lock metric or calibrated threshold declare and report channel lock using run history and policy
estimate uncertainty from explicit statistics attach uncertainty to channel and observation evidence
flowchart LR
    samples["sample frame"]
    primitive["signal primitive"]
    measurement["correlation, metric,<br/>or loop update"]
    history["receiver channel history"]
    policy["runtime policy"]
    state["channel transition<br/>and artifact"]

    samples --> primitive --> measurement
    measurement --> history
    policy --> history
    history --> state

Move behavior to signal processing when it can be tested with explicit mathematical inputs and remains useful outside a receiver session. Keep it here when channel history, stage ordering, configured thresholds, degraded-state handling, or run evidence changes the outcome.

Receiver owns when observations are handed to navigation and how navigation results participate in a receiver run. Navigation science owns:

  • product decoding and orbit state;
  • correction models and combinations;
  • weighting, filtering, integrity, PPP, and RTK algorithms;
  • navigation convergence, ambiguity, maturity, and refusal semantics.

The receiver may retain a navigation engine or filter as part of runtime composition. That does not make estimator formulas or scientific thresholds receiver-owned. Receiver tests should prove the stage handoff and artifact continuity; navigation tests should prove the scientific decision.

Ports And Effects

The receiver public facade exposes runtime configuration, metrics, traces, clocks, sample and artifact ports, concrete sample sources, stage engines, tracking sessions, observation builders, and run artifacts.

sequenceDiagram
    participant S as Sample source
    participant R as Receiver runtime
    participant P as Signal primitive
    participant N as Navigation engine
    participant A as Artifact sink

    R->>S: request next frame
    S-->>R: samples or end of stream
    R->>P: acquire, correlate, or update
    P-->>R: explicit measurement
    R->>R: apply channel and stage policy
    R->>N: submit observations
    N-->>R: solution or refusal
    R->>A: emit in-memory run evidence

Signal may define minimal source, sink, and correlator traits because consumers need reusable abstraction seams. Receiver owns operational use of those seams: polling, buffering, scheduling, error propagation, clocks, metrics, and lifecycle.

Artifact Boundary

Receiver owns RunArtifacts and the acquisition, tracking, observation, navigation, diagnostic, and support evidence accumulated in memory. It also owns the invariant that those records truthfully reflect stage execution.

Repository infrastructure owns:

  • run directory identity and file placement;
  • manifests, run reports, and history;
  • persistent naming and discovery;
  • repository provenance and hashing;
  • post-run artifact inspection.
flowchart LR
    stages["receiver stages"]
    memory["in-memory run evidence"]
    persistence["typed persistence"]
    run["discoverable run"]

    stages --> memory
    memory --> persistence
    persistence --> run

Do not add file paths or manifest policy to a runtime artifact merely because infrastructure will later persist it. Do not let infrastructure recalculate a receiver state that should already be explicit in the artifact.

Shared Contracts And Presentation

Shared GNSS contracts define portable request, result, observation, lifecycle, diagnostic, uncertainty, and artifact record meaning. Receiver decides when runtime evidence takes those values.

Command workflows define operator syntax, workflow selection, and report rendering. A command default may select a receiver configuration, but receiver owns validation and runtime consequences of that configuration.

The receiver facade re-exports lower package APIs for downstream convenience. Those exports do not transfer authorship. Documentation should route a signal formula to signal and an estimator policy to navigation even when callers import it through receiver.

Simulation And Validation

Receiver-owned simulation exercises the actual staged runtime with controlled samples and truth. Signal owns reusable replica and noise primitives. Scientific test support may provide independent expected values. Infrastructure owns persisted validation workflows.

A synthetic scenario is not independent evidence merely because it is deterministic. State whether truth comes from a separate model, a fixture, or the implementation under test.

Reject Boundary Drift

Reject a receiver change that:

  • duplicates a code generator, correlation formula, or navigation model;
  • adds repository layout or command presentation to runtime types;
  • turns a lower-package refusal into a successful channel or solution;
  • makes a stage depend on an internal lower-package module;
  • hides channel lifecycle changes behind a generic helper;
  • optimizes away diagnostic or uncertainty evidence;
  • treats final position quality as sufficient proof of acquisition or tracking.

Use the pipeline contract, runtime contract, port contract, artifact contract, and receiver test guide to review the affected boundary.