Skip to content

chore(platform): bump DefaultSidecarImage to seictl built against sei-config v0.0.14#204

Merged
bdchatham merged 1 commit intomainfrom
chore/bump-default-sidecar-to-sei-config-v0.0.14
May 8, 2026
Merged

chore(platform): bump DefaultSidecarImage to seictl built against sei-config v0.0.14#204
bdchatham merged 1 commit intomainfrom
chore/bump-default-sidecar-to-sei-config-v0.0.14

Conversation

@bdchatham
Copy link
Copy Markdown
Collaborator

@bdchatham bdchatham commented May 8, 2026

Summary

The current DefaultSidecarImage (d3ecb1a0d0f76366) is built against sei-config v0.0.13. Its BuildRegistry() doesn't include the EVM.EnabledLegacySeiApis field added in sei-config v0.0.14, so any SND with spec.template.spec.overrides["evm.enabled_legacy_sei_apis"] hits "unknown override key" in the sidecar's ApplyOverrides (at sei-config/io.go:79-80) and the configure-genesis task fails.

Bumping to a2af4e1b8ed4 — built today from seictl v0.0.49 (commit fb39223e5682) against sei-config v0.0.14.

Empirical verification

Extracted both binaries and inspected vendored sei-config + registered field:

Old (d3ecb1a0d0f76366):
  /go/pkg/mod/github.com/sei-protocol/sei-config@v0.0.13
  enabled_legacy_sei_apis: 0 occurrences

New (a2af4e1b8ed4):
  /go/pkg/mod/github.com/sei-protocol/sei-config@v0.0.14
  enabled_legacy_sei_apis: 3 occurrences (field name + toml tag + registry key path)

Why this matters

Unblocks the harbor nightly release-test orchestrator's seictl nd apply --override evm.enabled_legacy_sei_apis=sei_getLogs,sei_getBlockByNumber,sei_getBlockByHash line. Without this bump, the orchestrator-side seictl can write the override into the SND's overrides map (it knows the field at v0.0.14), but the in-pod sidecar can't apply it (it doesn't know the field at v0.0.13). Bumping the default sidecar aligns both ends of the override pipeline at sei-config v0.0.14.

After this lands, the override will succeed end-to-end and the qa harness's ~16 sei_* tests will start running. From there: parity assertions can validate sei_getLogs matches eth_getLogs shape where they should agree, and the synthetic-tx coverage stays load-bearing.

Tests

  • go build ./... — green
  • go test ./... — green (no test exercises the constant directly; the binary path is unchanged)

Test plan

  • CI builds new controller image
  • Manifest update bumps the controller image in harbor / production clusters
  • Confirm new controller pods spawn SeiNodes with the new sidecar image
  • Re-add --override evm.enabled_legacy_sei_apis=... to the harbor nightly orchestrator (separate platform PR)
  • Trigger a manual release-test run; confirm sei_*-using tests no longer return -32601 not enabled on this node

…-config v0.0.14

The current default sidecar (d3ecb1a0d0f76366) is built against
sei-config v0.0.13. Its BuildRegistry() doesn't include the
EVM.EnabledLegacySeiApis field added in sei-config v0.0.14, so any
SND with spec.template.spec.overrides["evm.enabled_legacy_sei_apis"]
hits "unknown override key" in the sidecar's ApplyOverrides at
sei-config/io.go:79-80 and the configure-genesis task fails.

Bumping to a2af4e1b8ed4 — built today from seictl v0.0.49 (commit
fb39223e5682) against sei-config v0.0.14. Verified empirically by
extracting the binary and grepping for the field name and registry
key path.

Empirical verification:
  Old (d3ecb1a0d0f76366): /go/pkg/mod/github.com/sei-protocol/sei-config@v0.0.13
                          enabled_legacy_sei_apis: 0 occurrences in binary
  New (a2af4e1b8ed4):    /go/pkg/mod/github.com/sei-protocol/sei-config@v0.0.14
                          enabled_legacy_sei_apis: 3 occurrences (field name +
                                                  toml tag + registry key path)

