feat(aep-86): add SDK proto surface and SDL support#308
Conversation
WalkthroughAdds a full verification module (protos, params, state, msgs, queries, events), provider maintenance protos/msgs/queries, SDL verification parsing and wiring into group building, an inventory snapshot RPC, Go helpers/tests for tier/capabilities, generated mock updates, and documentation/config updates. ChangesVerification Module and Provider Maintenance Feature
🎯 4 (Complex) | ⏱️ ~60 minutes
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
|
4ee361c to
459fe35
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
proto/provider/akash/inventory/v1/snapshot.proto (1)
71-74: ⚡ Quick winAdd proto validation constraint for provider bech32 address or clarify validation responsibility.
The
providerfield is documented as "on-chain account address in bech32 form" but defined as an unconstrainedstringat the proto level. Consider either adding a(cosmos_proto.scalar)constraint or clarifying in documentation that the implementation (not the proto) enforces bech32 validation before returning the response.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@proto/provider/akash/inventory/v1/snapshot.proto` around lines 71 - 74, The provider field in proto/provider/akash/inventory/v1/snapshot.proto is documented as a bech32 on-chain address but is an unconstrained string; either add a proto-level validation rule (e.g., use protoc-gen-validate on the provider field with an appropriate bech32 regex via (validate.rules).string.pattern) so the proto enforces bech32 format, or explicitly clarify in the field comment that the implementation (code that sets/returns Snapshot.provider) is responsible for bech32 validation prior to returning responses; update the field comment or add the PGV rule on the provider field accordingly (field name: provider, message: Snapshot) to make the responsibility explicit.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@proto/node/akash/verification/v1/types.proto`:
- Line 4: The gogoproto import in the proto files (import
"gogoproto/gogo.proto") is unresolved because the module's buf.yaml does not
expose the gogoproto dependency; update the proto module's buf.yaml to include
the gogoproto dependency (or the repo that provides gogo.proto) under deps or
module's dependency list so buf can resolve gogoproto imports when building the
proto/node package, then re-run buf build to verify the gogoproto.* options in
verification/v1/types.proto are recognized.
In `@proto/provider/akash/inventory/v1/snapshot.proto`:
- Around line 38-46: GetInventorySnapshotRequest.nonce is documented as a
32-byte challenge but lacks any enforcement; add a proto-level byte-length
constraint or explicit runtime validation: either annotate the nonce field with
buf validation (e.g., set bytes.min_len=32 and bytes.max_len=32 on message
GetInventorySnapshotRequest.nonce) or add a check in the GetInventorySnapshot
handler that returns a clear error when nonce.Length != 32; update tests to
exercise both valid (32-byte) and invalid lengths to ensure consistent behavior
across implementations.
---
Nitpick comments:
In `@proto/provider/akash/inventory/v1/snapshot.proto`:
- Around line 71-74: The provider field in
proto/provider/akash/inventory/v1/snapshot.proto is documented as a bech32
on-chain address but is an unconstrained string; either add a proto-level
validation rule (e.g., use protoc-gen-validate on the provider field with an
appropriate bech32 regex via (validate.rules).string.pattern) so the proto
enforces bech32 format, or explicitly clarify in the field comment that the
implementation (code that sets/returns Snapshot.provider) is responsible for
bech32 validation prior to returning responses; update the field comment or add
the PGV rule on the provider field accordingly (field name: provider, message:
Snapshot) to make the responsibility explicit.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 822e690d-012b-4992-bc9e-8d099208ab95
⛔ Files ignored due to path filters (69)
go/inventory/v1/snapshot.pb.gois excluded by!**/*.pb.gogo/inventory/v1/snapshot.pb.gw.gois excluded by!**/*.pb.gw.gogo/node/market/v1/types.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/event.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/genesis.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/maintenance.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/msg.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/params.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/paramsmsg.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/provider.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/query.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/query.pb.gw.gois excluded by!**/*.pb.gw.gogo/node/provider/v1beta4/service.pb.gois excluded by!**/*.pb.gogo/node/types/attributes/v1/attribute.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/event.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/genesis.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/msg.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/params.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/query.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/query.pb.gw.gois excluded by!**/*.pb.gw.gogo/node/verification/v1/service.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/state.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/types.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/verificationrequirement.pb.gois excluded by!**/*.pb.gors/src/gen/node/akash.base.attributes.v1.rsis excluded by!**/gen/**rs/src/gen/node/akash.base.attributes.v1.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.inventory.v1.rsis excluded by!**/gen/**rs/src/gen/node/akash.inventory.v1.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.inventory.v1.tonic.rsis excluded by!**/gen/**rs/src/gen/node/akash.market.v1.rsis excluded by!**/gen/**rs/src/gen/node/akash.market.v1.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.provider.v1beta4.rsis excluded by!**/gen/**rs/src/gen/node/akash.provider.v1beta4.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.provider.v1beta4.tonic.rsis excluded by!**/gen/**rs/src/gen/node/akash.verification.v1.rsis excluded by!**/gen/**rs/src/gen/node/akash.verification.v1.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.verification.v1.tonic.rsis excluded by!**/gen/**ts/src/generated/createNodeSDK.tsis excluded by!**/generated/**ts/src/generated/createProviderSDK.tsis excluded by!**/generated/**ts/src/generated/patches/nodeCustomTypePatches.spec.tsis excluded by!**/generated/**ts/src/generated/patches/nodeCustomTypePatches.tsis excluded by!**/generated/**ts/src/generated/protos/akash/base/attributes/v1/attribute.tsis excluded by!**/generated/**ts/src/generated/protos/akash/inventory/v1/snapshot.tsis excluded by!**/generated/**ts/src/generated/protos/akash/inventory/v1/snapshot_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/market/v1/types.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/event.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/genesis.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/maintenance.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/msg.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/params.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/paramsmsg.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/provider.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/query.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/query_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/service_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/event.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/genesis.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/msg.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/params.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/query.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/query_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/service.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/service_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/state.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/types.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/verificationrequirement.tsis excluded by!**/generated/**ts/src/generated/protos/index.akash.v1.tsis excluded by!**/generated/**ts/src/generated/protos/index.akash.v1beta4.tsis excluded by!**/generated/**ts/src/generated/protos/index.provider.akash.v1.tsis excluded by!**/generated/**
📒 Files selected for processing (34)
buf.yamlgo/node/verification/v1/capabilities.gogo/node/verification/v1/tier.gogo/node/verification/v1/tier_test.gogo/sdl/_testdata/v2.1-simple-verification.yamlgo/sdl/groupBuilder_v2.gogo/sdl/groupBuilder_v2_1.gogo/sdl/sdl-input.schema.yamlgo/sdl/v2.gogo/sdl/verification.gogo/sdl/verification_test.goproto/node/akash/base/attributes/v1/attribute.protoproto/node/akash/market/v1/types.protoproto/node/akash/market/v2beta1/types.protoproto/node/akash/provider/v1beta4/event.protoproto/node/akash/provider/v1beta4/genesis.protoproto/node/akash/provider/v1beta4/maintenance.protoproto/node/akash/provider/v1beta4/msg.protoproto/node/akash/provider/v1beta4/params.protoproto/node/akash/provider/v1beta4/paramsmsg.protoproto/node/akash/provider/v1beta4/provider.protoproto/node/akash/provider/v1beta4/query.protoproto/node/akash/provider/v1beta4/service.protoproto/node/akash/verification/v1/event.protoproto/node/akash/verification/v1/genesis.protoproto/node/akash/verification/v1/msg.protoproto/node/akash/verification/v1/params.protoproto/node/akash/verification/v1/query.protoproto/node/akash/verification/v1/service.protoproto/node/akash/verification/v1/state.protoproto/node/akash/verification/v1/types.protoproto/node/akash/verification/v1/verificationrequirement.protoproto/provider/akash/inventory/v1/snapshot.protots/src/sdl/validateSDL/validateSDLInput.ts
💤 Files with no reviewable changes (1)
- buf.yaml
There was a problem hiding this comment.
🧹 Nitpick comments (1)
proto/node/akash/provider/v1beta4/maintenance.proto (1)
96-100: ⚡ Quick winSpecify the
metadata_hashformat.Right now this is only described as an “opaque hash”, so different SDKs can serialize different digests or encodings for the same metadata and still satisfy the schema. Please document a canonical format here (for example raw SHA-256 bytes or multihash) so the new surface stays interoperable.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@proto/node/akash/provider/v1beta4/maintenance.proto` around lines 96 - 100, Update the comment for the bytes field metadata_hash (bytes metadata_hash = 8) to explicitly specify a canonical format and encoding to ensure interoperability — e.g. state that metadata_hash MUST be the raw 32-byte SHA-256 digest of the metadata (not hex or base64) and mention byte-order and that implementers MUST use raw bytes; alternatively, if you prefer multihash, declare the exact multihash format and encoding to be used. Ensure the new comment replaces the current “opaque hash” text and clearly names the algorithm and exact byte encoding for metadata_hash so all SDKs serialize the same digest.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@proto/node/akash/provider/v1beta4/maintenance.proto`:
- Around line 96-100: Update the comment for the bytes field metadata_hash
(bytes metadata_hash = 8) to explicitly specify a canonical format and encoding
to ensure interoperability — e.g. state that metadata_hash MUST be the raw
32-byte SHA-256 digest of the metadata (not hex or base64) and mention
byte-order and that implementers MUST use raw bytes; alternatively, if you
prefer multihash, declare the exact multihash format and encoding to be used.
Ensure the new comment replaces the current “opaque hash” text and clearly names
the algorithm and exact byte encoding for metadata_hash so all SDKs serialize
the same digest.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 089b4ae8-8273-4c9e-bf6d-8e24143f1f95
⛔ Files ignored due to path filters (60)
go/inventory/v1/snapshot.pb.gois excluded by!**/*.pb.gogo/node/market/v1/types.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/event.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/genesis.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/maintenance.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/msg.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/params.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/paramsmsg.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/provider.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/query.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/service.pb.gois excluded by!**/*.pb.gogo/node/types/attributes/v1/attribute.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/msg.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/query.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/state.pb.gois excluded by!**/*.pb.gors/src/gen/node/akash.base.attributes.v1.rsis excluded by!**/gen/**rs/src/gen/node/akash.base.attributes.v1.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.inventory.v1.rsis excluded by!**/gen/**rs/src/gen/node/akash.inventory.v1.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.inventory.v1.tonic.rsis excluded by!**/gen/**rs/src/gen/node/akash.market.v1.rsis excluded by!**/gen/**rs/src/gen/node/akash.market.v1.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.provider.v1beta4.rsis excluded by!**/gen/**rs/src/gen/node/akash.provider.v1beta4.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.provider.v1beta4.tonic.rsis excluded by!**/gen/**rs/src/gen/node/akash.verification.v1.rsis excluded by!**/gen/**rs/src/gen/node/akash.verification.v1.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.verification.v1.tonic.rsis excluded by!**/gen/**ts/src/generated/createNodeSDK.tsis excluded by!**/generated/**ts/src/generated/createProviderSDK.tsis excluded by!**/generated/**ts/src/generated/patches/nodeCustomTypePatches.spec.tsis excluded by!**/generated/**ts/src/generated/patches/nodeCustomTypePatches.tsis excluded by!**/generated/**ts/src/generated/protos/akash/base/attributes/v1/attribute.tsis excluded by!**/generated/**ts/src/generated/protos/akash/inventory/v1/snapshot.tsis excluded by!**/generated/**ts/src/generated/protos/akash/inventory/v1/snapshot_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/market/v1/types.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/event.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/genesis.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/maintenance.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/msg.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/params.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/paramsmsg.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/provider.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/query.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/query_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/service_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/event.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/genesis.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/msg.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/params.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/query.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/query_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/service.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/service_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/state.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/types.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/verificationrequirement.tsis excluded by!**/generated/**ts/src/generated/protos/index.akash.v1.tsis excluded by!**/generated/**ts/src/generated/protos/index.akash.v1beta4.tsis excluded by!**/generated/**ts/src/generated/protos/index.provider.akash.v1.tsis excluded by!**/generated/**
📒 Files selected for processing (28)
docs/config.yamldocs/proto/node.mddocs/proto/provider.mddocs/swagger-ui/swagger.yamlgo/mocks/node/client/provider/QueryClient_mock.gogo/node/verification/v1/capabilities.gogo/node/verification/v1/tier.gogo/node/verification/v1/tier_test.gogo/sdl/sdl-input.schema.yamlgo/sdl/verification.gogo/sdl/verification_test.goproto/node/akash/base/attributes/v1/attribute.protoproto/node/akash/market/v1/types.protoproto/node/akash/market/v2beta1/types.protoproto/node/akash/provider/v1beta4/event.protoproto/node/akash/provider/v1beta4/genesis.protoproto/node/akash/provider/v1beta4/maintenance.protoproto/node/akash/provider/v1beta4/msg.protoproto/node/akash/provider/v1beta4/params.protoproto/node/akash/provider/v1beta4/paramsmsg.protoproto/node/akash/provider/v1beta4/provider.protoproto/node/akash/provider/v1beta4/query.protoproto/node/akash/provider/v1beta4/service.protoproto/node/akash/verification/v1/msg.protoproto/node/akash/verification/v1/query.protoproto/node/akash/verification/v1/state.protoproto/provider/akash/inventory/v1/snapshot.protots/src/sdl/validateSDL/validateSDLInput.ts
✅ Files skipped from review due to trivial changes (1)
- go/mocks/node/client/provider/QueryClient_mock.go
🚧 Files skipped from review as they are similar to previous changes (7)
- go/sdl/verification_test.go
- proto/provider/akash/inventory/v1/snapshot.proto
- go/sdl/sdl-input.schema.yaml
- go/node/verification/v1/tier_test.go
- go/sdl/verification.go
- proto/node/akash/provider/v1beta4/query.proto
- go/node/verification/v1/tier.go
Adds the AEP-86 verification proto surface, provider extensions, market close reason, placement verification requirement, inventory snapshot RPC, generated Go bindings, tier/capability helpers, and SDL parsing. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Documents how AEP-86 tenant/provider/insufficient-funds close buckets map to existing lease close reason values without adding duplicate wire values. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Collapses vacuous SDL verification blocks to nil so omitted and explicitly empty verification requirements produce the same wire shape. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Matches the spec signature for MinBondForTier, returns a zero-denom-preserving coin for L0, and panics on unknown tiers after caller-side validation. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Regenerate the TypeScript and Rust SDK bindings for the AEP-86 proto surface. Keep the AEP-local lint fixes from the generated checks. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Regenerates TypeScript and Rust proto outputs from the full proto-gen target, refreshes the TypeScript SDL schema validator, and updates provider query mocks for the new provider query RPCs. Also trims planning-style comments from the L-1 SDK surface and switches SDL verification YAML parsing to the yaml.Node UnmarshalYAML pattern used by the SDL package. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Adds the typed deterministic payload carried inside the public inventory snapshot RPC response. The payload binds provider, chain ID, nonce, timestamp, cluster inventory, chain-facing resource summary, and collector evidence sections. Generated Go, TypeScript, and Rust inventory outputs are included for local provider integration. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Includes the generated proto docs and Rust serde outputs produced by the repo's full proto-gen target for the AEP-86 SDK surface. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
Regenerates AEP-86 TypeScript proto files with the current main branch ts-proto version after rebasing PR #308. The generated changes are limited to generator version headers and Buffer casts. Signed-off-by: Joseph Chalabi <chalabi.joseph@gmail.com>
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/proto/provider.md`:
- Around line 495-598: The generated snapshot section contains indented Markdown
headings (e.g., "GetInventorySnapshotRequest", "GetInventorySnapshotResponse",
"SnapshotEvidenceSection", "SnapshotPayload", "SnapshotResourceSummary",
"InventoryService") which violate markdownlint MD023; update the generator or
post-process the output so each heading marker (e.g., "###
GetInventorySnapshotRequest") begins at column 1 with no leading spaces, and
ensure the anchor tags and heading levels remain intact while removing only the
leading indentation from those heading lines.
- Line 559: The markdown anchor for `google.protobuf.Timestamp` is invalid;
update the `timestamp` table entry so the type either renders as plain code
(replace the link `[google.protobuf.Timestamp](`#google.protobuf.Timestamp`)` with
just `google.protobuf.Timestamp` in backticks) or point the link to the correct
heading anchor (e.g. `#google-protobuf-timestamp`) so the `timestamp` row's type
resolves correctly; locate the `timestamp` table row and change the link
accordingly.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 4cc03790-7ebc-4580-8978-58762aa161ce
⛔ Files ignored due to path filters (75)
go/inventory/v1/snapshot.pb.gois excluded by!**/*.pb.gogo/inventory/v1/snapshot.pb.gw.gois excluded by!**/*.pb.gw.gogo/node/market/v1/stats.pb.gois excluded by!**/*.pb.gogo/node/market/v1/types.pb.gois excluded by!**/*.pb.gogo/node/market/v1beta5/query.pb.gois excluded by!**/*.pb.gogo/node/market/v1beta5/query.pb.gw.gois excluded by!**/*.pb.gw.gogo/node/provider/v1beta4/event.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/genesis.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/maintenance.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/msg.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/params.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/paramsmsg.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/provider.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/query.pb.gois excluded by!**/*.pb.gogo/node/provider/v1beta4/query.pb.gw.gois excluded by!**/*.pb.gw.gogo/node/provider/v1beta4/service.pb.gois excluded by!**/*.pb.gogo/node/types/attributes/v1/attribute.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/event.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/genesis.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/msg.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/params.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/query.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/query.pb.gw.gois excluded by!**/*.pb.gw.gogo/node/verification/v1/service.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/state.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/types.pb.gois excluded by!**/*.pb.gogo/node/verification/v1/verificationrequirement.pb.gois excluded by!**/*.pb.gors/src/gen/node/akash.base.attributes.v1.rsis excluded by!**/gen/**rs/src/gen/node/akash.base.attributes.v1.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.inventory.v1.rsis excluded by!**/gen/**rs/src/gen/node/akash.inventory.v1.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.inventory.v1.tonic.rsis excluded by!**/gen/**rs/src/gen/node/akash.market.v1.rsis excluded by!**/gen/**rs/src/gen/node/akash.market.v1.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.market.v1beta5.rsis excluded by!**/gen/**rs/src/gen/node/akash.market.v1beta5.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.market.v1beta5.tonic.rsis excluded by!**/gen/**rs/src/gen/node/akash.provider.v1beta4.rsis excluded by!**/gen/**rs/src/gen/node/akash.provider.v1beta4.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.provider.v1beta4.tonic.rsis excluded by!**/gen/**rs/src/gen/node/akash.verification.v1.rsis excluded by!**/gen/**rs/src/gen/node/akash.verification.v1.serde.rsis excluded by!**/gen/**rs/src/gen/node/akash.verification.v1.tonic.rsis excluded by!**/gen/**ts/src/generated/createNodeSDK.tsis excluded by!**/generated/**ts/src/generated/createProviderSDK.tsis excluded by!**/generated/**ts/src/generated/patches/nodeCustomTypePatches.spec.tsis excluded by!**/generated/**ts/src/generated/patches/nodeCustomTypePatches.tsis excluded by!**/generated/**ts/src/generated/protos/akash/base/attributes/v1/attribute.tsis excluded by!**/generated/**ts/src/generated/protos/akash/inventory/v1/snapshot.tsis excluded by!**/generated/**ts/src/generated/protos/akash/inventory/v1/snapshot_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/market/v1/stats.tsis excluded by!**/generated/**ts/src/generated/protos/akash/market/v1/types.tsis excluded by!**/generated/**ts/src/generated/protos/akash/market/v1beta5/query.tsis excluded by!**/generated/**ts/src/generated/protos/akash/market/v1beta5/query_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/event.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/genesis.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/maintenance.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/msg.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/params.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/paramsmsg.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/provider.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/query.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/query_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/provider/v1beta4/service_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/event.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/genesis.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/msg.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/params.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/query.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/query_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/service.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/service_akash.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/state.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/types.tsis excluded by!**/generated/**ts/src/generated/protos/akash/verification/v1/verificationrequirement.tsis excluded by!**/generated/**
📒 Files selected for processing (42)
docs/config.yamldocs/proto/node.mddocs/proto/provider.mddocs/swagger-ui/swagger.yamlgo/mocks/node/client/provider/QueryClient_mock.gogo/node/client/v1beta3/client.gogo/node/client/v1beta3/query.gogo/node/verification/v1/capabilities.gogo/node/verification/v1/codec.gogo/node/verification/v1/tier.gogo/node/verification/v1/tier_test.gogo/sdl/_testdata/v2.1-simple-verification.yamlgo/sdl/groupBuilder_v2.gogo/sdl/groupBuilder_v2_1.gogo/sdl/sdl-input.schema.yamlgo/sdl/v2.gogo/sdl/verification.gogo/sdl/verification_test.goproto/node/akash/base/attributes/v1/attribute.protoproto/node/akash/market/v1/stats.protoproto/node/akash/market/v1/types.protoproto/node/akash/market/v1beta5/query.protoproto/node/akash/market/v2beta1/types.protoproto/node/akash/provider/v1beta4/event.protoproto/node/akash/provider/v1beta4/genesis.protoproto/node/akash/provider/v1beta4/maintenance.protoproto/node/akash/provider/v1beta4/msg.protoproto/node/akash/provider/v1beta4/params.protoproto/node/akash/provider/v1beta4/paramsmsg.protoproto/node/akash/provider/v1beta4/provider.protoproto/node/akash/provider/v1beta4/query.protoproto/node/akash/provider/v1beta4/service.protoproto/node/akash/verification/v1/event.protoproto/node/akash/verification/v1/genesis.protoproto/node/akash/verification/v1/msg.protoproto/node/akash/verification/v1/params.protoproto/node/akash/verification/v1/query.protoproto/node/akash/verification/v1/service.protoproto/node/akash/verification/v1/state.protoproto/node/akash/verification/v1/types.protoproto/node/akash/verification/v1/verificationrequirement.protoproto/provider/akash/inventory/v1/snapshot.proto
✅ Files skipped from review due to trivial changes (3)
- docs/config.yaml
- go/sdl/_testdata/v2.1-simple-verification.yaml
- go/mocks/node/client/provider/QueryClient_mock.go
🚧 Files skipped from review as they are similar to previous changes (10)
- go/sdl/sdl-input.schema.yaml
- go/node/verification/v1/capabilities.go
- proto/node/akash/provider/v1beta4/params.proto
- go/sdl/v2.go
- go/node/verification/v1/tier.go
- go/sdl/groupBuilder_v2_1.go
- proto/node/akash/market/v2beta1/types.proto
- go/node/verification/v1/tier_test.go
- go/sdl/verification.go
- go/sdl/verification_test.go
📝 Description
Adds the AEP-86 L-1 SDK surface for provider verifications. This includes the new verification proto package, provider/market/attributes/inventory proto extensions, generated SDK bindings, verification tier helpers, and SDL parsing/validation for placement verification requirements.
The inventory SDK surface now includes both the public
GetInventorySnapshotRPC envelope and the typed deterministicSnapshotPayloadcontract carried insidesnapshot_payload: provider address, chain ID, nonce, timestamp, cluster inventory, resource summary, and collector evidence sections.Generated artifacts are included where this repo checks them in: Go protobuf/grpc-gateway bindings, TypeScript generated protobuf bindings, Rust generated protobuf bindings, and the TypeScript SDL validator generated from
go/sdl/sdl-input.schema.yaml.🔧 Purpose of the Change
📌 Related Issues
✅ Checklist
📎 Notes for Reviewers
LeaseClosedReasonTenantis not added as a duplicate enum value; tenant close semantics map to the existing owner close reason.verificationblocks collapse to nil, preserving the same on-chain effect as omitting the block.GetInventorySnapshotimplementation; this SDK PR defines the request/response and signed payload contract.CI is currently blocked by upstream repo CI issues: broken golangci-lint install path, Buf 403 on the self-hosted runner, and coverage runner termination.