test: add marketplace wallet journey - #720

Open
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey
Open

test: add marketplace wallet journey#720
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey

Conversation

@ovitrif

@ovitrifovitrif commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Closes#718

Description

Adds the two-wallet Pubky marketplace wallet-leg journey for watch-only seller setup, linked-buyer Payment Request receipt, on-chain approval, broadcast, and regtest confirmation.

The journey now defines the integration-fixture protocol and runtime contract, with producer provenance from pubky/paykit-server#2 at revision 867fc883.

The final exact-head iOS buyer replay selected request 5f07c465-dc67-42ce-96a0-4209e5389618 through its request-specific Pay action. One authorized swipe broadcast 2822f6b43aebeb228e0bfe96c1b201cf41e0ed46a677d704403dc629b09d6f2a with a 15,000-sat request output and 143-sat fee. One authorized block, 6235eff06b00ed2b736635913e76269cd6524c4fed80f247d244102806816aed, confirmed it at height 16403; signed Paykit reached confirmed/1/true, the Locks bundle completed without failure, and the mempool emptied.

Linked Issues/Tasks

Preview

52-ios-marketplace-wallet-leg.mp4

The sanitized replay shows the request-specific Pay action, 15,000-sat seller review, one swipe to SendSuccess, paid request history, confirmed activity, and exact transaction details.

QA Notes

Manual Tests

  • The controlled seller setup retained watch-only account index 1 without Bitcoin spending authority.
  • A fresh exact-head buyer enabled contact payments, saved the seller, linked at bitkit/wallet, and received the canonical 15,000-sat request.
  • PaymentRequestPay-5f07c465-dc67-42ce-96a0-4209e5389618 opened a 15,000-sat review for hbn4...pfiy with a 143-sat fee and enabled GRAB.
  • One swipe reached SendSuccess; the zero-confirmation checkpoint showed the exact amount-matched output, signed Paykit detected/0/true, Locks pending, and one mempool transaction.
  • One block produced signed Paykit confirmed/1/true, completed Locks state, an empty mempool, and Bitkit sync at matching height 16403 and tip.
  • Confirmed iOS activity showed StatusConfirmed, the 15,000-sat payment, 143-sat fee, seller, and exact transaction; the accepted request remained without Pay or Dismiss actions.

Automated Checks

  • Every journey XML file parses with xmllint.
  • git diff --check passes.
  • The integration merge's production tree is identical to merged Pay-selector head 70cd26346c6a539f792564e2e9bddb41cc00eecc.
  • The sanitized H.264 replay was sampled across every segment and cut boundary; SHA-256 ec6f0819c9e4e4066e8969f092328615bb286925599b6f92c733eba4b999c122.

@ovitrif
ovitrif marked this pull request as ready for review September 2, 2026 11:21
@greptile-apps

Copy link
Copy Markdown

Greptile Summary

This PR adds an agent-evaluated, two-wallet Pubky marketplace journey and documents its external fixture, evidence contract, and accepted regtest replay.

  • Registers the new marketplace journey in the journey index.
  • Defines seller watch-only setup, buyer request payment, broadcast, and confirmation steps.
  • Records fixture requirements, accessibility identifiers, and exact-head acceptance evidence.

Confidence Score: 4/5

The PR appears safe to merge after clarifying how operators can configure Electrum on clean simulators before initial wallet startup.

The journey and selector conventions are otherwise consistent with the agent-evaluated corpus, but the custom Electrum precondition cannot be followed through the documented in-app configuration path as currently written.

Files Needing Attention: journeys/pubky-marketplace/wallet-leg.xml and journeys/pubky-marketplace/README.md

Important Files Changed

FilenameOverview
journeys/README.mdRegisters the new one-journey marketplace suite and its external-fixture requirement.
journeys/pubky-marketplace/README.mdDocuments the fixture contract and accepted replay, but repeats an incomplete pre-first-launch Electrum setup instruction.
journeys/pubky-marketplace/wallet-leg.xmlDefines the complete two-wallet payment walkthrough, with an initial Electrum configuration precondition that lacks an executable setup route.

Sequence Diagram

sequenceDiagram
participant S as Seller wallet
participant F as Integration fixture
participant B as Buyer wallet
participant R as Regtest chain
S->>F: Authorize watch-only account claim
B->>F: Link seller and enable contact payments
F-->>B: Deliver Payment Request
B->>B: Review and approve payment
B->>R: Broadcast transaction
F->>R: Mine one authorized block
R-->>B: Confirm transaction
F-->>B: Report completed marketplace purchase
Loading

Reviews (1): Last reviewed commit: "test: record exact marketplace journey r..." | Re-trigger Greptile

Comment on lines +5 to +7
Precondition: two clean simulator wallets and the integration fixture described in this suite's
README. Configure the fixture Electrum endpoint and Paykit UI before either wallet's first
launch. Start with the seller wallet open and the fixture's fresh setup auth URL available.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2Electrum precondition lacks setup route

The journey requires configuring the fixture endpoint before either wallet's first launch, but the supported configuration flow runs inside the launched app and persists the endpoint only after restarting and validating the node. Document a concrete pre-launch configuration procedure; otherwise operators cannot reliably establish the clean-wallet starting state and can begin the journey on the default regtest chain.

Knowledge Base Used:Restore Electrum connection rollback

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Addressed in 48a85d1: the journey now requires the fixture Fulcrum endpoint at tcp://127.0.0.1:60001 before either first launch and provides the exact xcodebuildmcp local-E2E build command for both simulators. This uses Bitkit’s local-E2E default, so no stored in-app Electrum override is required.

@piotr-iohkpiotr-iohk 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.

QA LGTM on the journey docs. Did not re-run the isolated marketplace fixture.

Checked latest (48a85d1f):

  • Suite is registered; xmllint --noout journeys/pubky-marketplace/wallet-leg.xml passes.
  • Greptile Electrum note is addressed: E2E_BUILD + E2E_BACKEND=local resolves Electrum to tcp://127.0.0.1:60001 in Env.electrumServerUrl. No in-app override required.
  • IDs that already exist on this tree: PubkyAuthWatchOnlyConsent / Approve / Authorize / OK, ContactPaymentsToggle, PaymentRequestsScreen, PaymentRequestRow-<id>, ReviewAmount, ReviewContactRecipient, GRAB, SendSuccess, ActivityAmount, ActivityTxDetails, StatusConfirmed.

Note, not a blocker if merge order is explicit:

  • PaymentRequestPay-<id> is not on this branch. It is added in #721 (PaymentRequestsView.swift). The README already lists #714 / sibling app work as a dependency. Do not treat this PR’s tree as an executable journey until that Pay selector is on master (or merge #721 first).

I am not blocking on not replaying the two-simulator Locks fixture. The contract and the 2026-09-02 acceptance record are consistent with the Android counterpart.

@ovitrifovitrif changed the title test: add marketplace wallet-leg journeytest: add marketplace wallet journeySep 3, 2026
Sign up for freeto 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.

test: add the Pubky marketplace wallet-leg journey

2 participants

@ovitrif@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

