Skip to content

feat(spots): add band-specific DX distance thresholds#315

Merged
arunderwood merged 6 commits intomainfrom
feature/band-specific-dx-scoring
Jan 8, 2026
Merged

feat(spots): add band-specific DX distance thresholds#315
arunderwood merged 6 commits intomainfrom
feature/band-specific-dx-scoring

Conversation

@arunderwood
Copy link
Copy Markdown
Owner

Summary

Different bands have vastly different propagation characteristics. This PR adds band-specific DX distance thresholds for scoring:

  • 160m: 3,000 km excellent (difficult, night skip required)
  • 20m: 15,000 km excellent (workhorse DX band)
  • 6m: 5,000 km excellent (sporadic-E / rare F2)

Changes

  • Add DxThresholds record to FrequencyBand with propagation-appropriate values for all 12 bands
  • Update BandActivity.normalizeDx() to use band-aware thresholds instead of static constants
  • Add frontend bandDxThresholds.ts with sync comments referencing Java source
  • Add BandDxHelp component showing threshold table in help modal
  • Add comprehensive tests for invariants and band comparisons

Test Plan

  • All backend tests pass (FrequencyBandTest, BandActivityTest)
  • All frontend tests pass (459 tests)
  • All E2E tests pass (105 tests)
  • Quality checks pass (Checkstyle, PMD, SpotBugs)
  • Runtime validation passes (TypeScript: 0 errors)

Closes #199

Different bands have vastly different propagation characteristics.
A 3,000 km contact on 160m (difficult, night skip required) is
exceptional, while 20m (workhorse DX band) needs 15,000 km for
top scores.

- Add DxThresholds record to FrequencyBand with band-specific values
- Update BandActivity.normalizeDx() to use band-aware thresholds
- Add frontend bandDxThresholds.ts with sync comments to Java
- Add BandDxHelp component showing threshold table
- Add comprehensive tests for invariants and band comparisons

Closes #199
Help content now lives with its related module per project conventions.
- Move BandDxHelp.tsx → cards/band-activity/BandActivityHelp.tsx
- Use registerHelp() pattern instead of barrel export
- Register via side-effect import in HelpModal.tsx
Research review identified inaccuracies in band descriptions:

- 60m: Change "WARC; variable propagation" to "Secondary allocation;
  variable propagation" - 60m was allocated at 2003 WRC, not 1979 WARC
- 12m: Change "WARC; similar to 15m" to "WARC; similar to 10m/15m" -
  12m shares propagation characteristics with both bands

Sources: Wikipedia WARC bands, HamCalc band chart, QSL.net propagation
Add test coverage for new files to satisfy delta coverage:
- bandDxThresholds.ts: threshold invariants and lookup function
- BandActivityHelp.tsx: registration and rendering

Tests focus on business logic (threshold ordering, propagation
characteristics) rather than implementation details.
@arunderwood arunderwood merged commit 77f7437 into main Jan 8, 2026
12 checks passed
@arunderwood arunderwood deleted the feature/band-specific-dx-scoring branch January 8, 2026 23:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(propagation): DX distance scoring from gridsquares

1 participant