Skip to content

Smart account layer release preparation - #19

Merged
christian-rogobete merged 39 commits into
mainfrom
sm-release-prep
Apr 8, 2026
Merged

Smart account layer release preparation#19
christian-rogobete merged 39 commits into
mainfrom
sm-release-prep

Conversation

@christian-rogobete

Copy link
Copy Markdown
Member

Summary

Prepares the smart account layer for release with API hardening, expanded test coverage, documentation improvements, and demo app features. Includes 645+ new unit tests, shared WebAuthn CBOR parsing, multi-signer support across all managers, generic contract call APIs, and new demo screens for token approval and context rule editing. All changes are verified against OZ stellar-contracts v0.7.0.

SDK features

  • Add contractCall and multiSignerContractCall APIs for arbitrary contract invocations with single or multi-signer auth
  • Add executeAndSubmit and multiSignerExecuteAndSubmit for smart-account-mediated contract calls with multi-signer auth
  • Add deployPendingCredential to retry or externally submit a deferred wallet deployment
  • Add removeSigner overload that accepts a SmartAccountSigner value instead of numeric ID
  • Add removePolicy overload that accepts a policy contract address instead of numeric ID
  • Add multi-signer support (selectedSigners + forceMethod parameters) to all state-changing methods across OZSignerManager, OZPolicyManager, and OZContextRuleManager
  • Add IndexerException sealed class (RequestFailed, Timeout) for proper indexer error handling
  • Add SessionException sealed class for session-related errors
  • Add ExternalWalletAdapter.disconnectByAddress for per-signer cleanup when removing external signers
  • Add WebAuthnCborParser as shared pure-Kotlin CBOR parser for attestation data, eliminating duplicate logic across Android, JS, and Apple providers
  • Add StoredCredential.applyUpdate extension for applying partial credential updates
  • Add isLocalhostUrl validation helper for stricter localhost URL matching
  • Add maxContextRuleScanId config parameter and builder method
  • Add signatureExpirationLedgers config parameter (replaces hardcoded AUTH_ENTRY_EXPIRATION_BUFFER)
  • Add mainnet indexer URL to default indexer URL map
  • Add configurable timeoutInSeconds for transaction timeouts (replaces hardcoded 300)
  • Add CreateWalletResult.signedTransactionXdr field (always populated, regardless of autoSubmit)
  • Add DeployPendingResult data class for pending deployment results
  • Add forceMethod parameter to createWallet and fundWallet
  • Make relayerClient and indexerClient properties public on OZSmartAccountKit
  • Refactor transfer and multiSignerTransfer to delegate to generic contractCall/multiSignerContractCall internally
  • Use SDK name and version from Util.getSdkVersion() in relayer and indexer client identification headers
  • Cache deployer keypair in OZSmartAccountKit to avoid repeated creation
  • Initialize SorobanServer eagerly and close it in close()
  • Initialize indexer client using effectiveIndexerUrl() fallback (auto-uses default for known networks)

SDK bug fixes

  • Fix executeAndSubmit to validate that targetFn is not blank before building the invocation
  • Fix connectWallet to mark restoredFromSession = true when restoring from a saved session
  • Fix contract ID encoding to throw ValidationException.InvalidInput instead of TransactionException.SigningFailed
  • Fix SimpleThreshold.toScVal and WeightedThreshold.toScVal to reject threshold of zero
  • Fix createWallet to always build and sign the deploy transaction regardless of autoSubmit
  • Fix createWallet to normalize and validate the public key from WebAuthn registration via extractPublicKeyFromRegistration
  • Fix credential isPrimary to default to false; only set to true by the wallet creation flow
  • Fix withLock return value in InMemoryStorageAdapter.getSession for expired sessions
  • Fix multi-signer pipeline to sign auth entries belonging to wallet signer addresses (not just the smart account)
  • Fix relayer client to use a persistent HTTP client with AutoCloseable instead of creating per-request clients
  • Fix indexer client to normalize URL (trim trailing slashes) and implement AutoCloseable
  • Fix OZSmartAccountConfig to validate accountWasmHash is a 64-character hex string
  • Fix hardcoded base fee (100) to use AbstractTransaction.MIN_BASE_FEE constant throughout
  • Fix auth entry expiration for fundWallet to use LEDGERS_PER_HOUR instead of the config's signature expiration