test: add marketplace wallet journey - #720

Open
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey
Open

test: add marketplace wallet journey#720
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey

Conversation

@ovitrif

@ovitrifovitrif commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Closes#718

Description

Adds the two-wallet Pubky marketplace wallet-leg journey for watch-only seller setup, linked-buyer Payment Request receipt, on-chain approval, broadcast, and regtest confirmation.

The journey now defines the integration-fixture protocol and runtime contract, with producer provenance from pubky/paykit-server#2 at revision 867fc883.

The final exact-head iOS buyer replay selected request 5f07c465-dc67-42ce-96a0-4209e5389618 through its request-specific Pay action. One authorized swipe broadcast 2822f6b43aebeb228e0bfe96c1b201cf41e0ed46a677d704403dc629b09d6f2a with a 15,000-sat request output and 143-sat fee. One authorized block, 6235eff06b00ed2b736635913e76269cd6524c4fed80f247d244102806816aed, confirmed it at height 16403; signed Paykit reached confirmed/1/true, the Locks bundle completed without failure, and the mempool emptied.

Linked Issues/Tasks

Preview

52-ios-marketplace-wallet-leg.mp4

The sanitized replay shows the request-specific Pay action, 15,000-sat seller review, one swipe to SendSuccess, paid request history, confirmed activity, and exact transaction details.

QA Notes

Manual Tests

  • The controlled seller setup retained watch-only account index 1 without Bitcoin spending authority.
  • A fresh exact-head buyer enabled contact payments, saved the seller, linked at bitkit/wallet, and received the canonical 15,000-sat request.
  • PaymentRequestPay-5f07c465-dc67-42ce-96a0-4209e5389618 opened a 15,000-sat review for hbn4...pfiy with a 143-sat fee and enabled GRAB.
  • One swipe reached SendSuccess; the zero-confirmation checkpoint showed the exact amount-matched output, signed Paykit detected/0/true, Locks pending, and one mempool transaction.
  • One block produced signed Paykit confirmed/1/true, completed Locks state, an empty mempool, and Bitkit sync at matching height 16403 and tip.
  • Confirmed iOS activity showed StatusConfirmed, the 15,000-sat payment, 143-sat fee, seller, and exact transaction; the accepted request remained without Pay or Dismiss actions.

Automated Checks

  • Every journey XML file parses with xmllint.
  • git diff --check passes.
  • The integration merge's production tree is identical to merged Pay-selector head 70cd26346c6a539f792564e2e9bddb41cc00eecc.
  • The sanitized H.264 replay was sampled across every segment and cut boundary; SHA-256 ec6f0819c9e4e4066e8969f092328615bb286925599b6f92c733eba4b999c122.

@ovitrif
ovitrif marked this pull request as ready for review September 2, 2026 11:21
@greptile-apps

Copy link
Copy Markdown

Greptile Summary

This PR adds an agent-evaluated, two-wallet Pubky marketplace journey and documents its external fixture, evidence contract, and accepted regtest replay.

  • Registers the new marketplace journey in the journey index.
  • Defines seller watch-only setup, buyer request payment, broadcast, and confirmation steps.
  • Records fixture requirements, accessibility identifiers, and exact-head acceptance evidence.

Confidence Score: 4/5

The PR appears safe to merge after clarifying how operators can configure Electrum on clean simulators before initial wallet startup.

The journey and selector conventions are otherwise consistent with the agent-evaluated corpus, but the custom Electrum precondition cannot be followed through the documented in-app configuration path as currently written.

Files Needing Attention: journeys/pubky-marketplace/wallet-leg.xml and journeys/pubky-marketplace/README.md

Important Files Changed

FilenameOverview
journeys/README.mdRegisters the new one-journey marketplace suite and its external-fixture requirement.
journeys/pubky-marketplace/README.mdDocuments the fixture contract and accepted replay, but repeats an incomplete pre-first-launch Electrum setup instruction.
journeys/pubky-marketplace/wallet-leg.xmlDefines the complete two-wallet payment walkthrough, with an initial Electrum configuration precondition that lacks an executable setup route.

Sequence Diagram

sequenceDiagram
participant S as Seller wallet
participant F as Integration fixture
participant B as Buyer wallet
participant R as Regtest chain
S->>F: Authorize watch-only account claim
B->>F: Link seller and enable contact payments
F-->>B: Deliver Payment Request
B->>B: Review and approve payment
B->>R: Broadcast transaction
F->>R: Mine one authorized block
R-->>B: Confirm transaction
F-->>B: Report completed marketplace purchase
Loading

Reviews (1): Last reviewed commit: "test: record exact marketplace journey r..." | Re-trigger Greptile

Comment on lines +5 to +7
Precondition: two clean simulator wallets and the integration fixture described in this suite's
README. Configure the fixture Electrum endpoint and Paykit UI before either wallet's first
launch. Start with the seller wallet open and the fixture's fresh setup auth URL available.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2Electrum precondition lacks setup route

The journey requires configuring the fixture endpoint before either wallet's first launch, but the supported configuration flow runs inside the launched app and persists the endpoint only after restarting and validating the node. Document a concrete pre-launch configuration procedure; otherwise operators cannot reliably establish the clean-wallet starting state and can begin the journey on the default regtest chain.

Knowledge Base Used:Restore Electrum connection rollback

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Addressed in 48a85d1: the journey now requires the fixture Fulcrum endpoint at tcp://127.0.0.1:60001 before either first launch and provides the exact xcodebuildmcp local-E2E build command for both simulators. This uses Bitkit’s local-E2E default, so no stored in-app Electrum override is required.

@piotr-iohkpiotr-iohk 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.

QA LGTM on the journey docs. Did not re-run the isolated marketplace fixture.

Checked latest (48a85d1f):

  • Suite is registered; xmllint --noout journeys/pubky-marketplace/wallet-leg.xml passes.
  • Greptile Electrum note is addressed: E2E_BUILD + E2E_BACKEND=local resolves Electrum to tcp://127.0.0.1:60001 in Env.electrumServerUrl. No in-app override required.
  • IDs that already exist on this tree: PubkyAuthWatchOnlyConsent / Approve / Authorize / OK, ContactPaymentsToggle, PaymentRequestsScreen, PaymentRequestRow-<id>, ReviewAmount, ReviewContactRecipient, GRAB, SendSuccess, ActivityAmount, ActivityTxDetails, StatusConfirmed.

Note, not a blocker if merge order is explicit:

  • PaymentRequestPay-<id> is not on this branch. It is added in #721 (PaymentRequestsView.swift). The README already lists #714 / sibling app work as a dependency. Do not treat this PR’s tree as an executable journey until that Pay selector is on master (or merge #721 first).

I am not blocking on not replaying the two-simulator Locks fixture. The contract and the 2026-09-02 acceptance record are consistent with the Android counterpart.

@ovitrifovitrif changed the title test: add marketplace wallet-leg journeytest: add marketplace wallet journeySep 3, 2026
Sign up for freeto 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.

test: add the Pubky marketplace wallet-leg journey

2 participants

@ovitrif@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

test: add marketplace wallet journey - #720

Open
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey
Open

test: add marketplace wallet journey#720
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey

Conversation

@ovitrif

@ovitrifovitrif commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Closes#718

Description

Adds the two-wallet Pubky marketplace wallet-leg journey for watch-only seller setup, linked-buyer Payment Request receipt, on-chain approval, broadcast, and regtest confirmation.

The journey now defines the integration-fixture protocol and runtime contract, with producer provenance from pubky/paykit-server#2 at revision 867fc883.

The final exact-head iOS buyer replay selected request 5f07c465-dc67-42ce-96a0-4209e5389618 through its request-specific Pay action. One authorized swipe broadcast 2822f6b43aebeb228e0bfe96c1b201cf41e0ed46a677d704403dc629b09d6f2a with a 15,000-sat request output and 143-sat fee. One authorized block, 6235eff06b00ed2b736635913e76269cd6524c4fed80f247d244102806816aed, confirmed it at height 16403; signed Paykit reached confirmed/1/true, the Locks bundle completed without failure, and the mempool emptied.

Linked Issues/Tasks

Preview

52-ios-marketplace-wallet-leg.mp4

The sanitized replay shows the request-specific Pay action, 15,000-sat seller review, one swipe to SendSuccess, paid request history, confirmed activity, and exact transaction details.

QA Notes

Manual Tests

  • The controlled seller setup retained watch-only account index 1 without Bitcoin spending authority.
  • A fresh exact-head buyer enabled contact payments, saved the seller, linked at bitkit/wallet, and received the canonical 15,000-sat request.
  • PaymentRequestPay-5f07c465-dc67-42ce-96a0-4209e5389618 opened a 15,000-sat review for hbn4...pfiy with a 143-sat fee and enabled GRAB.
  • One swipe reached SendSuccess; the zero-confirmation checkpoint showed the exact amount-matched output, signed Paykit detected/0/true, Locks pending, and one mempool transaction.
  • One block produced signed Paykit confirmed/1/true, completed Locks state, an empty mempool, and Bitkit sync at matching height 16403 and tip.
  • Confirmed iOS activity showed StatusConfirmed, the 15,000-sat payment, 143-sat fee, seller, and exact transaction; the accepted request remained without Pay or Dismiss actions.

Automated Checks

  • Every journey XML file parses with xmllint.
  • git diff --check passes.
  • The integration merge's production tree is identical to merged Pay-selector head 70cd26346c6a539f792564e2e9bddb41cc00eecc.
  • The sanitized H.264 replay was sampled across every segment and cut boundary; SHA-256 ec6f0819c9e4e4066e8969f092328615bb286925599b6f92c733eba4b999c122.

@ovitrif
ovitrif marked this pull request as ready for review September 2, 2026 11:21
@greptile-apps

Copy link
Copy Markdown

Greptile Summary

This PR adds an agent-evaluated, two-wallet Pubky marketplace journey and documents its external fixture, evidence contract, and accepted regtest replay.

  • Registers the new marketplace journey in the journey index.
  • Defines seller watch-only setup, buyer request payment, broadcast, and confirmation steps.
  • Records fixture requirements, accessibility identifiers, and exact-head acceptance evidence.

Confidence Score: 4/5

The PR appears safe to merge after clarifying how operators can configure Electrum on clean simulators before initial wallet startup.

The journey and selector conventions are otherwise consistent with the agent-evaluated corpus, but the custom Electrum precondition cannot be followed through the documented in-app configuration path as currently written.

Files Needing Attention: journeys/pubky-marketplace/wallet-leg.xml and journeys/pubky-marketplace/README.md

Important Files Changed

FilenameOverview
journeys/README.mdRegisters the new one-journey marketplace suite and its external-fixture requirement.
journeys/pubky-marketplace/README.mdDocuments the fixture contract and accepted replay, but repeats an incomplete pre-first-launch Electrum setup instruction.
journeys/pubky-marketplace/wallet-leg.xmlDefines the complete two-wallet payment walkthrough, with an initial Electrum configuration precondition that lacks an executable setup route.

Sequence Diagram

sequenceDiagram
participant S as Seller wallet
participant F as Integration fixture
participant B as Buyer wallet
participant R as Regtest chain
S->>F: Authorize watch-only account claim
B->>F: Link seller and enable contact payments
F-->>B: Deliver Payment Request
B->>B: Review and approve payment
B->>R: Broadcast transaction
F->>R: Mine one authorized block
R-->>B: Confirm transaction
F-->>B: Report completed marketplace purchase
Loading

Reviews (1): Last reviewed commit: "test: record exact marketplace journey r..." | Re-trigger Greptile

Comment on lines +5 to +7
Precondition: two clean simulator wallets and the integration fixture described in this suite's
README. Configure the fixture Electrum endpoint and Paykit UI before either wallet's first
launch. Start with the seller wallet open and the fixture's fresh setup auth URL available.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2Electrum precondition lacks setup route

The journey requires configuring the fixture endpoint before either wallet's first launch, but the supported configuration flow runs inside the launched app and persists the endpoint only after restarting and validating the node. Document a concrete pre-launch configuration procedure; otherwise operators cannot reliably establish the clean-wallet starting state and can begin the journey on the default regtest chain.

Knowledge Base Used:Restore Electrum connection rollback

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Addressed in 48a85d1: the journey now requires the fixture Fulcrum endpoint at tcp://127.0.0.1:60001 before either first launch and provides the exact xcodebuildmcp local-E2E build command for both simulators. This uses Bitkit’s local-E2E default, so no stored in-app Electrum override is required.

@piotr-iohkpiotr-iohk 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.

QA LGTM on the journey docs. Did not re-run the isolated marketplace fixture.

Checked latest (48a85d1f):

  • Suite is registered; xmllint --noout journeys/pubky-marketplace/wallet-leg.xml passes.
  • Greptile Electrum note is addressed: E2E_BUILD + E2E_BACKEND=local resolves Electrum to tcp://127.0.0.1:60001 in Env.electrumServerUrl. No in-app override required.
  • IDs that already exist on this tree: PubkyAuthWatchOnlyConsent / Approve / Authorize / OK, ContactPaymentsToggle, PaymentRequestsScreen, PaymentRequestRow-<id>, ReviewAmount, ReviewContactRecipient, GRAB, SendSuccess, ActivityAmount, ActivityTxDetails, StatusConfirmed.

Note, not a blocker if merge order is explicit:

  • PaymentRequestPay-<id> is not on this branch. It is added in #721 (PaymentRequestsView.swift). The README already lists #714 / sibling app work as a dependency. Do not treat this PR’s tree as an executable journey until that Pay selector is on master (or merge #721 first).

I am not blocking on not replaying the two-simulator Locks fixture. The contract and the 2026-09-02 acceptance record are consistent with the Android counterpart.

@ovitrifovitrif changed the title test: add marketplace wallet-leg journeytest: add marketplace wallet journeySep 3, 2026
Sign up for freeto 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.

test: add the Pubky marketplace wallet-leg journey

2 participants

@ovitrif@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

test: add marketplace wallet journey - #720

Open
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey
Open

test: add marketplace wallet journey#720
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey

Conversation

@ovitrif

@ovitrifovitrif commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Closes#718

Description

Adds the two-wallet Pubky marketplace wallet-leg journey for watch-only seller setup, linked-buyer Payment Request receipt, on-chain approval, broadcast, and regtest confirmation.

The journey now defines the integration-fixture protocol and runtime contract, with producer provenance from pubky/paykit-server#2 at revision 867fc883.

The final exact-head iOS buyer replay selected request 5f07c465-dc67-42ce-96a0-4209e5389618 through its request-specific Pay action. One authorized swipe broadcast 2822f6b43aebeb228e0bfe96c1b201cf41e0ed46a677d704403dc629b09d6f2a with a 15,000-sat request output and 143-sat fee. One authorized block, 6235eff06b00ed2b736635913e76269cd6524c4fed80f247d244102806816aed, confirmed it at height 16403; signed Paykit reached confirmed/1/true, the Locks bundle completed without failure, and the mempool emptied.

Linked Issues/Tasks

Preview

52-ios-marketplace-wallet-leg.mp4

The sanitized replay shows the request-specific Pay action, 15,000-sat seller review, one swipe to SendSuccess, paid request history, confirmed activity, and exact transaction details.

QA Notes

Manual Tests

  • The controlled seller setup retained watch-only account index 1 without Bitcoin spending authority.
  • A fresh exact-head buyer enabled contact payments, saved the seller, linked at bitkit/wallet, and received the canonical 15,000-sat request.
  • PaymentRequestPay-5f07c465-dc67-42ce-96a0-4209e5389618 opened a 15,000-sat review for hbn4...pfiy with a 143-sat fee and enabled GRAB.
  • One swipe reached SendSuccess; the zero-confirmation checkpoint showed the exact amount-matched output, signed Paykit detected/0/true, Locks pending, and one mempool transaction.
  • One block produced signed Paykit confirmed/1/true, completed Locks state, an empty mempool, and Bitkit sync at matching height 16403 and tip.
  • Confirmed iOS activity showed StatusConfirmed, the 15,000-sat payment, 143-sat fee, seller, and exact transaction; the accepted request remained without Pay or Dismiss actions.

Automated Checks

  • Every journey XML file parses with xmllint.
  • git diff --check passes.
  • The integration merge's production tree is identical to merged Pay-selector head 70cd26346c6a539f792564e2e9bddb41cc00eecc.
  • The sanitized H.264 replay was sampled across every segment and cut boundary; SHA-256 ec6f0819c9e4e4066e8969f092328615bb286925599b6f92c733eba4b999c122.

@ovitrif
ovitrif marked this pull request as ready for review September 2, 2026 11:21
@greptile-apps

Copy link
Copy Markdown

Greptile Summary

This PR adds an agent-evaluated, two-wallet Pubky marketplace journey and documents its external fixture, evidence contract, and accepted regtest replay.

  • Registers the new marketplace journey in the journey index.
  • Defines seller watch-only setup, buyer request payment, broadcast, and confirmation steps.
  • Records fixture requirements, accessibility identifiers, and exact-head acceptance evidence.

Confidence Score: 4/5

The PR appears safe to merge after clarifying how operators can configure Electrum on clean simulators before initial wallet startup.

The journey and selector conventions are otherwise consistent with the agent-evaluated corpus, but the custom Electrum precondition cannot be followed through the documented in-app configuration path as currently written.

Files Needing Attention: journeys/pubky-marketplace/wallet-leg.xml and journeys/pubky-marketplace/README.md

Important Files Changed

FilenameOverview
journeys/README.mdRegisters the new one-journey marketplace suite and its external-fixture requirement.
journeys/pubky-marketplace/README.mdDocuments the fixture contract and accepted replay, but repeats an incomplete pre-first-launch Electrum setup instruction.
journeys/pubky-marketplace/wallet-leg.xmlDefines the complete two-wallet payment walkthrough, with an initial Electrum configuration precondition that lacks an executable setup route.

Sequence Diagram

sequenceDiagram
participant S as Seller wallet
participant F as Integration fixture
participant B as Buyer wallet
participant R as Regtest chain
S->>F: Authorize watch-only account claim
B->>F: Link seller and enable contact payments
F-->>B: Deliver Payment Request
B->>B: Review and approve payment
B->>R: Broadcast transaction
F->>R: Mine one authorized block
R-->>B: Confirm transaction
F-->>B: Report completed marketplace purchase
Loading

Reviews (1): Last reviewed commit: "test: record exact marketplace journey r..." | Re-trigger Greptile

Comment on lines +5 to +7
Precondition: two clean simulator wallets and the integration fixture described in this suite's
README. Configure the fixture Electrum endpoint and Paykit UI before either wallet's first
launch. Start with the seller wallet open and the fixture's fresh setup auth URL available.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2Electrum precondition lacks setup route

The journey requires configuring the fixture endpoint before either wallet's first launch, but the supported configuration flow runs inside the launched app and persists the endpoint only after restarting and validating the node. Document a concrete pre-launch configuration procedure; otherwise operators cannot reliably establish the clean-wallet starting state and can begin the journey on the default regtest chain.

Knowledge Base Used:Restore Electrum connection rollback

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Addressed in 48a85d1: the journey now requires the fixture Fulcrum endpoint at tcp://127.0.0.1:60001 before either first launch and provides the exact xcodebuildmcp local-E2E build command for both simulators. This uses Bitkit’s local-E2E default, so no stored in-app Electrum override is required.

@piotr-iohkpiotr-iohk 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.

QA LGTM on the journey docs. Did not re-run the isolated marketplace fixture.

Checked latest (48a85d1f):

  • Suite is registered; xmllint --noout journeys/pubky-marketplace/wallet-leg.xml passes.
  • Greptile Electrum note is addressed: E2E_BUILD + E2E_BACKEND=local resolves Electrum to tcp://127.0.0.1:60001 in Env.electrumServerUrl. No in-app override required.
  • IDs that already exist on this tree: PubkyAuthWatchOnlyConsent / Approve / Authorize / OK, ContactPaymentsToggle, PaymentRequestsScreen, PaymentRequestRow-<id>, ReviewAmount, ReviewContactRecipient, GRAB, SendSuccess, ActivityAmount, ActivityTxDetails, StatusConfirmed.

Note, not a blocker if merge order is explicit:

  • PaymentRequestPay-<id> is not on this branch. It is added in #721 (PaymentRequestsView.swift). The README already lists #714 / sibling app work as a dependency. Do not treat this PR’s tree as an executable journey until that Pay selector is on master (or merge #721 first).

I am not blocking on not replaying the two-simulator Locks fixture. The contract and the 2026-09-02 acceptance record are consistent with the Android counterpart.

@ovitrifovitrif changed the title test: add marketplace wallet-leg journeytest: add marketplace wallet journeySep 3, 2026
Sign up for freeto 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.

test: add the Pubky marketplace wallet-leg journey

2 participants

@ovitrif@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

test: add marketplace wallet journey - #720

Open
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey
Open

