Conversation
Signed-off-by: dzdidi <dzdidi@protonmail.com>
Signed-off-by: dzdidi <dzdidi@protonmail.com>
# Conflicts: # docs/plans/2026-08-10-lock-payment-draining.md
This was referenced Sep 30, 2026
ben-kaufman
approved these changes
Oct 1, 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.
fix: make Payment Request status the canonical Locks lifecycle contract
Prerequisite and scope
This PR is stacked on latest #3 (
feat/lock-payment-draining) at8d86af67f0a3639284c038bf67bc1faa02688ce0through explicit merge commit44ed37886122a201b2d5f73c9578ecabb48f72bd. It preserves both prior #27 head9a266ef2df6a46c115a99e696fefdb4295bf814band latest #3 head as direct parents; no rebase or force push was used. Keep this PR based onfeat/lock-payment-draininguntil #3 merges.PR #3 owns persisted invoice deadlines, immutable Paykit Rust rc56 request terms, replay validation, durable lifecycle projection, required-peer/path intake freshness, Creator-local SDK mutation serialization, same-fence target revalidation, payment observation, and destructive staging-only migration
0007.This follow-up finalizes one canonical lifecycle boundary for Locks:
POST /payment-requests/statusreturns separaterequest_stateandpayment_stateaxes;invoice_created_at, exact protocol/persistedpayment_deadline,confirmations, andamount_matched;rejected,canceled, andproposal_expiredremain distinct request states;payment_state: expiredremain distinct payment-deadline expiry;RecoveryRequiredreturns typed503 unavailable;InvalidConflictreturns typed409 conflict;docs/fixtures/payment-request-status/and byte-checked against serializer.Legacy signed
POST /transactions/statusremains Bitcoin-only compatibility with closed labelsundetected,detected, andconfirmed. Payment Request lifecycle no longer widens that old enum.Dependency and version
paykit-lib/paykit-sdk: exact released rc56 revision24162ebbcc703251d8038f2e176d1f4cfb117c6a0.1.0-rc6TDD and verification
RED evidence:
cancelledinstead of factualconfirmed;Reviewer-remediation regression locks passed immediately against existing behavior: PostgreSQL now explicitly proves rejected + undetected retains
undetected/0/false, canceled is independently selected as sole winning lifecycle state, and rejected + confirmed remains covered.Passed locally on exact approved restacked candidate commit
44ed37886122a201b2d5f73c9578ecabb48f72bd(treeaf6b0350a789ffc80aad9a0697195b362d108cef):PostgreSQL 16 full E2E passed with zero matching temporary databases before and after. Two live external-adapter smoke tests remain ignored by design. Original exact-tree closure review requested the two PostgreSQL status regressions added in
9a266ef; focused independent review approved that remediation. Second independent review reproduced and approved exact restacked commit44ed37886122a201b2d5f73c9578ecabb48f72bdon latest #3 rc56-tag head8d86af67f0a3639284c038bf67bc1faa02688ce0, including full Server, companion, PostgreSQL E2E, formatting, locked check, Clippy, rustdoc, dependency, migration, ancestry, and clean-tree gates. GitHub CI results below must be read against exact head44ed37886122a201b2d5f73c9578ecabb48f72bd.Out of scope