Skip to content

Conversation

troian
Copy link
Member

@troian troian commented Oct 8, 2025

Description

Closes: #XXXX


Author Checklist

All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow-up issues.

I have...

  • included the correct type prefix in the PR title
  • added ! to the type prefix if API or client breaking change
  • targeted the correct branch (see PR Targeting)
  • provided a link to the relevant issue or specification
  • included the necessary unit and integration tests
  • added a changelog entry to CHANGELOG.md
  • included comments for documenting Go code
  • updated the relevant documentation or specification
  • reviewed "Files changed" and left comments if necessary
  • confirmed all CI checks have passed

Signed-off-by: Artur Troian <[email protected]>
Copy link

coderabbitai bot commented Oct 8, 2025

Walkthrough

Massive refactor migrating to Cosmos SDK v0.53+/CometBFT, reorganizing app bootstrapping, modules, ante handlers, and exports. CLI and testnet tooling are reworked; GitHub workflows/actions consolidated. SDL and events subsystems removed. Linting/release configs updated. New e2e tests, upgrade scripts/configs, and Makefile/tooling adjustments introduced.

Changes

Cohort / File(s) Summary
Env & Tooling
/.env, /.envrc, /install.sh, /script/tools.sh, /make/*.mk
Adds AKASH_RUN_BIN; expands direnv/shell checks; adds pv/lz4 deps; new import-path replacement and GHA deps installer; mockery/golangci-lint major-version installs; new mocks target; GOMOD flow reworked; new integration/simulation/upgrade test targets; releasing paths/envs updated; minor script cleanup.
GitHub Actions & Workflows
.github/.repo, .github/actions/setup-ubuntu/action.yaml, .github/workflows/*.yaml
Adds composite action to setup Ubuntu, node/go; updates conventional commits action; rewires workflows to use local setup, new runners, and adjusted log/artifact paths; consolidates env setup across jobs.
Linting & Releaser
/.golangci.yaml, /.goreleaser*.yaml
Migrates to golangci-lint v2 config and linter set; switches archives to ids/formats; sanitizes Docker tag versions; changes dist path.
Go Module Migration
/go.mod
Moves module to pkg.akt.dev/node, upgrades to Cosmos SDK v0.53+/CometBFT, adds cosmossdk.io modules and AKT forks, updates toolchain to Go 1.24.
Core App Refactor
/app/app.go, /app/types/app.go, /app/app_configure.go, /app/config.go, /app/ante.go, /app/mac.go, /app/modules.go, /app/upgrades.go
Rewrites app to new BaseApp/module wiring; adds keeper initialization and hooks; updates begin/end/genesis flows; adjusts ante chain; renames module account helpers; adds upgrade pre-hook and migration registration.
App Genesis/Export/Options/Sim
/app/export.go, /app/genesis.go, /app/option.go, /app/sim/*.go, /app/types/app_test.go
Adds selective module export; new Setup options pattern; default genesis filtering stake→uakt; new validator-set genesis helper; simulation flags/utilities; minor lint suppression.
Removed App Decorators
/app/decorators/gov_filter.go, /app/decorators/min_commision.go
Removes governance spam and min-commission ante decorators and their validation logic.
Tests: App & Old
/app/app_test.go
Removes legacy export test.
CLI Root & App Creator
/cmd/akash/cmd/root.go, /cmd/akash/cmd/app_creator.go, /cmd/akash/main.go
Refactors root command to new encoding config and command structure; introduces appCreator with methods for app/new testnet/export; simplifies main exit handling.
CLI Commands
/cmd/akash/cmd/{genesis.go,genaccounts.go,auth.go,bech32.go}
Adds prepare-genesis workflow with mainnet/testnet params; renames add-genesis-account→add-account and updates vesting handling; updates imports; minor arg handling.
Testnet & Testnetify
/app/testnet.go, /cmd/akash/cmd/testnet.go, /cmd/akash/cmd/testnetify/*
Updates testnet config types (address/int types), adds testnet orchestration commands and CometABCI wrapper; modernizes testnetify flow with contexts, metrics, DB providers, and flags.
Client Package
/client/client.go, /client/utils.go
Removes client discovery/RPC helpers; switches error wrapping in ReadPageRequest to cosmossdk.io/errors.
Events Subsystem Removed
/events/*
Deletes event streaming service, CLI command, processor, and tests.
SDL Subsystem Removed
/sdl/**/*
Removes SDL parsing, validation, group/manifest builders, resource/unit parsers, storage, GPU/CPU/memory, utilities, and all related tests/testdata.
Docs & Changelog
/README.md, /_docs/adr/adr-001-network-upgrades.md, /CHANGELOG.md
Updates links (cometbft) and import paths; fixes PR URL.
Build/Test Scripts
/_build/single-node.sh
Switches genesis/gentx amounts to uakt denomination.
Makefile
/Makefile
Replaces lint timeout with deadline; renames GO_MOD→GOMOD; updates build flags.
Release & Upgrade Workflows
/.github/workflows/release.yaml, /script/upgrades.sh, /meta.json, /tests/upgrade/*
Reworks CI release setup; adds snapshot/state-config/chain-meta options; new state preparation; adds v1.0.0 upgrade entry; expands upgrade test data and config.
E2E Tests Added
/tests/e2e/*.go
Adds comprehensive CLI and gRPC REST e2e tests for certs, deployments, market, and provider; integration driver added.
Misc Test Updates/Removals
/cmd/akash/cmd/flag_test.go, /docgen/main.go, /pubsub/bus_test.go, /tests/upgrade/upgrade_test.go, /tests/upgrade/types/types.go
Removes CLI flag test; updates docgen import; adjusts pubsub/crypto imports; refines upgrade tests with new imports, math, and event naming; adds nolint.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant CLI as akash CLI
  participant AC as appCreator
  participant App as AkashApp
  participant Mod as Module Manager

  User->>CLI: run command
  CLI->>AC: newApp(logger, db, appOpts)
  AC->>App: InitSpecialKeepers()
  AC->>App: InitNormalKeepers()
  AC->>Mod: NewManager(appModules, simModules)
  Mod-->>App: Services registered (GRPC, REST)
  App-->>AC: Ante handler, routes set
  AC-->>CLI: Application ready
Loading
sequenceDiagram
  autonumber
  actor Dev
  participant GH as GitHub Workflow
  participant SA as setup-ubuntu action
  participant Tools as Toolchain

  Dev->>GH: push/dispatch
  GH->>SA: Run composite action
  SA->>SA: Fetch tags/unshallow
  SA->>Tools: apt install core deps (direnv, lz4, pv, jq, ...)
  SA->>Tools: setup-node@v4 (Node 18)
  SA->>Tools: Detect Go version (script/tools.sh)
  SA->>Tools: setup-go@v5 (check-latest)
  SA-->>GH: Env configured
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~180+ minutes

Possibly related PRs

Poem

A rabbit hopped through module lanes,
Rewired stars and Comet chains.
It trimmed the SDL’s leafy hedge,
And grew new tests on upgrade’s edge.
With paws that lint and scripts that sing,
It tagged a release—thump-thump—spring! 🐇✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 2 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 38.71% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title Check ❓ Inconclusive The title “feat!: sdk-50” is too generic and refers only to an internal ticket or identifier rather than summarizing the core change; it does not convey what feature or breaking change is introduced and would not be meaningful to a reviewer scanning history. Please update the title to a concise sentence that clearly describes the primary change or purpose of this pull request, highlighting the feature or breaking API change rather than a ticket number.
Description Check ❓ Inconclusive The description is the default template with placeholders and unchecked checklist items and does not provide any details about the actual code changes, affected files, or rationale, making it too vague to guide a reviewer. Please update the pull request description to summarize the changes introduced, list the most critical files or areas to review, reference any related issues, and explain the impact of the update.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch sdk50

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 27

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
script/upgrades.sh (1)

138-177: Correct the xz archive detection glob

Both tar_by_content_type and content_type look for *.tar.cz*, which is a typo. As written, .tar.xz archives (the common format) fall through to the default branch and are treated as plain tar files, causing extraction to fail. Update the glob to *.tar.xz* (and, if desired, also handle .txz aliases) so xz-compressed archives are detected correctly before downloading snapshots/genesis data.

cmd/akash/cmd/auth.go (1)

69-88: Critical bug: nbf parsing sets exp instead of nbf.

Lines 84 and 86 incorrectly assign to exp when parsing the nbf (not before) flag. This is a copy-paste error from the expiration parsing logic above. As a result, the nbf flag has no effect and the exp value is overwritten.

Apply this diff to fix the bug:

       nbfString, err := cmd.Flags().GetString(FlagJWTNbf)
       if err != nil {
         return err
       }

       // first, attempt to parse expiration value as duration.
       // fallback to unix timestamp if fails
       dur, err := time.ParseDuration(nbfString)
       if err != nil {
         nbfInt, err := strconv.ParseInt(nbfString, 10, 64)
         if err != nil {
           return err
         }

-        exp = time.Unix(nbfInt, 0)
+        nbf = time.Unix(nbfInt, 0)
       } else {
-        exp = now.Add(dur)
+        nbf = now.Add(dur)
       }
     }
app/app.go (1)

420-429: BlockedAddrs computes wrong addresses (double NewModuleAddress).

You’re deriving a module address from an address string. Use module names from ModuleAccountPerms instead.

-func (app *AkashApp) BlockedAddrs() map[string]bool {
-	perms := ModuleAccountAddrs()
-	blockedAddrs := make(map[string]bool)
-	for acc := range perms {
-		blockedAddrs[authtypes.NewModuleAddress(acc).String()] = !allowedReceivingModAcc[acc]
-	}
-	return blockedAddrs
-}
+func (app *AkashApp) BlockedAddrs() map[string]bool {
+	perms := ModuleAccountPerms()
+	blocked := make(map[string]bool, len(perms))
+	for moduleName := range perms {
+		addr := authtypes.NewModuleAddress(moduleName).String()
+		blocked[addr] = !allowedReceivingModAcc[moduleName]
+	}
+	return blocked
+}
🧹 Nitpick comments (21)
cmd/akash/cmd/testnetify/cmt_abci.go (1)

11-17: Consider using pointer receiver for consistency.

The wrapper uses a value receiver, which means each method call will copy the struct (though it only contains a single pointer field). While this works correctly, pointer receivers are more common for types that implement interfaces, especially ABCI applications.

Apply this diff to use a pointer receiver:

-func NewCometABCIWrapper(app servertypes.ABCI) abci.Application {
-	return cometABCIWrapper{app: app}
+func NewCometABCIWrapper(app servertypes.ABCI) abci.Application {
+	return &cometABCIWrapper{app: app}
 }
 
-func (w cometABCIWrapper) Info(_ context.Context, req *abci.RequestInfo) (*abci.ResponseInfo, error) {
+func (w *cometABCIWrapper) Info(_ context.Context, req *abci.RequestInfo) (*abci.ResponseInfo, error) {
 	return w.app.Info(req)
 }

Then update all remaining method receivers from (w cometABCIWrapper) to (w *cometABCIWrapper).

cmd/akash/cmd/bech32.go (1)

33-36: Consider returning the error instead of panicking.

The function uses panic(err) at line 35, which is inconsistent with the error-handling pattern used elsewhere in this function (lines 24-25, 29-31). For better error propagation and consistency, consider returning the error instead.

Apply this diff for consistent error handling:

 	bech32Addr, err := bech32.ConvertAndEncode(bech32prefix, bz)
 	if err != nil {
-		panic(err)
+		return err
 	}
cmd/akash/cmd/genesis.go (3)

51-52: Remove redundant variable assignment.

The pattern depCdc := clientCtx.Codec followed by cdc := depCdc is redundant. Either use clientCtx.Codec directly or assign it once.

-			clientCtx := client.GetClientContextFromCmd(cmd)
-			depCdc := clientCtx.Codec
-			cdc := depCdc
+			clientCtx := client.GetClientContextFromCmd(cmd)
+			cdc := clientCtx.Codec

109-110: Remove redundant variable assignment.

Same redundant pattern as in PrepareGenesisCmd (lines 51-52).

-	depCdc := clientCtx.Codec
-	cdc := depCdc
+	cdc := clientCtx.Codec

264-264: Consider shorter unbonding time for testnet.

The testnet unbonding time is set to 2 weeks, matching mainnet. Testnets typically use shorter unbonding periods (e.g., 1-3 days) to allow faster iteration and testing of unbonding flows. This might be intentional, but consider if a shorter period would be more practical for testnet operations.

-	genParams.StakingParams.UnbondingTime = time.Hour * 24 * 7 * 2 // 2 weeks
+	genParams.StakingParams.UnbondingTime = time.Hour * 24 * 3 // 3 days
cmd/akash/cmd/testnetify/utils.go (1)

55-62: Consider clarifying the context nesting pattern and documenting the block parameter.

The function is correct but has two clarity issues:

  1. Context variable shadowing: Line 57 shadows the ctx variable, making it harder to follow the context chain. The pattern works (cancelFn cancels the parent context, which propagates to the errgroup's derived context), but consider using distinct variable names.

  2. Missing parameter documentation: The block parameter has no explanation. Add a brief comment describing its purpose in the signal handling behavior.

Apply this diff to improve clarity:

-func getCtx(sctx *sdksrv.Context, block bool) (*errgroup.Group, context.Context) {
-	ctx, cancelFn := context.WithCancel(context.Background())
-	g, ctx := errgroup.WithContext(ctx)
+// getCtx creates an errgroup with a cancellable context and wires up signal handlers.
+// If block is true, the signal listener will block until a signal is received.
+func getCtx(sctx *sdksrv.Context, block bool) (*errgroup.Group, context.Context) {
+	parentCtx, cancelFn := context.WithCancel(context.Background())
+	g, ctx := errgroup.WithContext(parentCtx)
 	// listen for quit signals so the calling parent process can gracefully exit
 	server.ListenForQuitSignals(g, block, cancelFn, sctx.Logger)
 
 	return g, ctx
 }
.github/.repo (1)

1-1: Document the purpose and usage of this manifest file.

The .github/.repo file appears to be a new repository reference or dependency manifest, but its purpose and format are not documented.

Consider adding:

  1. A comment in the file explaining its purpose
  2. Documentation in the PR description or a README about how this file is used by CI/tooling

For example:

+# Repository dependency manifest for GitHub Actions/workflows
 github.com/akash-network/node
make/mod.mk (1)

11-15: Remove commented-out code.

The commented Makefile target for mod serves no functional purpose and reduces code maintainability. If this is a placeholder for future implementation, track it in an issue instead.

Apply this diff to remove the commented code:

-
-#.PHONY: mod
-#mod: go.mod
-#
-#go.mod:
-#	go mod tidy

If you want to track this for future implementation, open an issue with the desired functionality instead of keeping commented code in the codebase.

make/init.mk (1)

45-47: Clarify the error message.

The error message references an empty string "" which may confuse users. Consider making it more explicit about what -mod was actually set to.

Apply this diff to improve clarity:

-	ifeq ($(GOMOD),$(filter $(GOMOD),mod ""))
-$(error '-mod may only be set to readonly or vendor when in workspace mode, but it is set to ""')
+	ifeq ($(GOMOD),$(filter $(GOMOD),mod ""))
+$(error '-mod may only be set to readonly or vendor when in workspace mode, but it is set to "$(GOMOD)"')
 	endif
script/tools.sh (1)

41-42: Potential command not found error.

Line 41 uses which to check if go is available, but which itself may not be installed in minimal environments. Consider using the more portable command -v which is a bash built-in.

Apply this diff:

 		# determine go toolchain from go version in go.mod
-		if which go >/dev/null 2>&1; then
+		if command -v go >/dev/null 2>&1; then
 			local_goversion=$(GOTOOLCHAIN=local go version | cut -d ' ' -f 3 | sed 's/go*//' | tr -d '\n')
