From 2a4f48440f11a8571bf9762bc8cec7d8df52d842 Mon Sep 17 00:00:00 2001 From: Wen Date: Thu, 21 May 2026 13:34:38 -0700 Subject: [PATCH 1/7] ci: probe Autobahn Chain Operation Test (CON-256) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirror the existing CometBFT "Chain Operation Test" matrix entry with the standard Autobahn env (AUTOBAHN=true GIGA_EXECUTOR=true GIGA_STORAGE=true GIGA_OCC=true) and the same script list. Goal is to see which sub-step Autobahn breaks on: - snapshot_operation.yaml — exercises snapshot-based state import - statesync_operation.yaml — expected to fail (Autobahn doesn't drive CometBFT-style state sync today) - verify_statesync_flatkv_digest.sh - verify_cross_validator_flatkv_digest.sh This is a draft probe; once CI tells us exactly which steps fail under Autobahn, the script list can be carved down to the working subset (or the entry deleted if nothing useful runs without Autobahn state sync). Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/integration-test.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index da8b62e2fc..a6880f2d74 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -88,6 +88,25 @@ jobs: "./integration_test/contracts/verify_cross_validator_flatkv_digest.sh" ] }, + { + # Dumb-enable variant to see which sub-step Autobahn breaks + # on. statesync_operation is expected to fail (Autobahn + # doesn't drive CometBFT-style state sync) — once we + # confirm which exact steps work or fail, we can either + # carve out a narrower script list or wait for Autobahn + # state sync to land. + name: "Autobahn Chain Operation Test", + env: "AUTOBAHN=true GIGA_EXECUTOR=true GIGA_STORAGE=true GIGA_OCC=true", + scripts: [ + "until [ $(cat build/generated/rpc-launch.complete |wc -l) = 1 ]; do sleep 10; done", + "until [[ $(docker exec sei-rpc-node build/seid status |jq -M -r .SyncInfo.latest_block_height) -gt 10 ]]; do sleep 10; done", + "echo rpc node started", + "python3 integration_test/scripts/runner.py integration_test/chain_operation/snapshot_operation.yaml", + "python3 integration_test/scripts/runner.py integration_test/chain_operation/statesync_operation.yaml", + "./integration_test/contracts/verify_statesync_flatkv_digest.sh", + "./integration_test/contracts/verify_cross_validator_flatkv_digest.sh" + ] + }, { name: "Distribution Module", scripts: [ From b1ae27f9e973484eff037a70b916552fcf06ec1b Mon Sep 17 00:00:00 2001 From: Wen Date: Thu, 21 May 2026 14:21:22 -0700 Subject: [PATCH 2/7] ci: forward Autobahn/Giga env to rpc node so it can join Autobahn cluster MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Chain Operation Test runs an extra `sei-rpc-node` container alongside the 4-validator cluster. Validators read AUTOBAHN/GIGA_EXECUTOR/GIGA_OCC from docker-compose, but `make run-rpc-node-skipbuild` only forwarded GIGA_STORAGE and RECEIPT_BACKEND — so under AUTOBAHN=true the rpc node came up in CometBFT mode, couldn't talk to the Autobahn validators, and the CometBFT RPC server never bound (state sync hung on connection refused). Forward the four missing vars (AUTOBAHN, GIGA_EXECUTOR, GIGA_OCC, CLUSTER_SIZE) in both run-rpc-node targets, and mirror the validator step4_config_override.sh logic in the rpc node's step1: generate autobahn.json with `seid tendermint gen-autobahn-config` against the shared build/generated/node_* dirs (mounted in), inject autobahn-config-file into config.toml, and apply giga_executor / occ_enabled to app.toml when requested. Co-Authored-By: Claude Opus 4.7 (1M context) --- Makefile | 8 +++ .../rpcnode/scripts/step1_configure_init.sh | 52 +++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/Makefile b/Makefile index 0726b627cc..fb75002685 100644 --- a/Makefile +++ b/Makefile @@ -257,6 +257,10 @@ run-rpc-node: build-rpc-node -p 26668-26670:26656-26658 \ --platform linux/x86_64 \ --env GIGA_STORAGE=${GIGA_STORAGE} \ + --env GIGA_EXECUTOR=${GIGA_EXECUTOR} \ + --env GIGA_OCC=${GIGA_OCC} \ + --env AUTOBAHN=${AUTOBAHN} \ + --env CLUSTER_SIZE=${CLUSTER_SIZE} \ --env RECEIPT_BACKEND=${RECEIPT_BACKEND} \ sei-chain/rpcnode .PHONY: run-rpc-node @@ -276,6 +280,10 @@ run-rpc-node-skipbuild: build-rpc-node --platform linux/x86_64 \ --env SKIP_BUILD=true \ --env GIGA_STORAGE=${GIGA_STORAGE} \ + --env GIGA_EXECUTOR=${GIGA_EXECUTOR} \ + --env GIGA_OCC=${GIGA_OCC} \ + --env AUTOBAHN=${AUTOBAHN} \ + --env CLUSTER_SIZE=${CLUSTER_SIZE} \ --env RECEIPT_BACKEND=${RECEIPT_BACKEND} \ sei-chain/rpcnode .PHONY: run-rpc-node diff --git a/docker/rpcnode/scripts/step1_configure_init.sh b/docker/rpcnode/scripts/step1_configure_init.sh index d45e8380c9..51fd5f51d5 100755 --- a/docker/rpcnode/scripts/step1_configure_init.sh +++ b/docker/rpcnode/scripts/step1_configure_init.sh @@ -48,6 +48,58 @@ if [ -n "$RECEIPT_BACKEND" ]; then fi fi +# Enable Giga Executor if requested (must match validator app.toml so block +# execution semantics are identical when the RPC node replays blocks). +GIGA_EXECUTOR=${GIGA_EXECUTOR:-false} +GIGA_OCC=${GIGA_OCC:-false} +if [ "$GIGA_EXECUTOR" = "true" ]; then + echo "Enabling Giga Executor for RPC node..." + if grep -q "\[giga_executor\]" ~/.sei/config/app.toml; then + sed -i 's/enabled = false/enabled = true/' ~/.sei/config/app.toml + else + echo "" >> ~/.sei/config/app.toml + echo "[giga_executor]" >> ~/.sei/config/app.toml + echo "enabled = true" >> ~/.sei/config/app.toml + echo "occ_enabled = false" >> ~/.sei/config/app.toml + fi + if [ "$GIGA_OCC" = "true" ]; then + sed -i 's/occ_enabled = false/occ_enabled = true/' ~/.sei/config/app.toml + else + sed -i 's/occ_enabled = true/occ_enabled = false/' ~/.sei/config/app.toml + fi +fi + +# Generate Autobahn (GigaRouter) config when the validators are running +# Autobahn consensus. The RPC node isn't a validator but still needs the +# same autobahn.json so it can decode validator messages and stay in sync. +# Reuse the validator node directories under build/generated/ (mounted into +# the container) so the keys/identities match the cluster. +AUTOBAHN=${AUTOBAHN:-false} +if [ "$AUTOBAHN" = "true" ]; then + echo "Generating Autobahn config for RPC node..." + AUTOBAHN_CONFIG="$HOME/.sei/config/autobahn.json" + + # Default to 4 (the docker-compose cluster size) when CLUSTER_SIZE is unset. + CLUSTER_SIZE=${CLUSTER_SIZE:-4} + NODE_DIRS="" + i=0 + while [ "$i" -lt "$CLUSTER_SIZE" ]; do + NODE_DIRS="$NODE_DIRS build/generated/node_${i}" + i=$((i + 1)) + done + + seid tendermint gen-autobahn-config $NODE_DIRS --output "$AUTOBAHN_CONFIG" + + # Inject autobahn-config-file path as a top-level key (must precede any + # [section] header so the TOML parser sees it at root scope). + if grep -q "autobahn-config-file" ~/.sei/config/config.toml; then + sed -i 's|autobahn-config-file = .*|autobahn-config-file = "'"$AUTOBAHN_CONFIG"'"|' ~/.sei/config/config.toml + else + sed -i '1s|^|autobahn-config-file = "'"$AUTOBAHN_CONFIG"'"\n|' ~/.sei/config/config.toml + fi + echo "Autobahn config written to $AUTOBAHN_CONFIG" +fi + # Override state sync configs STATE_SYNC_RPC="192.168.10.10:26657" STATE_SYNC_PEER="2f9846450b7a3dcf4af1ac0082e3279c16744df8@172.31.9.18:26656,ec98c4a28a2023f4f976828c8a8e7127bfef4e1b@172.31.4.96:26656,b03014d67384fb0ef6ad992c77cefe4f9d2c1640@172.31.4.219:26656" From 75f383d61ec6db925528ffe8e06454fb2e9361f0 Mon Sep 17 00:00:00 2001 From: Wen Date: Thu, 21 May 2026 14:52:05 -0700 Subject: [PATCH 3/7] ci: trim Autobahn Chain Operation Test to validator-side checks Autobahn doesn't run the CometBFT state-sync reactor (gated by !gigaEnabled in sei-tendermint/node/node.go) and its BlockStore stays empty, so /status's SyncInfo.latest_block_height is always 0 (per the existing comment in integration_test/autobahn/autobahn_test.go). The dumb-enabled Autobahn Chain Operation matrix entry hung on the rpc-node `seid status` readiness loop and would have failed statesync_operation.yaml / verify_statesync_flatkv_digest.sh afterwards regardless. Keep the two parts that work without state sync: - snapshot_operation.yaml: pure filesystem check on a validator - verify_cross_validator_flatkv_digest.sh: compares FlatKV across the 4 validators at a shared committed height; validators commit blocks normally under Autobahn so this is meaningful. Patch verify_cross_validator_flatkv_digest.sh's node_height() to read last_block_height from /abci_info instead of `seid status` so it works under both consensus modes. Skip the rpc-node-side scripts until upstream Autobahn supports state sync; re-add then. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/integration-test.yml | 22 +++++++++---------- .../verify_cross_validator_flatkv_digest.sh | 9 ++++++-- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index a6880f2d74..e90042a912 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -89,21 +89,21 @@ jobs: ] }, { - # Dumb-enable variant to see which sub-step Autobahn breaks - # on. statesync_operation is expected to fail (Autobahn - # doesn't drive CometBFT-style state sync) — once we - # confirm which exact steps work or fail, we can either - # carve out a narrower script list or wait for Autobahn - # state sync to land. + # Trimmed subset of Chain Operation Test: only the validator-side + # checks that work without CometBFT state sync. Autobahn doesn't + # run the statesync reactor (sei-tendermint/node/node.go gates it + # on !gigaEnabled) so the rpc-node→validator state sync path and + # everything that asserts on it (statesync_operation.yaml, + # verify_statesync_flatkv_digest.sh, the rpc-node `seid status` + # readiness loop) are skipped here. Re-add them once Autobahn + # supports state sync. The cross-validator FlatKV digest check + # is kept because validators commit blocks normally under + # Autobahn, so the comparison is still meaningful and catches + # silent FlatKV drift. name: "Autobahn Chain Operation Test", env: "AUTOBAHN=true GIGA_EXECUTOR=true GIGA_STORAGE=true GIGA_OCC=true", scripts: [ - "until [ $(cat build/generated/rpc-launch.complete |wc -l) = 1 ]; do sleep 10; done", - "until [[ $(docker exec sei-rpc-node build/seid status |jq -M -r .SyncInfo.latest_block_height) -gt 10 ]]; do sleep 10; done", - "echo rpc node started", "python3 integration_test/scripts/runner.py integration_test/chain_operation/snapshot_operation.yaml", - "python3 integration_test/scripts/runner.py integration_test/chain_operation/statesync_operation.yaml", - "./integration_test/contracts/verify_statesync_flatkv_digest.sh", "./integration_test/contracts/verify_cross_validator_flatkv_digest.sh" ] }, diff --git a/integration_test/contracts/verify_cross_validator_flatkv_digest.sh b/integration_test/contracts/verify_cross_validator_flatkv_digest.sh index 3cf9000af8..502da74f71 100755 --- a/integration_test/contracts/verify_cross_validator_flatkv_digest.sh +++ b/integration_test/contracts/verify_cross_validator_flatkv_digest.sh @@ -72,9 +72,14 @@ ensure_seidb() { } node_height() { + # Read last_block_height from /abci_info, not `seid status`'s SyncInfo. + # Under Autobahn the CometBFT BlockStore isn't populated, so /status's + # SyncInfo.latest_block_height is always 0 (see autobahn_test.go). + # /abci_info queries the application directly and works under both + # CometBFT and Autobahn. local node=$1 - docker exec "$node" build/seid status 2>/dev/null \ - | jq -r '.SyncInfo.latest_block_height // "0"' 2>/dev/null \ + docker exec "$node" curl -s http://localhost:26657/abci_info 2>/dev/null \ + | jq -r '.result.response.last_block_height // "0"' 2>/dev/null \ || echo 0 } From f698ec5de80a705f40a217186ba247f94605c59c Mon Sep 17 00:00:00 2001 From: Wen Date: Thu, 21 May 2026 21:03:42 -0700 Subject: [PATCH 4/7] debug: dump /abci_info /status seid-status on one validator Validators are committing blocks (FlatKV version=2787 in logs) but my /abci_info-based node_height() returned 0 for all 4 the entire 180s wait window. Add a one-shot diagnostic that prints the raw responses from /abci_info, /status, and `seid status` on sei-node-0 before entering the wait loop, so we can see whether: - /abci_info is unreachable / 404 / returns different schema - last_block_height is omitted (proto3 zero-value omitempty) - my jq path is wrong - or something else entirely Will be removed once node_height() is fixed. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../verify_cross_validator_flatkv_digest.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/integration_test/contracts/verify_cross_validator_flatkv_digest.sh b/integration_test/contracts/verify_cross_validator_flatkv_digest.sh index 502da74f71..1f11a4cabd 100755 --- a/integration_test/contracts/verify_cross_validator_flatkv_digest.sh +++ b/integration_test/contracts/verify_cross_validator_flatkv_digest.sh @@ -83,6 +83,19 @@ node_height() { || echo 0 } +# Temporary diagnostic: prove what /abci_info actually returns on one +# validator before entering the wait loop. Remove once the wait loop +# is confirmed working under Autobahn. +echo "==== diagnostic: raw /abci_info from sei-node-0 ====" +docker exec sei-node-0 curl -sv http://localhost:26657/abci_info 2>&1 | head -40 || true +echo "==== diagnostic: raw /status from sei-node-0 ====" +docker exec sei-node-0 curl -s http://localhost:26657/status 2>/dev/null | head -c 800 || true +echo "" +echo "==== diagnostic: seid status from sei-node-0 ====" +docker exec sei-node-0 build/seid status 2>&1 | head -c 800 || true +echo "" +echo "==== end diagnostic ====" + # Wait until every validator reports chain height >= MIN_HEIGHT. We # require a small absolute floor so the comparison height after # subtracting COMPARE_BUFFER is still positive and meaningful. From 3cf0621397c0083e20e2ff47d4f6d1e87eb772f7 Mon Sep 17 00:00:00 2001 From: Wen Date: Fri, 22 May 2026 13:21:49 -0700 Subject: [PATCH 5/7] fix: correct /abci_info jq path (no JSON-RPC envelope on GET) Tendermint's REST-style GET endpoints return the bare result struct ({"response": {...}}), not the JSON-RPC envelope ({"jsonrpc","id","result"}) that POST / to the root would produce. My previous patch used the wrong path .result.response.last_block_height and silently fell back to "0", so the wait loop never observed any height and timed out at 180s even while validators were committing blocks at 2847+ in the background. Diagnostic from the prior CI run confirmed the response shape: {"response":{"data":"sei","last_block_height":"247", ...}} Also remove the one-shot diagnostic block now that the issue is identified. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../verify_cross_validator_flatkv_digest.sh | 29 +++++++------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/integration_test/contracts/verify_cross_validator_flatkv_digest.sh b/integration_test/contracts/verify_cross_validator_flatkv_digest.sh index 1f11a4cabd..431db015e6 100755 --- a/integration_test/contracts/verify_cross_validator_flatkv_digest.sh +++ b/integration_test/contracts/verify_cross_validator_flatkv_digest.sh @@ -72,30 +72,21 @@ ensure_seidb() { } node_height() { - # Read last_block_height from /abci_info, not `seid status`'s SyncInfo. - # Under Autobahn the CometBFT BlockStore isn't populated, so /status's - # SyncInfo.latest_block_height is always 0 (see autobahn_test.go). - # /abci_info queries the application directly and works under both - # CometBFT and Autobahn. + # Read last_block_height from /abci_info, the canonical "app committed + # height" source (env.App.Info() returns the cosmos-sdk BaseApp's + # cms.LastCommitID().Version), which is populated identically under + # both CometBFT and Autobahn consensus. + # + # Tendermint's REST-style GET endpoints return the bare result struct + # ({"response": {...}}), NOT the JSON-RPC envelope ({"result": {...}}) + # that POST / to the root would yield — hence the path is .response, + # not .result.response. local node=$1 docker exec "$node" curl -s http://localhost:26657/abci_info 2>/dev/null \ - | jq -r '.result.response.last_block_height // "0"' 2>/dev/null \ + | jq -r '.response.last_block_height // "0"' 2>/dev/null \ || echo 0 } -# Temporary diagnostic: prove what /abci_info actually returns on one -# validator before entering the wait loop. Remove once the wait loop -# is confirmed working under Autobahn. -echo "==== diagnostic: raw /abci_info from sei-node-0 ====" -docker exec sei-node-0 curl -sv http://localhost:26657/abci_info 2>&1 | head -40 || true -echo "==== diagnostic: raw /status from sei-node-0 ====" -docker exec sei-node-0 curl -s http://localhost:26657/status 2>/dev/null | head -c 800 || true -echo "" -echo "==== diagnostic: seid status from sei-node-0 ====" -docker exec sei-node-0 build/seid status 2>&1 | head -c 800 || true -echo "" -echo "==== end diagnostic ====" - # Wait until every validator reports chain height >= MIN_HEIGHT. We # require a small absolute floor so the comparison height after # subtracting COMPARE_BUFFER is still positive and meaningful. From abf8af79e115d45f8bacddfb34af981cccba14ca Mon Sep 17 00:00:00 2001 From: Wen Date: Tue, 26 May 2026 09:56:04 -0700 Subject: [PATCH 6/7] Revert "ci: forward Autobahn/Giga env to rpc node so it can join Autobahn cluster" This reverts commit b1ae27f9e973484eff037a70b916552fcf06ec1b. --- Makefile | 8 --- .../rpcnode/scripts/step1_configure_init.sh | 52 ------------------- 2 files changed, 60 deletions(-) diff --git a/Makefile b/Makefile index fb75002685..0726b627cc 100644 --- a/Makefile +++ b/Makefile @@ -257,10 +257,6 @@ run-rpc-node: build-rpc-node -p 26668-26670:26656-26658 \ --platform linux/x86_64 \ --env GIGA_STORAGE=${GIGA_STORAGE} \ - --env GIGA_EXECUTOR=${GIGA_EXECUTOR} \ - --env GIGA_OCC=${GIGA_OCC} \ - --env AUTOBAHN=${AUTOBAHN} \ - --env CLUSTER_SIZE=${CLUSTER_SIZE} \ --env RECEIPT_BACKEND=${RECEIPT_BACKEND} \ sei-chain/rpcnode .PHONY: run-rpc-node @@ -280,10 +276,6 @@ run-rpc-node-skipbuild: build-rpc-node --platform linux/x86_64 \ --env SKIP_BUILD=true \ --env GIGA_STORAGE=${GIGA_STORAGE} \ - --env GIGA_EXECUTOR=${GIGA_EXECUTOR} \ - --env GIGA_OCC=${GIGA_OCC} \ - --env AUTOBAHN=${AUTOBAHN} \ - --env CLUSTER_SIZE=${CLUSTER_SIZE} \ --env RECEIPT_BACKEND=${RECEIPT_BACKEND} \ sei-chain/rpcnode .PHONY: run-rpc-node diff --git a/docker/rpcnode/scripts/step1_configure_init.sh b/docker/rpcnode/scripts/step1_configure_init.sh index 51fd5f51d5..d45e8380c9 100755 --- a/docker/rpcnode/scripts/step1_configure_init.sh +++ b/docker/rpcnode/scripts/step1_configure_init.sh @@ -48,58 +48,6 @@ if [ -n "$RECEIPT_BACKEND" ]; then fi fi -# Enable Giga Executor if requested (must match validator app.toml so block -# execution semantics are identical when the RPC node replays blocks). -GIGA_EXECUTOR=${GIGA_EXECUTOR:-false} -GIGA_OCC=${GIGA_OCC:-false} -if [ "$GIGA_EXECUTOR" = "true" ]; then - echo "Enabling Giga Executor for RPC node..." - if grep -q "\[giga_executor\]" ~/.sei/config/app.toml; then - sed -i 's/enabled = false/enabled = true/' ~/.sei/config/app.toml - else - echo "" >> ~/.sei/config/app.toml - echo "[giga_executor]" >> ~/.sei/config/app.toml - echo "enabled = true" >> ~/.sei/config/app.toml - echo "occ_enabled = false" >> ~/.sei/config/app.toml - fi - if [ "$GIGA_OCC" = "true" ]; then - sed -i 's/occ_enabled = false/occ_enabled = true/' ~/.sei/config/app.toml - else - sed -i 's/occ_enabled = true/occ_enabled = false/' ~/.sei/config/app.toml - fi -fi - -# Generate Autobahn (GigaRouter) config when the validators are running -# Autobahn consensus. The RPC node isn't a validator but still needs the -# same autobahn.json so it can decode validator messages and stay in sync. -# Reuse the validator node directories under build/generated/ (mounted into -# the container) so the keys/identities match the cluster. -AUTOBAHN=${AUTOBAHN:-false} -if [ "$AUTOBAHN" = "true" ]; then - echo "Generating Autobahn config for RPC node..." - AUTOBAHN_CONFIG="$HOME/.sei/config/autobahn.json" - - # Default to 4 (the docker-compose cluster size) when CLUSTER_SIZE is unset. - CLUSTER_SIZE=${CLUSTER_SIZE:-4} - NODE_DIRS="" - i=0 - while [ "$i" -lt "$CLUSTER_SIZE" ]; do - NODE_DIRS="$NODE_DIRS build/generated/node_${i}" - i=$((i + 1)) - done - - seid tendermint gen-autobahn-config $NODE_DIRS --output "$AUTOBAHN_CONFIG" - - # Inject autobahn-config-file path as a top-level key (must precede any - # [section] header so the TOML parser sees it at root scope). - if grep -q "autobahn-config-file" ~/.sei/config/config.toml; then - sed -i 's|autobahn-config-file = .*|autobahn-config-file = "'"$AUTOBAHN_CONFIG"'"|' ~/.sei/config/config.toml - else - sed -i '1s|^|autobahn-config-file = "'"$AUTOBAHN_CONFIG"'"\n|' ~/.sei/config/config.toml - fi - echo "Autobahn config written to $AUTOBAHN_CONFIG" -fi - # Override state sync configs STATE_SYNC_RPC="192.168.10.10:26657" STATE_SYNC_PEER="2f9846450b7a3dcf4af1ac0082e3279c16744df8@172.31.9.18:26656,ec98c4a28a2023f4f976828c8a8e7127bfef4e1b@172.31.4.96:26656,b03014d67384fb0ef6ad992c77cefe4f9d2c1640@172.31.4.219:26656" From c620064a7689953c6172e47cbb5359ed5fa5be0a Mon Sep 17 00:00:00 2001 From: Wen Date: Tue, 26 May 2026 10:33:23 -0700 Subject: [PATCH 7/7] docs: note Autobahn non-validator subscriber gap with TODO(CON-256) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make the rationale explicit: the rpc-node-side scripts are skipped not just because the CometBFT statesync reactor is disabled, but because Autobahn currently has no non-validator subscriber path — even if state sync worked, a non-validator full-node couldn't follow new blocks/QCs from validators. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/integration-test.yml | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index e90042a912..9fa7aeec0d 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -90,16 +90,23 @@ jobs: }, { # Trimmed subset of Chain Operation Test: only the validator-side - # checks that work without CometBFT state sync. Autobahn doesn't - # run the statesync reactor (sei-tendermint/node/node.go gates it - # on !gigaEnabled) so the rpc-node→validator state sync path and - # everything that asserts on it (statesync_operation.yaml, + # checks. Under Autobahn a non-validator full-node (sei-rpc-node) + # has no way to keep up with the chain — there's no + # subscriber/observer mode for non-validators in the Autobahn + # P2P protocol, and the CometBFT statesync reactor is gated by + # !gigaEnabled in sei-tendermint/node/node.go. So everything + # that asserts on the rpc-node syncing (statesync_operation.yaml, # verify_statesync_flatkv_digest.sh, the rpc-node `seid status` - # readiness loop) are skipped here. Re-add them once Autobahn - # supports state sync. The cross-validator FlatKV digest check - # is kept because validators commit blocks normally under - # Autobahn, so the comparison is still meaningful and catches - # silent FlatKV drift. + # readiness loop) is skipped here. The cross-validator FlatKV + # digest check is kept because validators commit blocks normally + # under Autobahn, so the comparison is still meaningful and + # catches silent FlatKV drift. + # + # TODO(CON-256): once Autobahn supports non-validator + # subscribers (block/QC streaming from validators) and the + # statesync reactor is unblocked under giga, re-add the + # rpc-node readiness loop, statesync_operation.yaml, and + # verify_statesync_flatkv_digest.sh to this entry. name: "Autobahn Chain Operation Test", env: "AUTOBAHN=true GIGA_EXECUTOR=true GIGA_STORAGE=true GIGA_OCC=true", scripts: [