rigplane 2.0.0__tar.gz → 2.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rigplane-2.0.2/.claude/skills/release/SKILL.md +250 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.github/scripts/check-rebrand-allowlist.sh +3 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.gitignore +3 -1
- rigplane-2.0.2/AGENTS.md +73 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/CLAUDE.md +6 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/PKG-INFO +5 -5
- {rigplane-2.0.0 → rigplane-2.0.2}/README.md +4 -4
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/CHANGELOG.md +21 -1
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/ic7610-usb-setup.md +27 -0
- rigplane-2.0.2/docs/internals/github-project-workflow.md +266 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/playwright.config.ts +3 -1
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/tests/e2e/v2-ui-interactive.impl.ts +16 -6
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/vite.config.ts +2 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/mkdocs.yml +1 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/pyproject.toml +1 -1
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/bridge.py +22 -13
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_bridge.py +33 -3
- rigplane-2.0.2/tests/test_frontend_e2e_config.py +16 -0
- rigplane-2.0.0/.claude/commands/release.md +0 -249
- {rigplane-2.0.0 → rigplane-2.0.2}/.claude/commands/next.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.claude/commands/scan-issues.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.claude/commands/solve-issue.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.github/ISSUE_TEMPLATE/epic.yml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.github/ISSUE_TEMPLATE/feature.yml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.github/ISSUE_TEMPLATE/radio_report.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.github/ISSUE_TEMPLATE/ui-component.yml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.github/workflows/docs.yml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.github/workflows/full.yml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.github/workflows/publish.yml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.github/workflows/quick.yml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.github/workflows/rebrand-gate.yml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/.importlinter +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/ARCHITECTURE.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/CHANGELOG.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/CONTRIBUTING.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/LICENSE +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/ROADMAP.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/band-plans/_config.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/band-plans/arrl-hf.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/band-plans/broadcast.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/band-plans/iaru-r1.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/band-plans/utility.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/AUDIO_STREAMING_PROFILE.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/CNAME +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/EXTENDED_PROTOCOL_RESEARCH.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/PERFORMANCE.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/PROJECT.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/SECURITY.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/audio.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/auth.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/backends-icom7610-drivers.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/backends-icom7610.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/backends.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/commander.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/commands.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/exceptions.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/public-api-surface.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/radio.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/radios.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/rig-loader.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/rigctld.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/scope.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/sync.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/transport.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/types.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/api/web.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/architecture/open-core-policy.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/assets/scope-example.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/capabilities-matrix.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/contracts/diagnostic-bundle-v1.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/contracts/diagnostic-bundle-v2.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/audio-recipes.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/cli.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/commands.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/configuration.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/connection.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/diagnostic-reports.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/ic705-usb-setup.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/ic7300-usb-setup.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/ic9700-usb-setup.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/installation.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/profiles.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/quickstart.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/radios.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/rig-profiles.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/troubleshooting.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/web-ui.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/guide/wsjtx-setup.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/index.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/internals/architecture.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/internals/cli-design.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/internals/contributing.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/internals/protocol.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/internals/reliability-semantics.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/internals/rfc-audio-v1-mini.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/opuslib-macos-fix.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/parity/README.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/parity/ic7610_command_matrix.json +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/parity/test_mapping.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-03-07-ui-architecture.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-05-desktop-companion-architecture.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-09-audio-backend-design.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-11-frontend-migration-plan.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-11-parity-matrix.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-11-presentation-architecture.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-11-rx-audio-trace.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-11-shared-frontend-runtime-contract.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-11-v2-lcd-runtime-audit.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-12-architecture-presentation.html +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-12-target-frontend-architecture.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-18-desktop-meters-panel.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-18-lcd-display-enhancements.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-18-mobile-ia.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-18-receiver-activation.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-18-spectrum-controls.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-18-ui-refinements-execution.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-19-lcd-layout-redesign-v2.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-19-lcd-layout-redesign.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-29-modularization-discovery.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-29-modularization-plan.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-29-panel-adapter-migration.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-04-29-ui-v1-deprecation-audit.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/2026-05-03-diagnostic-data-collection-design.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/archive/2026-03-04-dx-cluster.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/archive/2026-03-m5-m6-roadmap.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/archive/2026-04-19-lcd-twin-skins.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/build_orphan_report.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/classify_cycle_edges.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/cycles-classified.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/cycles.txt +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/discovery_graph.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/external-usage.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/file-inventory.json +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/file-inventory.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/import-graph.dot +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/importlinter-config-draft.ini +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/init-snapshot.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/orphan-candidates.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/tach-config-draft.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/test-inventory.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/discovery-artifacts/tooling-assessment.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/00-epic-final.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/00-epic.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/01-skeleton.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/02-core-foundationals.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/03-core-contracts.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/04-commands.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/05-profiles.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/06-scope.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/07-audio.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/08-runtime-radio.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/09-runtime-mixins.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/10-runtime-pollers.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/11-discovery-to-backends.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/12-cli.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/13-import-linter.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/14-followup-tests.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/plans/issue-drafts/15-followup-web-startup.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/radio-protocol.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/screenshots/amber-lcd.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/screenshots/hero.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/docs/screenshots/lcd-scope.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/.gitignore +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/README.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/eslint.config.js +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/index.html +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/package-lock.json +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/package.json +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/pnpm-lock.yaml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/apple-touch-icon.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/brand/lockup-dark.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/brand/lockup-light.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/brand/lockup-mono.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/brand/mark-dark.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/brand/mark-light.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/brand/mark-mono.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/brand/marketing/github-social-preview.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/brand/marketing/readme-banner.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/brand/wordmark-dark.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/brand/wordmark-light.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/brand/wordmark-mono.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicon-16.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicon-32.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicon-48.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicon.ico +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/ink/favicon-128.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/ink/favicon-16.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/ink/favicon-180.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/ink/favicon-192.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/ink/favicon-256.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/ink/favicon-32.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/ink/favicon-48.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/ink/favicon-512.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/ink/favicon-64.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/ink/favicon.ico +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/paper/favicon-128.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/paper/favicon-16.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/paper/favicon-180.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/paper/favicon-192.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/paper/favicon-256.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/paper/favicon-32.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/paper/favicon-48.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/paper/favicon-512.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/paper/favicon-64.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/paper/favicon.ico +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/transparent/favicon-128.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/transparent/favicon-16.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/transparent/favicon-180.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/transparent/favicon-192.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/transparent/favicon-256.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/transparent/favicon-32.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/transparent/favicon-48.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/transparent/favicon-512.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/favicons/transparent/favicon-64.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/manifest.json +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/og-image.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/pwa-192x192.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/pwa-512x512.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/public/twitter-card.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/App.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/app.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/assets/svelte.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/shared/Toast.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/BandPlanOverlay.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/DxOverlay.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/EiBiBrowser.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/ScopeSettingsPopover.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/SpectrumCanvas.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/SpectrumPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/SpectrumToolbar.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/WaterfallCanvas.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/__tests__/BandPlanOverlay.component.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/__tests__/DxOverlay.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/__tests__/EiBiBrowser.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/__tests__/SpectrumPanel.component.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/__tests__/SpectrumToolbar.component.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/__tests__/band-plan-overlay.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/__tests__/click-to-tune.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/__tests__/passband-geometry.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/__tests__/spectrum-panel-logic.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/__tests__/spectrum-toolbar.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/__tests__/tuning-indicator.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/band-plan-logic.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/passband-geometry.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/spectrum-logic.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components/spectrum/spectrum-toolbar-logic.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/AttenuatorControl.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/BandSelector.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/BottomSheet.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/CollapsiblePanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/ControlButtonDemo.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/InstallPrompt.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/PttFab.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/PullToRefresh.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/SegmentedButton.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/StatusBadge.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/ThemePicker.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/ValueControlLab.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/__tests__/AttenuatorControl.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/__tests__/BandSelector.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/__tests__/BottomSheet.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/__tests__/CollapsiblePanel.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/__tests__/InstallPrompt.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/__tests__/PullToRefresh.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/__tests__/SegmentedButton.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/__tests__/StatusBadge.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/__tests__/broadcast-presets.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/band-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/broadcast-presets.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/button-tokens.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/control-button.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/install-prompt-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/status-badge-style.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/BipolarRenderer.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/DiscreteRenderer.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/DualParamRenderer.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/HBarRenderer.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/KnobRenderer.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/ValueControl.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/__tests__/ValueControl.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/__tests__/value-control-core.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/index.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/skin.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/skins/ProfessionalKnob.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/skins/index.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/value-control-core.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/controls/value-control/value-control.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/dialogs/SendReportDialog.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/dialogs/__tests__/SendReportDialog.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/display/FrequencyDisplay.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/display/FrequencyDisplayInteractive.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/display/__tests__/FrequencyDisplay.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/display/__tests__/frequency-tuning.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/display/frequency-format.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/display/frequency-tuning.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/KeyboardHandler.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/LcdLayout.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/LeftSidebar.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/MobileNav.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/MobileRadioLayout.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/RadioLayout.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/RightSidebar.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/StatusBar.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/VfoHeader.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/__tests__/KeyboardHandler.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/__tests__/LeftSidebar.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/__tests__/MobileRadioLayout.component.svelte.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/__tests__/RadioLayout.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/__tests__/SpectrumPanelStub.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/__tests__/keyboard-map.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/__tests__/mobile-layout-logic.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/__tests__/mobile-nav.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/__tests__/top-row-visual-regression.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/__tests__/vfo-header.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/__tests__/vfo-layout-tokens.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/keyboard-map.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/layout-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/mobile-chip-bar.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/mobile-layout-logic.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/mobile-nav-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/responsive.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/shortcut-hints.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/layout/vfo-layout-tokens.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/meters/BarGauge.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/meters/LinearSMeter.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/meters/NeedleGauge.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/meters/SMeterDemo.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/meters/__tests__/BarGauge.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/meters/__tests__/LinearSMeter.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/meters/__tests__/NeedleGauge.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/meters/bar-gauge-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/meters/needle-gauge-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/meters/smeter-scale.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/AgcPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/AntennaPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/AudioRoutingControl.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/CwPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/DockMeterPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/DspPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/EssentialsPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/FilterPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/MemoryPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/MeterPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/MetersDockPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/ModePanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/RfFrontEnd.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/RitXitPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/RxAudioPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/ScanPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/TxPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/VoxPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/AgcPanel.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/AudioRoutingControl.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/CwPanel.component.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/DspPanel.component.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/DspPanel.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/FilterPanel.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/MeterPanel.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/MetersDockPanel.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/ModePanel.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/RfFrontEnd.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/RitXitPanel.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/RxAudioPanel.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/TxPanel.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/cw-panel-logic.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/dsp-panel-logic.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/__tests__/filter-controls.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/agc-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/audio-scope/AudioSpectrumCanvas.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/audio-scope/AudioSpectrumPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/audio-scope/__tests__/audio-spectrum-renderer.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/audio-scope/audio-spectrum-renderer.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/audio-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/cw-panel-logic.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/dsp-panel-logic.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/dsp-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/filter-controls.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/filter-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/AmberAfScope.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/AmberCockpit.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/AmberFilterGhost.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/AmberFrequency.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/AmberIndStrip.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/AmberLcdDisplay.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/AmberMemoryStrip.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/AmberScope.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/AmberSmeter.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/AmberSparkline.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/AmberTelemetryStrip.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/LcdContrastControl.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/LcdDisplayModeControl.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/VfoControlPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/__tests__/lcd-components.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/__tests__/scope-frame.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/lcd/lcd-vintage.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/meter-utils.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/meter-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/rf-frontend-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/rit-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/tx-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/vfo/DualVfoDisplay.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/panels/vfo/__tests__/DualVfoDisplay.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/fonts-digital.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/fonts.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/index.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/theme-switcher.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/amoled-black.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/ayu-dark.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/catppuccin-latte.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/catppuccin-mocha.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/crt-green.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/custom-ic7610.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/dracula.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/github-light.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/gruvbox-dark.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/gruvbox-light.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/high-contrast.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/index.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/lcd-blue.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/lcd-warm.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/nixie-tube.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/nord-light.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/nord.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/one-dark.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/solarized-dark.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/solarized-light.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/themes/tokyo-night.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/tokens.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/vfo-themes/crt-green.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/vfo-themes/index.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/vfo-themes/lcd-blue.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/theme/vfo-themes/nixie-tube.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/vfo/ActiveReceiverToggle.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/vfo/VfoOps.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/vfo/VfoPanel.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/vfo/__tests__/ActiveReceiverToggle.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/vfo/__tests__/VfoOps.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/vfo/__tests__/VfoPanel.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/vfo/vfo-ops-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/vfo/vfo-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/wiring/__tests__/double-click.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/wiring/__tests__/focus-mode-race.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/wiring/__tests__/keyboard-wiring.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/wiring/__tests__/state-adapter.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/wiring/__tests__/vfo-wiring.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/wiring/command-bus.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/wiring/double-click.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/components-v2/wiring/state-adapter.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/Button/ControlButton.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/Button/DotButton.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/Button/FillButton.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/Button/HardwareButton.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/Button/HardwarePlainButton.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/Button/StatusIndicator.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/Button/__tests__/ControlButton.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/Button/__tests__/ControlledHarness.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/Button/index.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/Button/roleMapping.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/Button/types.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/SegmentedControl/index.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/__tests__/drag-reorder.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/__tests__/migrate-legacy-storage.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/actions/keyboard.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/api/__tests__/diagnostics.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/api/diagnostics.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/audio/__tests__/constants.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/audio/__tests__/rx-player.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/audio/__tests__/tx-mic.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/audio/audio-manager.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/audio/constants.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/audio/rx-player.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/audio/tx-mic.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/data/__tests__/arrl-band-plan.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/data/arrl-band-plan.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/drag-reorder.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/gestures/gesture-recognizer.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/gestures/use-gesture.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/local-extensions/LocalExtensionsHost.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/local-extensions/__tests__/dock-layout.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/local-extensions/__tests__/host-api.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/local-extensions/__tests__/manifest.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/local-extensions/dock-layout.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/local-extensions/host-api.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/local-extensions/keyboard-scope.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/local-extensions/manifest.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/media/__tests__/media-session.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/media/media-session.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/migrate-legacy-storage.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/radio/filter-controls.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/radio/pending-focus.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/radio/pending-focus.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/renderers/__tests__/spectrum-renderer.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/renderers/__tests__/waterfall-renderer.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/renderers/spectrum-renderer.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/renderers/waterfall-renderer.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/__tests__/frontend-runtime.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/__tests__/scope-controller.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/adapters/audio-adapter.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/adapters/capabilities-adapter.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/adapters/lcd-chrome-adapter.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/adapters/panel-adapters.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/adapters/qsy-history-adapter.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/adapters/scope-adapter.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/adapters/tx-adapter.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/adapters/vfo-adapter.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/commands/panel-commands.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/frontend-runtime.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/index.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/props/panel-props.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/scope-controller.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/runtime/system-controller.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/__tests__/audio.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/__tests__/capabilities.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/__tests__/commands.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/__tests__/connection.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/__tests__/radio.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/__tests__/ui.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/audio.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/capabilities.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/commands.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/connection.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/connection.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/layout.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/lcd-contrast.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/lcd-display-mode.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/qsy-history.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/radio.svelte.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/radio.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/tuning.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/stores/ui.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/transport/__tests__/http-client.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/transport/__tests__/ws-client.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/transport/http-client.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/transport/ws-client.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/types/capabilities.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/types/protocol.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/types/state.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/utils/__tests__/battery.test.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/utils/battery.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/utils/filter-width.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/utils/haptics.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/utils/meter-utils.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/utils/smoothing.svelte.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/utils/tx-permit.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/lib/utils/uuid.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/main.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/skins/amber-lcd/LcdSkin.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/skins/desktop-v2/DesktopSkin.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/skins/lcd-cockpit/LcdCockpitSkin.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/skins/lcd-scope/LcdScopeSkin.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/skins/mobile/MobileSkin.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/skins/registry.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/skins/sdr-test/SdrTestSkin.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/skins/sdr-test/SdrVfoScreen.svelte +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/styles/animations.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/styles/tokens.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/types/pwa.d.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/src/types/webcodecs.d.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/static/fonts/DSEG7Classic-Bold.woff2 +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/svelte.config.js +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/tsconfig.app.json +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/tsconfig.json +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/frontend/tsconfig.node.json +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/_keyboard-default.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/_schema.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/_schema_v2.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/examples/ftx1.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/examples/lab599_tx500.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/examples/sdrplay_rspdx.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/examples/xiegu_x6200.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/ftx1.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/ic705.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/ic7300.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/ic7610.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/ic9700.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/tx500.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/rigs/x6100.toml +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/icom_lan/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/icom_lan/_cli_shim.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/__main__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_audio_codecs.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_audio_recovery.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_audio_runtime_mixin.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_audio_transcoder.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_bounded_queue.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_bridge_metrics.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_bridge_state.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_civ_rx.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_connection_state.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_control_phase.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_dual_rx_runtime.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_optional_deps.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_platformdirs_migration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_poller_types.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_queue_pressure.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_runtime_protocols.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_scope_runtime.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_shared_state_runtime.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_state_cache.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/_state_queries.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/LAYER.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/_bridge_metrics.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/_bridge_state.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/_codecs.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/_macos_uid.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/_transcoder.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/_usb_resolve.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/analyzer.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/backend.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/bus.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/config.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/dsp.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/fft_scope.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/lan_stream.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/resample.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio/usb_driver.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio_analyzer.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio_bridge.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio_bus.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/audio_fft_scope.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/auth.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/LAYER.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/_icom_serial_base.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/config.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/discovery.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/factory.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/ic705/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/ic705/core.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/ic705/serial.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/ic7300/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/ic7300/core.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/ic7300/serial.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/ic9700/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/ic9700/core.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/ic9700/serial.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/icom7610/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/icom7610/drivers/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/icom7610/drivers/contracts.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/icom7610/drivers/serial_civ_link.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/icom7610/drivers/serial_session.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/icom7610/drivers/serial_stub.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/icom7610/drivers/usb_audio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/icom7610/lan.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/icom7610/serial.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/yaesu_cat/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/yaesu_cat/parser.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/yaesu_cat/poller.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/yaesu_cat/radio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/backends/yaesu_cat/transport.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/capabilities.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/civ.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/cli/LAYER.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/cli/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/cli/_diagnose.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/command_map.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/command_spec.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commander.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/LAYER.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/_builders.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/_codec.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/_frame.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/antenna.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/command_map.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/command_spec.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/commander.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/config.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/cw.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/dsp.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/freq.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/levels.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/memory.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/meters.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/mode.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/power.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/ptt.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/scope.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/speech.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/system.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/tone.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/tx_band.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/commands/vfo.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/LAYER.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/_bounded_queue.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/_optional_deps.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/_queue_pressure.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/_state_cache.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/auth.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/capabilities.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/civ.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/env_config.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/exceptions.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/protocol.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/radio_protocol.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/radio_state.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/transport.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/core/types.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/cw_auto_tuner.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/_discovery.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/_error_ring.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/_errors.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/_logging.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/_manifest.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/bundle.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/contributor.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/contributors/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/contributors/audio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/contributors/config.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/contributors/dependencies.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/contributors/errors.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/contributors/invocation.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/contributors/logs.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/contributors/radio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/contributors/state.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/contributors/system.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/redaction.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/diagnostics/upload.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/discovery.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/dsp/LAYER.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/dsp/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/dsp/exceptions.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/dsp/nodes/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/dsp/nodes/base.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/dsp/nodes/nr_scipy.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/dsp/pipeline.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/dsp/resample.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/dsp/tap_registry.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/env_config.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/exceptions.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/ic705.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/meter_cal.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/profiles/LAYER.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/profiles/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/profiles/rig_loader.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/profiles_runtime.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/protocol.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/proxy.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/py.typed +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/radio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/radio_initial_state.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/radio_protocol.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/radio_reconnect.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/radio_state.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/radio_state_snapshot.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/radios.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rig_loader.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rigctld/LAYER.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rigctld/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rigctld/audit.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rigctld/circuit_breaker.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rigctld/contract.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rigctld/handler.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rigctld/poller.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rigctld/protocol.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rigctld/routing.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rigctld/server.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rigctld/state_cache.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/rigctld/utils.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/LAYER.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/_audio_recovery.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/_audio_runtime_mixin.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/_civ_rx.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/_connection_state.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/_control_phase.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/_dual_rx_runtime.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/_poller_types.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/_runtime_protocols.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/_scope_runtime.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/_shared_state_runtime.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/_state_queries.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/cw_auto_tuner.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/ic705.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/meter_cal.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/profiles_runtime.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/proxy.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/radio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/radio_initial_state.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/radio_reconnect.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/radio_state_snapshot.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/radios.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/startup_checks.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/runtime/sync.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/scope/LAYER.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/scope/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/scope/render.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/scope_render.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/startup_checks.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/sync.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/transport.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/types.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/usb_audio_resolve.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/LAYER.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/_delta_encoder.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/band_plan.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/discovery.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/dx_cluster.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/eibi.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/handlers/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/handlers/audio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/handlers/control.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/handlers/diagnostics.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/handlers/scope.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/protocol.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/radio_poller.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/rtc.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/runtime_helpers.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/server.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/apple-touch-icon.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/assets/ControlButtonDemo-BfIA7PVw.js +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/assets/ControlButtonDemo-Ddi7py1_.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/assets/index-BJJbl289.js +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/assets/index-DV-TVNde.css +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/brand/lockup-dark.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/brand/lockup-light.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/brand/lockup-mono.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/brand/mark-dark.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/brand/mark-light.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/brand/mark-mono.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/brand/marketing/github-social-preview.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/brand/marketing/readme-banner.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/brand/wordmark-dark.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/brand/wordmark-light.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/brand/wordmark-mono.svg +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicon-16.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicon-32.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicon-48.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicon.ico +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/ink/favicon-128.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/ink/favicon-16.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/ink/favicon-180.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/ink/favicon-192.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/ink/favicon-256.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/ink/favicon-32.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/ink/favicon-48.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/ink/favicon-512.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/ink/favicon-64.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/ink/favicon.ico +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/paper/favicon-128.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/paper/favicon-16.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/paper/favicon-180.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/paper/favicon-192.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/paper/favicon-256.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/paper/favicon-32.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/paper/favicon-48.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/paper/favicon-512.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/paper/favicon-64.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/paper/favicon.ico +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/transparent/favicon-128.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/transparent/favicon-16.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/transparent/favicon-180.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/transparent/favicon-192.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/transparent/favicon-256.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/transparent/favicon-32.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/transparent/favicon-48.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/transparent/favicon-512.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/favicons/transparent/favicon-64.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/index.html +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/manifest.json +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/og-image.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/pwa-192x192.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/pwa-512x512.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static/twitter-card.png +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/static.old/index.html +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/tls.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/web_routing.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/web_startup.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/src/rigplane/web/websocket.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/_audio_stream_fake.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/_caps.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/_command_test_helpers.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/_diagnostics_mock_server.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/_helpers.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/_perf_helpers.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/conftest.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/contracts/__init__.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/contracts/test_lazy_imports.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/e2e/package.json +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/e2e/v2-ui-interactive.spec.ts +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/fixtures/civ_rx_frames.json +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/golden/dump_state_ic7610.txt +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/golden/dump_state_yaesu.txt +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/golden/fldigi_dual_rx_session.txt +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/golden/js8call_dual_rx_session.txt +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/golden/protocol_golden.json +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/golden/wsjtx_dual_rx_session.txt +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/README.md +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/conftest.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/full_handshake.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/logging_utils.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/probe_handshake.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/probe_login.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_audio_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_audio_routing.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_connect.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_controls_extended_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_dsp_levels_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_get_freq.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_media_scope_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_memory_set_only.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_negative_auth_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_operator_toggles_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_radio_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_reliability_matrix_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_rigctld_golden_replay.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_rigctld_wsjtx.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_rit_tuner_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_scope_advanced_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_tone_tsql_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/integration/test_vfo_dual_watch_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/mock_server.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_analyzer.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_backend.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_bridge_stereo.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_bus.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_codec.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_codecs.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_config.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_dsp.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_fft_scope.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_fullduplex.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_recovery.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_resample.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_rx_tx_transition.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_stress.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_transcoder.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_transcoder_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audio_watchdog.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_audit.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_auth.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_backend_contract_matrix.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_backend_factory.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_bounded_queue.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_bsr_band_switching.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_circuit_breaker.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_civ.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_civ_command_profiling.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_civ_rx_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_civ_rx_dispatch_golden.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_civ_rx_mixin_host.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_cli.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_cli_async.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_cli_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_cli_diagnose.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_cli_diagnose_lazy_import.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_cli_e2e.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_cli_model.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_cmd29_parsing.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_command_map_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_command_spec.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_commander.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_commands.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_commands_extended.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_cw_auto_tune_wiring.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_cw_auto_tuner.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_data_mode.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_delta_encoder.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_diagnostics_bundle.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_diagnostics_contributor.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_diagnostics_contributors_batch1.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_diagnostics_contributors_batch2.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_diagnostics_contributors_batch3.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_diagnostics_e2e.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_diagnostics_logging.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_diagnostics_privacy_invariants.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_diagnostics_redaction.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_diagnostics_upload.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_discovery.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_discovery_responder.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_docs_runtime_sync.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_dsp_filter_family.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_dsp_levels_part1.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_dsp_levels_part2.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_dsp_nodes.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_dsp_nr_scipy.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_dsp_pipeline.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_dx_cluster.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_env_config.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_exports.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_ftx1_audio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_ftx1_radio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_golden_protocol.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_handlers_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_handlers_dsp_407_408.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_handlers_protocol_gap_399.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_handlers_sys_band.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_ic705.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_ic705_backend.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_ic7300_backend.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_ic7610_parity_matrix.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_ic9700_backend.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_icom7610_serial_radio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_icom_lan_shim.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_icom_receiver_tier.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_issue_141_core_refactor.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_jitter_buffer.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_lifecycle_diagnostics.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_macos_audio_uid.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_main_sub_tracking.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_memory_commands.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_mock_integration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_naming_parity.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_operator_toggles.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_pcm_e2e.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_per_receiver_vfo_roundtrip.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_performance_regressions.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_platformdirs_migration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_poller.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_poller_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_power_unit_extension.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_profiles_routing.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_profiles_runtime.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_protocol.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_proxy.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_proxy_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_public_api_surface.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_radio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_radio_connect.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_radio_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_radio_extended.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_radio_poller_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_radio_protocol.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_radio_state.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_radios.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rate_limiter.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_reconnect.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rf_gain_af_level.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rig_ic7300.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rig_ic7610.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rig_loader.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rig_multi_vendor.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rig_schema.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rigctld_consistency.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rigctld_dump_state_snapshot.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rigctld_handler.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rigctld_init_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rigctld_protocol.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rigctld_routable_extension.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rigctld_server.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rigctld_server_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_rigctld_utils.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_scope.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_scope_render.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_scope_render_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_scope_stress.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_security_headers.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_selected_freq_mode.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_serial_backend_smoke.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_serial_civ_link.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_serial_stub_framing.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_server_wire.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_shared_state_runtime.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_state_cache.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_state_cache_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_state_pollable_extension.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_state_queries.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_supports_command.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_swr_calibration.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_sync.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_sync_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_tap_registry.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_tls.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_token_renewal.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_tone_tsql.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_transport.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_tx_band_edge.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_usb_audio_capable_extension.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_usb_audio_resolve.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_usb_audio_stub.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_vfo_dual_watch.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_vox_tone_state.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_web_audio_streaming_profile.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_web_auth_compare_digest.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_web_capability_guards.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_web_diagnostics.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_web_post_body_cap.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_web_ptt_readonly.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_web_runtime_helpers.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_web_server.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_web_server_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_web_server_token_redaction.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_webrtc_signaling.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_websocket_coverage.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_yaesu_audio.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_yaesu_cat_parser.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_yaesu_cat_poller.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_yaesu_cat_transport.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/tests/test_yaesu_cli_factory.py +0 -0
- {rigplane-2.0.0 → rigplane-2.0.2}/uv.lock +0 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: release
|
|
3
|
+
description: Cut and publish a rigplane PyPI release — version bump, changelog, tag, GitHub Release that triggers publish.yml. Use when the user asks to release, cut a tag, ship a patch/minor/major, or publish to PyPI.
|
|
4
|
+
argument-hint: "patch | minor | major | X.Y.Z [--dry-run]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Release rigplane-core
|
|
8
|
+
|
|
9
|
+
Cuts and publishes a release of the `rigplane` Python package to PyPI via the existing `publish.yml` workflow. Tailored to this repo's specifics: pure Python + Svelte/TS frontend, no Rust workspace, dynamic `__version__` via `importlib.metadata`, CHANGELOG symlinked from root, asymmetric CI gates.
|
|
10
|
+
|
|
11
|
+
**Arguments:**
|
|
12
|
+
- `patch` / `minor` / `major` — bump type (auto-suggest if omitted)
|
|
13
|
+
- Explicit version like `2.0.2`
|
|
14
|
+
- `--dry-run` — preview only; no edits, no commit, no push
|
|
15
|
+
|
|
16
|
+
User-facing prompts in Russian. Commits / CHANGELOG / tags / release notes in English.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Step 1 — Determine target version
|
|
21
|
+
|
|
22
|
+
1. Read current version from `pyproject.toml` line 7: `version = "..."`. **This is the only source of truth.** Do NOT read or modify `src/rigplane/__init__.py` (it derives `__version__` from `importlib.metadata.version("rigplane")`); do NOT modify `src/icom_lan/__init__.py` (deprecation shim).
|
|
23
|
+
2. Get previous tag: `git tag --list 'v*' --sort=-version:refname | head -1`.
|
|
24
|
+
3. If no bump argument passed, **auto-suggest**:
|
|
25
|
+
- `git log vPREV..HEAD --no-merges --format='%s'`
|
|
26
|
+
- Any line with `BREAKING CHANGE` or `^\w+!:` → MAJOR
|
|
27
|
+
- Else any `feat(...)?:` or `feat:` → MINOR
|
|
28
|
+
- Else → PATCH
|
|
29
|
+
- Show suggestion: `Suggested: vX.Y.Z (PATCH — N fix commits, M feat, K breaking)`. Ask accept/override.
|
|
30
|
+
4. Compute `NEW_VERSION` from bump type.
|
|
31
|
+
|
|
32
|
+
## Step 2 — Pre-flight checks
|
|
33
|
+
|
|
34
|
+
Match `publish.yml`'s `validate` job exactly so green pre-flight = green publish. Run sequentially. STOP on first failure.
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# 2a. Clean tree
|
|
38
|
+
git status --porcelain
|
|
39
|
+
```
|
|
40
|
+
Any output → stop.
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# 2b. On main
|
|
44
|
+
git branch --show-current
|
|
45
|
+
```
|
|
46
|
+
Not `main` → warn, ask confirmation.
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# 2c. Sync deps
|
|
50
|
+
uv sync --extra dev --extra bridge
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# 2d. Lint + format
|
|
55
|
+
uv run ruff check src/ tests/
|
|
56
|
+
uv run ruff format --check src/ tests/
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# 2e. Architecture gate
|
|
61
|
+
uv run lint-imports
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# 2f. Type check (CI scope: web boundary only)
|
|
66
|
+
uv run mypy --strict src/rigplane/web
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# 2g. Frontend gate
|
|
71
|
+
cd frontend
|
|
72
|
+
npm ci
|
|
73
|
+
npm run check
|
|
74
|
+
npx vitest run
|
|
75
|
+
npm run build
|
|
76
|
+
cd ..
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# 2h. Python tests
|
|
81
|
+
uv run pytest tests/ --ignore=tests/integration -n auto --tb=short --timeout=300 --timeout-method=thread
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# 2i. Build smoke
|
|
86
|
+
uv build && rm -rf dist/
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# 2j. Optional regression check (.claude/commands/regression-check.md)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# 2k. Warn-only: prior FAILED issues in .claude/queue/history.json
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Report: "All pre-flight checks passed ✓" and continue.
|
|
98
|
+
|
|
99
|
+
## Step 3 — Generate CHANGELOG content
|
|
100
|
+
|
|
101
|
+
**Canonical file:** `docs/CHANGELOG.md`. The repo-root `CHANGELOG.md` is a **symlink** — never write through the symlink; always edit `docs/CHANGELOG.md`.
|
|
102
|
+
|
|
103
|
+
1. Read `## [Unreleased]` section. If non-empty, use as-is.
|
|
104
|
+
2. If empty → auto-generate from `git log vPREV..HEAD --no-merges --format='%s%n%b%n---'`:
|
|
105
|
+
- `feat(...)?:` / `feat!:` → **Added**
|
|
106
|
+
- `refactor(...)?:` / `perf(...)?:` → **Changed**
|
|
107
|
+
- `fix(...)?:` / `fix!:` → **Fixed**
|
|
108
|
+
- `docs(...)?:` → **Docs**
|
|
109
|
+
- `chore|test|build|ci(...)?:` → skip unless scope is clearly user-facing
|
|
110
|
+
- Other → **Other**
|
|
111
|
+
- `!:` or `BREAKING CHANGE:` body marker → **Breaking changes** sub-section at top
|
|
112
|
+
3. Strip type prefix; preserve `(#NNN)` issue refs and short SHAs. Match v2.0.1 entry style:
|
|
113
|
+
```
|
|
114
|
+
- LAN TX audio bridge: fix audio not flowing in transmit direction (#1434, ba364e54)
|
|
115
|
+
```
|
|
116
|
+
4. Present draft inline:
|
|
117
|
+
```
|
|
118
|
+
Draft CHANGELOG entries for vNEW (auto-generated from N commits).
|
|
119
|
+
Edit in place, or press Enter to accept.
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Step 4 — Preview plan (FIRST confirmation gate)
|
|
123
|
+
|
|
124
|
+
Show consolidated preview:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
Release plan for vNEW:
|
|
128
|
+
|
|
129
|
+
Bump: vCURRENT → vNEW (TYPE)
|
|
130
|
+
Commits: N (X feat, Y fix, Z other)
|
|
131
|
+
Files to edit: pyproject.toml, docs/CHANGELOG.md
|
|
132
|
+
Changelog: [counts] Added / Changed / Fixed entries
|
|
133
|
+
Tag: vNEW
|
|
134
|
+
Push target: origin/main (atomic --follow-tags)
|
|
135
|
+
GH release: gh release create vNEW (triggers publish.yml → PyPI)
|
|
136
|
+
|
|
137
|
+
Dry-run: [yes/no]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Ask: **Proceed with version bump, changelog update, and local commit?** Single yes/no.
|
|
141
|
+
|
|
142
|
+
## Step 5 — Apply edits (local only)
|
|
143
|
+
|
|
144
|
+
1. **`pyproject.toml`** — `version = "OLD"` → `version = "NEW"` (line 7).
|
|
145
|
+
2. **`docs/CHANGELOG.md`** — note: edit `docs/CHANGELOG.md` directly, NOT root `CHANGELOG.md` (symlink).
|
|
146
|
+
- Keep `## [Unreleased]` header (now empty) at top.
|
|
147
|
+
- Insert below: `## [NEW] — YYYY-MM-DD` with grouped sections from Step 3.
|
|
148
|
+
- Footer: update `[Unreleased]: https://github.com/rigplane/rigplane-core/compare/vNEW...HEAD`. Insert `[NEW]: https://github.com/rigplane/rigplane-core/compare/vPREV...vNEW`.
|
|
149
|
+
- **First-run repair**: if footer is missing entries for `[2.0.0]` and `[2.0.1]`, backfill with `https://github.com/rigplane/rigplane-core` URLs. Do NOT rewrite older `morozsm/icom-lan` URLs (GitHub auto-redirects).
|
|
150
|
+
|
|
151
|
+
**Files NOT to touch:**
|
|
152
|
+
- `src/rigplane/__init__.py` — `__version__` is dynamic via `importlib.metadata`
|
|
153
|
+
- `src/icom_lan/__init__.py` — deprecation shim, no version
|
|
154
|
+
- `CLAUDE.md` — no Version row exists post-rebrand
|
|
155
|
+
- `frontend/package.json` — `private: true`, currently `2.0.0` (cosmetic; leave unless explicitly asked)
|
|
156
|
+
- No `RELEASE_NOTES.md` — file is no longer used; pass changelog to `gh release create` via tempfile
|
|
157
|
+
|
|
158
|
+
## Step 6 — Commit + tag
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
git add pyproject.toml docs/CHANGELOG.md
|
|
162
|
+
git commit -m "chore(release): bump to NEW — <one-line summary>"
|
|
163
|
+
git tag -a vNEW -m "Release NEW"
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Show `git show HEAD --stat` and `git tag -l vNEW`.
|
|
167
|
+
|
|
168
|
+
## Step 7 — Push and publish (SECOND confirmation gate)
|
|
169
|
+
|
|
170
|
+
Ask once: **Push commit + tag to origin and create GitHub release?** On `no` → stop; print rollback. On `yes`:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
git push --follow-tags
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Failure → stop. On success:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
NOTES=$(mktemp)
|
|
180
|
+
# Extract the [NEW] section from docs/CHANGELOG.md to $NOTES
|
|
181
|
+
gh release create vNEW --notes-file "$NOTES" --title "NEW"
|
|
182
|
+
rm -f "$NOTES"
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**State explicitly that `gh release create` is what triggers `publish.yml` (`on: release: published`); pushing the tag alone does NOT publish to PyPI.**
|
|
186
|
+
|
|
187
|
+
Print release URL.
|
|
188
|
+
|
|
189
|
+
## Step 8 — Post-release housekeeping
|
|
190
|
+
|
|
191
|
+
1. Update `.claude/metrics.json`: `releases_count` += 1, `last_release_version = "NEW"`.
|
|
192
|
+
2. Append to `.claude/workflow/release-notes.md`: version, date, commit count, headline.
|
|
193
|
+
3. Print monitor link: `https://github.com/rigplane/rigplane-core/actions`.
|
|
194
|
+
|
|
195
|
+
## Step 9 — Summary
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
Release vNEW complete.
|
|
199
|
+
|
|
200
|
+
version bump: NEW (pyproject.toml)
|
|
201
|
+
CHANGELOG: docs/CHANGELOG.md updated
|
|
202
|
+
Git tag: vNEW
|
|
203
|
+
GitHub release: <URL>
|
|
204
|
+
Commits since vPREV: N
|
|
205
|
+
|
|
206
|
+
CI will now:
|
|
207
|
+
- publish.yml → PyPI
|
|
208
|
+
- docs.yml → docs deploy
|
|
209
|
+
|
|
210
|
+
Monitor: https://github.com/rigplane/rigplane-core/actions
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Error recovery
|
|
216
|
+
|
|
217
|
+
Print these verbatim when a step fails. Never auto-rollback.
|
|
218
|
+
|
|
219
|
+
**Commit created but tag failed or not yet pushed:**
|
|
220
|
+
```bash
|
|
221
|
+
git reset --hard HEAD~1
|
|
222
|
+
git tag -d vNEW # if tag was created
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**Commit + tag created locally, push failed:**
|
|
226
|
+
```bash
|
|
227
|
+
git tag -d vNEW
|
|
228
|
+
git reset --hard HEAD~1
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Push succeeded but GitHub release failed:**
|
|
232
|
+
```bash
|
|
233
|
+
gh release create vNEW --notes-file <path-to-extracted-changelog-section> --title "NEW"
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**Fully undo a pushed release:**
|
|
237
|
+
```bash
|
|
238
|
+
gh release delete vNEW --yes
|
|
239
|
+
git push --delete origin vNEW
|
|
240
|
+
git tag -d vNEW
|
|
241
|
+
git revert HEAD # or git push --force-with-lease (dangerous; ask first)
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Notes for the operator
|
|
247
|
+
|
|
248
|
+
- This skill replaces the old global `Release icom-lan` slash command (`.claude/commands/release.md`), which had stale references to `src/icom_lan/__init__.py` (a shim, never canonical), `RELEASE_NOTES.md` (no longer used), `CLAUDE.md` Version row (no longer exists), and root `CHANGELOG.md` (symlink — must edit `docs/CHANGELOG.md`).
|
|
249
|
+
- Match `publish.yml`'s `validate` job exactly. If CI's validate gate changes, update Step 2.
|
|
250
|
+
- For Pro releases (Tauri shell), use the `release` skill in `rigplane-pro` (different beast — single-tag-then-handoff to operator's Mac terminal, not single-shot publish).
|
|
@@ -71,6 +71,9 @@ ALLOWLIST=(
|
|
|
71
71
|
# Workflow definition for the gate: references the pattern in its
|
|
72
72
|
# job description.
|
|
73
73
|
'.github/workflows/rebrand-gate.yml'
|
|
74
|
+
# Release skill documents src/icom_lan/__init__.py shim as DO-NOT-TOUCH
|
|
75
|
+
# (deprecation shim — must not be modified during version bumps).
|
|
76
|
+
'.claude/skills/release/SKILL.md'
|
|
74
77
|
)
|
|
75
78
|
|
|
76
79
|
# Collect all files matching brand pattern.
|
|
@@ -34,8 +34,9 @@ node_modules/
|
|
|
34
34
|
|
|
35
35
|
# Local config & tools
|
|
36
36
|
config/
|
|
37
|
-
.claude
|
|
37
|
+
.claude/*
|
|
38
38
|
!.claude/commands/
|
|
39
|
+
!.claude/skills/
|
|
39
40
|
.kombai/
|
|
40
41
|
.firecrawl/
|
|
41
42
|
.playwright-mcp/
|
|
@@ -47,6 +48,7 @@ rigs/.backups/
|
|
|
47
48
|
|
|
48
49
|
# Internal dev artifacts (AI agent workspace, plans, strategies)
|
|
49
50
|
AGENTS.md
|
|
51
|
+
!AGENTS.md
|
|
50
52
|
ROADMAP_TESTING.md
|
|
51
53
|
|
|
52
54
|
# Internal docs (development-only, not published)
|
rigplane-2.0.2/AGENTS.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# AGENTS.md — rigplane-core
|
|
2
|
+
|
|
3
|
+
## Repo identity
|
|
4
|
+
|
|
5
|
+
This repository is the public open-core `rigplane` implementation.
|
|
6
|
+
|
|
7
|
+
- Repository: `rigplane/rigplane-core`
|
|
8
|
+
- License: MIT, unless a file says otherwise
|
|
9
|
+
- Project board: https://github.com/orgs/rigplane/projects/2
|
|
10
|
+
|
|
11
|
+
## Public/open-core boundary
|
|
12
|
+
|
|
13
|
+
Everything in this repository should be safe to publish as open-core work:
|
|
14
|
+
|
|
15
|
+
- protocol correctness;
|
|
16
|
+
- generic radio control features;
|
|
17
|
+
- transports and backends;
|
|
18
|
+
- public SDK/API improvements;
|
|
19
|
+
- generic local web UI improvements;
|
|
20
|
+
- tests and docs useful to the community.
|
|
21
|
+
|
|
22
|
+
Do not add proprietary, customer-specific, hosted-account, premium workflow, or
|
|
23
|
+
private service integration code here. Those belong in `rigplane-pro`.
|
|
24
|
+
|
|
25
|
+
If a task mixes public and proprietary scope, split it:
|
|
26
|
+
|
|
27
|
+
- generic API/protocol/backend work stays here;
|
|
28
|
+
- product workflow, packaging, account/device, and support automation go to
|
|
29
|
+
`rigplane-pro`.
|
|
30
|
+
|
|
31
|
+
## GitHub Project workflow
|
|
32
|
+
|
|
33
|
+
Use the GitHub Project as the development control plane for non-trivial work.
|
|
34
|
+
|
|
35
|
+
- Project: `RigPlane Core Roadmap`
|
|
36
|
+
- URL: https://github.com/orgs/rigplane/projects/2
|
|
37
|
+
- Repository: `rigplane/rigplane-core`
|
|
38
|
+
|
|
39
|
+
Default rule for agents:
|
|
40
|
+
|
|
41
|
+
- Do not start non-trivial implementation from chat context alone.
|
|
42
|
+
- Work from a GitHub issue that has acceptance criteria.
|
|
43
|
+
- Add the issue to `RigPlane Core Roadmap` if it is missing.
|
|
44
|
+
- Keep Project fields current while working:
|
|
45
|
+
- `Status`: `Todo`, `In Progress`, `Done`
|
|
46
|
+
- `WorkType`: `epic`, `feature`, `spike`, `bug`, `debt`, `docs`, `release`
|
|
47
|
+
- `Area`: `api`, `protocol`, `transport`, `rigctld`, `audio`,
|
|
48
|
+
`radio-models`, `web-ui`, `cli`, `docs`, `ci`, `release`, `architecture`
|
|
49
|
+
- `Priority`: `P0`, `P1`, `P2`, `P3`
|
|
50
|
+
- `Phase`: `inbox`, `spec`, `alpha`, `beta`, `stable`, `post-release`,
|
|
51
|
+
`backlog`
|
|
52
|
+
- `Owner`: `human`, `codex`, `mixed`
|
|
53
|
+
- `Risk`: `low`, `medium`, `high`
|
|
54
|
+
- `Size`: `S`, `M`, `L`
|
|
55
|
+
- Treat issue bodies as the source of truth for requirements, acceptance
|
|
56
|
+
criteria, compatibility decisions, and test expectations.
|
|
57
|
+
- Treat Project fields as routing/status metadata only.
|
|
58
|
+
- Before opening a PR, confirm the linked issue is in the Project and update
|
|
59
|
+
`Status` to `In Progress` or `Done` as appropriate.
|
|
60
|
+
|
|
61
|
+
See `docs/internals/github-project-workflow.md` for the exact CLI and UI
|
|
62
|
+
workflow.
|
|
63
|
+
|
|
64
|
+
## Engineering rules
|
|
65
|
+
|
|
66
|
+
- Follow `CLAUDE.md` for commands, architecture, testing, and workflow gates.
|
|
67
|
+
- Keep public API compatibility explicit. If a change breaks API, CLI, config,
|
|
68
|
+
rigctld wire behavior, or docs, call it out in the issue and PR.
|
|
69
|
+
- Prefer tests before implementation for bugs and behavior changes.
|
|
70
|
+
- Do not add new layers, abstractions, or broad refactors unless the issue
|
|
71
|
+
explicitly requires it.
|
|
72
|
+
- Keep hardware-dependent work mockable where possible; otherwise mark the
|
|
73
|
+
issue as requiring human/hardware validation.
|
|
@@ -115,6 +115,12 @@ Incomplete → continue or FAILED. Never skip.
|
|
|
115
115
|
|
|
116
116
|
## Autonomous pipeline
|
|
117
117
|
|
|
118
|
+
**GitHub Project control plane:** non-trivial work should be tracked in
|
|
119
|
+
`RigPlane Core Roadmap` (https://github.com/orgs/rigplane/projects/2). Work
|
|
120
|
+
from GitHub issues with acceptance criteria, add missing issues to the Project,
|
|
121
|
+
and keep fields current while working. See
|
|
122
|
+
`docs/internals/github-project-workflow.md`.
|
|
123
|
+
|
|
118
124
|
Strictly linear. No phase may be skipped or reordered. No exceptions.
|
|
119
125
|
State files (`.claude/workflow/*.md`) are the sole source of truth — not memory or reasoning.
|
|
120
126
|
CLAUDE.md controls all workflow transitions. Agents must not self-direct transitions.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rigplane
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.2
|
|
4
4
|
Summary: Python library for controlling Icom transceivers over LAN (UDP) — no wfview/hamlib required
|
|
5
5
|
Project-URL: Homepage, https://rigplane.dev/
|
|
6
6
|
Project-URL: Documentation, https://rigplane.dev/
|
|
@@ -204,10 +204,10 @@ fair-use compatibility identification only — this project is not affiliated
|
|
|
204
204
|
with, endorsed by, or sponsored by Icom.
|
|
205
205
|
|
|
206
206
|
rigplane is the **open-core** half of a planned product split. A
|
|
207
|
-
proprietary commercial layer (`rigplane-pro`) is under development
|
|
208
|
-
will integrate with this library through the public `Radio` protocol
|
|
209
|
-
the `local-extensions/` host API. Open-core constraints — no
|
|
210
|
-
headless mode is sacred, no hollowing out — are codified in
|
|
207
|
+
proprietary commercial layer (`rigplane-pro`) is under active development
|
|
208
|
+
and will integrate with this library through the public `Radio` protocol
|
|
209
|
+
and the `local-extensions/` host API. Open-core constraints — no
|
|
210
|
+
telemetry, headless mode is sacred, no hollowing out — are codified in
|
|
211
211
|
[`docs/architecture/open-core-policy.md`](docs/architecture/open-core-policy.md).
|
|
212
212
|
|
|
213
213
|
## Status
|
|
@@ -158,10 +158,10 @@ fair-use compatibility identification only — this project is not affiliated
|
|
|
158
158
|
with, endorsed by, or sponsored by Icom.
|
|
159
159
|
|
|
160
160
|
rigplane is the **open-core** half of a planned product split. A
|
|
161
|
-
proprietary commercial layer (`rigplane-pro`) is under development
|
|
162
|
-
will integrate with this library through the public `Radio` protocol
|
|
163
|
-
the `local-extensions/` host API. Open-core constraints — no
|
|
164
|
-
headless mode is sacred, no hollowing out — are codified in
|
|
161
|
+
proprietary commercial layer (`rigplane-pro`) is under active development
|
|
162
|
+
and will integrate with this library through the public `Radio` protocol
|
|
163
|
+
and the `local-extensions/` host API. Open-core constraints — no
|
|
164
|
+
telemetry, headless mode is sacred, no hollowing out — are codified in
|
|
165
165
|
[`docs/architecture/open-core-policy.md`](docs/architecture/open-core-policy.md).
|
|
166
166
|
|
|
167
167
|
## Status
|
|
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.0.2] — 2026-05-06
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Tailored in-repo release skill (`.claude/skills/release/SKILL.md`) replacing the stale global slash command (#1436).
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- Frontend e2e: closed pre-existing Wave 2 rebrand leak in `playwright.config.ts` and `v2-ui-interactive.impl.ts`; removed obsolete `ICOM_LAN_V2_URL` fallback (#1437).
|
|
17
|
+
|
|
18
|
+
### Docs
|
|
19
|
+
- IC-7610 WSJT-X TX level workaround for FT8/JS8/fldigi multi-peak waterfall (#1382, #1384).
|
|
20
|
+
- GitHub Project workflow for Codex-style agents: `AGENTS.md`, project doc, `CLAUDE.md` link (#1431).
|
|
21
|
+
|
|
22
|
+
## [2.0.1] — 2026-05-06
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
- LAN TX audio bridge: fix audio not flowing in transmit direction (#1434, ba364e54)
|
|
26
|
+
|
|
10
27
|
## [2.0.0] — 2026-05-05
|
|
11
28
|
|
|
12
29
|
**Headline:** project renamed from `icom-lan` to **`rigplane`**. The old name was always misleading — the project shipped multi-vendor support (Icom CI-V, Yaesu CAT, Discovery TX-500, Xiegu X6200) over LAN, USB, and serial. Carrying "icom-lan" through a paid Pro tier also created a trademark risk on a vendor name we don't own. New brand at https://rigplane.dev.
|
|
@@ -1206,7 +1223,10 @@ These deprecation closures were announced in v0.19 and dropped on schedule.
|
|
|
1206
1223
|
- Transport layer, authentication, CI-V commands, meters, PTT, keep-alive.
|
|
1207
1224
|
- Clean-room Icom LAN UDP protocol implementation.
|
|
1208
1225
|
|
|
1209
|
-
[Unreleased]: https://github.com/
|
|
1226
|
+
[Unreleased]: https://github.com/rigplane/rigplane-core/compare/v2.0.2...HEAD
|
|
1227
|
+
[2.0.2]: https://github.com/rigplane/rigplane-core/compare/v2.0.1...v2.0.2
|
|
1228
|
+
[2.0.1]: https://github.com/rigplane/rigplane-core/compare/v2.0.0...v2.0.1
|
|
1229
|
+
[2.0.0]: https://github.com/rigplane/rigplane-core/compare/v1.1.0...v2.0.0
|
|
1210
1230
|
[1.1.0]: https://github.com/morozsm/icom-lan/compare/v1.0.1...v1.1.0
|
|
1211
1231
|
[1.0.1]: https://github.com/morozsm/icom-lan/compare/v1.0.0...v1.0.1
|
|
1212
1232
|
[1.0.0]: https://github.com/morozsm/icom-lan/compare/v0.19.0...v1.0.0
|
|
@@ -385,6 +385,33 @@ Use `rigplane --list-audio-devices` to find the correct indices.
|
|
|
385
385
|
2. Check PTT is active before transmitting audio
|
|
386
386
|
3. Verify `--tx-device` matches the USB audio device name
|
|
387
387
|
|
|
388
|
+
### TX appears dirty / multiple peaks on waterfall during the first seconds
|
|
389
|
+
|
|
390
|
+
**Symptom**: When transmitting from WSJT-X / JS8Call / fldigi via the USB Audio CODEC, the first 5–10 seconds of TX show on the waterfall (or a second receiver) as a "fat" carrier centred ~1500 Hz, or as several spurs spread across the audio passband. The signal then either settles into a clean tone, or never settles if the level is too high.
|
|
391
|
+
|
|
392
|
+
**Cause**: IC-7610's USB audio input has less internal headroom before ALC compression than IC-7300 / FTX-1. With the WSJT-X power slider (the vertical slider on the right of the main window) at 100%, the FT8/JS8 tone clips inside the radio, producing IM3-style intermodulation products until ALC finds its working point. This is a hardware/firmware property of the IC-7610 USB CODEC — it occurs regardless of which CAT path (LAN, serial, direct rigctl) is used to control the radio, since the audio itself flows OS-level (WSJT-X → CoreAudio → USB Audio CODEC → radio) and never passes through RigPlane.
|
|
393
|
+
|
|
394
|
+
**Fix**:
|
|
395
|
+
|
|
396
|
+
1. **WSJT-X → main window → right-side TX power slider** → drop to **~20-25%** as a starting point.
|
|
397
|
+
2. Optionally also reduce **Menu → Set → Connectors → MOD Level** on the radio to ~30%.
|
|
398
|
+
3. PTT into FT8 / JS8 and verify on the waterfall: a single clean carrier at the FT8 audio centre, no spread peaks during the first seconds.
|
|
399
|
+
|
|
400
|
+
!!! tip "Precise tuning with an external SWR/power meter"
|
|
401
|
+
A more precise way to find the optimal level — if you have an external SWR/power meter inline — is to dial the WSJT-X slider down while keying TX:
|
|
402
|
+
|
|
403
|
+
- Above the ALC threshold the radio's output power stays roughly **flat** as you reduce the slider, because ALC is compressing the overdrive.
|
|
404
|
+
- Continue lowering the slider until the **external meter starts to drop**.
|
|
405
|
+
- That's the point where ALC has stopped engaging. Set the slider at (or just slightly above) that level — that's the optimal clean drive: full rated output, no compression, no IM3 spurs.
|
|
406
|
+
|
|
407
|
+
This works because ALC behaves as a hard limiter: once you're below its threshold, output tracks input one-to-one again, so the meter "wakes up" at exactly the right level.
|
|
408
|
+
|
|
409
|
+
!!! note "IC-7610 specific"
|
|
410
|
+
IC-7300 and FTX-1 tolerate the WSJT-X slider at 100% without this effect because their USB audio paths have more headroom. Don't apply this attenuation to those radios — it just costs you SNR.
|
|
411
|
+
|
|
412
|
+
!!! tip "Verifying with a second receiver"
|
|
413
|
+
The cleanest way to confirm the fix is to monitor your TX on a second receiver (or a public web SDR — kiwisdr.com, websdr.org). Compare the waterfall during the first 10 seconds of TX at 100% slider vs 25% slider — the difference is unmistakable.
|
|
414
|
+
|
|
388
415
|
## Environment Variables
|
|
389
416
|
|
|
390
417
|
For convenience, set these in your shell profile:
|