Skip to content

Invariants

The most important bijux-gnss-core invariants are the ones downstream crates quietly depend on every day.

Invariant Map

flowchart LR
    public["public API"]
    artifacts["artifacts"]
    time["time and units"]
    boundary["dependency boundary"]
    trust["downstream trust"]

    public --> trust
    artifacts --> trust
    time --> trust
    boundary --> trust

Invariant Families

family invariant proof
public surface stable core meaning is deliberately re-exported through src/api.rs public API guardrail
private layout callers do not need private module paths for stable contracts public API guardrail
artifacts payload validators enforce semantic coherence, not just parse shape artifact validation tests
numeric evidence non-finite or internally inconsistent persisted values are rejected rather than normalized silently artifact validation tests
support inventory support-matrix and navigation payloads remain versioned records artifact and serialization tests
timekeeping GPS, UTC, TAI, leap-second, and sample-trace conversions remain deterministic property tests and regression corpus
dependency boundary core stays free of higher-level workspace crate dependencies integration guardrails
ownership boundary core remains a foundation rather than runtime or repository policy contract map and review-scope docs

Failure Signals

  • A downstream crate imports a private core module for stable meaning.
  • A serialized artifact accepts non-finite or contradictory values.
  • A new core type duplicates a receiver, nav, signal, infra, or command concept.
  • A time conversion passes examples but fails property-test edge cases.
  • A core dependency points upward into a product or workflow crate.

First Proof Check

Start with the core invariants guide and contract map. Then confirm enforcement through the public API guardrail, navigation artifact validation, tracking artifact validation, timekeeping property tests, and integration guardrails.