test: add marketplace wallet journey#720
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey

Conversation

@ovitrif

@ovitrifovitrif commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Closes#718

Description

Adds the two-wallet Pubky marketplace wallet-leg journey for watch-only seller setup, linked-buyer Payment Request receipt, on-chain approval, broadcast, and regtest confirmation.

The journey now defines the integration-fixture protocol and runtime contract, with producer provenance from pubky/paykit-server#2 at revision 867fc883.

The final exact-head iOS buyer replay selected request 5f07c465-dc67-42ce-96a0-4209e5389618 through its request-specific Pay action. One authorized swipe broadcast 2822f6b43aebeb228e0bfe96c1b201cf41e0ed46a677d704403dc629b09d6f2a with a 15,000-sat request output and 143-sat fee. One authorized block, 6235eff06b00ed2b736635913e76269cd6524c4fed80f247d244102806816aed, confirmed it at height 16403; signed Paykit reached confirmed/1/true, the Locks bundle completed without failure, and the mempool emptied.

Linked Issues/Tasks

Preview

52-ios-marketplace-wallet-leg.mp4

The sanitized replay shows the request-specific Pay action, 15,000-sat seller review, one swipe to SendSuccess, paid request history, confirmed activity, and exact transaction details.

QA Notes

Manual Tests

  • The controlled seller setup retained watch-only account index 1 without Bitcoin spending authority.
  • A fresh exact-head buyer enabled contact payments, saved the seller, linked at bitkit/wallet, and received the canonical 15,000-sat request.
  • PaymentRequestPay-5f07c465-dc67-42ce-96a0-4209e5389618 opened a 15,000-sat review for hbn4...pfiy with a 143-sat fee and enabled GRAB.
  • One swipe reached SendSuccess; the zero-confirmation checkpoint showed the exact amount-matched output, signed Paykit detected/0/true, Locks pending, and one mempool transaction.
  • One block produced signed Paykit confirmed/1/true, completed Locks state, an empty mempool, and Bitkit sync at matching height 16403 and tip.
  • Confirmed iOS activity showed StatusConfirmed, the 15,000-sat payment, 143-sat fee, seller, and exact transaction; the accepted request remained without Pay or Dismiss actions.

Automated Checks

  • Every journey XML file parses with xmllint.
  • git diff --check passes.
  • The integration merge's production tree is identical to merged Pay-selector head 70cd26346c6a539f792564e2e9bddb41cc00eecc.
  • The sanitized H.264 replay was sampled across every segment and cut boundary; SHA-256 ec6f0819c9e4e4066e8969f092328615bb286925599b6f92c733eba4b999c122.

@ovitrif
ovitrif marked this pull request as ready for review September 2, 2026 11:21
@greptile-apps

Copy link
Copy Markdown

Greptile Summary

This PR adds an agent-evaluated, two-wallet Pubky marketplace journey and documents its external fixture, evidence contract, and accepted regtest replay.

  • Registers the new marketplace journey in the journey index.
  • Defines seller watch-only setup, buyer request payment, broadcast, and confirmation steps.
  • Records fixture requirements, accessibility identifiers, and exact-head acceptance evidence.

Confidence Score: 4/5

The PR appears safe to merge after clarifying how operators can configure Electrum on clean simulators before initial wallet startup.

The journey and selector conventions are otherwise consistent with the agent-evaluated corpus, but the custom Electrum precondition cannot be followed through the documented in-app configuration path as currently written.

Files Needing Attention: journeys/pubky-marketplace/wallet-leg.xml and journeys/pubky-marketplace/README.md

Important Files Changed

FilenameOverview
journeys/README.mdRegisters the new one-journey marketplace suite and its external-fixture requirement.
journeys/pubky-marketplace/README.mdDocuments the fixture contract and accepted replay, but repeats an incomplete pre-first-launch Electrum setup instruction.
journeys/pubky-marketplace/wallet-leg.xmlDefines the complete two-wallet payment walkthrough, with an initial Electrum configuration precondition that lacks an executable setup route.

Sequence Diagram

sequenceDiagram
participant S as Seller wallet
participant F as Integration fixture
participant B as Buyer wallet
participant R as Regtest chain
S->>F: Authorize watch-only account claim
B->>F: Link seller and enable contact payments
F-->>B: Deliver Payment Request
B->>B: Review and approve payment
B->>R: Broadcast transaction
F->>R: Mine one authorized block
R-->>B: Confirm transaction
F-->>B: Report completed marketplace purchase
Loading

Reviews (1): Last reviewed commit: "test: record exact marketplace journey r..." | Re-trigger Greptile

Comment on lines +5 to +7
Precondition: two clean simulator wallets and the integration fixture described in this suite's
README. Configure the fixture Electrum endpoint and Paykit UI before either wallet's first
launch. Start with the seller wallet open and the fixture's fresh setup auth URL available.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2Electrum precondition lacks setup route

The journey requires configuring the fixture endpoint before either wallet's first launch, but the supported configuration flow runs inside the launched app and persists the endpoint only after restarting and validating the node. Document a concrete pre-launch configuration procedure; otherwise operators cannot reliably establish the clean-wallet starting state and can begin the journey on the default regtest chain.

Knowledge Base Used:Restore Electrum connection rollback

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Addressed in 48a85d1: the journey now requires the fixture Fulcrum endpoint at tcp://127.0.0.1:60001 before either first launch and provides the exact xcodebuildmcp local-E2E build command for both simulators. This uses Bitkit’s local-E2E default, so no stored in-app Electrum override is required.

@piotr-iohkpiotr-iohk 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.

QA LGTM on the journey docs. Did not re-run the isolated marketplace fixture.

Checked latest (48a85d1f):

  • Suite is registered; xmllint --noout journeys/pubky-marketplace/wallet-leg.xml passes.
  • Greptile Electrum note is addressed: E2E_BUILD + E2E_BACKEND=local resolves Electrum to tcp://127.0.0.1:60001 in Env.electrumServerUrl. No in-app override required.
  • IDs that already exist on this tree: PubkyAuthWatchOnlyConsent / Approve / Authorize / OK, ContactPaymentsToggle, PaymentRequestsScreen, PaymentRequestRow-<id>, ReviewAmount, ReviewContactRecipient, GRAB, SendSuccess, ActivityAmount, ActivityTxDetails, StatusConfirmed.

Note, not a blocker if merge order is explicit:

  • PaymentRequestPay-<id> is not on this branch. It is added in #721 (PaymentRequestsView.swift). The README already lists #714 / sibling app work as a dependency. Do not treat this PR’s tree as an executable journey until that Pay selector is on master (or merge #721 first).

I am not blocking on not replaying the two-simulator Locks fixture. The contract and the 2026-09-02 acceptance record are consistent with the Android counterpart.

@ovitrifovitrif changed the title test: add marketplace wallet-leg journeytest: add marketplace wallet journeySep 3, 2026
Sign up for freeto 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.

test: add the Pubky marketplace wallet-leg journey

2 participants

@ovitrif@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

test: add marketplace wallet journey - #720

Open
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey
Open

