Skip to content

chore: update paykit to rc56 - #823

Merged
ovitrif merged 4 commits into
masterfrom
chore/paykit-rc56
Sep 30, 2026
Merged

ovitrif merged 4 commits into
masterfrom
chore/paykit-rc56

Conversation

@ben-kaufman

@ben-kaufman ben-kaufman commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Closes #824

This PR updates Bitkit to the Paykit 0.1.0-rc56 release and adapts the existing Bitcoin payment request and proof calls.

Companion: synonymdev/bitkit-android#1365

Description

  • Pins the released SDK and supplies the new optional conversion, payment deadline, allowance, and quote fields without enabling new payment features.
  • Preserves deadline-bearing requests and subscriptions in history, including paid periods and subscription cancellation. Acceptance, new payments, and reminders remain disabled because Bitkit does not yet enforce actual-payment deadlines. Subscription review explains that those payment details are unsupported.
  • Updates existing request, subscription, proof, navigation, and interoperability fixtures for the released bindings.

This upgrade is independent of the USDT integration. It adds no migrations, legacy compatibility paths, or wallet resets.

Screenshot / Video

Reuses the existing subscription review layout and unsupported-payment explanation.

Design

N/A — no design available. Reuses the existing subscription review components and copy.

QA Notes

Manual Tests

  • 1. Contacts → pay a contact: the existing Bitcoin payment flow works.
  • 2. Payment Requests → create and accept a Bitcoin request → pay: the request and payment proof are delivered.
  • 3. Subscriptions → create and accept a subscription → pay an installment: billing periods and proof delivery remain correct.

Journeys

  • journeys/payment-requests/payment-deadline-history.xml is included on both platforms. Not run end to end: it requires a controlled rc56 peer with accepted and paid deadline-bearing records. The repository tests exercise those states with fixtures.

Automated Checks

  • Simulator app/test-bundle build and all 158 tests in the payment request, subscription proposal, issuer interoperability, payment proof, and payment navigation suites passed against the published rc56 xcframework, verified against its release SHA-256.
  • PaykitPaymentRequestServiceTests.swift covers deadline payment rejection, one-time and paid recurring history, proof-delivery retries, and reminder suppression. Other fixture changes match rc56 constructors; no existing test coverage was removed.
  • SwiftFormat, git diff --check, independent UI and journey/docs reviews, XML parsing and cross-platform journey comparison passed. Existing unrelated compiler warnings remain.
  • The full iOS suite, including Bitcoin network integration tests, was not rerun for this follow-up. Manual peer-to-peer payment checks remain unchecked above.

@ben-kaufman
ben-kaufman marked this pull request as ready for review September 29, 2026 12:10
@greptile-apps

greptile-apps Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 4/5

[High risk] Updates payment processing library to new release candidate.

The PR is not ready to merge while deadline-bearing recurring plans can disappear from history and cancellation.

Findings

  1. P1 Deadline hides entire subscription ▶
  2. P2 Deadline requests vanish from history ▶

Summary

The PR pins Paykit rc56 and adapts request, subscription, proof, and test constructors to its new fields. It also prevents payment of requests with deadlines that Bitkit does not enforce. The deadline checks additionally remove historical one-time requests and whole recurring plans from management views.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  A[Paykit records] --> B{Record type}
  B -->|One-time| C[Shared request parser]
  C --> D[Payable requests]
  C --> E[Request history]
  B -->|Recurring| F[Subscription initializer]
  F --> G[Due periods]
  F --> H[Paid history and cancellation]
  C -->|Deadline present| I[Record omitted]
  F -->|Deadline present| I
Loading

Reviews (1) · Last reviewed commit: "chore: update paykit to rc56"

Comment thread Bitkit/Services/PaykitPaymentRequestService.swift Outdated
Comment thread Bitkit/Services/PaykitSubscription.swift Outdated

@ovi-reviewer ovi-reviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Advice: ✅ Approve


Review: diff 12 files.
Equivalent to synonymdev/bitkit-android#1365.

Findings:
2 inline (2 MEDIUM)

Audit:
Awaits QA.

Coverage:
QA: waits for the other reviewers' approval, or @ovi-reviewer test


Reviewed by gpt-6-sol-xhigh via gh-pr-review-loop skill
Commands: @ovi-reviewer review · test · retest · audit (author or owner) · wrong <why> (owner)

Comment thread journeys/payment-requests/payment-deadline-history.xml Outdated
Comment thread journeys/payment-requests/payment-deadline-history.xml

@ovi-reviewer ovi-reviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Advice: ✅ Approve


Reaudit: diff 2 files.
No new findings; the rest is in the review.
Pair PR synonymdev/bitkit-android#1365: equivalent.


