Skip to content

feat(aep-86): add SDK proto surface and SDL support#308

Open
chalabi2 wants to merge 15 commits into
mainfrom
aep-86/sdk-l1
Open

feat(aep-86): add SDK proto surface and SDL support#308
chalabi2 wants to merge 15 commits into
mainfrom
aep-86/sdk-l1

Conversation

@chalabi2
Copy link
Copy Markdown
Contributor

@chalabi2 chalabi2 commented May 18, 2026

📝 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 GetInventorySnapshot RPC envelope and the typed deterministic SnapshotPayload contract carried inside snapshot_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

  • New feature implementation
  • Bug fix
  • Documentation update
  • Code refactoring
  • Dependency upgrade
  • Other: [specify]

📌 Related Issues

✅ Checklist

  • I've updated relevant documentation
  • Code follows Akash Network's style guide
  • I've added/updated relevant unit tests
  • Dependencies have been properly updated
  • I agree and adhered to the Contribution Guidelines

📎 Notes for Reviewers

  • No dependency versions were changed.
  • LeaseClosedReasonTenant is not added as a duplicate enum value; tenant close semantics map to the existing owner close reason.
  • Vacuous SDL verification blocks collapse to nil, preserving the same on-chain effect as omitting the block.
  • SDL rejects tier-zero verification blocks with capability, auditor, or min-count filters.
  • Nonce byte-length enforcement belongs in the provider daemon GetInventorySnapshot implementation; 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.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 18, 2026

Review Change Stack

Walkthrough

Adds 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.

Changes

Verification Module and Provider Maintenance Feature

Layer / File(s) Summary
Verification Type Enums and Constants
proto/node/akash/verification/v1/types.proto
Proto enums for verification tiers, auditor/bond/attestation/escrow/discrepancy/grace statuses, capability flags, auditor selection modes, and typed reason codes.
Verification State Records
proto/node/akash/verification/v1/state.proto
On-chain state messages for auditors, attestations, audit escrows, discrepancies, provider verification grace, provider bonds/unbonding, resource summaries, and provider snapshots.
Verification Genesis and Parameters
proto/node/akash/verification/v1/genesis.proto, proto/node/akash/verification/v1/params.proto
GenesisState with record collections and ID counters; Params with per-tier bonds/TTLs/fees, renewal/snapshot cadence, resource-scaled provider bonds, promotion constraints, EndBlocker caps, deposit/grace config, and contact-response SLAs.
Verification Requirement Message
proto/node/akash/verification/v1/verificationrequirement.proto
VerificationRequirement proto defining min_tier, required_capabilities, required_auditors, auditor_mode, and min_auditor_count for SDL→chain mapping.
Verification Transaction Messages
proto/node/akash/verification/v1/msg.proto
Msg types for auditor bond posting, attestation submit/revoke/remove, audit escrow lifecycle, provider bond posting/withdrawal, snapshot posting, auditor registration/renewal/removal, discrepancy resolution, bond slashing, and params update.
Verification Query and Msg Services
proto/node/akash/verification/v1/query.proto, proto/node/akash/verification/v1/service.proto
Query service with REST bindings for auditors/attestations/discrepancies/audit-escrows/grace/bonds/snapshots/params; Msg service exposing verification transaction RPCs.
Verification Event Types
proto/node/akash/verification/v1/event.proto
Event messages covering auditor lifecycle, attestation lifecycle, discrepancies, provider bond/snapshot actions, fee/escrow/deposit flows, and verification grace windows.
Provider Maintenance Schema
proto/node/akash/provider/v1beta4/maintenance.proto, proto/node/akash/provider/v1beta4/provider.proto, proto/node/akash/provider/v1beta4/params.proto
Maintenance type/status enums, ProviderMaintenanceRecord with timestamps/metadata, ProviderMaintenanceWithStatus, ProviderMaintenanceParams, and ProviderRegistration message.
Provider Maintenance Messages and Services
proto/node/akash/provider/v1beta4/msg.proto, proto/node/akash/provider/v1beta4/query.proto, proto/node/akash/provider/v1beta4/service.proto, proto/node/akash/provider/v1beta4/genesis.proto
Msgs to open/close maintenance and update params; Query RPCs for maintenance records, params, and registration; Msg service RPCs; genesis extensions.
Provider Maintenance Events
proto/node/akash/provider/v1beta4/event.proto
EventProviderMaintenanceOpened and EventProviderMaintenanceClosed messages.
Market and Base Attributes Integration
proto/node/akash/market/v1/types.proto, proto/node/akash/market/v2beta1/types.proto, proto/node/akash/base/attributes/v1/attribute.proto
LeaseClosedReason enum extended (provider reason); PlacementRequirements gains optional verification field referencing VerificationRequirement.
Go Tier and Capability Helpers
go/node/verification/v1/capabilities.go, go/node/verification/v1/tier.go
KnownCapabilities, IsKnownCapabilityName, CapabilityName; TierAtLeast, TierBetter, TierRequiresSnapshot, TierRequiresProviderBond, MinBondForTier.
Go Tier Helper Tests
go/node/verification/v1/tier_test.go
Matrix tests for tier ordering/semantics, predicate tests, and MinBondForTier mapping and sentinel/panic behaviors.
SDL Schema and Verification Definition
go/sdl/sdl-input.schema.yaml, go/sdl/v2.go
JSON Schema for verificationRequirement (min_tier 0–4, conditional forbidding of filters when min_tier=0); v2 profile placement adds optional verification field.
SDL Verification Parsing
go/sdl/verification.go
v2Verification struct with YAML Unmarshal validation (tier range, auditor_mode, known capabilities, auditor bech32/whitespace checks), isVacuous detection, and toProto conversion mapping names→flags and auditor_mode→enum.
SDL Verification Tests
go/sdl/verification_test.go
Integration tests parsing v2.1 verification block, backward-compat tests for missing block, YAML validation tests for invalid inputs, and toProto nil/vacuous/collapse behavior tests.
SDL Test Fixture
go/sdl/_testdata/v2.1-simple-verification.yaml
v2.1 SDL fixture with web/nginx deployment, compute profile, westcoast placement including TEE attestation capability, auditors list, auditor_mode any, and pricing.
SDL Group Builder Integration
go/sdl/groupBuilder_v2.go, go/sdl/groupBuilder_v2_1.go
Group builder now wires infra.Verification.toProto() into dgroup.Requirements.Verification for created group specs.
Off-Chain Inventory Snapshot RPC
proto/provider/akash/inventory/v1/snapshot.proto
InventoryService.GetInventorySnapshot POST /v1/inventory/snapshot with optional nonce request and signed snapshot_payload + signature + provider in response.
Documentation and Configuration
docs/proto/provider.md, docs/config.yaml
Docs for inventory snapshot proto and swagger operationIds rename mapping for provider Params endpoint.
Go Mock Updates
go/mocks/node/client/provider/QueryClient_mock.go
Generated mock additions for Params, ProviderMaintenance, ProviderMaintenances, Registration methods and associated Expecter/Call helpers; minor import reordering.

