Skip to content

refactor(ciphernode)!: own node profiles and paths - #2407

Open
neogiacomo wants to merge 1 commit into
refactor/2383-config-prover-ownerfrom
refactor/2383-node-config-owner
Open

neogiacomo wants to merge 1 commit into
refactor/2383-config-prover-ownerfrom
refactor/2383-node-config-owner

Conversation

@neogiacomo

@neogiacomo neogiacomo commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

What and why

Part of #2383, stacked on #2406 (refactor/2383-config-prover-owner), not main.
77 old/new review paths, counting both sides of renames; 75 rename-folded files.

  • e3-ciphernode-config in crates/ciphernode/config owns the actual node profile/scoping and path
    implementations, with native NodeConfig and UnscopedNodeConfig APIs. Move NodeDefinition,
    OsDirs, combine_unique, and PathsEngine with their implementations and tests.
  • Migrate every profile consumer directly. Keep the single CLI application loader and its
    discovery/YAML helpers/tests together in crates/cli/src/app_config.rs.
  • Move CLI-only ValidUrl inline into crates/cli/src/cli.rs, preserving URL normalization,
    command-line validation, and permissive remote conversion. Add focused and executable coverage.
  • Update Cargo/Docker inputs, owner docs, blueprint inventory/facts/evidence, and source references.

No compatibility facade, aliases, forwarding exports, or duplicate ownership. Remove the old
profile/path/validation modules and exports. e3-config still owns real network/bootstrap and
release-identity behavior; the next reviewed slice moves that behavior and deletes the package.
The complete remaining move exceeded the review budget, so this PR stops at the existing boundary.

Intentional Rust API break: import profile/path APIs from e3_ciphernode_config; rename
AppConfig/UnscopedAppConfig to NodeConfig/UnscopedNodeConfig. The ! does not mean an
operator reset/resync or a protocol change.

Stack refresh (2026-11-02): signed head 1896cdd95 is now based directly on #2406 head
e512acc22, inheriting current main and #2397's repository-check dependency-install repair.
The reviewed slice diff is byte-identical (git range-diff also reports an unchanged patch);
pushed with an exact expected-head lease and normal hooks. The refreshed
CI workflow passed at this
current head
; #2383 tracks the remaining reviewer/merge gates.

Verification

228 Rust tests passed; zero ignored in the selected runs:

  • cargo test --locked --offline -p e3-ciphernode-config -p e3-config — 22.
  • cargo test --locked --offline -p e3-cli -p e3-entrypoint -p e3-daemon-server --tests — 162.
  • cargo test --locked --offline -p e3-ciphernode-builder --lib — 33.
  • cargo test --locked --offline -p e3-evm --lib node_release:: — 4.
  • cargo test --locked --offline -p e3-net --test network_isolation — 2.
  • cargo test --locked --offline -p e3-tests --test layout_lock — 1, unchanged fixture.
  • cargo test --locked --offline -p e3-tests --test integration test_p2p_actor -- --test-threads=1 — 4.

Normal CLI builds pass before/after. 97 executable before/after cases have identical exit codes,
stdout and stderr
, covering discovery, named nodes, absolute/relative path overrides, precedence,
metadata, telemetry, numeric limits, backend rejection, EVM settings, and print-env output. New URL
tests and the extended daemon loopback case also passed against the old implementation before moving it.

Passed: pnpm lint, pnpm check:pnpm, pnpm check:license, pnpm check:repository,
pnpm check:links, pnpm check:bindings, pnpm check:addresses, pnpm check:crypto-config,
format/diff checks, eight blueprint documentation tests, blueprint rendering, and
bash crates/tests/docker/test-ciphernode-entrypoint.sh.

The path engine is byte-identical; node implementation and 45 caller files match after only native
names/imports and formatting. Locked metadata adds only the local settings owner; existing versions
and external identities stay unchanged. CLI/entrypoint production graphs add only that owner;
narrower runtime graphs drop obsolete directory/path/YAML edges. The canonical all-pair circuit
source hash remains 0184f95b66764893. Release manifest, network/release implementations, and exact
workspace version are unchanged.

Builds used E3_ZK_PROVER_SKIP_FIXTURE_BUILD=1 and COPYFILE_DISABLE=1; no assertions or production
proof guards were disabled. Harness feature unification is not production or real-proof qualification.

