Reconcile StoreKit entitlements and add deterministic integration tests#3
Conversation
Make TransactionStore the observable process owner, reconcile unfinished revisions to a fixed point, and refresh on subscription status changes. Preserve per-element verification failures, single report authority, cancellation identity, and drain guarantees across direct and background operations. BREAKING CHANGE: Store has been renamed to TransactionStore without a compatibility alias.
Exercise direct and external purchases, launch reconciliation, upgrade and downgrade transitions, cancellation through expiration, renewal, refunds, restore retry, and Ask to Buy using event-driven StoreKitTest assertions.
Pin the StoreKit lane to Xcode 26.5 and its iOS 26.4 runtime, disable parallel execution, and include the app-hosted test sources in swift-format linting.
Document TransactionStore ownership, unresolved and failed startup states, upgrade-safe entitlement checks, revocation handling, callback reentrancy, promoted purchases, restore cancellation, and stable entitlement ordering.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4866d7cb79
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Process verified unfinished deliveries independently of entitlement membership or product type. Report stable unverified deliveries once, keep failed revisions retryable, and document the readiness contract.
Propagate transaction-processing ownership through entitlement refreshes so background, abandoned, and restore paths do not report the same physical failure twice. Public callers continue to receive the original underlying error.
Retain failed transaction receipts for the complete physical startup attempt so StoreKit launch replay and unfinished reconciliation cannot execute the same revision twice. Caller cancellation no longer advances readiness gates before reconciliation terminates.
Report unverified unfinished and current-entitlement diagnostics when durable reconciliation terminates with a handler failure, without repeating diagnostics from nonterminal fixed-point iterations.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d4a64f9e87
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Codex Review: Didn't find any major issues. Keep them coming! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Purpose
Make StoreKit transaction processing and entitlement observation durable across startup, subscription changes, upgrades, expiration, restoration, cancellation, and shutdown.
Changes
StoretoTransactionStoreand preserve unresolved versus resolved-empty entitlement state.Testing
swift-formatlintactionlintmain: no actionable findings