.envrc (1)

51-58: Document new tool dependencies.

The addition of pv and lz4 as required tools is appropriate. Consider documenting these new dependencies in the project's README or setup documentation to help new contributors.

app/sim/sim_utils.go (1)

59-69: Consider returning errors instead of panicking.

Lines 61-68 use panic() for file read and unmarshal errors. Since the caller expects errors to be returned (the function signature includes error), consider returning these errors instead of panicking to allow graceful error handling.

Apply this diff:

 	if config.ParamsFile != "" {
 		bz, err := os.ReadFile(config.ParamsFile)
 		if err != nil {
-			panic(err)
+			return nil, err
 		}
 
 		err = json.Unmarshal(bz, &simState.AppParams)
 		if err != nil {
-			panic(err)
+			return nil, err
 		}
 	}

Note: This would require updating the function signature to return an error.

go.mod (1)

60-60: Document the Akash CometBFT fork.

The replace directive points to github.com/akash-network/cometbft v0.38.17-akash.2. Consider documenting what patches or changes are included in the Akash fork to help future maintainers understand the divergence from upstream.

.github/actions/setup-ubuntu/action.yaml (1)

14-30: Add apt-get update before installing packages.

Bare apt install can fail on GitHub runners because the package index is often stale. Refresh the cache and use apt-get for consistency.

     - name: Install dependencies
       # Shell must explicitly specify the shell for each step. https://github.com/orgs/community/discussions/18597
       shell: bash
-      run: sudo apt install -y make direnv unzip lz4 wget curl npm jq pv coreutils
+      run: |
+        sudo apt-get update
+        sudo apt-get install -y make direnv unzip lz4 wget curl npm jq pv coreutils
cmd/akash/cmd/testnetify/testnetify.go (1)

132-135: Verify root directory flag handling.

The code retrieves the FlagTestnetRootDir value but doesn't validate if the directory exists or is writable before proceeding. Consider adding validation to provide clear error messages early.

Add validation after line 135:

if _, err := os.Stat(rootDir); os.IsNotExist(err) {
    return fmt.Errorf("root directory does not exist: %s", rootDir)
}
tests/upgrade/upgrade_test.go (3)

1209-1239: Block watchdog timeout tripled.

The initial block window increased from 60 to 180 minutes. This generous timeout accounts for potentially slow initial block production, but consider whether 3 hours is excessive for CI/CD environments.

The timeout is adjusted after 3 blocks (lines 1237-1239) to the normal window. Consider adding a comment explaining why the first few blocks might take significantly longer to produce.

 	// first few blocks may take a while to produce.
-	// give a watchdog a generous timeout on them
+	// give a watchdog a generous timeout on them (e.g., state migrations, genesis setup)

1304-1306: Dual block event detection.

The code now checks for both executedBlock and executedBlock2 patterns to detect block commits. Ensure both patterns are documented and necessary, or consider consolidating if one is deprecated.

Add a comment explaining why two different block event patterns exist:

