Skip to content

rename: server → node (full identity rename) - #93

Merged
TaprootFreak merged 4 commits into
developfrom
rename-to-node
May 25, 2026
Merged

rename: server → node (full identity rename)#93
TaprootFreak merged 4 commits into
developfrom
rename-to-node

Conversation

@TaprootFreak

Copy link
Copy Markdown
Contributor

Why

Two problems with the old name:

  1. Naming collision with DFXServer/server (the infra monorepo). Every mention of "the server" was ambiguous.
  2. Architecture mismatch: this codebase is a self-hostable Bitcoin/zkCoins node — operators run it for full transaction privacy ("run your own node"), analogous to Bitcoin Core, electrs, Nostr relays. server framed it as a centralised service, contrary to the project's actual model.

What changed

Layer server → node
GitHub repo zk-coins/serverzk-coins/node (already renamed; redirects in place)
Docker image zkcoin/server:{beta,latest,buildcache}zkcoin/node:...
Cargo package servernode
Directory server/node/
Binary /usr/local/bin/zkcoins-serverzkcoins-node
Rust source files server.rsrouter.rs, server_runtime.rsruntime.rs, account_server.rsaccount_node.rs (+ *_tests siblings)
Rust types AccountServerAccountNode, LoadAccountServerErrorLoadAccountNodeError, start_rest_server()start_rest_node()
Module paths crate::servercrate::router, crate::server_runtimecrate::runtime, crate::account_servercrate::account_node
API response /api/info service field: "zkcoins-server""zkcoins-node"
Docs README, CONTRIBUTING, ROADMAP, SPEC, BRIDGE_MVP, MULTI_ASSET, ARKADE_INTEGRATION, MIGRATION_RESEARCH — titles, URLs, image refs, module-path examples

What did NOT change

  • API URLs: api.zkcoins.app + dev-api.zkcoins.app stay — no client breakage.
  • Docker Hub namespace: stays zkcoin (singular, matches existing zkcoin/app).
  • Cloudflare DNS / Tunnel: port-based ingress, no change needed.
  • Postgres volume: zkcoins_postgres-data + zkcoins_server-data retained for state continuity.

Local verification

  • cargo check -p node
  • cargo check -p node --tests
  • cargo fmt --check
  • cargo clippy -p node --tests ✅ (no warnings)
  • cargo clippy -p node --tests --all-features ✅ (no warnings)

Coordinated follow-ups (separate PRs / direct pushes)

  • DFXServer/server (direct push to develop): bin/deploy.sh case branches (zkcoins-server)zkcoins-node), reset-zkcoins-server)reset-zkcoins-node)), docker-compose service / container_name / image / entrypoint exec, READMEs. Required before this PR's Deploy DEV workflow can succeed — the restricted-shell deploy.sh on the host will reject zkcoins-node until updated.
  • zk-coins/app (draft PR): markdown link updates (zk-coins/serverzk-coins/node — GitHub redirects make this non-urgent but worth aligning).
  • zk-coins/docs (draft PR): same.
  • Docker Hub: deprecation notice on zkcoin/server (last release tag, redirect users to zkcoin/node).
  • Self-hosted runner on dfx01: re-register with new repo URL (GitHub redirects make this optional but cleaner).

The repo, Cargo package, binary, Docker image, and all Rust modules /
types previously named "server" become "node" — reframing the codebase
to match its actual role: a self-hostable Bitcoin/zkCoins node that
operators run for full transaction privacy ("run your own node"). The
old "server" name collided with DFXServer/server and falsely framed
the project as a centralised service.

Scope:
- Cargo: workspace member + package "server" → "node"
- Directory: server/ → node/ (git rename detection preserved)
- Source files: server.rs → router.rs, server_runtime.rs → runtime.rs,
  account_server.rs → account_node.rs (+ *_tests siblings)
- Rust types: AccountServer → AccountNode, LoadAccountServerError →
  LoadAccountNodeError, start_rest_server() → start_rest_node()
