Repository navigation
chore: adopt Paykit 0.1.1-rc6 - #1237
Draft
ben-kaufman wants to merge 5 commits into
Draft
ben-kaufman wants to merge 5 commits into
ben-kaufman wants to merge 5 commits into
Conversation
Pin paykit-rs to the published 0.1.1-rc6 release (revision 9919198a) and update test fixtures for the new Payment Request record times and the acknowledged list in Private Payment List delivery reports. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Measure the Payment Proof Event Message with the SDK's paymentProofEventLen before a Lightning, on-chain or USDT Payment Request payment, so a request whose proof cannot fit one Paykit message is refused before anything is paid. The USDT check now uses the same measurement instead of a hand-built copy of the message. Ask to shorten the note or subscription text when the SDK refuses a proposal with message_too_large, and explain a refused signup code or a failed connection in the Pubky authorization sheet. A verified USDT transfer made more than a day before this wallet recorded its request is labelled Received, Before request and no longer counts as paying it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Measure the Payment Proof Event Message before an Allowance accepts a Payment Request automatically, so a request whose proof cannot fit one Paykit message is left for manual review instead of being accepted and then failing to pay. Allowance test fixtures now use canonical UUID-v4 Allowance IDs, which the SDK requires in a Payment Proof. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cover that the proof size check counts the Allowance ID, Billing Period and quote ID it will send, that Bitkit's own requests leave room for their longest proof, that SDK-formatted record times are parsed, that Before request wins over the other receipt labels, and that receipts saved before the flag existed still count as paid. Use the SDK App ID and the USDT chain ID from their shared constants. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Nov 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Twin: synonymdev/bitkit-android#1803
This PR:
Description
0.1.1-rc6at revision9919198a, the same way the rc2 bump did. The app compiled unchanged against rc6. Only test fixtures needed the new Payment Request record times and the acknowledged list in Private Payment List delivery reports.paymentProofEventLen, using the longest proof the rail can produce and the IDs it will send. A request whose proof would not fit the 1000-byte message limit shows "The payment request is no longer available." and nothing is paid. An Allowance checks this before it accepts the request automatically, so such a request stays manual instead of being accepted and then left unpaid. The USDT check used a hand-built copy of the message and now uses the same measurement. Bitkit's own requests use a fixed-length payment reference, so their longest proof always fits.message_too_largeshows "Shorten the note and try again." (wallet__payment_request_note_too_long, new) for a one-time request and the existing "Shorten the subscription name or description and try again." for a subscription, instead of the raw SDK error. Nothing is queued in either case.profile__auth_error_signup_code_rejected, new) and a network, 5xx, 429 or PKARR failure, which rc6 reports as a transport error, shows "Check your connection and try again." (pubky_auth__identity_unavailable_desc, new on iOS with Android's translations). Other failures keep their description.wallet__payment_request_before_request, new) and does not pay the request or Billing Period. The day covers Arbitrum timestamp lag. Receipts and backups from earlier builds keep their meaning.republishIdentityfinds no record. Platform callbacks already throwPaykitError. Bitkit uses Pubky shared state, so thestateRevisionchange does not apply. Accounting already reconciles state that requires it and automatic acceptance uses one trusted time. Requests that rc2 showed as invalid after a late Acceptance are shown from their new state. Encrypted Link sends check write slots before publishing, with no API change. The homeservers, relays and homegate Bitkit uses on staging and production chain to ISRG Root X1, whichwebpki-roots1.0.11 keeps.Out of Scope
Bitkit/Services/PaykitAllowanceManager.swift: automatic acceptance of Allowance offers still accepts each offer separately.acceptPendingAllowanceProposalswould also accept a contact's offers in assets Bitkit does not list and cannot bind each acceptance to the offer Bitkit listed.Bitkit/Services/PubkyService.swift: deleting a single contact still blocks the peer when the private list withdrawal reports a failure, as before.Bitkit/Services/PaykitUsdtPaymentService.swift: the one-day tolerance covers Arbitrum timestamp lag. It does not add a margin for the payee's own clock skew.Design
N/A — no design available. The change adds text to existing toasts and to the USDT receipt status.
Preview
N/A
QA Notes
Setup
journeys/payment-requests/README.md(Request summary setup). No funds are needed.journeys/pubky-auth/README.md). Complete one signup_grant URL on another wallet first, then use the same URL, whose token is now used, for the journey.Journeys
request-note-too-long.xml— a note that cannot fit one Paykit message is refused with "Shorten the note and try again." before anything is sent, and the shortened request sendsgrant-signup-rejected-code.xml— a refused signup code shows the signup code message, the sheet stays open and no identity is createdManual Tests
Automated Checks
PaykitPaymentProofServiceTests.swift— Lightning and on-chain preparation accepts a request whose proof is exactly 1000 bytes and refuses one at 1001 bytes without storing anything, and the Allowance ID counts toward the sizePaykitAllowanceExecutorTests.swift— a request whose proof cannot fit stays manual with no execution claim, Acceptance or paymentPaykitRequestPricingTests.swift— the USDT placeholder is a valid proof of the longest shape, the USDT check accepts exactly 1000 bytes and refuses 1001, the Billing Period and quote ID count toward the size, and Bitkit's own requests leave room for their longest proofPaykitPaymentRequestServiceTests.swift—message_too_largebecomes the note and subscription messages with nothing proposed, and other protocol errors pass through. A USDT transfer more than a day before the request record time, in Bitkit's or the SDK's timestamp format, is flagged, shown as Before request ahead of other labels and does not pay it, while one within the day or without a valid record time doesPaykitPaymentStateBackupTests.swift— the before-request flag survives a backup, and an older backup or a receipt saved before the flag existed still counts as paidPubkyAuthApprovalSheetTests.swift— a refused signup code and a transport error get their messages, other errors keep their ownPaykitAllowanceTests.swift— Allowance fixtures use canonical UUID-v4 IDs, which the SDK requires in a Payment Proofopenssl s_clientagainst a bundle built fromwebpki-root-certs1.0.11 — homeserver, httprelay, homegate and nexus onpubky.appandstaging.pubky.app,pkarr.pubky.app,pkarr.pubky.organdrelay.pkarr.orgverify, ending at ISRG Root X1Evidence
60111132, a throwaway iPhone 17 simulator (iOS 26.5), Xcode 27.2: CI's unit test selection (xcodebuild test, skipping the integration suites as inunit-tests.yml) passed,BitkitTests3189 executed with 1 skipped (UsdtNativeRecoveryIntegrationTests, needs a local fixture) andBitkitUITests44 executed with 4 skipped, 0 failures. The same selection also passed on265389e8(the bump alone, 3176 executed) andcd4236ab(3186 executed). Head1594952eonly renames the changelog fragment.node scripts/validate-translations.jsreports 0 errors with the same warnings as master, andgit diff --checkis clean.Paykit.xcframework.zipfor v0.1.1-rc6 matches thePackage.swiftchecksum23bf9612c2bc7579dee8a40b18527936ba1a0531f788e13f9aae8f6286ccf3f5.Gaps
Models used
Claude Opus 5.5(reasoning:Not exposed)Claude Opus 5.5(reasoning:Not exposed)Claude Opus 5.5(reasoning:Not exposed)The session metadata does not expose a reasoning setting.
🤖 Generated with Claude Code