SDK code quality

  • Remove SmartAccountVersion object; use OZConstants.CLIENT_NAME and Util.getSdkVersion() instead
  • Remove SmartAccountBuilders.parseSigner; use DelegatedSigner constructor directly
  • Remove OZCredentialManager.markDeployed; use deleteCredential instead
  • Remove unused OZConstants.MAX_CONTEXT_RULES and OZConstants.AUTH_ENTRY_EXPIRATION_BUFFER
  • Remove OZSmartAccountConfig.createIndexerClient; use factory create() method instead
  • Rename OZSmartAccountConfig.getDeployer() to effectiveDeployer() for clarity
  • Tighten visibility: OZCredentialManager.markDeploymentFailed, updateCredential, updateLastUsed, setPrimary to internal
  • Tighten visibility: OZContextRuleManager.parseContextRule to internal, buildInvocationContextTypes and contextRuleTypeMatches to private, resolveContextRuleIdsForEntry to internal
  • Tighten visibility: OZExternalSignerManager.InMemoryWalletConnectionStorage to internal, hasWalletAdapter, hasSigners, get to internal
  • Tighten visibility: SelectedSigner.Passkey now has proper equals/hashCode for ByteArray fields
  • Replace magic number 32 with SmartAccountConstants.ED25519_PUBLIC_KEY_SIZE
  • Use full StrKey validation (StrKey.isValidEd25519PublicKey, StrKey.isValidContract) in indexer client address checks
  • Add private set to mutable DemoState properties (externalSignerManager, webauthnProvider, storage)
  • Replace unused exception variable names with _ throughout
  • Remove all external SDK references from KDoc comments and documentation

SDK tests

  • Add 645+ new unit tests across 17 new and updated test files
  • Add WebAuthnCborParserTest (1087 lines): CBOR parsing, public key extraction, authenticator data parsing
  • Add SmartAccountErrorsTest (1176 lines): all error codes, exception types, factory methods
  • Add SmartAccountUtilsTest (985 lines): contract address derivation, public key extraction, hex codec
  • Add SmartAccountAuthPayloadTest (888 lines): auth payload hash construction, context rule digest
  • Add SmartAccountSignaturesTest (800 lines): signature types, normalization, XDR encoding
  • Add IndexerClientTest (1032 lines): URL validation, all endpoints, error handling, health check
  • Add RelayerClientTest (821 lines): URL validation, mode 1/2 submission, timeout handling, AutoCloseable
  • Add WalletOperationsValidationTest (814 lines): createWallet, connectWallet, deployPendingCredential validation
  • Add TransactionOperationsValidationTest (785 lines): transfer, contractCall, executeAndSubmit, fundWallet validation
  • Add SignerTypesTest (695 lines): signer equality, XDR encoding, DelegatedSigner/ExternalSigner validation
  • Add PolicyInstallParamsTest (597 lines): SimpleThreshold, WeightedThreshold, SpendingLimit encoding and validation
  • Add ContextRuleParsingTest (1127 lines): context rule parsing, signer/policy extraction, context type matching
  • Add ManagerSelectedSignersTest (537 lines): multi-signer parameter validation across all managers
  • Add MultiSignerManagerTest (474 lines): SelectedSigner types, validation, equality
  • Add OZBuildersTest (105 lines): callContract, createContract context rule type builders
  • Add EventSystemTest expansion (440+ lines): global listeners, removeAllListeners, concurrent access
  • Add 58 platform-specific tests: KeychainStorageAdapterTest, AppleWebAuthnProviderTest, UserDefaultsStorageAdapterTest, JsWebAuthnGuardTest, LocalStorageAdapterTest
  • Remove obsolete RelayerIndexerClientTest, SmartAccountBuildersTest, SmartAccountContractAbi
  • Update ConfigValidationTest, ConnectedWalletTest, CredentialManagerTest for API changes

