Wideband autonomous SDR analysis engine forked from sdr-visual-suite
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

9.2KB

Known Issues

This file tracks durable open engineering issues that remain after the 2026-03-25 audio-click fix.

Primary source:

  • docs/open-issues-report-2026-03-25.json

Status values used here:

  • open
  • deferred
  • info

High Priority

OI-02 — lastDiscrimIQ missing from dspStateSnapshot

  • Status: open
  • Severity: High
  • Category: state-continuity
  • File: internal/recorder/streamer.go
  • Summary: FM discriminator bridging state is not preserved across captureDSPState() / restoreDSPState(), so recording segment splits can lose the final IQ sample and create a micro-click at the segment boundary.
  • Recommended fix: add lastDiscrimIQ and lastDiscrimIQSet to dspStateSnapshot.
  • Source: docs/open-issues-report-2026-03-25.json (OI-02)

OI-03 — CPU oracle path not yet usable as validation baseline

  • Status: open
  • Severity: High
  • Category: architecture
  • File: cmd/sdrd/streaming_refactor.go, internal/demod/gpudemod/cpu_oracle.go
  • Summary: the CPU oracle exists, but the production comparison/integration path is not trusted yet. That means GPU-path regressions still cannot be checked automatically with confidence.
  • Recommended fix: repair oracle integration and restore GPU-vs-CPU validation flow.
  • Source: docs/open-issues-report-2026-03-25.json (OI-03)

OI-18 — planned C2-C validation gate never completed

  • Status: open
  • Severity: Info
  • Category: architecture
  • File: docs/audio-click-debug-notes-2026-03-24.md
  • Summary: the final native streaming path works in practice, but the planned formal GPU-vs-oracle validation gate was never completed.
  • Recommended fix: complete this together with OI-03.
  • Source: docs/open-issues-report-2026-03-25.json (OI-18)

Medium Priority

OI-14 — no regression test for allIQ immutability through spectrum/detection pipeline

  • Status: open
  • Severity: Low
  • Category: test-coverage
  • File: cmd/sdrd/pipeline_runtime.go
  • Summary: the IQBalance aliasing bug showed that shared-buffer mutation can slip in undetected. There is still no test asserting that allIQ remains unchanged after capture/detection-side processing.
  • Recommended fix: add an integration test that compares allIQ before and after the relevant pipeline stage.
  • Source: docs/open-issues-report-2026-03-25.json (OI-14)

OI-15 — very low test coverage for processSnippet audio pipeline

  • Status: open
  • Severity: Low
  • Category: test-coverage
  • File: internal/recorder/streamer.go
  • Summary: the main live audio pipeline still lacks focused tests for boundary continuity, WFM mono/stereo behavior, resampling, and demod-path regressions.
  • Recommended fix: add synthetic fixtures and continuity-oriented tests around repeated processSnippet calls.
  • Source: docs/open-issues-report-2026-03-25.json (OI-15)

OI-07 — taps are recalculated every frame

  • Status: open
  • Severity: Medium
  • Category: correctness
  • File: internal/demod/gpudemod/stream_state.go
  • Summary: FIR/polyphase taps are recomputed every frame even when parameters do not change, which is unnecessary work and makes it easier for host/GPU tap state to drift apart.
  • Recommended fix: only rebuild taps when tap-relevant inputs actually change.
  • Source: docs/open-issues-report-2026-03-25.json (OI-07)

OI-17 — bandwidth changes can change Go-side taps without GPU tap re-upload

  • Status: open
  • Severity: Low-Medium
  • Category: correctness
  • File: internal/demod/gpudemod/streaming_gpu_native_prepare.go, internal/demod/gpudemod/stream_state.go
  • Summary: after the config-hash fix, a bandwidth change may rebuild taps on the Go side while the GPU still keeps older uploaded taps unless a reset happens.
  • Recommended fix: add a separate tap-change detection/re-upload path without forcing full extractor reset.
  • Source: docs/open-issues-report-2026-03-25.json (OI-17)

OI-09 — streaming feature flags are compile-time constants

  • Status: open
  • Severity: Medium
  • Category: architecture
  • File: cmd/sdrd/streaming_refactor.go, internal/demod/gpudemod/streaming_gpu_modes.go
  • Summary: switching between production/oracle/native-host modes still requires code changes and rebuilds, which makes field debugging and A/B validation harder than necessary.
  • Recommended fix: expose these as config or environment-driven switches.
  • Source: docs/open-issues-report-2026-03-25.json (OI-09)

OI-05 — feed channel is shallow and can drop frames under pressure

  • Status: open
  • Severity: Medium
  • Category: reliability
  • File: internal/recorder/streamer.go
  • Summary: feedCh has a buffer of only 2. Under heavier processing or debug load, dropped feed messages can create audible gaps.
  • Recommended fix: increase channel depth or redesign backpressure behavior.
  • Source: docs/open-issues-report-2026-03-25.json (OI-05)

