Skip to content

Add ARRL Field Day exchange mode - #121

Merged
sc0tfree merged 9 commits into
v1from
v1-feature-19-field-day
Aug 27, 2026
Merged

sc0tfree merged 9 commits into
v1from
v1-feature-19-field-day

Conversation

@sc0tfree

@sc0tfree sc0tfree commented Aug 26, 2026 •

Copy link
Copy Markdown
Owner

Summary

This PR adds a complete ARRL Field Day practice mode to v1, covering the running-station workflow from CQ FD through class/section fills and TU.

  • add the Field Day CQ, class/section exchange, CL?, SEC?, AGN?, and closing workflow
  • persist and validate the operator's Field Day class and current ARRL/RAC section
  • generate official ARRL/RAC/DX exchanges, correlate U.S. sections with each caller's generated state, and distinguish Canadian-prefix callers from other DX callers
  • weight station classes from the official 2025 CW-active Field Day results while keeping generation mode-agnostic
  • cover validation, cut numbers, fills, persistence, repeated contacts, responsive behavior, and complete browser workflows

Background and acknowledgements

Field Day practice has been one of Morse Walker's most-requested additions. It was originally suggested by Josh (WU7H), then independently requested or endorsed by NB7O, AI5BE, KQ4BFO, K0CEP, @priceguncowboy, @johnsonm, @ny4i, and one additional community member who preferred to remain private. Thank you all for making the need - and the desired operating flow - so clear.

A special thank you to @johnsonm for building and maintaining the original implementation in #71. That work established a complete Field Day flow, separate class and section entry, persistence, weighted exchanges, U.S./RAC/DX handling, and several important on-air correctness fixes. It provided both a working proof of concept and a substantial body of design research for this PR.

Thanks also to @jhollowe for the feedback that lower station counts should be weighted more heavily, and to @ny4i for hands-on testing, identifying the Canadian-section mismatch, and exploring real-result station data and combined class/section entry.

The v1 architecture has changed substantially, so this is a clean v1 implementation rather than a rebase or cherry-pick of #71. No #71 commits were cherry-picked, but its implementation and discussion significantly informed the design and correctness of #121. This PR also builds on the component-fill framework introduced in #119.

Follow-up work

#71 and its follow-up discussion contain several excellent ideas that are intentionally outside this core PR rather than being dropped:

  • varied acknowledgements and signoffs such as R, RR, QSL, TNX, GL, and 73
  • Field Day-specific U.S./Canada/DX caller proportions and richer Canadian callsign/section modeling

These will remain explicit future-work candidates after the core mode lands.

Data sources

Test plan

  • npm run verify
  • npx playwright test
  • desktop and 390px mobile visual review

Closes #19
Closes #93

sc0tfree and others added 3 commits August 26, 2026 15:35
Model class and section as normal station attributes so existing exchange and fill workflows can train realistic, state-correlated contacts.

Co-authored-by: Cursor <cursoragent@cursor.com>
Cover section correlation, validation, fills, cut numbers, persistence, repeated contacts, and responsive browser behavior.

Co-authored-by: Cursor <cursoragent@cursor.com>
Describe the new mode, its persisted exchange settings, and the manual cut-number verification gate.

Co-authored-by: Cursor <cursoragent@cursor.com>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 26, 2026 •

Copy link
Copy Markdown

Deploying morsewalker with  Cloudflare Pages  Cloudflare Pages

Latest commit: a218fe5
Status: ✅  Deploy successful!
Preview URL: https://24958f06.morsewalker.pages.dev
Branch Preview URL: https://v1-feature-19-field-day.morsewalker.pages.dev

View logs

sc0tfree and others added 6 commits August 26, 2026 15:53
Shorten labels, place POTA before Field Day, and fit all own-station inputs on one desktop row to avoid awkward wrapping.

Co-authored-by: Cursor <cursoragent@cursor.com>
Stack the heading below the md breakpoint and compact button padding so all six modes stay on one row throughout the small-width range.

Co-authored-by: Cursor <cursoragent@cursor.com>
Send the operator's class and section immediately after the caller's callsign to match the intended Field Day flow.

Co-authored-by: Cursor <cursoragent@cursor.com>
Group universal controls before mode-specific exchange fields and preserve that hierarchy across responsive breakpoints.

Co-authored-by: Cursor <cursoragent@cursor.com>
Keep settings in two rows until 1200px so each field remains readable.

Co-authored-by: Cursor <cursoragent@cursor.com>
Give CWT and SST results the same clear exchange-column label as Field Day.

Co-authored-by: Cursor <cursoragent@cursor.com>
@sc0tfree
sc0tfree merged commit 9955862 into v1 Aug 27, 2026
5 checks passed
@sc0tfree
sc0tfree deleted the v1-feature-19-field-day branch August 27, 2026 18: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.

1 participant