🎯 4 (Complex) | ⏱️ ~60 minutes

"🐰 I hopped through protos, SDL, and Go,
Tucked tiers and caps where queries now go.
Maintenance windows, snapshots held tight,
Tests all green in the soft morning light."

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch aep-86/sdk-l1

@chalabi2 chalabi2 changed the title feat(aep-86): add SDK proto surface and SDL support feat(aep-86): add SDK proto surface and SDL support May 18, 2026
@chalabi2 chalabi2 force-pushed the aep-86/sdk-l1 branch 3 times, most recently from 4ee361c to 459fe35 Compare May 18, 2026 03:36
@github-actions github-actions Bot added the C:ts label May 18, 2026
Copy link
Copy Markdown
Contributor

@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: 2

🧹 Nitpick comments (1)
proto/provider/akash/inventory/v1/snapshot.proto (1)

71-74: ⚡ Quick win

Add proto validation constraint for provider bech32 address or clarify validation responsibility.

The provider field is documented as "on-chain account address in bech32 form" but defined as an unconstrained string at 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

📥 Commits

Reviewing files that changed from the base of the PR and between 3ccaa4d and 1f56df4.

⛔ Files ignored due to path filters (69)
  • go/inventory/v1/snapshot.pb.go is excluded by !**/*.pb.go
  • go/inventory/v1/snapshot.pb.gw.go is excluded by !**/*.pb.gw.go
  • go/node/market/v1/types.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/event.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/genesis.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/maintenance.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/msg.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/params.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/paramsmsg.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/provider.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/query.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/query.pb.gw.go is excluded by !**/*.pb.gw.go
  • go/node/provider/v1beta4/service.pb.go is excluded by !**/*.pb.go
  • go/node/types/attributes/v1/attribute.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/event.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/genesis.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/msg.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/params.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/query.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/query.pb.gw.go is excluded by !**/*.pb.gw.go
  • go/node/verification/v1/service.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/state.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/types.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/verificationrequirement.pb.go is excluded by !**/*.pb.go
  • rs/src/gen/node/akash.base.attributes.v1.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.base.attributes.v1.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.inventory.v1.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.inventory.v1.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.inventory.v1.tonic.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.market.v1.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.market.v1.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.provider.v1beta4.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.provider.v1beta4.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.provider.v1beta4.tonic.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.verification.v1.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.verification.v1.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.verification.v1.tonic.rs is excluded by !**/gen/**
  • ts/src/generated/createNodeSDK.ts is excluded by !**/generated/**
  • ts/src/generated/createProviderSDK.ts is excluded by !**/generated/**
  • ts/src/generated/patches/nodeCustomTypePatches.spec.ts is excluded by !**/generated/**
  • ts/src/generated/patches/nodeCustomTypePatches.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/base/attributes/v1/attribute.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/inventory/v1/snapshot.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/inventory/v1/snapshot_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/market/v1/types.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/event.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/genesis.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/maintenance.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/msg.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/params.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/paramsmsg.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/provider.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/query.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/query_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/service_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/event.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/genesis.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/msg.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/params.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/query.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/query_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/service.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/service_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/state.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/types.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/verificationrequirement.ts is excluded by !**/generated/**
  • ts/src/generated/protos/index.akash.v1.ts is excluded by !**/generated/**
  • ts/src/generated/protos/index.akash.v1beta4.ts is excluded by !**/generated/**
  • ts/src/generated/protos/index.provider.akash.v1.ts is excluded by !**/generated/**
📒 Files selected for processing (34)
  • buf.yaml
  • go/node/verification/v1/capabilities.go
  • go/node/verification/v1/tier.go
  • go/node/verification/v1/tier_test.go
  • go/sdl/_testdata/v2.1-simple-verification.yaml
  • go/sdl/groupBuilder_v2.go
  • go/sdl/groupBuilder_v2_1.go
  • go/sdl/sdl-input.schema.yaml
  • go/sdl/v2.go
  • go/sdl/verification.go
  • go/sdl/verification_test.go
  • proto/node/akash/base/attributes/v1/attribute.proto
  • proto/node/akash/market/v1/types.proto
  • proto/node/akash/market/v2beta1/types.proto
  • proto/node/akash/provider/v1beta4/event.proto
  • proto/node/akash/provider/v1beta4/genesis.proto
  • proto/node/akash/provider/v1beta4/maintenance.proto
  • proto/node/akash/provider/v1beta4/msg.proto
  • proto/node/akash/provider/v1beta4/params.proto
  • proto/node/akash/provider/v1beta4/paramsmsg.proto
  • proto/node/akash/provider/v1beta4/provider.proto
  • proto/node/akash/provider/v1beta4/query.proto
  • proto/node/akash/provider/v1beta4/service.proto
  • proto/node/akash/verification/v1/event.proto
  • proto/node/akash/verification/v1/genesis.proto
  • proto/node/akash/verification/v1/msg.proto
  • proto/node/akash/verification/v1/params.proto
  • proto/node/akash/verification/v1/query.proto
  • proto/node/akash/verification/v1/service.proto
  • proto/node/akash/verification/v1/state.proto
  • proto/node/akash/verification/v1/types.proto
  • proto/node/akash/verification/v1/verificationrequirement.proto
  • proto/provider/akash/inventory/v1/snapshot.proto
  • ts/src/sdl/validateSDL/validateSDLInput.ts
💤 Files with no reviewable changes (1)
  • buf.yaml

Comment thread proto/node/akash/verification/v1/types.proto
Comment thread proto/provider/akash/inventory/v1/snapshot.proto
Copy link
Copy Markdown
Contributor

@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.

🧹 Nitpick comments (1)
proto/node/akash/provider/v1beta4/maintenance.proto (1)

96-100: ⚡ Quick win

Specify the metadata_hash format.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 1f56df4 and 2eb042e.

⛔ Files ignored due to path filters (60)
  • go/inventory/v1/snapshot.pb.go is excluded by !**/*.pb.go
  • go/node/market/v1/types.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/event.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/genesis.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/maintenance.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/msg.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/params.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/paramsmsg.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/provider.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/query.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/service.pb.go is excluded by !**/*.pb.go
  • go/node/types/attributes/v1/attribute.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/msg.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/query.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/state.pb.go is excluded by !**/*.pb.go
  • rs/src/gen/node/akash.base.attributes.v1.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.base.attributes.v1.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.inventory.v1.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.inventory.v1.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.inventory.v1.tonic.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.market.v1.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.market.v1.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.provider.v1beta4.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.provider.v1beta4.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.provider.v1beta4.tonic.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.verification.v1.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.verification.v1.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.verification.v1.tonic.rs is excluded by !**/gen/**
  • ts/src/generated/createNodeSDK.ts is excluded by !**/generated/**
  • ts/src/generated/createProviderSDK.ts is excluded by !**/generated/**
  • ts/src/generated/patches/nodeCustomTypePatches.spec.ts is excluded by !**/generated/**
  • ts/src/generated/patches/nodeCustomTypePatches.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/base/attributes/v1/attribute.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/inventory/v1/snapshot.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/inventory/v1/snapshot_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/market/v1/types.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/event.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/genesis.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/maintenance.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/msg.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/params.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/paramsmsg.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/provider.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/query.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/query_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/service_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/event.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/genesis.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/msg.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/params.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/query.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/query_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/service.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/service_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/state.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/types.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/verificationrequirement.ts is excluded by !**/generated/**
  • ts/src/generated/protos/index.akash.v1.ts is excluded by !**/generated/**
  • ts/src/generated/protos/index.akash.v1beta4.ts is excluded by !**/generated/**
  • ts/src/generated/protos/index.provider.akash.v1.ts is excluded by !**/generated/**
📒 Files selected for processing (28)
  • docs/config.yaml
  • docs/proto/node.md
  • docs/proto/provider.md
  • docs/swagger-ui/swagger.yaml
  • go/mocks/node/client/provider/QueryClient_mock.go
  • go/node/verification/v1/capabilities.go
  • go/node/verification/v1/tier.go
  • go/node/verification/v1/tier_test.go
  • go/sdl/sdl-input.schema.yaml
  • go/sdl/verification.go
  • go/sdl/verification_test.go
  • proto/node/akash/base/attributes/v1/attribute.proto
  • proto/node/akash/market/v1/types.proto
  • proto/node/akash/market/v2beta1/types.proto
  • proto/node/akash/provider/v1beta4/event.proto
  • proto/node/akash/provider/v1beta4/genesis.proto
  • proto/node/akash/provider/v1beta4/maintenance.proto
  • proto/node/akash/provider/v1beta4/msg.proto
  • proto/node/akash/provider/v1beta4/params.proto
  • proto/node/akash/provider/v1beta4/paramsmsg.proto
  • proto/node/akash/provider/v1beta4/provider.proto
  • proto/node/akash/provider/v1beta4/query.proto
  • proto/node/akash/provider/v1beta4/service.proto
  • proto/node/akash/verification/v1/msg.proto
  • proto/node/akash/verification/v1/query.proto
  • proto/node/akash/verification/v1/state.proto
  • proto/provider/akash/inventory/v1/snapshot.proto
  • ts/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

@chalabi2 chalabi2 marked this pull request as draft May 21, 2026 17:19
chalabi2 added 11 commits May 27, 2026 11:09
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>
chalabi2 added 4 commits May 27, 2026 11:10
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>
@chalabi2 chalabi2 marked this pull request as ready for review May 27, 2026 19:50
Copy link
Copy Markdown
Contributor

@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: 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

📥 Commits

Reviewing files that changed from the base of the PR and between 2eb042e and 738553a.

⛔ Files ignored due to path filters (75)
  • go/inventory/v1/snapshot.pb.go is excluded by !**/*.pb.go
  • go/inventory/v1/snapshot.pb.gw.go is excluded by !**/*.pb.gw.go
  • go/node/market/v1/stats.pb.go is excluded by !**/*.pb.go
  • go/node/market/v1/types.pb.go is excluded by !**/*.pb.go
  • go/node/market/v1beta5/query.pb.go is excluded by !**/*.pb.go
  • go/node/market/v1beta5/query.pb.gw.go is excluded by !**/*.pb.gw.go
  • go/node/provider/v1beta4/event.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/genesis.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/maintenance.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/msg.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/params.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/paramsmsg.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/provider.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/query.pb.go is excluded by !**/*.pb.go
  • go/node/provider/v1beta4/query.pb.gw.go is excluded by !**/*.pb.gw.go
  • go/node/provider/v1beta4/service.pb.go is excluded by !**/*.pb.go
  • go/node/types/attributes/v1/attribute.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/event.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/genesis.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/msg.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/params.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/query.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/query.pb.gw.go is excluded by !**/*.pb.gw.go
  • go/node/verification/v1/service.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/state.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/types.pb.go is excluded by !**/*.pb.go
  • go/node/verification/v1/verificationrequirement.pb.go is excluded by !**/*.pb.go
  • rs/src/gen/node/akash.base.attributes.v1.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.base.attributes.v1.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.inventory.v1.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.inventory.v1.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.inventory.v1.tonic.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.market.v1.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.market.v1.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.market.v1beta5.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.market.v1beta5.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.market.v1beta5.tonic.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.provider.v1beta4.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.provider.v1beta4.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.provider.v1beta4.tonic.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.verification.v1.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.verification.v1.serde.rs is excluded by !**/gen/**
  • rs/src/gen/node/akash.verification.v1.tonic.rs is excluded by !**/gen/**
  • ts/src/generated/createNodeSDK.ts is excluded by !**/generated/**
  • ts/src/generated/createProviderSDK.ts is excluded by !**/generated/**
  • ts/src/generated/patches/nodeCustomTypePatches.spec.ts is excluded by !**/generated/**
  • ts/src/generated/patches/nodeCustomTypePatches.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/base/attributes/v1/attribute.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/inventory/v1/snapshot.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/inventory/v1/snapshot_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/market/v1/stats.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/market/v1/types.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/market/v1beta5/query.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/market/v1beta5/query_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/event.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/genesis.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/maintenance.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/msg.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/params.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/paramsmsg.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/provider.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/query.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/query_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/provider/v1beta4/service_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/event.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/genesis.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/msg.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/params.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/query.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/query_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/service.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/service_akash.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/state.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/types.ts is excluded by !**/generated/**
  • ts/src/generated/protos/akash/verification/v1/verificationrequirement.ts is excluded by !**/generated/**
📒 Files selected for processing (42)
  • docs/config.yaml
  • docs/proto/node.md
  • docs/proto/provider.md
  • docs/swagger-ui/swagger.yaml
  • go/mocks/node/client/provider/QueryClient_mock.go
  • go/node/client/v1beta3/client.go
  • go/node/client/v1beta3/query.go
  • go/node/verification/v1/capabilities.go
  • go/node/verification/v1/codec.go
  • go/node/verification/v1/tier.go
  • go/node/verification/v1/tier_test.go
  • go/sdl/_testdata/v2.1-simple-verification.yaml
  • go/sdl/groupBuilder_v2.go
  • go/sdl/groupBuilder_v2_1.go
  • go/sdl/sdl-input.schema.yaml
  • go/sdl/v2.go
  • go/sdl/verification.go
  • go/sdl/verification_test.go
  • proto/node/akash/base/attributes/v1/attribute.proto
  • proto/node/akash/market/v1/stats.proto
  • proto/node/akash/market/v1/types.proto
  • proto/node/akash/market/v1beta5/query.proto
  • proto/node/akash/market/v2beta1/types.proto
  • proto/node/akash/provider/v1beta4/event.proto
  • proto/node/akash/provider/v1beta4/genesis.proto
  • proto/node/akash/provider/v1beta4/maintenance.proto
  • proto/node/akash/provider/v1beta4/msg.proto
  • proto/node/akash/provider/v1beta4/params.proto
  • proto/node/akash/provider/v1beta4/paramsmsg.proto
  • proto/node/akash/provider/v1beta4/provider.proto
  • proto/node/akash/provider/v1beta4/query.proto
  • proto/node/akash/provider/v1beta4/service.proto
  • proto/node/akash/verification/v1/event.proto
  • proto/node/akash/verification/v1/genesis.proto
  • proto/node/akash/verification/v1/msg.proto
  • proto/node/akash/verification/v1/params.proto
  • proto/node/akash/verification/v1/query.proto
  • proto/node/akash/verification/v1/service.proto
  • proto/node/akash/verification/v1/state.proto
  • proto/node/akash/verification/v1/types.proto
  • proto/node/akash/verification/v1/verificationrequirement.proto
  • proto/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

Comment thread docs/proto/provider.md
Comment thread docs/proto/provider.md
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