- Module paths: crate::server → crate::router, crate::server_runtime
  → crate::runtime, crate::account_server → crate::account_node
- Binary: /usr/local/bin/zkcoins-server → zkcoins-node
- API response: /api/info "service" field "zkcoins-server" → "zkcoins-node"
- Dockerfile: -p server → -p node, ENTRYPOINT zkcoins-node
- CI workflows: -p server → -p node, image tags zkcoin/server →
  zkcoin/node (beta + latest + buildcache), DEPLOY_CMD updates
- Docs: README, CONTRIBUTING, ROADMAP, SPEC, BRIDGE_MVP, MULTI_ASSET,
  ARKADE_INTEGRATION, MIGRATION_RESEARCH — titles, URLs, image refs,
  module-path examples
- migrations: header comment "server state-layer" → "node state-layer"

Verification: cargo check, cargo check --tests, cargo fmt, cargo
clippy, cargo clippy --all-features all green locally.

Coordinated changes required on merge (separate PRs/pushes):
- DFXServer/server: bin/deploy.sh case branches, docker-compose service
  / container_name / image / exec, READMEs
- zk-coins/app, zk-coins/docs: markdown link updates
- Docker Hub: deprecation notice on zkcoin/server
@TaprootFreak
TaprootFreak marked this pull request as ready for review May 24, 2026 21:17
Previous commit captured the directory + file renames but missed all
the content edits because git mv only stages renames, not subsequent
file modifications. This commit ships every edit listed in the
previous commit message body (Cargo identifiers, Rust types/modules,
Dockerfile, CI workflows, docs).

cargo check / clippy / fmt all green locally before push.
@TaprootFreak TaprootFreak added the ci:full Trigger heavy CI jobs (Server + Shared Tests + Coverage Gate, ~60-90 min on M3 Ultra) label May 24, 2026
… runtime.rs

The 100% coverage gate was failing on runtime.rs because the
hardcoded ignore-regex still listed `server_runtime\.rs` — which no
longer matches anything after the file rename, so runtime.rs slipped
into the measured scope. Replace with `runtime\.rs`; covers both
runtime.rs and scanner_runtime.rs (already in the ignore list, so a
double match is a no-op).
@TaprootFreak
TaprootFreak merged commit 7e663a3 into develop May 25, 2026
7 checks passed
TaprootFreak added a commit that referenced this pull request May 25, 2026
)

