Files
Nonemm/docs/unfinished.md
ericek111 1fda1696f2 Read call history files, and fill the exchange from them
N1MM's format, so a file published for a contest is read as it is: # comments,
!!Order!! naming the columns of the lines after it, semicolons in preference to
commas so user text can hold a comma, and a default column order for a file
that names none. The directives that change what is stored are acted on;
!!Order!! can appear again part way through, because these files are usually
several files stuck together.

Leaving the callsign box fills what the file knows into the exchange boxes that
are still empty. A box with something in it is left alone: what the station
actually sends beats what somebody published months ago. The zone comes from
the CqZone or the ITUZone column depending on which the contest asks for, and a
file with no Sect falls back to State.

The check window's two missing columns are in. History lists matching calls
from the file. Exchange is not about callsigns at all: it offers the values the
exchange box with the cursor in it can hold, which is what N1MM's exchange pane
does — it searches the contest's list of valid exchanges, not the log.
CheckCandidate.Call is now Text, because an exchange value is not a call.

The section-validating directives are read and passed over rather than acted
on. Acting on them means holding N1MM's section lists and its rules about
retired sections, and getting that wrong throws away good data.

Running it caught what the unit tests could not: the exchange was filled and
scored but the boxes on screen still looked empty, because nothing resynced
them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 18:15:41 +00:00

3.9 KiB

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 no cwdaemon, no radio keyed.
WinkeyerSender nothing no test at all, and no WinKeyer. The host-mode open sequence is from the WinKeyer datasheet.

The Cabrillo output has not been put in front of a contest sponsor's robot.

Half-built

Alternating CQ (SO2R). Needs to know when the keyer has finished sending. MessageSender is fire-and-forget: it has SendAsync, AbortAsync and SetSpeedAsync and no completion signal. Both cwdaemon and a WinKeyer can report completion, so the interface has to grow first. Timing it from the length of the text would be a guess that goes wrong exactly when the contest is busy.

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.

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.

QTC handling for WAE. Not started. WAE logs will not be complete without it.

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.

Band-plan colouring of the bandmap scale. N1MM colours the scale by CW, digital and phone segment. The segments differ by ITU region and there is no band-plan table here, so it is left out rather than guessed.

Contest coverage. Eight contests 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 not in the registry fails with the contest name, which is the right answer but it is still a wall.

The Available Mults and Qs window. Not started.

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.

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.