Take serial numbers from a pool the whole entry shares

Each station worked out its next number as the highest in its log plus one,
so two operators typing at the same moment both sent the same number and
one of the two contacts was wrong in the sponsor's log.

SerialNumberPool holds the highest number taken per band, which is N1MM's
QSONumbers array. A number is taken at the first character of the callsign,
as N1MM takes it, and ReserveNr tells the other stations before the contact
is worked. A number at or below one this station has used is answered with
the whole pool, N1MM's QSONRS, and the station that is behind counts on from
there. The pool also goes out when a contest is opened and when the numbers
are started again.

Contest.NumbersByBand says whether the numbers run per band or as one
sequence for the station. CQ WPX runs one per band for a multi-two and a
multi-multi; every other contest here runs one sequence. The band index in
the message is N1MM's, so the array lines up with theirs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015NZkFxHde1iifAQemFTHxf
This commit is contained in:
2026-09-10 11:56:49 +00:00
co-authored by Claude Opus 5
parent 33c7631e17
commit 7ba0b44fc1
21 changed files with 677 additions and 40 deletions
+13
View File
@@ -920,6 +920,19 @@ An incoming edit or delete is matched by contact id first. N1MM does not know
our ids, so the call and the timestamp are the fallback — that is the pair N1MM
itself keys a contact on.
**Serial numbers are taken from a pool the whole entry shares.** A number is
taken at the first character of the callsign, not when the contact is logged,
and `ReserveNr` tells the other stations at once, so two operators typing at the
same moment do not send the same number. A station whose number is one this
station has already used is answered with the whole pool — N1MM's `QSONRS`, one
number per band — and counts on from there. The pool goes out when a contest is
opened and when the numbers are started again, so a station joining a contest
already under way counts from the same place.
Most contests run one sequence for the whole station. CQ WPX runs one per band
for a multi-two and a multi-multi, which is the class the entry declares in
contest setup, and N1MM decides it the same way.
A contact that arrives is put into the log where its timestamp says it belongs
and the log is scored again, so of two stations that worked the same multiplier
the one that worked it first keeps it, however late the message turns up.