Skip to content

Fix multisource and demod lifecycle issues - #59

Draft
ceane wants to merge 149 commits into
mainfrom
continuing-multisource-and-demod
Draft

Fix multisource and demod lifecycle issues#59
ceane wants to merge 149 commits into
mainfrom
continuing-multisource-and-demod

Conversation

@ceane

@ceane ceane commented Aug 4, 2026

Copy link
Copy Markdown
Owner

Summary

  • Fix multisource source-ownership and Mock Tx standby lifecycle behavior.
  • Fix frontend settings accessibility, duplicate sample-rate options, and test harness/typecheck issues.
  • Fix backend handoff proxy target refresh behavior and Rust standby test expectations.
  • Refresh dependency metadata without bypassing the repository's restricted npm remote-package policy.
  • Adding a start page
    • Screenshot 2026-08-16 at 20 06 10
  • Adding WebUSB via 2 ways/apps – vanilla JS AND plopping off the Rust backend and letting WebUSB do the work (all in the browser). Below is the vanilla JS, which will only work on Chrome BTW.
    • Screenshot 2026-09-01 at 13 15 23
    • Screenshot 2026-09-01 at 13 15 32

Validation

  • Frontend focused Jest suites: passing
  • Shader tests: 43 passing
  • Rust library tests: 255 passing
  • TypeScript typecheck: passing

Notes

  • React act usage remains on the repository's existing approach.
  • npm remote fetching was not enabled or bypassed.

ceane and others added 21 commits July 21, 2026 18:05
- Fixing issue where pause was advancing by a frame or when reloading hitting pause didn't work
Unify spectrum state ownership, source lifecycle handling, and whole-channel controls across the frontend and backend.

Replace the Mock Tx generators with reusable complex-baseband synthesis, preserve signal shape and bandwidth contracts, normalize power consistently across frontend FFT and Tx IFFT sizes, and cover OFDM variance and integrated large-block power.

Harden SDR hotplug, source swapping, HackRF TX plumbing, and non-blocking RTL-SDR reader cleanup. Refresh integration, unit, build, and GPU-path tests to match the new ownership and streaming behavior.

Validation: cargo test --workspace --all-targets; rustfmt --check on the modified complex-baseband Rust modules.
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Device switches and transport warm-up were able to flash Server Down after a
prior live session. Gate unavailable presentation on true post-session control
loss only.

Co-authored-by: Cursor <cursoragent@cursor.com>
Brief socket closes during reconnect were clearing sources and active ids,
which thrashed placeholders and forced source reselection.

Co-authored-by: Cursor <cursoragent@cursor.com>
Adds a /settings route with a scroll-spy sidebar covering theme, SDR,
login, I/Q capture, and snapshot defaults, plus a new /faq landing page
and reusable link-card components for page footers.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Replaces the FAQ layout's local logo img and back link with the shared
Logo and AppBackButton components, drops the redundant "N-APT FAQ" title,
and adds a Lingo and Learn link to the FAQ home. Adds hideHeader support
to ThemeSection for embedding in the settings page.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Supports externally controlled open state, a section id for sidebar
scroll targets, and an embedded header-free rendering mode.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Adds lazy routes for /settings, /get-started, and a /faq landing page
replacing the old redirect.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
- add source-owned multiplexed streaming, presentation control, and TX standby handling\n- expand Rust websocket/source lifecycle, SDR recovery, TX monitor, and stream manager behavior\n- reorganize frontend shell, routes, sidebar layouts, Learn Signals, FAQ content, and visualization flows\n- update Redux/WebSocket contracts, frame processing, frequency controls, WebGPU waterfall behavior, and capture policy\n- add focused frontend, integration, Rust, shader, rebuild-status, and streaming regression coverage\n- move Rust hot-reload helpers and document testing conventions and design decisions\n\nValidation: TypeScript typecheck passed; focused Rust and frontend checks were run. Existing full-suite failures and environment-blocked localhost tests remain documented in the task history.

@github-advanced-security github-advanced-security AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CodeQL found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.

Comment thread scripts/legal-app-server/index.mjs Fixed
ceane and others added 11 commits August 29, 2026 10:18
Unify source-scoped stream ownership across live, paused, and transmit paths; harden frame presentation and snapshot handling; and keep mirrored spectrum scrolling bounded at signed and hardware frequency limits. Add regression coverage for source switching, pause behavior, frame processing, snapshots, waterfall motion, stream contracts, and negative-frequency reanchoring.
…be seeding to backend state

The mirror toggle used to be subscriber-local state, so two clients could
render the same live RF stream on opposite sides of the baseband axis. The
convention is now held by the server and broadcast in the channels snapshot;
settings updates carry it as a device-scoped write, and the Settings toggle
sends it through the same shared path. Navigation bounds now always prefer
device acquisition bounds so zoom level cannot decide whether 0 Hz is
reachable, and the persisted source-view cache keeps only subscriber-local
presentation state so page hydration can never retune the shared source.

A first subscribe is treated as a read/hydration operation: effective RX
options are seeded from the backend's current device state so a stale client
cannot become the center-frequency authority during stream hydration.

Adds tests for the shared mirror axis, the authoritative subscribe seeding,
and subscriber coordination through tune/pause/hydration churn.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Eliminates 214 oxlint warnings down to zero. Removes unused imports and
dead code (including an entire unused drag-and-drop block in SourceInput),
underscores unused parameters and locals, and fixes non-unused-vars rules:
no-control-regex/no-misleading-character-class are suppressed via a real
.oxlintrc.json (the existing oxlint.json was never auto-loaded), ternary
expressions become explicit if/else, a dead `if (false && ...)` branch is
removed, and regex/array-construction/spread cleanups apply.

No behavior changes: typecheck is clean and the full TS suite passes.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Comment thread scripts/build/inline-webusb-build.mjs Fixed
ceane added 17 commits September 1, 2026 13:17
Route source selection through page-scoped multiplexed streams, preserve source ownership across pause and reconnect transitions, and keep hydrated state aligned with the active stream. Add the context boundary and regression coverage for transport, lifecycle, persistence, canvas rendering, source switching, paused frames, and mirrored scrolling.
Honor the configured signal limits while flooring isolated Mock APT and Tx monitor rates to the negotiated sample-rate/FFT-size budget. Keep acquisition-worker and WebSocket settings aligned with the source capability contract, including mirrored-spectrum defaults and source-scoped validation.
Keep subscriber-local source ranges and managed stream ownership independent from process-wide device state. Align Mock Tx monitor geometry with its floored viewer sample rate, preserve and clear frames at source boundaries, and harden source-switch, standby-preview, and transport lifecycle coverage.
Narrow the nullable Mock APT source status before checking the allowed lifecycle states so the integration test satisfies strict TypeScript compilation.
@ceane ceane self-assigned this Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants