Skip to content

docs(operators): remove op-geth how-to content now that support has ended - #2351

Merged
GigaHierz merged 2 commits into
mainfrom
GigaHierz/2325-remove-op-geth-howto
Oct 2, 2026
Merged

GigaHierz merged 2 commits into
mainfrom
GigaHierz/2325-remove-op-geth-howto

Conversation

@GigaHierz

@GigaHierz GigaHierz commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

What changed

Support for op-geth has ended on both networks (dates live on operate/notices/op-geth-deprecation). Operator pages no longer explain how to keep running it.

  • Deleted the "Still running op-geth?" accordions in run-node.mdx and archive-node.mdx, and the "op-geth variables" accordion in configuration.mdx.
  • Deleted the op-geth container images and the geth-format migrated chaindata link from network-config.mdx; the bootnode note now names op-reth only.
  • Deleted operate/operators/migrate-node.mdx. It was the L1 to L2 datadir guide for op-geth (op-reth cannot use its output). Its one non-op-geth section, extracting a private key from the old geth keystore with cast wallet decrypt-keystore, moved to home/celo-l1.mdx with the commands unchanged.
  • Callouts in run-node, archive-node and configuration link the notice and no longer repeat the switch dates.
  • The run-node callout and the notice link the compose repository's RETH_MIGRATION.md, which covers moving an existing mainnet node: empty datadir, snapshot bootstrap, running op-reth beside op-geth, --l2.enginekind=reth on op-node, then cutting traffic over.
  • public-rpc-node.mdx says a public RPC node needs NODE_TYPE=full or archive: the compose script passes --minimal for minimal, and reth's minimal profile fully prunes transaction lookups, so eth_getTransactionByHash returns null.
  • FAQ answer now covers running a node (run-node), upgrading a client (maintenance) and moving off op-geth (notice).
  • Archived l2-migration notice: description matches the page, celo-migrate is named, no edit-history wording.
  • Archive guide says where to find the pre-migration block (mainnet L1 ended at 31056499).
  • Removed migrate-node from docs.json navigation.

Redirects added

All three point straight at the notice, with no chains:

  • /operate/operators/migrate-node to /operate/notices/op-geth-deprecation
  • /cel2/operators/migrate-node (re-pointed from the deleted page) to /operate/notices/op-geth-deprecation
  • /infra-partners/operators/migrate-node to /operate/notices/op-geth-deprecation (exact entry, so it no longer goes through the /infra-partners/:slug* wildcard to the deleted page)

Overlap with #2345

git merge-tree of this branch with #2345 is conflict-free. Whichever merges second should still be checked, since both edit archive-node, configuration, network-config and run-node.

Remaining op-geth mentions under operate/

