Skip to content

v2 release checklist (the first public release) #608

Description

@defenwycke

Tracking issue for the first public release: node + mining + dashboard, multi-operator.
Wallet and Pay are not in this release (see the note at the end).

Rewritten 2026-08-19; section A, Sequence and the naming decision refreshed 2026-08-23. The public release is v2. Everything below was verified against f3736bc33 and the live fleet on
that date. The previous body was substantially wrong — six of its sections described work that is
already done or decisions that the design had already answered. The corrections are kept at the
bottom so the stale items are not re-raised.


What this release is

You already publish signed releases — v1.11.21 is current and SHA256SUMS.txt.asc verifies.
This is not the first artefact. It is the first release where a stranger can run the 9th node.

That is not a feature goal. It is the only path to a pool that ever pays:

pool          100.1 TH/s      (sum of own-received share work, 1h, 2026-08-19)
network       912.5 EH/s      (difficulty 127,479,855,693,691 at h963,154)
pool share    0.0000110%
expected      0.0058 blocks/year  ->  ~173 years to ONE block

shard_settled_blocks = 0, winning_miner on zero rounds. No software change moves this number.
More operators is the mechanism, so the release is scoped around admitting them safely.

The scope rule

One rule decides what is in: anything that is currently safe only because we own all 8 nodes
becomes a blocker the moment someone else runs one.
Everything else is deferred.

How admission already works (this was an open question; it is not)

Admission is designed and built, not pending a decision:

Elder = MPC contributor (position 1-101 in the ceremony)      main.rs:2880
Any node can contribute - first 101 become elders             main.rs:6549
MPC ceremony is ossified (101 contributors reached)           main.rs:6573

mpc_contributions is keyed by elder_position INTEGER PRIMARY KEY. Live on vm1: 8 contributions
— our own nodes, holding 8 of 101 slots. Ossification caps the elder set, not participation:
node 102 joins normally, it simply does not get the elder share. Node reward weight is:

Capability Shares Proven today?
Archive 5 NO — claimed
GhostPay 4 NO — claimed
PublicMining 3 NO — claimed
Reaper 2 yes
Elder 1 yes

Archive(5) + GhostPay(4) + PublicMining(3) + Reaper(2) + Elder(1) = 15 (payout.rs:4644).
Non-elders also vote: widen_voter_set returns the active set whenever active is a superset of
elders, falling back to elders only otherwise.


A. Trust boundary — the actual release blockers

Refreshed 2026-08-23 (second pass). One issue remains open, and what is left on it is ARMING,
not building.

Closed since the 08-19 rewrite: #589 (Stage 6 Release B — the shard settles from the chain on
every node), #603 (#742), #625, #647 (#741). #411 retitled and deferred — its premise was wrong,
allocation precedes identity; the DoS found while scoping it became #744#746.

B. A stranger must be able to run it

C. Unattended operation

D. Renames — pre-release, cheap now and expensive after

Mandated by the master spec §3.1. Doing this after a public release means breaking other people's
systemd units and documentation, so it belongs in this release or nowhere.

  • ghost-pool -> ghost-mining — binary, systemd unit, installer and docs move together.
  • Product naming: Ghost Core -> Node, Ghost Pool -> Mining, Ghost Pay -> Pay.
    Binaries ghostd and ghost-pay are unchanged.
  • User-facing vocabulary is six words: Node, Mining, Pay, Vault, Ghost Mode, ghost ID.
    Reaper, Haze, Shroud, Exorcism and Glyphs become technical-docs trivia and stop being
    load-bearing in UI or marketing copy.

E. Not in this release

Wallet, Pay/ghost-mode protocol, #520 threshold-Schnorr SV2 identity, #542/#545 hazed restart and
reorg, and the page-weight items #686 / #687 / #688.


Sequence

Rewritten 2026-08-23 (second pass).

  1. land the small branches; fix CI is failing on main #685 done.
  2. Deploy. done — v1.11.27 on all eight nodes, both binaries, 2026-08-23.
  3. Arm the dormant gates, one per height, spaced. ADDRESS_PROOF_HEIGHT
    MESH_ENVELOPE_V2_HEIGHTARCHIVE_TX_PROOF_HEIGHT. ⛔ Nothing near
    PAYOUT_FROM_SHARD_HEIGHT = 964_100; that must be the only variable when it fires.
  4. Merge Release B (Stage 6 Release B: delete the BFT payout vote and the GHOST-03 ledger sweep #750) once the payout gate has fired and the fleet is observed paying.
  5. H-7: challenger /24 subnets are self-reported, so the diversity floor is fabricable (was: capability proofs do not prove the capability) #605 — the last section-A item, once its two gates are armed and observed.
  6. Release must ship a canonical config set and a single binary version — deploys standardise neither today #759 — one version, one canonical config, and make deploy refuse on config drift. Do this
    BEFORE the public release: the moment a stranger runs node nine, "whatever that operator's file
    says" becomes the trust boundary.
  7. Section C operational backlog, section D renames, operator docs, release.

Stage 6 deletion happens BEFORE the release, not after. docs/SHARE_SHARD_BUILD.md was
corrected 2026-08-22: shipping on a binary that still carries the BFT payout path ossifies it.
Release A (v1.11.26) armed the no-vote gate; Release B is #750, open as a draft, +322 /
−5,011
, all six R-items complete.

Open decisions — operator only

  1. Release version naming. DECIDED 2026-08-23: the public release is v2. The tag train
    is at v1.11.x, so "v1" collided. Pair the rename in section D with the v2 cut — if binaries are
    being renamed and re-versioned anyway, doing it once is far cheaper than twice, and Release must ship a canonical config set and a single binary version — deploys standardise neither today #759 wants a
    single version across every shipped binary in the same batch.
  2. feat: arm decentralised mining discovery (signed node-list checkpoint + shim) + independent seeds #402 — arm decentralised mining discovery, or keep it dormant for this release.
  3. result_large_err — unblocks 34 of ci: make clippy blocking (-D warnings) — 221 warnings to clear first #401's remaining lints.
  4. pool: build_webhook_user_identity splits on the first dot, extract_worker_name on the last — multi-dot workers collapse #481 — does a multi-dot payout address count as INVALID?

Corrections to the previous body — do not re-raise these

Previous claim Verified reality (2026-08-19)
§1 six payout blockers open Five are closed#587, #601, #606, #592, #584. Only #605 remains.
§2 two gates armed but not on the fleet Both fired. SHARE_ADDR_BIND_HEIGHT = 961_100 and OBSERVED_SETTLEMENT_HEIGHT = 961_400; tip is 963,154 and the fleet is converged past both.
§4 three stale branches to rebase or abandon Branches deleted; the repo went 69 -> 10 local branches.
§5 B3 fleet-control API returns fabricated success Real code. The config route saves atomically, returns SAVE_FAILED on error, warns when no path is set, and calls request_restart(). The two remaining string matches are past-tense comments documenting the fix.
§6 #596 vm5-8 absent from pool.bitcoinghost.org 8 A records live. All eight nodes are in the mining DNS.
"The genesis signer set" listed as the longest-lead open decision Answered by the design. Elders are the first 101 MPC ceremony contributors; participation beyond 101 is unlimited. See the admission section above.
§6 λ-sampling outstanding On main.

Two of these were re-raised during triage on 2026-08-19 because the checklist was read as current.
That is the reason for this rewrite: an inaccurate checklist costs more than no checklist.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions