Skip to content

Extensibility Model

The crate grows by adding new durable signal families or reusable DSP surfaces, not by inserting unowned hooks for whichever downstream workflow is currently blocked.

Extension Decision

flowchart TD
    extension[proposed extension] --> contract{can it be described as signal contract?}
    contract -- no --> owner[move to receiver, nav, infra, or command docs]
    contract -- yes --> stable{is the name stable by signal or math role?}
    stable -- no --> rename[name by signal family, component, sample, or DSP role]
    stable -- yes --> proof{can it be proven without one caller workflow?}
    proof -- no --> isolate[add direct signal proof before exposing]
    proof -- yes --> public{is downstream API needed?}
    public -- yes --> api[update the public API guide and facade intentionally]
    public -- no --> internal[keep internal to owning module]

Honest Extension Paths

extension when it belongs here proof
new constellation, band, component, or secondary code the repository gains durable support for that signal family reference code-generation or continuity test
reusable DSP primitive the math is valuable outside one receiver runtime direct DSP test plus integration only when behavior reaches a caller
catalog entry or wavelength helper the supported-signal registry expands catalog or component-registry test
raw-IQ or sample contract field the field describes signal data, not repository storage sample conversion or raw-IQ validation test
observation compatibility rule the rule is signal-layer compatibility, not nav estimation policy observation validation property or integration proof

Suspicious Extension Paths

  • adding a helper that exists only to patch one receiver workflow
  • creating a broad module instead of naming the actual signal family or DSP role
  • exporting internal lookup tables that should remain implementation detail
  • accepting artifact layout, dataset registry, or command-report behavior because it happens to mention signal metadata

Compatibility Discipline

Every extension should answer three questions before it lands:

  • is this a durable signal owner, not a temporary convenience
  • is the name organized by signal meaning or mathematical role
  • can the proof surface demonstrate the new behavior independently of one higher-level workflow

If any answer is no, stop at the owning crate boundary instead of adding a half-owned extension.

Proof Check

Start with the signal code-family guide, DSP guide, and public API guide. Then inspect the code-family source, DSP source, and the corresponding signal tests before approving any extension as durable.