None is a how-to for running op-geth.

  • Notice and archived notices: notices/op-geth-deprecation.mdx, notices/overview.mdx, notices/archive/*
  • Pointers to the notice: index.mdx, operators/overview.mdx, operators/architecture.mdx, operators/maintenance.mdx (lines 24, 56), callouts in run-node, archive-node, configuration
  • Datadir-reuse statements: run-node, configuration, archive-node, maintenance
  • Historical proofs comparison: operators/historical-proofs.mdx (lines 10, 249)
  • Specification history and links to the op-geth repository: specification/l2-migration.mdx, specification/upgrades/jovian.mdx

Follow-ups (not in this PR)

  • The compose repository's MIGRATION.md and migrate.sh still point at the removed migrate-node guide (/infra-partners/operators/migrate-node); rewrite or remove them there.
  • The compose environment files ship OP_RETH__SNAPSHOT=true while configuration.mdx and run-node document the default as false.

Verification

$ mint broken-links --check-redirects
success no broken links found

$ bash scripts/check-orphans.sh
No orphan pages found.

Closes #2325

🤖 Generated with Claude Code

…nded

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@GigaHierz
GigaHierz requested review from a team as code owners October 1, 2026 14:16
@GigaHierz
GigaHierz requested review from palango and seolaoh and removed request for a team October 1, 2026 14:16

@palango palango left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for clearing this out. CI is green and the PR merges cleanly with #2345. Inline comments below, roughly in order of importance. The first four are worth fixing before merge.

A few points that don't anchor to changed lines:

  • operate/operators/archive-node.mdx:30: "Do not attempt to migrate an archive datadir." now warns against a procedure no page documents. Say it as a fact (the legacy archive datadir is used as-is) or drop it.
  • The deleted migrate-node.mdx had a section that wasn't about op-geth: "Extracting a Key from the Old Geth Keystore" (cast wallet decrypt-keystore). Former L1 node and validator operators now have no page for it. It could move to home/celo-l1.mdx or troubleshooting.
  • The PR body says the only remaining op-geth mentions are the deprecation notice, archived notices and datadir-reuse statements. overview.mdx:28,33, architecture.mdx:15, maintenance.mdx:24, operate/index.mdx:10 and historical-proofs.mdx:10,249 also mention it. None of them is a how-to, so the issue's acceptance criterion still holds, but the description becomes the squash commit, so it should be accurate.
  • Not from this PR: the compose repo's mainnet.env and celo-sepolia.env ship OP_RETH__SNAPSHOT=true, while configuration.mdx:17 and run-node.mdx say the default is false.

Comment thread operate/operators/run-node.mdx Outdated
These instructions use `op-reth`, Celo's supported execution client. A fresh node starts from an empty datadir and bootstraps from a published snapshot (required on mainnet) or, on Celo Sepolia, syncs from genesis — no L1 data migration required.

Support for `op-geth` ended on each network's switch date — see [End of Support for op-geth](/operate/notices/op-geth-deprecation) for the dates, and the **Still running op-geth?** notes at the end of this guide.
Support for `op-geth` ended on Celo Sepolia on June 24, 2026 and on mainnet on July 22, 2026. A node still running it can follow the wrong chain; see [End of Support for op-geth](/operate/notices/op-geth-deprecation).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Operators still on op-geth are the ones at risk here, and after this PR all they get is "migrate to op-reth". The compose repo already has a switch-over guide, RETH_MIGRATION.md, which covers running op-reth next to op-geth, comparing the two, adding --l2.enginekind=reth to op-node and moving traffic across. Nothing in the docs links it. Could this callout and the op-geth-deprecation notice point to it?

Related: the migrate-node redirects could go to /operate/notices/op-geth-deprecation rather than run-node. Someone asking "how do I migrate my node" is better served by the notice than by a fresh-install guide.

Comment thread docs.json
"destination": "/operate/operators/run-node"
},
{
"source": "/operate/operators/migrate-node",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/infra-partners/operators/migrate-node also needs an exact entry. Today it reaches /operate/operators/migrate-node through the /infra-partners/:slug* wildcard:

$ curl -sI https://docs.celo.org/infra-partners/operators/migrate-node
HTTP/2 308
location: /operate/operators/migrate-node

After this PR that becomes a two-hop chain. The URL is live: celo-l2-node-docker-compose MIGRATION.md links it on lines 5 and 11. An exact source wins over the wildcard, so adding /infra-partners/operators/migrate-node → /operate/operators/run-node (or the deprecation notice, see my comment on run-node.mdx) fixes it.

Comment thread operate/operators/public-rpc-node.mdx Outdated
## Serve transaction lookups by hash

A public RPC endpoint should return any transaction by its hash. op-reth exposes the standard `eth` namespace, so transactions are retrievable by hash within the node's retained history, and the [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) setup needs no extra configuration for this. (On the legacy op-geth setup this instead requires `--history.transactions=0`, which the compose setup sets for you.)
A public RPC endpoint should return any transaction by its hash. op-reth exposes the standard `eth` namespace, so transactions are retrievable by hash within the node's retained history, and the [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l2-node-docker-compose) setup needs no extra configuration for this.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without the op-geth caveat, this now says flatly that the compose setup needs no extra configuration to serve lookups by hash. That's not true for NODE_TYPE=minimal. The compose repo maps it to reth's --minimal, which sets transaction_lookup: Some(PruneMode::Full) (reth crates/node/core/src/args/pruning.rs, minimal_prune_modes; --full leaves it as None). On a minimal node, eth_getTransactionByHash returns null for every transaction. Worth saying that a public RPC node needs NODE_TYPE=full or archive.

@@ -20,9 +20,8 @@ The recommended [celo-l2-node-docker-compose](https://github.com/celo-org/celo-l
- [L2 allocs](https://storage.googleapis.com/cel2-rollup-files/celo/l2-allocs.json)
- [rollup.json](https://storage.googleapis.com/cel2-rollup-files/celo/rollup.json)
- [Genesis](https://storage.googleapis.com/cel2-rollup-files/celo/genesis.json)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The compose repo still sends people here. MIGRATION.md "Option 1: Download Pre-Migrated Data" says to download migrated datadirs "from the official sources listed in the Celo Docs", and migrate.sh points at the same guide. After this PR they land on run-node, which lists neither. This needs a matching change in celo-l2-node-docker-compose (remove or rewrite MIGRATION.md), or at least a follow-up noted in this PR.

The instructions for migrating a Celo node from Layer 1 to Layer 2 are outlined [in this guide](/operate/operators/migrate-node). This process is necessary to transition your Celo L1 node to the new Celo L2 architecture based on the OP-Stack.

If you wish to run a Celo L2 node from scratch, you can follow the instructions in the [Running a Celo Node](/operate/operators/run-node) guide.
The L1 datadir migration guide has been removed because the tool only produced `op-geth` data. If you wish to run a Celo L2 node from scratch, you can follow the instructions in the [Running a Celo Node](/operate/operators/run-node) guide.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few things in this sentence:

  • "has been removed" describes the docs' own edit history. AGENTS.md §4 asks pages to document what is true now.
  • "the tool" isn't named anywhere earlier on the page. Either name celo-migrate or drop the clause.
  • "from scratch" suggests there's another option, and there isn't one now.

The frontmatter description also still promises "what node operators had to do", which the page no longer covers (AGENTS.md §8).

Comment thread operate/operators/faq.mdx Outdated
<Accordion title="How do I run a node or upgrade an existing node?">

See the guides for [running a node](/operate/operators/run-node) or the guide on [how to migrate an L1 node](/operate/operators/migrate-node).
See the guides for [running a node](/operate/operators/run-node).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The question is "How do I run a node or upgrade an existing node?", and this answers only the first half. "guides" is plural above a single link, too. Linking /operate/operators/maintenance (client upgrades) and /operate/notices/op-geth-deprecation (op-geth → op-reth) would cover the upgrade half that the migrate-node link used to.

Comment thread operate/operators/run-node.mdx Outdated
**Datadirs from op-geth cannot be reused**

`op-reth` uses a different on-disk format. A datadir written by `op-geth` — including one produced by the [L1→L2 migration](/operate/operators/migrate-node) — cannot be used with `op-reth`. Start from an empty `DATADIR_PATH`. Pre-L2 historical state is served separately; see [Running an archive node](/operate/operators/archive-node).
`op-reth` uses a different on-disk format. A datadir written by `op-geth` cannot be used with `op-reth`. Start from an empty `DATADIR_PATH`. Pre-L2 historical state is served separately; see [Running an archive node](/operate/operators/archive-node).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dropping "including one produced by the L1→L2 migration" makes this warning narrower. A celo-migrate output was never written by op-geth, so someone holding one can reasonably decide this doesn't apply to them. start-op-reth.sh will refuse to start because $DATADIR/geth exists, but the guide should say so first. I'd keep the clause and drop only the link: "including one produced by the L1→L2 migration tool".

Comment thread operate/operators/configuration.mdx Outdated
**Execution client: op-reth**

The variables below configure `op-reth`, Celo's supported execution client. Support for `op-geth` ended on each network's switch date; for its variables, see the **op-geth variables** accordion below and [End of Support for op-geth](/operate/notices/op-geth-deprecation).
The variables below configure `op-reth`, Celo's supported execution client. Support for `op-geth` ended on Celo Sepolia on June 24, 2026 and on mainnet on July 22, 2026; see [End of Support for op-geth](/operate/notices/op-geth-deprecation).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With this change the switch dates appear in three callouts (here, run-node.mdx:14 and archive-node.mdx:16), while overview.mdx, architecture.mdx and operate/index.mdx just link to the notice. AGENTS.md §7 says dates and numbers live on one canonical page and everything else links there. The callouts on main already worked that way, so I'd keep the link and drop the dates.

@@ -86,23 +86,6 @@ These flags are set for you by the compose start scripts; they are listed here b

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The op-geth table you removed had the only documented image-pinning variable (IMAGE_TAG__OP_GETH). Compose supports IMAGE_TAG__OP_RETH and IMAGE_TAG__OP_NODE (docker-compose.yml:48, mainnet.env:145-147), but the reference doesn't mention them now. Worth adding, so operators can hold a version through a release.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correction: operate/operators/maintenance.mdx:27 already documents IMAGE_TAG__OP_RETH and IMAGE_TAG__OP_NODE, so pinning is not undocumented. Adding them to this table would still be nice, but it is optional.

@@ -132,20 +132,3 @@ Ensure any datadir you supply is not in use by a running node before proceeding.
```bash
cast balance --block <pre-migration-block-number> <address> --rpc-url http://localhost:9993

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: <pre-migration-block-number> doesn't say where to find that number, and this PR deletes one of the pages that listed it. A link to the archived l2-migration notice or operate/specification/deployments here would help (mainnet L1 ended at block 31056499).

@GigaHierz
GigaHierz requested a review from palango October 1, 2026 16:07

@palango palango left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Following up on my comments from yesterday so the status is explicit. Two things need fixing before merge. /infra-partners/operators/migrate-node needs an exact redirect: the compose repo's MIGRATION.md links it, and it now goes through two hops. The public-rpc-node sentence also needs to say that NODE_TYPE=minimal does not serve lookups by hash. Linking RETH_MIGRATION.md from the run-node callout or the notice, and a follow-up for the compose repo's MIGRATION.md, would be good to settle here too. The rest of my inline comments are optional. I checked the scope against the compose and op-geth repos, and op-reth plus the Celo L1 historical node cover everything the removed op-geth content did. mint broken-links --check-redirects passes on the head.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@GigaHierz
GigaHierz requested a review from a team as a code owner October 2, 2026 09:42
@GigaHierz

Copy link
Copy Markdown
Contributor Author

Review points addressed in 5d448d1.

  • Redirects: exact /infra-partners/operators/migrate-node entry added; all three migrate-node redirects go straight to /operate/notices/op-geth-deprecation, no chains.
  • public-rpc-node: a warning that a public RPC node needs NODE_TYPE=full or archive, because minimal fully prunes transaction lookups so eth_getTransactionByHash returns null (checked against the compose start script and reth's pruning code).
  • RETH_MIGRATION.md from the compose repo is linked from the run-node callout and the notice.
  • The keystore-extraction section moved to home/celo-l1.mdx, text and command unchanged.
  • Also applied: callouts link the notice and no longer repeat the switch dates; the archive-datadir line states the fact; the run-node warning keeps "including one produced by the L1→L2 migration tool"; the FAQ answer covers running and upgrading; the l2-migration notice has a corrected description and names celo-migrate; the pre-migration block-number placeholder is explained.
  • Not applied: adding the image-tag variables to the configuration table (already documented in maintenance.mdx).

The PR body now lists the remaining op-geth mentions accurately. Follow-ups, not filed: the compose repo's MIGRATION.md and migrate.sh still point at the removed page; the compose env files ship OP_RETH__SNAPSHOT=true where the docs say the default is false.

mint broken-links --check-redirects and the orphan check pass; a trial merge with #2345 is conflict-free.

@palango palango left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, this covers everything from my last round. The exact /infra-partners/operators/migrate-node redirect is in and all three migrate-node sources go straight to the notice, so there are no chains. The NODE_TYPE=minimal warning matches what start-op-reth.sh does, and the archive path for pre-L2 state still holds: op-reth gets --rollup.historicalrpc from OP_RETH__HISTORICAL_RPC or the local legacy node, as archive-node and configuration describe. CI is green and the branch merges cleanly with #2350 and #2353.

One correction, and it is my mistake: migrate.sh in the compose repo doesn't link the docs, only MIGRATION.md (lines 5 and 11) does. Please drop migrate.sh from the follow-up line in the PR body, since the body becomes the squash commit. The inline comments are optional nits.

These instructions use `op-reth`, Celo's supported execution client. A fresh node starts from an empty datadir and bootstraps from a published snapshot (required on mainnet) or, on Celo Sepolia, syncs from genesis — no L1 data migration required.

Support for `op-geth` ended on each network's switch date — see [End of Support for op-geth](/operate/notices/op-geth-deprecation) for the dates, and the **Still running op-geth?** notes at the end of this guide.
Support for `op-geth` has ended, and a node still running it can follow the wrong chain; see [End of Support for op-geth](/operate/notices/op-geth-deprecation). To switch an existing mainnet node, [RETH_MIGRATION.md](https://github.com/celo-org/celo-l2-node-docker-compose/blob/main/RETH_MIGRATION.md) in the compose repository describes running `op-reth` alongside `op-geth` on an empty datadir, repointing `op-node` with `--l2.enginekind=reth`, and moving traffic over once `op-reth` reaches the chain tip.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: RETH_MIGRATION.md covers Celo Sepolia too, so "existing mainnet node" could just be "existing node" (same on the notice). "alongside op-geth on an empty datadir" can also read as op-geth's datadir being empty; maybe "running op-reth on its own empty datadir alongside op-geth".

Comment thread home/celo-l1.mdx

## Extract a key from the old Geth keystore

The old geth keystore API is not supported anymore, but you can extract your private key by using [cast](https://book.getfoundry.sh/cast/)'s `decrypt-keystore` command.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit, now that this sits on its own page: AGENTS.md §4 would trim it to something like "To extract a private key from an old geth keystore, pass the keystore directory and key name to Foundry's cast wallet decrypt-keystore:". "Geth" in the heading and "geth" here also differ.

An L2 archive node starts from an empty datadir, like a full node — no migrated L1 data is required. To serve pre-L2 historical state, you additionally need one of:

1. A non-migrated Celo L1 archive node datadir (the compose setup runs a legacy archive node from it). Do not attempt to migrate an archive datadir.
1. A non-migrated Celo L1 archive node datadir (the compose setup runs a legacy archive node from it). The compose setup uses this datadir as it is.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: the new sentence repeats the parenthetical. "(the compose setup runs a legacy archive node from it as-is)" says both in one clause.

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.

task: remove or reframe op-geth how-to content now that support has ended

2 participants