+		// Match both indexed block events (older) and committed state events (newer)
 		} else if strings.Contains(line, executedBlock) || strings.Contains(line, executedBlock2) {

401-403: Document and track the gas workaround in tests/upgrade/upgrade_test.go:401-403. Add a comment linking to known Cosmos SDK simulation issues (missing /cosmos.tx.v1beta1.Service/Simulate registration in v0.53), verify your node registers the Tx service with the required patches, or file an issue to track a permanent fix.

app/types/app.go (1)

150-157: Subspace accessor with panic on missing subspace.

The GetSubspace method panics if a subspace isn't found. While this is acceptable for app initialization failures, consider whether a more informative error that includes available subspaces would help debugging.

 func (app *App) GetSubspace(moduleName string) paramstypes.Subspace {
 	subspace, found := app.Keepers.Cosmos.Params.GetSubspace(moduleName)
 	if !found {
-		panic(fmt.Sprintf("params subspace \"%s\" not found", moduleName))
+		// Consider listing available subspaces in the panic message for debugging
+		panic(fmt.Sprintf("params subspace %q not found", moduleName))
 	}
 	return subspace
 }
cmd/akash/cmd/testnet.go (1)

112-193: Validator initialization loop handles cleanup.

The loop properly generates validator directories, keys, and configurations. The error handling removes the output directory on failures, which is good cleanup behavior. However, this could remove other validators if one fails partway through.

Consider more granular cleanup that only removes the failed validator's directory rather than the entire output directory:

 		if err := os.MkdirAll(filepath.Join(nodeDir, "config"), nodeDirPerm); err != nil {
-			_ = os.RemoveAll(outputDir)
+			_ = os.RemoveAll(nodeDir)
 			return err
 		}

This way, partial progress is preserved for debugging.

app/app.go (1)

506-519: Thread-safe reflection service cache (optional).

If tests construct apps concurrently, guard init with sync.Once.

+import "sync"
@@
-var cachedReflectionService *runtimeservices.ReflectionService
+var (
+	cachedReflectionService *runtimeservices.ReflectionService
+	reflOnce                sync.Once
+)
 
 func getReflectionService() *runtimeservices.ReflectionService {
-	if cachedReflectionService != nil {
-		return cachedReflectionService
-	}
-	reflectionSvc, err := runtimeservices.NewReflectionService()
-	if err != nil {
-		panic(err)
-	}
-	cachedReflectionService = reflectionSvc
-	return reflectionSvc
+	reflOnce.Do(func() {
+		rs, err := runtimeservices.NewReflectionService()
+		if err != nil {
+			panic(err)
+		}
+		cachedReflectionService = rs
+	})
+	return cachedReflectionService
 }
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4ab1cd9 and 229b379.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (151)
  • .env (1 hunks)
  • .envrc (1 hunks)
  • .github/.repo (1 hunks)
  • .github/actions/setup-ubuntu/action.yaml (1 hunks)
  • .github/workflows/concommits.yaml (1 hunks)
  • .github/workflows/release.yaml (3 hunks)
  • .github/workflows/tests.yaml (7 hunks)
  • .golangci.yaml (1 hunks)
  • .goreleaser-docker.yaml (1 hunks)
  • .goreleaser-test-bins.yaml (1 hunks)
  • .goreleaser.yaml (5 hunks)
  • .mockery.yaml (1 hunks)
  • CHANGELOG.md (1 hunks)
  • Makefile (3 hunks)
  • README.md (1 hunks)
  • _build/single-node.sh (2 hunks)
  • _docs/adr/adr-001-network-upgrades.md (1 hunks)
  • app/ante.go (1 hunks)
  • app/app.go (7 hunks)
  • app/app_configure.go (3 hunks)
  • app/app_test.go (0 hunks)
  • app/config.go (2 hunks)
  • app/decorators/gov_filter.go (0 hunks)
  • app/decorators/min_commision.go (0 hunks)
  • app/export.go (6 hunks)
  • app/genesis.go (2 hunks)
  • app/mac.go (2 hunks)
  • app/modules.go (1 hunks)
  • app/option.go (1 hunks)
  • app/params/proto.go (0 hunks)
  • app/sim/sim_config.go (1 hunks)
  • app/sim/sim_utils.go (1 hunks)
  • app/sim_test.go (4 hunks)
  • app/testnet.go (4 hunks)
  • app/types/app.go (3 hunks)
  • app/types/app_test.go (1 hunks)
  • app/upgrades.go (2 hunks)
  • client/client.go (0 hunks)
  • client/utils.go (3 hunks)
  • cmd/akash/cmd/app_creator.go (1 hunks)
  • cmd/akash/cmd/auth.go (2 hunks)
  • cmd/akash/cmd/bech32.go (1 hunks)
  • cmd/akash/cmd/flag_test.go (0 hunks)
  • cmd/akash/cmd/genaccounts.go (6 hunks)
  • cmd/akash/cmd/genesis.go (1 hunks)
  • cmd/akash/cmd/root.go (3 hunks)
  • cmd/akash/cmd/testnet.go (1 hunks)
  • cmd/akash/cmd/testnetify/cmt_abci.go (1 hunks)
  • cmd/akash/cmd/testnetify/config.go (3 hunks)
  • cmd/akash/cmd/testnetify/testnetify.go (12 hunks)
  • cmd/akash/cmd/testnetify/utils.go (2 hunks)
  • cmd/akash/main.go (1 hunks)
  • cmd/common/flags.go (0 hunks)
  • cmd/common/signal.go (0 hunks)
  • cmd/common/util.go (0 hunks)
  • cmd/common/util_test.go (0 hunks)
  • docgen/main.go (1 hunks)
  • events/cmd/root.go (0 hunks)
  • events/publish.go (0 hunks)
  • events/publish_test.go (0 hunks)
  • events/query.go (0 hunks)
  • go.mod (1 hunks)
  • install.sh (0 hunks)
  • make/codegen.mk (1 hunks)
  • make/init.mk (4 hunks)
  • make/lint.mk (1 hunks)
  • make/mod.mk (1 hunks)
  • make/releasing.mk (6 hunks)
  • make/setup-cache.mk (2 hunks)
  • make/test-integration.mk (2 hunks)
  • make/test-simulation.mk (1 hunks)
  • make/test-upgrade.mk (3 hunks)
  • meta.json (1 hunks)
  • pubsub/bus_test.go (1 hunks)
  • script/tools.sh (1 hunks)
  • script/upgrades.sh (13 hunks)
  • sdl/_testdata/deployment-svc-mismatch.yaml (0 hunks)
  • sdl/_testdata/private_service.yaml (0 hunks)
  • sdl/_testdata/profile-svc-name-mismatch.yaml (0 hunks)
  • sdl/_testdata/service-mix.yaml (0 hunks)
  • sdl/_testdata/service-mix2.yaml (0 hunks)
  • sdl/_testdata/simple-double-ram.yaml (0 hunks)
  • sdl/_testdata/simple-gpu.yaml (0 hunks)
  • sdl/_testdata/simple-with-ip.yaml (0 hunks)
  • sdl/_testdata/simple.yaml (0 hunks)
  • sdl/_testdata/simple2.yaml (0 hunks)
  • sdl/_testdata/simple3.yaml (0 hunks)
  • sdl/_testdata/simple4.yaml (0 hunks)
  • sdl/_testdata/storageClass1.yaml (0 hunks)
  • sdl/_testdata/storageClass2.yaml (0 hunks)
  • sdl/_testdata/storageClass3.yaml (0 hunks)
  • sdl/_testdata/storageClass4.yaml (0 hunks)
  • sdl/_testdata/storageClass5.yaml (0 hunks)
  • sdl/_testdata/storageClass6.yaml (0 hunks)
  • sdl/_testdata/v2.1-credentials-error.yaml (0 hunks)
  • sdl/_testdata/v2.1-credentials.yaml (0 hunks)
  • sdl/_testdata/v2.1-deployment-svc-mismatch.yaml (0 hunks)
  • sdl/_testdata/v2.1-private_service.yaml (0 hunks)
  • sdl/_testdata/v2.1-profile-svc-name-mismatch.yaml (0 hunks)
  • sdl/_testdata/v2.1-service-mix.yaml (0 hunks)
  • sdl/_testdata/v2.1-service-mix2.yaml (0 hunks)
  • sdl/_testdata/v2.1-simple-gpu.yaml (0 hunks)
  • sdl/_testdata/v2.1-simple-with-ip.yaml (0 hunks)
  • sdl/_testdata/v2.1-simple.yaml (0 hunks)
  • sdl/_testdata/v2.1-simple2.yaml (0 hunks)
  • sdl/_testdata/v2.1-simple3.yaml (0 hunks)
  • sdl/_testdata/v2.1-simple4.yaml (0 hunks)
  • sdl/coin.go (0 hunks)
  • sdl/coin_test.go (0 hunks)
  • sdl/cpu.go (0 hunks)
  • sdl/cpu_test.go (0 hunks)
  • sdl/expose.go (0 hunks)
  • sdl/full_test.go (0 hunks)
  • sdl/gpu.go (0 hunks)
  • sdl/gpu_test.go (0 hunks)
  • sdl/groupBuilder_v2.go (0 hunks)
  • sdl/groupBuilder_v2_1.go (0 hunks)
  • sdl/memory.go (0 hunks)
  • sdl/placement.go (0 hunks)
  • sdl/pricing.go (0 hunks)
  • sdl/resources.go (0 hunks)
  • sdl/sdl.go (0 hunks)
  • sdl/sdl_test.go (0 hunks)
  • sdl/storage.go (0 hunks)
  • sdl/storage_test.go (0 hunks)
  • sdl/units.go (0 hunks)
  • sdl/units_test.go (0 hunks)
  • sdl/util/util.go (0 hunks)
  • sdl/util/util_test.go (0 hunks)
  • sdl/utils.go (0 hunks)
  • sdl/v2.go (0 hunks)
  • sdl/v2_1.go (0 hunks)
  • sdl/v2_1_ip_test.go (0 hunks)
  • sdl/v2_1_test.go (0 hunks)
  • sdl/v2_ip_test.go (0 hunks)
  • sdl/v2_test.go (0 hunks)
  • tests/e2e/certs_cli_test.go (1 hunks)
  • tests/e2e/certs_grpc_test.go (1 hunks)
  • tests/e2e/cli_test.go (1 hunks)
  • tests/e2e/deployment_cli_test.go (1 hunks)
  • tests/e2e/deployment_grpc_test.go (1 hunks)
  • tests/e2e/grpc_test.go (1 hunks)
  • tests/e2e/market_cli_test.go (1 hunks)
  • tests/e2e/market_grpc_test.go (1 hunks)
  • tests/e2e/provider_cli_test.go (1 hunks)
  • tests/e2e/provider_grpc_test.go (1 hunks)
  • tests/upgrade/config.json (1 hunks)
  • tests/upgrade/test-cases.json (1 hunks)
  • tests/upgrade/test-config-gha.json (1 hunks)
  • tests/upgrade/types/types.go (1 hunks)
  • tests/upgrade/upgrade_test.go (14 hunks)
💤 Files with no reviewable changes (75)
  • app/params/proto.go
  • sdl/resources.go
  • sdl/_testdata/storageClass6.yaml
  • sdl/_testdata/v2.1-credentials-error.yaml
  • cmd/common/util_test.go
  • sdl/sdl_test.go
  • sdl/_testdata/v2.1-simple3.yaml
  • sdl/v2_test.go
  • sdl/_testdata/profile-svc-name-mismatch.yaml
  • sdl/_testdata/simple2.yaml
  • sdl/_testdata/v2.1-service-mix2.yaml
  • app/decorators/min_commision.go
  • sdl/_testdata/simple-double-ram.yaml
  • cmd/akash/cmd/flag_test.go
  • cmd/common/signal.go
  • sdl/units_test.go
  • client/client.go
  • sdl/storage_test.go
  • sdl/memory.go
  • sdl/units.go
  • app/decorators/gov_filter.go
  • sdl/_testdata/storageClass4.yaml
  • sdl/_testdata/v2.1-simple.yaml
  • sdl/gpu_test.go
  • events/cmd/root.go
  • sdl/v2_ip_test.go
  • sdl/_testdata/v2.1-deployment-svc-mismatch.yaml
  • app/app_test.go
  • sdl/_testdata/service-mix2.yaml
  • events/publish.go
  • sdl/_testdata/v2.1-simple-gpu.yaml
  • sdl/_testdata/storageClass3.yaml
  • sdl/_testdata/deployment-svc-mismatch.yaml
  • sdl/groupBuilder_v2_1.go
  • sdl/_testdata/v2.1-simple2.yaml
  • sdl/gpu.go
  • sdl/_testdata/simple3.yaml
  • install.sh
  • sdl/sdl.go
  • sdl/_testdata/v2.1-simple4.yaml
  • sdl/placement.go
  • sdl/_testdata/v2.1-private_service.yaml
  • sdl/_testdata/v2.1-profile-svc-name-mismatch.yaml
  • sdl/_testdata/private_service.yaml
  • sdl/_testdata/v2.1-service-mix.yaml
  • sdl/cpu.go
  • sdl/v2.go
  • sdl/groupBuilder_v2.go
  • sdl/coin_test.go
  • sdl/_testdata/simple.yaml
  • cmd/common/flags.go
  • sdl/_testdata/storageClass2.yaml
  • sdl/_testdata/simple4.yaml
  • sdl/_testdata/v2.1-credentials.yaml
  • sdl/_testdata/simple-gpu.yaml
  • sdl/util/util.go
  • sdl/_testdata/storageClass5.yaml
  • sdl/_testdata/storageClass1.yaml
  • sdl/_testdata/simple-with-ip.yaml
  • sdl/v2_1_ip_test.go
  • sdl/expose.go
  • sdl/storage.go
  • sdl/_testdata/service-mix.yaml
  • sdl/_testdata/v2.1-simple-with-ip.yaml
  • events/publish_test.go
  • sdl/coin.go
  • sdl/cpu_test.go
  • sdl/v2_1_test.go
  • sdl/v2_1.go
  • events/query.go
  • sdl/pricing.go
  • sdl/utils.go
  • sdl/util/util_test.go
  • sdl/full_test.go
  • cmd/common/util.go
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-10-08T15:59:15.421Z
Learnt from: troian
PR: akash-network/node#2007
File: make/releasing.mk:43-45
Timestamp: 2025-10-08T15:59:15.421Z
Learning: In make/releasing.mk, the $(AKASH) target is intentionally marked as .PHONY to force a rebuild every time, even though it produces the akash binary file. This is a deliberate design choice by the maintainers.

Applied to files:

  • make/releasing.mk
🧬 Code graph analysis (14)
_build/single-node.sh (1)
script/upgrades.sh (1)
  • init (267-344)
app/upgrades.go (3)
upgrades/types/types.go (5)
  • GetUpgradesList (95-97)
  • IterateMigrations (119-125)
  • NewMigrationFn (27-27)
  • NewMigrator (60-65)
  • RegisterMigration (107-117)
app/types/app.go (1)
  • App (123-134)
app/app.go (1)
  • AkashApp (92-102)
cmd/akash/cmd/testnetify/testnetify.go (3)
util/server/server.go (1)
  • GetAppDBBackend (221-231)
app/testnet.go (1)
  • TestnetConfig (47-52)
cmd/akash/cmd/testnetify/config.go (1)
  • TestnetConfig (60-66)
cmd/akash/cmd/root.go (5)
app/config.go (1)
  • ModuleBasics (70-72)
app/app.go (1)
  • DefaultHome (82-82)
cmd/akash/cmd/bech32.go (1)
  • ConvertBech32Cmd (12-47)
cmd/akash/cmd/testnetify/testnetify.go (1)
  • GetCmd (48-263)
cmd/akash/cmd/genaccounts.go (1)
  • AddGenesisAccountCmd (35-195)
cmd/akash/main.go (1)
cmd/akash/cmd/root.go (2)
  • NewRootCmd (31-46)
  • Execute (49-58)
cmd/akash/cmd/app_creator.go (4)
util/server/server.go (1)
  • GetAppDBBackend (221-231)
app/app.go (2)
  • NewApp (105-261)
  • AkashApp (92-102)
app/testnet.go (2)
  • TestnetConfig (47-52)
  • InitAkashAppForTestnet (57-284)
cmd/akash/cmd/testnetify/config.go (1)
  • TestnetConfig (60-66)
cmd/akash/cmd/testnetify/config.go (1)
app/testnet.go (1)
  • TestnetGov (38-41)
app/types/app.go (3)
x/deployment/keeper/keeper.go (2)
  • Keeper (36-44)
  • NewKeeper (47-54)
x/escrow/keeper/keeper.go (2)
  • Keeper (30-50)
  • NewKeeper (52-68)
x/take/keeper/keeper.go (2)
  • Keeper (24-30)
  • NewKeeper (33-39)
app/app_configure.go (3)
x/market/alias.go (1)
  • ModuleName (13-13)
x/take/alias.go (1)
  • ModuleName (11-11)
x/cert/alias.go (1)
  • ModuleName (13-13)
app/export.go (1)
app/app.go (3)
  • AkashApp (92-102)
  • DefaultHome (82-82)
  • NewApp (105-261)
app/config.go (2)
x/deployment/module.go (8)
  • AppModuleBasic (44-46)
  • AppModuleBasic (60-62)
  • AppModuleBasic (65-67)
  • AppModuleBasic (78-80)
  • AppModuleBasic (83-90)
  • AppModuleBasic (93-98)
  • AppModuleBasic (101-103)
  • AppModuleBasic (106-108)
x/market/module.go (8)
  • AppModuleBasic (45-47)
  • AppModuleBasic (56-58)
  • AppModuleBasic (61-63)
  • AppModuleBasic (72-74)
  • AppModuleBasic (77-84)
  • AppModuleBasic (87-92)
  • AppModuleBasic (95-97)
  • AppModuleBasic (100-102)
app/testnet.go (4)
cmd/akash/cmd/testnetify/config.go (4)
  • ConsAddress (40-42)
  • AccAddress (32-34)
  • TestnetValidator (44-56)
  • TestnetConfig (60-66)
app/app.go (1)
  • AkashApp (92-102)
upgrades/types/types.go (1)
  • GetUpgradesList (95-97)
app/types/app.go (1)
  • App (123-134)
app/app.go (5)
app/types/app.go (1)
  • App (123-134)
app/mac.go (2)
  • ModuleAccountPerms (13-24)
  • ModuleAccountAddrs (26-33)
app/app_configure.go (1)
  • OrderInitGenesis (54-82)
app/ante.go (1)
  • NewAnteHandler (21-61)
upgrades/types/types.go (1)
  • GetHeightPatchesList (99-101)
app/sim_test.go (3)
app/app.go (4)
  • AkashApp (92-102)
  • DefaultHome (82-82)
  • NewApp (105-261)
  • AppName (78-78)
app/mac.go (1)
  • ModuleAccountAddrs (26-33)
app/config.go (1)
  • ModuleBasics (70-72)
🪛 actionlint (1.7.7)
.github/workflows/release.yaml

13-13: label "core-e2e" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)


