Prototype: Houdini private-send reorg (Proposal A)#6054
Conversation
c4a2ca2 to
bf8eef7
Compare
Adds a review-only, fully navigable prototype of the redesigned Houdini private send flow, reachable from a wallet's Send button. The scene reorganizes the send-to-address experience with two linked amounts (You send / Recipient gets) computed from a hard-coded rate, a recipient-asset picker over a hard-coded chain list, a Private send toggle, an inline quote row, a network fee row, and a conditional destination-tag row. Cross-asset or private sends complete on SwapSuccessScene; same-asset sends show the transaction success modal. Nothing talks to Houdini; all values are hard-coded. The card grouping uses Proposal A (From -> To grouping).
Walks the prototype from the wallet Send button through the reorganized scene, recipient-asset picker, cross-asset XMR destination tag, Private send toggle, and both success paths (Transaction Success modal and SwapSuccessScene), capturing review screenshots along the way.
bf8eef7 to
ecd9a88
Compare
Address Proposal A review feedback: the Houdini provider tile no longer renders on a plain same-asset, non-private send. It appears only when the send is private or converts between assets, with the title 'Houdini Private Exchange' (private) or 'Houdini Exchange' (cross-asset). A plain BTC send now shows the standard add-recipient-address UI and hides the estimated recipient amount.
Apply review feedback on the redesigned send flow: - Drop the conversion-rate tile. Show a conversion percent on the estimated side instead (swap-scene style), saving a tile. - Rename 'Private send' to 'Incognito send' throughout. The incognito toggle tile now expands with explanatory messaging while enabled. - A plain same-asset, non-incognito send is treated as an ordinary on-chain send: standard add-recipient-address UI, no exchange rows. Routing through Houdini (incognito or cross-asset) shows the estimated amount, conversion percent, and a locked recipient address. - Update the maestro walk to cover all branches (plain, incognito, swap) and both success paths.
Bugbot: on the cross-asset / incognito completion path the slider reset was called synchronously before navigating, which left the control active and let a second slide fire another navigation. Drop the early reset so SafeSlider locks after completion, and add a submission guard so the handler runs once.
Apply the next round of design-review feedback: - The send scene reveals the amount and network-fee rows only after a recipient address or asset is selected. Add an a1/a2 variant for the initial state: a1 shows the Recipient receives row up front, a2 hides it until a selection. - Add a Houdini swap prototype reachable from a wallet's Trade -> Swap action: an amount-entry scene with the incognito toggle in an expanding card, then a mock quote scene that shows 'Powered by Houdini' with no tappable chevron. - Add maestro walks for both flows.
📸 Design review v4 — send reveal-on-selection + A1/A2 variants (Proposal A)
a1 plain initial a2 plain initial a1 after address a1 incognito asset picker cross asset xmr Captured by the agent's in-app test run (build-and-test). |
Per design review, the swap prototype now modifies the production swap scenes instead of standalone scenes: - Add an incognito toggle in a card to SwapCreateScene during amount entry. - Thread the incognito flag to SwapConfirmationScene, which shows a fixed-provider, non-tappable 'Powered by Houdini' card (no chevron). - PoweredByCard supports an optional onPress: without it the card is static (no chevron, no 'tap to change provider'). - Remove the from-scratch HoudiniSwapScene and HoudiniSwapQuoteScene plus their routes, registrations and now-unused strings; restore the wallet Trade -> Swap action to the production swap flow. - Update the maestro walk to the production swap path.
📸 📸 Design review v5 — Houdini swap built on the existing swap flow (Proposal A)agent proof 1216019116944855 v5 01 swap create incognito card agent proof 1216019116944855 v5 02 incognito card expanded agent proof 1216019116944855 v5 03 quote powered by houdini no chevron Captured by the agent's in-app test run (build-and-test). |
Apply the operator-provided privacy copy to the incognito send and swap info cards, and label the swap-scene toggle 'Incognito Swap' (was reusing the send label). Refresh the maestro assertions to the new strings.
Addresses a Bugbot finding: the prototype send slider was always active
(disabled={false}), so a plain same-asset send with no recipient could
slide to the success modal. Gate it on revealDetails.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit eb9994e. Configure here.
…posal A) Update the incognito prototype copy per operator feedback: rename the Send/Swap cards to 'Silent Send' / 'Silent Swap', replace the info copy, and add an inline, non-operational green 'Learn more' link on both cards.
📸 Test evidence (v7): Silent Send/Swap copy + inline Learn moreagent proof 1216019116944855 v7 01 send empty a1 agent proof 1216019116944855 v7 06 send empty a2 agent proof 1216019116944855 v7 02 send populated agent proof 1216019116944855 v7 03 send incognito copy agent proof 1216019116944855 v7 04 swap start agent proof 1216019116944855 v7 05 swap incognito copy Captured by the agent's in-app test run (build-and-test). |
📸 Test evidence (v8: Silent -> Stealth rename)agent proof 1216019116944855 v8 01 send empty a1 agent proof 1216019116944855 v8 06 send empty a2 agent proof 1216019116944855 v8 02 send populated agent proof 1216019116944855 v8 03 send incognito copy agent proof 1216019116944855 v8 04 swap start agent proof 1216019116944855 v8 05 swap incognito copy Captured by the agent's in-app test run (build-and-test). |

