Known limits, not bypassed:

  • Strict blueprint checking retains baseline drift: 1 broken diagram reference, 46 moved diagram
    references, and 115 moved/broken facts (116 before). No missing owners, paths, or unmatched facts.
  • Existing unused-import warning in evm/indexer/src/repo.rs.
  • Parent-slice pnpm evm:build TypeScript errors were not rerun; no contracts, ABIs, TypeScript,
    generated artifacts, or release-manifest reader paths change here.
  • Refreshed CI passes, including its selected Docker-image, E3, prover, initializer, and OpenVM-guest
    jobs. Path-filtered jobs remain skipped; this is not exhaustive old-data/mixed-peer,
    deployed-verifier, OpenVM-worker, or rollout qualification.

Compatibility

Reviewed the actual diff against docs/architecture/design-principles.md,
docs/architecture/persistence-and-replay.md, docs/architecture/network-delivery.md, and
docs/architecture/upgrades.md, checking moved implementations, direct callers, metadata, runtime
guards, layout fixtures, and executable behavior. No actionable runtime/protocol finding was
identified. This is implementation review, not independent human approval or release qualification.

Configuration keys/defaults/precedence, backend rejection, operator identity/store paths, chain
ordering, and runtime policy are preserved. No durable/wire schema, event identity, replay/actor
ordering, committee/threshold/proof statement, cryptographic input, guest/verifier identity,
network ID, release-ID computation, or counter changes.

Proposed upgrade class: compatible node-binary replacement after normal qualification; keep both
counters. No migration, reset/resync, restamp, governance step, release, or rollout is performed.
Source rollback restores owners/imports/manifests together; operational rollback remains governed
by the existing release-controller/storage policy. Human review and qualification remain required.

@neogiacomo neogiacomo added the documentation Improvements or additions to documentation label Nov 2, 2026
@vercel

vercel Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
interfold-dashboard Ready Ready Preview Nov 2, 2026 4:55pm UTC
interfold-docs Ready Ready Preview Nov 2, 2026 4:55pm UTC

Request Review

@coderabbitai

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 29 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
Commits

Reviewing files that changed from the base of the PR and between e512acc and 1896cdd.

