WAE is two contests in one. The QSOs are scored like any other, except that a multiplier is worth four on 80 metres, three on 40 and two on the high bands, so Multiplier grew a weight and ScoreTally sums weights rather than counting. Europe works the rest of the world and the rest of the world works Europe; on RTTY that rule is dropped and everybody works everybody. The other half is QTC traffic: one station reads back contacts it has already made, ten to a series, and every line is a point for both stations. Those lines live in the log as rows of their own, exactly where N1MM puts them — Exchange1 says SQTC or RQTC, the reported contact's time, call and number go in the sent report, received report and sent number columns, and the series in misc text. So a log written by either program opens in the other with its traffic intact. A QTC row is not a worked station: Contest.IsContact says so, and ContestLog keeps such rows out of the dupe index and the multiplier index while still counting their points. Cabrillo writes them as QTC: records. Checked against eight real WAE logs rather than against my own reading of the rules. Points agree with N1MM on all eight, to the contact. Weighted multipliers agree on the six logs from 2022 on; the two older ones differ only where the country file has since changed its mind, and in one place on purpose: N1MM counts a callsign it cannot place as a multiplier with an empty value. That comparison turned up two bugs of ours. A KG4 call is Guantanamo Bay only when it is three or five characters long — KG4NE is, KG4IGC is an ordinary US call — and the country file cannot say so, so every program that reads it carries the rule. And Callsign is a record holding a list of modifiers, so the generated equality compared that list by reference and two parses of one call came out different. Entering QTCs while operating is not there yet; the window is next. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
102 lines
5.9 KiB
Markdown
102 lines
5.9 KiB
Markdown
# What is not finished, and what has not been tested
|
|
|
|
Two separate lists. A feature can be finished and untested, or half-built and
|
|
exercised every day. Written 2026-08-27.
|
|
|
|
## Never run against the real thing
|
|
|
|
Everything below is written from a published protocol or from N1MM's source and
|
|
tested against a fake that speaks the same protocol. A fake agrees with whatever
|
|
the person who wrote it believed, so these are the places where a wrong belief
|
|
is still sitting there undiscovered.
|
|
|
|
| What | Tested against | What has never happened |
|
|
|---|---|---|
|
|
| `RigctldRadio` | a stand-in for `rigctld` over a real socket | no real `rigctld`, no real radio. The extended answer format, the `+` prefix and the split commands are from the documented protocol. If the format is wrong, nothing works rather than something being subtly off — check this first. |
|
|
| `OtrspBox` | a `MemoryStream`, checking the bytes | no real SO2R box. Command forms are from N1MM's `N1MMPort.cs`. |
|
|
| `ClusterClient` | a node fake over a real socket, sending the telnet negotiation, the login prompt and spot lines | no live cluster node. Which nodes send bare CR, and which send option negotiation, is guessed from N1MM's code. |
|
|
| `StationNetwork` | the message format, round-tripped | no second station, and no N1MM on the same network. |
|
|
| `CwDaemonSender` | the UDP messages, and a fake daemon that answers the `<ESC>h` reply request | no `cwdaemon`, no radio keyed. |
|
|
| `WinkeyerSender` | the status-byte reader, on its own | no test of the serial side, and no WinKeyer. The host-mode open sequence is from the WinKeyer datasheet; the status bits are from N1MM's `Winkey.cs`. |
|
|
|
|
The Cabrillo output has not been put in front of a contest sponsor's robot.
|
|
|
|
## Half-built
|
|
|
|
**Voice keying.** `MessageSender` was written to cover a voice keyer playing a
|
|
recording, and nothing implements it. No DVK support either, so the second radio
|
|
of an SO2R station cannot call CQ by voice. Alternating CQ therefore works on CW
|
|
only, though nothing in it is CW-specific: a voice keyer that reports when the
|
|
recording has finished would drive it as it stands.
|
|
|
|
**Alternating CQ does not restart itself after a contact.** Escape stops it, and
|
|
it has to be started again with Ctrl+B. N1MM carries on calling after the QSO is
|
|
logged.
|
|
|
|
**Call history: the section-validating directives.** `!!Validate50State!!`,
|
|
`!!ValidateArrlSection!!`, `!!MapOnSection!!` and `!!GTA2GH_NT2TER!!` are read
|
|
and passed over. Acting on them means holding N1MM's section lists and its
|
|
rules about which sections are retired, and getting that wrong throws away good
|
|
data. The file is read without them.
|
|
|
|
**Entering WAE QTC traffic.** The contest, the QTC rows, the scoring and the
|
|
Cabrillo `QTC:` records are in, and a log written by N1MM reads back with its
|
|
QTCs. What is missing is the window an operator takes traffic in: today a QTC
|
|
can only reach the log by being read from a file N1MM wrote.
|
|
|
|
**Two WAE numbers do not agree with N1MM, both from 2020 and 2021 logs.** The
|
|
disagreements are the country file of the day, not the rules: 4U1A counted as
|
|
`4U1V` then and as `OE` in today's `wl_cty.dat`, `KP2BH` counted as `KP2` then
|
|
and is listed as a US call now, and China was not split by call area yet. The
|
|
2022 to 2025 logs agree to the contact. One difference is ours on purpose: N1MM
|
|
counts a callsign it cannot place — `D1M` — as a multiplier with an empty
|
|
value, and we do not.
|
|
|
|
**Digital modes.** A contact can be logged as RTTY or another digital mode, and
|
|
the contest rules score it, but there is no digital window: no decoding, no
|
|
transmitting, no interface to fldigi, MMTTY or similar.
|
|
|
|
**Contest coverage.** Eight families are built in, plus whatever `.udc` files
|
|
are in the user-defined folder. N1MM ships well over a hundred. Opening a log
|
|
from a contest that is in neither place fails with the contest name, which is
|
|
the right answer but it is still a wall.
|
|
|
|
Most of what is missing does not need code. A contest whose exchange is a
|
|
report and one value, scored by band, mode, continent or country, and counted
|
|
by country, zone, section or prefix, is a `.udc` file, and the file published
|
|
for N1MM is read as it is. Code is for the ones `.udc` has no words for: WAE
|
|
needs QTC traffic, IOTA needs island references as multipliers, and CQ WW RTTY
|
|
needed a third multiplier and its own points table because it shares a name
|
|
with the CW and SSB running of the contest.
|
|
|
|
What `.udc` cannot say here yet: an exchange that differs by the other
|
|
station's country (the OK/OM district against a serial number from everyone
|
|
else), points that depend on a zone or a distance, and multiplier sources
|
|
beyond country, prefix, zone, section, exchange, grid and continent.
|
|
|
|
## Known rough edges
|
|
|
|
**The log window's column widths** are the grid's own automatic sizing with a
|
|
character-count floor. A column can change width as rows scroll into view.
|
|
|
|
**Contacts arriving over the station network** are applied from the socket
|
|
thread, and `AppSession.TakeFromNetwork` reopens the whole contest to do it.
|
|
That is correct but heavy, and it discards what is typed in an entry window on
|
|
another radio.
|
|
|
|
**The band plan covers 160M to 2M only.** 60M and everything above 2M get no
|
|
CW, digital or phone shading on the bandmap, because N1MM's own numbers for
|
|
those bands contradict themselves — its CW top for 1.25M is below its phone
|
|
start, and its 70CM CW top is above the band. Config ▸ Sub bands cannot add a
|
|
band that has no default.
|
|
|
|
**Available mults and Qs is only as good as the bandmap.** It lists what is
|
|
spotted, so a multiplier nobody has spotted is not there. N1MM's window also
|
|
shows the mults a contest has and nobody has worked, which needs a list of every
|
|
multiplier the contest counts. Only the section and state lists are held here,
|
|
so the zone and country lists would have to come from the country file first.
|
|
|
|
**Two entry windows and one keyer.** The SO2R box is told which radio to key
|
|
before each message, but nothing stops both radios sending at once if the
|
|
operator asks them to.
|