Add the core, contest, storage and format layers
Frequencies, bands, modes, callsigns, grid squares and the country file live in Nonemm.Core. Nonemm.Contests holds the scoring engine and CQ WW and CQ WPX. Nonemm.Storage writes N1MM's DXLOG schema, and Nonemm.Formats writes Cabrillo 3.0 and reads and writes ADIF. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
48
OBJECTIVE.md
Normal file
48
OBJECTIVE.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# Objective
|
||||
|
||||
Nonemm is a contest logger for amateur radio: a from-scratch reimplementation of N1MM Logger+ in C#, running on Linux and Windows.
|
||||
|
||||
This is what the finished program has to do.
|
||||
|
||||
## Scope
|
||||
|
||||
Contest rules, log formats and the database schema are written from their published definitions and are fully compatible with N1MM.
|
||||
|
||||
## Requirements
|
||||
|
||||
**N1MM file compatibility.** The log database is N1MM's `.s3db`, in N1MM's schema. User-defined
|
||||
contests are `.udc` files. Macros and message files are N1MM's. A log written by either program
|
||||
opens in the other. Columns N1MM caches and we compute — points, multiplier flags — get written
|
||||
anyway so N1MM is happy, and are ignored on read. New storage extends N1MM's tables instead of
|
||||
changing them. Keep the store behind an interface; it may be a hosted database later, but the
|
||||
file on disk is N1MM's format.
|
||||
|
||||
**No N1MM code in the repo.** N1MM decompiles, and it's the reference when the published rules
|
||||
are unclear or easy to get wrong. Check against it in a scratchpad; what lands in the repo is
|
||||
written from the published rule.
|
||||
|
||||
**Where N1MM is wrong, don't copy the bug.** Follow the published rule and add a test that says
|
||||
what N1MM returns and why we don't.
|
||||
|
||||
**Work without the optional inputs.** The country file and callsign database aren't bundled;
|
||||
they're downloaded from the same places N1MM gets them, and validated before anything is
|
||||
replaced. A failed download leaves the old file alone. Without a country file, country- and
|
||||
continent-scored contests lose accuracy but still run. With no radio connected, frequency and
|
||||
mode stay wherever they were last typed.
|
||||
|
||||
**Leave out what can't be done properly.** A check-window column with no data behind it stays
|
||||
out rather than showing a guess.
|
||||
|
||||
**Logic is testable without a UI.** What space does, when a dupe fires, what a QSO scores — that
|
||||
lives in a project with no UI framework reference and is covered by unit tests.
|
||||
|
||||
**Reimplement most of N1MM's features.** It's fine if some are left out for simplicity, but the main
|
||||
core must be preserved -- it's a fully ready-to-use networked (multi-station) contest logger, with
|
||||
all the features necessary for efficient contest operation -- dupe checks, partial matching, telnet cluster,
|
||||
band view, no wasted space.
|
||||
|
||||
## Done
|
||||
|
||||
An operator works a contest end to end — dupes and mults flagged as they type, bandmap and
|
||||
cluster feeding stations, radio and log following each other — exports a Cabrillo the sponsor
|
||||
accepts, and can open the log in N1MM.
|
||||
Reference in New Issue
Block a user