Skip to content

chore: add iterate raw for multi#6

Open
0xstepit wants to merge 4 commits into
mainfrom
stepit/collections
Open

chore: add iterate raw for multi#6
0xstepit wants to merge 4 commits into
mainfrom
stepit/collections

Conversation

@0xstepit

@0xstepit 0xstepit commented Sep 23, 2025

Copy link
Copy Markdown

Description

This PR is required to make pagination working with multi indexes.

Closes: #XXXX

Summary by CodeRabbit

  • New Features

    • Added raw iteration support for multi-indexes, enabling bounded, ordered scanning over key-pairs for flexible pagination and low-level access.
  • Improvements

    • Changelog and documentation updated to reflect the new raw iteration capability.
  • Chores

    • CI workflows and tooling versions updated for newer action/tooling compatibility.

@0xstepit 0xstepit self-assigned this Sep 23, 2025
@coderabbitai

coderabbitai Bot commented Sep 23, 2025

Copy link
Copy Markdown

Walkthrough

Added a new exported method IterateRaw to Multi[ReferenceKey, PrimaryKey, Value] in collections/indexes/multi.go that delegates to the underlying refKeys.IterateRaw, returning a raw iterator over (ReferenceKey, PrimaryKey) pairs with start/end bounds and order.

Changes

Cohort / File(s) Change Summary
Indexes API: Multi raw iterator
collections/indexes/multi.go
Added exported method IterateRaw(ctx context.Context, start, end []byte, order collections.Order) (collections.Iterator[collections.Pair[ReferenceKey, PrimaryKey], collections.NoValue], error) implemented by delegating to refKeys.IterateRaw.
Changelog
CHANGELOG.md
Added Unreleased entry documenting the new IterateRaw method for the Multi index type.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Client
  participant Multi as Multi[RefKey, PrimaryKey, Value]
  participant RefKeys as KeySet (refKeys)

  Client->>Multi: IterateRaw(ctx, start, end, order)
  note right of Multi #E6F4EA: Delegate to underlying key set
  Multi->>RefKeys: IterateRaw(ctx, start, end, order)
  RefKeys-->>Multi: Iterator[(RefKey, PrimaryKey)]
  Multi-->>Client: Iterator[(RefKey, PrimaryKey)]
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

A rabbit taps the keys with glee,
“Raw paths unlocked!” it squeaks with plea.
Through refKeys’ lanes the bytes now flow,
Start to end, in ordered row.
Hop-hop, iterate — find and go. 🐇✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title succinctly identifies the addition of an "iterate raw" capability to the multi index type, matching the main change in the PR and making it clear what functionality is being introduced.
✨ 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 stepit/collections

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
collections/indexes/multi.go (1)

122-126: Add GoDoc clarifying raw bounds and Close() requirement.

Document that bounds are raw encoded key bytes for Pair[ReferenceKey, PrimaryKey], and that the iterator must be closed by the caller.

Apply:

+// IterateRaw exposes the underlying KeySet raw iterator for this Multi index.
+// start and end are raw encoded key bounds for Pair[ReferenceKey, PrimaryKey]
+// (see collections.KeySet.IterateRaw for bound and ordering semantics).
+// The caller must Close() the returned iterator.
 func (m *Multi[ReferenceKey, PrimaryKey, Value]) IterateRaw(
 	ctx context.Context, start, end []byte, order collections.Order,
 ) (collections.Iterator[collections.Pair[ReferenceKey, PrimaryKey], collections.NoValue], error) {
 	return m.refKeys.IterateRaw(ctx, start, end, order)
 }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 810d15d and edd6569.