22-22: description is required in metadata of "setup-ubuntu" action at "/home/jailuser/git/.github/actions/setup-ubuntu/action.yaml"

(action)


45-45: label "gh-runner-test" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)


58-58: shellcheck reported issue in this script: SC2086:info:1:48: Double quote to prevent globbing and word splitting

(shellcheck)


60-60: shellcheck reported issue in this script: SC2086:info:2:40: Double quote to prevent globbing and word splitting

(shellcheck)

.github/workflows/tests.yaml

59-59: description is required in metadata of "setup-ubuntu" action at "/home/jailuser/git/.github/actions/setup-ubuntu/action.yaml"

(action)


109-109: label "core-e2e" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-2019", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "ubuntu-20.04", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)


172-172: shellcheck reported issue in this script: SC2086:info:3:38: Double quote to prevent globbing and word splitting

(shellcheck)


172-172: shellcheck reported issue in this script: SC2086:info:4:40: Double quote to prevent globbing and word splitting

(shellcheck)


178-178: shellcheck reported issue in this script: SC2086:info:3:40: Double quote to prevent globbing and word splitting

(shellcheck)

🪛 markdownlint-cli2 (0.18.1)
_docs/adr/adr-001-network-upgrades.md

43-43: Hard tabs
Column: 1

(MD010, no-hard-tabs)


