feat(bulk): mode, submode and RST are repair fields, so allow them

They were excluded as "per-QSO", alongside callsign and date. That rule confused
two different things: bulk edit is not for describing QSOs, it is for REPAIRING
a batch of them — an import that mapped every contact to SSB, an ADIF that
carried no MODE at all. Refusing because a hundred rows should not normally
share a value left the operator editing a hundred rows by hand.

Setting the mode CLEARS the submode. A submode belongs to the mode it was
recorded under; left behind it contradicts the new one, and "FT8 with a submode
of USB" is not a thing — worse, the submode is what most ADIF readers believe.

Band is still refused on its own, and that half of the rule stands. It travels
with the frequency through BulkSetFrequency, which writes the pair: a band
contradicting its own frequency is invalid ADIF, and every export would carry
the contradiction out into the world. Callsign and date stay out too — they
identify the contact rather than describe it.
This commit is contained in:
2026-08-11 19:36:56 +02:00
parent 3b90ef6b7a
commit 102097c5c4
5 changed files with 82 additions and 12 deletions
+11
View File
@@ -91,6 +91,17 @@ const FIELDS: FieldDef[] = [
{ id: 'iota', label: 'bulk.fIota', group: 'Contacted station', kind: 'text', upper: true },
{ id: 'sig', label: 'bulk.fSig', group: 'Contacted station', kind: 'text' },
{ id: 'sig_info', label: 'bulk.fSigInfo', group: 'Contacted station', kind: 'text' },
// The contact itself — repair fields, not description fields. An import that
// mapped every QSO to SSB, or an ADIF with no MODE at all, is fixed here
// instead of one row at a time.
//
// Band is deliberately absent: it travels with the frequency below, because a
// band contradicting its own frequency is invalid ADIF and every export would
// carry the contradiction.
{ id: 'mode', label: 'bulk.fMode', group: 'The contact', kind: 'text', upper: true },
{ id: 'submode', label: 'bulk.fSubmode', group: 'The contact', kind: 'text', upper: true },
{ id: 'rst_sent', label: 'bulk.fRstSent', group: 'The contact', kind: 'text' },
{ id: 'rst_rcvd', label: 'bulk.fRstRcvd', group: 'The contact', kind: 'text' },
// Misc
// Frequency (MHz) — sets freq_hz AND recomputes band. Main use: fixing a batch
// logged on a stale/default frequency after CAT dropped.
File diff suppressed because one or more lines are too long