Clear the stale items out of the docs
The scoring audit says which of its findings are fixed and which are still open, its line numbers point at where the code is now, and the order of what to do next is what is left rather than what is done. In unfinished.md: Send All was listed as missing 500 lines above the section that describes it, three TypeAhead methods had been renamed, the station number clash is guarded and the paragraph saying it is not was next to the one saying it is, and the registry holds twenty-six contests rather than twenty-five. The claim that every instance of the station's logs scores contact for contact is replaced by what the replay of 2026-09-06 actually found. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0157i7PiZyqBkquxS9A6FTdQ
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
Scoring and N1MM compatibility review, 2026-09-06. Code reviewed: `6e24e00`.
|
Scoring and N1MM compatibility review, 2026-09-06. Code reviewed: `6e24e00`.
|
||||||
|
|
||||||
**Nonemm does not yet match N1MM Logger+ well enough to claim general contest compatibility.** Many ordinary QSOs agree, including large WPX and WAE logs, but there are confirmed failures in entry completion, excluded QSOs, exports, and several contest rules. This review changes documentation only.
|
**Nonemm does not yet match N1MM Logger+ well enough to claim general contest compatibility.** Many ordinary QSOs agree, including large WPX and WAE logs, but there are confirmed failures in entry completion, excluded QSOs, exports, and several contest rules. This review changed documentation only.
|
||||||
|
|
||||||
|
**Status on 2026-09-10.** Findings 1, 2, 3, 4 and 7 are fixed, each with tests, and finding 14 turned out to be what N1MM does. Findings 5, 6, 8, 9, 10, 11, 12 and 13 are open. The fix notes sit under the findings themselves; the numbering and the original text are kept so a finding can be looked up by its number.
|
||||||
|
|
||||||
The review covered the shared scoring engine, the 26 built-in contest families, contest-name resolution, selected UDC implementation paths, entry completion, score display, storage updates and Cabrillo generation. Specific behavior was compared with the local decompiled N1MM reference and published sponsor rules. N1MM was not executed. This is not a certification of every feature, contest category, UDC option or historical rule version.
|
The review covered the shared scoring engine, the 26 built-in contest families, contest-name resolution, selected UDC implementation paths, entry completion, score display, storage updates and Cabrillo generation. Specific behavior was compared with the local decompiled N1MM reference and published sponsor rules. N1MM was not executed. This is not a certification of every feature, contest category, UDC option or historical rule version.
|
||||||
|
|
||||||
@@ -40,27 +42,27 @@ Notable examples: all six WAE RTTY instances matched every compared field. Field
|
|||||||
|
|
||||||
5. **P1 — BARTG HF and Sprint are merged into one incompatible definition.** [BartgSprint.cs](../src/Nonemm.Contests/Rules/BartgSprint.cs) uses report, serial and time, and countries/areas per band, but advertises `BARTGRTTYS` and `BARTG-SPRINT`. [N1mmContestNames.cs](../src/Nonemm.Contests/N1mmContestNames.cs) also maps `BARTGSRTTY` to this class. N1MM has separate `CBARTGSpring` and `CBARTGSprint` classes. The January Sprint exchanges a serial only and counts countries/areas once across bands, as specified in the [BARTG Sprint rules](https://bartg.org.uk/wp-content/uploads/2025/05/bartg-sprint-rules-2025-v3.pdf). Split the definitions and preserve each one's identity, exchange, multiplier scope and export format. Agreement on the supplied March HF log does not validate Sprint support.
|
5. **P1 — BARTG HF and Sprint are merged into one incompatible definition.** [BartgSprint.cs](../src/Nonemm.Contests/Rules/BartgSprint.cs) uses report, serial and time, and countries/areas per band, but advertises `BARTGRTTYS` and `BARTG-SPRINT`. [N1mmContestNames.cs](../src/Nonemm.Contests/N1mmContestNames.cs) also maps `BARTGSRTTY` to this class. N1MM has separate `CBARTGSpring` and `CBARTGSprint` classes. The January Sprint exchanges a serial only and counts countries/areas once across bands, as specified in the [BARTG Sprint rules](https://bartg.org.uk/wp-content/uploads/2025/05/bartg-sprint-rules-2025-v3.pdf). Split the definitions and preserve each one's identity, exchange, multiplier scope and export format. Agreement on the supplied March HF log does not validate Sprint support.
|
||||||
|
|
||||||
6. **P2 — ARRL 10M uses the wrong state multiplier list.** [Arrl10Metre.cs](../src/Nonemm.Contests/Rules/Arrl10Metre.cs), line 49, uses the ARRL DX list. A Mexican `JAL` exchange became country multiplier `XE`; another Mexican state would therefore not add its own multiplier. The code also lacks the contest's maritime ITU-region multiplier treatment, and its send-state decision omits Alaska and Hawaii. Use the actual 10M rules and [ARRL's 32 Mexican multipliers](https://contests.arrl.org/contestmultipliers.php?a=xe), rather than sharing the ARRL DX eligibility list.
|
6. **P2 — ARRL 10M uses the wrong state multiplier list.** [Arrl10Metre.cs](../src/Nonemm.Contests/Rules/Arrl10Metre.cs), line 69, uses the ARRL DX list. A Mexican `JAL` exchange became country multiplier `XE`; another Mexican state would therefore not add its own multiplier. The code also lacks the contest's maritime ITU-region multiplier treatment, and its send-state decision omits Alaska and Hawaii. Use the actual 10M rules and [ARRL's 32 Mexican multipliers](https://contests.arrl.org/contestmultipliers.php?a=xe), rather than sharing the ARRL DX eligibility list.
|
||||||
|
|
||||||
7. **P2 — Oceania undercounts 15M and 10M.** [OceaniaDx.cs](../src/Nonemm.Contests/Rules/OceaniaDx.cs), `PointsOn`, returns 1 for both bands. The local N1MM `COceania.ComputePoints` returns 2 and 3 respectively, also documented by the [WIA contest scoring table](https://www.wia.org.au/members/contests/oceania/). Both incorrect values were reproduced. The four supplied Oceania contacts do not exercise these bands, so their matching points do not cover this defect.
|
7. **P2 — Oceania undercounts 15M and 10M.** [OceaniaDx.cs](../src/Nonemm.Contests/Rules/OceaniaDx.cs), `PointsOn`, returns 1 for both bands. The local N1MM `COceania.ComputePoints` returns 2 and 3 respectively, also documented by the [WIA contest scoring table](https://www.wia.org.au/members/contests/oceania/). Both incorrect values were reproduced. The four supplied Oceania contacts do not exercise these bands, so their matching points do not cover this defect.
|
||||||
|
|
||||||
**Fixed 2026-09-10.** The whole table is written out as N1MM writes it — 20, 10, 5, 1, 2, 3 — and it ends where N1MM's ends, so a band that is not in the contest scores nothing rather than one point.
|
**Fixed 2026-09-10.** The whole table is written out as N1MM writes it — 20, 10, 5, 1, 2, 3 — and it ends where N1MM's ends, so a band that is not in the contest scores nothing rather than one point.
|
||||||
|
|
||||||
8. **P2 — New SARTG and BARTG contacts miss call-area multipliers.** [SartgRtty.cs](../src/Nonemm.Contests/Rules/SartgRtty.cs), line 35, and [BartgSprint.cs](../src/Nonemm.Contests/Rules/BartgSprint.cs), line 49, obtain call areas from `Qso.Section`. Neither entry definition includes that field, and `OperatingPosition.BuildQso` does not derive it from the call. A new SARTG `K1ABC` QSO returned only country `K`. N1MM's `CSARTGRTTY.MultSqlString2` fills an empty section from its call-area lookup for K, VE, JA and VK. Imported rows with cached sections can pass comparison while newly logged contacts fail. Add call-area derivation and test both fresh and imported contacts.
|
8. **P2 — New SARTG and BARTG contacts miss call-area multipliers.** [SartgRtty.cs](../src/Nonemm.Contests/Rules/SartgRtty.cs), line 45, and [BartgSprint.cs](../src/Nonemm.Contests/Rules/BartgSprint.cs), line 59, obtain call areas from `Qso.Section`. Neither entry definition includes that field, and `OperatingPosition.BuildQso` does not derive it from the call. A new SARTG `K1ABC` QSO returned only country `K`. N1MM's `CSARTGRTTY.MultSqlString2` fills an empty section from its call-area lookup for K, VE, JA and VK. Imported rows with cached sections can pass comparison while newly logged contacts fail. Add call-area derivation and test both fresh and imported contacts.
|
||||||
|
|
||||||
9. **P2 — IOTA cannot score an island entrant correctly.** [Iota.cs](../src/Nonemm.Contests/Rules/Iota.cs), line 40, depends only on the received reference. It gives 2 for a world station and 15 for any island. An island entrant should receive 5 for a world station or its own island group, and 15 for another group. The station's own reference needs to participate in scoring. This limitation is acknowledged in a comment, but that comment misses the island-to-world case. See the [2026 RSGB rules](https://www.rsgbcc.org/hf/rules/2026/riota.shtml).
|
9. **P2 — IOTA cannot score an island entrant correctly.** [Iota.cs](../src/Nonemm.Contests/Rules/Iota.cs), line 42, depends only on the received reference. It gives 2 for a world station and 15 for any island. An island entrant should receive 5 for a world station or its own island group, and 15 for another group. The station's own reference needs to participate in scoring. This limitation is acknowledged in a comment, but that comment misses the island-to-world case. See the [2026 RSGB rules](https://www.rsgbcc.org/hf/rules/2026/riota.shtml).
|
||||||
|
|
||||||
10. **P2 — IARU zones can be counted twice through formatting.** [IaruHf.cs](../src/Nonemm.Contests/Rules/IaruHf.cs), line 50, uses the exchange text as the multiplier value. Working zone `8`, then `08`, awarded two zone multipliers in the reproduction. N1MM's `CIaru.MultSqlString` formats numeric zones consistently. Parse and normalize zones before producing multiplier keys; validate zone versus HQ exchanges separately. This finding does not explain all historical IARU point differences above.
|
10. **P2 — IARU zones can be counted twice through formatting.** [IaruHf.cs](../src/Nonemm.Contests/Rules/IaruHf.cs), line 59, uses the exchange text as the multiplier value. Working zone `8`, then `08`, awarded two zone multipliers in the reproduction. N1MM's `CIaru.MultSqlString` formats numeric zones consistently. Parse and normalize zones before producing multiplier keys; validate zone versus HQ exchanges separately. This finding does not explain all historical IARU point differences above.
|
||||||
|
|
||||||
11. **P2 — CQ 160 maritime mobiles receive incorrect points and countries.** [CqOneSixty.cs](../src/Nonemm.Contests/Rules/CqOneSixty.cs), line 54, has no maritime exception. Through the shared country fallback, JA1XYZ/MM from Germany scored 10 and could claim Japan. The [CQ 160 rules](https://cq160.com/rules/index.htm) specify 5 points and no multiplier for a maritime mobile. Similar country fallback behavior exists in CQ WW; review it against each contest's rules rather than changing the common fallback indiscriminately. Some existing tests deliberately assert N1MM-like fallback behavior; the project objective explicitly says to follow published rules where N1MM is wrong.
|
11. **P2 — CQ 160 maritime mobiles receive incorrect points and countries.** [CqOneSixty.cs](../src/Nonemm.Contests/Rules/CqOneSixty.cs), line 62, has no maritime exception. Through the shared country fallback, JA1XYZ/MM from Germany scored 10 and could claim Japan. The [CQ 160 rules](https://cq160.com/rules/index.htm) specify 5 points and no multiplier for a maritime mobile. Similar country fallback behavior exists in CQ WW; review it against each contest's rules rather than changing the common fallback indiscriminately. Some existing tests deliberately assert N1MM-like fallback behavior; the project objective explicitly says to follow published rules where N1MM is wrong.
|
||||||
|
|
||||||
12. **P2 — Field Day is an unconditional approximation of one rules variant.** [FieldDayRegionOne.cs](../src/Nonemm.Contests/Rules/FieldDayRegionOne.cs), line 32, always uses portable=5, EU/AF fixed=2, other fixed=3. N1MM's `CFdReg1.ComputePoints` branches on the contest variant and the entrant's country; its generic fallback is 1. For the supplied Slovak FDREG1 instance, all 41 stored one-point QSOs were changed, raising the points to 181. Continent alone also cannot determine IARU Region 1. Identify the intended national/contest variant and its published rules before replacing these tables; there is no single safe universal table here.
|
12. **P2 — Field Day is an unconditional approximation of one rules variant.** [FieldDayRegionOne.cs](../src/Nonemm.Contests/Rules/FieldDayRegionOne.cs), line 40, always uses portable=5, EU/AF fixed=2, other fixed=3. N1MM's `CFdReg1.ComputePoints` branches on the contest variant and the entrant's country; its generic fallback is 1. For the supplied Slovak FDREG1 instance, all 41 stored one-point QSOs were changed, raising the points to 181. Continent alone also cannot determine IARU Region 1. Identify the intended national/contest variant and its published rules before replacing these tables; there is no single safe universal table here.
|
||||||
|
|
||||||
13. **P2 — Rescoring after edits does not persist all changed cached scores.** [ContestSession.cs](../src/Nonemm.Session/ContestSession.cs), lines 158 and 240, rebuilds the in-memory log after deletion or replacement but does not update every affected stored row. Deleting the first of two Japanese CQ WW contacts made the second contact a multiplier in memory while its stored flag remained false. Incoming network inserts have the same cache consistency concern. Explicit `Rescore` repairs these columns. N1MM itself documents manual rescoring after some edits, so this is principally a limitation of automatic interoperability: reopening the file in N1MM without a rescore can show stale totals. See [N1MM's log-window instructions](https://n1mm.hamdocs.com/manual-windows/log-window/).
|
13. **P2 — Rescoring after edits does not persist all changed cached scores.** [ContestSession.cs](../src/Nonemm.Session/ContestSession.cs), `Delete` and `DeleteFromNetwork`, rebuilds the in-memory log after deletion or replacement but does not update every affected stored row. Deleting the first of two Japanese CQ WW contacts made the second contact a multiplier in memory while its stored flag remained false. Incoming network inserts have the same cache consistency concern. Explicit `Rescore` repairs these columns. N1MM itself documents manual rescoring after some edits, so this is principally a limitation of automatic interoperability: reopening the file in N1MM without a rescore can show stale totals. See [N1MM's log-window instructions](https://n1mm.hamdocs.com/manual-windows/log-window/).
|
||||||
|
|
||||||
14. **P2 — The score window mixes unweighted and weighted multiplier counts.** [ScoreWindow.axaml.cs](../src/Nonemm.App/Windows/ScoreWindow.axaml.cs) sums Boolean flags for each band but uses `Tally.TotalMultipliers` for the total. A single WAE multiplier on 80M appears as 1 in the band row and contributes 4 to the total. QTC rows are also counted in the QSO column even though `Contest.IsContact` identifies them as traffic. Display raw multipliers, weights and QTC counts consistently. This does not by itself change WAE's correctly weighted total score.
|
14. **P2 — The score window mixes unweighted and weighted multiplier counts.** [ScoreWindow.axaml.cs](../src/Nonemm.App/Windows/ScoreWindow.axaml.cs) sums Boolean flags for each band but uses `Tally.TotalMultipliers` for the total. A single WAE multiplier on 80M appears as 1 in the band row and contributes 4 to the total. QTC rows are also counted in the QSO column even though `Contest.IsContact` identifies them as traffic. Display raw multipliers, weights and QTC counts consistently. This does not by itself change WAE's correctly weighted total score.
|
||||||
|
|
||||||
**Not a fault; this is what N1MM does.** `ScoreRow.AddContact` adds the weight of a WAE multiplier, four on 80M and so on, to the band row and to the total alike, and `ScoreTally.AddMultiplier` has done the same since `d4d0375`. N1MM counts QTC rows as Qs too — `ValidQs` counts every row that reaches the score — and keeps them readable by splitting each WAE band into a row per kind under `Q/QTC`, which the score window here does as well. Taking the QTC rows out of the QSO column would leave N1MM's numbers behind.
|
**Not a fault; this is what N1MM does.** `ScoreTally.AddMultiplier` adds the weight of a WAE multiplier, four on 80M and so on, and the band row and the total are both a `ScoreTally`, so both have counted it that way since `d4d0375`. N1MM counts QTC rows as Qs too — `ValidQs` counts every row that reaches the score — and keeps them readable by splitting each WAE band into a row per kind under `Q/QTC`, which the score window here does as well. Taking the QTC rows out of the QSO column would leave N1MM's numbers behind.
|
||||||
|
|
||||||
**Coverage and remaining limits.** The 26 built-in families are CQ WW, CQ WPX, ARRL DX, IARU, Sweepstakes, WAE, ARRL RTTY Roundup, NAQP, OK/OM DX CW, YOTA, IOTA, EU DX, CQ 160, Mexico RTTY, REF, BARTG, ARRL 10M, Russian DX RTTY, RDAC, YO DX HF, Oceania, Region 1 Field Day, SARTG, All Asian and general logging. CW/SSB/RTTY variants share classes where the registry supplies a mode. This is a subset of [N1MM's supported contests](https://n1mm.hamdocs.com/manual-supported/contests-list/).
|
**Coverage and remaining limits.** The 26 built-in families are CQ WW, CQ WPX, ARRL DX, IARU, Sweepstakes, WAE, ARRL RTTY Roundup, NAQP, OK/OM DX CW, YOTA, IOTA, EU DX, CQ 160, Mexico RTTY, REF, BARTG, ARRL 10M, Russian DX RTTY, RDAC, YO DX HF, Oceania, Region 1 Field Day, SARTG, All Asian and general logging. CW/SSB/RTTY variants share classes where the registry supplies a mode. This is a subset of [N1MM's supported contests](https://n1mm.hamdocs.com/manual-supported/contests-list/).
|
||||||
|
|
||||||
@@ -73,6 +75,6 @@ The following require further work before claiming full compatibility:
|
|||||||
- There is no shared contest-band eligibility model. `ShowsWarcBands` controls presentation, not scoring. Several rules award points outside their contest bands; WAE has an explicit band check. Separate band validity from N1MM's permissive frequency-to-band mapping.
|
- There is no shared contest-band eligibility model. `ShowsWarcBands` controls presentation, not scoring. Several rules award points outside their contest bands; WAE has an explicit band check. Separate band validity from N1MM's permissive frequency-to-band mapping.
|
||||||
- The core score types use `int`, including products. Very large scores or UDC bonuses can overflow. Establish supported bounds and use a wider score type if needed.
|
- The core score types use `int`, including products. Very large scores or UDC bonuses can overflow. Establish supported bounds and use a wider score type if needed.
|
||||||
- The historical YOTA, EU DX, CQ WW and IARU differences need individual row analysis with the original station setup and country/history files. Do not change rules merely to force agreement with potentially stale caches.
|
- The historical YOTA, EU DX, CQ WW and IARU differences need individual row analysis with the original station setup and country/history files. Do not change rules merely to force agreement with potentially stale caches.
|
||||||
- Rig, keying, digital, cluster and network transport behavior was not certified by this scoring review. Existing limitations are documented in [unfinished.md](unfinished.md), which also contains stale or contradictory status statements.
|
- Rig, keying, digital, cluster and network transport behavior was not certified by this scoring review. Existing limitations are documented in [unfinished.md](unfinished.md).
|
||||||
|
|
||||||
Fix entry completion and the three serial exporters first, then excluded-contact scoring and the contest-specific P1 findings. Add targeted regression tests from these reproductions, including fresh entry through `OperatingPosition`, followed by database and Cabrillo checks. For each contest, cover both entrant sides and every scoring band before describing it as compatible.
|
Of what is left, finding 5 comes first: BARTG HF and Sprint are two contests under one name, so a Sprint log is scored by the wrong rules and a log started here is written with the other contest's name. Then findings 8, 10 and 11, which are wrong scores in ordinary contacts, then 6, 9 and 12, which need the published multiplier lists and rule variants read out first, then 13. Add targeted regression tests from these reproductions, including fresh entry through `OperatingPosition`, followed by database and Cabrillo checks. For each contest, cover both entrant sides and every scoring band before describing it as compatible.
|
||||||
|
|||||||
+27
-16
@@ -1,7 +1,7 @@
|
|||||||
# What is not finished, and what has not been tested
|
# What is not finished, and what has not been tested
|
||||||
|
|
||||||
Two separate lists. A feature can be finished and untested, or half-built and
|
Two separate lists. A feature can be finished and untested, or half-built and
|
||||||
exercised every day. Written 2026-08-27, updated 2026-08-31.
|
exercised every day. Written 2026-08-27, updated 2026-09-11.
|
||||||
|
|
||||||
## Never run against the real thing
|
## Never run against the real thing
|
||||||
|
|
||||||
@@ -34,10 +34,9 @@ through the engine on a digital mode. Left out: the waterfall, the spectrum and
|
|||||||
the XY scope, which the engine reports and nothing draws; more than one receive
|
the XY scope, which the engine reports and nothing draws; more than one receive
|
||||||
pane, which is MMVARI's multi-channel decoding rather than MMTTY's; N1MM's
|
pane, which is MMVARI's multi-channel decoding rather than MMTTY's; N1MM's
|
||||||
AutoTRXUpdate, which offsets the frequency the entry window and the log record
|
AutoTRXUpdate, which offsets the frequency the entry window and the log record
|
||||||
rather than only the one in the title bar; and N1MM's Send All, which keys a
|
rather than only the one in the title bar. The other interfaces N1MM offers —
|
||||||
whole QTC series at once. The other interfaces N1MM offers — fldigi, MMVARI, the
|
fldigi, MMVARI, the hardware TNCs — are not here either, though `DigitalEngine`
|
||||||
hardware TNCs — are not here either, though `DigitalEngine` is the place to add
|
is the place to add them.
|
||||||
them.
|
|
||||||
|
|
||||||
The receive pane has been driven with a stand-in bridge that prints prepared
|
The receive pane has been driven with a stand-in bridge that prints prepared
|
||||||
text, which is how the printing, the colouring, the Letters/Figs box and the
|
text, which is how the printing, the colouring, the Letters/Figs box and the
|
||||||
@@ -99,10 +98,11 @@ the third, the macro buttons (`:21553`). The sleep is not the mechanism — a fu
|
|||||||
buffer is — and as a wait it is both too long on a long message and wrong on a
|
buffer is — and as a wait it is both too long on a long message and wrong on a
|
||||||
short one: `TU` is 330 ms of air at 45.45 baud, so 400 ms of sleeping puts the
|
short one: `TU` is 330 ms of air at 45.45 baud, so 400 ms of sleeping puts the
|
||||||
stop after the buffer has emptied, which is where it does nothing. This program
|
stop after the buffer has emptied, which is where it does nothing. This program
|
||||||
asks instead. `TypeAhead.WhenHoldingAsync` sends the stop as soon as the count
|
asks instead. `DigitalEngineSender.WaitUntilHoldingAsync` sends the stop as soon
|
||||||
says the engine holds something, and gives up after N1MM's 400 ms.
|
as the count says the engine holds something, and gives up after N1MM's 400 ms,
|
||||||
|
which is `StopDelay`.
|
||||||
|
|
||||||
So `{RX}` stops feeding: `TypeAhead.TakePending` hands over everything that is
|
So `{RX}` stops feeding: `TypeAhead.FlushAsync` hands over everything that is
|
||||||
left in one piece, and the stop goes out 400 ms behind it. Nothing after that
|
left in one piece, and the stop goes out 400 ms behind it. Nothing after that
|
||||||
can be rewritten, which is what `{RX}` means. The feeder still paces the middle
|
can be rewritten, which is what `{RX}` means. The feeder still paces the middle
|
||||||
of a message, which is what makes type-ahead work; only the ending is N1MM's.
|
of a message, which is what makes type-ahead work; only the ending is N1MM's.
|
||||||
@@ -146,9 +146,9 @@ And what the engine holds is counted across feeders rather than reset when one
|
|||||||
starts: a feeder that started after a flush forgot a whole message the engine
|
starts: a feeder that started after a flush forgot a whole message the engine
|
||||||
was still holding, called the transmission over and put the key down in the
|
was still holding, called the transmission over and put the key down in the
|
||||||
middle of it.
|
middle of it.
|
||||||
`TypeAhead.WhenEmptyAsync` waits for `Aired` first, which is two things at
|
`DigitalEngineSender.WaitUntilAiredAsync` waits for `Aired` first, which is two
|
||||||
once: the engine's own count at 0, and the clock saying the characters the
|
things at once: the engine's own count at 0, and the clock saying the characters
|
||||||
engine held have had time to go out. `StopPatience` caps the wait for an engine
|
the engine held have had time to go out. `StopPatience` caps the wait for an engine
|
||||||
that never reports itself empty.
|
that never reports itself empty.
|
||||||
|
|
||||||
One character time is held after that and no more, because the count reaching 0
|
One character time is held after that and no more, because the count reaching 0
|
||||||
@@ -605,7 +605,7 @@ decodes and transmits through MMTTY over the Wine bridge. What is not here:
|
|||||||
fldigi, MMVARI, 2Tone and the hardware TNCs, all of which N1MM drives.
|
fldigi, MMVARI, 2Tone and the hardware TNCs, all of which N1MM drives.
|
||||||
`DigitalEngine` is the place to add them.
|
`DigitalEngine` is the place to add them.
|
||||||
|
|
||||||
**Contest coverage.** Twenty-five families are built in, plus whatever `.udc` files
|
**Contest coverage.** Twenty-six families are built in, plus whatever `.udc` files
|
||||||
are in the user-defined folder. N1MM ships well over a hundred. Opening a log
|
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
|
from a contest that is in neither place fails with the contest name, which is
|
||||||
the right answer but it is still a wall.
|
the right answer but it is still a wall.
|
||||||
@@ -650,10 +650,18 @@ a county from OK and OM stations and a serial number from everyone else — and
|
|||||||
Ukrainian DX contest and the Russian DX RTTY contest ask their exchange the same
|
Ukrainian DX contest and the Russian DX RTTY contest ask their exchange the same
|
||||||
way, and are written in code for the same reason.
|
way, and are written in code for the same reason.
|
||||||
|
|
||||||
Every contest in the station's own logs can now be opened, and its 78 contest
|
Every contest in the station's own logs can now be opened. The replay of
|
||||||
instances score contact for contact as N1MM did apart from the cases below.
|
2026-09-06 read 62 of its instances with built-in rules, 55,415 contacts, and 45
|
||||||
|
of those instances scored contact for contact as N1MM did; 316 contacts differ
|
||||||
|
in points and 141 in a multiplier flag. The comparison is against the points and
|
||||||
|
flags N1MM left in the file, which may themselves be stale, so a difference is
|
||||||
|
something to look at rather than a fault. The counts and the row-by-row list are
|
||||||
|
in [scoring-audit-2026-09-06.md](scoring-audit-2026-09-06.md) and
|
||||||
|
[scoring-audit-history.csv](scoring-audit-history.csv).
|
||||||
|
|
||||||
What still differs, and why:
|
What still differs, and why. The IARU, YOTA and CQ WW differences are not in
|
||||||
|
this list: they are in the audit, and each needs the station settings and the
|
||||||
|
country file of the day before it can be said what happened.
|
||||||
|
|
||||||
- **The EU DX Contest** is written from N1MM's own class. The station's logs
|
- **The EU DX Contest** is written from N1MM's own class. The station's logs
|
||||||
were made with the `EU_DXC.udc` file instead, which scores a contact inside
|
were made with the `EU_DXC.udc` file instead, which scores a contact inside
|
||||||
@@ -662,7 +670,10 @@ What still differs, and why:
|
|||||||
- **Field Day Region 1**: every contact in that log holds 1 point and no
|
- **Field Day Region 1**: every contact in that log holds 1 point and no
|
||||||
multiplier, which is not what N1MM's own class works out, so the log looks
|
multiplier, which is not what N1MM's own class works out, so the log looks
|
||||||
like it was never scored. The rules here follow the class: 5 points for a
|
like it was never scored. The rules here follow the class: 5 points for a
|
||||||
portable station, 2 for one in Region 1 at home and 3 from outside it.
|
portable station, 2 for one in Region 1 at home and 3 from outside it. That
|
||||||
|
table is applied to every running of the contest, which finding 12 of the
|
||||||
|
audit says is wrong: N1MM branches on the running and on the entrant's
|
||||||
|
country, and continent alone does not say whether a station is in Region 1.
|
||||||
- **SA 10 and OK/OM DX on SSB** are not written in code at all: both are
|
- **SA 10 and OK/OM DX on SSB** are not written in code at all: both are
|
||||||
published as `.udc` files, and with those files in the user-defined contests
|
published as `.udc` files, and with those files in the user-defined contests
|
||||||
folder the station's logs score to the contact. N1MM's OK/OM DX class is the CW running only and says so; the SSB
|
folder the station's logs score to the contact. N1MM's OK/OM DX class is the CW running only and says so; the SSB
|
||||||
|
|||||||
Reference in New Issue
Block a user