Skip to content

test(integration): TestGigaMixedRelease — giga vs v2 read parity under conformance load#489

Merged
bdchatham merged 2 commits into
mainfrom
test/giga-mixed-release
Jul 15, 2026
Merged

test(integration): TestGigaMixedRelease — giga vs v2 read parity under conformance load#489
bdchatham merged 2 commits into
mainfrom
test/giga-mixed-release

Conversation

@bdchatham

Copy link
Copy Markdown
Collaborator

Summary

Adds a nightly integration suite that demonstrates giga_store_migration.md's central safety claim under real load: "Giga SS Store is a per-node SS change that is invisible to the network." TestGigaStoreMigration already proves the migration mechanics (wipe, resync, config-patch anchor, healthy boot); this test proves the read/write behavioral parity the doc claims, by running the same 749-case release conformance harness against a giga node and a plain (v2) node side by side.

  • Provisions one 4-validator chain + 2 plain RPC followers (identical to TestRelease's fixture).
  • Migrates one follower to giga (evm-ss-split=true) via the existing StateSync+GigaStore workflow — the other stays at the shipped default (every node ships ss-enable=true already; evm-ss-split=false is the only thing distinguishing "giga").
  • Runs the external release-test harness against both concurrently, each under its own funded admin account (no shared-account tx-sequence race between the two runs).
  • Parity = both runs pass identically, same exit code, regardless of which storage layout answered the queries.

Design note

waitJobErr mirrors the existing waitJob polling loop but returns an error instead of calling t.Fatalf, since it runs in a goroutine (only the test's own goroutine may call T.FailNow). Job/Secret creation and t.Cleanup registration stay on the main goroutine; only the wait-and-log step is concurrent.

Honest ceiling, documented in the test doc comment: the release-test image is external/opaque to this suite — if any of its 749 cases assert global chain state (vs. state scoped to their own admin account), concurrent runs could in principle cross-talk in a way neither log explains. Noted fallback: run the two harness Jobs sequentially instead of concurrently if that's ever observed.

Status

Compiles clean (go test -c -tags integration), discovered by -list, gofmt/vet clean. Not yet run against a live cluster — this PR is out for a kubernetes-specialist + sei-network-specialist review pass first (the concurrent-harness-against-shared-chain shape is new territory), and a full run is ~80-100 minutes of cluster time. Will report the first live run's result before requesting merge.

🤖 Generated with Claude Code

…r conformance load

Proves giga_store_migration.md's central safety claim ("Giga SS Store is a
per-node SS change that is invisible to the network") with real load
instead of a healthy-boot check. Provisions one 4-validator chain with
two plain RPC followers, migrates one follower to giga (evm-ss-split=true)
via the same StateSync recipe TestGigaStoreMigration drives, leaves the
other at the shipped default (ss-enable=true ships on every node already;
evm-ss-split=false is the only thing distinguishing "giga"), then runs
the external release-test conformance harness (749 cases) against both
followers concurrently under separate funded admin accounts, so the two
runs never race a shared account's tx sequence.

waitJobErr mirrors the existing waitJob polling loop but returns an error
instead of calling t.Fatalf, so the two harness waits can run in
goroutines (T.FailNow, which Fatalf calls, must only run on the test's
own goroutine; job/secret creation and t.Cleanup registration stay on the
main goroutine, only the wait-and-log step is concurrent).

Honest ceiling documented in the test: the release-test image is
external/opaque, so global-state cross-talk between the two concurrent
runs can't be fully ruled out from this side; the noted fallback is
running the two harness Jobs sequentially if that's ever observed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@cursor

cursor Bot commented Jul 14, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

Round-1 review, both lenses independently: the fixture provisioned
validators with releaseBaseConfig (no snapshot production), but the
migration workflow wipes rpcNodes[1] and re-bootstraps it via CometBFT
state-sync — with nothing producing a snapshot, catch-up depended on the
chain organically reaching the sei-config default interval (2000 blocks),
an unstated and fragile dependency the sibling state-sync tests' own
comments name as load-bearing.

Fix: overlay snapshotProductionConfig on the validators (interval 50, the
same config bringUpStateSyncFollower uses), zero it on both followers
(rpcConfig; a follower is a witness, not a producer), and add the
matching WaitHeightAdvances gate before the migration workflow so a
snapshot demonstrably exists first. Also adds the witness-freshness gate
the sibling fixture applies (catching_up is a one-way latch, so a
diverging witness would otherwise fail the migration's light-client
cross-check opaquely instead of at a named gate) and moves the
JobFailed-path log read onto a fresh context, matching the deadline-path
read already in waitJobErr.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@bdchatham
bdchatham merged commit 9c6d0f3 into main Jul 15, 2026
4 checks passed
@bdchatham
bdchatham deleted the test/giga-mixed-release branch July 15, 2026 00:08
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