fix(devnet): offer Terminal module in config editor and migrate legacy ckb.toml - #468
Conversation
…y ckb.toml Two gaps kept the ckb-tui integration (#463) from reaching users: - The config editor's Edit RPC Modules dialog used a hardcoded option list that predated ckb-tui, so Terminal (and RichIndexer) could not be enabled from the TUI even though the bundled ckb.toml enables them. - initChainIfNeeded only copies the devnet template into fresh config folders, so chains initialized before #463 never received the Terminal RPC module or the enabled tcp_listen_address. Clearing chain data does not help — the config files persist — so offckb status dashboards stayed empty on develop. Add Terminal/RichIndexer to the rpc.modules fixed-array spec, and run a comment-preserving text migration on node start that appends Terminal to rpc.modules and enables tcp_listen_address (127.0.0.1:18114) in existing devnet configs. The migration is a no-op on current configs and never breaks node startup on unparseable files. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughSummary by CodeRabbit
WalkthroughAdds Terminal and RichIndexer to devnet RPC configuration metadata, introduces non-fatal migration of legacy ChangesDevnet RPC configuration
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant initChainIfNeeded
participant migrateLegacyDevnetRpcConfig
participant ckb.toml
participant toml
initChainIfNeeded->>migrateLegacyDevnetRpcConfig: migrate devnet configuration
migrateLegacyDevnetRpcConfig->>ckb.toml: read file
migrateLegacyDevnetRpcConfig->>toml: parse RPC settings
toml-->>migrateLegacyDevnetRpcConfig: return configuration state
migrateLegacyDevnetRpcConfig->>ckb.toml: write updated TOML
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/node/init-chain.ts`:
- Around line 97-100: Update the tcp_listen_address handling in the loop that
uses the commented-line match so only the stock loopback value is uncommented;
keep non-stock commented values unchanged and replace them with an enabled
127.0.0.1:18114 entry instead.
- Around line 97-100: Update the uncommenting logic around the
tcp_listen_address match to restore only the stock loopback default; leave
commented non-loopback addresses disabled unless explicitly opted in. Preserve
the existing indentation and return behavior for an approved default, while
preventing arbitrary matched values from being enabled.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 83d92093-049c-4ec4-8a5a-bfc414b73a90
📒 Files selected for processing (5)
.changeset/tidy-ravens-serve.mdsrc/node/init-chain.tssrc/tui/devnet-config-metadata.tstests/devnet-config-metadata.test.tstests/init-chain.test.ts
…gration Uncommenting any commented tcp_listen_address could turn a legacy '# tcp_listen_address = "0.0.0.0:18114"' into a public RPC listener. Now only the stock 127.0.0.1:18114 line is restored in place; non-stock commented values stay disabled and an enabled loopback entry is added instead. Addresses CodeRabbit review on #468. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(status): enable Terminal RPC module and TCP streaming for devnet (#463) (#464) * fix(status): enable Terminal RPC module and TCP streaming for devnet ckb-tui panels were always empty on devnet because the bundled devnet ckb.toml did not meet ckb-tui's two data requirements: - the Terminal RPC module (provides get_overview system metrics), which upstream CKB now enables by default, was missing from rpc.modules, so the overview dashboards showed N/A - rpc.tcp_listen_address was commented out and the status command never passed -t, so the mempool (new/rejected transactions) and logs dashboards had no subscription stream to read from Enable both in the devnet config template and have the status command read tcp_listen_address from the running node's ckb.toml and pass it to ckb-tui via -t (wildcard binds are dialed as localhost). Testnet and mainnet keep HTTP-only behavior since their proxied public RPCs expose no TCP stream. * chore: add patch changeset for status devnet fix * fix(devnet): bind RPC to loopback instead of 0.0.0.0 Address CodeRabbit review on PR #463: with the Terminal module enabled, binding the unauthenticated JSON-RPC to 0.0.0.0 exposes host system metrics (and the rest of the RPC surface) to any host on the network. Bind to 127.0.0.1 by default; all offckb-internal consumers (proxy, ckb-tui, miner, forks) already talk to 127.0.0.1:8114. Users who need remote access can edit rpc.listen_address via the config editor. * fix(devnet): align embedded reference template with devnet ckb.toml Add Terminal to rpc.modules and enable tcp_listen_address in the config editor's embedded template so configurations based on it also provide the metrics stream that offckb status needs. --------- Co-authored-by: claude-bear <noreply@anthropic.com> * build(deps): bump tar, brace-expansion, js-yaml, hono, fast-uri, body-parser for security advisories (#465) - tar ^7.5.3 -> ^7.5.19 (locked 7.5.21): fixes GHSA-23hp-3jrh-7fpw (critical), GHSA-8x88-c5mf-7j5w (high), GHSA-w8wr-v893-vjvp / GHSA-gvwx-54wh-qm9j (moderate) - brace-expansion -> 1.1.16 / 5.0.7 via overrides: fixes GHSA-3jxr-9vmj-r5cp (high) - js-yaml 4.x -> 4.3.0 via override: fixes GHSA-52cp-r559-cp3m (high) - hono -> 4.12.27 via override: fixes GHSA-xgm2-5f3f-mvvc, GHSA-hvrm-45r6-mjfj, GHSA-w62v-xxxg-mg59 (moderate, dev-only) - fast-uri -> 3.1.4 via override: fixes GHSA-v2hh-gcrm-f6hx, GHSA-4c8g-83qw-93j6 (high, dev-only) - body-parser 2.x -> 2.3.0 via override: fixes GHSA-v422-hmwv-36x6 (low, dev-only) Not fixed: elliptic GHSA-848j-6mx2-7j84 (no patched release published) and @hono/node-server GHSA-frvp-7c67-39w9 (fix requires breaking 1.x -> 2.x bump that violates @modelcontextprotocol/sdk's ^1.19.9 range; dev-only, Windows-only). Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix: rename mainnet-fork override flag and apply leftover 0.4.9 review fixes (#466) * fix: rename mainnet-fork override flag and apply leftover 0.4.9 review fixes - Rename --allow-mainnet-replay-risk to --allow-external-key-on-mainnet-fork (#460) - Enforce the Mainnet-fork replay guard in transfer-all, udt issue/destroy, and deploy, threading the fork boundary into input selection (#462) - Validate --tx-hash before it is used in debug cache paths - Only read the fork boundary after the spawned process binds the RPC port - Reject symlinked entries when copying fork source chain data - Accept extended xUDT type args (owner hash + flags/extension) - Per-kind UDT scan budgets, deep-cloned settings fallbacks, accurate config-set errors, preserved devnet-config error, execFile process lookup, aligned ckb-tui download timeouts, EXDEV-safe install, README TOC entry Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix: address PR #466 review comments - Keep --allow-mainnet-replay-risk as a hidden deprecated alias folded into --allow-external-key-on-mainnet-fork (with a deprecation warning) so 0.4.9 scripts keep working under a patch release - Treat lsof probe failures with stderr output as indeterminate (null) instead of "not listening"; only an empty-stderr exit is a genuine no-match, so permission errors fall back to the weaker genesis signal - Reject a symlinked data root before enumerating source chain data - Stage cross-device ckb-tui installs inside binDir and publish with an atomic rename, so concurrent installs never see a truncated binary Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix: bound the lsof port probe with a timeout A hung lsof would block execFileSync (and with it daemon startup) indefinitely, and its empty-stderr timeout error would be misread as a genuine no-match. Cap the probe at 5s and classify ETIMEDOUT as indeterminate (null) so the genesis fallback proceeds. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test: make lsof probe tests platform-independent isProcessListeningOnPort short-circuits to null on win32, so the lsof outcome-mapping tests failed on the Windows CI runner (mock never called). Force a unix platform for the lsof-probing cases, cover the win32 short-circuit explicitly, and pin the probe timeout to exactly 5000 ms per review feedback. --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * Merge pull request #468 from ckb-devrel/agent/claude-bear/6b0ed58e fix(devnet): offer Terminal module in config editor and migrate legacy ckb.toml * chore: version packages for 0.4.10 release (#469) * fix: default devnet log filter to info,ckb-script=debug (#471) A healthy devnet emits almost no warn-level logs, so with the previous default filter (warn,ckb-script=debug) the `offckb status` Logs panel stayed permanently empty and looked broken. Switch the devnet ckb.toml and ckb-miner.toml templates (and the config editor's embedded reference templates) to info,ckb-script=debug so the per-block log stream is visible while script debug output is preserved. Existing chains keep their current filter; edit [logger] filter in the devnet ckb.toml to opt in. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * chore: add new change log (#472) --------- Co-authored-by: humble-little-bear <retric@ckba.build> Co-authored-by: claude-bear <noreply@anthropic.com>
Problem
Reported in RET-277: on
develop, the devnet config editor still doesn't offer theterminaloption added for ckb-tui, andoffckb statusshows empty dashboards even after clearing local data.Two root causes, neither of them stale data:
FIXED_ARRAY_SPECSinsrc/tui/devnet-config-metadata.tsstill listed the pre-ckb-tui module set, soTerminal(andRichIndexer) could not be enabled from the config TUI — even though fix(status): enable Terminal RPC module and TCP streaming for devnet #463/fix(status): enable Terminal RPC module and TCP streaming for devnet #464 addedTerminalto the bundledckb.tomland the embedded reference template. No amount of data clearing changes a hardcoded list.initChainIfNeededonly copiesckb/devnet/ckb.tomlwhen config files are missing. Chains initialized before fix(status): enable Terminal RPC module and TCP streaming for devnet #463 keep ackb.tomlwithout theTerminalRPC module and withtcp_listen_addresscommented out forever — and clearing chaindata/doesn't touch config files — sooffckb status(ckb-tui) keeps showing N/A metrics and empty mempool/logs panels.Fix
TerminalandRichIndexerto therpc.modulesfixed-array spec so the config editor offers them (with a comment to keep the list in sync with the template).initChainIfNeeded(coversoffckb node, daemon mode, andoffckb create) that upgrades a legacy devnetckb.tomlin place:"Terminal"torpc.modules(single-line and hand-formatted multi-line arrays both handled; custom module subsets preserved);rpc.tcp_listen_addressby uncommenting the stock line, or insertstcp_listen_address = "127.0.0.1:18114"when absent; an explicitly configured address is left untouched.Tests
tests/init-chain.test.ts: 9 new cases — legacy config migration through both entry points, no-op on the current template, custom module subsets, multi-line arrays, inserted vs. uncommented vs. explicitly-settcp_listen_address, unparseable and missing files.tests/devnet-config-metadata.test.ts(new): guards the TUI option list against drifting from the bundled template'srpc.modulesagain.tsc --noEmitand eslint clean.🤖 Generated with Claude Code