Skip to content

docs(genesis-writer): replace the flusher with the mirror in the rollout runbook - #611

Merged
rickyrombo merged 2 commits into
mainfrom
docs/runbook-mirror-cutover
Oct 29, 2026
Merged

rickyrombo merged 2 commits into
mainfrom
docs/runbook-mirror-cutover

Conversation

@rickyrombo

Copy link
Copy Markdown
Contributor

Updates cmd/genesis-writer/ROLLOUT.md now that the API's new-chain queue and flusher are retired in favour of the mirror (#605, #608, #610).

Step 11: Start the mirror (replaces "Enable flushing"):

  • the docker run invocation;
  • what each flag means, including -start-height = new_chain_flush_from_block from MANIFEST.json;
  • what /status reports;
  • how each kind of refusal is handled:
  • observed throughput.

Step 12: Switch the indexer, a zero-downtime handover:

  • the mirror is at the tip;
  • stop the old indexer at X;
  • take H from the new block that holds the last mirrored transaction at or below X. This is exact because the mirror never reads old block X+1 until X has committed;
  • start the new indexer at H+1;
  • clear the bounds.

Steps 13–15:

  • play routing can be reverted any time after the switch;
  • the write switch happens only while the mirror is at the tip;
  • the mirror is stopped once the old chain halts.

Appendices:

  • G (plays) and I (the indexer boundary) are rewritten for the mirror;
  • the relay/rollback reference drops the queue, api#1018 and the cursor discussion;
  • "merge these first" swaps api#1018 for the mirror PRs.

The MANIFEST.json field keeps its name. Its Go comment now describes it as the mirror's start height. The only code change is a comment.

🤖 Generated with Claude Code

rickyrombo and others added 2 commits October 24, 2026 13:36
…out runbook

The API's new-chain queue and flusher are retired. The mirror (#605, #608,
#610) replays the old chain's ManageEntity and play transactions onto the new
chain from blocks, which covers every write source and carries plays.

Step 11 now starts the mirror: flags, what /status reports, how each kind of
refusal is handled, and throughput. Step 12 is the zero-downtime indexer
switch: stop the old indexer at X, then derive H from the new block holding
the last mirrored transaction at or below X, which block-by-block mirroring
makes exact. Steps 13-15, appendices G and I, and the relay, rollback and
open-question reference sections follow from that. The manifest field keeps
its name; its comment now says it is the mirror's start height.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nodes run openaudio/go-openaudio:mainnet-beta, retagged by hand from the
merge-ref image CI builds for #553, never :edge or :stable. Step 15 says how
#553 merges so release-please releases 2.0.0 rather than 1.x or 3.0.0. The
mirror's skip rule lists taken handles alongside reused track ids, and the
relay reference links the API cleanup.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@rickyrombo
rickyrombo merged commit 65b117b into main Oct 29, 2026
4 of 5 checks passed
@rickyrombo
rickyrombo deleted the docs/runbook-mirror-cutover branch October 29, 2026 05:39
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.

1 participant