Skip to content

0.6.0 — support Logos node 0.2.1 (breaking release) - #23

Open
ibeezhan wants to merge 2 commits into
logosnode:mainfrom
ibeezhan:feat/node-0.2.1-v2
Open

0.6.0 — support Logos node 0.2.1 (breaking release)#23
ibeezhan wants to merge 2 commits into
logosnode:mainfrom
ibeezhan:feat/node-0.2.1-v2

Conversation

@ibeezhan

@ibeezhan ibeezhan commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

This is the 0.2.1 support update, opened against the official repo. (Earlier drafts lived on my fork ibeezhan/logosup as PRs #1/#2; #1 was built on a stale pre-0.2.0 base and reimplemented work already landed upstream in 0.5.0/0.5.1, so it was discarded.) This PR is the true incremental 0.2.0 → 0.2.1 delta on top of current main (4a600dc).

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:

  1. --ibd flag removed — replaced by opt-out --skip-ibd (IBD from -p peers is now default). Passing --ibd hard-fails. Dropped from both init-config and migrate-from-0.1.2 invocations.
  2. init-config now refuses to run when keystore.yaml exists (Keystore file exists. Use 'update' command.) — every 0.2.0 operator has one, so the old wipe-and-init reset flow would die. New docker_update_config() uses the node's update-config subcommand, which regenerates the config from the existing keystore and preserves wallet key identities across the reset (verified: keystore untouched, same known_keys, new 0.2.1 config fields present). cmd_reset now picks between migrate-from-0.1.2 / update-config / fresh init-config.
  3. /cryptarchia/info schema changed"mode":{"Started":"Bootstrapping"} became scalar "state":"Bootstrapping" plus top-level "phase" (InitialBlockDownloadProlongedBootstrapPeriod). Without this fix, status/start show Mode: (unknown) and the Grafana consensus-mode panel goes dark. Updated cmd_status, cmd_start, and the monitoring exporter (old shapes kept as fallbacks).
  4. 0.2.1 added to LOGOS_BREAKING_VERSIONS so logosup update diverts to the migration flow.
  5. Bootstrap peers verified unchanged — same four fleet multiaddrs as 0.2.0 (comment updated in network.yml).
  6. VERSION 0.5.1 → 0.6.0.

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/info fields (n_peers/n_connections still present).

Drive-by fix (separate commit): the 0.5.1 status diagnostics used grep -c ... || echo 0, but grep -c prints 0 itself and only exits 1 — so any firing diagnostic corrupted counts to "0\n0" and sprayed (( : syntax error into 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 build of the 0.2.1 image (aarch64 asset downloads and unpacks; same URL pattern) ✅
  • bash -n + shellcheck on all touched scripts (no new warnings vs main baseline), py_compile on the exporter ✅
  • init-config (fresh) and update-config (from a real 0.2.0-generated config + keystore) both produce configs that pass --check-config
  • Booted both configs against the live 0.2.1 testnet: node enters Bootstrapping/InitialBlockDownload, IBD pulls blocks (height 0 → 17k+ in ~1 min), then ProlongedBootstrapPeriod, 46 connected peers ✅
  • logosup status against the running 0.2.1 container: Mode/phase/slot/height, network info, wallet keys with roles, clean diagnostics ✅
  • Not tested: full sync to Online (operator will finish on the Raspberry Pi), monitoring stack end-to-end.

🤖 Generated with Claude Code

ibeezhan and others added 2 commits August 11, 2026 14:01
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant