fix: a test button that cannot fail is worse than no button

TestClublog checked that three fields were non-empty and returned "Ready — CALL
via EMAIL". Nothing was ever sent to Club Log, so a wrong password produced the
identical green message. It now signs in, through getadif.php because that is
the one authenticated endpoint that cannot change anything: a test must never
put a record into someone's log. A future start year keeps it from downloading
130 000 QSOs to prove a password, and a rejected login answers 403 before any
body arrives.

LoTW is two credentials doing two jobs and the button reported only the first.
Uploads go through TQSL signed by the certificate — the website password is
never involved — so a wrong one breaks nothing until the day confirmations are
downloaded, by which time nobody connects the two events. Both are now checked
and, more importantly, reported separately.

Also: the detector still refused 12 and 10 m while the PSK Reporter feed was
already subscribed to them, so those decodes were fetched and thrown away. The
rule was never "HF is out", it is "is an opening here an event" — 20 m being
open is the normal state of the band, 10 m opening is not.
This commit is contained in:
2026-08-11 13:16:09 +02:00
parent 9c33feecfa
commit 0550ecdac3
4 changed files with 108 additions and 11 deletions
+10 -3
View File
@@ -66,9 +66,16 @@ func DefaultConfig() Config {
}
}
// Bands watched. HF is deliberately absent: an "opening" on 20 m is the normal
// state of the band and announcing it would be noise.
var watched = map[string]bool{"6m": true, "4m": true, "2m": true}
// Bands watched.
//
// 10 and 12 m are in, and they are HF. The line is not "HF versus VHF" but
// "is an opening here an event": 20 m being open is the normal state of the
// band and saying so is noise, while 10 and 12 m spend most of a solar cycle
// shut and open sharply when they go — which is exactly what an operator wants
// interrupting them for. They also carry the Es that reaches 6 m, often first.
//
// Anything below 12 m stays out for the reason above.
var watched = map[string]bool{"12m": true, "10m": true, "6m": true, "4m": true, "2m": true}
// Watched reports whether a band is one the detector looks at.
func Watched(band string) bool { return watched[strings.ToLower(strings.TrimSpace(band))] }