Skip to content

Trait Contracts

Signal traits are narrow seams for sample and correlation flows. They let callers exchange signal-adjacent behavior without importing receiver runtime ownership, repository persistence, or command workflow policy.

Trait Boundary

flowchart LR
    signal["signal contracts<br/>samples and correlation"]
    traits["public traits"]
    receiver["receiver runtime"]
    infra["infra persistence"]
    command["command workflows"]

    signal --> traits
    traits --> receiver
    traits --> infra
    traits --> command
    receiver -. runtime policy stays out .-> traits
    infra -. repository layout stays out .-> traits

Public Trait Roles

trait owns does not own
SignalSource signal-adjacent frame delivery receiver scheduling or run lifecycle
SampleSource sample stream access at the signal boundary dataset registry or persisted capture ownership
Correlator prompt, early, and late correlation semantics acquisition ranking, lock state, or tracking policy
SampleSink writing sample frames through a signal-level seam repository artifact layout or command report format

Extension Tests

  • Add a method only when it is reusable by more than one downstream owner.
  • Keep return types close to samples, signals, or correlations.
  • Move runtime state, diagnostics, and lifecycle control to receiver docs.
  • Move persisted naming, manifests, and history to infra docs.
  • Keep command-only convenience out of the signal trait surface.

First Proof Check

Inspect crates/bijux-gnss-signal/src/api.rs, crates/bijux-gnss-signal/docs/TRAITS.md, crates/bijux-gnss-signal/docs/PUBLIC_API.md, and crates/bijux-gnss-signal/tests/integration_guardrails.rs.