Skip to content

feat: genesis ceremony controller orchestration#25

Draft
bdchatham wants to merge 5 commits intomainfrom
feat/genesis-ceremony-controller
Draft

feat: genesis ceremony controller orchestration#25
bdchatham wants to merge 5 commits intomainfrom
feat/genesis-ceremony-controller

Conversation

@bdchatham
Copy link
Collaborator

@bdchatham bdchatham commented Mar 25, 2026

Summary

  • Adds group-level genesis ceremony configuration to SeiNodeGroup (GenesisCeremonyConfig, GenesisS3Destination) and per-node genesis config to ValidatorSpec (GenesisCeremonyNodeConfig)
  • Node controller builds the full Init plan upfront for genesis nodes (no deferred steps) — plan execution order is the single source of truth for orchestration
  • Group controller coordinates the genesis assembly flow: drives the assembly task, collects node IDs from PreInit sidecars, and pushes static peers to unblock Init transition

New CRD types

Type Location Purpose
GenesisCeremonyConfig SeiNodeGroupSpec.Genesis Group-level genesis params (chain-id, staking, accounts, S3 dest)
GenesisCeremonyNodeConfig ValidatorSpec.GenesisCeremony Per-node genesis params injected by group controller
GenesisS3Destination GenesisCeremonyConfig.GenesisS3 S3 bucket/prefix/region for genesis artifacts

Dependencies

Test plan

  • make generate produces correct deepcopy methods for new types
  • make test passes (existing unit tests)
  • Verify genesis PreInit Job pod spec: copy-seid init container, seictl serve restartable init, sleep infinity main
  • Verify generateSeiNode injects GenesisCeremony and spec.Genesis.S3 when group genesis is enabled
  • E2E: genesis ceremony flow with 3-node SeiNodeGroup (PR 9, deferred)
  • Update seictl image label once seictl build completes

Add group-level genesis ceremony support to SeiNodeGroup and per-node
genesis configuration to SeiNode/ValidatorSpec. The node controller
builds the full Init plan upfront (no deferred steps) and the group
controller coordinates assembly, peer collection, and static peer
injection.

New CRD types: GenesisCeremonyConfig, GenesisCeremonyNodeConfig,
GenesisS3Destination, GenesisS3Source. New group status fields:
AssemblyPlan, GenesisHash, GenesisS3URI.

Depends on seictl genesis ceremony client types (sei-protocol/seictl#40).
- Fix gofmt alignment in SeiNodeGroupPhase and genesis constants
- Fix goimports grouping (seictl is external, not local)
- Replace interface{} with any (modernize)
- Remove deprecated result.Requeue usage
- Suppress unused params in pollAssemblyTask stub (PR-3)
@bdchatham bdchatham force-pushed the feat/genesis-ceremony-controller branch from 5047c1f to a342413 Compare March 25, 2026 16:09
- Remove GroupPhaseGenesisCeremony — genesis work runs during the
  existing Initializing phase, keyed off spec.genesis != nil
- Rename AssemblyPlan to InitPlan for consistency with node-level
  naming and to avoid scoping the field to assembly-only workloads
- Move design docs from tide/ to .tide/, remove tide/ and docs/
Remove the genesis-specific PreInit Job (sleep infinity + copy-seid),
handleGenesisPreInitComplete, and all isGenesisCeremonyNode branches in
pre_init.go and job.go. Genesis nodes now skip PreInit entirely.

The full genesis InitPlan includes: generate-identity, generate-gentx,
upload-genesis-artifacts, await-genesis-assembly (barrier), then the
standard configure-genesis, config-apply, discover-peers, config-validate,
mark-ready sequence.

WIP: executePlan still uses the old submit/poll model. Next step is the
TaskExecutionInterface refactor to support the await barrier natively.
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