Unblocks the harbor nightly release-test orchestrator's --override
evm.enabled_legacy_sei_apis=... line which would otherwise be rejected
by the in-pod sidecar's ApplyOverrides registry check.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bdchatham bdchatham merged commit 2a8ccf0 into main May 8, 2026
2 checks passed
bdchatham added a commit that referenced this pull request May 8, 2026
The controller validates the override map at intent-build time before
forwarding to the sidecar. Without sei-config v0.0.14 in the controller
binary, BuildRegistry() doesn't know evm.enabled_legacy_sei_apis and
the validation rejects:

  validating config-apply: config-apply: invalid intent:
  [[ERROR] overrides.evm.enabled_legacy_sei_apis: unknown config field
   "evm.enabled_legacy_sei_apis"]

The in-pod sidecar already had v0.0.14 (per #204's DefaultSidecarImage
bump). The controller is the third sei-config layer that needs the bump
for end-to-end override pipeline correctness.

Tests pass. The go.sum churn is a go mod tidy artifact — sei-config
v0.0.14 has a simpler transitive dep tree than v0.0.13.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
bdchatham added a commit that referenced this pull request May 8, 2026
* chore(deps): bump sei-config v0.0.13 to v0.0.14

The controller validates the override map at intent-build time before
forwarding to the sidecar. Without sei-config v0.0.14 in the controller
binary, BuildRegistry() doesn't know evm.enabled_legacy_sei_apis and
the validation rejects:

  validating config-apply: config-apply: invalid intent:
  [[ERROR] overrides.evm.enabled_legacy_sei_apis: unknown config field
   "evm.enabled_legacy_sei_apis"]

The in-pod sidecar already had v0.0.14 (per #204's DefaultSidecarImage
bump). The controller is the third sei-config layer that needs the bump
for end-to-end override pipeline correctness.

Tests pass. The go.sum churn is a go mod tidy artifact — sei-config
v0.0.14 has a simpler transitive dep tree than v0.0.13.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(planner): set MaxRetries on TaskDiscoverPeers via centralized lookup

discoverPeersTask had MaxRetries=0 (Go zero value) at both planner sites,
so the executor's retry branch (executor.go:189) short-circuited and
called failTask on the first ExecutionFailed. The SeiNode went terminal
PhaseFailed, the parent SND.status.phase computed to Failed, and any
caller of `seictl nd watch --until=Ready` exited 65 immediately.

Reproduced when the harbor nightly orchestrator co-applies validator +
RPC fleet SNDs: discover-peers fires on the RPC fleet's first reconcile
while the validator's pods aren't yet serving Tendermint RPC. The
sidecar's DNSEndpointsSource.Discover returns
"no reachable peers found via dnsEndpoints (1 endpoints tried)" — a
plain fmt.Errorf, not wrapped in task.Terminal() — which the controller
sees as ExecutionFailed.

Adds discoverPeersMaxRetries=20 (~9 minutes with the executor's
exponential-backoff capped at 30s/attempt). Also refactors the existing
genesisConfigureMaxRetries and groupAssemblyMaxRetries sites to use the
same lookup — the prior pattern of `if taskType == X { t.MaxRetries =
... }` was sprinkled across three plan-builders and would need a fourth
edit per future retry-aware task. Now: one switch in taskMaxRetries,
buildPlannedTask reads it, every call site gets the right MaxRetries
without per-task-type knowledge.

Tracking the deeper fix (cross-watch peer SeiNodes + refresh
DiscoverPeersTask.Sources on retry) in #210. Without that, this PR
papers over the symptom only when the snapshotted peer endpoint
eventually becomes reachable; if the snapshotted peer is deleted or
scaled away mid-plan, retries reuse the stale endpoint list.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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