CHANGELOG
Does this branch warrant an entry to the CHANGELOG?
Dependencies
none
Requirements
If you have made any visual changes to the GUI. Make sure you have:
Description
Prototype of the redesigned Houdini send and swap flows, Proposal A. Review-only and fully navigable; nothing talks to Houdini and every value is hard-coded so a reviewer can walk every branch.
Asana: https://app.asana.com/0/1215088146871429/1216019112895453
Send scene (
HoudiniSendScene, reached from a wallet's Send button)You sendamount andNetwork Feerows appear only after a recipient address or asset is selected.Recipient receivesrow before any selection; A2 hides it until a selection is made (the only difference between them).Recipient receivesasset picker over a hard-coded chain list (BTC, ETH, XMR, SOL).Destination Tagrow.Stealth Sendtoggle; when enabled the toggle tile expands in place with messaging.Swap flow (the production swap scenes, reached from a wallet's Trade -> Swap action)
SwapCreateScenegains anStealth Swaptoggle in a card during amount entry; when enabled the card expands in place with messaging.SwapConfirmationScenerenders a fixed-provider, non-tappablePowered by Houdinicard (no chevron, no "tap to change provider") via an optionalonPresson the sharedPoweredByCard. The quote itself is a real provider quote; only the provider chrome is re-skinned for the prototype.The send scene is parameterized by
layout: 'a' | 'b'andvariant: 'a1' | 'a2'; this branch routeslayout: 'a'.Testing
Driven end to end on the iOS simulator via maestro (
maestro/14-houdini/houdini-send-a.yaml,houdini-swap-a.yaml). The current screenshots are in the latest review comment; older proposal screenshots were removed.Note
Medium Risk
Wallet Send is globally rerouted to a non-production scene; swap confirmation UI changes are gated on a prototype flag but still touch live swap screens.
Overview
Adds a review-only Houdini “Stealth Send” prototype and wires the wallet Send button to
houdiniSendinstead ofsend2. The newHoudiniSendSceneuses hard-coded rates, fees, and addresses (no Houdini API); it supports Proposal A layout, recipient-asset picking, progressive disclosure of amount/fee rows, Stealth Send, and completion via success modal vsswapSuccesswhen stealth or cross-asset.The production swap path gains a Stealth Swap card on
SwapCreateScene; anincognitoflag is passed through toSwapConfirmationScene, which shows a static Powered by Houdini card when enabled.PoweredByCardnow treatsonPressas optional (no chevron / “tap to change” when omitted).Maestro flows under
maestro/14-houdini/and newhoudini_*strings document the walkthrough.Reviewed by Cursor Bugbot for commit 00daea5. Bugbot is set up for automated code reviews on this repo. Configure here.