SDK documentation

  • Rewrite api-reference.md with full coverage of all public classes, methods, and configuration options
  • Fix stale claims and type mismatches in KDoc across all manager classes
  • Remove all external SDK references from documentation and code comments
  • Update platform guides (webauthn-android.md, webauthn-macos.md, webauthn-web.md) with current API
  • Update onboarding.md and README.md for current contract addresses and API
  • Document ContractErrorCodes, config methods, ED25519_PUBLIC_KEY_SIZE, and addListener
  • Add @throws documentation to all public methods across managers

Demo app features

  • Add Approve screen (Compose + Swift) for SEP-41 token allowance approval with single and multi-signer support
  • Add full edit-mode support for context rules: rename, add/remove signers, add/remove/update policies, update expiration
  • Add context rule edit flow (ContextRuleEditFlow, ContextRuleEditTypes) with step-by-step on-chain submission
  • Add undeployed wallet state display on create wallet and main screens
  • Add pending credential retry (retryPendingDeploy) with balance fetch and DEMO token minting
  • Add PolicyManagementSection and SignerManagementSection as extracted Compose components
  • Add ApproveScreen.swift and ApproveFlow.kt for macOS demo
  • Add on-chain deployment check after session restore to detect undeployed wallets
  • Use executeAndSubmit/multiSignerExecuteAndSubmit for simple threshold policy updates in demo

Demo app fixes

  • Fix network subtitle color in demo app top bar
  • Fix resource leaks and stale state references in demo flows
  • Fix validation and state encapsulation in demo screens
  • Remove collapsible sections on wallet connection screen for simplified layout

Demo app infrastructure

  • Update testnet contract addresses (WASM hash, WebAuthn verifier, Ed25519 verifier, policy contracts)
  • Add mainnet indexer URL to default URL map
  • Update DemoState with isDeployed tracking and proper setter encapsulation
  • Update MacOSBridge with approve flow, context rule edit, and pending deploy methods
  • Restructure ContextRuleBuilderScreen.kt to reduce code duplication

Contract compatibility

  • Verified against OZ stellar-contracts v0.7.0 (no changes since v0.7.0-rc.2 update)

Replace hardcoded AUTH_ENTRY_EXPIRATION_BUFFER with the user-configurable
signatureExpirationLedgers in signing paths. The fundWallet path uses
Util.LEDGERS_PER_HOUR directly as a testnet convenience method.
Improve nonce generation in the fundWallet testnet helper. Initialize
SorobanServer eagerly in create() to eliminate an unsynchronized lazy
init race condition.
Add multiSignerExecuteAndSubmit() for multi-signer authorization on
arbitrary contract calls. Extract shared signing pipeline, add
forceMethod support to multi-signer methods, and handle non-contract
wallet auth entries.
…tion

Refactor deployWallet into buildDeployTransaction and submitDeployTransaction
for clean separation. Add deployPendingCredential() for retrying failed
deployments with autoSubmit, autoFund, and forceMethod support. createWallet
now always returns signedTransactionXdr and accepts forceMethod. Use
configurable timeoutInSeconds and AbstractTransaction.MIN_BASE_FEE instead
of hardcoded values. Fix demo retry deploy to actually deploy and fund.
…ization

SDK: Add selectedSigners and forceMethod parameters to all state-changing
methods on OZSignerManager, OZPolicyManager, and OZContextRuleManager.
When selectedSigners is non-empty, operations route through the
multi-signer signing pipeline. Change submitWithMultipleSigners
visibility from private to internal.

Demo (Compose): Split ContextRuleBuilderScreen into SignerManagementSection
and PolicyManagementSection. Add edit-mode support for adding, removing,
and modifying signers and policies on existing context rules. Read
on-chain policy params via getContractData for pre-populating edit forms.
Add multi-signer signer picker for create, edit, and remove operations.
Implement auth context guard matching the TS SDK demo behavior.

Demo (macOS): Mirror all Compose changes in the Swift app including
bridge types, ViewModel edit logic, signer picker, and policy param
reading.
All connection methods are now always expanded with descriptions visible.
Removed expand/collapse toggle logic and chevron icons. Renamed
"Connect with Address (Recovery)" to "Connect with Address".
- Add contractCall() to OZTransactionOperations for single-signer direct external contract calls
- Add multiSignerContractCall() to OZMultiSignerManager for multi-signer direct external contract calls
- Make submitWithMultipleSigners() public on OZMultiSignerManager
- Add ApproveScreen to Compose and macOS demo apps using the new APIs
- Add Approve navigation button to MainScreen on both platforms
- Update api-reference.md with new methods
… policy updates in demo app

