This draft publishes the complete feat/resolve-node-issues branch: 100 commits, 388 files, +97,284/-7,254 against origin/main at f024fc377. It covers the 25 in-scope open issues, excluding post-quantum research #1625. All committed changes and refactors are included. Untracked local .worktrees/, local/, and plans/ artifacts are excluded.
Major changes
Repairs synchronization, chainstate, mempool, RPC, compact-block, and node-composition ownership.
Adds scoped CPFP submission, BIP331 ancestor packages, BIP332 stale tips, BIP337 compressed transactions, and BIP434 negotiation.
Adds opt-in Tor/I2P transports and native Stratum V1/V2 mining with durable PPLNS accounting.
Unifies exact block payload ownership and adds typed historical-prefix queries.
Adds verified snapshot seeding, Core v2 snapshot export, portable index bundles, and sealed AssumeUTXO activation.
Adds indexed Core-file corpus custody and a foreground offline importer through the production settlement owner.
Records performance, Lightning, Erlay, storage, and upstream dispositions without adopting unqualified candidates.
Synchronization impact
This branch touches authoritative sync, validation, and commit paths. Relevant contract clauses are SYNC-01 through SYNC-07, with the per-unit boundaries and evidence map in docs/contracts/synchronization.md. The smallest proofs are the existing chainstate, node recovery, index watermark, P2P, RPC-notification, and process-level acceptance suites. Portable restore additionally passed all five process cases with 77 checks.
Stratum V1/V2 and the durable PPLNS ledger now live under bitcoin_rs_mining::pool; the three standalone workspace crates were removed. The shared PoolCore was extracted from the SV1 session. Existing pool/pool-sv2 feature switches, ledger model/codecs/keyspace, accounting policy, and protocol behavior are preserved.
This consolidation moves the mining caller but does not edit the authoritative synchronization, validation, or commit implementations. Both protocols still submit through MiningControl; chain observation and lifecycle composition remain node-owned. Relevant preserved obligations are SYNC-03 (bounded pool locks/queues), SYNC-04 (submission/settlement failure classification), SYNC-05 (commit-before-success boundary), and SYNC-06 (existing refresh/drain drivers). The smallest evidence-map proof, chain_effects::tests::mining_reports_a_committed_settlement_failure_as_accepted, passed; the pool SV2 host proof also passed.
Validation on Windows: 242 mining/pool tests, 26 node pool/configuration/settlement tests, 7 pool RPC tests, the single settlement proof above, and the workspace dependency-direction gate passed (277 total). Pool-off and SV1-only binary checks, the SV2-enabled binary/test build, formatting, and strict all-targets mining Clippy passed. The normal dependency graph excludes pool storage and Noise when pool is off, and excludes SV2/Noise with SV1 only. Unix authority-file/process-crash and external interoperability campaigns were not rerun; those existing platform/deep lanes remain the evidence boundary.
Merged main at f024fc377. Conflicting public HTTP implementations now use main's RpcSurface, public_bind / --public-bind, independently configurable connection budgets, REST placement on the public listener, and rpc.* metrics. The superseded ListenerRole implementation and draft rpc_public_bind configuration were removed. Pool-aware Context construction, the mining::pool consolidation, the branch's JSON-RPC envelope behavior, and extracted transport proofs remain.
The merge does not edit authoritative synchronization, validation, or commit implementations. It reconciles listener binding, cancellation and worker ownership at node startup/teardown (SYNC-03, SYNC-04, SYNC-06); both listeners bind before workers start, and pool admission starts afterward. Existing lifecycle rollback/shutdown tests and the evidence-map event-loop proof event_loop::tests::telemetry_uses_elapsed_time_not_wake_count passed.
Windows verification: 56 RPC transport tests, 21 lifecycle tests, 21 auth integration tests, 2 public-listener configuration tests, 1 CLI test, 1 overlap-refusal unit test, and 1 event-loop test passed (103 total). Formatting and strict RPC library/test Clippy with --no-deps passed. Full-dependency Clippy is still blocked by the pre-existing non-Unix index::portable::sync_dir unnecessary-wraps lint; unrelated source was left intact. Unix/deep campaigns were not rerun.
Verification status
Draft created before final publication gates, as requested.
Passed on the final source-bound binary:
All five portable bundle process cases: 77 checks, 0 failures.
Feature-enabled portable unit suite: 8 passed.
Real two-block mainnet offline import and idempotent reopen.
Integrated AssumeUTXO focused suites and strict targeted Clippy.
Offline importer and relocated query/API ownership tests.
The complete all-profile gate and final native pool-feature gate must be read before merge. No better-than-Core or mainnet qualification claim is made.
Remaining external limits
Cmodern corpus qualification lacks the required archive and storage envelope.
Same-key I2P restart remains unresolved in the official-provider control.
Physical per-family device attribution is unavailable on shared ZFS.
ScriptHistory v6 promotion still needs representative storage evidence.