OI-06 — legacy overlap/trim extractor path is now mostly legacy baggage

  • Status: deferred
  • Severity: Medium
  • Category: dead-code
  • File: cmd/sdrd/helpers.go
  • Summary: the old overlap/trim path is now mainly fallback/legacy code and adds complexity plus old instrumentation noise.
  • Recommended fix: isolate, simplify, or remove it once the production path and fallback strategy are formally settled.
  • Source: docs/open-issues-report-2026-03-25.json (OI-06)

OI-04 — telemetry history storage still uses append+copy trim

  • Status: deferred
  • Severity: Medium
  • Category: telemetry
  • File: internal/telemetry/telemetry.go
  • Summary: heavy telemetry can still create avoidable allocation/copy pressure because history trimming is O(n) and happens under lock.
  • Recommended fix: replace with a ring-buffer design.
  • Source: docs/open-issues-report-2026-03-25.json (OI-04)

Lower Priority / Nice-to-Have

OI-01 — DCBlocker.Apply(allIQ) still mutates extraction input in-place

  • Status: deferred
  • Severity: High
  • Category: data-integrity
  • File: cmd/sdrd/pipeline_runtime.go
  • Summary: unlike the old IQBalance bug this does not create a boundary artifact, but it does mean live extraction and recorded/replayed data are not semantically identical.
  • Recommended fix: clarify the contract or move to immutable/copy-based handling.
  • Source: docs/open-issues-report-2026-03-25.json (OI-01)

OI-08 — WFM audio LPF could reject pilot more strongly

  • Status: deferred
  • Severity: Medium
  • Category: audio-quality
  • File: internal/recorder/streamer.go
  • Summary: the current 15 kHz LPF is good enough functionally, but a steeper filter could further improve pilot suppression.
  • Recommended fix: more taps or a dedicated pilot notch.
  • Source: docs/open-issues-report-2026-03-25.json (OI-08)

OI-10 — demod.wav debug dumps can clip and mislead analysis

  • Status: deferred
  • Severity: Medium
  • Category: correctness
  • File: internal/recorder/streamer.go, internal/recorder/wavwriter.go
  • Summary: raw discriminator output can exceed the WAV writer's [-1,+1] clip range, so debug dumps can show artifacts that are not part of the real downstream audio path.
  • Recommended fix: scale by 1/pi before dumping or use float WAV output.
  • Source: docs/open-issues-report-2026-03-25.json (OI-10)

OI-11 — browser AudioContext resync still causes audible micro-gaps

  • Status: deferred
  • Severity: Low
  • Category: reliability
  • File: web/app.js
  • Summary: underrun recovery is softened with a fade-in, but repeated resyncs still create audible stutter on the browser side.
  • Recommended fix: prefer the AudioWorklet/ring-player path wherever possible.
  • Source: docs/open-issues-report-2026-03-25.json (OI-11)

OI-12 — tiny per-frame tail copy for boundary telemetry

  • Status: info
  • Severity: Low
  • Category: performance
  • File: cmd/sdrd/pipeline_runtime.go
  • Summary: the last-32-sample copy is trivial and not urgent, but it is one more small allocation in a path that already has several.
  • Recommended fix: none needed unless a broader allocation cleanup happens.
  • Source: docs/open-issues-report-2026-03-25.json (OI-12)

OI-13 — temporary patch artifacts should not live in the repo long-term

  • Status: deferred
  • Severity: Low
  • Category: dead-code
  • File: patches/*
  • Summary: reviewer/debug patch artifacts were useful during the investigation, but they should either be removed or archived under docs rather than kept as loose patch files.
  • Recommended fix: delete or archive them once no longer needed.
  • Source: docs/open-issues-report-2026-03-25.json (OI-13)

OI-16 — config.autosave.yaml can re-enable unwanted debug telemetry after restart

  • Status: deferred
  • Severity: Low
  • Category: config
  • File: config.autosave.yaml
  • Summary: autosave can silently restore debug-heavy telemetry settings after restart and distort future runs.
  • Recommended fix: stop persisting debug telemetry knobs to autosave or explicitly ignore them.
  • Source: docs/open-issues-report-2026-03-25.json (OI-16)

Suggested next execution order

  1. Fix OI-02 (lastDiscrimIQ snapshot/restore)
  2. Repair OI-03 and close OI-18 (oracle + formal validation path)
  3. Add OI-14 and OI-15 regression tests
  4. Consolidate OI-07 and OI-17 (tap rebuild / tap upload logic)
  5. Expose OI-09 feature flags via config or env
  6. Revisit OI-05 / OI-06 / OI-04 when doing reliability/cleanup work