- Simple threshold policy edits now call set_threshold() directly on the policy contract via the smart account's execute() entry point, routing to executeAndSubmit or multiSignerExecuteAndSubmit based on selectedSigners
- Collect and display transaction hashes in context rule edit results on both platforms
- Fix macOS app auto-dismissing on edit/create success instead of showing the result card
- Remove standalone signer picker button from macOS Transfer and Approve screens to match web app behavior
- Fix restoredFromSession never returning true on session restore (code bug)
- Rename getDeployer() to effectiveDeployer() on OZSmartAccountConfig for naming consistency
- Cache deployer keypair in OZSmartAccountKit to avoid repeated creation
- Make indexerClient and relayerClient public on OZSmartAccountKit
- Remove unused createIndexerClient() from OZSmartAccountConfig
- Remove dead deployWallet() method from OZWalletOperations
- Remove unused KeyPair import from OZWalletOperations
- Fix stale KDoc: connectWallet WebAuthn claim, authenticatePasskey code example, publicKey may be empty
- Add missing @throws, @param documentation across all three classes
- Add Indexer Client and Relayer Client sections to api-reference.md
- Add platform-specific provider tables to OZSmartAccountConfig docs
- Update Quick Start with session restore flow and correct amount type
- Remove all TypeScript SDK references from source comments and docs
…d tests

- Fix IDE warnings in OZWalletOperations: unused catch parameters, var to val, if-then foldable, unused method parameter
- Update demo app to use OZBuilders for context rule type construction (Compose + macOS bridge)
- Add OZBuildersTest with 9 unit tests covering all builder methods and edge cases
- Add Builders section to api-reference.md documenting OZBuilders public API
- Fix minor KDoc issues in OZBuilders
- Fix FRIENDBOT_RESERVE_XLM KDoc to describe actual behavior (retained in temp account, not funded by Friendbot)
- Remove MAX_CONTEXT_RULES constant (not enforced by the OZ contract, from an older version)
- Remove related test assertions
- Fix transfer() KDoc: no longer XLM-specific, describes any SEP-41 token
- Fix transfer() flow: accurately shows delegation to contractCall()
- Fix TransactionResult example: amount type corrected from Double to String
- Add specific @throws types to all methods (replacing generic SmartAccountException)
- Simplify submit() flow description to match actual delegation structure
- Fix submitMultiSignerTransaction param description for clarity
- Add KDoc to generateNonce() private method
- Remove hardcoded timing claim from pollForConfirmation
- Remove unused ktor imports
- Fix Transaction Operations doc chapter: missing exceptions, incomplete examples
… and isPrimary, fix KDoc, improve docs

- Delete unused markDeployed method and its tests
- Wire up updateLastUsed after successful signing in both submit() and submitWithMultipleSigners()
- Set isPrimary = false for additional passkey signers in addNewPasskeySigner()
- Make internal: markDeploymentFailed, updateCredential, updateLastUsed, setPrimary
- Fix KDoc: state machine add sync and failed->deleted paths, saveCredential overwrite/isPrimary/contractId behavior, sync failure handling, missing @param nickname
- Remove unused existing variables in markDeploymentFailed and updateCredential
- Document missing public methods in api-reference: getCredential, getCredentialsByContract, getForConnectedWallet, saveCredential, clearAll
- Fix incorrect throws in docs: saveCredential, getForConnectedWallet
- Fix StoredCredential field order and defaults to match source
- Add missing throws to getPendingCredentials and syncAll docs
…lManager

SDK changes:
- Add removeSigner(contextRuleId, signer) convenience overload that resolves signer ID via single RPC call
- Make parseContextRule internal on OZContextRuleManager for single-rule fetch
- Fix isPrimary: default to false in createPendingCredential, set true only in createWallet
- Fix double-prefixed error message in addNewPasskeySigner WebAuthn exception
- Fix thread safety claim in OZSignerManager class KDoc
- Fix addSigner KDoc: clarify signer ID not in TransactionResult
- Fix removeSigner KDoc: specific @throws, correct code example
- Add bounds check for signerIds array in signer-based removeSigner

