Problem
sei-config currently defaults WriteMode to cosmos_only to not break stable seid v6.5.1, while nightly seid (main, unreleased) requires memiavl_only. To bridge this gap, memiavl_only is hardcoded as explicit overrides in the seitask-runner scenario SND templates (sei-k8s-controller#357) rather than driven by sei-config defaults. This is brittle: every time a write mode changes with a new seid version, someone has to manually update scenario templates and remember to remove those overrides once the sei-config default catches up to the new release.
The current workaround in sei-k8s-controller#357:
overrides:
storage.state_commit.write_mode: memiavl_only
storage.state_store.write_mode: memiavl_only
These overrides exist only because sei-config cannot express "give me the right defaults for seid nightly." They will need to be manually removed once seid v6.6.0 is tagged.
Impact
Ongoing operator burden every time a new seid version ships a write mode change. Risk of hardcoded overrides lingering past their intended lifespan — silent misconfiguration that manifests only when someone upgrades the seid binary without removing the now-stale template override.
Relevant experts
platform-engineer — sei-config library design, seictl sidecar config generation
Proposed approach
sei-config should gain a mechanism to express version-aware defaults so callers can request the correct defaults for a given seid version without knowing the internal schema version mapping. Three options discussed:
-
DefaultForVersion(seidVersion string) — new entry point that parses a seid semver and returns mode-appropriate defaults. Most explicit; ties sei-config API surface to seid versioning.
-
SeidVersionForSchema map + caller-side comparison — SeidVersionForSchema (already defined as a skeleton in migrate.go) paired with a MinSeidVersionForSchema(schemaVersion int) string helper. Callers compare the running seid version against the map and call DefaultForMode with the right schema. No new entry point; callers own the comparison logic.
-
Image-tag–aware config in seictl — seictl reads the seid image tag from the SeiNode spec, parses the version, and selects the right sei-config schema version before generating app.toml. sei-config stays version-agnostic; version awareness lives in the callsite.
Option 3 is likely the right level of abstraction — sei-config is a leaf library and shouldn't need to know about seid release cadence. The version-to-schema mapping belongs closer to the deployment layer (seictl or sei-k8s-controller).
Acceptance criteria
Out of scope
- The seid v6.6.0 release itself
- Changes to seitask-runner templates (downstream; cleaned up once this resolves)
- Any sei-chain write mode changes beyond
cosmos_only → memiavl_only
References
- sei-config#27 — reverted default to
cosmos_only (this issue's root cause)
- sei-k8s-controller#357 — hardcoded
memiavl_only workaround (to be removed)
migrate.go — SeidVersionForSchema skeleton
Problem
sei-configcurrently defaultsWriteModetocosmos_onlyto not break stable seid v6.5.1, while nightly seid (main, unreleased) requiresmemiavl_only. To bridge this gap,memiavl_onlyis hardcoded as explicit overrides in theseitask-runnerscenario SND templates (sei-k8s-controller#357) rather than driven by sei-config defaults. This is brittle: every time a write mode changes with a new seid version, someone has to manually update scenario templates and remember to remove those overrides once the sei-config default catches up to the new release.The current workaround in
sei-k8s-controller#357:These overrides exist only because sei-config cannot express "give me the right defaults for seid nightly." They will need to be manually removed once seid v6.6.0 is tagged.
Impact
Ongoing operator burden every time a new seid version ships a write mode change. Risk of hardcoded overrides lingering past their intended lifespan — silent misconfiguration that manifests only when someone upgrades the seid binary without removing the now-stale template override.
Relevant experts
platform-engineer— sei-config library design, seictl sidecar config generationProposed approach
sei-config should gain a mechanism to express version-aware defaults so callers can request the correct defaults for a given seid version without knowing the internal schema version mapping. Three options discussed:
DefaultForVersion(seidVersion string)— new entry point that parses a seid semver and returns mode-appropriate defaults. Most explicit; ties sei-config API surface to seid versioning.SeidVersionForSchemamap + caller-side comparison —SeidVersionForSchema(already defined as a skeleton inmigrate.go) paired with aMinSeidVersionForSchema(schemaVersion int) stringhelper. Callers compare the running seid version against the map and callDefaultForModewith the right schema. No new entry point; callers own the comparison logic.Image-tag–aware config in seictl — seictl reads the seid image tag from the
SeiNodespec, parses the version, and selects the right sei-config schema version before generatingapp.toml. sei-config stays version-agnostic; version awareness lives in the callsite.Option 3 is likely the right level of abstraction — sei-config is a leaf library and shouldn't need to know about seid release cadence. The version-to-schema mapping belongs closer to the deployment layer (seictl or sei-k8s-controller).
Acceptance criteria
storage.state_commit.write_mode: memiavl_onlyoverrides removed fromsei-k8s-controllerscenario SND templatesmemiavl_onlywithout explicit template overridescosmos_onlywithout explicit overridesOut of scope
cosmos_only→memiavl_onlyReferences
cosmos_only(this issue's root cause)memiavl_onlyworkaround (to be removed)migrate.go—SeidVersionForSchemaskeleton