Files ignored due to path filters: 1
  • Cargo.lock is excluded by !**/*.lock
Files selected for processing: 74
  • Cargo.toml
  • crates/Dockerfile
  • crates/ciphernode/README.md
  • crates/ciphernode/config/AGENTS.md
  • crates/ciphernode/config/Cargo.toml
  • crates/ciphernode/config/README.md
  • crates/ciphernode/config/src/lib.rs
  • crates/ciphernode/config/src/node_config.rs
  • crates/ciphernode/config/src/paths_engine.rs
  • crates/ciphernode/daemon-server/Cargo.toml
  • crates/ciphernode/daemon-server/README.md
  • crates/ciphernode/daemon-server/src/lib.rs
  • crates/cli/Cargo.toml
  • crates/cli/README.md
  • crates/cli/src/app_config.rs
  • crates/cli/src/ciphernode/context.rs
  • crates/cli/src/ciphernode/mod.rs
  • crates/cli/src/ciphernode/setup.rs
  • crates/cli/src/cli.rs
  • crates/cli/src/config.rs
  • crates/cli/src/config_setup.rs
  • crates/cli/src/events.rs
  • crates/cli/src/faucet.rs
  • crates/cli/src/helpers/chain.rs
  • crates/cli/src/helpers/telemetry.rs
  • crates/cli/src/net.rs
  • crates/cli/src/net_get_peer_id.rs
  • crates/cli/src/node.rs
  • crates/cli/src/nodes.rs
  • crates/cli/src/nodes_daemon.rs
  • crates/cli/src/nodes_purge.rs
  • crates/cli/src/nodes_up.rs
  • crates/cli/src/noir.rs
  • crates/cli/src/password.rs
  • crates/cli/src/password_delete.rs
  • crates/cli/src/password_set.rs
  • crates/cli/src/print_env.rs
  • crates/cli/src/purge_all.rs
  • crates/cli/src/start.rs
  • crates/cli/src/wallet.rs
  • crates/cli/src/wallet_get.rs
  • crates/cli/src/wallet_set.rs
  • crates/cli/tests/cli_configuration.rs
  • crates/config/AGENTS.md
  • crates/config/Cargo.toml
  • crates/config/README.md
  • crates/config/src/lib.rs
  • crates/config/src/validation.rs
  • crates/entrypoint/Cargo.toml
  • crates/entrypoint/README.md
  • crates/entrypoint/src/helpers/datastore.rs
  • crates/entrypoint/src/net/get_peer_id.rs
  • crates/entrypoint/src/nodes/daemon.rs
  • crates/entrypoint/src/nodes/purge/facts.rs
  • crates/entrypoint/src/nodes/purge/mod.rs
  • crates/entrypoint/src/nodes/reset_data.rs
  • crates/entrypoint/src/nodes/up.rs
  • crates/entrypoint/src/password/delete.rs
  • crates/entrypoint/src/password/set.rs
  • crates/entrypoint/src/start/start.rs
  • crates/entrypoint/src/validate.rs
  • crates/entrypoint/src/wallet/get.rs
  • crates/entrypoint/src/wallet/set.rs
  • crates/entrypoint/tests/purge_guard.rs
  • crates/entrypoint/tests/reset_data_guard.rs
  • crates/entrypoint/tests/validate_older_schema.rs
  • crates/entrypoint/tests/validate_snapshot_errors.rs
  • crates/tests/docker/test-ciphernode-entrypoint.sh
  • docs/pages/reference/configuration.mdx
  • scripts/blueprint/facts/01-entry.json
  • scripts/blueprint/facts/08-events-data-config.json
  • scripts/blueprint/lib/inventory.mjs
  • scripts/blueprint/refs/A-system-apps.json
  • scripts/blueprint/refs/B-ciphernode.json
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Architecture change

From 1fe06d30b to 1896cdd95. Open this change in the blueprint: green is new, red is removed and yellow is changed, and a number on a box counts the changes inside it.

Before After New Removed
Crates 60 61 1
Crate dependencies 258 259 5 4
Every change (10)
  • New crate e3-ciphernode-config
  • e3-ciphernode-config now depends on e3-config
  • e3-ciphernode-config now depends on e3-evm-config
  • e3-cli now depends on e3-ciphernode-config
  • e3-daemon-server now depends on e3-ciphernode-config
  • e3-entrypoint now depends on e3-ciphernode-config
  • e3-cli no longer depends on e3-config
  • e3-config no longer depends on e3-fhe-params
  • e3-daemon-server no longer depends on e3-config
  • e3-entrypoint no longer depends on e3-config

Experimental. The page goes away when the pull request closes. scripts/blueprint/diff/README.md says how to turn it off or remove it.

Move node profile resolution and path derivation to e3-ciphernode-config
with native NodeConfig and UnscopedNodeConfig APIs. Migrate callers
directly and keep application loading and URL parsing in the CLI.

Preserve configuration keys, defaults, precedence, durable locations and
runtime behavior. Keep real network/release identity in e3-config until
the final ownership slice removes that package; add no forwarding facade.

Part of #2383; stacked on #2406.

BREAKING CHANGE: node profile and path imports now use
e3_ciphernode_config. AppConfig and UnscopedAppConfig are renamed to
NodeConfig and UnscopedNodeConfig, without old-import aliases. No operator
reset or resync is required.
@neogiacomo
neogiacomo force-pushed the refactor/2383-node-config-owner branch from e926dce to 1896cdd Compare November 2, 2026 16:54
neogiacomo added a commit that referenced this pull request Nov 2, 2026
Move network/bootstrap policy and compiled release identity into
e3-ciphernode-config with their unchanged release manifest and tests.
Migrate direct consumers and the contract-tooling reader, remove unused
dependencies, and delete e3-config without a compatibility facade.

Preserve configuration behavior, exact release identity, counters, durable
locations, P2P protocol names, and runtime admission policy. Update owner
guidance, Docker/workspace inputs, diagnostics, and blueprint references.

Part of #2383; stacked on #2407.

BREAKING CHANGE: network and release imports now use
e3_ciphernode_config; e3-config is removed. The release manifest now lives
at crates/ciphernode/config/protocol-release.toml. No operator reset or
resync is required.

This branch was successfully deployed

3 active deployments
Preview – interfold-dashboard — 1896cdd9 Deployed Nov 2, 2026 by vercel[bot]
Preview – interfold-docs — 1896cdd9 Deployed Nov 2, 2026 by vercel[bot]
github-pages — 1896cdd9 Deployed Nov 2, 2026 by neogiacomo via Publish the previews #529
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant