You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+29Lines changed: 29 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,35 @@
2
2
3
3
All notable changes to pyCluster should be recorded here.
4
4
5
+
## 1.0.5 - 2026-04-04
6
+
7
+
### Changed
8
+
9
+
- cleaned up the telnet command surface so operator responses are more readable and more consistent across `show/*`, `set/*`, `unset/*`, mail, route, protocol, and sysop command families
10
+
- moved a large share of operator-facing telnet text and selected operational log strings into `config/strings.toml` so wording tweaks no longer require code edits or restarts
11
+
- public web 24-hour spot stats, history, and leaderboard views now use real time-window queries instead of capped recent-spot snapshots
12
+
- the System Operator web console now shows country-data status more clearly, including left-nav pills for loaded `CTY.DAT` and `wpxloc.raw` version/date metadata
13
+
- deploy tooling now treats country-data refresh as `CTY.DAT` plus `wpxloc.raw`, and `deploy/doctor.sh` checks the public stats endpoint on the correct listener
14
+
- upgrades and deploys are now documented around `config/pycluster.local.toml` so host-local settings stay out of the tracked base config
15
+
16
+
### Added
17
+
18
+
-`wpxloc.raw` parsing and fallback lookup support for heading, web spot enrichment, and suspicious-prefix review cues
19
+
- email OTP MFA recovery paths in both the System Console and telnet via `sysop/clearmfa <call>`
20
+
- stale-user cleanup controls in the System Operator web console
21
+
- richer cluster-mail observability in telnet and the System Operator web console
22
+
23
+
### Fixed
24
+
25
+
-`set/name`, `set/qth`, `set/qra`, `set/location`, `set/home`, and related `show/*` commands now persist and read back consistently
26
+
-`set/location` now takes precedence over `set/qra`, while `set/qra` backfills location only when location is unset
27
+
-`show/heading`, `who`, `show/links`, `show/route`, and related peer/operator views now report more accurate live state
28
+
- telnet login handling no longer misbehaves when negotiation bytes are present before the callsign
29
+
- public web frequency formatting and 24-hour summary counts now match real backend data better
30
+
- live spot ingest now uses permissive plausibility checks instead of an over-strict homemade world callsign validator, while suspicious cases are flagged for review instead of being dropped
31
+
- cluster mail routing handles offline peers and undeliverable paths more cleanly, with clearer operator readback
32
+
-`show/wm7d` CQ-zone handling for calls like `N9JR` now prefers better lookup data instead of stale prefix-only assumptions
33
+
5
34
## 1.0.4 - 2026-03-30
6
35
7
36
- fixed the cumulative upgrade path so older `1.0.0` databases with the real `user_prefs(pref_key, pref_value)` schema now upgrade cleanly through `deploy/upgrade.sh`
Copy file name to clipboardExpand all lines: README.md
+32-4Lines changed: 32 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,7 +16,7 @@ It keeps the familiar telnet-style operator experience, adds a public web UI and
16
16
17
17
- Telnet-first DX cluster workflow with modernized operator output
18
18
- Public web UI for users and a dedicated web console for system operators
19
-
- SQLite persistence, CTY refresh tooling, and fail2ban integration
19
+
- SQLite persistence, CTY and wpxloc refresh tooling, and fail2ban integration
20
20
- Validated deploy path across modern Debian, Ubuntu, Fedora, and Red Hat-family Linux
21
21
22
22
## 🧭 What pyCluster Does
@@ -29,7 +29,7 @@ It keeps the familiar telnet-style operator experience, adds a public web UI and
29
29
- ships with deployment tooling for systemd-based Linux hosts
30
30
- integrates with fail2ban for login-abuse protection
31
31
- supports age-based cleanup for spots, messages, and bulletins
32
-
- maintains local CTY data with optional automatic refresh from Country Files
32
+
- maintains local `CTY.DAT` and `wpxloc.raw` data with optional automatic refresh from Country Files
33
33
34
34
## Where pyCluster Improves on Legacy Cluster Software
35
35
@@ -67,6 +67,15 @@ In practice that means:
67
67
68
68
pyCluster is usable today as a single-node cluster with web and telnet access, persistent storage, peer linking, and operator controls. The codebase is still evolving, but it is no longer just a prototype.
69
69
70
+
Current release: `1.0.5`
71
+
72
+
Recent highlights in `1.0.5`:
73
+
74
+
- cleaner and more human-readable telnet/operator command replies
75
+
-`CTY.DAT` and `wpxloc.raw` visibility plus refresh support
76
+
- public web 24-hour spot stats that reflect real time windows
77
+
- more complete MFA recovery, cluster-mail observability, and config-override documentation
78
+
70
79
## 🖥️ Interfaces
71
80
72
81
### Telnet
@@ -131,6 +140,8 @@ pip install -e .
131
140
pycluster --config ./config/pycluster.toml serve
132
141
```
133
142
143
+
Operator-local overrides can live in `./config/pycluster.local.toml`. When present, pyCluster loads `pycluster.toml` first and then layers `pycluster.local.toml` on top. Keep the tracked base file close to upstream and put host-specific changes in the local override file.
144
+
134
145
Deploy on a supported Linux host:
135
146
136
147
```bash
@@ -149,6 +160,7 @@ Typical deployed layout:
149
160
/home/pycluster/pyCluster/ # live runtime tree
150
161
├── config/
151
162
│ ├── pycluster.toml # active node configuration
163
+
│ ├── pycluster.local.toml # optional untracked local override
152
164
│ └── strings.toml # hot-reloadable operator text
153
165
├── data/
154
166
│ └── pycluster.db # live SQLite database
@@ -168,6 +180,8 @@ sudo ./deploy/upgrade.sh
168
180
sudo ./deploy/doctor.sh
169
181
```
170
182
183
+
For git-based upgrades, move site-local changes out of the tracked `config/pycluster.toml` file and into `config/pycluster.local.toml` first. That keeps `git pull --ff-only` clean while preserving local runtime settings.
184
+
171
185
For upgrades from `1.0.0` through `1.0.3`, `deploy/upgrade.sh` performs the required cumulative state conversion for older installs:
172
186
173
187
- hashes any legacy plaintext passwords still stored in `user_prefs`
@@ -273,19 +287,33 @@ Auth-failure log retention:
273
287
274
288
- shipped logrotate policy for `/var/log/pycluster/authfail.log`
275
289
276
-
## 🌍 CTY Data
290
+
## 🌍 Country Data
277
291
278
-
pyCluster ships with a bundled `cty.dat`, and install/upgrade perform a best-effort refresh from Country Files.
292
+
pyCluster supports both `CTY.DAT` and `wpxloc.raw`.
293
+
294
+
That data is used for:
295
+
296
+
- DXCC/entity and zone enrichment
297
+
- heading and lookup fallbacks
298
+
- operational review cues for unusual spot prefixes
299
+
- sysop visibility into currently loaded country-data versions
300
+
301
+
pyCluster ships with bundled country-data fixtures, and install/upgrade can perform a best-effort refresh from Country Files.
0 commit comments