Documentation:
- Remove TS SDK divergence note from addNewPasskeySigner
- Add removeSigner (by signer value) section
- Add missing code examples for addPasskey, addEd25519, removeSigner
- Fix addNewPasskeySigner throws: add ValidationException, StorageException
- Add throws sections to addPasskey, addDelegated, addEd25519
- Document missing credential manager methods: getCredential, getCredentialsByContract, getForConnectedWallet, saveCredential, clearAll
- Fix incorrect throws in docs: saveCredential, getForConnectedWallet
- Fix StoredCredential field order and defaults
- Add removePolicy(contextRuleId, policyAddress) convenience overload with single-rule fetch and bounds check
- Add threshold > 0 validation to SimpleThreshold.toScVal() and WeightedThreshold.toScVal()
- Add policyAddress format validation to address-based removePolicy
- Make sortMapByKeyXdr internal
- Fix PolicyInstallParams KDoc: "at least M-of-N", add note about convenience methods, fix example
- Fix spendingLimit param: no longer XLM-specific, describes decimal string with 7 decimal places
- Simplify convenience method flow descriptions to "delegates to addPolicy"
- Standardize @throws across all methods with specific exception types
- Fix HostFunctionXDR typo to HostFunctionXdr in return tags
- Add throws and examples to all policy methods in api-reference.md
- Add removePolicy (by address) section to api-reference.md
- Add test for new removePolicy overload
…fix KDoc and tests

- Document getContextRule, listContextRules, ParsedContextRule in api-reference.md
- Make resolveContextRuleIdsForEntry internal, buildInvocationContextTypes and contextRuleTypeMatches private
- Fix resolveContextRuleIdsForEntry KDoc: add missing Tier 3 (selected subset) to algorithm
- Fix stale v0.7.0 reference, vague @throws, missing @throws on updateValidUntil and parseSigner
- Fix 3 pre-existing test failures: isPrimary default change, threshold > 0 validation
… docs

- Fix SelectedSigner.Passkey equals/hashCode for ByteArray content equality
- Remove duplicate keyData validation, duplicate @OptIn, redundant casts
- Remove duplicate null checks on externalWallet (guarded at method entry)
- Extract shared validation into validateContractCallArgs helper
- Fix step numbering, remove TS SDK references, fix stale version comment
- Fix docs: amount not XLM-specific, add throws/validation info
…ess, fix KDoc

- Make get(), hasSigners(), hasWalletAdapter internal; InMemoryWalletConnectionStorage internal
- Add disconnectByAddress(address) to ExternalWalletAdapter for per-address cleanup
- Call disconnectByAddress from remove() and removeWalletFromStorage from addFromSecret
- Document WalletConnectionStorage interface and constructor parameters
- Fix stale KDoc references, add missing side effect documentation
… and docs

- Normalize indexerUrl once in init as baseUrl, remove repeated trimEnd calls
- Implement AutoCloseable for use {} block support
- Use Network.TESTNET.networkPassphrase instead of hardcoded string
- Extract health status magic string to HEALTH_STATUS_OK constant
- Fix @throws on performRequest, lookupByCredentialId, getStats
- Document all response types, factory methods, constructor params in api-reference
- Fix IndexedSigner: add Native type, correct credential ID format to hex
… tests

Documentation:
- Document Events chapter: add once, removeAllListeners, listenerCount, setErrorHandler
- Document Exceptions chapter: add SmartAccountErrorCode enum with all 26 codes
- Document Types chapter: add TransactionResult, PolicyInstallParams, StoredCredential,
  CredentialDeploymentStatus, ConnectedWallet, SignAuthEntryResult
- Fix WebAuthnAuthenticationResult property order
- Rewrite Platform-Specific Implementations with actual constructors and parameters
- Document Relayer Client: fix method signatures, add RelayerResponse and RelayerErrorCodes
- Remove phantom constants AUTH_ENTRY_EXPIRATION_BUFFER and MAX_CONTEXT_RULES from docs

