Part of #1195 (Track 3). Blocked on MinaProtocol/mina#18826.
Goal
Rewrite the four docker-compose docs pages to mirror the existing Rosetta page (docs/exchange-operators/rosetta/docker-compose.mdx) — a thin narrative wrapper around canonical compose recipes living in MinaProtocol/mina. This removes the inline YAML and the tag drift that comes with it.
Why this approach (vs. inline + tag check, or build-time embed)
The Rosetta page is the proven model. It has dense, scrapeable content (services table, env-var tables, make targets, verification commands) that describes the contract — not the content — of the deployment. The actual docker-compose.yml lives in mina, which means:
- No drift. Tags, image names, and flags update in one place.
- AI agents prefer it. Modern coding agents (Claude Code, Cursor, etc.) follow GitHub links, clone, and run
make mainnet. A self-contained dir + README is the ideal artifact for that workflow — better than inline YAML they have to paste.
- Naive RAG indexers prefer all-in-one, but
llms-full.txt already serves that crowd at the bundle level.
Inline + drift-check CI was rejected: every release would re-trigger a paste cycle. Build-time embed was rejected: extra CI complexity for marginal benefit once we have the wrapper pattern.
Pages to rewrite
docs/node-operators/block-producer-node/docker-compose.mdx
docs/node-operators/archive-node/docker-compose.mdx
docs/node-operators/snark-workers/docker-compose.mdx
docs/node-operators/seed-peers/docker-compose.mdx
Page template (mirror Rosetta exactly)
Each rewritten page should have these sections, in this order, matching docs/exchange-operators/rosetta/docker-compose.mdx:
- Intro paragraph + link to canonical dir in mina (e.g.
mina/src/app/cli/docker-compose/block-producer/).
- Quick start —
git clone, cd, cp example.<network>.env .env, vi .env, docker compose up -d / make <network>.
- Services overview — markdown table.
- Configuration — env-var tables grouped by concern (Docker images, Network, Ports, role-specific).
- Data persistence — bind-mount table.
- Make targets — table.
- Verifying the deployment — sample commands.
- Clean start —
make clean + restart.
Strip all inline services: YAML.
Acceptance criteria
Optional CI follow-up (separate PR)
Two cheap drift-detection checks:
- Link liveness — assert every
github.com/MinaProtocol/mina/... URL in docker-compose.mdx files resolves to an existing path on the referenced branch.
- Contract drift — parse the canonical
docker-compose.yml and .env.example from mina and assert that env vars / service names / make targets named in the doc tables match. Catches MINA_REST_PORT renames and similar.
Both are short Node scripts, run in the same CI step as validate-docker-images.
Blocked on
MinaProtocol/mina#18826 — the canonical compose dirs for block-producer, snark-worker, seed-peer, and archive must land in mina before the docs2 wrappers have anywhere to point.
Part of #1195 (Track 3). Blocked on MinaProtocol/mina#18826.
Goal
Rewrite the four docker-compose docs pages to mirror the existing Rosetta page (
docs/exchange-operators/rosetta/docker-compose.mdx) — a thin narrative wrapper around canonical compose recipes living inMinaProtocol/mina. This removes the inline YAML and the tag drift that comes with it.Why this approach (vs. inline + tag check, or build-time embed)
The Rosetta page is the proven model. It has dense, scrapeable content (services table, env-var tables, make targets, verification commands) that describes the contract — not the content — of the deployment. The actual
docker-compose.ymllives in mina, which means:make mainnet. A self-contained dir + README is the ideal artifact for that workflow — better than inline YAML they have to paste.llms-full.txtalready serves that crowd at the bundle level.Inline + drift-check CI was rejected: every release would re-trigger a paste cycle. Build-time embed was rejected: extra CI complexity for marginal benefit once we have the wrapper pattern.
Pages to rewrite
docs/node-operators/block-producer-node/docker-compose.mdxdocs/node-operators/archive-node/docker-compose.mdxdocs/node-operators/snark-workers/docker-compose.mdxdocs/node-operators/seed-peers/docker-compose.mdxPage template (mirror Rosetta exactly)
Each rewritten page should have these sections, in this order, matching
docs/exchange-operators/rosetta/docker-compose.mdx:mina/src/app/cli/docker-compose/block-producer/).git clone,cd,cp example.<network>.env .env,vi .env,docker compose up -d/make <network>.make clean+ restart.Strip all inline
services:YAML.Acceptance criteria
docker-compose.ymlcontent remains on these pages.validate-docker-imagesscript either dropped for these pages or pointed at the canonical files in mina.llms-full.txtregenerated.Optional CI follow-up (separate PR)
Two cheap drift-detection checks:
github.com/MinaProtocol/mina/...URL indocker-compose.mdxfiles resolves to an existing path on the referenced branch.docker-compose.ymland.env.examplefrom mina and assert that env vars / service names / make targets named in the doc tables match. CatchesMINA_REST_PORTrenames and similar.Both are short Node scripts, run in the same CI step as
validate-docker-images.Blocked on
MinaProtocol/mina#18826 — the canonical compose dirs for block-producer, snark-worker, seed-peer, and archive must land in mina before the docs2 wrappers have anywhere to point.