0.6.0 — support Logos node 0.2.1 (breaking release) - #23
Open
ibeezhan wants to merge 2 commits into
Open
Conversation
Node 0.2.1 (published 2026-08-05) is another genesis reset: the live
testnet chain restarted at ~09:01 UTC that day (verified empirically —
a synced node's slot count × 1s slot duration lands exactly on the
release publish time), and the chainsync protocol ID is versioned per
release (/logos-blockchain-testnet-0.2.1/chainsync/1.0.0), so 0.2.0
nodes cannot serve or validate the new chain.
The actual 0.2.0 → 0.2.1 delta for logosup:
- releases.sh: add 0.2.1 to LOGOS_BREAKING_VERSIONS so `logosup update`
diverts to the migration flow.
- docker.sh: drop `--ibd` from init-config / migrate-from-0.1.2 —
0.2.1 replaced the opt-in `--ibd` flag with opt-out `--skip-ibd`
(IBD from -p peers is now the default); passing `--ibd` hard-fails.
- docker.sh: new docker_update_config() — 0.2.1's init-config refuses
to run when keystore.yaml exists ("Keystore file exists. Use `update`
command."), so the old wipe-and-init reset flow dies for every 0.2.0
operator. Use the node's `update-config` to regenerate the config
from the existing keystore, which also keeps wallet key identities
stable across the reset (funds still don't carry over).
- cmd_reset.sh: three-way strategy — migrate-from-0.1.2 for 0.1.x
configs, update-config when a keystore exists (0.2.0+ installs),
fresh init-config otherwise; back up + clear a stray keystore in the
fresh path so init-config can't hard-fail.
- cmd_status.sh / cmd_start.sh / monitoring exporter: 0.2.1 renamed the
consensus field — /cryptarchia/info now returns a scalar
"state":"Bootstrapping" plus a top-level "phase" (e.g.
InitialBlockDownload) instead of 0.2.0's "mode":{"Started":...}.
Parse the new shape first, keep the old fallbacks; status shows the
phase while syncing.
- network.yml: bootstrap peers verified unchanged from 0.2.0 (same
fleet multiaddrs in the 0.2.1 release notes; a fresh node connects
and syncs against them).
Not changed on purpose: asset naming (still
logos-blockchain-node-linux-{arch}-{version}.tar.gz with bundled
circuits), ports (blend's udp/3400 existed in 0.2.0 too), faucet and
dashboard URLs, /network/info parsing (n_peers/n_connections still
present in 0.2.1).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
grep -c prints the count (including "0") and merely exits 1 when it is zero, so the `|| echo 0` fallback produced a two-line "0\n0" value and every (( count == 0 )) check spewed "syntax error in expression" into the status output whenever any single diagnostic fired. Found while testing 0.2.1: stale 0.2.0 peers trigger the protocol-mismatch warning, which made the corruption visible on every status call. Use `|| true`. Also parse 0.2.1's "state"/"phase" consensus fields (see previous commit) in the status Consensus section. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The real 0.2.0 → 0.2.1 delta
0.2.1 is another genesis reset. The release notes don't say so explicitly, but it's verified empirically: a freshly synced 0.2.1 node reports slot 532,277 at 1 s/slot, which back-computes to a genesis of 2026-08-05 09:01 UTC — four minutes after the release was published (08:57 UTC). The chainsync protocol ID is also versioned per release (
/logos-blockchain-testnet-0.2.1/chainsync/1.0.0), so 0.2.0 and 0.2.1 nodes can't sync from each other.What actually changed for logosup:
--ibdflag removed — replaced by opt-out--skip-ibd(IBD from-ppeers is now default). Passing--ibdhard-fails. Dropped from bothinit-configandmigrate-from-0.1.2invocations.init-confignow refuses to run whenkeystore.yamlexists (Keystore file exists. Use 'update' command.) — every 0.2.0 operator has one, so the old wipe-and-init reset flow would die. Newdocker_update_config()uses the node'supdate-configsubcommand, which regenerates the config from the existing keystore and preserves wallet key identities across the reset (verified: keystore untouched, sameknown_keys, new 0.2.1 config fields present).cmd_resetnow picks between migrate-from-0.1.2 / update-config / fresh init-config./cryptarchia/infoschema changed —"mode":{"Started":"Bootstrapping"}became scalar"state":"Bootstrapping"plus top-level"phase"(InitialBlockDownload→ProlongedBootstrapPeriod). Without this fix, status/start showMode: (unknown)and the Grafana consensus-mode panel goes dark. Updatedcmd_status,cmd_start, and the monitoring exporter (old shapes kept as fallbacks).0.2.1added toLOGOS_BREAKING_VERSIONSsologosup updatediverts to the migration flow.network.yml).Explicitly not changed (verified identical at 0.2.1): release asset naming (
logos-blockchain-node-linux-{arch}-{version}.tar.gz, circuits still bundled), ports (blend udp/3400 existed in 0.2.0), faucet/dashboard URLs,/network/infofields (n_peers/n_connectionsstill present).Drive-by fix (separate commit): the 0.5.1 status diagnostics used
grep -c ... || echo 0, butgrep -cprints0itself and only exits 1 — so any firing diagnostic corrupted counts to"0\n0"and sprayed(( : syntax errorinto status output. Visible on every 0.2.1 status call because stale 0.2.0 peers trigger the protocol-mismatch warning.Testing (macOS arm64, Docker)
docker buildof the 0.2.1 image (aarch64 asset downloads and unpacks; same URL pattern) ✅bash -n+shellcheckon all touched scripts (no new warnings vs main baseline),py_compileon the exporter ✅init-config(fresh) andupdate-config(from a real 0.2.0-generated config + keystore) both produce configs that pass--check-config✅Bootstrapping/InitialBlockDownload, IBD pulls blocks (height 0 → 17k+ in ~1 min), thenProlongedBootstrapPeriod, 46 connected peers ✅logosup statusagainst the running 0.2.1 container: Mode/phase/slot/height, network info, wallet keys with roles, clean diagnostics ✅Online(operator will finish on the Raspberry Pi), monitoring stack end-to-end.🤖 Generated with Claude Code