test: add marketplace wallet journey#720
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey

Conversation

@ovitrif

@ovitrifovitrif commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Closes#718

Description

Adds the two-wallet Pubky marketplace wallet-leg journey for watch-only seller setup, linked-buyer Payment Request receipt, on-chain approval, broadcast, and regtest confirmation.

The journey now defines the integration-fixture protocol and runtime contract, with producer provenance from pubky/paykit-server#2 at revision 867fc883.

The final exact-head iOS buyer replay selected request 5f07c465-dc67-42ce-96a0-4209e5389618 through its request-specific Pay action. One authorized swipe broadcast 2822f6b43aebeb228e0bfe96c1b201cf41e0ed46a677d704403dc629b09d6f2a with a 15,000-sat request output and 143-sat fee. One authorized block, 6235eff06b00ed2b736635913e76269cd6524c4fed80f247d244102806816aed, confirmed it at height 16403; signed Paykit reached confirmed/1/true, the Locks bundle completed without failure, and the mempool emptied.

Linked Issues/Tasks

Preview

52-ios-marketplace-wallet-leg.mp4

The sanitized replay shows the request-specific Pay action, 15,000-sat seller review, one swipe to SendSuccess, paid request history, confirmed activity, and exact transaction details.

QA Notes

Manual Tests

  • The controlled seller setup retained watch-only account index 1 without Bitcoin spending authority.
  • A fresh exact-head buyer enabled contact payments, saved the seller, linked at bitkit/wallet, and received the canonical 15,000-sat request.
  • PaymentRequestPay-5f07c465-dc67-42ce-96a0-4209e5389618 opened a 15,000-sat review for hbn4...pfiy with a 143-sat fee and enabled GRAB.
  • One swipe reached SendSuccess; the zero-confirmation checkpoint showed the exact amount-matched output, signed Paykit detected/0/true, Locks pending, and one mempool transaction.
  • One block produced signed Paykit confirmed/1/true, completed Locks state, an empty mempool, and Bitkit sync at matching height 16403 and tip.
  • Confirmed iOS activity showed StatusConfirmed, the 15,000-sat payment, 143-sat fee, seller, and exact transaction; the accepted request remained without Pay or Dismiss actions.

Automated Checks

  • Every journey XML file parses with xmllint.
  • git diff --check passes.
  • The integration merge's production tree is identical to merged Pay-selector head 70cd26346c6a539f792564e2e9bddb41cc00eecc.
  • The sanitized H.264 replay was sampled across every segment and cut boundary; SHA-256 ec6f0819c9e4e4066e8969f092328615bb286925599b6f92c733eba4b999c122.

@ovitrif
ovitrif marked this pull request as ready for review September 2, 2026 11:21
@greptile-apps

Copy link
Copy Markdown

Greptile Summary

This PR adds an agent-evaluated, two-wallet Pubky marketplace journey and documents its external fixture, evidence contract, and accepted regtest replay.

  • Registers the new marketplace journey in the journey index.
  • Defines seller watch-only setup, buyer request payment, broadcast, and confirmation steps.
  • Records fixture requirements, accessibility identifiers, and exact-head acceptance evidence.

Confidence Score: 4/5

The PR appears safe to merge after clarifying how operators can configure Electrum on clean simulators before initial wallet startup.

The journey and selector conventions are otherwise consistent with the agent-evaluated corpus, but the custom Electrum precondition cannot be followed through the documented in-app configuration path as currently written.

Files Needing Attention: journeys/pubky-marketplace/wallet-leg.xml and journeys/pubky-marketplace/README.md

Important Files Changed

FilenameOverview
journeys/README.mdRegisters the new one-journey marketplace suite and its external-fixture requirement.
journeys/pubky-marketplace/README.mdDocuments the fixture contract and accepted replay, but repeats an incomplete pre-first-launch Electrum setup instruction.
journeys/pubky-marketplace/wallet-leg.xmlDefines the complete two-wallet payment walkthrough, with an initial Electrum configuration precondition that lacks an executable setup route.

Sequence Diagram

sequenceDiagram
participant S as Seller wallet
participant F as Integration fixture
participant B as Buyer wallet
participant R as Regtest chain
S->>F: Authorize watch-only account claim
B->>F: Link seller and enable contact payments
F-->>B: Deliver Payment Request
B->>B: Review and approve payment
B->>R: Broadcast transaction
F->>R: Mine one authorized block
R-->>B: Confirm transaction
F-->>B: Report completed marketplace purchase
Loading

Reviews (1): Last reviewed commit: "test: record exact marketplace journey r..." | Re-trigger Greptile

Comment on lines +5 to +7
Precondition: two clean simulator wallets and the integration fixture described in this suite's
README. Configure the fixture Electrum endpoint and Paykit UI before either wallet's first
launch. Start with the seller wallet open and the fixture's fresh setup auth URL available.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2Electrum precondition lacks setup route

The journey requires configuring the fixture endpoint before either wallet's first launch, but the supported configuration flow runs inside the launched app and persists the endpoint only after restarting and validating the node. Document a concrete pre-launch configuration procedure; otherwise operators cannot reliably establish the clean-wallet starting state and can begin the journey on the default regtest chain.

Knowledge Base Used:Restore Electrum connection rollback

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Addressed in 48a85d1: the journey now requires the fixture Fulcrum endpoint at tcp://127.0.0.1:60001 before either first launch and provides the exact xcodebuildmcp local-E2E build command for both simulators. This uses Bitkit’s local-E2E default, so no stored in-app Electrum override is required.

@piotr-iohkpiotr-iohk 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.

QA LGTM on the journey docs. Did not re-run the isolated marketplace fixture.

Checked latest (48a85d1f):

  • Suite is registered; xmllint --noout journeys/pubky-marketplace/wallet-leg.xml passes.
  • Greptile Electrum note is addressed: E2E_BUILD + E2E_BACKEND=local resolves Electrum to tcp://127.0.0.1:60001 in Env.electrumServerUrl. No in-app override required.
  • IDs that already exist on this tree: PubkyAuthWatchOnlyConsent / Approve / Authorize / OK, ContactPaymentsToggle, PaymentRequestsScreen, PaymentRequestRow-<id>, ReviewAmount, ReviewContactRecipient, GRAB, SendSuccess, ActivityAmount, ActivityTxDetails, StatusConfirmed.

Note, not a blocker if merge order is explicit:

  • PaymentRequestPay-<id> is not on this branch. It is added in #721 (PaymentRequestsView.swift). The README already lists #714 / sibling app work as a dependency. Do not treat this PR’s tree as an executable journey until that Pay selector is on master (or merge #721 first).

I am not blocking on not replaying the two-simulator Locks fixture. The contract and the 2026-09-02 acceptance record are consistent with the Android counterpart.

@ovitrifovitrif changed the title test: add marketplace wallet-leg journeytest: add marketplace wallet journeySep 3, 2026
Sign up for freeto 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.

test: add the Pubky marketplace wallet-leg journey

2 participants

@ovitrif@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

test: add marketplace wallet journey - #720

Open
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey
Open

test: add marketplace wallet journey#720
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey

Conversation

@ovitrif

@ovitrifovitrif commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Closes#718

Description

Adds the two-wallet Pubky marketplace wallet-leg journey for watch-only seller setup, linked-buyer Payment Request receipt, on-chain approval, broadcast, and regtest confirmation.

The journey now defines the integration-fixture protocol and runtime contract, with producer provenance from pubky/paykit-server#2 at revision 867fc883.

The final exact-head iOS buyer replay selected request 5f07c465-dc67-42ce-96a0-4209e5389618 through its request-specific Pay action. One authorized swipe broadcast 2822f6b43aebeb228e0bfe96c1b201cf41e0ed46a677d704403dc629b09d6f2a with a 15,000-sat request output and 143-sat fee. One authorized block, 6235eff06b00ed2b736635913e76269cd6524c4fed80f247d244102806816aed, confirmed it at height 16403; signed Paykit reached confirmed/1/true, the Locks bundle completed without failure, and the mempool emptied.

Linked Issues/Tasks

Preview

52-ios-marketplace-wallet-leg.mp4

The sanitized replay shows the request-specific Pay action, 15,000-sat seller review, one swipe to SendSuccess, paid request history, confirmed activity, and exact transaction details.

QA Notes

Manual Tests

  • The controlled seller setup retained watch-only account index 1 without Bitcoin spending authority.
  • A fresh exact-head buyer enabled contact payments, saved the seller, linked at bitkit/wallet, and received the canonical 15,000-sat request.
  • PaymentRequestPay-5f07c465-dc67-42ce-96a0-4209e5389618 opened a 15,000-sat review for hbn4...pfiy with a 143-sat fee and enabled GRAB.
  • One swipe reached SendSuccess; the zero-confirmation checkpoint showed the exact amount-matched output, signed Paykit detected/0/true, Locks pending, and one mempool transaction.
  • One block produced signed Paykit confirmed/1/true, completed Locks state, an empty mempool, and Bitkit sync at matching height 16403 and tip.
  • Confirmed iOS activity showed StatusConfirmed, the 15,000-sat payment, 143-sat fee, seller, and exact transaction; the accepted request remained without Pay or Dismiss actions.

Automated Checks

  • Every journey XML file parses with xmllint.
  • git diff --check passes.
  • The integration merge's production tree is identical to merged Pay-selector head 70cd26346c6a539f792564e2e9bddb41cc00eecc.
  • The sanitized H.264 replay was sampled across every segment and cut boundary; SHA-256 ec6f0819c9e4e4066e8969f092328615bb286925599b6f92c733eba4b999c122.

@ovitrif
ovitrif marked this pull request as ready for review September 2, 2026 11:21
@greptile-apps

Copy link
Copy Markdown

Greptile Summary

This PR adds an agent-evaluated, two-wallet Pubky marketplace journey and documents its external fixture, evidence contract, and accepted regtest replay.

  • Registers the new marketplace journey in the journey index.
  • Defines seller watch-only setup, buyer request payment, broadcast, and confirmation steps.
  • Records fixture requirements, accessibility identifiers, and exact-head acceptance evidence.

Confidence Score: 4/5

The PR appears safe to merge after clarifying how operators can configure Electrum on clean simulators before initial wallet startup.

The journey and selector conventions are otherwise consistent with the agent-evaluated corpus, but the custom Electrum precondition cannot be followed through the documented in-app configuration path as currently written.

Files Needing Attention: journeys/pubky-marketplace/wallet-leg.xml and journeys/pubky-marketplace/README.md

Important Files Changed

FilenameOverview
journeys/README.mdRegisters the new one-journey marketplace suite and its external-fixture requirement.
journeys/pubky-marketplace/README.mdDocuments the fixture contract and accepted replay, but repeats an incomplete pre-first-launch Electrum setup instruction.
journeys/pubky-marketplace/wallet-leg.xmlDefines the complete two-wallet payment walkthrough, with an initial Electrum configuration precondition that lacks an executable setup route.

Sequence Diagram

sequenceDiagram
participant S as Seller wallet
participant F as Integration fixture
participant B as Buyer wallet
participant R as Regtest chain
S->>F: Authorize watch-only account claim
B->>F: Link seller and enable contact payments
F-->>B: Deliver Payment Request
B->>B: Review and approve payment
B->>R: Broadcast transaction
F->>R: Mine one authorized block
R-->>B: Confirm transaction
F-->>B: Report completed marketplace purchase
Loading

Reviews (1): Last reviewed commit: "test: record exact marketplace journey r..." | Re-trigger Greptile

Comment on lines +5 to +7
Precondition: two clean simulator wallets and the integration fixture described in this suite's
README. Configure the fixture Electrum endpoint and Paykit UI before either wallet's first
launch. Start with the seller wallet open and the fixture's fresh setup auth URL available.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2Electrum precondition lacks setup route

The journey requires configuring the fixture endpoint before either wallet's first launch, but the supported configuration flow runs inside the launched app and persists the endpoint only after restarting and validating the node. Document a concrete pre-launch configuration procedure; otherwise operators cannot reliably establish the clean-wallet starting state and can begin the journey on the default regtest chain.

Knowledge Base Used:Restore Electrum connection rollback

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Addressed in 48a85d1: the journey now requires the fixture Fulcrum endpoint at tcp://127.0.0.1:60001 before either first launch and provides the exact xcodebuildmcp local-E2E build command for both simulators. This uses Bitkit’s local-E2E default, so no stored in-app Electrum override is required.

@piotr-iohkpiotr-iohk 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.

QA LGTM on the journey docs. Did not re-run the isolated marketplace fixture.

Checked latest (48a85d1f):

  • Suite is registered; xmllint --noout journeys/pubky-marketplace/wallet-leg.xml passes.
  • Greptile Electrum note is addressed: E2E_BUILD + E2E_BACKEND=local resolves Electrum to tcp://127.0.0.1:60001 in Env.electrumServerUrl. No in-app override required.
  • IDs that already exist on this tree: PubkyAuthWatchOnlyConsent / Approve / Authorize / OK, ContactPaymentsToggle, PaymentRequestsScreen, PaymentRequestRow-<id>, ReviewAmount, ReviewContactRecipient, GRAB, SendSuccess, ActivityAmount, ActivityTxDetails, StatusConfirmed.

Note, not a blocker if merge order is explicit:

  • PaymentRequestPay-<id> is not on this branch. It is added in #721 (PaymentRequestsView.swift). The README already lists #714 / sibling app work as a dependency. Do not treat this PR’s tree as an executable journey until that Pay selector is on master (or merge #721 first).

I am not blocking on not replaying the two-simulator Locks fixture. The contract and the 2026-09-02 acceptance record are consistent with the Android counterpart.

@ovitrifovitrif changed the title test: add marketplace wallet-leg journeytest: add marketplace wallet journeySep 3, 2026
Sign up for freeto 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.

test: add the Pubky marketplace wallet-leg journey

2 participants

@ovitrif@piotr-iohk
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

test: add marketplace wallet journey - #720

Open
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey
Open