📒 Files selected for processing (1)
  • collections/indexes/multi.go (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
collections/indexes/multi.go (3)
collections/iter.go (2)
  • Order (17-17)
  • Iterator (211-218)
collections/pair.go (1)
  • Pair (13-16)
collections/keyset.go (4)
  • NoValue (122-122)
  • NoValue (135-137)
  • NoValue (139-144)
  • NoValue (146-148)
🔇 Additional comments (1)
collections/indexes/multi.go (1)

122-126: Good addition: enables pagination over Multi via raw iteration.

Thin passthrough to KeySet.IterateRaw looks correct.

Please confirm callers always Close() the returned iterator to avoid leaks and that expected start/end bound semantics (inclusive/exclusive) match KeySet.IterateRaw.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 9

🧹 Nitpick comments (5)
README.md (1)

68-69: Add a blank line after the heading

Insert an empty line between the ## Documentation and Resources heading and the bold sentence to satisfy Markdown style (MD022) and keep formatting consistent.

 ## Documentation and Resources
-**View the Cosmos SDK documentation: https://docs.cosmos.network/**
+
+**View the Cosmos SDK documentation: https://docs.cosmos.network/**
Makefile (4)

429-437: Avoid drift: pin CometBFT proto URLs to the module version you build against

You’re fetching protos from hardcoded v0.38.0 while CMTVERSION is dynamic. This can desync generated code vs linked lib.

Apply:

-CMT_URL              = https://raw.githubusercontent.com/cometbft/cometbft/v0.38.0/proto/tendermint
+## Use module version (strip any prerelease metadata after '-') to fetch matching protos
+CMT_TAG              := $(shell echo $(CMTVERSION) | cut -d- -f1)
+CMT_URL              = https://raw.githubusercontent.com/cometbft/cometbft/$(CMT_TAG)/proto/tendermint

Optionally add a guard to fail if CMT_TAG is empty.

Also applies to: 441-463


141-143: mockgen upgrade: verify generator path/flags compatibility

You’re using go.uber.org/mock/mockgen@v0.6.0. Ensure scripts/mockgen.sh expects Uber’s mockgen (not github.com/golang/mock) and flags are compatible.

  • If the script assumes golang/mock flags, switch module/path accordingly.
  • Consider pinning via a tools.go and caching GOBIN to avoid reinstall on every run.

382-387: golangci-lint v2 migration: validate CI and wrapper script

v2 changes flags/output. Verify ./scripts/go-lint-all.bash is compatible and CI runners have Go version meeting v2 requirements.

  • Cache the linter binary to avoid reinstall on every lint (e.g., check version before install).
  • Confirm --timeout and --fix behavior matches v2.

Also applies to: 390-397


15-15: Module path is correctly aligned; sed extraction can be simplified but is not required.

The module github.com/cometbft/cometbft (without /v2) and symbol path github.com/cometbft/cometbft/version.TMCoreSemVer align correctly; no link-time failure risk. The current sed-based extraction works. Switching to the format flag is a robustness improvement, not a fix:

-export CMTVERSION := $(shell go list -m github.com/cometbft/cometbft | sed 's:.* ::')
+export CMTVERSION := $(shell go list -m -f '{{.Version}}' github.com/cometbft/cometbft)
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 43d67d0 and e775378.

⛔ Files ignored due to path filters (21)
  • api/cosmos/circuit/v1/query_grpc.pb.go is excluded by !**/*.pb.go
  • api/cosmos/circuit/v1/tx_grpc.pb.go is excluded by !**/*.pb.go
  • api/cosmos/crisis/v1beta1/tx_grpc.pb.go is excluded by !**/*.pb.go
  • api/cosmos/feegrant/v1beta1/query_grpc.pb.go is excluded by !**/*.pb.go
  • api/cosmos/group/v1/query_grpc.pb.go is excluded by !**/*.pb.go
  • api/cosmos/group/v1/tx_grpc.pb.go is excluded by !**/*.pb.go
  • api/cosmos/nft/v1beta1/query_grpc.pb.go is excluded by !**/*.pb.go
  • api/cosmos/nft/v1beta1/tx_grpc.pb.go is excluded by !**/*.pb.go
  • api/go.sum is excluded by !**/*.sum
  • client/grpc/cmtservice/query.pb.go is excluded by !**/*.pb.go
  • client/grpc/cmtservice/types.pb.go is excluded by !**/*.pb.go
  • client/v2/go.sum is excluded by !**/*.sum
  • collections/go.sum is excluded by !**/*.sum
  • contrib/x/circuit/types/query.pb.go is excluded by !**/*.pb.go
  • contrib/x/circuit/types/query.pb.gw.go is excluded by !**/*.pb.gw.go
  • contrib/x/circuit/types/tx.pb.go is excluded by !**/*.pb.go
  • contrib/x/circuit/types/types.pb.go is excluded by !**/*.pb.go
  • contrib/x/crisis/types/genesis.pb.go is excluded by !**/*.pb.go
  • contrib/x/crisis/types/tx.pb.go is excluded by !**/*.pb.go
  • contrib/x/group/events.pb.go is excluded by !**/*.pb.go
  • contrib/x/group/genesis.pb.go is excluded by !**/*.pb.go
📒 Files selected for processing (62)
  • .github/CODEOWNERS (0 hunks)
  • .github/dependabot.yml (0 hunks)
  • .github/pr_labeler.yml (0 hunks)
  • .github/workflows/build-docs.yml (1 hunks)
  • .github/workflows/build.yml (1 hunks)
  • .github/workflows/changelog-reminder.yml (1 hunks)
  • .github/workflows/codeql-analysis.yml (2 hunks)
  • .github/workflows/consensuswarn.yml (0 hunks)
  • .github/workflows/dependabot-update-all.yml (1 hunks)
  • .github/workflows/dependencies-review.yml (1 hunks)
  • .github/workflows/docker.yml (1 hunks)
  • .github/workflows/enforce_signed.yml (1 hunks)
  • .github/workflows/gosec.yml (0 hunks)
  • .github/workflows/lint-pr.yml (1 hunks)
  • .github/workflows/lint.yml (1 hunks)
  • .github/workflows/md-link-checker.yml (1 hunks)
  • .github/workflows/pr-go-mod-tidy-mocks.yml (2 hunks)
  • .github/workflows/proto-docker.yml (1 hunks)
  • .github/workflows/proto-registry.yml (1 hunks)
  • .github/workflows/proto.yml (2 hunks)
  • .github/workflows/release-confix.yml (1 hunks)
  • .github/workflows/release-cosmovisor.yml (1 hunks)
  • .github/workflows/release-simd.yml (1 hunks)
  • .github/workflows/release.yml (1 hunks)
  • .github/workflows/sims-047.yml (5 hunks)
  • .github/workflows/sims-050.yml (5 hunks)
  • .github/workflows/sims-053.yml (5 hunks)
  • .github/workflows/sims-nightly.yml (2 hunks)
  • .github/workflows/sims.yml (5 hunks)
  • .github/workflows/systemtests.yml (3 hunks)
  • .github/workflows/test.yml (19 hunks)
  • .gitpod.yml (0 hunks)
  • CHANGELOG.md (8 hunks)
  • Makefile (6 hunks)
  • README.md (2 hunks)
  • RELEASE_NOTES.md (1 hunks)
  • SECURITY.md (1 hunks)
  • UPGRADE_GUIDE.md (4 hunks)
  • UPGRADING.md (2 hunks)
  • api/cometbft/p2p/v1/pex.pulsar.go (0 hunks)
  • api/cosmos/app/v1alpha1/config.pulsar.go (1 hunks)
  • api/cosmos/authz/v1beta1/event.pulsar.go (2 hunks)
  • api/cosmos/authz/v1beta1/query.pulsar.go (6 hunks)
  • api/cosmos/base/abci/v1beta1/abci.pulsar.go (27 hunks)
  • api/cosmos/base/reflection/v2alpha1/reflection.pulsar.go (3 hunks)
  • api/cosmos/base/tendermint/v1beta1/query.pulsar.go (24 hunks)
  • api/cosmos/base/tendermint/v1beta1/types.pulsar.go (21 hunks)
  • api/cosmos/base/v1beta1/coin.pulsar.go (1 hunks)
  • api/cosmos/circuit/module/v1/module.pulsar.go (0 hunks)
  • api/cosmos/circuit/v1/types.pulsar.go (0 hunks)
  • api/cosmos/consensus/v1/query.pulsar.go (9 hunks)
  • api/cosmos/consensus/v1/tx.pulsar.go (12 hunks)
  • api/cosmos/crisis/module/v1/module.pulsar.go (0 hunks)
  • api/cosmos/crisis/v1beta1/genesis.pulsar.go (0 hunks)
  • api/cosmos/crisis/v1beta1/tx.pulsar.go (0 hunks)
  • api/cosmos/crypto/multisig/v1beta1/multisig.pulsar.go (1 hunks)
  • api/cosmos/feegrant/v1beta1/query.pulsar.go (5 hunks)
  • api/cosmos/gov/v1/genesis.pulsar.go (1 hunks)
  • api/cosmos/gov/v1/gov.pulsar.go (1 hunks)
  • api/cosmos/gov/v1/query.pulsar.go (1 hunks)
  • api/cosmos/group/module/v1/module.pulsar.go (0 hunks)
  • api/cosmos/group/v1/genesis.pulsar.go (0 hunks)
💤 Files with no reviewable changes (14)
  • .gitpod.yml
  • .github/dependabot.yml
  • .github/workflows/consensuswarn.yml
  • api/cosmos/crisis/v1beta1/genesis.pulsar.go
  • api/cosmos/crisis/module/v1/module.pulsar.go
  • api/cosmos/circuit/v1/types.pulsar.go
  • .github/CODEOWNERS
  • api/cosmos/group/v1/genesis.pulsar.go
  • .github/workflows/gosec.yml
  • api/cometbft/p2p/v1/pex.pulsar.go
  • api/cosmos/group/module/v1/module.pulsar.go
  • api/cosmos/crisis/v1beta1/tx.pulsar.go
  • .github/pr_labeler.yml
  • api/cosmos/circuit/module/v1/module.pulsar.go
✅ Files skipped from review due to trivial changes (11)
  • SECURITY.md
  • RELEASE_NOTES.md
  • api/cosmos/gov/v1/genesis.pulsar.go
  • api/cosmos/app/v1alpha1/config.pulsar.go
  • api/cosmos/authz/v1beta1/query.pulsar.go
  • api/cosmos/gov/v1/query.pulsar.go
  • api/cosmos/gov/v1/gov.pulsar.go
  • api/cosmos/base/reflection/v2alpha1/reflection.pulsar.go
  • api/cosmos/crypto/multisig/v1beta1/multisig.pulsar.go
  • api/cosmos/feegrant/v1beta1/query.pulsar.go
  • api/cosmos/authz/v1beta1/event.pulsar.go
🧰 Additional context used
🧬 Code graph analysis (5)
api/cosmos/consensus/v1/query.pulsar.go (2)
api/tendermint/types/params.pulsar.go (3)
  • ConsensusParams (3506-3516)
  • ConsensusParams (3531-3531)
  • ConsensusParams (3534-3536)
x/consensus/types/query.pb.go (3)
  • QueryParamsResponse (71-76)
  • QueryParamsResponse (80-80)
  • QueryParamsResponse (81-83)
api/cosmos/base/abci/v1beta1/abci.pulsar.go (3)
api/tendermint/abci/types.pulsar.go (3)
  • Event (33441-33448)
  • Event (33463-33463)
  • Event (33466-33468)
api/tendermint/types/block.pulsar.go (3)
  • Block (701-710)
  • Block (725-725)
  • Block (728-730)
types/abci.pb.go (9)
  • TxResponse (34-67)
  • TxResponse (70-70)
  • TxResponse (71-73)
  • Result (324-337)
  • Result (340-340)
  • Result (341-343)
  • SearchBlocksResult (619-632)
  • SearchBlocksResult (635-635)
  • SearchBlocksResult (636-638)
api/cosmos/base/tendermint/v1beta1/types.pulsar.go (4)
api/tendermint/types/types.pulsar.go (12)
  • Data (10318-10327)
  • Data (10342-10342)
  • Data (10345-10347)
  • Commit (10473-10482)
  • Commit (10497-10497)
  • Commit (10500-10502)
  • BlockID (10129-10136)
  • BlockID (10151-10151)
  • BlockID (10154-10156)
  • Header (10173-10197)
  • Header (10212-10212)
  • Header (10215-10217)
api/tendermint/types/evidence.pulsar.go (6)
  • Evidence (2539-2549)
  • Evidence (2564-2564)
  • Evidence (2567-2569)
  • EvidenceList (2744-2750)
  • EvidenceList (2765-2765)
  • EvidenceList (2768-2770)
api/tendermint/version/types.pulsar.go (3)
  • Consensus (998-1005)
  • Consensus (1020-1020)
  • Consensus (1023-1025)
api/tendermint/types/block.pulsar.go (3)
  • Block (701-710)
  • Block (725-725)
  • Block (728-730)
api/cosmos/base/tendermint/v1beta1/query.pulsar.go (4)
api/tendermint/types/types.pulsar.go (3)
  • BlockID (10129-10136)
  • BlockID (10151-10151)
  • BlockID (10154-10156)
api/cosmos/base/tendermint/v1beta1/types.pulsar.go (3)
  • Block (2004-2013)
  • Block (2028-2028)
  • Block (2031-2033)
api/tendermint/p2p/types.pulsar.go (3)
  • DefaultNodeInfo (2547-2560)
  • DefaultNodeInfo (2575-2575)
  • DefaultNodeInfo (2578-2580)
client/grpc/cmtservice/query.pb.go (12)
  • GetBlockByHeightResponse (377-382)
  • GetBlockByHeightResponse (386-386)
  • GetBlockByHeightResponse (387-389)
  • GetLatestBlockResponse (476-481)
  • GetLatestBlockResponse (485-485)
  • GetLatestBlockResponse (486-488)
  • VersionInfo (710-719)
  • VersionInfo (723-723)
  • VersionInfo (724-726)
  • GetNodeInfoResponse (657-660)
  • GetNodeInfoResponse (664-664)
  • GetNodeInfoResponse (665-667)
api/cosmos/consensus/v1/tx.pulsar.go (2)
api/tendermint/types/params.pulsar.go (12)
  • BlockParams (3574-3585)
  • BlockParams (3600-3600)
  • BlockParams (3603-3605)
  • EvidenceParams (3622-3642)
  • EvidenceParams (3657-3657)
  • EvidenceParams (3660-3662)
  • ValidatorParams (3687-3693)
  • ValidatorParams (3708-3708)
  • ValidatorParams (3711-3713)
  • ABCIParams (3805-3820)
  • ABCIParams (3835-3835)
  • ABCIParams (3838-3840)
x/consensus/types/tx.pb.go (3)
  • MsgUpdateParams (35-47)
  • MsgUpdateParams (51-51)
  • MsgUpdateParams (52-54)
🪛 actionlint (1.7.8)
.github/workflows/test.yml

197-197: label "depot-ubuntu-22.04-4" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-11-arm", "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", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-26-xlarge", "macos-26", "macos-15-intel", "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)

🪛 LanguageTool
README.md

[grammar] ~47-~47: There might be a mistake here.
Context: ...chain application. For more information on modules, see our [introduction doc](....

(QB_NEW_EN)


[grammar] ~68-~68: There might be a mistake here.
Context: ...N36) |** ## Documentation and Resources **View the Cosmos SDK documentation: https...

(QB_NEW_EN)


[grammar] ~74-~74: There might be a mistake here.
Context: ...nsfer any type of data encoded in bytes. - [Cosmos EVM](https://github.com/cosmos/ev...

(QB_NEW_EN)

UPGRADE_GUIDE.md

[grammar] ~9-~9: There might be a mistake here.
Context: ...ill have: * The x/protocolpool module * The x/epochs module * Unordered Transa...

(QB_NEW_EN)


[grammar] ~10-~10: There might be a mistake here.
Context: ...ocolpoolmodule * Thex/epochs` module * Unordered Transaction support ## Table ...

(QB_NEW_EN)


[grammar] ~15-~15: There might be a mistake here.
Context: ...ntents * App Wiring Changes (REQUIRED) * [Adding ProtocolPool Module (OPTIONAL)](#...

(QB_NEW_EN)


[grammar] ~16-~16: There might be a mistake here.
Context: ...* Adding ProtocolPool Module (OPTIONAL) * [ProtocolPool Manual Wiring](#protocolpoo...

(QB_NEW_EN)


[grammar] ~17-~17: There might be a mistake here.
Context: ...ional) * ProtocolPool Manual Wiring * [ProtocolPool DI Wiring](#protocolpool-di...

(QB_NEW_EN)


[grammar] ~18-~18: There might be a mistake here.
Context: ...al-wiring) * ProtocolPool DI Wiring * [Adding Epochs Module (OPTIONAL)](#adding...

(QB_NEW_EN)


[grammar] ~19-~19: There might be a mistake here.
Context: ...ring) * Adding Epochs Module (OPTIONAL) * [Epochs Manual Wiring](#epochs-manual-wir...

(QB_NEW_EN)


[grammar] ~20-~20: There might be a mistake here.
Context: ...le-optional) * Epochs Manual Wiring * Epochs DI Wiring * [...

(QB_NEW_EN)


[grammar] ~21-~21: There might be a mistake here.
Context: ...s-manual-wiring) * Epochs DI Wiring * [Enable Unordered Transactions (OPTIONAL)...

(QB_NEW_EN)


[grammar] ~22-~22: There might be a mistake here.
Context: ...Enable Unordered Transactions (OPTIONAL)](#enable-unordered-transactions-optional) * Upgrade Handler ## A...

(QB_NEW_EN)

UPGRADING.md

[grammar] ~18-~18: There might be a mistake here.
Context: ... the SDK baseapp. More information from the CometBFT repo can be found [here](ht...

(QB_NEW_EN)


[grammar] ~25-~25: There might be a mistake here.
Context: ...h can be passed to your application upon initialization in app.go. Setting thi...

(QB_NEW_EN)


[grammar] ~26-~26: There might be a mistake here.
Context: ...hat is set in validators' config.toml.

(QB_NEW_EN)

🪛 markdownlint-cli2 (0.18.1)
README.md

1-1: First line in a file should be a top-level heading

(MD041, first-line-heading, first-line-h1)


50-50: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


51-51: Link text should be descriptive

(MD059, descriptive-link-text)


57-57: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


68-68: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

CHANGELOG.md

45-45: Unordered list indentation
Expected: 4; Actual: 2

(MD007, ul-indent)


46-46: Unordered list indentation
Expected: 4; Actual: 2

(MD007, ul-indent)


47-47: Unordered list indentation
Expected: 4; Actual: 2

(MD007, ul-indent)


48-48: Unordered list indentation
Expected: 4; Actual: 2

(MD007, ul-indent)

UPGRADE_GUIDE.md

17-17: Link fragments should be valid

(MD051, link-fragments)


18-18: Link fragments should be valid

(MD051, link-fragments)


20-20: Link fragments should be valid

(MD051, link-fragments)


21-21: Link fragments should be valid

(MD051, link-fragments)

UPGRADING.md

9-9: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


19-19: Link text should be descriptive

(MD059, descriptive-link-text)

⏰ 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). (1)
  • GitHub Check: Summary
🔇 Additional comments (11)
.github/workflows/proto-docker.yml (1)

37-37: Upgrade looks good

actions/checkout@v5 is compatible with the existing workflow configuration. No additional changes required.

api/cosmos/base/v1beta1/coin.pulsar.go (1)

1888-1888: Typo fix looks good.

Thanks for correcting the grammar in the comment.

.github/workflows/md-link-checker.yml (1)

10-10: Checkout v5 upgrade looks good.

Thanks for keeping the workflow current—actions/checkout@v5 is the recommended major and works as a drop-in replacement here.

api/cosmos/base/abci/v1beta1/abci.pulsar.go (1)

5-605: Migration to tendermint protobuf types looks solid.

Imports, list helpers, and marshal/unmarshal paths consistently use *abci.Event and *types.Block, so the generated surface stays coherent with the new Tendermint packages. ✅

Also applies to: 1270-8045

.github/workflows/proto-registry.yml (1)

19-19: actions/checkout@v5 is a valid published tag.

Verification confirms that actions/checkout@v5 exists and is available on the GitHub Marketplace. The workflow will not fail due to a missing version tag when re-enabled.

README.md (1)

5-5: Banner asset docs/static/img/banner.svg is present in the repository. No issues to address.

Makefile (1)

465-466: Verify buf version in proto image supports buf mod update
Run locally to confirm the image includes a compatible buf CLI (v1.24.0+):

docker run --rm ghcr.io/cosmos/proto-builder:0.17.1 buf --version
docker run --rm ghcr.io/cosmos/proto-builder:0.17.1 buf mod update --help
api/cosmos/base/tendermint/v1beta1/query.pulsar.go (4)

10770-10774: Wire format stable; Go API break is intentional and properly managed

The migration is complete with full backward compatibility:

  • The deprecated Block field (tendermint.types.Block) remains populated and serialized alongside the new SdkBlock field
  • Test coverage in tests/e2e/client/grpc/cmtservice/service_test.go (line 96) verifies both old and new accessors work
  • Conversion logic in client/grpc/cmtservice/service.go (lines 75–78) populates all three fields: BlockId, Block, and SdkBlock
  • No stale cometbft v2 references detected; types are properly sourced from tendermint.types

Consumers must update Go code to use SdkBlock instead of Block, but the wire format supports both old and new clients simultaneously. JSON/proto marshaling preserves all three fields.


7-9: Imports in query.pulsar.go are properly migrated; however, cometbft imports remain pervasive across the codebase

The migration to tendermint public APIs in this file (lines 7–9) is correct. However, the verification found extensive remaining cometbft imports across the codebase:

  • x/genutil, x/slashing, x/staking, x/simulation, x/gov, x/bank, x/consensus, x/auth, testutil, server, client, baseapp, and contrib modules all retain direct cometbft dependencies.

Clarify whether this PR is a partial migration and these imports are intentional, or whether the broader codebase should also be migrated as part of this effort.


10913-10915: GetNodeInfoResponse DefaultNodeInfo migration verified
Client and server code, marshaling helpers, and tests now correctly use p2p.DefaultNodeInfo.


10690-10693: Migrate GetBlockByHeightResponse fields to tendermint/types
Wire format unchanged; Go getters now return tendermint/types.BlockID and tendermint/types.Block—update all callsites, conversion helpers and tests accordingly.

Comment on lines +24 to 33
uses: actions/checkout@v5
with:
persist-credentials: false
fetch-depth: 0

- name: Setup Node.js 🔧
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: "16.x"
node-version: "24.x"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Target a released Node.js version.

node-version: "24.x" will currently break this workflow—Node 24 hasn’t shipped yet, so actions/setup-node can’t resolve it. Please stick with a released channel (e.g., 20.x LTS or 22.x current) until Node 24 is actually available.

🤖 Prompt for AI Agents
In .github/workflows/build-docs.yml around lines 24 to 33 the workflow pins
actions/setup-node to node-version: "24.x", which is not yet released and causes
setup-node to fail; update node-version to a released, supported value (for
example "20.x" for LTS or "22.x" for current) so setup-node can resolve
successfully, and commit the updated workflow YAML.

Comment on lines +23 to 27
- uses: actions/checkout@v5
- uses: actions/setup-go@v6
with:
go-version: "1.24"
go-version: "1.25"
check-latest: true

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Build matrix can’t install Go 1.25 today.

The CI build will fail until Go 1.25 exists—actions/setup-go only serves released versions. Please pin this (and the other workflows) to an available Go toolchain instead.

🤖 Prompt for AI Agents
.github/workflows/build.yml around lines 23 to 27: the workflow currently
specifies go-version: "1.25", which isn’t a released toolchain and causes CI
failures; update the go-version value to a released Go version (for example
"1.21" or your project's supported release) and apply the same pin to any other
workflows/matrices that reference 1.25 so CI uses an available toolchain.

Comment on lines +14 to 19
uses: actions/checkout@v5
- name: "Setup Go"
uses: actions/setup-go@v5
uses: actions/setup-go@v6
with:
go-version: "1.24"
go-version: "1.25"
check-latest: true

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Unreleased Go toolchain will break this job.

actions/setup-go@v6 can’t fetch Go 1.25 yet, so this dependency-review workflow will error out. Please revert to a released Go version and align the other updated workflows with that change.

🤖 Prompt for AI Agents
.github/workflows/dependencies-review.yml around lines 14 to 19: the workflow
pins Go to "1.25" which is not yet available for actions/setup-go@v6 and will
cause the job to fail; change go-version to the latest released Go (e.g.,
"1.24"), keep check-latest as needed, and then update any other workflow files
that were updated to 1.25 to the same released version to keep toolchain
versions consistent across workflows.

Comment on lines +3 to +72
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]

permissions:
contents: read # needed to read commits
pull-requests: write # needed to close the PR
issues: write # needed to post a comment

jobs:
check-signed-commits:
# Skip drafts to avoid noise while a PR is still being prepared
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest

steps:
- name: Verify all PR commits are signed
uses: actions/github-script@v8
with:
script: |
const { owner, repo } = context.repo;
const prNumber = context.payload.pull_request.number;

// Get all commits in the PR (handles pagination)
const commits = await github.paginate(
github.rest.pulls.listCommits,
{ owner, repo, pull_number: prNumber, per_page: 100 }
);

// Any commit without a verified signature?
const unsigned = commits.filter(c => !(c.commit?.verification?.verified));

if (unsigned.length === 0) {
core.info("All commits are verified-signed. ✅");
return;
}

// Build a helpful message & list the offending commits
const list = unsigned
.map(c => `- ${c.sha.substring(0,7)} — ${c.commit.message.split('\n')[0]}`)
.join('\n');

const msg = [
"🔒 **PR closed: unsigned commits detected**",
"",
`This pull request contains **${unsigned.length}** commit(s) without a *verified* signature.`,
"",
"**How to fix:**",
"1. Set up commit signing (GPG or SSH).",
"2. Amend/rebase so **every** commit in this PR is verified-signed.",
"3. Push the updated branch and open a new PR, or ask a maintainer to reopen once fixed.",
"",
"Docs: https://docs.github.com/authentication/managing-commit-signature-verification",
"",
"**Unsigned commits:**",
list
].join("\n");

// Post the explanation as a PR comment (PRs are Issues in the API)
await github.rest.issues.createComment({
owner, repo, issue_number: prNumber, body: msg
});

// Close the PR
await github.rest.pulls.update({
owner, repo, pull_number: prNumber, state: "closed"
});

// Mark the job as failed so it’s obvious in checks
core.setFailed(`Closed PR: found ${unsigned.length} unsigned commit(s).`);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Workflow cannot comment/close fork PRs due to token permissions

When this runs on a PR from a fork, the pull_request-triggered workflow executes with a read-only GITHUB_TOKEN. The issues.createComment and pulls.update calls will 403, so the job fails but never posts guidance or closes the PR. The gate therefore does not work for the common forked contributor path. Please move this logic to a pull_request_target workflow (which runs with write perms but uses trusted repo code), or otherwise execute it with a token that has the necessary write scopes.

Comment on lines +17 to 21
- uses: actions/checkout@v5
- uses: actions/setup-go@v6
with:
go-version: "1.24"
go-version: "1.25"
check-latest: true

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Go 1.25 isn’t available yet.

This workflow will fail for the same reason as the release jobs: actions/setup-go can’t install Go 1.25 today because that release doesn’t exist. Please pin to an actually published version (1.23.x/1.24.x) and update the rest of the PR accordingly.

🤖 Prompt for AI Agents
In .github/workflows/lint.yml around lines 17 to 21 the workflow pins
go-version: "1.25" which is not yet published and causes actions/setup-go to
fail; update the go-version to a currently released version (for example
"1.24.x" or "1.23.x") and ensure any other references in this PR (docs, matrix,
or release jobs) are updated to match the selected published Go version so the
workflow can install successfully.

Comment on lines +16 to 20
- uses: actions/checkout@v5
- uses: actions/setup-go@v6
with:
go-version: "1.24"
go-version: "1.25"
check-latest: true

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Revert to an available Go toolchain.

Setting go-version: "1.25" will make this workflow fail today—Go 1.25 hasn’t shipped yet, so actions/setup-go cannot install it. Please keep targeting a released version (e.g., 1.23.x/1.24.x) until 1.25 actually lands, and mirror that fix across the other workflows in this PR that were bumped to 1.25.

🤖 Prompt for AI Agents
.github/workflows/release-confix.yml lines 16-20: the workflow sets go-version:
"1.25" which is not released and will cause setup-go to fail; change the
go-version to a released toolchain (for example "1.24.x" or "1.23.x") and ensure
check-latest is set appropriately, then mirror the same replacement across any
other workflow files in this PR that were bumped to 1.25 so all CI workflows use
a released Go version.

Comment on lines +16 to 20
- uses: actions/checkout@v5
- uses: actions/setup-go@v6
with:
go-version: "1.24"
go-version: "1.25"
check-latest: true

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Stick to a released Go version.

Like the other workflows, pointing go-version at "1.25" will cause setup-go to fail because Go 1.25 isn’t out yet. Please keep using a published release (e.g., 1.23.x/1.24.x) across all workflows in this PR.

🤖 Prompt for AI Agents
.github/workflows/release-cosmovisor.yml lines 16-20: the workflow sets
go-version to "1.25" which is not yet released; update the go-version to a
published release (e.g., "1.24" or "1.24.x" or match the repo’s existing
workflows like "1.23.x") so actions/setup-go succeeds, and make the value
consistent across all workflows in this PR.

Comment thread CHANGELOG.md
* (baseapp) [#24655](https://github.com/cosmos/cosmos-sdk/pull/24655) Add mutex locks for `state` and make `lastCommitInfo` atomic to prevent race conditions between `Commit` and `CreateQueryContext`.
* (proto) [#24161](https://github.com/cosmos/cosmos-sdk/pull/24161) Remove unnecessary annotations from `x/staking` authz proto.
* (x/bank) [#24660](https://github.com/cosmos/cosmos-sdk/pull/24660) Improve performance of the `GetAllBalances` and `GetAccountsBalances` keeper methods.
* (collections) [#25464](https://github.com/cosmos/cosmos-sdk/pull/25464) Add `IterateRaw` method to `Multi` index type to satisfty query `Collection` interface.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Correct “satisfty” spelling.

The new entry says “satisfty query Collection interface”; please change it to “satisfy” for clarity in the changelog.

🤖 Prompt for AI Agents
In CHANGELOG.md around line 66, fix the misspelling “satisfty” to “satisfy” in
the changelog entry so the sentence reads “Add `IterateRaw` method to `Multi`
index type to satisfy query `Collection` interface.” Update only that word to
correct the spelling.

Comment thread UPGRADING.md
Comment on lines +21 to +23
For SDK application developers and node runners, this means that the `timeout_commit` value in the `config.toml` file
is still used if `NextBlockDelay` is 0 (its default value). This means that when upgrading to Cosmos SDK v0.54.x, if
the existing `timout_commit` values that validators have been using will be maintained and have the same behavior.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix typo in timeout_commit.

The sentence introduces timout_commit, which should be timeout_commit. Please correct the spelling so the configuration key is documented accurately.

🤖 Prompt for AI Agents
In UPGRADING.md around lines 21 to 23, fix the typo "timout_commit" to the
correct configuration key "timeout_commit" so the document consistently and
accurately references the config key used in config.toml; update the misspelled
instance and run a quick scan of the surrounding paragraph to ensure no other
occurrences remain.

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