Skip to content

fix(devnet): offer Terminal module in config editor and migrate legacy ckb.toml - #468

Merged
RetricSu merged 2 commits into
developfrom
agent/claude-bear/6b0ed58e
Jul 24, 2026
Merged

fix(devnet): offer Terminal module in config editor and migrate legacy ckb.toml#468
RetricSu merged 2 commits into
developfrom
agent/claude-bear/6b0ed58e

Conversation

@humble-little-bear

Copy link
Copy Markdown
Collaborator

Problem

Reported in RET-277: on develop, the devnet config editor still doesn't offer the terminal option added for ckb-tui, and offckb status shows empty dashboards even after clearing local data.

Two root causes, neither of them stale data:

  1. The "Edit RPC Modules" dialog is hardcoded. FIXED_ARRAY_SPECS in src/tui/devnet-config-metadata.ts still listed the pre-ckb-tui module set, so Terminal (and RichIndexer) 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 added Terminal to the bundled ckb.toml and the embedded reference template. No amount of data clearing changes a hardcoded list.
  2. Existing devnet configs never receive template updates. initChainIfNeeded only copies ckb/devnet/ckb.toml when config files are missing. Chains initialized before fix(status): enable Terminal RPC module and TCP streaming for devnet #463 keep a ckb.toml without the Terminal RPC module and with tcp_listen_address commented out forever — and clearing chain data/ doesn't touch config files — so offckb status (ckb-tui) keeps showing N/A metrics and empty mempool/logs panels.

Fix

  • Add Terminal and RichIndexer to the rpc.modules fixed-array spec so the config editor offers them (with a comment to keep the list in sync with the template).
  • Run a comment-preserving text migration from initChainIfNeeded (covers offckb node, daemon mode, and offckb create) that upgrades a legacy devnet ckb.toml in place:
    • appends "Terminal" to rpc.modules (single-line and hand-formatted multi-line arrays both handled; custom module subsets preserved);
    • enables rpc.tcp_listen_address by uncommenting the stock line, or inserts tcp_listen_address = "127.0.0.1:18114" when absent; an explicitly configured address is left untouched.
  • The migration is a no-op on up-to-date configs, preserves comments/formatting, and never breaks node startup — unparseable files are skipped with a debug log. When it changes something it logs an info line telling the user to restart a running node.

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-set tcp_listen_address, unparseable and missing files.
  • tests/devnet-config-metadata.test.ts (new): guards the TUI option list against drifting from the bundled template's rpc.modules again.
  • Full suite: 28 suites, 219 passed / 7 skipped; tsc --noEmit and eslint clean.

🤖 Generated with Claude Code

…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>
@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 1b111ed3-f606-40a9-b148-527a039868bf

📥 Commits

Reviewing files that changed from the base of the PR and between e9c19b1 and 62ec9e8.

📒 Files selected for processing (2)
  • src/node/init-chain.ts
  • tests/init-chain.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/node/init-chain.ts

📝 Walkthrough

Summary by CodeRabbit

  • Bug Fixes

    • Updated the devnet configuration editor to include the Terminal and RichIndexer RPC modules.
    • Automatically migrates legacy devnet ckb.toml to enable Terminal RPC and set tcp_listen_address to 127.0.0.1:18114 when needed.
    • Preserves existing module selections and any custom comments/formatting during migration.
    • Migration is non-blocking and will not prevent node startup on errors.
  • Documentation

    • Added release notes for the legacy devnet configuration migration and that a node restart is required to apply changes.

Walkthrough

Adds Terminal and RichIndexer to devnet RPC configuration metadata, introduces non-fatal migration of legacy ckb.toml files during initialization, preserves existing formatting and settings, and adds tests plus a patch changeset.

Changes

Devnet RPC configuration

Layer / File(s) Summary
RPC module metadata and coverage
src/tui/devnet-config-metadata.ts, tests/devnet-config-metadata.test.ts
The fixed-array metadata includes RichIndexer and Terminal, with tests verifying required modules and bundled-template consistency.
Legacy configuration migration
src/node/init-chain.ts
initChainIfNeeded invokes a non-fatal migration that parses RPC settings, preserves TOML formatting and comments, adds Terminal, and enables or inserts tcp_listen_address.
Migration validation and release entry
tests/init-chain.test.ts, .changeset/tidy-ravens-serve.md
Migration tests cover existing settings, array formats, comments, no-op behavior, missing files, and invalid configurations; a patch changeset documents the fixes.

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
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly names the two main changes: the config editor module update and legacy ckb.toml migration.
Description check ✅ Passed The description directly explains the same devnet config editor and legacy migration changes described in the changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 45b0e98 and e9c19b1.

📒 Files selected for processing (5)
  • .changeset/tidy-ravens-serve.md
  • src/node/init-chain.ts
  • src/tui/devnet-config-metadata.ts
  • tests/devnet-config-metadata.test.ts
  • tests/init-chain.test.ts

Comment thread src/node/init-chain.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>
@RetricSu
RetricSu merged commit 00bfe6c into develop Jul 24, 2026
7 checks passed
@RetricSu
RetricSu deleted the agent/claude-bear/6b0ed58e branch July 24, 2026 11:36
RetricSu added a commit that referenced this pull request Jul 24, 2026
* 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)

---------

Co-authored-by: humble-little-bear <retric@ckba.build>
@coderabbitai coderabbitai Bot mentioned this pull request Jul 25, 2026
RetricSu added a commit that referenced this pull request Jul 26, 2026
* 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>
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.

2 participants