test: add marketplace wallet journey#720
ovitrif wants to merge 9 commits into
masterfrom
codex/718-marketplace-journey

Conversation

@ovitrif

@ovitrifovitrif commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Closes#718

Description

Adds the two-wallet Pubky marketplace wallet-leg journey for watch-only seller setup, linked-buyer Payment Request receipt, on-chain approval, broadcast, and regtest confirmation.

The journey now defines the integration-fixture protocol and runtime contract, with producer provenance from pubky/paykit-server#2 at revision 867fc883.

The final exact-head iOS buyer replay selected request 5f07c465-dc67-42ce-96a0-4209e5389618 through its request-specific Pay action. One authorized swipe broadcast 2822f6b43aebeb228e0bfe96c1b201cf41e0ed46a677d704403dc629b09d6f2a with a 15,000-sat request output and 143-sat fee. One authorized block, 6235eff06b00ed2b736635913e76269cd6524c4fed80f247d244102806816aed, confirmed it at height 16403; signed Paykit reached confirmed/1/true, the Locks bundle completed without failure, and the mempool emptied.

Linked Issues/Tasks

Preview

52-ios-marketplace-wallet-leg.mp4

The sanitized replay shows the request-specific Pay action, 15,000-sat seller review, one swipe to SendSuccess, paid request history, confirmed activity, and exact transaction details.

QA Notes

Manual Tests

  • The controlled seller setup retained watch-only account index 1 without Bitcoin spending authority.
  • A fresh exact-head buyer enabled contact payments, saved the seller, linked at bitkit/wallet, and received the canonical 15,000-sat request.
  • PaymentRequestPay-5f07c465-dc67-42ce-96a0-4209e5389618 opened a 15,000-sat review for hbn4...pfiy with a 143-sat fee and enabled GRAB.
  • One swipe reached SendSuccess; the zero-confirmation checkpoint showed the exact amount-matched output, signed Paykit detected/0/true, Locks pending, and one mempool transaction.
  • One block produced signed Paykit confirmed/1/true, completed Locks state, an empty mempool, and Bitkit sync at matching height 16403 and tip.
  • Confirmed iOS activity showed StatusConfirmed, the 15,000-sat payment, 143-sat fee, seller, and exact transaction; the accepted request remained without Pay or Dismiss actions.

Automated Checks

  • Every journey XML file parses with xmllint.
  • git diff --check passes.
  • The integration merge's production tree is identical to merged Pay-selector head 70cd26346c6a539f792564e2e9bddb41cc00eecc.
  • The sanitized H.264 replay was sampled across every segment and cut boundary; SHA-256 ec6f0819c9e4e4066e8969f092328615bb286925599b6f92c733eba4b999c122.

@ovitrif
ovitrif marked this pull request as ready for review September 2, 2026 11:21
@greptile-apps

Copy link
Copy Markdown

Greptile Summary

This PR adds an agent-evaluated, two-wallet Pubky marketplace journey and documents its external fixture, evidence contract, and accepted regtest replay.

  • Registers the new marketplace journey in the journey index.
  • Defines seller watch-only setup, buyer request payment, broadcast, and confirmation steps.
  • Records fixture requirements, accessibility identifiers, and exact-head acceptance evidence.

Confidence Score: 4/5

The PR appears safe to merge after clarifying how operators can configure Electrum on clean simulators before initial wallet startup.

The journey and selector conventions are otherwise consistent with the agent-evaluated corpus, but the custom Electrum precondition cannot be followed through the documented in-app configuration path as currently written.

Files Needing Attention: journeys/pubky-marketplace/wallet-leg.xml and journeys/pubky-marketplace/README.md

Important Files Changed

FilenameOverview
journeys/README.mdRegisters the new one-journey marketplace suite and its external-fixture requirement.
journeys/pubky-marketplace/README.mdDocuments the fixture contract and accepted replay, but repeats an incomplete pre-first-launch Electrum setup instruction.
journeys/pubky-marketplace/wallet-leg.xmlDefines the complete two-wallet payment walkthrough, with an initial Electrum configuration precondition that lacks an executable setup route.

Sequence Diagram

sequenceDiagram
participant S as Seller wallet
participant F as Integration fixture
participant B as Buyer wallet
participant R as Regtest chain
S->>F: Authorize watch-only account claim
B->>F: Link seller and enable contact payments
F-->>B: Deliver Payment Request
B->>B: Review and approve payment
B->>R: Broadcast transaction
F->>R: Mine one authorized block
R-->>B: Confirm transaction
F-->>B: Report completed marketplace purchase
Loading

Reviews (1): Last reviewed commit: "test: record exact marketplace journey r..." | Re-trigger Greptile

Comment on lines +5 to +7
Precondition: two clean simulator wallets and the integration fixture described in this suite's
README. Configure the fixture Electrum endpoint and Paykit UI before either wallet's first
launch. Start with the seller wallet open and the fixture's fresh setup auth URL available.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2Electrum precondition lacks setup route

The journey requires configuring the fixture endpoint before either wallet's first launch, but the supported configuration flow runs inside the launched app and persists the endpoint only after restarting and validating the node. Document a concrete pre-launch configuration procedure; otherwise operators cannot reliably establish the clean-wallet starting state and can begin the journey on the default regtest chain.

Knowledge Base Used:Restore Electrum connection rollback

@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Addressed in 48a85d1: the journey now requires the fixture Fulcrum endpoint at tcp://127.0.0.1:60001 before either first launch and provides the exact xcodebuildmcp local-E2E build command for both simulators. This uses Bitkit’s local-E2E default, so no stored in-app Electrum override is required.

@piotr-iohkpiotr-iohk 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.

QA LGTM on the journey docs. Did not re-run the isolated marketplace fixture.

Checked latest (48a85d1f):

  • Suite is registered; xmllint --noout journeys/pubky-marketplace/wallet-leg.xml passes.
  • Greptile Electrum note is addressed: E2E_BUILD + E2E_BACKEND=local resolves Electrum to tcp://127.0.0.1:60001 in Env.electrumServerUrl. No in-app override required.
  • IDs that already exist on this tree: PubkyAuthWatchOnlyConsent / Approve / Authorize / OK, ContactPaymentsToggle, PaymentRequestsScreen, PaymentRequestRow-<id>, ReviewAmount, ReviewContactRecipient, GRAB, SendSuccess, ActivityAmount, ActivityTxDetails, StatusConfirmed.

Note, not a blocker if merge order is explicit:

  • PaymentRequestPay-<id> is not on this branch. It is added in #721 (PaymentRequestsView.swift). The README already lists #714 / sibling app work as a dependency. Do not treat this PR’s tree as an executable journey until that Pay selector is on master (or merge #721 first).

I am not blocking on not replaying the two-simulator Locks fixture. The contract and the 2026-09-02 acceptance record are consistent with the Android counterpart.

@ovitrifovitrif changed the title test: add marketplace wallet-leg journeytest: add marketplace wallet journeySep 3, 2026
Sign up for freeto 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.

test: add the Pubky marketplace wallet-leg journey

2 participants

@ovitrif@piotr-iohk