45-45: Hard tabs
Column: 1

(MD010, no-hard-tabs)


46-46: Hard tabs
Column: 1

(MD010, no-hard-tabs)


47-47: Hard tabs
Column: 1

(MD010, no-hard-tabs)


48-48: Hard tabs
Column: 1

(MD010, no-hard-tabs)

🪛 OSV Scanner (2.2.3)
go.mod

[HIGH] 177-177: github.com/hashicorp/go-getter 1.7.8: HashiCorp go-getter Vulnerable to Symlink Attacks in github.com/hashicorp/go-getter

(GO-2025-3892)


[HIGH] 177-177: github.com/hashicorp/go-getter 1.7.8: HashiCorp go-getter Vulnerable to Symlink Attacks

(GHSA-wjrx-6529-hcj3)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
  • GitHub Check: release-dry-run
  • GitHub Check: network-upgrade-names
  • GitHub Check: lint-shell
  • GitHub Check: sims
  • GitHub Check: lint-go
  • GitHub Check: build-macos
  • GitHub Check: tests
  • GitHub Check: build-bins
  • GitHub Check: coverage

Comment on lines +43 to +48
"github.com/cometbft/cometbft/libs/log"

storetypes "github.com/cosmos/cosmos-sdk/store/types"
storetypes "cosmossdk.io/store"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
upgradetypes "cosmossdk.io/x/upgrade/types"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Replace hard tabs with spaces in code examples.

The code block uses hard tabs (detected by markdownlint). For consistency and to comply with markdown best practices, use spaces for indentation.

