build(release): bump 6.1.8 -> 6.1.9 for staking-selfheal fix

Headline change: f69f087 fix(staking): carve out caught-up nodes from
IBD gate so chain can self-heal. Closes the v6.1.8 deadlock where
IsStakingSafe() refused to stake whenever IBD was true and IBD flipped
true after 24h of no blocks.

Also includes the secondary commits since v6.1.7:
- 41e3898 + 64556dc: CLI flag handling
- 7a71904 (already in v6.1.8): revision bump
- 8598cfa (PR #26): trusted snapshot publisher rotation
- 935d1d5 + 6116cff + c68a8cb: consensus/IBD hardening
- 540c889: test-linux-unit as blocking CI gate (PR #30)
- db46792: keystore + V5 soft-cap test coverage (PR #29)
- 9a50ab3: script_fuzz + EvalScript stress tests (PR #27)
- 898292f: Bootstrap:: linkage restoration
- e6ae48d + 14edbc2 + ...: release/deployment pipeline hardening (PR #32)
- 3a4f271 + 2de9a9d: transaction_deserialize_fuzz wiring + docs

The CHANGELOG notes v6.1.8's known deadlock and the
staking=1/forcestaking=1 escape hatch for any operator still on v6.1.8.

Codex verdict: see the underlying B-grade commits f69f087 and 3a4f271.
This commit is contained in:
Sami Ahmed
2026-07-31 21:08:36 -07:00
parent 2de9a9da20
commit bbef38e1a8
2 changed files with 46 additions and 1 deletions
+45
View File
@@ -5,6 +5,51 @@ All notable changes to Triangles (TRI) are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [6.1.9] - 2026-07-31
### Fixed
- **Staking deadlock on idle networks.** `IsStakingSafe()` refused to
stake whenever `IsInitialBlockDownload()` was true, and `IBD` flipped
true whenever the chain tip was older than 24h. After 24h of no blocks,
every node simultaneously refused to stake and the chain deadlocked.
The `staking: true` flag in `getstakinginfo` was misleading — it only
reflected a single search in the brief window after a restart. Narrowed
the gate to "refuse only when IBD is true AND local height is behind
the peer/checkpoint estimate" (`f69f087`). A node at the peer median
now clears the gate and keeps staking through idle periods, so the
chain self-heals. Genuinely-behind nodes still hold off. Block
validation, reorg rules, and checkpoint rules are unchanged. The
`-forcestaking` bootstrap escape hatch still works on nodes caught
up to the checkpoint.
### Changed
- CLI: `-conf=` (empty value) now falls back to the default config
path instead of erroring out (`41e3898`).
- CLI: `-conf` / `-datadir` / `-rpcuser` / `-rpcpassword` are honored
in the documented order, with clearer error messages on bad input
(`64556dc`).
- Build: reproducible build + signed release pipeline (PR #26 chain).
## [6.1.8] - 2026-07-17
### Changed
- Bootstrap: RPC-driven trusted snapshot publisher rotation (PR #26).
Operators can rotate the snapshot publisher via RPC instead of
hard-coding it in the binary.
- Consensus: removed local-finality, fixed `getheaders` fork recovery
(`935d1d5`).
- Consensus: fail-closed reorg guard when the startup checkpoint
pointer is null (`6116cff`).
- IBD: allow `getblocks`/`getheaders` on OneShot peers during IBD
(`c68a8cb`).
- Build: bump revision 7 → 8.
### ⚠️ Known issue
- v6.1.8 introduced a staking deadlock on idle networks via the
`IsStakingSafe()` gate. Operators on v6.1.8 should set
`staking=1` and `forcestaking=1` in `triangles.conf` and restart
to unstick the chain. v6.1.9 fixes the root cause.
## [6.1.7] - 2026-07-08
### Changed
+1 -1
View File
@@ -8,7 +8,7 @@
// These need to be macros, as version.cpp's and triangles-qt.rc's voodoo requires it
#define CLIENT_VERSION_MAJOR 6
#define CLIENT_VERSION_MINOR 1
#define CLIENT_VERSION_REVISION 8
#define CLIENT_VERSION_REVISION 9
#define CLIENT_VERSION_BUILD 0
// Converts the parameter X to a string after macro replacement on X has been performed.