The rename PR (#93) edited two comment lines in
node/migrations/0001_initial.sql ("zkCoins server state-layer" →
"zkCoins node state-layer" and "server bootstrap" → "node bootstrap").
sqlx::migrate! hashes the entire file content, so the hash drifted —
on startup the server panics with `Migrate(VersionMismatch(1))`
because the `_sqlx_migrations` row on PRD/DEV still carries the
pre-rename hash. Reverting the two comments restores the original
hash and the migration is considered already-applied as intended.

Cosmetic prose updates to migration files are out of bounds; the
historical accuracy ("server" was the name when the schema landed)
is the correct value anyway.
TaprootFreak added a commit that referenced this pull request May 25, 2026
Coverage Gate audit identified publisher_health_handler (router.rs)
as uncovered by unit tests — only api_remote E2E exercises it, and
api_remote is explicitly excluded from the coverage gate via
`-E 'not binary(api_remote)'`.

Add two unit tests in router_tests.rs mirroring the /health/ready
pattern:
  - 200 Ok arm with wiremocked Esplora returning two UTXOs
  - 503 Err arm via mint_test_state's unreachable Esplora URL

Refactor publisher_health_handler to derive the Taproot address from
PUBLISHER_KEY once at startup (lazy_static PUBLISHER_ADDRESS in lib.rs),
removing the SecretKey::from_str / Address::p2tr from the request path.
Side benefits:
  - Handler is now pure I/O (Ok/Err on get_publisher_utxo only)
  - One fewer panic-able branch per request
  - Coverage Gate reaches 100% with the two new tests

Also:
  - Fix stale "server::create_router" comment in runtime_tests.rs
    (introduced by the test-quality commit, before PR #93's rename
    sweep landed)
  - Update BOOTSTRAP_MINTING_BALANCE doc-comment to describe the
    bound semantic (not the strict equality that the second commit
    of this branch relaxed)
  - Defensive `command -v jq` install in deploy-dev.yaml preflight
TaprootFreak added a commit that referenced this pull request May 25, 2026
Coverage Gate audit identified publisher_health_handler (router.rs)
as uncovered by unit tests — only api_remote E2E exercises it, and
api_remote is explicitly excluded from the coverage gate via
`-E 'not binary(api_remote)'`.

Add two unit tests in router_tests.rs mirroring the /health/ready
pattern:
  - 200 Ok arm with wiremocked Esplora returning two UTXOs
  - 503 Err arm via mint_test_state's unreachable Esplora URL

Refactor publisher_health_handler to derive the Taproot address from
PUBLISHER_KEY once at startup (lazy_static PUBLISHER_ADDRESS in lib.rs),
removing the SecretKey::from_str / Address::p2tr from the request path.
Side benefits:
  - Handler is now pure I/O (Ok/Err on get_publisher_utxo only)
  - One fewer panic-able branch per request
  - Coverage Gate reaches 100% with the two new tests

Also:
  - Fix stale "server::create_router" comment in runtime_tests.rs
    (introduced by the test-quality commit, before PR #93's rename
    sweep landed)
  - Update BOOTSTRAP_MINTING_BALANCE doc-comment to describe the
    bound semantic (not the strict equality that the second commit
    of this branch relaxed)
  - Defensive `command -v jq` install in deploy-dev.yaml preflight
TaprootFreak added a commit that referenced this pull request May 25, 2026
* test: harden suite — remove dev_skip masking + add publisher preflight

The api_remote suite reported "33 passed" while critical paths were
silently skipped via dev_skip!() on 5xx errors and 120-s retry loops
on scanner-lag 422s. The Coverage Gate and the deploy-dev API E2E
became a green stamp instead of a real signal — an empty publisher
wallet caused every mint to 503, every 5xx was masked as "ok", and CI
stayed green on a broken DEV.

Tier 1 — must-fix:
  - Remove all dev_skip!() on is_server_error() (4 sites)
  - Remove dev_skip!() on /health/ready, balance-not-observed, and
    /api/username/claim 503
  - Remove SEND_RETRY_DEADLINE retry loops on "Unable to get
    merkle/mmr proofs" 422 — scanner is event-driven post-#87, the
    stopgaps are obsolete. Replace with poll_until_balance before the
    send op (15-s ceiling).
  - Add fresh-state assertion to happy-path roundtrips
  - feature_skip!() becomes a hard panic when CI=true env is set
  - mint_handler_concurrent_mint_during_proof_returns_503 now
    synchronizes via a #[cfg(test)] tokio::sync::Notify instead of a
    200-ms sleep
  - commit_with_valid_signature_fails_broadcast_returns_503 now
    wiremocks Esplora and asserts exactly 503 (no more accept-either)
  - fetch_capabilities .expect() instead of .unwrap_or(false) — a
    missing capabilities field is a contract regression
  - New /health/publisher endpoint exposes the publisher wallet's
    UTXO count + total sats
  - New deploy-dev preflight step probes /health/publisher before
    the API E2E job runs — empty wallet -> job fails with a clear
    "top up publisher" message

Tier 2 — same-PR quality:
  - Value-bearing assertions replace .is_some()/.is_ok() shape checks
    in api_remote, server_tests, state_tests
  - Hash-byte-length + non-zero assertions on send response payloads
  - Concrete bounds on LNURLp min/maxSendable
  - tokio::time::sleep(60s) in test handlers replaced with
    std::future::pending::<()>().await
  - Ad-hoc tempdir cleanup replaced with tempfile::tempdir()
  - Delete proof_id_one_returns_200_or_404 — accept-either status
    was tautological

Tier 3 — documentation:
  - Comment block on lock-poisoning tests' nextest isolation
    requirement

The three TODO comments in account_server.rs (lines 147, 170, 416)
are tracked separately and not addressed here.

* test: relax fresh-state assertion to upper-bound (push-trigger safe)

The strict `assert_minting_balance_is_bootstrap` helper would
tripwire CI on every develop push after a manual reset: the
deploy-dev workflow only runs `reset-zkcoins-server` on explicit
workflow_dispatch with reset_state=true, not on the default push
trigger. After this PR's first run, the minting balance drops to
`bootstrap - 2*MINT_AMOUNT` and the strict equality fails forever.

Replace with `assert_minting_balance_in_bounds`: upper-bound on
BOOTSTRAP_MINTING_BALANCE (catches unauthorized re-seed bugs) plus
a non-zero lower bound (catches unexpected wipe). Both happy-path
tests now use the same helper.

Also drops the redundant second `poll_until_balance` call in
`send_commit_roundtrip_moves_balance` (the prior `poll_balance_at_least`
already covered it) and documents the deliberately-deferred B5
proof_id pin in server_tests.rs (proof store ID grows across DB
lifetime, same constraint as the minting balance bound).

* test: cover publisher_health_handler unit tests + polish

Coverage Gate audit identified publisher_health_handler (router.rs)
as uncovered by unit tests — only api_remote E2E exercises it, and
api_remote is explicitly excluded from the coverage gate via
`-E 'not binary(api_remote)'`.

Add two unit tests in router_tests.rs mirroring the /health/ready
pattern:
  - 200 Ok arm with wiremocked Esplora returning two UTXOs
  - 503 Err arm via mint_test_state's unreachable Esplora URL

Refactor publisher_health_handler to derive the Taproot address from
PUBLISHER_KEY once at startup (lazy_static PUBLISHER_ADDRESS in lib.rs),
removing the SecretKey::from_str / Address::p2tr from the request path.
Side benefits:
  - Handler is now pure I/O (Ok/Err on get_publisher_utxo only)
  - One fewer panic-able branch per request
  - Coverage Gate reaches 100% with the two new tests

Also:
  - Fix stale "server::create_router" comment in runtime_tests.rs
    (introduced by the test-quality commit, before PR #93's rename
    sweep landed)
  - Update BOOTSTRAP_MINTING_BALANCE doc-comment to describe the
    bound semantic (not the strict equality that the second commit
    of this branch relaxed)
  - Defensive `command -v jq` install in deploy-dev.yaml preflight
TaprootFreak added a commit that referenced this pull request May 25, 2026
* docs: fix residual server → node references missed in #93

PR #93 (rename server → node) touched code + most docs, but a handful
of identifier-style references in README.md and the CI-runner setup
guide slipped through. None were runtime-critical — the build, deploy,
and runtime paths were already on the new names — but the docs were
out of sync with reality, and the ci-runner bootstrap URLs pointed at
the redirect-only legacy repo.

Fixes:
- README.md
  - Cargo invocations: -p server → -p node (build, run, coverage)
  - Type refs: AccountServer:: → AccountNode::
  - File refs: server.rs:: → router.rs::, server_runtime.rs → runtime.rs
  - Path refs: server/src/ → node/src/, server/migrations/ → node/migrations/
  - Project tree: server/ branch → node/ branch (plus an explicit
    runtime.rs entry that was missing entirely)
- scripts/ci-runner/README.md
  - All zk-coins/server URLs → zk-coins/node (curl + gh api)
  - Runner dir: ~/actions-runner-zkcoins-server → ~/actions-runner-zkcoins-node
  - LaunchAgent label: actions.runner.zk-coins-server → actions.runner.zk-coins-node
  - Workspace cache path: _work/server/server → _work/node/node
- program-plonky2/src/circuit/main.rs
  - One inline comment account_server::send_coins → account_node::send_coins

* fix: residual server → node references in hooks, CI, and docs (post-audit pass)

Second-pass post-audit found more drift than the first pass caught:

BREAKING fixes:
- .githooks/pre-push lines 28–32: cargo clippy -p server → -p node
  (would fail on every developer push with "package server not found")
- .github/workflows/ci.yaml line 139: the "forbid polling patterns"
  grep was scanning server/src/{scanner,publisher}.rs paths that no
  longer exist; combined with `|| true` it would silently pass even
  if polling was reintroduced into the event-driven hot paths

Documentation drift fixes (all flagged by parallel audits):
- README.md: `cargo test -p server` examples → -p node; Features-table
  coverage labels "(server)" → "(router)" (the module is now router.rs)
- CONTRIBUTING.md: 7 references to `server/src/...` paths +
  `cargo test -p server db` invocation
- SPEC.md, MIGRATION_RESEARCH.md, ROADMAP.md, BRIDGE_MVP.md,
  BITVM_BRIDGE.md, MULTI_ASSET.md, LIGHTNING_ATOMIC_SWAP.md: all
  `server/src/`, `server/migrations/`, `server/tests/` path refs
  switched to `node/...`; `start_rest_server` symbol → start_rest_node

ZERO functional code touched. Verified residuals = 0 via
  rg -E 'cargo (clippy|build|test) -p server|start_rest_server|server/(src|migrations|tests)/'
across hooks/workflows/docs.

* fix: more residual server → node refs (third-pass audit)

Third-pass audit found three more residuals:

BREAKING:
- README.md:54,106,243 — `cargo llvm-cov -p server` /
  `cargo build --release -p server` examples in the contributing/
  building/cheatsheet sections. Developers copy-pasting these would
  hit "package `server` not found" immediately.

SEMANTIC DRIFT:
- node/src/main.rs:35,120 — constant ACCOUNT_SERVER_ADDR. Local
  scope, but undermines the rename if left in the codebase.

DOCUMENTATION DRIFT:
- node/src/lib.rs:5 — doc-comment path reference
  `server/tests/api_remote.rs` → `node/tests/api_remote.rs`.

cargo check -p node green after fix.

* fix: more residual server → node refs (fourth-pass audit)

Fourth audit pass found three more residuals — all in user-facing
documentation that prior passes missed because the search patterns
weren't broad enough:

BREAKING:
- CONTRIBUTING.md:230 — Quick Start `cd server` → `cd node`
- CONTRIBUTING.md:231 — Quick Start `cargo run -p server` → -p node
- CONTRIBUTING.md:255 — `cd server` in the testing section

  Developers following the Quick Start would hit "no such directory"
  and "package server not found" immediately.

SEMANTIC DRIFT:
- CONTRIBUTING.md:395 — Naming-convention example `ACCOUNT_SERVER_ADDR`
  → ACCOUNT_NODE_ADDR (matches the actual constant in node/src/main.rs)
- CONTRIBUTING.md:532 — Sample log line `Loaded AccountServer from
  Postgres` → AccountNode (matches the actual log emitted by the
  current code)
- .gitignore:5 — `!server/minting_secret.bin` → `!node/minting_secret.bin`
  (the binary is gitignored, but this allow-rule referenced the old path)

ROADMAP.md and program-plonky2/*.md retain `zk-coins/server` /
`-p server` references as HISTORICAL context (commit descriptions
dated pre-rename); intentionally not changed.
TaprootFreak added a commit that referenced this pull request May 25, 2026
The Rust type rename AccountServer → AccountNode (PR #93) left the
test files using `let mut server = AccountNode::new(...)` and
`server.method()` throughout. Stylistically idiomatic but inconsistent
with the rest of the rename — fixed in this commit:

- node/src/account_node.rs: 23 occurrences (`fresh_node` helper + tests)
- node/src/account_node_tests.rs: 67+ occurrences (every test) +
  2 assertion-message strings ("in server and program" → "in node...")
- node/src/router_tests.rs: 6 occurrences

Plus one missed identifier ref in program-plonky2/CONTRIBUTING.md:185
(`-p server -p shared` → `-p node -p shared`).

Verified: cargo check -p node --tests + cargo clippy -p node --tests
both pass. No logic change, pure variable rename.
TaprootFreak added a commit that referenced this pull request May 25, 2026
…101)

* docs(program-plonky2): update server → node refs in migration notes

These 5 files document the Plonky2-migration sub-package's history.
Prior audits flagged them as "historical context, OK to keep as-is"
— but that classification was wrong: they're active contributor
docs (CONTRIBUTING.md says "Fresh contributor? Read this first"),
and the code refs they contain (`account_server.rs`, `server.rs`,
`AccountServer::`, etc.) point at files that physically no longer
exist after PR #93. A new reader following one of these refs hits
"file not found" — that's broken docs, not historical accuracy.

Updates applied via perl one-shot:
- GitHub URLs: zk-coins/server → zk-coins/node (GitHub redirects
  worked, but textual consistency was off)
- File refs: account_server.rs → account_node.rs, server.rs → router.rs,
  server_runtime.rs → runtime.rs, account_server_tests.rs →
  account_node_tests.rs, server_tests.rs → router_tests.rs
- Type refs: AccountServer → AccountNode, LoadAccountServerError →
  LoadAccountNodeError
- Module paths: account_server::, server_runtime::, server.rs:: →
  account_node::, runtime::, router.rs::
- Cargo: -p server → -p node (run/test/build/llvm-cov)
- Path refs: server/src/, server/migrations/, server/tests/ → node/...
- Function: start_rest_server → start_rest_node

Counts: CONTRIBUTING (6 lines), SESSION_STATE (38), STEP7_PREP (36),
STAGE_5D_NEXT_4_DESIGN (2), STEP4_REVIEW (2). All swaps preserve
historical semantics — the PR-#17 etc. event descriptions stay
factually correct since the PR numbers themselves don't change; we
just spell the repo by its current canonical name.

* fix: final residual sweep — ROADMAP commit-narrative + api_remote.rs reset cmd

ROADMAP.md:75 — historical commit-narrative for dac0179. Prior pass
caught lines 73/76/77 in the same file (already renamed account_node /
router_tests etc.) but missed line 75's '-p server' / 'Plonky2 server'.
Renamed for consistency with the rest of the doc.

node/tests/api_remote.rs:904/969/1319 — three test-comment refs to
the old SSH command 'reset-zkcoins-server'. The actual command on
both dfxdev and dfxprd is now 'reset-zkcoins-node' (per the rename
in DFXServer/server bin/deploy.sh). Comments updated to match.

* fix(tests): rename remaining 'server' local-var refs to 'node'

The Rust type rename AccountServer → AccountNode (PR #93) left the
test files using `let mut server = AccountNode::new(...)` and
`server.method()` throughout. Stylistically idiomatic but inconsistent
with the rest of the rename — fixed in this commit:

- node/src/account_node.rs: 23 occurrences (`fresh_node` helper + tests)
- node/src/account_node_tests.rs: 67+ occurrences (every test) +
  2 assertion-message strings ("in server and program" → "in node...")
- node/src/router_tests.rs: 6 occurrences

Plus one missed identifier ref in program-plonky2/CONTRIBUTING.md:185
(`-p server -p shared` → `-p node -p shared`).

Verified: cargo check -p node --tests + cargo clippy -p node --tests
both pass. No logic change, pure variable rename.

* style: cargo fmt after server -> node var rename

Shorter variable name (3 chars vs 6) lets several method chains
collapse onto one line per rustfmt default config. Pure formatting.
TaprootFreak added a commit that referenced this pull request May 25, 2026
Four small follow-ups identified by the pre-CI audit, none blocking
but all worth landing:

1. router.rs: switch `&*PUBLISHER_ADDRESS` deref to `.clone()` —
   eliminates a llvm-cov region-tracking edge case on the new
   handler's first line (98% safe either way; this is belt-and-
   braces). Address::clone is cheap.

2. router_tests.rs: wrap both await points of
   `mint_handler_concurrent_mint_during_proof_returns_503` in
   `tokio::time::timeout` (30 s + 60 s). Prevents a future
   regression in `mint_handler` phase 2 from hanging the 120-min
   CI job budget.

3. api_remote.rs: replace stale `reset-zkcoins-server` comment
   references with the post-rename `reset-zkcoins-node`. Cosmetic;
   matches the host-side dispatcher command name updated in
   DFXServer/server commit f74ec4a.

4. ci.yaml: the polling-pattern lint step (issue #84 guard) targets
   paths under `server/src/` that no longer exist after PR #93's
   rename to `node/src/`. The grep returned empty vacuously, which
   means the lint has been silently dead for 24 h. Update paths.

Note: the audit also flagged the stale `server::create_router`
comment in runtime_tests.rs, but that fix already landed in 687f412
on chore/test-quality-overhaul.

Stacked on top of PR #94 (chore/test-quality-overhaul) per the
"no force-push during running CI" project convention.
TaprootFreak added a commit that referenced this pull request May 25, 2026
Four small follow-ups identified by the pre-CI audit, none blocking
but all worth landing:

1. router.rs: switch `&*PUBLISHER_ADDRESS` deref to `.clone()` —
   eliminates a llvm-cov region-tracking edge case on the new
   handler's first line (98% safe either way; this is belt-and-
   braces). Address::clone is cheap.

2. router_tests.rs: wrap both await points of
   `mint_handler_concurrent_mint_during_proof_returns_503` in
   `tokio::time::timeout` (30 s + 60 s). Prevents a future
   regression in `mint_handler` phase 2 from hanging the 120-min
   CI job budget.

3. api_remote.rs: replace stale `reset-zkcoins-server` comment
   references with the post-rename `reset-zkcoins-node`. Cosmetic;
   matches the host-side dispatcher command name updated in
   DFXServer/server commit f74ec4a.

4. ci.yaml: the polling-pattern lint step (issue #84 guard) targets
   paths under `server/src/` that no longer exist after PR #93's
   rename to `node/src/`. The grep returned empty vacuously, which
   means the lint has been silently dead for 24 h. Update paths.

Note: the audit also flagged the stale `server::create_router`
comment in runtime_tests.rs, but that fix already landed in 687f412
on chore/test-quality-overhaul.

Stacked on top of PR #94 (chore/test-quality-overhaul) per the
"no force-push during running CI" project convention.
TaprootFreak added a commit that referenced this pull request May 25, 2026
Four small follow-ups identified by the pre-CI audit, none blocking
but all worth landing:

1. router.rs: switch `&*PUBLISHER_ADDRESS` deref to `.clone()` —
   eliminates a llvm-cov region-tracking edge case on the new
   handler's first line (98% safe either way; this is belt-and-
   braces). Address::clone is cheap.

2. router_tests.rs: wrap both await points of
   `mint_handler_concurrent_mint_during_proof_returns_503` in
   `tokio::time::timeout` (30 s + 60 s). Prevents a future
   regression in `mint_handler` phase 2 from hanging the 120-min
   CI job budget.

3. api_remote.rs: replace stale `reset-zkcoins-server` comment
   references with the post-rename `reset-zkcoins-node`. Cosmetic;
   matches the host-side dispatcher command name updated in
   DFXServer/server commit f74ec4a.

4. ci.yaml: the polling-pattern lint step (issue #84 guard) targets
   paths under `server/src/` that no longer exist after PR #93's
   rename to `node/src/`. The grep returned empty vacuously, which
   means the lint has been silently dead for 24 h. Update paths.

Note: the audit also flagged the stale `server::create_router`
comment in runtime_tests.rs, but that fix already landed in 687f412
on chore/test-quality-overhaul.

Stacked on top of PR #94 (chore/test-quality-overhaul) per the
"no force-push during running CI" project convention.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:full Trigger heavy CI jobs (Server + Shared Tests + Coverage Gate, ~60-90 min on M3 Ultra)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant