Changelog
What changed in EzFD, newest first. Read from the top down to the date you last updated.
There are no version numbers — EzFD is deployed by pulling the repository — so
entries are dated by when they landed on master.
Each entry says what the change does for you, grouped by whether it added something, fixed something, changed existing behaviour, removed something, or was a security update. Entries that affect what you submit or see also carry a tag:
| Tag | Meaning |
|---|---|
Scoring |
A claimed score moves. If you already submitted, check the number |
Exports |
A Cabrillo, ADIF, summary sheet or backup file changes |
Display |
An operator sees or does something different on screen |
Setup |
Deployment, the admin console, or how the server is run |
Untagged entries are internal — tests, refactors, CI — and safe to skip if you only run events.
2026-08-25
Added
- Dashboard log view
Display— Every contact in one table, narrowed by operator, station, band, mode, section, time or duplicates, with the columns you choose. Answers a question about the log without exporting it mid-event, and gives a club something worth putting on a screen at the site. (#66) - This changelog — So you can tell at a glance whether an update moves a score, changes an export or alters the screen, instead of reading commits. (#67, #68)
Changed
- Changelog layout — Entries are grouped by what they did (added, fixed,
changed, removed, security) with the subject in front, so a date's worth of
work can be skimmed rather than read. Adds a
Setuptag for deployment and admin-console changes. (#69)
2026-08-24
Added
- Contest rules reference —
rules-reference.mdtranscribes the scoring rules for both contests with their rule numbers, so a value can be checked against the source rather than against the code that uses it. (#60) - Documentation as part of every change —
AGENTS.mdrecords which guide owns which kind of change, so a feature and its documentation land together. (#62)
Fixed
- Winter Field Day scoring
ScoringDisplay— WFD was scored with Field Day's formula, which the WFD rules cannot produce by any route. It usesQSO points × (Objective Multiplier + 1), with no bonus points and no power multiplier; the bonus panel is now an objectives list. (#60, closes #58) - Field Day bonus schedule
ScoringExports— Ten of eighteen bonus values were wrong, three were missing, and two were awarded that no rule contains. Any entry claiming bonuses was submitting a wrong total, and emergency power alone was over-claiming by thousands of points on a large log. (#59) - Mobile stations in Winter Field Day
Display— ClassMwas missing from the entry form's copy of the WFD class letters, so every contact with a mobile station was flagged as an invalid class. (#60) - The
MXexchangeDisplay— Mexican stations send it in WFD, and it was being counted as a probable typo. (#60) - Stale Cabrillo guidance
Exports— The guides told clubs to hand-correct the claimed score months after that bug was fixed. Following them would have introduced the error they warned about. (#57) - Admin console event list
Setup— A long list was unusable, and some failed actions printed success. (#63) - README licence and AI disclaimer — Both were lost when the file was rewritten rather than edited. (#61)
Removed
- The Worked All Sections bonus
Scoring— Field Day has never had one, and the 100 points it awarded went onto entries that never earned them. Sections are still counted, still shown, and still worth chasing — they just score nothing. (#59)
2026-08-23
Added
- Documentation inside the app
Display— Served at/docs. The operator who needs the troubleshooting page on a field server with no internet is exactly the one who cannot reach GitHub. (#54) - Band and mode coordination for contests
Display— A station can claim a band and mode, and another is warned rather than silently doubling up. (#47) - Operator quick start
Display— For someone who has a join code and a radio and nothing to administer. (#56)
Changed
- New events default to section MN
Display— Matching the example callsign rather than an unrelated section. (#55)
Fixed
- Contacts lost during a CW run — The CW keying window logged straight to the server with no local copy, so an outage destroyed contacts rather than delaying them. It now shares the offline queue. (#51)
- The offline queue after a server-only outage — A restart or a brief 502 leaves the browser's own connection up, so nothing told the queue to retry. Contacts sat unsent until somebody noticed the badge. (#49)
- WSJT-X contacts the server refused — The relay printed an error and moved on. It now spools them to disk and retries. (#52)
- Two radios, one operator
Display— Presence and call checkouts are keyed per radio, so a second logging window no longer overwrites the first's band or releases its slot. (#53)
2026-08-22
Added
- Recoverable deletes with an audit trail
DisplayExports— A contact missing from the log could not be distinguished from one never logged. Deletes are now reversible and record who made them. (#45) - Event export and import over HTTP
Setup— Moving an event between instances no longer needs shell access on the server. (#44) - Server clock skew detection
Display— A field server with no RTC and no NTP stamps every contact with a plausible-looking wrong time, which is invisible unless something checks. (#33) - Unit suites for scoring, exports and the section list — The highest-consequence logic in the project was covered only indirectly. (#39, #43)
- Lint and shellcheck as CI gates — A backlog of findings was cleared and the gates turned on, so the next one fails a pull request rather than accumulating. (#38, #40)
Fixed
- Cabrillo claimed score and transmitter numbers
ScoringExports— The header ignored the power multiplier, dropped bonus points entirely, and stamped every contact with the same transmitter. (#31) - Typos counting as sections
Scoring— A handful of unrecognised exchanges could read as a clean sweep.DXis accepted as a valid exchange without being counted as a section. (#36) - The ARRL/RAC section list
Scoring— RAC's recent splits and renames were missing, so the sections-worked denominator was wrong. (#33)
Security
- Next.js updated
Setup— Clears four high-severity CVEs. (#42)
2026-08-21
Added
- Special event station support
Display— One callsign across many operators, with band and mode checkout enforced by a database constraint rather than by convention. - Full documentation under
docs/, with screenshots — Guides for operating, deployment, administration and the API, replacing a single README. (#25, #26) - 24-hour clock pickers and a schedule timeline
Display— Event start and end times are set on a UTC clock rather than typed, and the schedule is shown as a timeline. (#27, #28, #29)
Earlier history is in the commit log. This file starts where the work became continuous enough to be worth summarising.