v3.1.8
Luadch v3.1.8
Modernisation-complete patch release. Closes the #80 ratelimit v2 and #147 ADC protocol coverage tracks. After this release the 3.1.x line is stable, security-fixes-only; new feature work moves to the 3.2.x line on master. See CLAUDE.md §8 for the full release-line policy.
⚠️ Before upgrading
Back up your cfg/, scripts/lang/, scripts/data/, scripts/cfg/, certs/, and secrets/ directories. This release adds new keys to several lang files (additive, see below) and introduces several new optional cfg keys for the ratelimit / RDEX / PING extensions.
tar -czf "luadch-backup-$(date +%F).tar.gz" cfg scripts certs secretsLang file changes
Operators with stock bundled lang files get the new keys automatically via the Docker autosync from #118 or cmake --install build for source builds. Operators with custom translations have a small one-time additive merge:
| File | New key |
|---|---|
cmd_shutdown.lang.{en,de} |
msg_hub_disabled |
cmd_restart.lang.{en,de} |
msg_hub_disabled |
Missing keys fall back to the hardcoded English string ("Hub is shutting down." / "Hub is restarting.") so the hub stays functional.
Cfg additions
All new keys are additive with defaults that preserve v3.1.7 behaviour. No cfg/cfg.tbl migration is required.
Ratelimit v2 (#80)
-- Per-bucket rate / burst, each independently tunable
ratelimit_user_pm_rate = 5, ratelimit_user_pm_burst = 10,
ratelimit_user_inf_rate = 2, ratelimit_user_inf_burst = 20,
ratelimit_user_ctm_rate = 2, ratelimit_user_ctm_burst = 30,
-- Per-userlevel tier overlay - any subset of fields per tier,
-- missing fields fall back to the global scalars above
ratelimit_tiers = { },
ratelimit_tier_for_level = { },Worked example for the tier overlay is in docs/SCRIPTS.md. At defaults (empty tier tables) behaviour is identical to v3.1.7.
ADC protocol coverage (#147)
-- ADC-EXT RDEX rich redirect
hub_redirect_protocols = 3, -- bitmask (ADC=1, ADCS=2, NEODC=4)
hub_redirect_alternatives = { }, -- list of alternative URLs as RX fields
hub_redirect_permanent = false, -- PT1 flag on redirects
-- ADC-EXT PING min-hubs federation policy (also from #146)
min_user_hubs = 0, -- min OTHER hubs (federation requirement)
min_reg_hubs = 0,
min_op_hubs = 0,Highlights
Ratelimit v2 (#80, 4 PRs + 2 review followups)
The hub's per-user rate-limit machinery split BMSG / DMSG / EMSG / BINF / DCTM / DRCM into five independent buckets. Each bucket has its own rate + burst cfg keys, and all five become optionally tier-mappable per user level via the new ratelimit_tiers + ratelimit_tier_for_level overlay. Op-level bypass preserved. Worked tier-overlay example in docs/SCRIPTS.md.
A strict-positive validator rejects rate = 0 / burst = -1 / NaN at cfg-load time, with a clear out_error log entry; the previous silent-mute failure mode under operator typo is gone.
ADC protocol coverage (#147, 8 PRs)
Eight protocol-completeness items shipped as small, additive PRs:
- NATT relay (DNAT / DRNT, ADC-EXT 3.9) - hub-relay-only NAT-traversal for passive-passive transfers.
- RDEX rich redirect -
IINF.RPadvertisement +IQUI.RX/PTNPs on every kick / redirect. - PING completeness -
SS/SFaggregate share + file count,HEemail,MU/MR/MOmin-hubs federation policy now emitted in the ADPING reply. Hublist scrapers see the full spec-defined data. - STA emission codes -
cmd_shutdown/cmd_restartemitISTA 212("Hub disabled") before close so clients distinguish a graceful shutdown from a network glitch.cmd_banswitches from incorrect 230 / 231 to spec-correctISTA 232for finite-TL temporary bans. - FRES routing - feature-filtered search-result delivery (F-class) now dispatched.
- HQUI from client honored - client-initiated quit triggers a clean close in any state instead of
ISTA 125unknown-command. - ECTM / ERCM dispatch - modern E-class CTM / RCM variants accepted (was: silently dropped).
- Passthrough extensions documented -
TYPE/ONID/DFAV/FEEDand friends are explicitly transparent passthrough (no SUP advertisement needed, hub relays the commands without inspection).
Per the audit the hub is now at ~90% ADC + ADC-EXT coverage for hub-relevant features. Remaining 10% is BLOM (Tier 2, demand-driven) and HBRI / ZLIF (Tier 3, deferred to 3.2.x).
Operator documentation
- New
docs/SCRIPTS.mdlists every bundled plugin (commands + cfg keys) with a full rate-limit configuration guide. - README cleaned up - dropped the "what's different in this fork" section now that the modernisation programme is done; added a release-line status table near the top.
CLAUDE.md§8 documents the post-3.1.8 maintenance-branch model.
Bugfixes
user.sendstatypo (#151) -pairs(nil)crash on callers that omitted the optional flags arg, present since the API was added.user.redirectMS<quitmsg>was emitted raw; multi-word reasons produced malformed ADC. Now escaped.- Smoke battery's PM / CTM / RCM / NATT burst tests previously short-circuited at the target-lookup before reaching the rate-limit gate; they now self-target and exercise the actual code paths.
Notes
- No breaking changes at defaults. Every new cfg key has a default that preserves v3.1.7 behaviour. Operators upgrading without touching cfg get the new features behind unchanged knobs.
- ERES no longer accepted by the parser. ADC 5.3.6 defines only D and F classes for RES; the parser context tightened to
[FD]as part of FRES routing. No known client emits ERES; exotic NMDC bridges that did would now see parse-time rejection instead of forward-as-E-class. - 3.1.x maintenance from this release on. New feature work goes to
master(3.2.x line); security fixes for 3.1.x go to arelease/3.1.xbranch created from this tag. SeeCLAUDE.md§8.
Downloads
| File | Platform |
|---|---|
luadch-v3.1.8-linux-x86_64.tar.gz |
Linux glibc x86_64 |
luadch-v3.1.8-windows-x86_64.zip |
Windows x86_64 (MinGW UCRT64) |
ghcr.io/luadch-ng/luadch:v3.1.8 |
Container, linux/amd64 + linux/arm64 |
Migration from v3.1.7
Drop the new install tree in place of the old one (or git pull && cmake --build build && cmake --install build from source). Container users get both the bundled *.lua sync and the lang add-only sync on the next docker compose up -d after pull.
No cfg/cfg.tbl migration is needed - all new keys are additive with defaults. To opt into the tier-overlay rate-limit, see the worked example in docs/SCRIPTS.md Rate-limit configuration.
Build from source
git clone --branch v3.1.8 https://github.com/luadch-ng/luadch.git
cd luadch
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
cmake --install build