Apply this diff to replace tabs with spaces:

 import (
-	"github.com/cometbft/cometbft/libs/log"
+  "github.com/cometbft/cometbft/libs/log"

-	storetypes "cosmossdk.io/store"
-	sdk "github.com/cosmos/cosmos-sdk/types"
-	"github.com/cosmos/cosmos-sdk/types/module"
-	upgradetypes "cosmossdk.io/x/upgrade/types"
+  storetypes "cosmossdk.io/store"
+  sdk "github.com/cosmos/cosmos-sdk/types"
+  "github.com/cosmos/cosmos-sdk/types/module"
+  upgradetypes "cosmossdk.io/x/upgrade/types"

Committable suggestion skipped: line range outside the PR's diff.

🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

43-43: Hard tabs
Column: 1

(MD010, no-hard-tabs)


45-45: Hard tabs
Column: 1

(MD010, no-hard-tabs)


46-46: Hard tabs
Column: 1

(MD010, no-hard-tabs)


47-47: Hard tabs
Column: 1

(MD010, no-hard-tabs)


48-48: Hard tabs
Column: 1

(MD010, no-hard-tabs)

🤖 Prompt for AI Agents
_docs/adr/adr-001-network-upgrades.md around lines 43 to 48: the code example
contains hard tab characters for indentation; replace all hard tabs in this
block with spaces (use 4 spaces per tab) preserving current alignment and
indentation level so the import lines remain vertically aligned and markdownlint
no longer flags tabs.

Comment on lines +35 to +37
- third_party$
- builtin$
- examples$
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Fix directory exclusion regexes

The expressions third_party$, builtin$, and examples$ only match paths ending exactly with those names, so files like third_party/foo/bar.go still get linted. That defeats the exclusion you just reintroduced and will surface a lot of third-party noise.

Switch to patterns that match the directory prefix instead:

-    - third_party$
-    - builtin$
-    - examples$
+    - third_party/
+    - builtin/
+    - examples/

Apply the same adjustment in the formatter exclusions to keep both lists consistent.

Also applies to: 44-46

Comment on lines +59 to +62
transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"
ibchost "github.com/cosmos/ibc-go/v10/modules/core/exported"
ibctm "github.com/cosmos/ibc-go/v10/modules/light-clients/07-tendermint"

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix IBC imports and module constants (compile-time breakage).

  • ibchost.ModuleName lives in core/24-host, not core/exported.
  • 07‑tendermint is not a module; remove ibctm.ModuleName from ordering.

Apply:

-	ibchost "github.com/cosmos/ibc-go/v10/modules/core/exported"
-	ibctm "github.com/cosmos/ibc-go/v10/modules/light-clients/07-tendermint"
+	ibchost "github.com/cosmos/ibc-go/v10/modules/core/24-host"

And drop 07‑tm from orders:

 func orderBeginBlockers(_ []string) []string {
   return []string{
@@
-		ibctm.ModuleName,
 		ibchost.ModuleName,
@@
   }
 }
 
 func OrderEndBlockers(_ []string) []string {
   return []string{
@@
-		ibchost.ModuleName,
+		ibchost.ModuleName,
@@
   }
 }

Also applies to: 263-292, 295-321

🤖 Prompt for AI Agents
In app/app.go around lines 59-62 (and also update usages in ranges 263-292 and
295-321), the IBC imports and module ordering are incorrect: replace the ibchost
import path from "github.com/cosmos/ibc-go/v10/modules/core/exported" to
"github.com/cosmos/ibc-go/v10/modules/core/24-host" (so ibchost.ModuleName
resolves), and remove any references to ibctm.ModuleName / "07-tendermint" from
module ordering and related constants (drop the 07-tm entry from the
begin/end/order lists) so compilation succeeds; update any related ordering
slices or maps accordingly to exclude the 07-tm module.

Comment on lines +194 to 197
// Tell the app's module manager how to set the order of BeginBlockers, which are run at the beginning of every block.
app.MM.SetOrderBeginBlockers(orderBeginBlockers(app.MM.ModuleNames())...)
app.MM.SetOrderInitGenesis(OrderInitGenesis(app.MM.ModuleNames())...)

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Set EndBlockers ordering (currently unused OrderEndBlockers).

You define OrderEndBlockers but never set it on the module manager. Add:

  // Tell the app's module manager how to set the order of BeginBlockers, which are run at the beginning of every block.
  app.MM.SetOrderBeginBlockers(orderBeginBlockers(app.MM.ModuleNames())...)
  app.MM.SetOrderInitGenesis(OrderInitGenesis(app.MM.ModuleNames())...)
+ app.MM.SetOrderEndBlockers(OrderEndBlockers(app.MM.ModuleNames())...)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// Tell the app's module manager how to set the order of BeginBlockers, which are run at the beginning of every block.
app.MM.SetOrderBeginBlockers(orderBeginBlockers(app.MM.ModuleNames())...)
app.MM.SetOrderInitGenesis(OrderInitGenesis(app.MM.ModuleNames())...)
// Tell the app's module manager how to set the order of BeginBlockers, which are run at the beginning of every block.
app.MM.SetOrderBeginBlockers(orderBeginBlockers(app.MM.ModuleNames())...)
app.MM.SetOrderInitGenesis(OrderInitGenesis(app.MM.ModuleNames())...)
app.MM.SetOrderEndBlockers(OrderEndBlockers(app.MM.ModuleNames())...)
🤖 Prompt for AI Agents
In app/app.go around lines 194 to 197, you defined OrderEndBlockers but never
applied it to the module manager; call app.MM.SetOrderEndBlockers with
OrderEndBlockers(app.MM.ModuleNames())... immediately after setting
BeginBlockers (and/or InitGenesis) so the module manager uses your EndBlockers
ordering; ensure you import or reference the OrderEndBlockers function name
exactly as declared and place the call before wiring the rest of the app
lifecycle.

Comment on lines +217 to 220
// initialize stores
app.MountKVStores(app.GetKVStoreKey())
app.MountTransientStores(app.GetTransientStoreKey())

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Mount memory stores to avoid runtime panics.

Memory stores are not mounted; modules that declare MemStoreKey will panic at runtime.

  // initialize stores
  app.MountKVStores(app.GetKVStoreKey())
  app.MountTransientStores(app.GetTransientStoreKey())
+ app.MountMemoryStores(app.GetMemoryStoreKey())
🤖 Prompt for AI Agents
In app/app.go around lines 217 to 220, memory stores are not being mounted which
causes modules that declare MemStoreKey to panic at runtime; add a call to mount
them by invoking app.MountMemStores(app.GetMemStoreKey()) (positioned with the
other store mounts) so MemStoreKeys are registered before the app starts.

Comment on lines +43 to 47
"v1.0.0": {
"skipped": false,
"from_binary": "v0.38.5-rc3",
"from_version": "v0.38.0"
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify the RC binary reference and major version bump.

The v1.0.0 upgrade entry references v0.38.5-rc3 as the from_binary, which is a release candidate version. Additionally, this represents a major version jump from v0.38.0 to v1.0.0.

Please confirm:

  1. Is v0.38.5-rc3 the correct and stable binary for the upgrade path, or should this reference a stable release (e.g., v0.38.5)?
  2. Is the major version bump to v1.0.0 intentional and properly documented in upgrade guides?

Run the following to check for existing v0.38.5 stable releases:


🏁 Script executed:

#!/bin/bash
# Check for v0.38.5 releases and tags
gh release view v0.38.5 || echo "No stable v0.38.5 release found"
gh release view v0.38.5-rc3 || echo "No v0.38.5-rc3 release found"
git tag -l "v0.38.5*"

Length of output: 2275


Correct RC reference and confirm major bump docs.

  • Change from_binary for v1.0.0 from "v0.38.5-rc3" to stable "v0.38.5".
  • Verify the jump to v1.0.0 is intentional and update the upgrade guide/release notes accordingly.
🤖 Prompt for AI Agents
In meta.json around lines 43 to 47, the from_binary for v1.0.0 incorrectly
references the RC build; change "from_binary": "v0.38.5-rc3" to the stable
"v0.38.5". After updating that field, confirm the v1.0.0 major version bump is
intentional and, if so, update the upgrade guide and release notes to document
the breaking changes and migration steps for the major bump; if it was not
intended, revert the version bump instead and adjust metadata accordingly.

Comment on lines +8 to +25
macos_deps=(
"bash"
"direnv"
"pv"
"lz4"
)

debian_deps=(
"make"
"build-essentials"
"direnv"
"unzip"
"wget"
"curl"
"npm"
"jq"
"coreutils"
)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix typo in debian_deps package name.

Line 17 contains a typo: build-essentials should be build-essential (no trailing 's'). This will cause installation failures on Debian-based systems.

Apply this diff:

 debian_deps=(
 	"make"
-	"build-essentials"
+	"build-essential"
 	"direnv"
 	"unzip"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
macos_deps=(
"bash"
"direnv"
"pv"
"lz4"
)
debian_deps=(
"make"
"build-essentials"
"direnv"
"unzip"
"wget"
"curl"
"npm"
"jq"
"coreutils"
)
macos_deps=(
"bash"
"direnv"
"pv"
"lz4"
)
debian_deps=(
"make"
"build-essential"
"direnv"
"unzip"
"wget"
"curl"
"npm"
"jq"
"coreutils"
)
🤖 Prompt for AI Agents
In script/tools.sh around lines 8 to 25, the debian_deps array contains a typo:
"build-essentials" should be "build-essential"; update that entry to the correct
package name so apt installs succeed on Debian-based systems.

Comment on lines +390 to +407
tar_cmd=$(content_type "$(content_name "${GENESIS_URL}")")

if [ "$tar_cmd" != "" ]; then
# shellcheck disable=SC2086
wget -q -O - "${GENESIS_URL}" | pv $pv_args | eval "$tar_cmd"
else
wget -q --show-progress -O "$genesis_file" "${GENESIS_URL}"
fi
else
echo "unable to download genesis"
fi
else
echo "Unpacking genesis from ${GENESIS_URL}"
tar_cmd=$(content_type "${GENESIS_URL}")
# shellcheck disable=SC2086
(pv -petrafb -i 5 "${GENESIS_URL}" | eval "$tar_cmd") 2>&1 | stdbuf -o0 tr '\r' '\n'
fi

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix genesis download extraction command

content_type only yields an extension string (e.g. tar.gz), so eval "$tar_cmd" executes a non-existent command and the genesis tarball never extracts. Replace the content_type call with tar_by_content_type (as done for snapshots) before piping into eval. Same applies to the local file branch below.

-					tar_cmd=$(content_type "$(content_name "${GENESIS_URL}")")
+					tar_cmd=$(tar_by_content_type "$(content_name "${GENESIS_URL}")")-				tar_cmd=$(content_type "${GENESIS_URL}")
+				tar_cmd=$(tar_by_content_type "${GENESIS_URL}")
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
tar_cmd=$(content_type "$(content_name "${GENESIS_URL}")")
if [ "$tar_cmd" != "" ]; then
# shellcheck disable=SC2086
wget -q -O - "${GENESIS_URL}" | pv $pv_args | eval "$tar_cmd"
else
wget -q --show-progress -O "$genesis_file" "${GENESIS_URL}"
fi
else
echo "unable to download genesis"
fi
else
echo "Unpacking genesis from ${GENESIS_URL}"
tar_cmd=$(content_type "${GENESIS_URL}")
# shellcheck disable=SC2086
(pv -petrafb -i 5 "${GENESIS_URL}" | eval "$tar_cmd") 2>&1 | stdbuf -o0 tr '\r' '\n'
fi
tar_cmd=$(tar_by_content_type "$(content_name "${GENESIS_URL}")")
if [ "$tar_cmd" != "" ]; then
# shellcheck disable=SC2086
wget -q -O - "${GENESIS_URL}" | pv $pv_args | eval "$tar_cmd"
else
wget -q --show-progress -O "$genesis_file" "${GENESIS_URL}"
fi
else
echo "unable to download genesis"
fi
else
echo "Unpacking genesis from ${GENESIS_URL}"
tar_cmd=$(tar_by_content_type "${GENESIS_URL}")
# shellcheck disable=SC2086
(pv -petrafb -i 5 "${GENESIS_URL}" | eval "$tar_cmd") 2>&1 | stdbuf -o0 tr '\r' '\n'
fi

Comment on lines +142 to +158
for _, tc := range testCases {
tc := tc
s.Run(tc.name, func() {
resp, err := sdktestutil.GetRequest(tc.url)
s.Require().NoError(err)

var deployments v1beta4.QueryDeploymentsResponse
err = val.ClientCtx.Codec.UnmarshalJSON(resp, &deployments)

if tc.expErr {
s.Require().NotNil(err)
s.Require().Empty(deployments.Deployments)
} else {
s.Require().NoError(err)
s.Require().Len(deployments.Deployments, tc.expLen)
s.Require().Equal(tc.expResp, deployments.Deployments[0])
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Handle non-200 REST responses correctly in e2e tests.

sdktestutil.GetRequest returns an error whenever the endpoint responds with a non-200 status. In the error-path scenarios you’re exercising, the request fails before you ever reach JSON unmarshalling, so s.Require().NoError(err) will trip and the tests never assert the intended behaviour. Please short-circuit on the HTTP error and only unmarshal/compare when the request succeeds; apply the same pattern to the deployment and group suites.

resp, err := sdktestutil.GetRequest(tc.url)
-	s.Require().NoError(err)
-
-	if tc.expErr {
-		s.Require().NotNil(err)
-		s.Require().Empty(deployments.Deployments)
-	} else {
-		s.Require().NoError(err)
-		s.Require().Len(deployments.Deployments, tc.expLen)
-		s.Require().Equal(tc.expResp, deployments.Deployments[0])
-	}
+	if tc.expErr {
+		s.Require().Error(err)
+		return
+	}
+	s.Require().NoError(err)
+	s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(resp, &deployments))
+	s.Require().Len(deployments.Deployments, tc.expLen)
+	s.Require().Equal(tc.expResp, deployments.Deployments[0])

Also applies to: 205-220, 269-284

🤖 Prompt for AI Agents
In tests/e2e/deployment_grpc_test.go around lines 142-158,
sdktestutil.GetRequest returns an error for non-200 responses so the current
code calls s.Require().NoError(err) before unmarshalling which fails the
intended error-path assertions; change the flow to check the error returned by
GetRequest first: if err != nil then assert the test case expects an error
(s.Require().True(tc.expErr) / s.Require().Empty(deployments... or equivalent)
and return from the subtest), otherwise proceed to unmarshal the response and
perform the success assertions (NoError on unmarshal, length and equality
checks). Apply the same fix to the other occurrences at lines 205-220 and
269-284.

nodeEventReplayBlocksStart
nodeEventReplayBlocksDone
nodeEventBlockIndexed
nodeEventBlockCommited
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Event name normalized.

The event constant renamed from nodeEventBlockIndexed to nodeEventBlockCommited better reflects the block finality semantic. Note: there's a typo—should be Committed with double 't'.

Apply this diff to fix the typo:

-	nodeEventBlockCommited
+	nodeEventBlockCommitted

Update all references to this constant accordingly (lines 1030, 1305).

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
nodeEventBlockCommited
nodeEventBlockCommitted
🤖 Prompt for AI Agents
In tests/upgrade/upgrade_test.go around line 55 the event constant was renamed
to nodeEventBlockCommited but contains a typo; rename it to
nodeEventBlockCommitted (with double 't') and update all usages accordingly
(specifically at lines ~1030 and ~1305) so references match the corrected
identifier; ensure any import or test assertions referencing the old name are
updated to the new spelling.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant