Skip to content

feat(dashboard): merge band activity with band conditions (#269)#290

Merged
arunderwood merged 11 commits intomainfrom
arunderwood/bandactivity-dashboard
Jan 7, 2026
Merged

feat(dashboard): merge band activity with band conditions (#269)#290
arunderwood merged 11 commits intomainfrom
arunderwood/bandactivity-dashboard

Conversation

@arunderwood
Copy link
Copy Markdown
Owner

Summary

Replace separate band condition cards with merged Band+Mode cards (e.g., "20m FT8", "40m CW") that combine real-time spot activity from PSKReporter with propagation forecasts from HamQSL.

  • Add band-activity card components with SOLID architecture
  • Create mode registry for extensible mode support (FT8, CW now; SSB, FT4 "coming soon")
  • Implement 70/30 weighted scoring (activity/condition)
  • Add band mapping utilities for enum/string conversion
  • Remove old bandConditionCards from propagation module
  • Create comprehensive test suite with accessibility tests

Test Plan

  • All 425 frontend tests passing
  • Lint clean
  • Dashboard loads with Band+Mode cards
  • Cards show "No Activity Data" placeholder when no spots available
  • Propagation forecast badge displays correctly
  • WCAG 2.1 AA accessibility tests passing

Closes #269

@arunderwood arunderwood force-pushed the arunderwood/bandactivity-dashboard branch from 3c98a6d to 7ccbed6 Compare January 5, 2026 08:10
Replace separate band condition cards with merged Band+Mode cards
(e.g., "20m FT8", "40m CW") that combine real-time spot activity
from PSKReporter with propagation forecasts from HamQSL.

- Add band-activity card components with SOLID architecture
- Create mode registry for extensible mode support (FT8, CW now; SSB, FT4 "coming soon")
- Implement 70/30 weighted scoring (activity/condition)
- Add band mapping utilities for enum/string conversion
- Remove old bandConditionCards from propagation module
- Create comprehensive test suite with accessibility tests

Closes #269
MQTT connections may report as connected while subscription is broken or
messages stop flowing due to broker-side issues. Adds application-level
message liveness tracking that forces reconnection after 30 seconds
without messages.

This follows MQTT best practices - protocol-level keep-alive only
detects TCP connection issues, not subscription or message flow problems.
- Vitest coverage: use text-summary for console, lcov file-only for cover-diff
- Filter LCOV format lines from cover-diff output to show actual errors
- Add clear error message when delta coverage thresholds not met
- Fix Vitest 4 deprecation warning (poolOptions -> minWorkers/maxWorkers)

Before: CI failed with pages of LCOV data and no clear error
After: Shows "lines 77.16 < 80" and actionable error message
- Add cardRegistration.test.tsx for band-activity card definition
- Add tests for isModeSupported and getModeDisplayName in modeRegistry
- Add tests for isCombinedFavorable and getWeights in combinedScore

Delta coverage now meets 80% line / 70% branch thresholds.
Remove LCOV filtering from test:delta - keep cover-diff output as-is.
- Simplify boolean return in isReceivingMessages()
- Suppress generic exception catch with documented reason
- Format cardRegistration.test.tsx with Prettier
Tests for checkForStaleConnection() and forceReconnect() private methods
using reflection. Fixes delta coverage failure in CI.
- Use ContinentPath enum instead of string literals for activePaths
- Fix BandActivityResponse fields (mqttConnected, bandCount, totalSpotCount)
- Add helper function to handle createConfig union type safely
- Use explicit ActivityCardConfig type for invalid config test
- Add all required BandActivity fields in minimal test case
- Hide cards without activity data instead of showing placeholder
- Fix card content overflow by removing dividers and tightening layout
- Fix paths not showing as active (enum serialization bug)
…bility

Backend was serializing ContinentPath using toString() which produced
display values like "Trans-Atlantic (NA↔EU)" instead of enum names
like "NA_EU". Frontend PathStatusGrid expected the enum name format.
@arunderwood arunderwood force-pushed the arunderwood/bandactivity-dashboard branch from 363d60c to ff4f895 Compare January 6, 2026 06:39
@arunderwood arunderwood merged commit ec8f79c into main Jan 7, 2026
12 checks passed
@arunderwood arunderwood deleted the arunderwood/bandactivity-dashboard branch January 7, 2026 05:17
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(spots): Phase 3 - Dashboard card and observability

1 participant