SDK fixes:
- Refactor OZRelayerClient: persistent HTTP client, AutoCloseable, remove withHttpClient
- Add isLocalhostUrl validation to prevent http://localhost.evil.com bypass
- Add client identification headers (X-Client-Name, X-Client-Version) to OZIndexerClient
- Extract header constants to OZConstants
- Fix OZSmartAccountEvents KDoc: CredentialCreated, TransactionSubmitted, removeAllListeners
- Fix adapter bugs: IndexedDB deleteDatabase default, close() synchronization,
  JsWebAuthn CBOR bounds check, AppleWebAuthn unused variable, UserDefaults synchronize removal
- Restore sortMapByKeyXdr public visibility for demo app

Tests:
- Add IndexerClientTest (44 tests) with MockEngine-based HTTP testing
- Add RelayerClientTest (35 tests) with MockEngine-based HTTP testing
- Consolidate and delete RelayerIndexerClientTest
- 100% code path coverage for both clients
…atform guides

- README.md: remove external SDK references from deployer and signer sections,
  remove MAX_CONTEXT_RULES claim, fix transfer amount comment (not XLM-specific)
- onboarding.md: remove external SDK references, remove 15 context rules claim,
  fix spending limit description (token-generic)
- webauthn-macos.md: rewrite presentation context section (property already exists),
  fix error code 1005 to 1004, fix iCloud sync claim on UserDefaults
- webauthn-web.md: note that IndexedDBStorageAdapter.close() is suspend
- webauthn-android.md: clarify API 28+ is for WebAuthn, API 24+ for storage
…dation bug

New test files (9):
- SmartAccountSignaturesTest (64 tests): signature types, XDR encoding, validation
- SmartAccountAuthPayloadTest (55 tests): codec read/write, upsert, round-trips
- SmartAccountUtilsTest (72 tests): key extraction, signature normalization, derivation
- SmartAccountErrorsTest (175 tests): all factory methods, error codes, wrapError
- ContextRuleParsingTest (57 tests): parseContextRule, toScVal, validation
- PolicyInstallParamsTest (31 tests): threshold/spending limit ScVal, sortMapByKeyXdr
- SignerTypesTest (67 tests): signer construction, equality, ScVal round-trips
- TransactionOperationsValidationTest (43 tests): input validation, data classes
- WalletOperationsValidationTest (62 tests): connection state, data classes, validation

Updated test files (1):
- EventSystemTest: 19 new tests for once(), edge cases, rapid emission

Bug fix:
- Add missing targetFn blank validation to executeAndSubmit (was present in
  contractCall but missing in executeAndSubmit)

Source KDoc fixes:
- OZSmartAccountConfig: add @throws for constructor validation
- OZSmartAccountConfig.effectiveDeployer: document suspend rationale
- WebAuthnProvider: remove unused import, fix attestationObject KDoc
… types, use constants

- SmartAccountAuth: remove external SDK reference from buildAuthDigest KDoc
- SmartAccountBuilders: fix createSpendingLimitParams @throws (IllegalArgumentException
  from amountToStroops, not ValidationException), use ED25519_PUBLIC_KEY_SIZE constant
- SmartAccountSignatures: use ED25519_PUBLIC_KEY_SIZE constant in Ed25519Signature init
- SmartAccountUtils: fix deriveContractAddress to throw ValidationException.InvalidInput
  for encoding failures instead of TransactionException.SigningFailed
- SmartAccountErrors: add missing KDoc to IndexerException factory methods
Platform adapter fixes:
- Fix CBOR integer overflow producing negative lengths (Android)
- Fix Keychain SecItemUpdate missing kSecAttrAccessible attribute (Apple)
- Fix fragile js() variable name captures with IIFE pattern (JS)
- Fix AppleWebAuthnProvider reporting false instead of null for unknown flags
- Fix UserDefaultsStorageAdapter bare return null in withLock lambda
- Extract shared StoredCredential.applyUpdate() replacing 6x duplicated merge logic
- Remove credential IDs from Android log messages
- Add safe casts with descriptive errors for Android CredentialManager responses
- Update copyright headers to 2026