Reviewed by gpt-6 via gh-pr-review-loop skill
Commands: @ovi-reviewer review · test · retest · audit (author or owner) · wrong <why> (owner)

@jvsena42 jvsena42 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two LOW inline. No SDK-adaptation findings.

Checked and clean:

  • The pbxproj change is only the version pin.
  • Released tags: v2.5.0 = rc51, v2.4.x = rc31, v2.3.x = rc8. The SDK storage schema is unchanged rc55→rc56, and app-side Codable stores are untouched.
  • parse(... requiresActionableRequest: true) rejects deadline requests before amount parsing, and every pay entry point requires membership in pendingRequests. finishPayment/paymentRequestForRetry are unreachable for a deadline request.
  • hasPaymentDeadline gates proposal acceptance, payment due on acceptance, recurring materialisation, commit and reminders. Paid periods are keyed by period, so rc56's retained proofs cannot double-count.
  • Outbound conversion/paymentDeadline/allowanceId/conversionQuoteId are nil.
  • A payee cancellation after payment derives .canceled and is excluded from pending, and crossing acceptances do not resurrect it.

Comment thread journeys/payment-requests/payment-deadline-history.xml Outdated
Comment thread Bitkit/Services/PaykitSubscription.swift

@ovi-reviewer ovi-reviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Advice: ✅ Approve


Reaudit: diff 5 files.
No new findings; the rest is in the review.
Pair PR synonymdev/bitkit-android#1365: equivalent.


Reviewed by gpt-6-sol-xhigh via gh-pr-review-loop skill
Commands: @ovi-reviewer review · test · retest · audit (author or owner) · wrong <why> (owner)

@ovi-reviewer ovi-reviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: ♻️ Comment


Audit:
Audited - no findings.


Reviewed by gpt-6-sol-xhigh via gh-pr-review-loop skill
Commands: @ovi-reviewer review · test · retest · audit (author or owner) · wrong <why> (owner)

@ovi-reviewer ovi-reviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: ✅ Approve


Tests for the review: Tests 1 and 3 passed; Test 2 and journey J1 could not be verified without the required test services.

Audit:
Already done in review.
No findings remain.

QA:
Tested on two iOS 26.5 simulators (iPhone 17 Pro)

Test 1 ✅ passed

evidence
1.mp4

Test 2 ⚠️ not verified: could not test without the paykit-issuer fixture.

Test 3 ✅ passed

evidence
3.mp4

Test J1 ⚠️ not verified: could not test without the rc56 peer.

Warning

Payment request delivery and deadline history remain unverified without the issuer and rc56 peer.

Note

Tests 1 and 3 passed.

Tip

Try this journey:

Test 1
  • Create two regtest wallets, enable Paykit UI, and save each wallet's Pubky profile as a contact on the other.
  • Open the recipient contact on the funded payer and tap Send, then Pay.
  • Enter 5,000 sats and continue to the confirmation screen.
  • Swipe to pay and verify Bitcoin Sent.
  • Verify the recipient shows Received Bitcoin for 5,000 sats.
Test 3
  • Create two linked regtest wallets with Paykit UI enabled and fund the payer above 5,000 sats.
  • On the creator, make a monthly Journey Sub for 5,000 sats and propose it to the payer contact.
  • On the payer, review the proposal and swipe to subscribe and pay.
  • Confirm the 5,000 sat Bitcoin send and verify the Subscribed result.
  • Open the payer's subscription detail and verify Active, the next month's renewal date, and the first payment.
  • Open the creator's subscription detail and verify one subscriber, one payment, and the matching received installment.

Reviewed by gpt-6-sol-xhigh via gh-pr-review-loop skill
Commands: @ovi-reviewer review · test · retest · audit (author or owner) · wrong <why> (owner)

@ovi-reviewer

ovi-reviewer Bot commented Sep 29, 2026

Copy link
Copy Markdown

@ben-kaufman conflicts

ovitrif
ovitrif previously approved these changes Sep 29, 2026

@ovitrif ovitrif left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm, still needs conflicts resolution

@ovitrif
ovitrif enabled auto-merge September 29, 2026 20:13

@ovi-reviewer ovi-reviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Advice: ✅ Approve

Reaudit: diff 1 file.
No new findings; the rest is in the review.

QA:
Tests wait for the non-e2e CI checks.


Reviewed by gpt-6-sol-medium via gh-pr-review-loop skill
Commands: @ovi-reviewer review · test · retest (author)

@ovitrif ovitrif left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reapproved

@ovitrif
ovitrif merged commit e88feb9 into master Sep 30, 2026
17 checks passed
@ovitrif
ovitrif deleted the chore/paykit-rc56 branch September 30, 2026 02:04
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.

chore: update paykit to rc56

3 participants