> For the complete documentation index, see [llms.txt](https://decentralabs-2.gitbook.io/decentralabs-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://decentralabs-2.gitbook.io/decentralabs-docs/smart-contracts/reference/facets.md).

# Facets and public API

This is the human-readable reference for the current production Diamond surface. It is generated from [`selectors/diamond.json`](https://github.com/DecentraLabsCom/Smart-Contracts/tree/main/selectors/diamond.json) and [`abi/Diamond.json`](https://github.com/DecentraLabsCom/Smart-Contracts/tree/main/abi/Diamond.json); Solidity source and tests remain authoritative for semantics and authorization details.

## Current deployment

The application endpoint is the Diamond, never an individual facet address. The address below is the committed Sepolia snapshot; integrations must pin the exact deployment artifact they use.

| Network | Chain ID | Diamond                                                                                                                                    | Artifact timestamp            |
| ------- | -------: | ------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- |
| sepolia | 11155111 | [0x1170d2D322Ff2cCeb20e6E79D2b3D2dfABFe6372](https://github.com/DecentraLabsCom/Smart-Contracts/tree/main/deployments/sepolia-latest.json) | 2026-10-11T21:30:56.313Z      |
| Mainnet |        1 | —                                                                                                                                          | No committed mainnet snapshot |

The deployment script recognizes `sepolia` and `mainnet`; the repository does not claim a mainnet address until a reviewed artifact is committed.

## Facet map

The manifest contains 29 facets and 205 public functions. The selector manifest also lists internal routing functions and explicitly forbidden legacy selectors; those are not callable public API.

| Facet                                          | Public functions | Responsibility / primary use case                                          |
| ---------------------------------------------- | ---------------: | -------------------------------------------------------------------------- |
| DiamondCutFacet                                |                1 | Upgrades the Diamond selector routing (owner-only).                        |
| DiamondLoupeFacet                              |                5 | Inspects facet addresses and selector routing.                             |
| OwnershipFacet                                 |                4 | Reads and transfers Diamond ownership.                                     |
| InitFacet                                      |                1 | Initializes protocol-wide metadata and role configuration.                 |
| ProviderFacet                                  |               15 | Onboards providers, profiles, roles and provider network status.           |
| ServiceCreditFacet                             |               16 | Mints and moves the internal lot-tracked service-credit ledger.            |
| IntentRegistryFacet                            |                6 | Registers and exposes one-time EIP-712 intents and lifecycle state.        |
| InstitutionFacet                               |                4 | Atomically onboards and revokes institutional wallets.                     |
| InstitutionalOrgRegistryFacet                  |               14 | Maps normalized organization identifiers to institutions and backend URLs. |
| InstitutionalTreasuryFacet                     |               18 | Manages institutional backend delegation, limits and treasury spending.    |
| LabFacet                                       |               27 | Provides ERC-721 lab ownership, listing and core lab operations.           |
| LabAdminFacet                                  |               10 | Creates, updates and administers labs with creator identity checks.        |
| LabIntentFacet                                 |                7 | Executes lab administration through registered intents.                    |
| LabQueryFacet                                  |               11 | Reads lab configuration, availability and paginated lab state.             |
| LabReputationFacet                             |                7 | Reads reputation and bounded reservation-finalization freshness state.     |
| ProviderSettlementFacet                        |               17 | Builds and settles provider receivable claims.                             |
| ReservationFinalizationFacet                   |                1 | Permissionlessly finalizes bounded batches of eligible reservations.       |
| InstitutionalReservationRequestValidationFacet |                1 | Validates institutional reservation request constraints.                   |
| InstitutionalReservationRequestCreationFacet   |                2 | Creates pending institutional reservation requests.                        |
| InstitutionalReservationConfirmationFacet      |                1 | Confirms a pending institutional reservation request.                      |
| InstitutionalReservationCancellationFacet      |                4 | Cancels pending or confirmed institutional reservations.                   |
| InstitutionalReservationQueryFacet             |               14 | Reads institutional reservation and allocation state.                      |
| InstitutionalReservationFacet                  |                1 | Shared reservation creation route used by internal Diamond routing.        |
| ReservationCheckInFacet                        |                4 | Records provider-authorized reservation check-in evidence.                 |
| ReservationStatsFacet                          |                5 | Reads reservation counters and aggregate statistics.                       |
| ReservationDenialFacet                         |                2 | Denies pending reservation requests with provider authority.               |
| ReservationIntentFacet                         |                2 | Executes institutional reservation request and direct-booking intents.     |
| ReservationIntentCancellationFacet             |                2 | Executes reservation-request and booking cancellation intents.             |
| ReservationSessionFacet                        |                3 | Reads and records the SessionStarted evidence used by access flows.        |

## Function reference

The signatures below are the exact ABI signatures routed by the Diamond. Use the generated ABI when encoding tuples, `uint96` values or return values; the signature list alone is not a substitute for the parameter semantics in the concept documents.

### DiamondCutFacet

<details>

<summary>1 function signatures</summary>

```solidity
function diamondCut((address facetAddress, uint8 action, bytes4[] functionSelectors)[] _diamondCut, address _init, bytes _calldata)
```

</details>

### DiamondLoupeFacet

<details>

<summary>5 function signatures</summary>

```solidity
function facetAddress(bytes4 _functionSelector) view returns (address facetAddress_)
function facetAddresses() view returns (address[] facetAddresses_)
function facetFunctionSelectors(address _facet) view returns (bytes4[] _facetFunctionSelectors)
function facets() view returns ((address facetAddress, bytes4[] functionSelectors)[] facets_)
function supportsInterface(bytes4 _interfaceId) view returns (bool)
```

</details>

### OwnershipFacet

<details>

<summary>4 function signatures</summary>

```solidity
function acceptOwnership()
function owner() view returns (address owner_)
function pendingOwner() view returns (address)
function transferOwnership(address _newOwner)
```

</details>

### InitFacet

<details>

<summary>1 function signatures</summary>

```solidity
function initializeDiamond(string adminName, string adminEmail, string adminCountry, string labName, string labSymbol)
```

</details>

### ProviderFacet

<details>

<summary>15 function signatures</summary>

```solidity
function DEFAULT_ADMIN_ROLE() view returns (bytes32)
function addProvider(string _name, address _account, string _email, string _country, string _authURI)
function provisionProvider(string _name, address _account, string _email, string _country, string _authURI, string organization, string backendUrl)
function getLabProvidersPaginated(uint256 offset, uint256 limit) view returns ((address account, (string name, string email, string country, string authURI) base)[] providers, uint256 total)
function getProviderAuthURI(address _provider) view returns (string)
function getProviderNetworkStatus(address _provider) view returns (uint8)
function getRoleAdmin(bytes32 role) view returns (bytes32)
function hasRole(bytes32 role, address account) view returns (bool)
function initialize(string _name, string _email, string _country)
function isLabProvider(address _account) view returns (bool)
function isProviderNetworkActive(address _provider) view returns (bool)
function removeProvider(address _provider)
function setProviderAuthURI(string _authURI)
function setProviderNetworkStatus(address _provider, uint8 _newStatus)
function updateProvider(string _name, string _email, string _country)
```

</details>

### ServiceCreditFacet

<details>

<summary>16 function signatures</summary>

```solidity
function availableBalanceOf(address account) view returns (uint256)
function cancelCredits(address account, uint256 amount, bytes32 reservationRef)
function cancelCreditsBatch(address account, uint256 amount, bytes32 reservationRef, uint256 maxAllocations) returns (uint256 refundedAmount, uint256 nextCursor, bool complete)
function captureLockedCredits(address account, uint256 amount, bytes32 reservationRef)
function compactCreditLots(address account) returns (uint256 previousLength, uint256 compactedLength)
function expireCredits(address account, uint256 lotIndex) returns (uint256 expiredAmount)
function finalizeReservationCreditAllocations(address account, bytes32 reservationRef) returns (uint256 releasedReferences)
function getCreditLots(address account, uint256 offset, uint256 limit) view returns ((uint256 lotId, bytes32 fundingOrderId, uint256 creditAmount, uint256 remaining, uint256 eurGrossAmount, uint48 issuedAt, uint48 expiresAt, bool expired)[] lots, uint256 total)
function getCreditMovements(address account, uint256 offset, uint256 limit) view returns ((uint8 kind, uint256 amount, uint256 balanceAfter, uint256 lockedAfter, bytes32 ref, uint48 timestamp)[] movements, uint256 total)
function getCreditReservationAllocations(address account, bytes32 reservationRef, uint256 offset, uint256 limit) view returns ((bytes32 fundingOrderId, uint256 amount, uint256 refundedAmount, uint256 eurGrossAmount, uint256 refundedEurGrossAmount, uint48 expiresAt, uint256 lotId)[] allocations, uint256 total)
function ledgerAdjustCredits(address account, int256 delta, bytes32 adjustmentRef) returns (uint256 newBalance)
function lockCredits(address account, uint256 amount, bytes32 reservationRef)
function lockedBalanceOf(address account) view returns (uint256)
function mintCredits(address account, uint256 creditAmount, bytes32 fundingOrderId, uint256 eurGrossAmount, uint48 expiresAt) returns (uint256 lotId)
function releaseLockedCredits(address account, uint256 amount, bytes32 reservationRef)
function totalBalanceOf(address account) view returns (uint256)
```

</details>

### IntentRegistryFacet

<details>

<summary>6 function signatures</summary>

```solidity
function cancelIntent(bytes32 requestId)
function expireIntent(bytes32 requestId)
function getIntent(bytes32 requestId) view returns ((bytes32 requestId, address signer, address executor, uint8 action, bytes32 payloadHash, uint256 nonce, uint64 requestedAt, uint64 expiresAt, uint8 state))
function nextIntentNonce(address signer) view returns (uint256)
function registerActionIntent((bytes32 requestId, address signer, address executor, uint8 action, bytes32 payloadHash, uint256 nonce, uint64 requestedAt, uint64 expiresAt, uint8 state) meta, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, bytes32 reservationKey, string uri, uint96 price, uint96 maxBatch, string accessURI, string accessKey, string tokenURI, uint8 resourceType) payload, bytes signature)
function registerReservationIntent((bytes32 requestId, address signer, address executor, uint8 action, bytes32 payloadHash, uint256 nonce, uint64 requestedAt, uint64 expiresAt, uint8 state) meta, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, uint32 start, uint32 end, uint96 price, bytes32 reservationKey) payload, bytes signature)
```

</details>

### InstitutionFacet

<details>

<summary>4 function signatures</summary>

```solidity
function getAllInstitutions() view returns (address[] institutions)
function getInstitutionsPaginated(uint256 offset, uint256 limit) view returns (address[] institutions, uint256 total)
function provisionInstitution(address institution, string organization, string backendUrl)
function revokeInstitutionRole(address institution, string organization)
```

</details>

### InstitutionalOrgRegistryFacet

<details>

<summary>14 function signatures</summary>

```solidity
function adminRegisterSchacHomeOrganization(address institution, string schacHomeOrganization)
function adminSetSchacHomeOrganizationBackend(address institution, string schacHomeOrganization, string backendUrl)
function adminUnregisterSchacHomeOrganization(address institution, string schacHomeOrganization)
function getInstitutionWalletByOrganizationHash(bytes32 organizationHash) view returns (address)
function getOrganizationByHash(bytes32 organizationHash) view returns (address institution, string organization)
function getOrganizationHashesByInstitution(address institution) view returns (bytes32[] organizationHashes)
function getOrganizationHashesByInstitutionPaginated(address institution, uint256 offset, uint256 limit) view returns (bytes32[] organizationHashes, uint256 total)
function getRegisteredSchacHomeOrganizations(address institution) view returns (string[] organizations)
function getRegisteredSchacHomeOrganizationsPaginated(address institution, uint256 offset, uint256 limit) view returns (string[] organizations, uint256 total)
function getSchacHomeOrganizationBackend(string schacHomeOrganization) view returns (string backendUrl)
function registerSchacHomeOrganization(string schacHomeOrganization)
function resolveSchacHomeOrganization(string schacHomeOrganization) view returns (address institution)
function setSchacHomeOrganizationBackend(string schacHomeOrganization, string backendUrl)
function unregisterSchacHomeOrganization(string schacHomeOrganization)
```

</details>

### InstitutionalTreasuryFacet

<details>

<summary>18 function signatures</summary>

```solidity
function adminResetBackend(address institution, address newBackend)
function authorizeBackend(address backend)
function checkInstitutionalTreasuryAvailability(address institution, bytes32 pucHash, uint256 amount) view
function getAuthorizedBackend(address institution) view returns (address)
function getInstitutionalSpendingPeriod(address institution) view returns (uint256)
function getInstitutionalTreasuryBalance(address institution) view returns (uint256)
function getInstitutionalUserFinancialStats(address institution, bytes32 pucHash) view returns (uint256 currentPeriodSpent, uint256 totalHistoricalSpent, uint256 spendingLimit, uint256 remainingAllowance, uint256 periodStart, uint256 periodEnd, uint256 periodDuration)
function getInstitutionalUserLimit(address institution) view returns (uint256)
function getInstitutionalUserRemainingAllowance(address institution, bytes32 pucHash) view returns (uint256)
function getInstitutionalUserSpendingData(address institution, bytes32 pucHash) view returns (uint256 amount, uint256 periodStart)
function getInstitutionalUserSpent(address institution, bytes32 pucHash) view returns (uint256)
function refundToInstitutionalTreasuryForReservation(address institution, bytes32 pucHash, bytes32 reservationKey, uint256 amount)
function resetInstitutionalSpendingPeriod()
function revokeBackend()
function setInstitutionalSpendingPeriod(uint256 periodDuration)
function setInstitutionalUserLimit(uint256 limit)
function spendFromInstitutionalTreasury(address institution, bytes32 pucHash, uint256 amount)
function spendFromInstitutionalTreasuryForReservation(address institution, bytes32 pucHash, bytes32 reservationKey, uint256 amount)
```

</details>

### LabFacet

<details>

<summary>27 function signatures</summary>

```solidity
function approve(address _to, uint256 _tokenId)
function balanceOf(address owner) view returns (uint256)
function burnToken(uint256 tokenId)
function checkAvailable(uint256 _tokenId, uint256 _start, uint256 _end) view returns (bool)
function findAvailableSlots(uint256 _tokenId, uint32 _rangeStart, uint32 _rangeEnd, uint32 _minDuration) view returns (uint32[] slotStarts, uint32[] slotEnds)
function findReservationAt(uint256 _tokenId, uint32 _timestamp) view returns (uint32 start, uint32 end)
function getApproved(uint256 tokenId) view returns (address)
function getBookedSlots(uint256 _tokenId) view returns (uint32[] starts, uint32[] ends)
function getBookedSlotsPaginated(uint256 _tokenId, uint256 _offset, uint256 _limit) view returns (uint32[] starts, uint32[] ends, bool hasMore)
function getNextAvailableSlot(uint256 _tokenId, uint32 _afterTime) view returns (uint32 nextSlotStart, uint32 blockedUntil)
function getNextExpiration(uint256 _tokenId) view returns (uint32)
function getReservation(bytes32 _reservationKey) view returns ((uint256 labId, address renter, uint96 price, address labProvider, uint8 status, uint32 start, uint32 end, uint64 requestPeriodStart, uint64 requestPeriodDuration, address payerInstitution, address collectorInstitution, uint96 providerShare))
function hasActiveBooking(bytes32 _reservationKey, address _user) view returns (bool)
function initialize(string _name, string _symbol)
function isApprovedForAll(address owner, address operator) view returns (bool)
function isLabBusy(uint256 _tokenId) view returns (bool)
function isTokenListed(uint256 _tokenId) view returns (bool)
function name() view returns (string)
function ownerOf(uint256 tokenId) view returns (address)
function safeMintTo(address to, uint256 tokenId)
function safeTransferFrom(address from, address to, uint256 tokenId)
function safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
function setApprovalForAll(address _operator, bool _approved)
function symbol() view returns (string)
function tokenURI(uint256 _labId) view returns (string)
function transferFrom(address from, address to, uint256 tokenId)
function userOfReservation(bytes32 _reservationKey) view returns (address)
```

</details>

### LabAdminFacet

<details>

<summary>10 function signatures</summary>

```solidity
function addAndListLabWithPucHash(string _uri, uint96 _price, string _accessUri, string _accessKey, uint8 _resourceType, bytes32 pucHash)
function addLabWithPucHash(string _uri, uint96 _price, string _accessUri, string _accessKey, uint8 _resourceType, bytes32 pucHash)
function clearLabReservationCommission(uint256 labId)
function deleteLab(uint256 _labId)
function getLabReservationCommission(uint256 labId) view returns (uint16 commissionBps, bool hasOverride)
function listLab(uint256 _labId)
function setLabReservationCommission(uint256 labId, uint16 commissionBps)
function setTokenURI(uint256 _labId, string _tokenUri)
function unlistLab(uint256 _labId)
function updateLab(uint256 _labId, string _uri, uint96 _price, string _accessUri, string _accessKey, uint8 _resourceType)
```

</details>

### LabIntentFacet

<details>

<summary>7 function signatures</summary>

```solidity
function addAndListLabWithIntent(bytes32 requestId, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, bytes32 reservationKey, string uri, uint96 price, uint96 maxBatch, string accessURI, string accessKey, string tokenURI, uint8 resourceType) payload)
function addLabWithIntent(bytes32 requestId, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, bytes32 reservationKey, string uri, uint96 price, uint96 maxBatch, string accessURI, string accessKey, string tokenURI, uint8 resourceType) payload)
function deleteLabWithIntent(bytes32 requestId, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, bytes32 reservationKey, string uri, uint96 price, uint96 maxBatch, string accessURI, string accessKey, string tokenURI, uint8 resourceType) payload)
function listLabWithIntent(bytes32 requestId, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, bytes32 reservationKey, string uri, uint96 price, uint96 maxBatch, string accessURI, string accessKey, string tokenURI, uint8 resourceType) payload)
function setTokenURIWithIntent(bytes32 requestId, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, bytes32 reservationKey, string uri, uint96 price, uint96 maxBatch, string accessURI, string accessKey, string tokenURI, uint8 resourceType) payload)
function unlistLabWithIntent(bytes32 requestId, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, bytes32 reservationKey, string uri, uint96 price, uint96 maxBatch, string accessURI, string accessKey, string tokenURI, uint8 resourceType) payload)
function updateLabWithIntent(bytes32 requestId, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, bytes32 reservationKey, string uri, uint96 price, uint96 maxBatch, string accessURI, string accessKey, string tokenURI, uint8 resourceType) payload)
```

</details>

### LabQueryFacet

<details>

<summary>11 function signatures</summary>

```solidity
function getLab(uint256 _labId) view returns ((uint256 labId, (string uri, uint96 price, string accessURI, string accessKey, uint32 createdAt, uint8 resourceType) base))
function getLabAccessKey(uint256 _labId) view returns (string)
function getLabAccessURI(uint256 _labId) view returns (string)
function getLabAge(uint256 _labId) view returns (uint256)
function getLabAuthURI(uint256 _labId) view returns (string)
function getLabCount() view returns (uint256)
function getLabPrice(uint256 _labId) view returns (uint96)
function getLabResourceType(uint256 _labId) view returns (uint8)
function getLabsPaginated(uint256 offset, uint256 limit) view returns (uint256[] ids, uint256 total)
function getPucHash(uint256 _labId) view returns (bytes32)
function isLabListed(uint256 _labId) view returns (bool)
```

</details>

### LabReputationFacet

<details>

<summary>7 function signatures</summary>

```solidity
function adjustLabReputation(uint256 labId, int32 delta, string reason)
function getLabRating(uint256 labId) view returns (int32 rating)
function getLabReputation(uint256 labId) view returns (int32 score, uint32 totalEvents, uint32 ownerCancellations, uint64 lastUpdated)
function getLabScore(uint256 labId) view returns (int32 score)
function getLabFinalizationStatus(uint256 labId) view returns (uint256 activeReservationCount, uint256 payoutHeapLength, uint256 payoutHeapInvalidCount, uint256 oldestPayoutCandidateEnd, uint64 lastFinalizationAt)
function setLabReputation(uint256 labId, int32 newScore, string reason)
function tokenURIWithReputation(uint256 labId) view returns (string)
```

</details>

### ProviderSettlementFacet

<details>

<summary>17 function signatures</summary>

```solidity
function getLabProviderReceivableLifecycle(uint256 _labId) view returns (uint256 accruedReceivable, uint256 settlementQueued, uint256 invoicedReceivable, uint256 approvedReceivable, uint256 paidReceivable, uint256 reversedReceivable, uint256 disputedReceivable, uint256 lastAccruedAt)
function getLabProviderReceivablePaginated(uint256 _labId, uint256 offset, uint256 limit) view returns (uint256 attestedSessionPayoutChunk, uint256 potentialNoShowFeeChunk, uint256 pendingGraceReservationCountChunk, uint256 accruedReceivableChunk, uint256 nextOffset, bool hasMore)
function getLatestProviderSettlementBatch(uint256 _labId) view returns (bytes32 batchId)
function getProviderSettlementBatch(bytes32 batchId) view returns (uint256 labId, uint256 totalAmount, uint256 remainingAmount, bytes32 scopeRoot, uint64 createdAt, uint64 claimedAt, uint8 status)
function getProviderSettlementClaim(bytes32 claimId) view returns (uint256 labId, uint256 amount, uint8 status, bytes32 batchId, bytes32 invoiceReferenceHash, bytes32 paymentReferenceHash, bytes32 paymentAttestationHash, address submittedBy, address approvedBy, address paidBy, uint64 submittedAt, uint64 approvedAt, uint64 paidAt)
function getProviderSettlementClaimApprovalReferenceHash(bytes32 claimId) view returns (bytes32)
function getProviderSettlementBatchResolution(bytes32 batchId) view returns (bytes32 referenceHash, address actor, uint64 timestamp)
function getProviderSettlementClaimResolution(bytes32 claimId) view returns (bytes32 referenceHash, address actor, uint64 timestamp)
function submitProviderSettlementClaim(bytes32 claimId, uint256 labId, uint256 amount, bytes32 batchId, bytes32 invoiceReferenceHash)
function approveProviderSettlementClaim(bytes32 claimId, bytes32 approvalReferenceHash)
function recordProviderSettlementClaimPayment(bytes32 claimId, bytes32 paymentReferenceHash, bytes32 paymentAttestationHash)
function disputeSettlementBatch(bytes32 batchId, bytes32 referenceHash)
function reverseSettlementBatch(bytes32 batchId, bytes32 referenceHash)
function disputeSettlementClaim(bytes32 claimId, bytes32 referenceHash)
function reverseSettlementClaim(bytes32 claimId, bytes32 referenceHash)
function requestProviderPayout(uint256 _labId, uint256 maxBatch)
function transitionProviderReceivableState(uint256 _labId, uint8 fromState, uint8 toState, uint256 amount, bytes32 referenceHash)
```

</details>

### ReservationFinalizationFacet

<details>

<summary>1 function signatures</summary>

```solidity
function finalizeEligibleReservations(uint256 labId, uint256 maxBatch) returns (uint256 finalizedCount)
```

</details>

### InstitutionalReservationRequestValidationFacet

<details>

<summary>1 function signatures</summary>

```solidity
function validateInstRequest(address p, bytes32 u, uint256 l, uint32 st, uint32 en) returns (address o, bytes32 k, address t)
```

</details>

### InstitutionalReservationRequestCreationFacet

<details>

<summary>2 function signatures</summary>

```solidity
function createInstReservation((address p, address o, uint256 l, uint32 s, uint32 e, bytes32 u, bytes32 k, address t) i)
function recordRecentInstReservation(uint256 l, address t, bytes32 k, uint32 st)
```

</details>

### InstitutionalReservationConfirmationFacet

<details>

<summary>1 function signatures</summary>

```solidity
function confirmInstitutionalReservationRequestWithPucHash(address i, bytes32 k, bytes32 pucHash)
```

</details>

### InstitutionalReservationCancellationFacet

<details>

<summary>4 function signatures</summary>

```solidity
function cancelConfirmedBookingByProvider(bytes32 reservationKey, uint8 reasonCode) returns (uint256 labId, address payerInstitution, address provider, bytes32 pucHash, uint96 refundAmount)
function cancelInstitutionalBookingWithPucHash(address institutionalProvider, bytes32 _reservationKey, bytes32 pucHash)
function cancelInstitutionalReservationRequest(address institutionalProvider, bytes32 pucHash, bytes32 _reservationKey)
function previewInstitutionalBookingCancellation(bytes32 reservationKey) view returns (uint8 reservationStatus, bool cancellable, address refundDestination, uint96 price, uint96 totalFee, uint96 providerFee, uint96 refundAmount, uint32 cancellationCutoff, uint256 spendingPeriodStart, uint256 spendingPeriodEnd, uint48 sourceCreditExpiry, (bytes32 fundingOrderId, uint256 amount, uint256 refundedAmount, uint256 eurGrossAmount, uint256 refundedEurGrossAmount, uint48 expiresAt, uint256 lotId)[] allocations, uint8 policyVersion)
```

</details>

### InstitutionalReservationQueryFacet

<details>

<summary>14 function signatures</summary>

```solidity
function getInstitutionalUserActiveCount(address institutionalProvider, bytes32 pucHash, uint256 labId) view returns (uint256 count)
function getInstitutionalUserActiveReservationKey(address institutionalProvider, bytes32 pucHash, uint256 labId) view returns (bytes32 reservationKey)
function getInstitutionalUserReservationByIndex(address institutionalProvider, bytes32 pucHash, uint256 index) view returns (bytes32 key)
function getInstitutionalUserReservationCount(address institutionalProvider, bytes32 pucHash) view returns (uint256)
function getLabActiveReservationCount(uint256 labId) view returns (uint256 count)
function getLabReservationCount(uint256 labId) view returns (uint256 count)
function getConcurrentReservationCount(uint256 labId, uint32 start, uint32 end) view returns (uint256 count)
function getReservationId(bytes32 _reservationKey) view returns (bytes32 reservationId)
function getReservationById(bytes32 _reservationId) view returns ((uint256 labId, address renter, uint96 price, address labProvider, uint8 status, uint32 start, uint32 end, uint64 requestPeriodStart, uint64 requestPeriodDuration, address payerInstitution, address collectorInstitution, uint96 providerShare) reservation)
function getReservationOfTokenByIndex(uint256 _tokenId, uint256 _index) view returns (bytes32 reservationKey)
function getReservationPucHash(bytes32 _reservationKey) view returns (bytes32)
function getReservationsOfToken(uint256 _tokenId) view returns (uint256 count)
function getReservationsOfTokenPaginated(uint256 _tokenId, uint256 offset, uint256 limit) view returns (bytes32[] keys, uint256 total)
function hasInstitutionalUserActiveBooking(address institutionalProvider, bytes32 pucHash, uint256 labId) view returns (bool)
```

</details>

### InstitutionalReservationFacet

<details>

<summary>1 function signatures</summary>

```solidity
function releaseInstitutionalExpiredReservations(address institutionalProvider, bytes32 pucHash, uint256 _labId, uint256 maxBatch) returns (uint256 processed)
```

</details>

### ReservationCheckInFacet

<details>

<summary>4 function signatures</summary>

```solidity
function emergencyCheckIn(bytes32 reservationKey, uint8 reasonCode)
function getEmergencyCheckInReview(bytes32 reservationKey) view returns (bool settlementExcluded, uint8 reasonCode, address executor, uint64 checkedInAt, address reviewer, uint64 reviewedAt)
function reviewEmergencyCheckIn(bytes32 reservationKey)
function checkInReservationWithSignature(bytes32 reservationKey, address signer, bytes32 pucHash, uint64 timestamp, bytes signature)
```

</details>

### ReservationStatsFacet

<details>

<summary>5 function signatures</summary>

```solidity
function getActiveReservationKeyForUser(uint256 _tokenId, address _user) view returns (bytes32)
function getReservationStats(uint256 tokenId, uint32 startTime, uint32 endTime) view returns (uint32 count, uint32 firstStart, uint32 lastEnd, uint256 totalDuration)
function getReservationStatsPaginated(uint256 tokenId, uint32 startTime, uint32 endTime, uint32 cursorStartInput, uint256 limit) view returns (uint32 count, uint32 firstStart, uint32 lastEnd, uint256 totalDuration, uint32 nextCursorStart, bool hasMore)
function reservationKeyOfUserByIndex(address _user, uint256 _index) view returns (bytes32)
function reservationsOf(address _user) view returns (uint256)
```

</details>

### ReservationDenialFacet

<details>

<summary>2 function signatures</summary>

```solidity
function denyReservationRequest(bytes32 _reservationKey)
function denyReservationRequestWithReason(bytes32 _reservationKey, uint8 _reason)
```

</details>

### ReservationIntentFacet

<details>

<summary>2 function signatures</summary>

```solidity
function institutionalDirectBookingWithIntent(bytes32 requestId, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, uint32 start, uint32 end, uint96 price, bytes32 reservationKey) payload)
function institutionalReservationRequestWithIntent(bytes32 requestId, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, uint32 start, uint32 end, uint96 price, bytes32 reservationKey) payload)
```

</details>

### ReservationIntentCancellationFacet

<details>

<summary>2 function signatures</summary>

```solidity
function cancelInstitutionalBookingWithIntent(bytes32 requestId, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, bytes32 reservationKey, string uri, uint96 price, uint96 maxBatch, string accessURI, string accessKey, string tokenURI, uint8 resourceType) payload)
function cancelInstitutionalReservationRequestWithIntent(bytes32 requestId, (address executor, string schacHomeOrganization, bytes32 pucHash, bytes32 assertionHash, uint256 labId, uint32 start, uint32 end, uint96 price, bytes32 reservationKey) payload)
```

</details>

### ReservationSessionFacet

<details>

<summary>3 function signatures</summary>

```solidity
function getReservationSessionStarted(bytes32 reservationKey) view returns ((address signer, bytes32 gatewayIdHash, bytes32 sessionIdHash, bytes32 accessTypeHash, uint64 startedAt, bytes32 nonce, bytes32 credentialHash, bytes32 clientProofHash))
function hasReservationSessionStarted(bytes32 reservationKey) view returns (bool)
function markSessionStarted((address signer, bytes32 reservationKey, string labId, bytes32 pucHash, string gatewayId, string sessionId, string accessType, uint64 startedAt, bytes32 nonce, bytes32 credentialHash, bytes32 clientProofHash, bytes signature) input)
```

</details>

## Events

The merged ABI exposes 88 events. Indexers should decode events from the same ABI artifact as the Diamond address.

```solidity
event DiamondCut((address facetAddress, uint8 action, bytes4[] functionSelectors)[] _diamondCut, address _init, bytes _calldata)
event OwnershipTransferRequested(address indexed currentOwner, address indexed pendingOwner)
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
event Initialized(uint64 version)
event BackendAuthorized(address indexed provider, address indexed backend)
event ProviderAdded(address indexed _account, string _name, string _email, string _country)
event ProviderAuthURIUpdated(address indexed _provider, string _authURI)
event ProviderNetworkStatusChanged(address indexed provider, uint8 previousStatus, uint8 newStatus)
event ProviderRemoved(address indexed _account)
event ProviderServiceCreditsIssued(address indexed _account, uint256 credits)
event ProviderUpdated(address indexed _account, string _name, string _email, string _country)
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
event SchacHomeOrganizationBackendUpdated(address indexed institution, string organization, bytes32 indexed organizationHash, string backendUrl)
event SchacHomeOrganizationRegistered(address indexed institution, string organization, bytes32 indexed organizationHash)
event CreditLotAdjusted(address indexed account, int256 delta, uint256 newBalance, bytes32 indexed adjustmentRef)
event CreditLotConsumed(address indexed account, uint256 amount, bytes32 indexed reservationRef)
event CreditLotExpired(address indexed account, uint256 indexed lotIndex, uint256 expiredAmount)
event CreditLotMinted(address indexed account, uint256 indexed lotId, uint256 creditAmount, uint256 eurGrossAmount, bytes32 fundingOrderId, uint48 expiresAt)
event CreditLotReleased(address indexed account, uint256 amount, bytes32 indexed reservationRef)
event CreditsCancelled(address indexed account, uint256 amount, bytes32 indexed reservationRef)
event CreditsLocked(address indexed account, uint256 amount, bytes32 indexed reservationRef)
event ReservationCreditAllocationsFinalized(address indexed account, bytes32 indexed reservationRef, uint256 releasedReferences)
event IntentCancelled(bytes32 indexed requestId, address indexed signer)
event IntentExpired(bytes32 indexed requestId, address indexed signer)
event IntentRegistered(bytes32 indexed requestId, address indexed signer, uint8 action, bytes32 payloadHash)
event BackendRevoked(address indexed institution, address indexed backend)
event InstitutionRoleGranted(address indexed institution, bytes32 indexed organizationHash)
event InstitutionRoleRevoked(address indexed institution)
event SchacHomeOrganizationRemoved(address indexed institution, string organization, bytes32 indexed organizationHash)
event InstitutionalSpendingPeriodReset(address indexed institution, uint256 newPeriodStart)
event InstitutionalSpendingPeriodUpdated(address indexed institution, uint256 newPeriod)
event InstitutionalTreasuryRefunded(address indexed institution, bytes32 indexed reservationKey, bytes32 indexed pucHash, uint256 amount, uint256 remainingSpent, uint256 periodStart)
event InstitutionalTreasuryRefundedByGeneration(address indexed institution, bytes32 indexed reservationId, bytes32 indexed pucHash, uint256 amount, uint256 remainingSpent, uint256 periodStart)
event InstitutionalUserLimitUpdated(address indexed institution, uint256 newLimit)
event InstitutionalUserSpent(address indexed institution, bytes32 indexed pucHash, uint256 amount, uint256 totalSpent, uint256 periodStart)
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
event LabAdded(uint256 indexed _labId, address indexed _provider, string _uri, uint96 _price, string _accessUri, string _accessKey)
event LabDeleted(uint256 indexed _labId)
event LabIntentProcessed(bytes32 indexed requestId, uint256 labId, string action, address provider, bool success, string reason)
event LabURISet(uint256 indexed _labId, string _uri)
event LabUpdated(uint256 indexed _labId, string _uri, uint96 _price, string _accessUri, string _accessKey)
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
event LabAdded(uint256 indexed _labId, address indexed _provider, string _uri, uint96 _price, string _accessUri, string _accessKey, uint8 _resourceType)
event LabCreatorPucHashBound(uint256 indexed labId, bytes32 indexed pucHash, address indexed actor)
event LabListed(uint256 indexed _labId, address indexed _provider)
event LabReservationCommissionReset(uint256 indexed labId, uint16 previousCommissionBps)
event LabReservationCommissionUpdated(uint256 indexed labId, uint16 previousCommissionBps, uint16 newCommissionBps)
event LabUnlisted(uint256 indexed _labId, address indexed _provider)
event LabUpdated(uint256 indexed _labId, string _uri, uint96 _price, string _accessUri, string _accessKey, uint8 _resourceType)
event LabReputationAdjusted(uint256 indexed labId, int32 delta, int32 newScore, uint32 totalEvents, string reason)
event LabReputationSet(uint256 indexed labId, int32 newScore, string reason)
event ProviderPayoutRequested(address indexed provider, uint256 indexed labId, uint256 amount, uint256 reservationsProcessed)
event ProviderReceivableAccrued(uint256 indexed labId, uint256 amount, bytes32 indexed reservationId)
event ProviderReceivableLifecycleTransition(address indexed operator, uint256 indexed labId, uint8 indexed fromState, uint8 toState, uint256 amount, bytes32 referenceHash)
event ProviderSettlementBatchCreated(bytes32 indexed batchId, uint256 indexed labId, uint256 amount, bytes32 scopeRoot, address indexed actor)
event ProviderSettlementBatchInvalidated(bytes32 indexed batchId, uint256 indexed labId, uint256 amount, uint8 fromStatus, uint8 toStatus, bytes32 referenceHash, address indexed actor, uint64 timestamp)
event ProviderSettlementClaimApproved(bytes32 indexed claimId, bytes32 approvalReferenceHash, address indexed actor)
event ProviderSettlementClaimInvalidated(bytes32 indexed claimId, bytes32 indexed batchId, uint256 indexed labId, uint256 amount, uint8 fromStatus, uint8 toStatus, bytes32 referenceHash, address actor, uint64 timestamp)
event ProviderSettlementClaimPaid(bytes32 indexed claimId, bytes32 indexed paymentReferenceHash, bytes32 paymentAttestationHash, address indexed actor)
event ProviderSettlementClaimSubmitted(bytes32 indexed claimId, uint256 indexed labId, uint256 amount, bytes32 batchId, bytes32 invoiceReferenceHash, address indexed actor)
event ProviderSettlementScopeReferenced(bytes32 indexed batchId, uint256 indexed labId, uint256 amount, bytes32 scopeRoot, bytes32 indexed claimId)
event TraceBHCheck(uint256 node, uint256 hl, uint256 hr, string context)
event TraceRotateState(uint256 root, uint256 key, uint256 cursor, uint256 cursor_parent, uint256 key_parent)
event TraceRotation(string step, uint256 key, uint256 cursor, uint256 cursorChild, uint256 parent)
event ReservationFinalizationBatchProcessed(address indexed caller, uint256 indexed labId, uint256 finalizedCount, uint256 maxBatch, uint64 oldestCandidateEnd, uint64 processedAt, bool pendingGraceEncountered, bool scanLimitReached)
event ReservationGenerationCreated(bytes32 indexed reservationId, bytes32 indexed reservationKey, uint256 indexed tokenId)
event ReservationRequested(address indexed renter, uint256 indexed tokenId, uint256 start, uint256 end, bytes32 indexed reservationKey)
event BookingCanceled(bytes32 indexed reservationKey, uint256 indexed tokenId)
event BookingCanceledByProvider(bytes32 indexed reservationKey, uint256 indexed tokenId, address indexed payerInstitution, address provider, bytes32 pucHash, uint96 refundAmount, uint8 reasonCode)
event ReservationCancellationByGeneration(bytes32 indexed reservationId, bytes32 indexed reservationKey, uint256 indexed tokenId, uint8 reasonCode)
event ReservationRequestCanceled(bytes32 indexed reservationKey, uint256 indexed tokenId)
event EmergencyCheckIn(bytes32 indexed reservationId, bytes32 indexed reservationKey, uint256 indexed labId, uint8 reasonCode, address executor, uint64 timestamp)
event EmergencyCheckInSettlementReviewRequired(bytes32 indexed reservationId, bytes32 indexed reservationKey, uint256 indexed labId, uint8 reasonCode, address executor, uint64 timestamp)
event EmergencyCheckInSettlementReviewed(bytes32 indexed reservationId, bytes32 indexed reservationKey, uint256 indexed labId, address reviewer, uint64 timestamp)
event ReservationCheckedIn(bytes32 indexed reservationKey, uint256 indexed labId, address indexed checker)
event ReservationCheckedInByGeneration(bytes32 indexed reservationId, bytes32 indexed reservationKey, uint256 indexed labId, address checker)
event ReservationConfirmed(bytes32 indexed reservationKey, uint256 indexed tokenId)
event ReservationConfirmedByGeneration(bytes32 indexed reservationId, bytes32 indexed reservationKey, uint256 indexed tokenId)
event ReservationIntentGenerationProcessed(bytes32 indexed requestId, bytes32 indexed reservationId, bytes32 indexed reservationKey)
event ReservationIntentProcessed(bytes32 indexed requestId, bytes32 reservationKey, string action, bytes32 pucHash, address institution, bool success, string reason)
event ReservationRequestDenied(bytes32 indexed reservationKey, uint256 indexed tokenId, uint8 reason)
event ReservationRequestDeniedByGeneration(bytes32 indexed reservationId, bytes32 indexed reservationKey, uint256 indexed tokenId, uint8 reason)
event TraceInsertFixup(string step, uint256 key, uint256 keyParent, uint256 keyGrandparent, uint256 cursor, uint256 root, bool rootRed)
event TraceInsertStep(string step, uint256 key, uint256 cursor, uint256 parent, uint256 left, uint256 right, uint256 end, bool red)
event ReservationSessionStarted(bytes32 indexed reservationKey, uint256 indexed labId, address indexed signer, bytes32 gatewayIdHash, bytes32 sessionIdHash, bytes32 accessTypeHash, uint64 startedAt, bytes32 nonce, bytes32 credentialHash, bytes32 clientProofHash)
event ReservationSessionStartedByGeneration(bytes32 indexed reservationId, bytes32 indexed reservationKey, uint256 indexed labId, address signer)
```

## Custom errors

The merged ABI exposes 103 custom errors. A reverted call may still use a string reason; clients should support both ABI error decoding and ordinary revert strings.

```solidity
error CannotAddFunctionToDiamondThatAlreadyExists(bytes4 _selector)
error CannotAddSelectorsToZeroAddress(bytes4[] _selectors)
error CannotRemoveFunctionThatDoesNotExist(bytes4 _selector)
error CannotRemoveImmutableFunction(bytes4 _selector)
error CannotReplaceFunctionThatDoesNotExists(bytes4 _selector)
error CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet(bytes4 _selector)
error CannotReplaceFunctionsFromFacetWithZeroAddress(bytes4[] _selectors)
error CannotReplaceImmutableFunction(bytes4 _selector)
error IncorrectFacetCutAction(uint8 _action)
error InitializationCalldataTooShort()
error InitializationFunctionReverted(address _initializationContractAddress, bytes _calldata)
error InitializationNotAllowed(address _addr)
error NoBytecodeAtAddress(address _contractAddress, string _message)
error NoSelectorsProvidedForFacetForCut(address _facetAddress)
error NotContractOwner(address _user, address _contractOwner)
error RemoveFacetAddressMustBeZeroAddress(address _facetAddress)
error InvalidInitialization()
error NotInitializing()
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
error CreditLotLimitExceeded()
error ExpiryInPast()
error InvalidInstitutionAddress()
error InvalidOrgCharacter()
error InvalidOrgLength()
error InvalidPaginationLimit()
error OrganizationAlreadyRegistered()
error OrganizationAlreadyTracked()
error OrganizationNotRegisteredByWallet()
error ProviderOwnsLabs(address provider, uint256 labBalance)
error ReentrancyGuardReentrantCall()
error TooManyOrganizations()
error UnknownInstitution()
error ZeroAccount()
error ZeroAmount()
error InsufficientAvailableCredits()
error InsufficientLockedCredits()
error InvalidRefundBatchSize()
error LotAlreadyExpired()
error LotNotExpired()
error NoReservationAllocation()
error RefundExceedsReservationAllocation()
error ReservationAllocationLimitExceeded()
error ReservationAllocationsFinalized()
error SourceLotNotFound()
error UnbackedCreditBalance()
error ECDSAInvalidSignature()
error ECDSAInvalidSignatureLength(uint256 length)
error ECDSAInvalidSignatureS(bytes32 s)
error IntentAlreadyExists()
error IntentExpiredError()
error IntentNotExpired()
error IntentNotPending()
error IntentNotRegistered()
error InvalidNonce()
error InvalidSignature()
error InvalidSignerOrExecutor()
error OnlySigner()
error PayloadHashMismatch()
error RequestIdRequired()
error RequestedAtInFuture()
error RequestedAtRequired()
error OrganizationNotTracked()
error AvailabilityResultTruncated()
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
error ERC721InsufficientApproval(address operator, uint256 tokenId)
error ERC721InvalidApprover(address approver)
error ERC721InvalidOperator(address operator)
error ERC721InvalidOwner(address owner)
error ERC721InvalidReceiver(address receiver)
error ERC721InvalidSender(address sender)
error ERC721NonexistentToken(uint256 tokenId)
error InvalidAvailabilityPage()
error ReservationNotFound()
error TokenNotFound()
error CommissionBpsOutOfRange(uint16 commissionBps)
error CommissionLabDoesNotExist(uint256 labId)
error LabCreatorHashRequired()
error UnauthorizedCommissionAdmin()
error ActionMismatch()
error ExecutorMismatch()
error LabCreatorMismatch(uint256 labId)
error OnlyDiamondSelfCall()
error ReservationPriceOverflow()
error BackendMissing()
error InstReservationNotFound()
error InvalidProviderCancellationReason()
error InvalidStatus()
error NotPending()
error NotRenter()
error PucMismatch()
error UnauthorizedInstitution()
error UnauthorizedProvider()
error IntentExecutorMustBeCaller()
error IntentLabDoesNotExist()
error IntentNotAuthorizedInstitution()
error IntentUnknownInstitution()
error PayerMismatch()
error PucMissing()
error IntentCancellationExecutorMustBeCaller()
error IntentCancellationInstitutionBackendRequired()
error IntentCancellationNotAuthorizedInstitution()
error IntentCancellationUnknownInstitution()
error IntentCancellationUnknownReservation()
```

## EIP-712 intent signing

Intent registration signs `IntentMeta` in the `DecentraLabsIntent` domain. The payload is hashed separately and placed in `payloadHash`; it is not a nested field in the signed meta object. The domain therefore binds the chain and the Diamond address, while the payload hash binds the operation data.

```javascript
const domain = {
  name: "DecentraLabsIntent",
  version: "1",
  chainId: 11155111,
  verifyingContract: "0x1170d2D322Ff2cCeb20e6E79D2b3D2dfABFe6372",
};

const metaTypes = {
  IntentMeta: [
    { name: "requestId", type: "bytes32" },
    { name: "signer", type: "address" },
    { name: "executor", type: "address" },
    { name: "action", type: "uint8" },
    { name: "payloadHash", type: "bytes32" },
    { name: "nonce", type: "uint256" },
    { name: "requestedAt", type: "uint64" },
    { name: "expiresAt", type: "uint64" },
  ],
};

const reservationPayloadTypes = {
  ReservationIntentPayload: [
    { name: "executor", type: "address" },
    { name: "schacHomeOrganization", type: "string" },
    { name: "pucHash", type: "bytes32" },
    { name: "assertionHash", type: "bytes32" },
    { name: "labId", type: "uint256" },
    { name: "start", type: "uint32" },
    { name: "end", type: "uint32" },
    { name: "price", type: "uint96" },
    { name: "reservationKey", type: "bytes32" },
  ],
};

const actionPayloadTypes = {
  ActionIntentPayload: [
    { name: "executor", type: "address" },
    { name: "schacHomeOrganization", type: "string" },
    { name: "pucHash", type: "bytes32" },
    { name: "assertionHash", type: "bytes32" },
    { name: "labId", type: "uint256" },
    { name: "reservationKey", type: "bytes32" },
    { name: "uri", type: "string" },
    { name: "price", type: "uint96" },
    { name: "maxBatch", type: "uint96" },
    { name: "accessURI", type: "string" },
    { name: "accessKey", type: "string" },
    { name: "tokenURI", type: "string" },
    { name: "resourceType", type: "uint8" },
  ],
};

const payloadHash = ethers.TypedDataEncoder.hashStruct(
  "ReservationIntentPayload",
  reservationPayloadTypes,
  payload,
);
const message = { ...meta, payloadHash };
const signature = await signer.signTypedData(domain, metaTypes, message);
```

Action intents use the same `IntentMeta` type and the `ActionIntentPayload` fields shown in the example and in `contracts/libraries/IntentTypes.sol`; hash an action payload with `actionPayloadTypes` before signing `IntentMeta`. Action codes are 1–11 as documented in [the intent lifecycle reference](/decentralabs-docs/smart-contracts/reference/intents.md). The signer must use the current nonce and an expiry in the future; the executor must match the transaction sender at consumption time.

## Verification commands

```powershell
npm run verify:contract-surface
npm run selectors:coverage
npm run docs:check
```