New tests (58):
- KeychainStorageAdapterTest: 32 tests against real macOS Keychain
- AppleWebAuthnProviderTest: 11 tests for constructor validation and NSData conversion
- JsWebAuthnGuardTest: 7 tests for Node.js environment guards
- UserDefaultsStorageAdapterTest: 3 additional edge case tests
- LocalStorageAdapterTest: 5 additional field update tests
Consolidate CBOR parsing, key extraction, and authenticator flags logic
from all three platform WebAuthn providers into a shared utility in the
OZ layer. Add tests covering every method.
Update demo contract addresses and WASM hash to latest OZ testnet
deployment. Add mainnet indexer default URL for auto-configuration.
@codecov-commenter

codecov-commenter commented Apr 8, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 52.40506% with 376 lines in your changes missing coverage. Please review.
✅ Project coverage is 78.11%. Comparing base (0fe1ed1) to head (b0d93ba).

Files with missing lines Patch % Lines
...tellar/sdk/smartaccount/oz/OZMultiSignerManager.kt 20.43% 101 Missing and 8 partials ⚠️
.../stellar/sdk/smartaccount/oz/OZWalletOperations.kt 22.58% 94 Missing and 2 partials ⚠️
.../stellar/sdk/smartaccount/oz/WebAuthnCborParser.kt 73.30% 26 Missing and 37 partials ⚠️
...eso/stellar/sdk/smartaccount/oz/OZPolicyManager.kt 33.33% 26 Missing ⚠️
...eso/stellar/sdk/smartaccount/oz/OZSignerManager.kt 35.00% 25 Missing and 1 partial ⚠️
...lar/sdk/smartaccount/oz/OZTransactionOperations.kt 54.00% 22 Missing and 1 partial ⚠️
...eso/stellar/sdk/smartaccount/oz/OZRelayerClient.kt 74.13% 5 Missing and 10 partials ⚠️
...tellar/sdk/smartaccount/oz/OZContextRuleManager.kt 42.85% 12 Missing ⚠️
...stellar/sdk/smartaccount/core/SmartAccountUtils.kt 33.33% 2 Missing ⚠️
...lar/sdk/smartaccount/oz/OZExternalSignerManager.kt 66.66% 0 Missing and 1 partial ⚠️
... and 3 more

❌ Your patch status has failed because the patch coverage (52.40%) is below the target coverage (70.00%). You can increase the patch coverage or adjust the target coverage.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main      #19      +/-   ##
==========================================
+ Coverage   77.34%   78.11%   +0.77%     
==========================================
  Files         836      837       +1     
  Lines       24027    24553     +526     
  Branches     3173     3311     +138     
==========================================
+ Hits        18583    19180     +597     
+ Misses       4164     4036     -128     
- Partials     1280     1337      +57     
Files with missing lines Coverage Δ
.../stellar/sdk/smartaccount/core/SmartAccountAuth.kt 75.43% <ø> (ø)
...llar/sdk/smartaccount/core/SmartAccountBuilders.kt 95.23% <100.00%> (-0.22%) ⬇️
...tellar/sdk/smartaccount/core/SmartAccountErrors.kt 99.00% <100.00%> (+0.60%) ⬆️
...ar/sdk/smartaccount/core/SmartAccountSignatures.kt 100.00% <100.00%> (ø)
...m/soneso/stellar/sdk/smartaccount/oz/OZBuilders.kt 100.00% <ø> (+100.00%) ⬆️
...stellar/sdk/smartaccount/oz/OZCredentialManager.kt 53.48% <100.00%> (-1.57%) ⬇️
...eso/stellar/sdk/smartaccount/oz/OZIndexerClient.kt 73.75% <100.00%> (+51.06%) ⬆️
...tellar/sdk/smartaccount/oz/OZSmartAccountConfig.kt 97.59% <100.00%> (+0.09%) ⬆️
...tellar/sdk/smartaccount/oz/OZSmartAccountEvents.kt 88.52% <ø> (ø)
...so/stellar/sdk/smartaccount/oz/WebAuthnProvider.kt 79.06% <ø> (ø)
... and 13 more

... and 3 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@christian-rogobete
christian-rogobete merged commit 623caf7 into main Apr 8, 2026
5 checks passed
@christian-rogobete
christian-rogobete deleted the sm-release-prep branch April 28, 2026 02:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants