Seedelf-Wallet

Blind task-completion usability test

This test asks one question: can someone who has a goal, but doesn’t know how Seedelf Wallet is designed, work out how to use it? It is not another audit of every screen. Each task gave a tester a goal and a starting state, never a path, and recorded what the tester actually did, wrong turns included.

The testers were fresh AI agents with no knowledge of the product. They drove the real built extension (commit d423b79) in a test browser through 29 runs: the test plan’s 20 tasks, five exploratory tasks of the same kind, and three reruns. After each run, a separate verifier with access to the source and logs annotated the trace, marking what the test setup rather than the wallet had caused. It never changed the tester’s account, which is reported as given. Appendix A explains how the test was run and what it couldn’t do. Appendix B says which findings were reported before. §11 says what the fix round after it did with §9’s changes, and what’s left for the owner.

1. Executive summary

How usable is the wallet when the tester has a goal rather than instructions? Usable, but often on the second try. Every run reached its goal or the furthest point the test environment allowed. Testers scored 2 PASS (T20b, E02), 26 PASS WITH FRICTION and 1 BLOCKED (T16, where the fake giveme.my refused the private session’s funding). The verifier agreed with every result except T14, which it marked BLOCKED because the recorded proposals had no content to understand; the rerun with content, T14r, passed. Confidence was High in 17 runs, Medium in 11 and Low in 1 (T05). Three testers rated their run as needing prior knowledge (T05, T14, T14r), each time general Cardano knowledge. T15 (reloading the page after turning Sites on), T08 (reading the pending figures) and T12 (judging a pool’s health) also relied on general knowledge the UI didn’t supply. None needed knowledge of how Seedelf Wallet is built.

Once a tester was on the right screen, the flows held, except the private Send’s amount limit (T05). Of 114 task answers the verifier checked, 106 were right, 7 partly right, 1 couldn’t be checked and none were wrong. All 8 transactions the wallet submitted (two in T03, and one each in T04, T04b, T07, T08, T13 and E04) did exactly what their reviews said. The friction is in two places: finding the right screen, and reading money that is in motion (pending balances, history amounts, the cost of multi-step flows). Testers made 38 wrong turns in 20 runs, or 30 in 18 runs once the 8 the verifier traced to the harness or a misread are removed. About half of those 30 (14) were a search for a feature in the wrong place. The rest were guesses at an amount (5, T05), money in motion (4, T03 and T08), controls or headings scrolled out of view (3, T10, T14 and E05), the state of a site connection (2, T15) and looks for an explanation (2, T16). Testers recorded 43 points where a reasonable user might have stopped, and 35 of them come from the product.

Concepts the UI taught.

Concepts that still needed prior knowledge or inference.

Where wrong turns happened.

How far these results reach. The testers were AI agents. They read every word and act slowly. They saw the accessible names the harness prints (“Send privately”, “Receive publicly”), which a sighted user never sees. They saw a tooltip only when they hovered on purpose, and then without Chrome’s delay; the view and the screenshots never showed one. The side panel ran as a separate window rather than docked beside the page. Payments from the private balance can’t complete in this harness, so the end of every private send, swap, mix and private session is untested. Section 10 lists what human testers should settle.

2. Task scorecard

Legend: Result is the tester’s own verdict. Where the verifier recommended a different one, it follows in parentheses. Confidence, wrong turns and navigation steps (approximate) are the tester’s own figures. “Needed prior product knowledge” answers the plan’s question, knowledge of how Seedelf Wallet works: no run needed it. Three testers flagged their run as needing prior knowledge (T05, T14, T14r); each time it was general Cardano knowledge, as the column notes (see below).

Task Goal Result Confidence Wrong turns Navigation steps Needed prior product knowledge
T01 Receive ordinary ADA PASS WITH FRICTION High 1 10 No
T02 Receive money privately PASS WITH FRICTION Medium 0 6 No
T03 Fund a brand-new wallet PASS WITH FRICTION High 2 17 No
T04 Send 12 ADA publicly (pilot; task title shown) PASS WITH FRICTION Medium 0 7 No
T04b Send 12 ADA to an ordinary address (untitled rerun) PASS WITH FRICTION Medium 4 17 No
T05 Spend the maximum private amount PASS WITH FRICTION Low 5 22 No (the tester flagged general Cardano knowledge)
T06 Pay a normal Cardano address using private funds PASS WITH FRICTION High 1 6 No
T07 Make ADA private PASS WITH FRICTION High 0 14 No
T08 Understand a pending payment PASS WITH FRICTION Medium 2 22 No
T09 Recover from a failed private transaction build PASS WITH FRICTION High 1 7 No
T10 Swap ADA for MIN PASS WITH FRICTION Medium 2 11 No
T11 Determine whether Lovejoin can currently mix PASS WITH FRICTION Medium 0 5 No
T12 Stake ADA PASS WITH FRICTION Medium 3 11 No
T13 Stop staking PASS WITH FRICTION High 0 7 No
T14 Understand and vote on a governance proposal PASS WITH FRICTION (verifier: BLOCKED) Medium 4 27 No (the tester flagged general Cardano knowledge)
T14r Understand and vote on a governance proposal (rerun with proposal metadata) PASS WITH FRICTION High 1 10 No (the tester flagged general Cardano knowledge)
T15 Connect a dApp publicly PASS WITH FRICTION High 2 17 No
T16 Connect a dApp privately BLOCKED Medium 2 8 No
T17 Accidentally decline a dApp PASS WITH FRICTION High 1 13 No
T17r Accidentally decline a dApp (rerun with fast retry) PASS WITH FRICTION High 1 11 No
T18 Sign a dApp transaction PASS WITH FRICTION High 1 5 No
T19 Add a second public account PASS WITH FRICTION High 0 5 No
T20a Restore the wallet (narrow side panel) PASS WITH FRICTION High 0 5 No
T20b Restore the wallet (full tab) PASS High 0 6 No
E01 Find an old transaction PASS WITH FRICTION Medium 1 10 No
E02 Lock the wallet and get back in PASS High 0 6 No
E03 Disconnect a site PASS WITH FRICTION High 1 12 No
E04 Withdraw staking rewards PASS WITH FRICTION Medium 1 7 No
E05 Understand a failed refresh PASS WITH FRICTION High 2 11 No

Notes:

3. Detailed task traces

One entry per run, in task order; reruns follow the run they repeat. Each entry gives the test setup that matters for reading it, the tester’s result and the path exactly as the tester took it (wrong turns included), then the tester’s hesitations and observations, the answers the task asked for, and, kept apart, the verifier’s notes on what the test setup rather than the wallet caused.

T01 · Receive ordinary ADA

Test notes. Main run (it predates the harness fix for “Details” toggles; none was involved). Side panel, 360x640, starting from a fresh install: the welcome screen, no wallet yet (the tester created one and chose their own password). The task text told the tester not to assume “Private” or “Public” has a particular meaning. “Create new wallet” hands the wallet over from the panel to a full tab, so everything from the recovery phrase on ran in a 1280x720 tab. Extra command world pay: the other person’s ordinary wallet pays the address given. Its reply quotes their wallet (“Sent 50 ADA to …”) without saying when the payment reaches a block, but in this harness it is in a block at once. The wallet shows such a payment only after Refresh, or when Home is opened again more than 60 s after its last reading. The harness view prints each control’s accessible name beside its visible label (button “Receive privately” (shows “Receive”)), so the tester saw names a sighted user doesn’t.

Result. PASS WITH FRICTION · confidence High · 1 wrong turn · 10 navigation steps · prior product knowledge needed: no, the private Receive screen pointed to “Show my public address” and that screen called the address “an ordinary Cardano address”.

Path taken.

  1. Stopped and started the harness → the welcome screen in the panel: “A private wallet for Cardano.”, “Create new wallet”, “Restore wallet”, and “Each opens in a full tab, which stays open while you write your phrase down or type it in.”
  2. Clicked “Create new wallet” → the panel closed and a 1280x720 tab opened on “Your recovery phrase”, “Step 1 of 3”, the phrase blurred, with “This phrase restores your Seedelfs only in Seedelf Wallet. Other Cardano wallets will show your public account and nothing else.”
  3. Clicked “Reveal phrase” and scrolled down → the 24 words and “I’ve written it down”.
  4. Clicked “I’ve written it down” → “Confirm your phrase”, “Step 2 of 3”, asking for words 9, 17 and 18, with Confirm disabled until all three were filled.
  5. Typed the three words and clicked Confirm → “Set a password”, “Step 3 of 3” (“Use at least 12 characters.”).
  6. Entered and confirmed a 16-character password and clicked “Create wallet” → Home, in the tab, on the “Private” tab: “Private balance 0 ₳”; Receive enabled; Send, Make public and Create disabled; “Fund your public account first: it pays for your Seedelf”; and a “Get started” card (“Your wallet has two sides: a public account, like any Cardano wallet’s, and a private balance in Seedelf…”) whose step 1, “Fund your public account”, has a “Show my address” button.
  7. Clicked the big “Receive” on the Private tab, the most obvious action and the only enabled one (wrong turn) → “Receive”, “Into your private balance”: “People pay a Seedelf’s name, and you don’t have a Seedelf yet. Create one first: your public account pays for it.”; “Create a Seedelf” disabled, “Show my public address” enabled.
  8. Hovered the disabled “Create a Seedelf” → tooltip “Fund your public account first: it pays for your Seedelf”.
  9. Clicked “Show my public address” → “Into your public account”: a QR code, “Receive address” addr_test1qpfex0a3…4et2qm with Copy, and “This is an ordinary Cardano address: anyone can see what it receives. To be paid privately, give out one of your Seedelfs’ names instead.”
  10. Hovered the small i icon beside the “Receive” title, then clicked it → “Anything that can pay a Cardano address can fund this wallet: scan the code from a phone wallet, or copy the address.” (first as a tooltip, then expanded under the title).
  11. Clicked Copy → the button read “Copied” and the clipboard held the full address.
  12. Clicked “Show my Seedelfs’ names” to see what a name looks like → back on the private Receive screen, which still said there was no Seedelf.
  13. Clicked Back, then the “Public” tab → “Public account 0 ₳”, Receive, “Fund your public account first: Receive shows its address”, and “Create your Seedelf before making money private: then what you make private isn’t tied to it.”
  14. Ran world pay of 50 ADA to the copied address → the sender’s wallet said “Sent 50 ADA to addr_test1qpfex…”; the wallet still showed 0 ₳.
  15. Waited 10 s → no change: “Updated 59 s ago”, Public account 0 ₳.
  16. Clicked the Refresh icon → “Updated just now”, “Public account 50 ₳”; Send and Make private enabled.
  17. Stopped the harness.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
What information should I give someone using an ordinary Cardano wallet? The public account’s “Receive address”, addr_test1qpfex0a3…4et2qm, or its QR code (sureness High) Correct. The QR encodes the same address; a Seedelf name wouldn’t work (only Seedelf Wallet can pay one), and this wallet had none
Did I initially choose the correct receive path, and why? No: clicked the Private tab’s “Receive” because Home opened there and it was the most prominent and only enabled button; its screen offered “Show my public address” (High) Correct. The Get started “Show my address” chip was also enabled
Did the payment arrive where expected? Yes: the Public account showed 50 ₳, but only after Refresh (High) Correct. The 50 ADA landed at that address at once; the wallet read the chain again only at the Refresh; the private balance stayed 0 ₳

Verifier notes.

Final result. The tester worked out that an ordinary Cardano wallet should be given the public account’s receive address (or its QR code), after one wrong turn through the default Private tab’s Receive. A 50 ADA test payment to that address showed as 50 ₳, but only after a manual Refresh.

T02 · Receive money privately

Test notes. Main run. Side panel, 360x640. Starting state: the funded wallet, unlocked on Home, with 28 ₳ private, 10,408.014036 ₳ public and one Seedelf already owned, tagged “web-wallet”. Because the wallet is already set up, Home’s “Get started” checklist, one of the two places that define a Seedelf, never shows. Extra command world pay-seedelf: another Seedelf Wallet user pays whatever the tester gives them; the payment is in a block at once, and the wallet shows it after Refresh or when Home is opened again more than 60 s after its last reading. The trace predates the harness fix that lets a role-and-name click reach the wallet’s disclosure toggles (summary elements), which is why “Manage” took a coordinate click. The harness view prints each control’s accessible name beside its visible label (button “Receive privately” (shows “Receive”)), so the tester saw names a sighted user doesn’t.

Result. PASS WITH FRICTION · confidence Medium · 0 wrong turns · 6 navigation steps · prior product knowledge needed: no, the Receive screen’s “Its whole name: share this to be paid privately” said what to share, though understanding what a Seedelf is would take more.

Path taken.

  1. Stopped and started the harness → Home on the “Private” tab: “Private balance 28 ₳”, Receive, Send, Make public, Create, and a token row “asset1synt…ctusdm”.
  2. Took a screenshot of Home → with Private already selected and someone wanting to pay, Receive looked like the obvious next step.
  3. Clicked “Receive” (screen-reader name “Receive privately”) → “Receive”, “Into your private balance”: “Only someone using Seedelf Wallet can pay this. Anyone else needs your public address.”, “Show my public address”, “Share a Seedelf’s whole name, not its tag: anyone can choose the same tag. Nobody can tell a payment to it is yours.”, a QR code, “Its whole name: share this to be paid privately”, Copy and a long hex string.
  4. Scrolled down 300 px → the hex 5eed0e1f7765622d77616c6c657400ab…ab; “Tag “web-wallet”: public, and anyone can choose the same one · 1.5 ₳ locked with it, back when you remove it”; a “Manage” toggle; and “A Seedelf’s name is public, and linked to whatever paid to create it. What’s paid to it isn’t.”
  5. Tried to click “Manage” by role and name, then with exact → the harness said nothing matched although it listed “Manage” as visible; the tester put this down to the harness, not something a user would see.
  6. Clicked “Manage” by coordinates → it expanded: “Removing it gives back the ADA locked with it. After that, nobody can pay its name.” and a “Remove web-wallet” button, which the tester had no intention of pressing.
  7. Clicked “Manage” again to close it, then Copy → the button read “Copied”; the clipboard held the whole name.
  8. Ran world pay-seedelf of 5 ADA to the whole name → the payer’s wallet said “Paid 5 ADA to 5eed0e1f7765…ababab”; the Receive screen didn’t change.
  9. Scrolled up and clicked Back → Home still showed “Private balance 28 ₳” and “Updated 52 s ago”.
  10. Clicked Refresh → “Updated just now”, “Private balance 33 ₳”.
  11. Stopped the harness.

Wrong turns. None.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
What should I give the other Seedelf Wallet user so they can pay me privately? The Seedelf’s “whole name”, 5eed0e1f7765…ab, or its QR code, not the tag “web-wallet”, because “anyone can choose the same tag” (sureness High) Correct. The QR encodes the same value, and paying it worked (28 → 33 ₳)
Does the UI teach what a Seedelf is? Not really: it never defines the term; from fragments the tester inferred a private receiving identity (Medium) Partly. True on the tester’s path: private Receive has no definition and no i. The product defines a Seedelf elsewhere (behind the i beside the title of Create a Seedelf, and in the new-wallet “Get started” checklist). Every fact the tester pieced together is accurate, and the inference matches the product’s own definition
Do I understand who can use it? Yes: only Seedelf Wallet users can pay a Seedelf name; anyone else needs the public address (High) Correct (strictly, the Seedelf CLI can pay one too; ordinary Cardano wallets can’t)

Verifier notes.

Final result. The tester gave the other person the Seedelf’s whole name, copied from the Private tab’s Receive, and a 5 ADA private payment to it raised the private balance from 28 to 33 ₳ after a manual Refresh. They came away knowing who can pay a Seedelf, but not what one is.

T03 · Fund a brand-new wallet

Test notes. Pilot run. Side panel, 360x640. Starting state: a brand-new wallet made by the wallet’s own Create flow, unlocked on Home, never funded. As in every pilot task, the task was headed with its title, “Fund a brand-new wallet” (the tester’s summary of the task opens with those words); the title names the step the task asked the tester to work out first. Extra commands: world pay, whose pilot reply said “The payment is already in a block on the test network”, so the tester knew the moment the money landed; and world confirm, the only way anything confirms here, for which the pilot text said: “whenever you would normally wait for a confirmation, run world confirm, then look at the wallet again”. Confirmations and Refreshes therefore came seconds after each submit. A world pay shows in the wallet only after Refresh, or when Home is opened again more than 60 s after its last reading. Spends from the private balance can’t complete in this harness; the task ended at readiness, and the tester never tried one (and wasn’t told). The pilot prompt didn’t yet ask testers to hover over controls, and this tester never did. The harness view prints each control’s accessible name beside its visible label (button “Receive privately” (shows “Receive”)), so the tester saw names a sighted user doesn’t. The run predates the harness fix for “Details” toggles; none was involved.

Result. PASS WITH FRICTION · confidence High · 2 wrong turns · 17 navigation steps · prior product knowledge needed: no, the “Get started” checklist spelled out the order with a button for each step.

Path taken.

  1. Stopped and started the harness → Home on the “Private” tab: “Private balance 0 ₳”, “Fund your public account first: it pays for your Seedelf”, and the top of a “Get started” card; Receive enabled; Send, Make public and Create greyed out.
  2. Scrolled down 300 px to read Get started → 1 “Fund your public account” with “Show my address”, 2 “Create your Seedelf”, 3 “Make ADA private”; concluded the first thing to do is fund the public account.
  3. Scrolled down another 300 px → the bottom of the page: dApps, Activity, UTxOs; nothing new about setup.
  4. Clicked “Show my address” (step 1) → “Receive”, “Into your public account”: a QR code, the addr_test1… address and the warning that it is an ordinary address anyone can see.
  5. Clicked Copy and checked the clipboard → “Copied”; the address was on the clipboard.
  6. Ran world pay of 100 ADA → the harness said the payment was already in a block; the Receive screen didn’t change.
  7. Clicked Back (wrong turn) → the Public tab, not the Private tab the tester had left, scrolled down, still “0 ₳” and “Fund your public account first: Receive shows its address”.
  8. Scrolled up → “Public account 0 ₳”, “Updated 31 s ago”; the money the tester had been told was sent didn’t show.
  9. Clicked the Refresh icon → “Public account 100 ₳”; Make private enabled, with a green box below: “Create your Seedelf before making money private: then what you make private isn’t tied to it.”
  10. Scrolled down and clicked “Create a Seedelf” in the green box → the Create a Seedelf form, opened partway down (the tester scrolled up): an optional Tag, “Pay with” Public account (selected) or Private balance (disabled), “About 1.75 ₳ stays locked with the Seedelf, and the network fee is about 0.25 ₳.”, and Review.
  11. Left the tag empty and clicked Review → “Review the new Seedelf”: “Locked with it 1.74986 ₳”, Seedelf name 5eed0e1f00d3…, “Network fee 0.200636 ₳”, “Total leaving your public account 1.950496 ₳”, “Public account after 98.049504 ₳”.
  12. Scrolled down to read the fine print → “Only removing the Seedelf gives back the ADA locked with it.”
  13. Clicked “Create Seedelf” → back on the Public tab, scrolled partway down: balance still 100 ₳, a small grey “Wait for the last transaction to confirm”, the green box still there with its button greyed out; no status message or toast seen.
  14. Ran world confirm → one transaction went into a block; the wallet didn’t change.
  15. Clicked Refresh (wrong turn) → 98.049504 ₳, but “Wait for the last transaction to confirm” stayed and Make private stayed disabled.
  16. Waited 5 s → the wait line went away and Make private was enabled; the tester recorded the green box disappearing here too.
  17. Scrolled up, then clicked the Private tab → a “Seedelf created” banner with a Cardanoscan link; the Private tab showed 0 ₳ and “Make some ADA private first: these are paid from your private balance”.
  18. Scrolled down to Get started → steps 1 and 2 ticked; step 3 “Make ADA private” with a “Make private” button.
  19. Clicked “Make private” (step 3) → “Make private”, “98.049504 ₳ available”, Amount, Max, and “Making money private links your public account to the new private UTxOs, but not to any Seedelf name.”
  20. Typed 50 into Amount → Review enabled.
  21. Clicked Review → “Review making it private”: “Into your private balance 50 ₳”, “Network fee 0.172233 ₳”, “Total leaving your public account 50.172233 ₳”, “Public account after 47.877271 ₳”, “Private balance after 50 ₳”.
  22. Clicked “Make 50 ₳ private” → the Public tab again (the flow had started from Private), with “Payment into your private balance sent. Waiting for the network…”; Public still 98.049504 ₳.
  23. Ran world confirm, clicked Refresh, waited 5 s, clicked the Private tab → Public 47.877271 ₳ and Private 50 ₳, but the banner still said “Waiting for the network…” and Send was disabled.
  24. Waited 10 s → the banner changed to “Made private”; Private 50 ₳; Send, Make public and Create all enabled.
  25. Scrolled down → Get started was gone, which the tester took to mean setup was complete; only dApps, Activity and UTxOs remained.
  26. Stopped the harness.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
What is the first thing you need to do? Fund your public account: “Fund your public account first: it pays for your Seedelf”, Get started step 1, via “Show my address” (sureness High) Correct
What order is the product asking you to follow? 1 Fund your public account → 2 Create your Seedelf (paid from the public account, before any money is made private) → 3 Make ADA private (High) Correct: the Get started steps
Did you reach the point where the wallet is ready for private use? Yes: Private balance 50 ₳, private Send and Make public enabled, “Made private”, Get started gone (High) Correct: both transactions confirmed and the wallet owns the Seedelf. In this harness a private spend would still be refused, but the task asked for the readiness state

Verifier notes.

Final result. Following the “Get started” order (fund the public account, create a Seedelf, make ADA private), the tester funded the wallet with 100 ADA, created a Seedelf and made 50 ₳ private, ending ready for private use with Public 47.877271 ₳ and Private 50 ₳. The friction they met: balances that update only on Refresh, unannounced switches to the Public tab, and no visible sign after Create Seedelf (the verifier found the banner there, scrolled out of view).

T04 · Send 12 ADA publicly (pilot, task title shown)

Test notes. Pilot run. Short side panel, 360x480. Starting state: the funded wallet, unlocked on Home, with 28 ₳ private and 10,408.014036 ₳ public, including 57.475311 ₳ of staking rewards. The task was headed with its title, “Send 12 ADA publicly”, and the tester says they chose the Public tab because of that word; the scenario text itself never says “publicly”. The pilot’s starting-state text also said the tester would need the password “to approve things”. Note given: “You don’t need to wait for the network to confirm anything in this test: observe and answer from what the wallet shows you.” Nothing confirms in this task, so the state after confirmation couldn’t be seen. The pilot predates the harness fix for controls whose label is outside the visible area (they printed as “(icon, no text)”) and the fix for “Details” toggles (none was involved), and its prompt didn’t yet ask testers to hover. The harness view prints each control’s accessible name beside its visible label (button “Send publicly” (shows “Send”)), so the tester saw names a sighted user doesn’t. T04b repeats the task without the title.

Result. PASS WITH FRICTION · confidence Medium · 0 wrong turns · 7 navigation steps · prior product knowledge needed: no, though the tester relied on the word “publicly” in the task title to choose the Public tab, and reading the staking-rewards row takes some knowledge of Cardano staking.

Path taken.

  1. Stopped and started the harness → Home on the “Private” tab, selected by default: “Private balance 28 ₳”, Receive, a large highlighted teal Send, Make public, Create, and a “Public” tab beside “Private”.
  2. Clicked the “Public” tab → “Public account 10,408.014036 ₳”, “Includes 57.475311 ₳ of staking rewards”, Receive, Send, Make private; here the highlighted teal button is “Make private”, not Send.
  3. Clicked “Send” (screen-reader name “Send publicly”) → a screen titled “Send”: “10,408.014036 ₳ available (includes 57.475311 ₳ of rewards)”, a “To” field (“A Cardano address, an ADA Handle like $name, or a Seedelf’s whole name. Looking up a handle tells Koios which one.”), Amount with Max, and Review disabled with “Enter who it goes to.”
  4. Filled To with the friend’s address → “Sends to addr_test1qpka…cs65nlaz” with “Save to contacts”.
  5. Filled Amount with 12 → Review enabled; “Send tokens too (optional)” appeared.
  6. Clicked Review → “Review the payment”, “Nothing is sent until you press Send”, the full To address, “Amount 12 ₳”, “Network fee 0.174697 ₳”, a rewards row cut off at the fold, and a large Send pinned at the bottom.
  7. Scrolled down 200 px → “Staking rewards moved into your balance 57.475311 ₳, already counted in it”, “Total leaving your public account 12.174697 ₳”, “Public account after 10,395.839339 ₳”, and “Transaction details”.
  8. Scrolled down 200 px → “To leave staking rewards out of payments, turn off “Use staking rewards when spending” in Settings.” and “It takes about a minute for the network to confirm.”
  9. Clicked “Transaction details” → a dialog, “The transaction”: f785cdcf9e4c9695…36ddba4d, “Spends 1 UTxO”, “Pays 2 outputs”, output #0 to the friend’s address as “#0 · a key that stakes 12 ₳”, tabs Transaction and Raw CBOR; it confirmed 12 ₳ goes to the friend.
  10. Clicked Close → back on the review.
  11. Clicked Send → straight back to Home on the Public tab: “Payment sent. Waiting for the network…” with “f785cdcf9e…ddba4d on Cardanoscan”; balance still 10,408.014036 ₳; Send and Make private greyed out. No password was asked.
  12. Scrolled down 300 px → “Wait for the last transaction to confirm” under the disabled buttons, then Staking and governance, and Tokens.
  13. Scrolled down 500 px → the token list, “View all 6 tokens”, “Activity”, “UTxOs”.
  14. Clicked “Activity” → “Public activity”; the newest entries were older payments (“Sent −4.185521 ₳ and 1 token”, “Sent −25.177821 ₳”), nothing for the 12 ₳.
  15. Stopped the harness.

Wrong turns. None.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Amount shown on review “Amount 12 ₳” (sureness High) Correct; output #0 is 12 ADA
Fee shown on review “Network fee 0.174697 ₳” (High) Correct; equals the decoded fee
Recipient shown on review The full address, matching what the friend sent (High) Correct; byte-identical to output #0’s address
Total leaving shown on review “Total leaving your public account 12.174697 ₳”, below the fold (High) Correct (12 + 0.174697); below the fold at 480 px
Resulting balance shown on review “Public account after 10,395.839339 ₳”, below the fold; checked by subtraction (High) Correct; matches the transaction’s net effect
Anything else on the review The staking-rewards row and the note to turn off “Use staking rewards when spending” in Settings (Medium) Correct; also “Nothing is sent until you press Send”, “Transaction details” and the confirmation-time line, all seen in steps 6–9
Did the payment go out? “Payment sent. Waiting for the network…” with tx f785cdcf9e…ddba4d; balance unchanged; no Activity entry yet (Medium) Correct: submitted and accepted, never confirmed (nothing confirms in this task)
Was the review understandable? Mostly: all five values labelled and consistent; the rewards row confuses, and total and balance after sit below the fold under a pinned Send (High) Correct

Verifier notes.

Final result. The tester sent 12 ADA from the public account to the friend’s exact address, and the review showed a correct amount, fee, recipient, total leaving and balance after. They chose the public side because the task title said “publicly”, not because the wallet led them there.

T04b · Send 12 ADA to an ordinary address (untitled rerun of T04)

Test notes. Main run. Side panel, 360x640. Starting state: the funded wallet, unlocked on Home, with 28 ₳ private and 10,408.014036 ₳ public, including 57.475311 ₳ of staking rewards. Same task as T04, but with no title shown (T04’s pilot run was headed “Send 12 ADA publicly”) and in the taller panel. Note given: one outside service the wallet relies on refuses every request here, so after confirming something the wallet may say nothing was sent; that is the end of what the test can do, not a wallet failure. In this harness every payment from the private balance ends that way (the fake giveme.my refuses every collateral request), so the Make public route could not succeed. world confirm was allowed, to be run only after sending and looking at what the wallet showed right after. The trace predates the harness fix that lets a role-and-name click reach the wallet’s “Details” toggles (summary elements), which affected step 13. The harness view prints each control’s accessible name beside its visible label (button “Send privately” (shows “Send”)), so the tester saw names a sighted user doesn’t.

Result. PASS WITH FRICTION · confidence Medium · 4 wrong turns · 17 navigation steps · prior product knowledge needed: no, but the tester had to infer the private/public split from an error message and by exploring the Public tab.

Path taken.

  1. Stopped and started the harness → Home on the “Private” tab: “Private balance 28 ₳”, Receive, Send, Make public, Create; a “Public” tab beside it, with nothing saying there was money there.
  2. Clicked “Send”, the big teal button that looked like the obvious action (wrong turn) → “Send”, “28 ₳ in your private balance”, first field “Seedelf name” (placeholder “5eed0e1f…”) with “Paste the whole name the recipient gave you. Tags aren’t unique, so the name is what counts.”
  3. Scrolled down → “Sending right after making money private is easy to match by timing: the two sit close together on chain.”; Review disabled, with “Paste the Seedelf’s name.”
  4. Pasted the friend’s address into “Seedelf name” anyway, not knowing what a Seedelf name was (wrong turn) → the field was marked invalid: “That’s an ordinary address, not a Seedelf’s name. Send pays Seedelfs; Make public pays any address from your private balance, and that payment shows at their end.”, with a “Pay it with Make public” link.
  5. Clicked “Pay it with Make public” (wrong turn) → “Make public” with the address filled in: “Pays any Cardano address or $handle from your private balance.” and “Making money public where it came from links it back. Send it somewhere else, or keep it private.”
  6. Filled Amount with 12 → Review enabled.
  7. Clicked Review → “Review the payment”: the full address, “Amount 12 ₳”, “Network fee 0.23026 ₳”, “Total leaving your private balance 12.23026 ₳”, “Private balance after 15.76974 ₳”, and “Send asks giveme.my to lend the collateral, then submits.”; the screen opened already scrolled down about 86 px.
  8. Scrolled up → the same review with its header visible.
  9. Clicked “Transaction details” → “Spends 1 UTxO”; “Pays 2 outputs” (#0 12.76974 ₳ to “a contract · Seedelf Wallet’s contract · under a register”, #1 12 ₳ to the friend’s address, “a key that stakes”); “Reads 1 UTxO”; “Collateral: 1 UTxO”, “Comes back 4.65461 ₳”; fee, size, “Signed Not yet”, script data hash and contracts; further down, the datum, mem/steps and “Must be signed by”.
  10. Scrolled inside the dialog and hovered “What this means” (the i icon) → “The wallet shows a script by its hash, its kind and its size. It doesn’t take one apart…”
  11. Closed the dialog → back on the review.
  12. Clicked Send → a red alert, “Nothing was sent. Something it spends may have been spent or changed since you reviewed it: make a new review to send it.”, with a “Details” toggle and “Refresh and review again”.
  13. Clicked “Details” (wrong turn): the first try matched nothing, which the tester read as targeting the wrong one of two “Details” buttons; after scrolling they clicked the right one → “giveme.my, which lends the collateral, refused this transaction: Transaction Fails Validation. Its UTxOs may have been spent since the review: refresh, then review it again.”
  14. Clicked “Refresh and review again” → the review rebuilt with fee 0.229958 ₳, total 12.229958 ₳ and balance after 15.770042 ₳, and “Review updated just now. Check it again.”
  15. Clicked Send again → the same “Nothing was sent…”, which the tester recognised as the outside-service refusal the test note warned about.
  16. Clicked Home (the first attempt said Home was above the visible area; scrolled up and clicked again) → “Private balance 28 ₳”: nothing had moved.
  17. Clicked the “Public” tab to see what was there → “Public account 10,408.014036 ₳”, “Includes 57.475311 ₳ of staking rewards”, with its own Receive, Send and Make private; the tester hadn’t known this money was there.
  18. Clicked Send on the Public tab → “Send”, “10,408.014036 ₳ available (includes 57.475311 ₳ of rewards)”, a To field for “A Cardano address, an ADA Handle like $name, or a Seedelf’s whole name”.
  19. Filled To with the friend’s address and Amount with 12 → “Sends to addr_test1qpka…cs65nlaz” and a “Note (optional)” field; Review enabled.
  20. Clicked Review → the full address, “Amount 12 ₳”, “Network fee 0.174697 ₳”, “Staking rewards moved into your balance 57.475311 ₳, already counted in it”, “Total leaving your public account 12.174697 ₳”, “Public account after 10,395.839339 ₳”; the big teal Send visible without scrolling.
  21. Scrolled down the review → “To leave staking rewards out of payments, turn off “Use staking rewards when spending” in Settings.” and “It takes about a minute for the network to confirm.”
  22. Clicked Send → no password asked; the Public tab of Home with “Payment sent. Waiting for the network…” and “0b65241e48…c58652 on Cardanoscan”; the balance still 10,408.014036 ₳; Send and Make private greyed out, with “Wait for the last transaction to confirm”.
  23. Hovered the greyed-out Send and scrolled down → tooltip “Wait for the last transaction to confirm”; the tokens list below.
  24. Ran world confirm, waited 5 s and scrolled up → “Payment confirmed” with Dismiss; the balance 10,395.839339 ₳, exactly the review’s “Public account after”; the “Includes … staking rewards” line gone; Send enabled again.
  25. Stopped the harness.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Does the review make the amount understandable? Yes: “Amount 12 ₳” in bold on both the private (Make public) and public reviews (sureness High) Correct; the submitted transaction paid exactly 12 ADA to the friend
Does the review make the fee understandable? Yes: “Network fee 0.23026 ₳” on the private route (0.229958 ₳ after the refresh) and “Network fee 0.174697 ₳” on the public route; the giveme.my collateral line gave no amount, so the tester was unsure whether it costs anything (Medium) Correct. The collateral costs the user nothing (giveme.my lends its own, taken only if a contract fails), but the review doesn’t say so, so the doubt was a fair reading
Does the review make the recipient understandable? Yes: the full, unshortened address, matching what the friend sent (High) Correct; it equals submitted output 0’s address
Does the review make the total leaving understandable? Yes: “Total leaving your public account 12.174697 ₳” (private route: “Total leaving your private balance 12.23026 ₳”), naming the balance used (High) Correct; 12.174697 is the public account’s real net decrease
Does the review make the resulting balance understandable? Yes: “Public account after 10,395.839339 ₳” (private route: “Private balance after 15.76974 ₳”); the confirmed balance matched exactly; the rewards line prompted a double-check (High) Correct; the rewards went into the wallet’s own change
What did the wallet show right after sending, and what changed after confirmation? Right after: “Payment sent. Waiting for the network…” with a Cardanoscan link, the balance still 10,408.014036 ₳, Send and Make private disabled (“Wait for the last transaction to confirm”). After: “Payment confirmed”, 10,395.839339 ₳, the rewards line gone, Send enabled; as expected from the review (High) Correct (“Updated 2 min ago” with the old balance right after; “Updated just now” and the new balance after confirmation)

Verifier notes.

Final result. The tester sent 12 ADA to the friend from the public account, and it confirmed at exactly the reviewed balance. Without the title’s hint they first took the default Private tab’s Send, which redirected them to Make public, a route the harness’s collateral service refused twice; they found the Public tab only by exploring after that failure.

T05 · Spend the maximum private amount

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel. Starting state: the funded wallet, unlocked, on Home’s Private tab with “Private balance 28 ₳” and one token flagged “Calls itself tUSDM, not on the wallet’s list”. Data: the recipient’s Seedelf name (tag “This is a test.”, a fixture Seedelf another wallet owns). The task told the tester that if there was no straightforward Max workflow, they shouldn’t calculate the answer from source code but attempt it as a normal user would. The tester was also told that an outside service refuses every request here, so the last step of paying from the private balance (after review and confirmation) would fail with a message that nothing was sent, and that everything up to the confirmation counts as the task. Private-balance payments can’t complete in this environment: the fake giveme.my refuses every collateral request. The harness view prints each control’s accessible name beside its visible label (button “Send privately” (shows “Send”)), so the tester saw names a sighted user doesn’t. Main-run trace: it predates the harness fix for “Details” toggles, which affected step 32.

Result. PASS WITH FRICTION · confidence Low · 5 wrong turns · 22 navigation steps · prior product knowledge needed: yes, though what the tester names is general Cardano knowledge (minimum ADA per output, change outputs carrying tokens) or blind bisection, not knowledge of this wallet.

Path taken.

  1. Ran stop, then start → Home on the Private tab: “Private balance 28 ₳”, buttons Receive, Send, Make public and Create, and the token “asset1synt…ctusdm” 1,234.56, “Calls itself tUSDM, not on the wallet’s list”.
  2. Clicked Send (accessible name “Send privately”) → the Send form: “28 ₳ in your private balance”, a “Seedelf name” field, Amount (placeholder 0), “Add tokens”, “Add recipient” and a disabled Review; no Max or “Send all” near Amount.
  3. Filled “Seedelf name” with the recipient’s name → “Found: This is a test. · 5eed0e1f5468…8e0d63 ·” and a “Save to contacts” link.
  4. Clicked Amount, hovered “28 ₳ in your private balance” hoping a click would fill the amount, then scrolled down looking for Max → no tooltip, nothing clickable; below, only a privacy note about timing and the version footer.
  5. Typed the full balance, 28 → Review enabled, with no inline warning. (wrong turn)
  6. Clicked Review → red alert “Not enough ADA in your private balance for this and its fee.”, with no fee figure.
  7. Changed the amount to 27 and clicked Review → the same alert; it hadn’t cleared during the edit, so at first the tester couldn’t tell whether it was a fresh result. (wrong turn)
  8. Amount 25, Review → “Review the payment”: “Amount 25 ₳”, “Network fee 0.271986 ₳”, “Total leaving your private balance 25.271986 ₳”, “Private balance after 2.728014 ₳”, and Send.
  9. Opened “Transaction details”, expanded it and scrolled to the outputs → dialog “The transaction”: “Spends 2 UTxOs”, “Pays 2 outputs”, #0 25 ₳ to Seedelf Wallet’s contract, #1 2.728014 ₳ plus 1,234,560,000 asset1aetp…kf6dul, which the tester read as their change carrying the tokens; scrolling over the dialog sometimes moved the page instead.
  10. Closed the dialog; Back was scrolled out of view, so scrolled up and clicked Back → the Send form, inputs kept (25).
  11. Amount 26, Review → review: 26 ₳, fee 0.271986 ₳, “Private balance after 1.728014 ₳”.
  12. Back, 26.5, Review → “Not enough ADA in your private balance for this and its fee.”, although by the tester’s sum about 1.23 ₳ would remain. (wrong turn)
  13. 26.3, Review → the same alert.
  14. 26.2, Review → the same alert.
  15. 26.1, Review → the same alert.
  16. 26 again on the same screen, to test whether the alert was stale → the review opened: validation is live and the limit lies between 26 and 26.1.
  17. Back, then “Add tokens”, to see whether sending the token too would let all the ADA go → an “Add tokens” sheet with the asset1synt…ctusdm row, “Select all” and a disabled Add.
  18. Selected the token and clicked Add → a token row with an amount field “of 1,234.56”, a “Max” button and an X; Review disabled with “Give each token an amount, or take it off.”; a Max for tokens, none for ADA.
  19. Clicked the token’s Max (1,234.56), set ADA to 27.7, Review → the same “Not enough ADA…” alert; a hint under Amount now read “Leave it empty and the tokens go with only the ADA they need. The review shows how much.” (wrong turn)
  20. ADA 27.5, then 27, token included → the same alert both times.
  21. Emptied ADA (token included), Review → review: “Amount 1.64642 ₳”, “Tokens 1,234.56 asset1synt…ctusdm” with “Not on the wallet’s list: it calls itself tUSDM, but it isn’t the listed tUSDM.”, fee 0.271986 ₳, “Total leaving your private balance 1.918406 ₳ and 1 token”, “Private balance after 26.081594 ₳” and “1.64642 ₳ is the least ADA the network accepts with these tokens.”
  22. Back, ADA 27.728014 (28 minus the fee, to leave nothing) with the token → the same alert.
  23. 27.74, then 27.75, with the token → the same alert both times.
  24. 26.7, then 26.5, with the token → the same alert both times.
  25. 26 with the token → review: “Total leaving your private balance 26.271986 ₳ and 1 token”, “Private balance after 1.728014 ₳”; the tester concluded that adding the token didn’t raise the ADA limit.
  26. Opened “Transaction details” on that review → output #1 held 26 ₳ plus 1,234,560,000 asset1aetp…kf6dul; scrolling moved the page more than the dialog; nothing explained the leftover.
  27. Closed it, Back, took the token off with its X, ADA 26.05, Review → review: 26.05 ₳, “Private balance after 1.678014 ₳”.
  28. Back, ADA 26.081594 (28 minus the fee minus the 1.64642 ₳ token minimum the wallet had shown), Review → the “Not enough ADA…” alert. (wrong turn)
  29. 26.07, Review → the same alert.
  30. 26.06, Review → review: “Amount 26.06 ₳”, “Network fee 0.271986 ₳”, “Total leaving your private balance 26.331986 ₳”, “Private balance after 1.668014 ₳”.
  31. Clicked Send → red alert “Nothing was sent. Something it spends may have been spent or changed since you reviewed it: make a new review to send it.”, with “Details” and “Refresh and review again”.
  32. Clicked “Details” (the first click was reported as covered by the alert; a click on the visible text worked) → “giveme.my, which lends the collateral, refused this transaction: Transaction Fails Validation. Its UTxOs may have been spent since the review: refresh, then review it again.” The tester stopped here as the expected refusal; their next step would be “Refresh and review again”.
  33. Ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
How do I send as much of my private balance as possible to another Seedelf user? Home (Private) → Send → paste the Seedelf name → type an ADA amount by hand (no Max for ADA) → Review → Send. By guessing, about 26.06 ₳ of 28 ₳ passes review (fee 0.271986 ₳, 1.668014 ₳ left); 26.07 and above give “Not enough ADA in your private balance for this and its fee.” Sureness Low. Partly. The path is right: it is the only flow that pays a Seedelf from the private balance, and it has no ADA Max. With the token kept, the cap lies between 26.06 and 26.07 ₳ (28 ₳, minus a fee estimated at about 0.29 ₳ rather than the 0.271986 ₳ shown, minus the 1.64642 ₳ the change needs while it holds the token). Sending the token too lowers that floor to about 1.45678 ₳, so about 26.25 ₳ plus all the tokens would pass, a range the tester never tried. The balance can never be emptied to a Seedelf: at least about 1.46 ₳ stays.
Does the product provide a straightforward Max workflow? Not for ADA; the only Max is on added token rows (announced as “All of” plus the token’s name). Sureness High. Correct. An ADA Max exists only on public Send, Make private and Make public (which pays addresses and handles, not Seedelfs); the private transfer has no Max mode.
What happened at the final step? “Nothing was sent. Something it spends may have been spent or changed since you reviewed it: make a new review to send it.”; Details: “giveme.my, which lends the collateral, refused this transaction: Transaction Fails Validation.”; next, “Refresh and review again”. Sureness High. Correct. The refusal came from the fake giveme.my and nothing was submitted; in this harness “Refresh and review again” would build again and be refused again.

Verifier notes.

Final result. The private Send has no Max for ADA, and its only error mentions the fee, not the leftover that must stay behind; by bisecting, the tester found 26.06 ₳ of 28 ₳ to be about the most that passes review (26.07 fails), without learning why. They reviewed and pressed Send, which ended at the expected test-environment refusal (“Nothing was sent”).

T06 · Pay a normal Cardano address using private funds

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel. Starting state: the funded wallet, unlocked, on Home’s Private tab with “Private balance 28 ₳”. Data: an ordinary preprod address (random key hashes, nobody’s wallet), with “They ask for 5 ADA.” The task said not to assume which feature does this and to record the terminology the tester expected and found. The tester was told that an outside service refuses every request here, so the last step of paying from the private balance (after review and confirmation) would fail with a message that nothing was sent, and that everything up to the confirmation counts as the task; also that they needn’t wait for the network to confirm anything. The feature that does this, Make public, pays from the private balance, so it can’t complete here: the fake giveme.my refuses every collateral request. The harness view prints each control’s accessible name beside its visible label (button “Send privately” (shows “Send”)), so the tester saw names a sighted user doesn’t. Main-run trace: it predates the harness fix for “Details” toggles, which affected step 9.

Result. PASS WITH FRICTION · confidence High · 1 wrong turn · 6 navigation steps · prior product knowledge needed: no, the wallet’s own inline error on Send named the right feature, though the tester adds that Make public can’t be guessed from Home alone.

Path taken.

  1. Ran stop, then start → Home on the Private tab: “Private balance 28 ₳”, buttons Receive, Send (filled teal, which the tester read as the main action), Make public and Create; to the tester “Make public” sounded like moving their own money from private to public, not paying someone.
  2. Clicked Send (accessible name “Send privately”) → the Send screen: “28 ₳ in your private balance”, a “Seedelf name” field with placeholder “5eed0e1f…”, the hint “Paste the whole name the recipient gave you. Tags aren’t unique, so the name is what counts.” and a disabled Review; the tester didn’t know what a Seedelf name was. (wrong turn)
  3. Scrolled down → a privacy note, “Sending right after making money private is easy to match by timing: the two sit close together on chain.”, and the line “Paste the Seedelf’s name.”; nothing mentioned ordinary addresses.
  4. Filled the ordinary address into “Seedelf name” anyway, hoping it would work → the field turned invalid with “That’s an ordinary address, not a Seedelf’s name. Send pays Seedelfs; Make public pays any address from your private balance, and that payment shows at their end.” and a teal link “Pay it with Make public”, which the tester called “a very helpful redirect”.
  5. Clicked “Pay it with Make public” → the Make public screen: “Pays any Cardano address or $handle from your private balance.”, To already filled (“Sends to addr_test1qpka…cs65nlaz ·” with “Save to contacts”), Amount with Max, “Add tokens”, “Add recipient”, and the note “Making money public where it came from links it back. Send it somewhere else, or keep it private.”, which the tester found hard to parse.
  6. Amount 5 → Review enabled.
  7. Clicked Review → “Review the payment”, “Nothing is sent until you press Send”, To with the full address (it matched the one given), “Amount 5 ₳”, “Network fee 0.23026 ₳”, “Total leaving your private balance 5.23026 ₳”, “Private balance after 22.76974 ₳”, “Send asks giveme.my to lend the collateral, then submits. It takes about a minute for the network to confirm.”, and buttons “Transaction details” and Send.
  8. Checked the address character by character against the one given, then clicked Send → red box “Nothing was sent. Something it spends may have been spent or changed since you reviewed it: make a new review to send it.”, with “Details” and “Refresh and review again”.
  9. Tried “Details” with an exact-name match → nothing matched (a harness targeting quirk); scrolled down → nothing changed on screen.
  10. Clicked “Details”, the disclosure under the error → “giveme.my, which lends the collateral, refused this transaction: Transaction Fails Validation. Its UTxOs may have been spent since the review: refresh, then review it again.”; now the tester could see that an outside service had refused it.
  11. Clicked “Home” (the Seedelf logo; the first try found it scrolled out of view, so scrolled up first) → Home with “Updated 1 min ago” and “Private balance” still 28 ₳, which the tester took as confirmation that no money had left.
  12. Ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Which feature pays an ordinary Cardano address from the private balance? “Make public”: “Pays any Cardano address or $handle from your private balance.” Send only pays Seedelfs: “Send pays Seedelfs; Make public pays any address from your private balance, and that payment shows at their end.” Sureness High. Correct. Make public; Send takes only Seedelf names and points an address to Make public.
What terminology did I expect to find? “Send” or “Pay” with a “Recipient address” or “To address” field, maybe “Withdraw” or “Send to address” for leaving the private side. Sureness High. The tester’s own expectation, so nothing to check; it fits the trace. “Withdraw” happens to be the code’s internal name for Make public, a word the UI never shows.
What terminology does the wallet actually use? “Send” (“Send privately” to screen readers) with a “Seedelf name” field, for paying Seedelfs; “Make public” with a “To” field (any Cardano address or $handle) for ordinary addresses; “Private balance” and “Public” tabs; on the review “Review the payment”, “Total leaving your private balance”, “Private balance after”, “Network fee”, “giveme.my to lend the collateral”. Sureness High. Correct.
Did money move? No: “Nothing was sent.”, and Home still showed “Private balance 28 ₳” afterwards. Sureness High. Correct: nothing was signed or submitted. The 28 ₳ on Home was the reading from the start of the task (“Updated 1 min ago”), not a fresh one.
What was the cost shown before confirming? Amount 5 ₳, network fee 0.23026 ₳, 5.23026 ₳ leaving the private balance, private balance after 22.76974 ₳. Sureness High. Correct; the arithmetic is consistent and there are no other charges (the collateral is giveme.my’s own and isn’t billed).

Verifier notes.

Final result. The tester first tried the highlighted Send, which takes only Seedelf names; pasting the ordinary address there brought an inline explanation and a “Pay it with Make public” link that carried the address over, and the 5 ₳ payment then reviewed cleanly. Send ended at the expected giveme.my refusal and nothing moved; the name “Make public” for paying someone else stayed puzzling.

T07 · Make ADA private

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel. Starting state: the funded wallet, unlocked, on Home’s Private tab (“Private balance 28 ₳”); the Public tab holds “Public account 10,408.014036 ₳” with “Includes 57.475311 ₳ of staking rewards”. The tester was told “You do not need to wait for anything in this test.” and given an extra command, world confirm, which puts the submitted transaction into a block at once, to use only after answering the questions about the state right after submission. The network confirms only on that command, and the wallet notices at its next 15-second check. A Make private is paid from the public account, so the giveme.my refusal that stops private-balance payments in this environment doesn’t apply and the task could complete. The harness view prints each control’s accessible name beside its visible label (button “Receive privately” (shows “Receive”)), so the tester knew which side each action belonged to. Main-run trace (it predates the harness fix for “Details” toggles; none was involved).

Result. PASS WITH FRICTION · confidence High · 0 wrong turns · 14 navigation steps · prior product knowledge needed: no, the labels “Public”, “Private” and “Make private” were enough, though the review’s staking-rewards row and Transaction details assume some Cardano familiarity.

Path taken.

  1. Ran stop, then start → Home on the Private tab: “Private balance 28 ₳”, Receive, Send, Make public, Create.
  2. Took a screenshot of Home → a Private/Public segmented toggle with Private selected, a big “28 ₳” and four round action buttons.
  3. Clicked the “Public” tab → “Public account 10,408.014036 ₳”, “Includes 57.475311 ₳ of staking rewards”, and Receive, Send and “Make private” (the highlighted teal button).
  4. Clicked “Make private” → the form: “10,408.014036 ₳ available (includes 57.475311 ₳ of rewards)”, Amount with Max, “Add tokens”, the notice “Making money private links your public account to the new private UTxOs, but not to any Seedelf name.” and a disabled Review with “Enter an amount.” under it.
  5. Hovered the ⓘ next to the title → tooltip “Move ADA, and any amount of your tokens, from your public account into your private balance.”
  6. Typed 20 in Amount → Review enabled.
  7. Clicked Review → “Review making it private”: “Nothing is sent until you press Make 20 ₳ private”, “Into your private balance 20 ₳”, “Network fee 0.178349 ₳”, “Staking rewards moved into your balance” with “57.475311 ₳, already counted in it”, “Total leaving your public account 20.178349 ₳”, “Public account after 10,387.835687 ₳”, “Private balance after 48 ₳”.
  8. Scrolled down the review → “To leave staking rewards out of payments, turn off “Use staking rewards when spending” in Settings.”
  9. Hovered the review’s ⓘ → tooltip “The money lands in new spots only your Seedelf key can open. It takes about a minute for the network to confirm them.”
  10. Clicked “Transaction details” → a technical dialog: the transaction id, “Spends 1 UTxO”, “Pays 2 outputs”, a contract address with “#0 · a contract · Seedelf Wallet’s contract · under a register” and 20 ₳, datum bytes, and a “Raw CBOR” tab.
  11. Closed the dialog → back on the review.
  12. Clicked “Make 20 ₳ private” → submitted at once, with no password prompt, and back on Home’s Public tab: a banner with a spinner, “Payment into your private balance sent. Waiting for the network…”, and a Cardanoscan link; “Public account” still 10,408.014036 ₳, “Updated 58 s ago”; Send and Make private greyed out, with “Wait for the last transaction to confirm” below them.
  13. Clicked the “Private” tab → “Private balance 28 ₳”, unchanged; Send, Make public and Create disabled; “Wait for the last transaction to confirm”.
  14. Hovered the disabled Send → tooltip “Wait for the last transaction to confirm”.
  15. Scrolled down on Private → found the Activity and UTxOs buttons.
  16. Clicked Activity → “Private activity”, with “Made private +20 ₳ Pending · 14:00” under Today.
  17. Clicked the pending entry → a detail dialog: “Amount +20 ₳”, “Network fee 0.178349 ₳”, the time, the transaction id and “View on Cardanoscan”; it didn’t repeat the word Pending.
  18. Closed the dialog, clicked Back → the private Home.
  19. Scrolled up, clicked the “Public” tab, scrolled down → found the public Activity button below the token list.
  20. Clicked Activity → “Public activity”; the newest entry was an older “Sent −4.185521 ₳ and 1 token”; the pending 20.18 ₳ transaction wasn’t listed.
  21. Clicked Back, then ran world confirm → the network put the transaction in block 5214889.
  22. Scrolled up on Public → still “Waiting for the network…” and 10,408.014036 ₳; nothing had updated yet.
  23. Waited 5 s → the wallet refreshed by itself: a check-mark banner “Made private” with Dismiss, “Public account 10,387.835687 ₳” with the “Includes … staking rewards” line gone, and Send and Make private enabled again.
  24. Clicked the “Private” tab → “Private balance 48 ₳”, all buttons enabled.
  25. Scrolled down and opened Activity → “Made private +20 ₳ 14:00”, with no Pending label.
  26. Ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Is the operation pending? Yes: the banner with a spinner (“Payment into your private balance sent. Waiting for the network…”), “Made private +20 ₳ Pending · 14:00” in private Activity, and the buttons disabled with “Wait for the last transaction to confirm”. Sureness High. Correct. The transaction was submitted and accepted, and stayed out of a block until world confirm; the wallet’s checks every 15 s found it unconfirmed until then.
Where is the ADA currently? In transit: the wallet still showed it as public (Public account 10,408.014036 ₳ and Private balance 28 ₳, both unchanged), sent but not yet confirmed; the review tooltip said it “lands in new spots only your Seedelf key can open”. Sureness Medium. Correct. On chain it was still in the public account: the 3 ₳ input unspent, the rewards not yet withdrawn, the 20 ₳ contract output not yet existing. The wallet had already set the input aside as spent, but Home kept its pre-send reading and never showed its “on its way” line, because it doesn’t read balances again after a send.
What balance do you expect after confirmation? Private 48 ₳ and Public 10,387.835687 ₳, from the review’s “after” rows; after confirmation these were exactly what was displayed. Sureness High. Correct.
Can you safely continue using the wallet? Partly: browsing and Receive stayed available, but Send, Make private, Make public and Create were disabled with “Wait for the last transaction to confirm”, so wait for confirmation before spending; nothing suggested anything was unsafe, and everything was enabled again after confirmation. Sureness High. Correct. While Home watches a sent transaction it holds back new payments, Create and staking actions until confirmation, for at most 10 minutes; Receive, Activity, UTxOs and browsing stay available. The hold stops the in-flight input from being spent twice.
What changed after confirmation, and did it match? About 5 s after world confirm: the check-mark banner “Made private” with Dismiss; Public 10,387.835687 ₳ with the rewards line gone; Private 48 ₳; the activity entry lost “Pending”; all buttons enabled again. It matched the review exactly. Sureness High. Correct, except the timing: the update came at the wallet’s next 15-second check, about 12.6 s after the block. The rewards line went because the withdrawal brought the rewards to 0.

Verifier notes.

Final result. The tester moved 20 ₳ into the private balance through the Public tab’s “Make private” without a wrong turn, and after confirmation both balances matched the review exactly (public 10,387.835687 ₳, private 48 ₳). While the transaction was pending, both Home balances kept their old values and public Activity didn’t list it, so the pending state showed only in the banner, the disabled buttons and private Activity.

T08 · Understand a pending payment

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel. Starting state: the funded wallet, unlocked, on Home’s Private tab (“Private balance 28 ₳”, one token); the Public tab holds “Public account 10,408.014036 ₳”, “Includes 57.475311 ₳ of staking rewards” and 6 tokens. Data: send 25 ADA to an ordinary preprod address (random key hashes, nobody’s wallet). The tester was told “You do not need to wait for anything in this test.” and given an extra command, world confirm, which puts the submitted transaction into a block at once, to use only after answering all the questions about the pending payment. The network confirms only on that command, which the tester ran about 1 min 51 s after sending. A public payment isn’t affected by the giveme.my refusal that stops private-balance payments in this environment. Explorer links open a “Page not available” placeholder here. The harness view prints each control’s accessible name beside its visible label (button “Send publicly” (shows “Send”)), so the tester saw names a sighted user doesn’t. Main-run trace (it predates the harness fix for “Details” toggles; none was involved).

Result. PASS WITH FRICTION · confidence Medium · 2 wrong turns · 22 navigation steps · prior product knowledge needed: no for sending, but the tester says that understanding the pending figures and the activity amount took knowledge of UTxO change and reward withdrawals plus arithmetic by hand, which an ordinary user couldn’t get from the UI.

Path taken.

  1. Ran stop, then start → Home on the Private tab: “Private balance 28 ₳”, Receive, Send, Make public, Create, and a Private Public switch at the top.
  2. Clicked the “Public” tab, because the task says “public payment” → “Public account 10,408.014036 ₳”, “Includes 57.475311 ₳ of staking rewards”, and Receive, Send and “Make private”, with “Make private” highlighted teal as if it were the main action.
  3. Scrolled down (400, then 300) to record the tokens as a baseline → 5 tokens listed, “View all 6 tokens”, then “Activity” and “UTxOs”.
  4. Scrolled up and clicked Send (accessible name “Send publicly”) → the form, titled “Send”: “10,408.014036 ₳ available (includes 57.475311 ₳ of rewards)”, To, Amount with Max, “Add tokens”, “Add recipient”, and a disabled Review with “Enter who it goes to.”
  5. Filled To with the address and Amount with 25 → “Sends to addr_test1qpka…cs65nlaz ·” with “Save to contacts”; Review enabled.
  6. Clicked Review → “Review the payment”: “Nothing is sent until you press Send”, “Amount 25 ₳”, “Network fee 0.174697 ₳”, “Staking rewards moved into your balance” with “57.475311 ₳, already counted in it”, “Total leaving your public account 25.174697 ₳”, “Public account after 10,382.839339 ₳”.
  7. Scrolled down the review → “To leave staking rewards out of payments, turn off “Use staking rewards when spending” in Settings.”, “It takes about a minute for the network to confirm.” and a “Transaction details” button.
  8. Opened “Transaction details” to look for change → “Spends 1 UTxO” (ad8d827f3731…fce0b7#0) and “Pays 2 outputs”: #0 25 ₳ to the recipient, #1 35.300614 ₳ to addr_test1qq8ac7…kt5dmn, each described as “a key that stakes”; neither labelled as the user’s or as change.
  9. Scrolled inside the dialog → “Network fee 0.174697 ₳”, “Valid until slot”, “Size”, “Signed 2 signatures, not sent yet”, and “Withdraws rewards” stake_test1… 57.475311 ₳.
  10. Scrolled back up and hovered “What this means” next to “Spends 1 UTxO” (after two remote-control retries) → tooltip “What each one holds isn’t in the transaction, and the wallet asks nobody: looking them up would tell whoever was asked which transaction you are reading.”
  11. Closed the dialog and clicked Send → submitted with no password prompt, back on the public Home: a banner with a spinner, “Payment sent. Waiting for the network…”, with “b0369603dc…b8a4b6 on Cardanoscan”; the balance still read 10,408.014036 ₳ (“Updated 1 min ago”); Send and Make private greyed out, with “Wait for the last transaction to confirm”.
  12. Hovered the greyed-out Send → tooltip “Wait for the last transaction to confirm”.
  13. Scrolled down to the tokens → the same 5 tokens and “View all 6 tokens”.
  14. Clicked Activity → the public activity list: no entry for the new payment (the newest was an older “Sent −4.185521 ₳ and 1 token”), and no “Payment sent” banner on this screen. (wrong turn)
  15. Clicked Back, then UTxOs → “5 UTxOs”: 10,338.538725 ₳ and 2 tokens; 3 ₳ and 4 tokens; 2 ₳; 2 ₳; 2 ₳. The spent ad8d827f UTxO was gone, the 35.300614 ₳ change wasn’t there, and nothing was marked pending. (wrong turn)
  16. Hovered “What this means” by the UTxOs title → a tooltip about locking UTxOs, nothing about pending ones.
  17. Went Back, scrolled up and clicked Refresh → “Updating…” for more than 3 s, then “Public account 10,440.31465 ₳”, “35.300614 ₳ of this is on its way: your last transaction isn’t confirmed yet” and “Includes 57.475311 ₳ of staking rewards”: the balance had gone up by 32.3 ₳ after a 25 ₳ payment, against the review’s “Public account after 10,382.839339 ₳”.
  18. Scrolled down and opened UTxOs again → the same 5 UTxOs; the change still not listed.
  19. Back, then Activity again → the same list, still no pending entry.
  20. Back, scrolled up, clicked the “on Cardanoscan” link → a new window, “Page not available” (the test’s placeholder).
  21. Closed the placeholder and clicked the “Private” tab → “Private balance 28 ₳”, unchanged; Send, Make public and Create greyed out; the same “Payment sent. Waiting for the network…” banner.
  22. Clicked the “Public” tab, then ran world confirm → the network put the transaction in block 5214889; the view didn’t change right away (still the pending banner and 10,440.31465 ₳).
  23. Waited 15 s, clicked Refresh, waited 15 s → “Payment confirmed” with Dismiss, “Public account 10,382.839339 ₳” (matching the review), the rewards line gone, Send and Make private enabled again; the wallet had apparently updated on its own before the Refresh.
  24. Scrolled down and opened Activity → a new Today entry, “Sent +32.300614 ₳”, at 14:02 to the recipient’s address: a positive amount on a sent 25 ₳ payment.
  25. Clicked that entry → the “Sent” dialog: “Amount +32.300614 ₳”, “Network fee 0.174697 ₳”, To the recipient, “Staking rewards collected 57.475311 ₳”, and the time.
  26. Closed the dialog and ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
How much ADA do I currently have (while pending)? Right after sending, “Public account 10,408.014036 ₳” (unchanged, “Updated 1 min ago”); after Refresh, “Public account 10,440.31465 ₳” with “35.300614 ₳ of this is on its way: your last transaction isn’t confirmed yet” and “Includes 57.475311 ₳ of staking rewards”. Neither matches the review’s 10,382.839339 ₳. Private was still 28 ₳. Sureness Low. Partly, and the failure is the UI’s, not the tester’s. With the pending payment counted, Public was 10,382.839339 ₳ (10,347.538725 ₳ the payment doesn’t spend, plus the 35.300614 ₳ change, which contains the withdrawn rewards); strictly on chain before the block it was 10,408.014036 ₳. 10,440.31465 ₳ was no real state: Home added the change on top of the unchanged reported rewards. Private: 28 ₳ plus 1 token, unchanged.
How much is leaving? Only from the review: “Total leaving your public account 25.174697 ₳” (25 ₳ plus the 0.174697 ₳ fee); the pending Home screen doesn’t say. Sureness High. Correct: 25 ₳ to the recipient plus a 0.174697 ₳ fee. The pending Home screen indeed shows no leaving amount, and the banner carries none.
Is any change returning? Apparently yes, 35.300614 ₳: Home’s “on its way” line and output #1 in Transaction details; neither calls it change, and the UTxOs list didn’t show it. Sureness Medium. Correct. Output #1 pays 35.300614 ₳ to the wallet’s own address and includes the withdrawn 57.475311 ₳ of rewards; the UTxOs list never shows pending outputs.
Did my tokens disappear? No: all 6 public tokens stayed listed while pending and after, and the private token was unchanged. Sureness High. Correct: the transaction moved no tokens.
Is the payment confirmed? Not while pending (“Payment sent. Waiting for the network…” with a spinner); after world confirm the banner became “Payment confirmed”. Sureness High. Correct: unconfirmed until block 5214889; the wallet’s 15-second watch then showed “Payment confirmed”.
Can I send another transaction? No, not while pending: Send and Make private greyed out on Public; Send, Make public and Create on Private; the tooltip “Wait for the last transaction to confirm”; only Receive available. Send was enabled again after confirmation. Sureness High. Correct. Home holds every new payment while the sent one is unconfirmed, for up to 10 minutes; Receive stays available.
Any point where I feared funds had disappeared? Yes, three: no Activity entry and no banner while pending; the balance rising to 10,440.31465 ₳ after Refresh; “Sent +32.300614 ₳” instead of about −25.17 ₳ after confirmation. Sureness High. No funds were lost. All three fear points are real product behaviour, not the harness.
After confirmation: what changed, and did it match? “Payment confirmed”; the balance became 10,382.839339 ₳, matching the review, and the rewards line disappeared; Send enabled again; Activity gained “Sent +32.300614 ₳” (detail: “Amount +32.300614 ₳”, fee 0.174697 ₳, “Staking rewards collected 57.475311 ₳”), where the tester expected about −25.17 ₳. Sureness High. Correct. Confirmed in block 5214889; the balance as reviewed, rewards at 0 after the withdrawal. The Activity amount is the 35.300614 ₳ change minus the 3 ₳ input and ignores the withdrawal; the true net change was −25.174697 ₳.

Verifier notes.

Final result. The tester sent 25 ₳ publicly without trouble, and the confirmed balance matched the review exactly. While the payment was pending, Home first showed the old balance and then, after a refresh, a higher one (10,440.31465 ₳) that counted the staking rewards twice; Activity had no pending entry; and the confirmed payment appeared as “Sent +32.300614 ₳”, so the tester could explain the numbers only with arithmetic of their own.

T09 · Recover from a failed private transaction build

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel. Starting state: the funded wallet, unlocked, on Home’s Private tab (“Private balance 28 ₳”). Data: something to attempt, a payment of 5 ADA from the private funds to another Seedelf Wallet user (the Seedelf tagged “This is a test.”). The task said not to reload the extension unless the UI gave no reasonable alternative. The tester was told that the outside service the wallet relies on for this kind of transaction is set to refuse the attempt and may keep refusing on retry; that the point is whether the wallet helps them understand what happened and get back to a state where they could review or try again, not whether a retry goes through; and that closing and reopening the wallet, or pressing F5, counts as a reload. The first refusal came from a harness route answering with giveme.my’s recorded refusal (HTTP 400, “Transaction Fails Validation”); any later attempt would be refused by the fake giveme.my, which refuses everything, so a successful retry is impossible here. The harness view prints each control’s accessible name beside its visible label (button “Send privately” (shows “Send”)). Main-run trace: it predates the harness fix for “Details” toggles, which caused the wrong turn at step 8. The tester reported seeing Seedelf-related skill and context lists in their own agent environment, which they say they deliberately ignored.

Result. PASS WITH FRICTION · confidence High · 1 wrong turn · 7 navigation steps · prior product knowledge needed: no, “Nothing was sent” and the “Refresh and review again” button were enough to recover, though fully understanding the error would take knowing what “collateral”, “UTxOs” and giveme.my are.

Path taken.

  1. Ran stop, then start → Home on the Private tab: “Private balance 28 ₳”, and under it round buttons Receive, Send, Make public and Create.
  2. Clicked Send (accessible name “Send privately”) → the Send form: “28 ₳ in your private balance”, a “Seedelf name” field, Amount, and a disabled Review.
  3. Filled “Seedelf name” with the recipient’s name → “Found: This is a test. · 5eed0e1f5468…8e0d63 ·” and a “Save to contacts” link.
  4. Filled Amount with 5 → Review enabled, and a note appeared: “Sending right after making money private is easy to match by timing: the two sit close together on chain.”
  5. Scrolled down 300 px and took a screenshot → Review visible at the bottom.
  6. Clicked Review → “Review the payment”: “Nothing is sent until you press Send”, To “This is a test.”, “Amount 5 ₳”, “Network fee 0.233912 ₳”, “Total leaving your private balance 5.233912 ₳”, “Private balance after 22.766088 ₳”, and “Send asks giveme.my to lend the collateral, then submits.”
  7. Clicked Send → a red box, “Nothing was sent. Something it spends may have been spent or changed since you reviewed it: make a new review to send it.”, and below it a small collapsed “▸ Details” toggle and a big “Refresh and review again” button where Send had been.
  8. Tried to open the “Details” toggle under the error: the exact-name click matched nothing, and after a scroll the looser click hit “Transaction details” instead → the “The transaction” dialog with the raw transaction (UTxOs, outputs, datum), not what the tester wanted. (wrong turn)
  9. Closed the dialog with its X → back on the review, the error still there.
  10. Clicked the small “▸ Details” toggle under the red box (by its screen position) → “giveme.my, which lends the collateral, refused this transaction: Transaction Fails Validation. Its UTxOs may have been spent since the review: refresh, then review it again.”
  11. Clicked “Refresh and review again” → the review reloaded with the same figures, the status “Review updated just now. Check it again.” above a fresh Send button, and the error gone; the tester counted the goal reached here.
  12. Scrolled up and clicked Back, to check that nothing had moved and the inputs were kept → the Send form with the recipient and Amount 5 still filled in, and “28 ₳ in your private balance”.
  13. Took a screenshot and ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Does the error tell you what happened? Partly. The headline, “Nothing was sent. Something it spends may have been spent or changed since you reviewed it: make a new review to send it.”, says clearly that no money moved but suggests stale inputs as the cause; the actual event is only in the collapsed Details: “giveme.my, which lends the collateral, refused this transaction: Transaction Fails Validation. Its UTxOs may have been spent since the review: refresh, then review it again.” Sureness High. Correct. giveme.my’s stand-in refused the collateral request (HTTP 400, “Transaction Fails Validation”) before the wallet signed anything; nothing was sent, and nothing the payment spends had changed. The headline gets “Nothing was sent” right and guesses a spent or changed input, which was false here; only Details names the refusal.
Does the error tell you what to do next? Yes: “make a new review to send it”, the big “Refresh and review again” button, and Details’ “refresh, then review it again”; no guidance if the refusal keeps happening. Sureness High. Correct. The only ways on are “Refresh and review again”, which rebuilds the review from a fresh read of the chain, and Back. The same footer shows on every refusal, with no advice for repeated ones; in this environment a retry would be refused again.
Did money move? No: “Nothing was sent.”, and after going Back the form still showed “28 ₳ in your private balance”. Sureness High. Correct: the refusal comes before signing, and nothing was submitted. The 28 ₳ on the form is Home’s earlier reading passed in, not a fresh read, but correct here.
Could you get back to a valid review or retry state without reloading? Yes: “Refresh and review again” showed the review again with Send enabled and “Review updated just now. Check it again.”; Back also returned to the filled-in Send form. Sureness High. Correct: a rebuilt review with Send enabled, and the form with its inputs kept, with no reload. In this harness, Send on the refreshed review would be refused again.

Verifier notes.

Final result. After the forced refusal the wallet said “Nothing was sent”, and its one prominent button, “Refresh and review again”, brought the tester back to a valid review with Send enabled, without a reload; Back kept the form. The friction is in the explanation: the headline guesses stale inputs, while the actual giveme.my refusal sits under a small collapsed “Details”, in raw text, with no advice should it keep happening.

T10 · Swap ADA for MIN

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel (a window of its own, not docked). Starting state: the funded wallet, unlocked, on Home’s Private tab (28 ₳ private; 10,408.014036 ₳ public, including 57.475311 ₳ of staking rewards); the task text gave the wallet password. The tester saw the scenario, goal and questions, not the task title, and one note: “Stop when you are ready to authorize the swap; do not authorize it.” The task text carried no warning about the outside service that refuses every request (BUILDER-NOTES lists T10 among the tasks with such a note, but that sentence sits only in the harness’s own config, which the harness never shows to testers). Pressing “Start swap” would have ended at “Nothing was sent…”, because spends from the private balance can’t complete in this environment (BUILDER-NOTES limitation 1); the tester stopped before it, so this was never reached. The quote is the harness’s model of one recorded Minswap quote (10 ₳ → 906.5941 MIN, a 2 ₳ DEX fee, a 2 ₳ deposit, minimum = amount out / (1 + slippage)), and Lovejoin’s pool count comes from the fake Koios. Main-run trace (it predates the harness fix for “Details” toggles; none was involved).

Result. PASS WITH FRICTION · confidence Medium · 2 wrong turns · 11 navigation steps · prior product knowledge needed: no, the dApps card itself says “Swap tokens”; reading the costs took general DeFi knowledge (order deposit, batcher, collateral, slippage) and the tester’s own arithmetic.

Path taken.

  1. Ran stop, then start → Home’s Private tab: “Private balance” “28 ₳”, Receive / Send / Make public / Create, a Tokens card, and a “dApps” row cut off at the bottom edge; nothing mentioned swapping.
  2. Scrolled down the Private home looking for a Swap action → only 186 px more: dApps, Activity, UTxOs and the version footer.
  3. Scrolled up and clicked “Public”, guessing a swap would sit with the large public balance → “Public account” “10,408.014036 ₳”, Receive / Send / Make private, “Staking and governance” and Tokens (wrong turn).
  4. Scrolled down twice through the whole Public view → reached “View all 6 tokens”, Activity and UTxOs; no swap and no dApps row (wrong turn).
  5. Scrolled up and clicked “Private” again → back on the Private home.
  6. Clicked “dApps” → “Used privately, from one-time accounts”, a long privacy notice about one-time accounts, and two cards: “Minswap” (“Swap tokens, routed across Cardano’s DEXes”) and “Lovejoin” (“Mix ADA in 10 ₳ boxes…”).
  7. Clicked the Minswap card → “Swaps, each from a one-time account”, “No swaps yet.”, a privacy notice and a big “New swap” button.
  8. Clicked “New swap” → the swap form (the tester counts this as reaching it): a “Slippage: 1%” chip; “You pay” 0.0 ADA with “28” by a wallet icon and Half/Max; “You receive” 0.0 with “+ Select token”; a disabled “Select a token” button.
  9. Filled “You pay” with 10 → the bottom button still read “Select a token” (disabled).
  10. Clicked “+ Select token” → a “You receive” picker with sections “In your private balance” (ADA 28), “On the wallet’s list” (tUSDM; MIN “Minswap (preprod)”) and “On Minswap”.
  11. Clicked “MIN” → the picker closed and a quote appeared: 906.5941 MIN, “1 ADA ≈ 90.6594 MIN”, a refresh icon, a chevron and an enabled “Review swap”.
  12. Clicked the chevron (the quote’s details) → the details expanded.
  13. Scrolled down → “Asks for at least 897.61792 MIN”, “Price impact 0.34%”, “Slippage 1%”, “Route Minswap”, “DEX fee 2 ₳”, “Order deposit 2 ₳, back with the proceeds”.
  14. Clicked “Review swap” → the review opened about 300 px down, keeping the form’s scroll: first the “Asks for at least…” line, a yellow warning and the “First, a one-time account is funded” table, with the title out of view (wrong turn).
  15. Scrolled up 300 px → “Review the swap”, “Nothing is sent until you press Start swap”, “You pay 10 ₳”, “You receive ≈ 906.5941 MIN”, “Asks for at least 897.61792 MIN · 1% slippage · 0.34% price impact · through Minswap”, and “Seedelf Wallet relies on Minswap for the minimum of 897.61792 MIN: it asks Minswap for it, but can’t read it back from the order Minswap builds.”
  16. Scrolled down 450 px → the funding table: “To Private session 1”, “For the swap 16 ₳”, “The swap 10 ₳”, “DEX fee 2 ₳”, “Order deposit 2 ₳, back with the proceeds”, “Room for network fees 2 ₳, what’s left comes back”, “Kept aside for contracts 5 ₳, comes back”, “Network fee 0.233208 ₳”, “Change, back to your private balance 3.766792 ₳”.
  17. Scrolled down 450 px → “Then it runs by itself”: 1 “Funded”, 2 “Order placed”, 3 “Filled”, 4 “Back in your private balance”, then “Start swap approves the whole run…”.
  18. Scrolled down 400 px, then 400 more, to the end → “Three transactions, three network fees: the cost of keeping your public account out.”, the “Bring it back through Lovejoin” switch already on, a pool warning (0 boxes), “Lovejoin hasn’t had a third-party audit…”, “As it’s sent, giveme.my is asked to lend the collateral.” and a “Transaction details” button.
  19. Clicked “Transaction details” to work out the real total → dialog “The transaction”: “Spends 1 UTxO”, “Pays 3 outputs”: #0 16 ₳ to the one-time account, #1 3.766792 ₳ change to “Seedelf Wallet’s contract”.
  20. Scrolled inside the dialog → “#2 · a key that stakes 5 ₳” (the same one-time address), “Collateral: 1 UTxO”, “Comes back 4.650188 ₳”, “Network fee 0.233208 ₳”, “Signed Not yet”.
  21. Closed the dialog → back at the bottom of the review with “Start swap” pinned at the bottom; stopped there as instructed, without pressing it.
  22. Ran stop → the browser closed.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
How much ADA am I spending? 10 ₳ (“You pay 10 ₳”). Sureness High Correct. The swap takes 10 ₳; costs come on top (the funding sends 16 ₳ plus 5 ₳ kept aside and pays a 0.233208 ₳ fee).
Approximately how much MIN am I receiving? ≈ 906.5941 MIN (“1 ADA ≈ 90.6594 MIN”). High Correct.
What is the minimum I might receive? 897.61792 MIN (“Asks for at least 897.61792 MIN”), with the warning that the wallet relies on Minswap for it and can’t read it back. Medium Correct: Minswap’s minimum at 1% slippage (906.5941 / 1.01), which the wallet can’t verify inside the order Minswap builds.
What is the slippage? 1% (price impact shown separately as 0.34%). High Correct; 1% is the default.
What fees or deposits are involved? DEX fee 2 ₳ (not refunded); order deposit 2 ₳, back with the proceeds; room for network fees 2 ₳, what’s left comes back; kept aside for contracts 5 ₳, comes back (“collateral, lent through giveme.my”); first network fee 0.233208 ₳; three transactions, three fees, only the first given as a number. Medium Partly. The 5 ₳ is the user’s own ADA (output #2), kept at the one-time account as its own collateral; giveme.my lends a separate UTxO for the funding transaction. No Minswap fee (zero, so its row is hidden) and no Lovejoin fees (the pool has no room, fixture state). The rest is right.
What total amount leaves my balance? Not stated by the review. Computed 16 + 5 + 0.233208 = 21.233208 ₳ leaving in the first transaction, with 3.766792 ₳ change from one 25 ₳ UTxO; net roughly 12.2 to 14.2 ₳ once the deposit, collateral and unused fee room come back. Low Correct, but the UI never states it. After the funding the private balance would read 6.766792 ₳; the net cost is about 12.233208 ₳ plus the two later fees, which aren’t shown and come out of the 2 ₳ room.
How many navigation decisions before the swap form? 5 clicks on the actual route (Public tab, wrong; Private tab; dApps; Minswap; New swap); shortest route 3 clicks (dApps → Minswap → New swap) plus scrolling to see the dApps row. High Correct: 5 clicks and 5 scrolls; shortest route 3 clicks. The dApps label is already visible at the bottom edge of the first screen, so the scroll isn’t strictly needed. The report’s observations say “4 navigation decisions” for the shortest route while listing three.

Verifier notes.

Final result. After a detour through the Public tab, the tester found the swap under Private → dApps → Minswap, reached “Review the swap” with “Start swap” unpressed and answered every question, but had to work out the total leaving the balance from the funding table and the transaction details. The verifier keeps PASS WITH FRICTION and confirms the friction is the product’s.

T11 · Determine whether Lovejoin can currently mix

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel (a window of its own, not docked). Starting state: the funded wallet, unlocked, on Home’s Private tab (28 ₳ private; 10,408.014036 ₳ public); the task text gave the wallet password. The tester saw only the scenario (“You want to privately mix some ADA”) and goal, not the task title, which names Lovejoin. They were told that one outside service refuses every request here, so after confirming something the wallet may say nothing was sent, and that this refusal should not count as a wallet failure; “Review” never became available, so that point was never reached. Lovejoin’s pool is read from the fake Koios, which reports 0 other boxes, so whether a mix can start was settled by fixture data. Main-run trace (it predates the harness fix for “Details” toggles; none was involved).

Result. PASS WITH FRICTION · confidence Medium · 0 wrong turns · 5 navigation steps · prior product knowledge needed: no, the tester had to guess that a mixer counts as a “dApp”, after which the card’s “Mix ADA in 10 ₳ boxes” made it obvious, and the screen spells out “Try again later”.

Path taken.

  1. Ran stop, then start → Home’s Private tab: “Private balance 28 ₳”, Receive / Send / Make public / Create, a Tokens card and a “dApps” row at the bottom edge.
  2. Took a screenshot of Home and looked for anything named mix, mixer or privacy → the main actions are Receive, Send, Make public, Create; nothing obvious.
  3. Scrolled down 300 px on Home → the rows dApps, Activity, UTxOs and the footer “Seedelf Wallet 1.1.0 · Preprod”.
  4. Clicked “dApps” → the dApps page opened already scrolled about 186 px down: cards “Minswap” (“Swap tokens, routed across Cardano’s DEXes”) and “Lovejoin” (“Mix ADA in 10 ₳ boxes: your boxes, and bringing them back”), plus notes on one-time accounts and “Let sites connect”.
  5. Scrolled up 300 px → the header: “dApps”, “Used privately, from one-time accounts”.
  6. Clicked the “Lovejoin” card → the Lovejoin screen, all above the fold: “Your boxes in the pool None”, Mix tabs “Private balance” / “Public account”, “Boxes of 10 ₳” “1 box, 10 ₳” with disabled − and + buttons, “Lovejoin’s pool” “0 other boxes to mix with; this needs 8”, “Mixed 2 waves deep, 4 mixes”, “Mixing 10 ₳ costs about 3.8 ₳, 38% of it”.
  7. Hovered the disabled “One box more” (+) → no tooltip.
  8. Scrolled down 300 px → “Into a one-time account 15.3 ₳, and 5 ₳ of collateral”, “Back later” “Each box on its own, after 1 to 6 hours, while Seedelf Wallet is unlocked”, and a paragraph on boxes coming back.
  9. Scrolled down 300 px → an amber warning “Lovejoin hasn’t had a third-party audit…”, a greyed-out “Review”, and amber text under it: “Lovejoin’s pool has 0 other boxes to mix with, and one box 2 waves deep needs 8. Try again later.”
  10. Hovered the disabled “Review” → no tooltip, but the reason is already written right under the button.
  11. Scrolled down 300 px to the bottom → a teal note about boxes waiting in the pool, giveme.my’s collateral and timing, ending “Lovejoin hides your boxes from people reading the chain, not from Koios or giveme.my, which see your device send both ends.” (cut off at “se…” in the view text, whole in the screenshot).
  12. Scrolled back to the top and clicked Refresh → “Updated 30 s ago” became “Updated just now”; the pool still read 0 other boxes, needs 8.
  13. Clicked the “Public account” tab under Mix → the source switched to the public account; pool status and cost unchanged.
  14. Scrolled down 600 px on the Public account tab → “From your public account 15.3 ₳, its collateral backing the mixes”; “Review” still disabled with the same reason.
  15. Ran stop → the browser closed.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Can a mix currently start? No: “0 other boxes to mix with; this needs 8”, “Review” disabled, and under it “Lovejoin’s pool has 0 other boxes to mix with, and one box 2 waves deep needs 8. Try again later.” Sureness High Correct. The fixture’s pool reports 0 other boxes; at the default depth of 2, one box needs 8, and one wave deep would need 2, so the hint the page gives when a shallower mix would fit doesn’t apply either. The 0 is fixture data; on real preprod the answer depends on the live pool.
What will a mix cost? “Mixing 10 ₳ costs about 3.8 ₳, 38% of it” for one 10 ₳ box; separately 15.3 ₳ into a one-time account plus 5 ₳ of collateral from the private balance, or “15.3 ₳, its collateral backing the mixes” from the public account; unused amounts and collateral said to come back. Medium Partly. The 3.8 ₳ is an estimate for the 4 mixes only (4 × 0.95 ₳; preprod measured about 0.877 ₳ a mix, and the unused part comes back). 15.3 ₳ is the 10 ₳ box + 3.8 ₳ for the mixes + an unnamed 1.5 ₳ reserve for the deposit’s fee and the change. The funding’s network fee appears only in the review, and each box’s return costs about 0.3 ₳, which this page doesn’t state. The all-in cost is somewhat above 3.8 ₳, and the page gives no total.
Is availability visible before committing to a review? Yes: the pool row is above the fold, “Review” is disabled, the reason is printed under it, and nothing had to be pressed or confirmed. High Correct.

Verifier notes.

Final result. Without pressing anything risky, the tester established that no mix could start (“0 other boxes to mix with; this needs 8”, “Review” disabled, “Try again later”) and found the headline cost, but could not reconcile the cost figures into a total. The verifier keeps PASS WITH FRICTION: the empty pool is fixture data, while the way the wallet presents it, and the friction around it, are real.

T12 · Stake ADA

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel (a window of its own, not docked). Starting state: the funded wallet, unlocked, on Home’s Private tab (28 ₳ private), with the “unstaked” override: the public account is “Not staking”, with no rewards, so it shows 10,350.538725 ₳; the task text gave the wallet password. The tester saw the scenario, goal and questions, not the task title. Network responses were slowed on purpose (every Koios call waits 4 s), and the tester was told: “In this test, responses from the network are slow (several seconds each), as on a congested connection. You don’t need to wait for the network to confirm anything in this test: observe and answer from what the wallet shows you.” The network never confirms in this task; not reached, since the tester stopped at the review. Main-run trace: it predates the harness fix for “Details” toggles, which is why the first click on “Details” (step 12) didn’t register. The tester disclosed that their own session context showed the owner’s email domain, which matches the LOGIC pool’s name (“Logical Mechanism”); they say they chose LOGIC on pledge and saturation after HODLr failed, but can’t fully rule out that the name stood out.

Result. PASS WITH FRICTION · confidence Medium · 3 wrong turns · 11 navigation steps · prior product knowledge needed: no, tooltips explain the terms (saturation, margin, cost, pledge, deposit, epochs), though with no recommendation and no health indicator, judging whether a pool is “healthy” took some outside understanding.

Path taken.

  1. Ran stop, then start → Home’s Private tab: “Private balance 28 ₳”, Receive / Send / Make public / Create, a Tokens card and a dApps row; nothing about staking.
  2. Scrolled down the Private tab looking for staking → only dApps, Activity, UTxOs and the version footer (wrong turn).
  3. Scrolled back up and clicked “Public” → “Public account” “10,350.538725 ₳”, Receive / Send / Make private, and above the fold a card “Staking and governance” “Not staking: stake to earn rewards” “Voting power: Not delegated”.
  4. Clicked “Staking and governance” → “Not staking” with “The first time takes a 2 ₳ deposit, which comes back when you stop.”, a big “Choose a pool”, then the Voting power / “Delegate” card and a DRep section.
  5. Hovered the (i) next to “Not staking” → tooltip “Stake your public account with a pool to earn rewards every epoch (5 days). Your ADA stays in your account, free to spend.”
  6. Scrolled down → the green note “Staking and voting are public: anyone can see which pool and DRep your public account chose. Private money can’t be staked: it has no staking part, so while it’s private it earns nothing…”, and “Be your own DRep” “Registering locks up 500 ₳…”.
  7. Clicked “Choose a pool” → “Updating…”, then “559 live pools”, a search box, a sort menu “Ticker, A to Z” and rows such as “8964 1.7% saturated … 0% margin · 170 ₳ cost”.
  8. Clicked the sort menu → the tester saw no open option list in the screenshot, got the options from the error of a deliberately invalid select command (“Ticker, A to Z”, “Least saturated”, “Lowest margin”, “Lowest cost”, “Highest pledge”) and pressed Escape (wrong turn).
  9. Scrolled the alphabetical list about 1,200 px → pools from 0% to 60.8% saturated (ALFA), margins from 0% to 10%; none flagged as oversaturated or retiring.
  10. Scrolled back up and sorted by “Highest pledge” → top rows SWM01 (0% saturated, 1.5% margin, 340 ₳ cost, 53,000,000 ₳ pledge), LOGIC (18.8%, 2%, 170 ₳, 5,500,000 ₳), GRADA (75.4%), HODLr (14.3%, 0%, 170 ₳, 4,500,000 ₳); pledge now shows in each row.
  11. Clicked HODLr, the best value to the tester → “Reading the pool’s details…”, then “Couldn’t read the pool’s details just now.” with “Details”, “Try again” and a disabled “Stake with HODLr” (wrong turn).
  12. Clicked “Details” (the first attempt, by button name, didn’t register; the second, by text, did) and hovered the disabled stake button → “Koios has no details for this pool right now: it may have retired. Try again later, or choose another pool.”; no tooltip on the button.
  13. Clicked “Try again” → the same failure, “Couldn’t read the pool’s details just now.”
  14. Clicked Back → the pool list, still sorted by Highest pledge.
  15. Clicked LOGIC → “Logical Mechanism”, “Saturation 18.8%”, “Margin 2%”, “Cost per epoch 170 ₳”, “Pledge 5,500,000 ₳”, “Delegators 103”, “Blocks made 138,553”, “The Stake Pool For Logical Mechanism.”, the full pool ID, the 2 ₳ deposit note and an enabled teal “Stake with LOGIC”.
  16. Hovered the small (i) under the details card → “Saturation: how full the pool is; past 100%, every delegator earns less. Margin: the share of rewards the pool keeps after its cost. Cost: what it takes each epoch, before the margin. Pledge: what its owners stake in it themselves. Blocks made: how many it has added to the chain.”
  17. Scrolled down to see the rest of the pool page → only the deposit note and the footer.
  18. Clicked “Stake with LOGIC” → “Building…” with Back disabled, then “Review: start staking”: “Nothing is sent until you press Stake with LOGIC”, “Stake with LOGIC”, “Deposit 2 ₳”, “Network fee 0.179361 ₳”, “Public account after 10,348.359364 ₳”, the pool ID, “Registering your account to stake takes the deposit. Stopping staking gives it back.”, “This is public: it names your public account.”, “It takes about a minute for the network to confirm.” and a “Stake with LOGIC” button.
  19. Hovered the (i) next to the review title → “Rewards start after about 15 to 20 days (the network takes a snapshot, then pays out an epoch later), then come every 5 days.”
  20. Clicked “Transaction details” → dialog “The transaction”: “Spends 2 UTxOs”, “Pays 1 output” to an addr_test1qq8ac… address, “#0 · a key that stakes 2.820639 ₳”.
  21. Scrolled inside the dialog (the first try failed because two texts matched the target; the second worked) → “Network fee 0.179361 ₳”, “Valid until slot 135558247”, “Size 545 bytes”, “Signed 3 signatures, not sent yet”, “1 Certificate” “Registers a stake key and stakes with a pool” “2 ₳ deposit” pool1rccstu…vng0tg.
  22. Closed the dialog and stopped at the review without pressing the final “Stake with LOGIC” (the task said to prepare), then ran stop → the review still shown, nothing sent.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Does my ADA stay spendable? Yes: the “Not staking” (i) says “Your ADA stays in your account, free to spend.”; only a refundable 2 ₳ deposit leaves (“comes back when you stop”); public account only (“Private money can’t be staked”); the review doesn’t restate it. Sureness High Correct. The built transaction returns its 2.820639 ₳ change to the account’s own address; only the 2 ₳ deposit and the 0.179361 ₳ fee leave, and the rest stays spendable.
What does the pool charge? LOGIC: Margin 2% (“the share of rewards the pool keeps after its cost”) and Cost per epoch 170 ₳; separately, a 2 ₳ refundable deposit and a 0.179361 ₳ network fee. High Correct; the deposit and fee are the transaction’s costs, not the pool’s.
Does the pool look healthy? It seems so, by inference only: the details loaded, Blocks made 138,553, Delegators 103, Pledge 5,500,000 ₳, no retiring warning; no explicit health indicator. Medium Correct. The wallet’s own checks raised no warning for LOGIC (not retired or retiring, 18.8% saturated, live pledge not below its pledge); the UI signals health only by the absence of warnings, never positively.
Is it oversaturated? No: saturation 18.8%, and the tooltip says problems start “past 100%”. High Correct.
What will actually happen when I confirm? One transaction from the public account with one certificate, “Registers a stake key and stakes with a pool” (LOGIC), taking a 2 ₳ deposit plus a 0.179361 ₳ fee and leaving 10,348.359364 ₳; public (“it names your public account”); confirms in about a minute; rewards after about 15 to 20 days, then every 5 days. High Correct. Pressing “Stake with LOGIC” submits a transaction the wallet already signed at review, without asking for a password: it spends 2 public UTxOs (5 ₳), returns 2.820639 ₳ to the account’s own address and carries one combined registration-and-delegation certificate. Voting power stays “Not delegated”.

Verifier notes.

Final result. The tester reached “Review: start staking” for LOGIC, stopped before the final “Stake with LOGIC” and answered all five questions correctly from the UI, after a detour through a pool whose details wouldn’t load. The verifier traces that detour to a fixture gap and the sort-menu complaint to a misread, and keeps PASS WITH FRICTION for the real friction left: staking hidden from the default tab, no positive pool-health signal, signing at review without a password prompt, and a review that doesn’t restate spendability.

T13 · Stop staking

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel (a window of its own, not docked). Starting state: the funded wallet, unlocked, on Home’s Private tab (28 ₳ private; 10,408.014036 ₳ public, including 57.475311 ₳ of rewards; staked with LOGIC; voting power delegated to “Always abstain”); the task text gave the wallet password. The tester saw the scenario and goal, not the task title, and was told: “You don’t need to wait for the network to confirm anything in this test: observe and answer from what the wallet shows you.” The task said to do it, and this is the one trace of T10 to T14 in which a transaction was submitted; the fake Koios accepted it, but the network never confirms in this task, so the wallet stayed on “… sent. Waiting for the network…” and held new payments back (BUILDER-NOTES limitation 2), and the after-confirmation state couldn’t be seen. Main-run trace (it predates the harness fix for “Details” toggles; none was involved).

Result. PASS WITH FRICTION · confidence High · 0 wrong turns · 7 navigation steps · prior product knowledge needed: no, the labels “Public”, “Staking and governance” and “Stop staking” were enough; knowing what a DRep is helped with the side effect on voting power but wasn’t needed to finish.

Path taken.

  1. Ran stop, then start → the wallet opened on the Private tab: “Private balance 28 ₳”, Receive / Send / Make public / Create, Tokens, dApps.
  2. Clicked “Public”, guessing that delegation belongs to a normal public account → “Public account” “10,408.014036 ₳”, “Includes 57.475311 ₳ of staking rewards”, and a card “Staking and governance” “Staking with LOGIC” “Voting power: Always abstain” with a chevron.
  3. Clicked the “Staking and governance” card → “Your pool” “LOGIC · Logical Mechanism”, the pool ID, “Pool details”, a big “Change pool” button, “Rewards 57.475311 ₳” with “Withdraw rewards”; no stop option above the fold.
  4. Scrolled down 300 px instead of trying “Change pool” → “Voting power” “Delegated to Always abstain”, “Change who votes for you”, “Be your own DRep” with “Become a DRep”, and “Governance actions”.
  5. Scrolled down 400 px more → a red text row “Stop staking” with a chevron, under the DRep section and above a privacy note; the bottom of the page.
  6. Clicked “Stop staking” → the review opened already scrolled to its bottom (288 px hidden above): “Deposit back 2 ₳”, “Network fee 0.173685 ₳”, “Public account after 10,409.840351 ₳”, a yellow warning box with bullet points, “Transaction details” and a big red “Stop staking” button; the title and first rows out of view.
  7. Scrolled up 400 px → “Review: stop staking”, “Nothing is sent until you press Stop staking”, “Staking Stops”, “Rewards withdrawn 57.475311 ₳”, “Deposit back 2 ₳”, “Network fee 0.173685 ₳”, “Public account after 10,409.840351 ₳”.
  8. Scrolled down and clicked “Transaction details” → dialog “The transaction”: the transaction ID, “Spends 1 UTxO”, “Pays 1 output” of 62.301626 ₳ to the tester’s own address (“a key that stakes”), “Network fee 0.173685 ₳”, “Valid until slot 135558170”.
  9. Clicked “Close” → back on the review, still at the bottom, with the warnings and the red button.
  10. Wrote down what they expected, then clicked the red “Stop staking” → back on the Public home with “Stop staking sent. Waiting for the network…” and “fea05649a3…8dd638 on Cardanoscan”; balance still 10,408.014036 ₳; Send and Make private greyed out with “Wait for the last transaction to confirm”; the card still read “Staking with LOGIC”.
  11. Waited 20 s → nothing changed while it waited for confirmation.
  12. Ran stop → the browser closed.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Before confirming, what did I believe would happen? One public transaction would deregister the public account from staking; the LOGIC delegation and the voting-power delegation (“Always abstain”) would both end; the 57.475311 ₳ of rewards would be withdrawn in the same transaction, the 2 ₳ deposit would come back, and a 0.173685 ₳ fee would leave 10,409.840351 ₳; the last epoch or two of unpaid rewards would be lost and no more would come; the ADA never leaves the public account; staking again needs the deposit again. Sureness High Correct. The submitted transaction does exactly this: a stake-key deregistration with the 2 ₳ refunded, a 57.475311 ₳ withdrawal, one 62.301626 ₳ output to the account’s own receive address, a 0.173685 ₳ fee. Deregistration ends both delegations; the last unpaid rewards go to the treasury.
Routine, destructive, reversible, permanent, or something else? Consequential but reversible. Not routine: a bright red confirm button, a yellow warning box, and a red entry tucked at the bottom of the page. Not permanent or destructive to funds: “You can start staking again any time, with the deposit again”, the deposit comes back, rewards are withdrawn rather than lost, and “Nothing is sent until you press Stop staking”; only the most recent unpaid rewards are lost, as the warning says. High Correct. The design means it as consequential and reversible, not destructive: a danger-styled entry row and confirm button with a warning callout, and the stake key can be registered again at any time. Only the fee and the last unpaid rewards are lost.

Verifier notes.

Final result. The tester found “Stop staking” at the bottom of the staking page, explained its consequences correctly before confirming, and submitted it; the decoded transaction matches the review exactly. The friction was the control’s placement, the review opening scrolled down to its red confirm button, the vote delegation ending with it, and an unchanged Home card while pending; the verifier keeps PASS WITH FRICTION.

T14 · Understand and vote on a governance proposal

Test notes. Surface: a full browser tab, 1280x720. Starting state: the funded wallet, unlocked, on Home’s Private tab (28 ₳ private; 10,408.014036 ₳ public; staked with LOGIC), with the “drep” override: the account is its own registered DRep (active until epoch 340, voting power 10,408.014036 ₳, 1 delegator, 500 ₳ deposit) and its vote is “Delegated to Your own DRep”; the task text gave the wallet password. The tester saw the scenario and goal, not the task title, and the note “Prepare the vote up to the point of confirming it; you may stop there.” This run predates the harness’s proposals override: the fixture’s recorded preprod proposal list has no title or summary for any of its seven actions (Koios hadn’t read their anchors when it was recorded), and no proposal dates or treasury withdrawal amounts and recipients. The harness also blocks outside pages, so the IPFS gateway and Cardanoscan open a “Page not available” placeholder (BUILDER-NOTES limitation 6). BUILDER-NOTES records a rerun, T14r, with test-written proposal metadata and served anchor documents; this is the original run. “Your vote: Not voted” on every action comes from the fixture’s fixed vote list. The network never confirms in this task (not reached). Main-run trace (it predates the harness fix for “Details” toggles; none was involved).

Result. PASS WITH FRICTION · confidence Medium · 4 wrong turns · 27 navigation steps · prior product knowledge needed: yes, finding voting meant knowing that DRep voting belongs to the public or staking side, and working out what a specific proposal does needed off-wallet content. Verifier: BLOCKED, because the failure to understand any proposal came from the fake data and the blocked outside pages, not the wallet, so the task’s main question couldn’t be tested; the part that could be (finding the actions and preparing the vote) passed with real friction.

Path taken.

  1. Ran stop, then start → the wallet’s tab opened on the Private tab: “Private balance 28 ₳”, Receive / Send / Make public / Create, Tokens, dApps, Activity.
  2. Took a screenshot and scrolled down the Private home → only UTxOs and the version footer; nothing about governance or DReps (wrong turn).
  3. Clicked “Public” → 10,408.014036 ₳ and a card “Staking and governance” “Staking with LOGIC” “Voting power: Your own DRep”.
  4. Clicked the “Staking and governance” card → “Your pool” LOGIC, “Rewards 57.475311 ₳”, “Voting power” “Delegated to Your own DRep”, “Change who votes for you”.
  5. Scrolled down 400 px → “Your DRep”: “Status Active until 30 Jan 2027 (epoch 340)”, “Voting power 10,408.014036 ₳”, “Profile None”, “Deposit 500 ₳”, the DRep ID and a large teal “Governance actions” button.
  6. Clicked “Governance actions” → 7 entries listed only by type (“Info action” ×5, “Treasury withdrawal” ×2), each with a deadline such as “Open until 22 Oct 2026 (epoch 320)”, a short hash such as “53fbef38…#0 · proposed in epoch 314” and “Not voted”; no titles.
  7. Scrolled down to see the whole list, then back up → 7 actions (53fbef38, 588e7032, 322066e8, 139444b2, 2f9a101c, 6056be57, 375f7ed7), none with a title.
  8. Clicked the first Info action (53fbef38…#0) → “Type Info action”, “Voting Open until 22 Oct 2026 (epoch 320)”, “Proposer’s deposit 1,000 ₳”, “Your vote Not voted”, “Koios has no title or summary for it. Its full text is at the address below, written by whoever proposed it.”, a “Read its full text” link, an IPFS privacy note, the Action ID and an ipfs:// address.
  9. Hovered the (i) by the “Info action” heading → “An info action asks DReps, stake pools and the constitutional committee for their view: it changes nothing on chain, however the vote goes.”
  10. Scrolled down the detail page → “See it on Cardanoscan”, the Vote section (“Yes” / “No” / “Abstain”) and a note that every vote is public and stays on chain for good.
  11. Clicked “Read its full text” → a new tab: “Page not available. This page is outside the test and can’t be shown here.” (wrong turn)
  12. Closed that tab and clicked Back, which failed because Back was scrolled out of view; scrolled up and clicked Back → the list (wrong turn).
  13. Opened the second Info action (588e7032…) → the same “Koios has no title or summary for it”, only an ipfs://Qm… address.
  14. Back, then opened Treasury withdrawal 322066e8… → the same message, with no amount and no recipient shown.
  15. Hovered the (i) on the Treasury withdrawal page → “A treasury withdrawal pays ADA out of Cardano’s treasury, the fund that fees and new ADA flow into, to the addresses it names, once enough DReps and the constitutional committee vote yes.”; the screen itself showed no addresses and no amount.
  16. Back, then opened Info action 139444b2… → the same: no title or summary.
  17. Back, then opened Treasury withdrawal 2f9a101c…, Info action 6056be57… and Info action 375f7ed7… in turn (a few Back clicks failed with Back scrolled out of view) → every one said “Koios has no title or summary for it”; only IPFS addresses and action IDs.
  18. Clicked “See it on Cardanoscan” on 375f7ed7 → a new tab: “Page not available” (wrong turn).
  19. Closed that tab, scrolled up, Back, opened 53fbef38… again, scrolled down and clicked “Yes” → “Review: your vote”: “Nothing is sent until you press Cast Yes vote”, “Your DRep drep1y2e20afmrjh…2egjc8”, “Governance action Info action”, “Your vote Yes”, “Network fee 0.173333 ₳”, “Public account after 10,407.840703 ₳”, two privacy notes and a big “Cast Yes vote” (after the point a normal user would have stopped).
  20. Clicked “Transaction details” and scrolled inside the dialog → “Spends 1 UTxO”, one change output, the fee, “Signed 2 signatures, not sent yet”, and under “Governance”: “Votes yes as a DRep” “53fbef383305…7de056#0” (after the point a normal user would have stopped).
  21. Closed the dialog and stopped at the review without pressing “Cast Yes vote”, as instructed; ran stop (after the point a normal user would have stopped).

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Could I find a proposal? Yes: Public tab → “Staking and governance” → “Governance actions” lists 7 open actions (5 Info actions, 2 Treasury withdrawals), all “Not voted”. Sureness High Correct.
What is the chosen proposal about? Only that it is an “Info action” which “asks DReps, stake pools and the constitutional committee for their view: it changes nothing on chain, however the vote goes.”; open until 22 Oct 2026 (epoch 320), proposed in epoch 314, proposer’s deposit 1,000 ₳; its subject unknown (“Koios has no title or summary for it”, and the full text couldn’t be opened here). High Correct as a report of the screen, which showed exactly this. The subject was missing because the fixture’s row had no title or abstract and the gateway was blocked; with that data from Koios, the heading would be the action’s title and its abstract would show on the page.
Could I obtain enough information to make the decision? No: no title, summary, rationale, amounts or recipients for any of the 7; the only path to the content is an external IPFS link (and Cardanoscan), which showed “Page not available”; a careful DRep could not decide from what the wallet shows. High Partly. True of this run, but the cause is the fake data: when Koios supplies them, the wallet shows an action’s title, its abstract (up to 2,000 characters), the date it was proposed and, for a treasury withdrawal, the amount and the recipient stake addresses. The “no rationale” part is real: only the title and abstract are requested, so motivation and rationale stay behind the full-text link. Whether a real title and abstract would be enough is unverifiable here.
Could I prepare a Yes vote? Yes: “Yes” opens “Review: your vote” with the DRep, “Info action”, “Yes”, “Network fee 0.173333 ₳”, “Public account after 10,407.840703 ₳” and “Cast Yes vote”; Transaction details confirm “Votes yes as a DRep 53fbef383305…7de056#0”. High Correct; the vote was not cast.

Verifier notes.

Final result. The tester found the governance actions and prepared a Yes vote up to “Cast Yes vote”, but could not learn what any of the seven proposals does and, as a DRep who refuses to vote without understanding, would have stopped. The verifier attributes that gap to proposal data missing from the fixture and to blocked outside pages, and recommends BLOCKED for the information question, while keeping the real friction in finding the actions, navigating back from detail pages and identifying the action on the review.

T14r · Understand and vote on a governance proposal (rerun with proposal metadata)

Test notes. Surface: a full browser tab, 1280x720. Starting state: the funded wallet, unlocked, on Home’s Private tab (28 ₳ private; 10,408.014036 ₳ public; staked with LOGIC), with the “drep” override: the account is its own registered DRep (active until epoch 340, voting power 10,408.014036 ₳, 1 delegator, 500 ₳ deposit, no profile) and its vote is “Delegated to Your own DRep”; the task text gave the wallet password. The tester saw the scenario and goal, not the task title, and the note “Prepare the vote up to the point of confirming it; you may stop there.” The task text, surface, starting state and note are T14’s, given to a fresh tester; the one change is the harness’s proposals override, used for T14r only. In T14 the fixture’s recorded preprod proposal list had no title or summary for any of its seven actions (Koios hadn’t read their anchors when it was recorded), and no proposal dates or treasury withdrawal amounts and recipients. Here the override gives six of the seven actions a title and an abstract written for the test in the shape of mainnet CIP-108 metadata, the date each was proposed (from the preprod epoch schedule) and, for the two treasury withdrawals, the amount and the recipient stake address; action 6056be57…#0 keeps no metadata, as the real fallback. It also serves the matching CIP-108 JSON documents at the Blockfrost IPFS gateway that “Read its full text” opens, where T14 got a “Page not available” placeholder. The texts are synthetic: what’s under test is the wallet’s presentation, not the proposals. Cardanoscan still opens the placeholder (BUILDER-NOTES limitation 6); the tester didn’t open it. “Not voted” on every action comes from the fixture’s fixed vote list, and the proposer’s deposit (1,000 ₳) from the recorded fixture. The network never confirms in this task (not reached). This rerun includes the harness fix for “Details” toggles; none was involved.

Result. PASS WITH FRICTION · confidence High · 1 wrong turn · 10 navigation steps · prior product knowledge needed: yes, finding voting meant knowing or guessing that a DRep is a public on-chain role, to look on the Public tab under “Staking and governance”, and reading the full text meant reading raw JSON, which assumes some technical comfort. Verifier: same result; the friction is product behaviour, and the parts that depend on the harness (the synthetic metadata’s empty authors list, forum link and test action, and one scroll command’s targeting) don’t change it.

Path taken.

  1. Ran stop, then start → the wallet’s tab opened on the Private tab: “Private balance 28 ₳”, Receive / Send / Make public / Create, Tokens (one row, “asset1synt…ctusdm”, “Calls itself tUSDM, not on the wallet’s list”), dApps, Activity, and the banner “Test network: ADA here has no value.”
  2. Took a screenshot and scrolled down the Private home → only UTxOs and the footer “Seedelf Wallet 1.1.0 · Preprod”; nothing about voting or governance (wrong turn).
  3. Clicked “Public” → “Public account 10,408.014036 ₳”, “Includes 57.475311 ₳ of staking rewards” and a card “Staking and governance” “Staking with LOGIC” “Voting power: Your own DRep”.
  4. Clicked the “Staking and governance” card → “Your pool” LOGIC · Logical Mechanism with “Pool details” and “Change pool”, “Rewards 57.475311 ₳” with “Withdraw rewards”, “Voting power” “Delegated to Your own DRep” with “Change who votes for you”, and the heading “Your DRep” at the bottom.
  5. Scrolled down 400 px → “Status Active until 30 Jan 2027 (epoch 340)”, “Voting power 10,408.014036 ₳”, “Delegators 1”, “Profile None”, “Deposit 500 ₳”, the DRep ID and a large teal “Governance actions” button.
  6. Clicked “Governance actions” → a list of open actions, each with a title, its type, the voting deadline, a short ID, the date proposed and “Not voted”: “Signal: agree an annual treasury budget before any withdrawals”, “Poll: should stake pools publish a monthly uptime report?”, “Treasury withdrawal: 450,000 ADA for an open-source light-wallet SDK” (“Treasury withdrawal · 450,000 ₳ · Open until 22 Oct 2026 (epoch 320)”, “322066e8…#0 · proposed 18 Sept 2026”), “Info: lower the minimum pool cost from 170 to 100 ADA?” and “Treasury withdrawal: 1,200,000 ADA for independent security audits”.
  7. Scrolled down 400 px → the last two of the seven: one titled only “Info action” (“Open until 12 Oct 2026 (epoch 318)”, 6056be57…#0) and “Test action, please ignore” (375f7ed7…#0).
  8. Clicked “Treasury withdrawal: 450,000 ADA for an open-source light-wallet SDK” → the detail page opened about 360 px down: “Voting Open until 22 Oct 2026 (epoch 320)”, “Proposed 18 Sept 2026, in epoch 314”, “Proposer’s deposit 1,000 ₳”, “Your vote Not voted”, the abstract, “Read its full text” with a note about the IPFS gateway, the Action ID, “Its full text” ipfs://QmZeFp…, “See it on Cardanoscan” and the Vote section’s “Yes” / “No” / “Abstain”; the title and the Type, Amount and To rows were above the visible area.
  9. Scrolled up 600 px → the top: the title, “Type Treasury withdrawal”, “Amount 450,000 ₳”, “To stake_test1uzxtunq2mn0rl667zg4f87q7lcw229njv3qauu0rh62adwqwdnk4t” and a small (i) beside the title.
  10. Hovered the (i) by the title → “A treasury withdrawal pays ADA out of Cardano’s treasury, the fund that fees and new ADA flow into, to the addresses it names, once enough DReps and the constitutional committee vote yes.”
  11. Read the note under “Read its full text” (“It opens in a tab through the IPFS gateway Blockfrost runs: Blockfrost sees your IP address ask for it, and your browser keeps it in its history.”), then clicked “Read its full text” → a new tab (window 2) with the raw CIP-100/CIP-108 JSON: the title, abstract, motivation and rationale, “authors”: [] and one reference, “Budget and milestones”, pointing to forum.example.org.
  12. Closed the JSON tab → back on the detail page.
  13. Scrolled down 500 px → the Vote section’s “Yes” / “No” / “Abstain” and “Every vote is public and stays on chain for good, even one you replace before voting closes: anyone can see how your DRep voted, and that it’s your public account’s.”
  14. Clicked “Yes” → “Review: your vote”: “Nothing is sent until you press Cast Yes vote”, “Your DRep drep1y2e20afmrjh…2egjc8”, “Governance action Treasury withdrawal: 450,000 ADA for an open-source light-wallet SDK”, “Your vote Yes”, “Network fee 0.173333 ₳”, “Public account after 10,407.840703 ₳”, two privacy notes, “It takes about a minute for the network to confirm.” and a big “Cast Yes vote”.
  15. Clicked “Transaction details” → the dialog “The transaction”: “Spends 1 UTxO”, “Pays 1 output” (2.826667 ₳ to addr_test1qq8ac7qq…qkt5dmn, “#0 · a key that stakes”, which the tester took to be their own address), “Network fee 0.173333 ₳”, “Signed 2 signatures, not sent yet”.
  16. Scrolled inside the dialog (the first try, aimed at “The transaction”, matched two texts; the second, over “Spends 1 UTxO”, worked) → “Governance” “Votes yes as a DRep” “322066e8333d…c3ca79#0”, matching the list’s 322066e8…#0.
  17. Closed the dialog → back on the review; stopped there without pressing “Cast Yes vote”, as instructed, and ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Can I find a proposal? Yes: Public tab → “Staking and governance” → scroll → “Governance actions” lists 7 open actions, all “Not voted” (sureness High). Correct. That is the only route: the Public tab’s “Staking and governance” row, then “Governance actions” in the “Your DRep” card. The list held 7 open actions, all “Not voted” (the fixture’s vote list).
What is the chosen proposal about? The abstract: “Requests 450,000 ADA from the Cardano treasury to fund twelve months of work on an open-source (Apache-2.0) light-wallet SDK for mobile apps. The ADA goes to the administrator’s stake address in this action and is released to the team in four milestones, each checked by an independent auditor.”; Type Treasury withdrawal, Amount 450,000 ₳, To stake_test1uzxtunq2mn0rl667zg4f87q7lcw229njv3qauu0rh62adwqwdnk4t; open until 22 Oct 2026 (epoch 320), proposed 18 Sept 2026 (epoch 314), proposer’s deposit 1,000 ₳; the JSON full text adds the motivation (a shared, audited SDK cuts duplicated code and bugs) and the rationale (the team has shipped two wallet libraries before, and unpaid or leftover ADA returns to the treasury) (High). Correct: the screen showed exactly these values and the abstract as quoted, and the anchor JSON has the motivation and rationale as summarised. The texts are the harness’s synthetic metadata; the deposit comes from the recorded fixture.
Can I obtain enough information to make the decision? Mostly yes: the in-wallet summary and the tooltip explain what the action does and its effect; the motivation and rationale are only in raw JSON in an outside tab, behind an IP privacy warning; the authors list is empty and the proposer isn’t identified (Medium). Correct; this matches the product. The wallet shows the title, type, amount, recipient, voting window, proposed date, deposit, your vote, the abstract and the type tooltip behind the (i). The full text is only a link to Blockfrost’s IPFS gateway, which the wallet never fetches or renders (it reads only the title and abstract). There is no proposer or return address, and no vote tally. The empty authors list belongs to the synthetic test document, not the wallet. The tester didn’t use “See it on Cardanoscan”, a placeholder in the harness.
Was a Yes vote prepared? Yes: the review shows “Your vote Yes”, “Network fee 0.173333 ₳” and “Nothing is sent until you press Cast Yes vote”; Transaction details show “Votes yes as a DRep 322066e8333d…c3ca79#0”; not cast (High). Correct. A signed vote transaction, ba2ce78a…04e63256, voting Yes as the DRep on 322066e8…#0 (the 450,000 ₳ action) with a 0.173333 ₳ fee, was built and held in the worker’s session; “Cast Yes vote” was never pressed and nothing was submitted.

Verifier notes.

Final result. The tester found the governance actions on the Public tab under “Staking and governance”, read the 450,000 ₳ treasury withdrawal’s in-wallet summary, its type tooltip and its raw CIP-108 full text, and prepared a Yes vote up to “Cast Yes vote” (fee 0.173333 ₳), judging the information mostly enough, short of who proposed it. PASS WITH FRICTION from both: the friction (governance only on the Public tab and below the fold, the detail page opening mid-scroll, the full text only as raw JSON, no proposer shown) is product behaviour, while the empty authors list and the test action belong to the synthetic metadata.

T15 · Connect a dApp publicly

Test notes. Website surface: the harness’s test site, Example Market (https://dapp.example), active in a 1280x720 tab, with the wallet’s side panel open as a separate 360x640 window the tester had to switch to (in real Chrome it sits docked beside the page); the wallet’s connect popup opens as a 400x605 window. Starting state: funded and unlocked, with two public accounts (Account 1: 10,408.014036 ₳ including 57.475311 ₳ of staking rewards; Account 2: 0 ₳), 28 ₳ private, and “The account sites use” set to Account 1. The wallet’s sites switch was at its product default, off (T16 and T17 started with it on). Chrome’s access to https sites was granted at install, standing in for the permission prompt a real user accepts when turning the switch on, so no prompt appeared. This was a pilot run, made before the post-pilot harness changes: the test site did not yet reconnect after a reload (so the “Not connected.” at step 22 is the site’s doing), and the pilot prompt headed the task with its title, “Connect a dApp publicly”, which adds nothing to the task text’s “Connect using the ordinary public account”. The tester was told not to wait for confirmations; nothing was submitted.

Result. PASS WITH FRICTION · confidence High · 2 wrong turns · 17 navigation steps · prior product knowledge needed: no, the wallet’s text was enough to find the Sites switch and the account rule, though general browser-wallet knowledge (a page may need a reload to see a newly enabled wallet) got the tester past step 12.

Path taken.

  1. Ran stop, then start → Example Market: “Not connected.”, a “Connect wallet” button, “Sign in with wallet” and “Buy item - 15 ADA” disabled.
  2. Clicked “Connect wallet” → the site’s “Choose a wallet” dialog: “No Cardano wallet was found on this page.”, with only Cancel (wrong turn).
  3. Clicked Cancel and switched to the side panel → Home on the Private tab, “Private balance 28 ₳”, with a header dropdown “Public account” showing “Account 1”.
  4. Opened the header “Public account” dropdown → it listed Account 1 and Account 2, so the wallet has two public accounts.
  5. Pressed Escape and clicked the “Public” tab → “Account 1 10,408.014036 ₳”, “Includes 57.475311 ₳ of staking rewards”; nothing about sites or connections.
  6. Clicked the Settings gear → Network, then Wallet (“Public accounts”, “Contacts”, “Collateral”); nothing about sites above the fold.
  7. Scrolled down 400 px → Preferences (“Language”, “Open Seedelf Wallet in”); still nothing about sites.
  8. Scrolled down 450 px more → “Sites and mixing”, with the row “Sites” / “Off: sites can’t see Seedelf Wallet”, which explained the empty wallet list.
  9. Clicked “Sites” → the switch “Let sites connect to Seedelf Wallet” (off) and “The account sites use” set to Account 1, with “Connected sites always use this account, whichever one you’re working on, so switching accounts never shows a site a second account of yours.”
  10. Scrolled down → “Ask for your password to sign for a site” (on) and a “Connected sites” button.
  11. Turned on “Let sites connect to Seedelf Wallet” → the text became “Sites find Seedelf Wallet as a Cardano wallet and can ask to connect.” followed by the privacy warning; no Chrome permission prompt appeared.
  12. Switched to the site and clicked “Connect wallet” again → still “No Cardano wallet was found on this page.”; nothing had said a reload was needed (wrong turn).
  13. Clicked Cancel, reloaded the page (F5), clicked “Connect wallet” → the dialog now listed a “Seedelf Wallet” button.
  14. Clicked “Seedelf Wallet” → the popup “Connect a site”: dapp.example / Example Market, “Choose what the site sees” with “Your public account, Account 1” and “A private session”; Connect disabled.
  15. Clicked the (i) “What this means” → it added one line: “You can disconnect it in Settings, under Connected sites.”
  16. Selected “Your public account, Account 1” and scrolled down → Connect enabled; bullets appeared, including “It gets Account 1: sites always use the account Settings → Sites chooses, whichever one is on screen.”
  17. Scrolled to the bottom and clicked “Connect” → the popup briefly showed “Nothing’s waiting.” and closed; the site showed “Connected to Seedelf Wallet”, addr_test1qq…mqkt5dmn and “10,350.538725 ADA and 6 tokens”.
  18. Clicked “Show full address” on the site → the full address, starting addr_test1qq8ac7qq and ending mqkt5dmn.
  19. Switched to the side panel and opened “Connected sites” → “dapp.example” listed as “Your public account”, with its date and a “Disconnect” button; no account named.
  20. Home → Public tab → Receive → “Into Account 1, your public account”, with an address matching the site’s.
  21. Changed the header “Public account” dropdown to Account 2 → Home showed “Account 2” and “0 ₳”.
  22. Switched to the site and reloaded (F5) → the site showed “Not connected.” again.
  23. Clicked “Connect wallet” → “Seedelf Wallet” → reconnected at once with no popup, still with Account 1’s address (…mqkt5dmn) and 10,350.538725 ADA.
  24. Ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Can the site be connected with the ordinary public account? Yes, after turning on Settings → Sites → “Let sites connect to Seedelf Wallet” and reloading the site; the popup then offered “Your public account, Account 1” and Connect worked (sureness High). Correct. In real Chrome the switch would also bring up Chrome’s permission dialog, which the harness skipped.
Which account does the site get when there are several public accounts? The one set in Settings → Sites → “The account sites use” (Account 1), not the one on screen, as the popup’s bullet says; checked by switching the header to Account 2 and reconnecting (High). Correct: the site’s full address is Account 1’s Receive address, and the reconnect with Account 2 selected still returned …mqkt5dmn.
Is that account selection obvious? Partly: the card title names “Account 1”, but the explanation appears only after choosing public, below the fold; the popup can’t change the account; the header dropdown suggests it controls this but doesn’t; Connected sites says only “Your public account” (High). Correct on every fact; “Partly” is a judgement the evidence supports.

Verifier notes.

Final result. The tester connected Example Market with the public account and showed, by switching the header to Account 2 and reconnecting, that sites always get the account chosen in Settings → Sites. Both wrong turns came from real product behaviour (sites off by default, no reload hint); the verifier found no misreads and kept PASS WITH FRICTION.

T16 · Connect a dApp privately

Test notes. Website surface: Example Market active in a 1280x720 tab, the wallet’s side panel open as a separate 360x640 window, and the wallet’s connect popup a 400x605 window. Starting state: funded and unlocked, one public account, 28 ₳ private. The wallet’s sites switch was already on (set for T16 and T17 after the pilot), so the site found the wallet at once and the switch-and-reload steps T15 hit were not part of this run. The tester was told beforehand that an outside service refuses every request here, so after confirming the wallet may say nothing was sent, and not to count that as a wallet failure; they were also told not to wait for confirmations. In this environment a private session can never be funded: the fake giveme.my refuses every collateral request (builder limitation 1), so the task’s end state (the funding wait and a connected session) was unreachable. Main-run trace: it predates the harness fix that lets a click reach the wallet’s “Details” toggles, which is why the tester’s first two attempts to open “Details” failed.

Result. BLOCKED · confidence Medium · 2 wrong turns · 8 navigation steps · prior product knowledge needed: no, the on-screen cards alone led to the private session, though its caveats and costs use terms the UI never explains (UTxOs, collateral, “Make public”, Lovejoin, giveme.my).

Path taken.

  1. Ran stop, then start → Example Market: “Not connected.”, “Connect wallet” enabled, Sign in and Buy disabled, the item at “15 ADA + 0.25 ADA network fee”.
  2. Took a screenshot, then clicked “Connect wallet” → the site’s “Choose a wallet” dialog with “Seedelf Wallet” and “Cancel”.
  3. Clicked “Seedelf Wallet” → the popup “Connect a site”, “Choose what the site sees”: “Your public account” (“The site sees its addresses, its balance and its UTxOs, and keeps what it saw. No fee.”) and “A private session” (“The site sees only a new one-time account, funded from your private balance. A fee each way, 5 ₳ kept aside that comes back, and about a minute.”); Connect disabled.
  4. Clicked the small (i) beside “Connect a site” (screen-reader name “What this means”) → one line: “You can disconnect it in Settings, under Connected sites.”; nothing about privacy or the two options (wrong turn).
  5. Clicked the “A private session” card → it expanded into a funding form: “A new one-time account, funded from your private balance with what you choose here. The wallet gives the site only this account.”, a line about the dApps page and Lovejoin, a “What to put in it” ₳ field, “28 ₳ in your private balance. 5 ₳ more goes in, kept aside for the site’s contracts, and comes back.”, “Add tokens” and a disabled “Enter an amount”.
  6. Scrolled down 300 px → the full privacy note: “Your public account isn’t in these transactions, but anyone, the site included, can follow the money back into your private balance, and money you made private yourself leads on to your public account. The site still sees this browser: if it has seen your public account here, it can tell the session is yours. A separate Chrome profile and a VPN keep them apart.”
  7. Typed 16 in “What to put in it” (enough for the 15 ADA item and its 0.25 fee) → the button changed from “Enter an amount” to “Review”.
  8. Clicked “Review” → the review opened scrolled to its bottom: “For the site” 16 ₳, “Kept aside for contracts” 5 ₳, “Network fee” 0.233208 ₳, “Change, back to your private balance” 3.766792 ₳, a note beginning “This payment links the private UTxOs it spends to the one-time account, as Make public does”, “As it’s sent, giveme.my is asked to lend the collateral.”, a password field and a disabled Send.
  9. Scrolled up → the top: “Review the funding”, “A private session for dapp.example. Nothing is sent until you press Send”, the hint “The site sees this account as an ordinary wallet, and it’s yours to top up or bring back from the dApps page. The 5 ₳ kept aside comes back with it.”, a “To” row reading Private session 1 and an “Account” row reading addr_test1qr3xfa…cs00h9ax.
  10. Scrolled down and clicked “Transaction details”, hoping to see what the site would see → a dialog “The transaction”: a tx id, “Spends 1 UTxO”, “Pays 3 outputs” (5 ₳ and 16 ₳ to the one-time address, and an address starting addr_test1wz…), a “Raw CBOR” tab; too technical for the tester (wrong turn).
  11. Closed the dialog → back on the review.
  12. Typed the password into “Your password, to send” → Send enabled.
  13. Clicked “Send” → a red error: “Nothing was sent: something it spends may have changed since you reviewed it. Build it again: the new review takes a fresh one-time account.”, with a collapsed “Details”, “Build it again” and “Cancel”.
  14. Opened “Details” (the first two remote-control attempts didn’t match it; the third did) → “giveme.my, which lends the collateral, refused this transaction: Transaction Fails Validation. Its UTxOs may have been spent since the review: refresh, then review it again.”
  15. Clicked “Build it again” → the review was rebuilt with the same amounts, the password field empty and Send disabled.
  16. Switched to the website to see whether it was connected → still “Waiting for your wallet…”, with Activity “14:02:38 enable() -> waiting…”.
  17. Ran stop, treating the outside service’s refusal as the end of what the test can do.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
How did you discover the private option? The site’s “Connect wallet”, then “Seedelf Wallet”: the popup “Connect a site” showed “Choose what the site sees” with two cards, “Your public account” and “A private session” (sureness High). Correct; these are the connector’s only two options.
What do you believe it costs? The card’s “A fee each way, 5 ₳ kept aside that comes back, and about a minute.”; the review’s 0.233208 ₳ network fee for the funding; presumably another fee to bring the money back, plus Lovejoin’s fees (amount not shown) if it comes back through Lovejoin; the 5 ₳ is not a cost (Medium). Correct. The way back’s network fee shows only on the session’s Bring it back review (dApps page). Returns through Lovejoin are on by default: spare ADA comes back in 10 ₳ boxes, at about 3.5 ₳ of mixes per box at the default depth plus about 0.3 ₳ per box to bring it back, and hours of waiting (not when the pool is below its floor or the return comes back directly). The connector shows none of these amounts.
What amount do you believe you are putting into it? 16 ₳ for the site plus 5 ₳ kept aside, 21 ₳ into “Private session 1” (addr_test1qr3xfa…cs00h9ax); with the fee, 21.233208 ₳ leaves the 28 ₳ private balance, with 3.766792 ₳ change from the coin it spends (Medium). Correct: one 25 ₳ UTxO spent, which would leave 6.766792 ₳ (3 ₳ untouched plus the change). It was never sent; the rebuilt review had the same amounts going to a new account, Private session 2.
What information will the website learn? Only the new one-time account (“The wallet gives the site only this account”, “The site sees this account as an ordinary wallet”), but anyone, the site included, can follow the money on chain back into the private balance, and money made private yourself on to the public account; the browser can tie the session to the public account if the site has seen it there (Medium). Correct: through CIP-30 the site gets the one-time account’s addresses, balance and UTxOs and can ask it to sign, and gets nothing of the public account or private balance. The “ordinary wallet” line came from a review hint that was open only because the tester had opened the connect screen’s (i).
Was the private session created or connected? No: the “Nothing was sent” error, Details naming giveme.my’s refusal, and the site still at “Waiting for your wallet…” (High). Correct; nothing was signed or submitted.

Verifier notes.

Final result. The tester found the private option at once and took a private session through amount, review, password and Send, where the fake collateral service’s refusal stopped it: nothing was sent and the site never connected. BLOCKED, by the tester and the verifier; up to that point the flow was clear, but unexplained terms and the traceability caveats left the tester unsure how private the session really is.

T17 · Accidentally decline a dApp

Test notes. Website surface: Example Market active in a 1280x720 tab, the wallet’s side panel open as a separate 360x640 window, and each connect request in a 400x605 popup. Starting state: funded and unlocked, one public account, 28 ₳ private; the wallet’s sites switch was already on (set for T16 and T17 after the pilot), so the site found the wallet at once. The tester was told not to wait for confirmations. Timing matters here: every remote-control command costs a round trip (about 0.7 s) plus the tester’s time between commands, and the tester took a screenshot, listed the windows, viewed the site and took another screenshot between declining and retrying. The retry reached the wallet about 14 s after the decline, after the wallet’s 10 s decline cooldown had run out, so this trace shows a retry 14 s after declining, not an immediate one; a rerun, T17r, repeats the task with commands chained to retry quickly. The test site shows the wallet’s CIP-30 refusal text and keeps an Activity log, more than a typical dApp does. A private session could not have been funded in this environment; the tester chose the public account, so that never came into play.

Result. PASS WITH FRICTION · confidence High · 1 wrong turn · 13 navigation steps · prior product knowledge needed: no, everything needed was on screen and the website explained the refusal in plain words. Verifier: same result, but it covers a retry about 14 s after the decline, not an immediate one.

Path taken.

  1. Ran stop, then start → Example Market: “Not connected.”, “Connect wallet” enabled, Sign in and Buy disabled, Activity “Nothing yet.”; the side panel open as window 2.
  2. Clicked “Connect wallet” on the website → “Choose a wallet”, “Wallets found in this browser:” with “Seedelf Wallet” and “Cancel”.
  3. Clicked “Seedelf Wallet” → a wallet popup: “Connect a site”, “Nothing happens until you choose, and press Connect or Review”, dapp.example, “Choose what the site sees” with “Your public account” and “A private session”; “Cancel” and a disabled “Connect”.
  4. Took a screenshot, hovered “Cancel” (no tooltip), then clicked “Cancel” to decline → the popup showed “Seedelf Wallet” / “Nothing’s waiting.” for a moment, then closed itself; no message that the site had been refused.
  5. Looked at the website → a red banner “The wallet did not connect: The user declined. (code -3)” / “Code -3: the wallet refused the request.”, Activity “14:02:37 enable() -> refused (code -3)”, “Connect wallet” still enabled.
  6. Clicked “Connect wallet” again → “Choose a wallet” again, with the red banner still behind it.
  7. Clicked “Seedelf Wallet” → a new popup with a fresh, identical connect request; nothing about the earlier decline blocked or remembered it.
  8. Selected “Your public account” → Connect enabled; the subtitle changed to “Nothing happens until you press Connect” and “It can ask you to sign transactions and messages. Nothing is signed without you.” appeared.
  9. Scrolled down 300 px → read “Your private balance stays out of it: the site never sees your Seedelfs or their UTxOs. It does learn your public account” and the rest of the note.
  10. Clicked “Connect” → “Nothing’s waiting.”, then the popup closed; the website showed “Connected to Seedelf Wallet”, “Preprod testnet”, addr_test1qq…mqkt5dmn, “10,350.538725 ADA and 6 tokens”, Activity “14:03:00 enable() -> connected” and the account reads above the earlier refusal; the banner was gone and Buy enabled.
  11. Switched to the side panel → Home on the Private tab, “Private balance 28 ₳”; nothing about the connected site.
  12. Clicked “dApps” to check whether the site was listed → “dApps”, “Used privately, from one-time accounts”, with Minswap and Lovejoin; dapp.example was not there (wrong turn).
  13. Opened Settings and scrolled down twice (500 px each) to “Sites and mixing” → a “Sites” row showing “On: sites can ask to connect”.
  14. Clicked “Sites” → “Let sites connect to Seedelf Wallet” (on), “Ask for your password to sign for a site” (on) and a “Connected sites” button.
  15. Clicked “Connected sites” → “dapp.example” listed as “Your public account”, with its date and a “Disconnect” button.
  16. Ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
What did the wallet do when I declined? Clicked “Cancel” (there is no “Decline”); the popup changed to “Seedelf Wallet” / “Nothing’s waiting.” and closed itself; no confirmation that the site was refused (sureness High). Partly correct: all of that happened, but the wallet also rejected the site’s enable() with code -3 and “The user declined.” and set a 10 s refusal for the site, which nothing in the wallet showed.
What did the website do when I declined? A red banner, “The wallet did not connect: The user declined. (code -3)” / “Code -3: the wallet refused the request.”; Activity “14:02:37 enable() -> refused (code -3)”; “Connect wallet” still available, Sign in and Buy disabled (High). Correct. 14:02:37 is when enable() was called; the refusal itself came at about 14:02:47, when Cancel was pressed.
What happened on trying again from the website? “Choose a wallet” again; a fresh, identical “Connect a site” popup with no trace of the decline; chose “Your public account” and clicked “Connect” (High). Correct for this run. The retry reached the wallet about 14 s after the decline, after the 10 s refusal had run out; within 10 s it would have been refused at once, with no popup.
Did I recover? Yes: “Connected to Seedelf Wallet”, Preprod testnet, addr_test1qq…mqkt5dmn, 10,350.538725 ADA and 6 tokens, “14:03:00 enable() -> connected”, and dapp.example under Settings → Sites → Connected sites (High). Correct; connecting also cleared the wallet’s refusal record.
Did any money move? No: the public account says “No fee”, and no transaction or signing was requested (High). Correct.

Verifier notes.

Final result. The tester declined with “Cancel”, saw the site report “The user declined. (code -3)”, retried from the site, got a fresh prompt and connected the public account, confirmed under Settings → Sites → Connected sites. PASS WITH FRICTION from both, with the caveat that the retry came about 14 s after the decline, so the 10 s decline cooldown an immediate retry would hit was never seen.

T17r · Accidentally decline a dApp (rerun with fast retry)

Test notes. Website surface: Example Market active in a 1280x720 tab, the wallet’s side panel open as a separate 360x640 window, and each connect request in a 400x605 popup. Starting state: funded and unlocked, one public account, 28 ₳ private; the wallet’s sites switch was already on, as for T16 and T17, so the site found the wallet at once. The tester was told not to wait for confirmations. The task text is T17’s, given to a fresh tester; the one change is an instruction added to the note: “Each remote-control command takes a few seconds here, much longer than a person’s click. Where your task says to do something immediately, chain the commands into one shell call (for example: ui T17r click … && ui T17r click … && ui T17r click …) so they happen within a couple of seconds, the way quick clicks would.” It was added because harness round trips had brought T17’s retry to the wallet about 14 s after the decline, after the wallet’s 10 s decline cooldown had run out. Here the tester chained “Cancel”, a screenshot and the website’s “Connect wallet”; that click ran while the wallet popup was still the active window and found nothing, so the retry that reached the wallet came from the next shell call, about 7 s after Cancel. That is inside the cooldown, so this run shows the cooldown refusal, though with less of the wait left than an instant retry would see. The test site shows the wallet’s CIP-30 refusal text and keeps an Activity log, more than a typical dApp does; it stamps each Activity row with the time the site sent the request, not when the wallet answered. A private session could not have been funded in this environment; the tester chose the public account, so that never came into play.

Result. PASS WITH FRICTION · confidence High · 1 wrong turn · 11 navigation steps · prior product knowledge needed: no, declining and reconnecting needed only the website’s “Connect wallet” and the wallet’s “Cancel” and “Connect”, the site’s error text explained the cooldown, and “No fee” made the choice of account obvious. Verifier: same result; most of the friction is real, but the tester’s doubt about the “3 s” countdown is a misread: the retry reached the wallet about 7 s after Cancel, not 19 s, and the countdown was accurate.

Path taken.

  1. Ran stop, then start, took a screenshot of Example Market (“Your wallet” “Not connected.”, “Connect wallet” enabled, “Sign in with wallet” and “Buy item - 15 ADA” disabled, Activity “Nothing yet.”; the side panel open as window 2) and clicked “Connect wallet” → the site’s “Choose a wallet”, “Wallets found in this browser:” with “Seedelf Wallet” and “Cancel”.
  2. Clicked “Seedelf Wallet” → a wallet popup (window 3, 400x605) took focus: “Connect a site”, “Nothing happens until you choose, and press Connect or Review”, dapp.example, “Example Market (test site) · https://dapp.example”, “Choose what the site sees” with “Your public account” (“The site sees its addresses, its balance and its UTxOs, and keeps what it saw. No fee.”) and “A private session” (“The site sees only a new one-time account, funded from your private balance. A fee each way, 5 ₳ kept aside that comes back, and about a minute.”); a big “Cancel” bottom left and a disabled “Connect”.
  3. Waited 2 s, listed the windows and took a screenshot, then clicked “Cancel” to decline, in one chained call with a screenshot and a click on the website’s “Connect wallet” for the immediate retry → the popup showed “Seedelf Wallet” / “Nothing’s waiting.” with no buttons.
  4. The chained click on “Connect wallet” ran while the popup was still in front and found no button, which the tester put down to the remote control’s timing; the popup then closed itself → the website: a red box “The wallet did not connect: The user declined. (code -3)” / “Code -3: the wallet refused the request.”, Activity “14:43:01 enable() -> refused (code -3)”, “Connect wallet” focused, Sign in and Buy still disabled.
  5. Clicked “Connect wallet” → “Choose a wallet” again.
  6. Clicked “Seedelf Wallet”, chained with step 5 → no wallet popup; the site at once showed a new refusal, “The wallet did not connect: The user declined this site just now. It can ask again in 3 s. (code -3)”, with Activity “14:43:20 enable() -> refused (code -3)” above the first row; from the Activity times, the tester reckoned this about 19 s after the decline.
  7. Took a screenshot and read the message; with more than 3 s gone, did as it said and clicked “Connect wallet”, then “Seedelf Wallet” → a new popup (window 4) with the same “Connect a site”: the same two choices, Connect disabled.
  8. Selected “Your public account” → a check mark on the card, “Connect” enabled, the subtitle changed to “Nothing happens until you press Connect”, and “It can ask you to sign transactions and messages.” appeared.
  9. Scrolled down 300 px in the popup → “Nothing is signed without you.” and “Your private balance stays out of it: the site never sees your Seedelfs or their UTxOs. It does learn your public account, as any site you pay from it does, and it can recognize this browser later, even if you connect it to a private session then.”
  10. Clicked “Connect” → “Nothing’s waiting.”, then the popup closed itself; the website showed “Connected to Seedelf Wallet”, “Preprod testnet”, addr_test1qq…mqkt5dmn, “10,350.538725 ADA and 6 tokens”, Activity “14:43:33 enable() -> connected” followed by getNetworkId, getUsedAddresses and getBalance, and “Sign in with wallet” and “Buy item - 15 ADA” enabled.
  11. Switched to the side panel (window 2) → Home on the Private tab: “Private balance 28 ₳”, Receive / Send / Make public / Create, Tokens, “dApps”; nothing about the newly connected site.
  12. Clicked “dApps”, hoping to see connected sites → “dApps”, “Used privately, from one-time accounts”, Minswap and Lovejoin, and a note on one-time accounts; nothing about Example Market (wrong turn).
  13. Clicked Back → Home; ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
What did the wallet do when I declined? Pressed “Cancel” in the “Connect a site” popup; it briefly showed “Seedelf Wallet” / “Nothing’s waiting.” and then closed itself (sureness High). Correct. Cancel also rejects the site’s enable() with code -3 and “The user declined.” and starts a 10 s refusal for dapp.example; the empty “Nothing’s waiting.” shows for 800 ms before the wallet closes the window.
What did the website show after the decline? A red box, “The wallet did not connect: The user declined. (code -3)” / “Code -3: the wallet refused the request.”; Activity “14:43:01 enable() -> refused (code -3)”; still not connected, Sign in and Buy disabled (High). Correct. “14:43:01” is when the site sent enable(); the decline itself came at about 14:43:13, when Cancel was pressed.
What happened when I immediately tried to connect again from the website? The site’s chooser appeared; picking “Seedelf Wallet” opened no wallet popup; the site showed “The wallet did not connect: The user declined this site just now. It can ask again in 3 s. (code -3)” and logged another “enable() -> refused (code -3)” at 14:43:20 (High). Correct. The retry came about 7 s after Cancel, inside the 10 s refusal, so the wallet refused it without asking; about 2.8 s were left, shown rounded up as “3 s”. Elsewhere the tester puts this 19 s after the decline, which is wrong, but this answer is right.
How did I recover? After the few seconds the message mentioned, clicked “Connect wallet”, then “Seedelf Wallet” again; the “Connect a site” prompt reopened; chose “Your public account” (No fee) and pressed “Connect”; the site showed “Connected to Seedelf Wallet” with the network, address and balance, and logged “14:43:33 enable() -> connected” (High). Correct. The refusal had ended at about 14:43:23, and the try at about 14:43:33 opened the popup; connecting cleared the wallet’s refusal record. The site stamped “14:43:33” when it asked; Connect itself was pressed at about 14:43:50.
Did the wallet itself show any notice about the automatic refusal or the cooldown? No: the cooldown explanation appeared only on the website, and the wallet showed nothing during the blocked retry (Medium). Correct. The refusal goes back to the site as CIP-30 code -3, with the wait only in its info text; no window opens, nothing sets a notification or badge, and the side panel shows nothing. The user sees the explanation only if the dApp prints that text, as this test site does.

Verifier notes.

Final result. The tester declined with “Cancel” (the site got “The user declined. (code -3)”), retried from the site about 7 s later and was refused with no prompt, the site showing “The user declined this site just now. It can ask again in 3 s.”; the next try, about 20 s after Cancel, brought the prompt back, and they connected the public account (“Connected to Seedelf Wallet”). PASS WITH FRICTION from both. Unlike T17, this run reached the 10 s decline cooldown, which the wallet itself never signals; the tester’s doubt about the “3 s” was a misread of the site’s request-time stamps, and the wallet’s Connected sites list went unfound.

T18 · Sign a dApp transaction

Test notes. Website surface: Example Market active in a 1280x720 tab with the wallet’s side panel open as a separate window; the signing request opens in a 400x605 popup, standing in for the real 400x640 window once its title bar is taken off. Starting state: funded and unlocked, one public account, the sites switch on and Example Market already connected to the public account through its own Connect button (“Connected to Seedelf Wallet”). The tester was told that buying the site’s sample item makes it ask the wallet to sign a payment, and not to wait for confirmations; they stopped before signing, as the task’s “before you would normally press Sign” implies. The test site sets a fixed 0.25 ADA fee and picks coins greedily, so the transaction it asked for spends 5 UTxOs from 2 of the wallet’s addresses; a real dApp might spend from one. On preprod a test-network strip takes about 40 px at the top of the popup, which is what pushes the end of the privacy note below the fold.

Result. PASS WITH FRICTION · confidence High · 1 wrong turn · 5 navigation steps · prior product knowledge needed: no, the main answers were on the summary in plain words; reading the details view (UTxOs, outputs, recognising change) takes some Cardano knowledge.

Path taken.

  1. Ran stop → not running.
  2. Ran start → Example Market, “Connected to Seedelf Wallet”, with “Buy item - 15 ADA”, the shop’s address and “15 ADA + 0.25 ADA network fee”.
  3. Took a screenshot, then clicked “Buy item - 15 ADA” → a wallet popup opened and took focus: “Sign a transaction”, “Nothing happens until you press Sign”, dapp.example / Example Market (test site), “Total leaving your public account” 15.25 ₳, “Network fee” “0.25 ₳, counted in the total”, “It signs for” “2 of your addresses”, “Pays” the shop’s full address as “An address” 15 ₳, and a green privacy note cut off at the bottom edge: “Signing ties this transaction to your public account, as any payment from it. Your private balance isn’t in”.
  4. Took a screenshot → confirmed the above-the-fold content: no buttons above the fold.
  5. Scrolled down 300 px to find the Sign/Decline buttons → the note’s end (“Your private balance isn’t in it.”), “Transaction details”, “Your password, to sign” with “Show”, “Decline” and a disabled “Sign”.
  6. Hovered “2 of your addresses” → no tooltip; nothing said which addresses.
  7. Clicked “Transaction details” → a dialog, “The transaction”: the tx id, “Transaction” / “Raw CBOR” tabs, “Spends 5 UTxOs” (five truncated UTxO ids) and the start of “Pays 2 outputs”.
  8. Hovered, then clicked, the small (i) next to “Spends 5 UTxOs” → “What each one holds isn’t in the transaction, and the wallet asks nobody: looking them up would tell whoever was asked which transaction you are reading.”
  9. Scrolled the dialog by its title, “The transaction” → the harness replied “Nothing moved.” (wrong turn).
  10. Scrolled over the UTxO list → the outputs: “#0 · a key” 15 ₳ to the shop’s address; “#1 · a key that stakes” 10,332.288725 ₳, 550,999,000 LINK and 3,000,000,000 asset13vxx…6fmzjw to addr_test1qq8ac7…mqkt5dmn.
  11. Scrolled to the bottom of the dialog → “Network fee” 0.25 ₳, “Size” “401 bytes (397 of body)”, “Signed” “Not yet”.
  12. Closed the dialog → back on the summary, Sign still disabled; did not sign.
  13. Ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Which account signs? “your public account” (“Total leaving your public account”); “It signs for 2 of your addresses”; which two isn’t shown (sureness Medium). Correct. It is the wallet’s only account (an account is named only when there are several); it signs with 2 payment keys and no stake or DRep key. Which two is never shown.
Who receives money? The shop’s address, addr_test1vp5wwqrj43rrv5rq0tye3hzs4nt9qm96z4dwuccua6vcuagmk7tdq (“An address”), receives 15 ₳, matching the website; change of 10,332.288725 ₳ plus tokens goes to addr_test1qq8ac7…mqkt5dmn, which the tester worked out is their own (High). Correct: output #1 is the wallet’s own base address, which the summary treats as change (left out of “Pays”, counted in the net).
How much leaves? “Total leaving your public account” 15.25 ₳ (High). Correct: 15 ₳ to the shop plus the 0.25 ₳ fee; no tokens leave.
What is the fee? “Network fee” “0.25 ₳, counted in the total” (High). Correct; it is the test site’s fixed fee.
Any privacy or linking consequence? “Signing ties this transaction to your public account, as any payment from it. Your private balance isn’t in it.”, cut off at the fold until the tester scrolled to reach the buttons (High). Correct; on preprod its second half sits below the fold.

Verifier notes.

Final result. Before signing, the tester correctly identified all five items from the summary (the public account, 15 ₳ to the shop, 15.25 ₳ leaving, a 0.25 ₳ fee within it, and the linking note) and did not sign. PASS WITH FRICTION from both: the controls and the note’s end sit below the fold, the signing addresses are only a count, and the details don’t label the change; the one scrolling wrong turn was a harness artifact.

T19 · Add a second public account

Test notes. Side panel surface: a separate 360x640 window. Starting state: funded and unlocked with one public account (Account 1) and 28 ₳ private; the tester was given no environment notes. Account 2 has no history in the fake Koios (real Koios answers the same for an unused account), so the run shows the two-step path for an unused next account; a next account with chain history is added in one step (“Found Account 2. It’s in the list now.”). The verifier found nothing in the harness that distorted this task.

Result. PASS WITH FRICTION · confidence High · 0 wrong turns · 5 navigation steps · prior product knowledge needed: no, only the general habit of looking in Settings for a feature that isn’t on Home.

Path taken.

  1. Ran stop, then start → Home, unlocked: Private/Public tabs, “Private balance 28 ₳”, Receive / Send / Make public / Create; no account name or account switcher anywhere.
  2. Clicked the Settings gear → a Network section (Mainnet/Preprod) and a Wallet section listing “Public accounts”, “Contacts”, “Collateral”.
  3. Clicked “Public accounts” → “Accounts”, “Account 1 · current” with “Name it”, a paragraph about the private balance being shared, a large “Look for the next account” button, a green link “Use an account number of your own”, and a paragraph about Koios queries.
  4. Hovered the small (i) next to the “Public accounts” title → “Each account is a separate Cardano wallet from the same recovery phrase, with its own addresses, its own staking and its own collateral. Other wallets call these accounts too, and show the same ones for this phrase.”
  5. Clicked “Look for the next account” → “Account 2, the next in order, has never been used on Preprod. You can still add it and start using it.” and a prominent teal “Add Account 2” button.
  6. Clicked “Add Account 2” → “Accounts · 2”, “Account 1 · current”, “Account 2” with “Switch to it” and “Name it”, the status “Account 2 is in the list now.”, and a new “Public account” dropdown (Account 1) in the header.
  7. Clicked the Seedelf logo (Home) → the same Home as before, plus the new “Public account” dropdown under the header.
  8. Ran stop.

Wrong turns. None.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Is the natural action for adding the next account discoverable? Partly: nothing on Home points to accounts, so Settings had to be guessed, where “Public accounts” sits under Wallet; inside it, a big “Look for the next account” leads to a prominent “Add Account 2”; “Look for” instead of “Add”, and the “Public” qualifier, caused hesitation (sureness High). Correct. With one account Home has no account name, switcher or link, and Settings → Wallet → “Public accounts” is the only route. Once a second account exists, the header picker only switches; adding always stays in Settings.
Was the next account added? Yes: “Account 2 is in the list now.”, and the list shows “Accounts · 2” with Account 1 still current (High). Correct; the active account stayed Account 1.

Verifier notes.

Final result. The tester added Account 2 with no wrong turns (Settings → “Public accounts” → “Look for the next account” → “Add Account 2”), and the wallet confirmed it plainly. PASS WITH FRICTION from both; all the friction came at the start: with one account Home shows no account concept, the entry is called “Public accounts”, and adding needs a “Look for” step first.

T20a · Restore the wallet (narrow side panel)

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel (a window of its own, not docked). Starting state: a fresh install with nothing set up; the tester chose their own password. The harness set the wallet to open in the side panel for this task; per the verifier, the product’s default after a fresh install is a tab. Data: a 24-word phrase that the wallet’s own Create flow generated and nobody funded, so the restored wallet is truly empty (0 ₳ on both sides); the task didn’t say whether the wallet held funds. The task text told the tester that another participant starts in a full tab (T20b). The tab the panel hands over to appears as a separate 1280x720 window; in Chrome it opens in the same browser window. The harness prints one settled view after each command, so text shown only while a command runs isn’t seen, and fill sets a field’s whole value in one step. Nothing is submitted in this task. Main-run trace (it predates the harness fix for “Details” toggles; none was involved).

Result. PASS WITH FRICTION · confidence High · 0 wrong turns · 5 navigation steps · prior product knowledge needed: no, only the general ideas of a recovery phrase and a password.

Path taken.

  1. Ran stop, then start → the side panel showed the welcome screen: “Create new wallet”, “Restore wallet” and “Each opens in a full tab, which stays open while you write your phrase down or type it in.”
  2. Clicked “Restore wallet” → the side panel closed by itself and a 1280x720 wallet tab opened on “Restore a wallet”, “Step 1 of 2”, with “24 words” already selected, 24 numbered boxes and Continue disabled.
  3. Clicked box 1 and typed “exer” → a suggestion list opened under the box showing “exercise”, with the typed part highlighted.
  4. Pressed Enter → box 1 filled with “exercise” and focus moved to box 2.
  5. Typed “joke “ (word plus space) → box 2 got “joke” and focus moved to box 3, so space also advances.
  6. Typed words 3 to 23, each followed by a space, then the last word in box 24 → every word landed in its numbered box and Continue became enabled (teal).
  7. Checked a screenshot against the given phrase → all 24 words matched, in order, all above the fold.
  8. Clicked “Continue” → “Set a password”, “Step 2 of 2”, Password (with “Show”) and Confirm password, “Restore wallet” disabled.
  9. Filled both fields with the same 16-character password → a 4-segment strength bar with “Strong.” appeared and “Restore wallet” became enabled.
  10. Clicked “Restore wallet” → straight to Home with no confirmation message: “Private” tab selected, “Updated just now”, “Private balance 0 ₳”, Send, Make public and Create greyed, “Fund your public account first: it pays for your Seedelf”, and a “Get started” card.
  11. Clicked the “Public” tab to see whether the existing wallet had come back → “Public account 0 ₳”, a “Staking and governance” card and “Create your Seedelf before making money private: then what you make private isn’t tied to it.”
  12. Ran open-wallet (the toolbar icon) → a side panel opened on the restored wallet’s Home (“Private balance 0 ₳”, “Updated 17 s ago”, the Get started card).
  13. Ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Can you confidently verify every word you typed before submitting? Yes (High). In the tab all 24 words show in plain text, numbered 1-24 in a 4-column grid, on screen with Continue at 1280x720; the tester checked each before Continue. Entry happens in a tab, so there was no cramped 360 px grid. Correct. The 24 values match the given phrase word for word and in order, and the wallet’s check accepted them (Continue led to Step 2). About 48 px lay below Continue. The panel never shows the grid.
Was the wallet restored? Yes, as far as the UI shows (Medium): Home with 0 ₳ private and 0 ₳ public, and the same wallet in the reopened panel; no “restored” confirmation, and no way to confirm it is this phrase’s wallet. Correct. The restore ran with exactly the typed words and the worker then read the account; 0 ₳ on both sides is the right balance for this never-funded phrase. Restore and create return the same status and land on the same Home, so the UI shows no restore confirmation.

Verifier notes.

Final result. The tester restored the wallet with no wrong turns: the panel handed over to a full tab, where all 24 words could be checked in plain, numbered text before Continue. The friction is the lack of any positive confirmation (phrase valid, passwords match, wallet restored), and the never-funded test phrase strengthened the doubt about whether this was the right wallet.

T20b · Restore the wallet (full tab)

Test notes. Surface: a full browser tab, 1280x720. Starting state: a fresh install with nothing set up; the tester chose their own password; the wallet opened in a tab, the product’s default. Data: the same 24-word phrase as T20a, generated by the wallet’s own Create flow and never funded, so the restored wallet is truly empty (0 ₳ on both sides); the task didn’t say whether it held funds. The task text told the tester that another participant starts in the narrow side panel (T20a). The harness prints one view after each command, so what shows only while keys are being typed (a suggestion list for an incomplete word, for example) isn’t seen when a whole word goes in with one command. It also has no command to put the tester’s own text on the clipboard. Nothing is submitted in this task. Main-run trace (it predates the harness fix for “Details” toggles; none was involved).

Result. PASS · confidence High · 0 wrong turns · 6 navigation steps · prior product knowledge needed: no, only what a recovery phrase is and that it goes in word order.

Path taken.

  1. Ran stop, then start → the wallet tab showed the welcome screen: the Seedelf logo, “A private wallet for Cardano.”, a teal “Create new wallet”, a dark “Restore wallet” and a Network dropdown on Preprod.
  2. Clicked “Restore wallet” → “Restore a wallet”, “Step 1 of 2”: “Restoring a wallet on Preprod. Change network”, the Lace/Eternl/Yoroi note, “Tip: paste the whole phrase into any box.”, the 12/15/24 words switch already on 24, a 4x6 grid of numbered boxes and Continue disabled.
  3. Clicked box 1 and typed “exercise” → the word appeared in box 1 in plain monospace text; no suggestion list appeared.
  4. Pressed Space → focus moved to box 2 on its own.
  5. Typed the other 23 words key by key, separated by spaces (one type command) → each space moved to the next box, all 24 boxes filled and Continue turned teal (enabled); long words such as “abstract” and “envelope” fit without being cut off.
  6. Read every box against the phrase, then scrolled down (the page had about 48 px more) → all 24 matched; only the version footer lay below Continue.
  7. Clicked “Continue” → “Set a password”, “Step 2 of 2”, the password explanation, Password and Confirm password, a “Show” toggle and “Restore wallet” disabled.
  8. Filled both fields with a 19-character password → a four-segment strength bar showed “Strong.” and “Restore wallet” became enabled.
  9. Clicked the Back arrow to check that the words could be re-reviewed before the final submit → Step 1, with all 24 words still filled in.
  10. Clicked “Continue” again → Step 2, with both password fields now empty and “Restore wallet” disabled again.
  11. Filled both password fields again → “Restore wallet” became enabled.
  12. Clicked “Restore wallet” → Home opened at once on the “Private” tab, with no success message: “Updated just now”, “Private balance 0 ₳”, Receive active, Send, Make public and Create greyed, “Fund your public account first: it pays for your Seedelf”, and the “Get started” card (“Your wallet has two sides: …”, with steps 1 “Fund your public account” and 2 “Create your Seedelf”).
  13. Clicked the “Public” tab to check whether the restored wallet had any funds → “Public account 0 ₳”, Send and Make private greyed, a “Staking and governance” card and “Create your Seedelf before making money private…”.
  14. Ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Can you confidently verify every word you typed before submitting? Yes (High). All 24 words show in plain, readable text in numbered boxes, on screen together with Continue, none cut off, and each matched. Caveats: no suggestions, ticks or “checksum OK” (Continue simply turns on); the final button is on Step 2 without the words, so re-checking means going Back, which keeps the words but clears the passwords. Correct, and the words match the given phrase in order. One caveat is wrong because of the harness: real typing shows up to 5 suggestions while a word is incomplete, a non-word gets a red border, and Continue runs a word-list and checksum check before Step 2. What is really missing is any positive “valid” mark.
Was the wallet restored? Yes (High): Home with “Updated just now”, “Private balance 0 ₳” and, on the Public tab, “Public account 0 ₳”; no explicit “restored” message. Correct. The restore ran with exactly the 24 given words, and 0 ₳ on both sides is right for this phrase. The product shows no “restored” message.

Verifier notes.

Final result. The tester restored the wallet on the shortest path with no wrong turns and could check every word in plain, numbered text before Continue. What they recorded as friction is the absence of positive confirmation (per word, for the phrase, after the restore), the final button sitting on the password step without the words, and Back clearing the passwords; their “no suggestions” caveat is a harness artifact.

E01 · Find an old transaction

Test notes. Surface: a full browser tab, 1280x720. Starting state: the funded wallet, unlocked; the tester was told they set it up some time ago and have used it since. In fact the funded preset restores the fixture phrase through the UI when the run starts (28 ₳ private, 10,408.014036 ₳ public including 57.475311 ₳ of rewards, staked with LOGIC), so this device’s private history begins at that restore. Both histories come from fixture data; the verifier notes where that matters. Times show in the machine’s time zone (UTC−7) with no zone displayed, and the fixture’s transactions are dated September 2026. The tester got no environment note, and none was needed: the task moves no money, so the network’s confirmation setting (never) didn’t come into play. Main-run trace (it predates the harness fix for “Details” toggles; none was involved).

Result. PASS WITH FRICTION · confidence Medium · 1 wrong turn · 10 navigation steps · prior product knowledge needed: no, though the right answer depended on guessing that the Private/Public toggle splits the history and checking both sides.

Path taken.

  1. Ran stop, then start → Home on the “Private” tab: “Private balance 28 ₳”, Receive, Send, Make public and Create, a Tokens card, then “dApps” and “Activity” rows near the bottom of the screen.
  2. Took a screenshot of Home → saw the “Activity” row, with a clock-history icon, near the bottom of the visible area.
  3. Clicked “Activity” with the Private tab still selected (wrong turn) → “Private activity”: “Kept encrypted on this device, never asked of Koios. It starts from when this wallet first saw each payment.”; under “23 Sept 2026”, “Already in your private balance +25 ₳ 14:46” and “Already in your private balance +3 ₳ and 1 token 14:46”; then an Export section with “Save as CSV”.
  4. Clicked the +25 ₳ row → a dialog: Amount “+25 ₳”, When “23/09/2026, 14:46:40”, “It was in your private balance when this device first read it, as after a restore, so who paid it isn’t known.”, a transaction id “a1a1a1a1a1a1a1…a1a1a1a1”, “Copy” and “View on Cardanoscan”; no confirmed or pending status.
  5. Closed it and clicked the “+3 ₳ and 1 token” row → the same time, “23/09/2026, 14:46:40”, the token “+1,234,560,000 asset1aetp…kf6dul” with “Not on the wallet’s list: it calls itself tUSDM, but it isn’t the listed tUSDM.”; no status.
  6. Closed it and clicked Back → Home, Private tab. (after the point a normal user would have stopped)
  7. Clicked the “Public” tab → “Public account 10,408.014036 ₳” with a list of tokens. (after the point a normal user would have stopped)
  8. Scrolled down 500 px → found the “Activity” and “UTxOs” rows below the token list. (after the point a normal user would have stopped)
  9. Clicked “Activity” → “Public activity” (“Read from Koios, which already knows this account, 20 transactions at a time.”); the top entry was a Sent at 08:35 on 24 Sept; under 23 Sept, “Sent −25.177821 ₳ 23:07”, “Received +10 ₳ 23:07”, then several Sent rows. (after the point a normal user would have stopped)
  10. Clicked “Received +10 ₳ 23:07” → a dialog: “Received”, Amount “+10 ₳”, From “addr_test1wz2te2wqn85yllvs69grz6a5fsc60pczywg8dg9gp6j2g6g7mzn9f”, When “23/09/2026, 23:07:05”, transaction id “5572e5a9d78545…61f271ff”; no confirmed or pending status. (after the point a normal user would have stopped)
  11. Closed it and opened “Sent −25.177821 ₳ 23:07” to check whether it was the same transaction → a different one (“00676ecff9f323…f3b17c37”, “23/09/2026, 23:07:54”, Network fee “0.177821 ₳”), so the Received row is its own incoming payment. (after the point a normal user would have stopped)
  12. Closed it and scrolled about 1600 px through Public activity → rows went back to 8 Aug 2026, with older Received rows (“+10 ₳ and 1 token 12:45” and “+5 ₳ and 1 token 12:42”, in the 14 Sept to 10 Aug range) and “Load more” and “Save as CSV” at the end; no row anywhere was marked pending or confirmed. (after the point a normal user would have stopped)
  13. Scrolled back up and hovered the “Received +10 ₳” row → no tooltip. (after the point a normal user would have stopped)
  14. Ran stop.

The markers on steps 6 to 13 follow the tester’s abandonment moment at step 3 (“I don’t understand what this means”, severity 3 of 5): “A normal user would likely stop at Private activity and report +25 ₳ at 14:46 as the latest incoming payment, without realising a separate Public activity list exists with a later payment. It isn’t abandonment so much as stopping early with the wrong answer.” The tester didn’t flag individual steps as past that point.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
What is the most recent time ADA came into this wallet? Public activity, “Received” on 23 Sept 2026 (detail: “23/09/2026, 23:07:05”), from addr_test1wz2te2…7mzn9f, tx 5572e5a9d78545…61f271ff; the latest private incoming entries are earlier, two “Already in your private balance” rows at 23/09/2026, 14:46:40 (Medium). Correct by the wallet’s data. The time is UTC−7 (24/09/2026 06:07:05 UTC). The entries above it are Sent, and the private times are block times. Caveat: the sender is the Seedelf contract, so the 10 ₳ came out of a Seedelf private balance, possibly this wallet’s own Make public; a restored device can’t tell, and the screen doesn’t say either way.
How much arrived? “+10 ₳” (High). Correct: +10 ₳ net into the public account, which spent nothing in that transaction.
Is it confirmed? Probably yes (Low): the UI never says confirmed or pending; it is listed in Public activity, “Read from Koios”, with no pending marker, and no entry in either list is marked pending. Correct by inference: it is on chain, because Public activity lists only transactions Koios returns, which are already in blocks, and nothing was pending. No history entry ever shows a confirmation status; “Pending” appears only on the wallet’s own send while it is being watched.

Verifier notes.

Final result. The tester found the latest incoming ADA, the public “Received +10 ₳” at 23/09/2026, 23:07:05, but only after a detour: the first Activity screen (Private) would have given the wrong answer, and no screen shows a confirmation status, so “confirmed” was an inference. The verifier confirmed the answer, adding that the 10 ₳ came from the Seedelf contract and may be the wallet’s own Make public, which the restored device can’t label.

E02 · Lock the wallet and get back in

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel (a window of its own, not docked). Starting state: the funded wallet, unlocked, on Home’s Private tab (28 ₳); the task text gave the wallet password. The tester saw only the scenario and goal (“Make sure nobody can use the wallet while you are gone. Then come back and get back into it.”), not the task title, which says “lock”. press F5 reloads the panel’s page; open-wallet stands in for clicking the extension’s toolbar icon, and in this instance the harness had set the wallet to open in the side panel (per the verifier, a default install opens a full tab). Because the panel is a separate window, “Open in tab” shows as that window closing and a new 1280x720 tab window opening; in Chrome the docked panel closes and a tab opens in the same browser window. The “away” time was simulated: about 18 seconds passed between Lock and Unlock, so the idle auto-lock was never exercised. Nothing is built or sent in this task. Main-run trace (it predates the harness fix for “Details” toggles; none was involved).

Result. PASS · confidence High · 0 wrong turns · 6 navigation steps · prior product knowledge needed: no, only the common convention that a padlock icon locks an app.

Path taken.

  1. Ran stop, then start, and looked at Home → unlocked, Private tab, “Private balance” “28 ₳”; three round icons at the top right (a gear, a padlock, an expand icon); the tester took the padlock to mean lock.
  2. Hovered the padlock → tooltip “Lock”.
  3. Clicked “Lock” → at once a “Welcome back” screen: a “Password” field, a disabled “Unlock” button and “Forgot password? Restore from your phrase”; no balance or account details.
  4. Pressed F5, to check that a reload doesn’t get past the lock → still the locked “Welcome back” screen.
  5. Clicked “Open in tab” (the expand icon), to see whether a full tab would show the wallet → the panel closed and a tab opened on the same locked “Welcome back” screen.
  6. Closed the tab, as if walking away → no wallet windows open.
  7. Ran open-wallet (the toolbar icon), as if back → the side panel opened on “Welcome back”, with focus in the Password field.
  8. Typed the password → “Unlock” turned from disabled to enabled.
  9. Clicked “Unlock” → back on Home: Private tab, 28 ₳, the same tokens, “Updated just now”.
  10. Ran stop.

Wrong turns.

Hesitations.

Observations.

Verifier notes.

Final result. The tester locked the wallet with the header padlock (“Lock”), checked by hand that the lock held through a reload, a full tab and a close and reopen, and got back in with the password and “Unlock”, landing on Home with the 28 ₳ private balance. The friction they recorded is about reassurance at the moment of locking (an icon-only control, no confirmation that it locked, a “Welcome back” heading), not about finding the path.

E03 · Disconnect a site

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel (a window of its own), active, with the Example Market test website (1280x720) open in a tab behind it; windows and switch move between them, and open-website would reopen the site. Starting state: the funded wallet, unlocked, on Home’s Private tab (28 ₳), with the wallet’s sites switch on. The harness preset had connected Example Market just before the run, through the site’s own “Connect wallet” button, the wallet chooser and the real connector popup, choosing the public account; so the tester never saw the connect screen, and the connection was minutes old although the scenario says “earlier”. The test browser has no address bar, so the page shows no domain. The test site never re-reads the wallet while open, keeps its “Connect wallet” button in its header while connected, and (a change made after the pilot) on each load asks the wallet it last connected to, through isEnabled(), and reconnects silently only if the answer is true, forgetting the wallet otherwise; so its “Not connected.” after a reload reflects the wallet’s own answer. The tester saw only the scenario and goal, not the task title, which says “disconnect”. Nothing is sent in this task. Main-run trace (it predates the harness fix for “Details” toggles; none was involved).

Result. PASS WITH FRICTION · confidence High · 1 wrong turn · 12 navigation steps · prior product knowledge needed: no, only the general idea that wallets keep a list of connected sites, probably in settings.

Path taken.

  1. Ran stop, then start → Home, Private tab: “Private balance 28 ₳”, Receive / Send / Make public / Create, Tokens, and a “dApps” card at the bottom.
  2. Took a screenshot and looked for anything about connected sites → the only candidate was the “dApps” card.
  3. Clicked “dApps” (wrong turn) → a dApps page: “Used privately, from one-time accounts”, Minswap and Lovejoin cards, text about one-time accounts, and “On a dApp’s own site, connect Seedelf Wallet and choose a private session: the site then sees a one-time account, and it’s listed here.”; Example Market wasn’t there.
  4. Scrolled down the dApps page (still the wrong turn) → only the version footer; no connected sites.
  5. Tried to click the Settings gear → refused: the header had scrolled out of view.
  6. Scrolled up and clicked Settings → “Network”, then “Wallet” with “Public accounts”, “Contacts”, “Collateral”; about 1740 px more below.
  7. Scrolled down 400 px → “Preferences”: “Language”, “Open Seedelf Wallet in”, “Show ADA’s value in”.
  8. Scrolled down 400 px → the “Sites and mixing” section: “Sites” (“On: sites can ask to connect”) and “Lovejoin”.
  9. Clicked “Sites” → the Sites page: a “Let sites connect to Seedelf Wallet” switch (on), an “Ask for your password to sign for a site” switch (on), and a “Connected sites” row.
  10. Clicked “Connected sites” → one entry: “dapp.example”, “Your public account · since” the day of the run, and a “Disconnect” button.
  11. Ran windows and switched to the website, to see whether its name or domain matched “dapp.example” → no domain anywhere on the page (no address bar); it still showed itself connected, seeing “10,350.538725 ADA and 6 tokens”.
  12. Switched back to the wallet and hovered “Disconnect” → no tooltip.
  13. Clicked “Disconnect” → a confirmation: “Disconnect dapp.example?”, “dapp.example has to ask again before it sees anything more. It keeps what it already saw.”, with “Keep it” and a red “Disconnect the site”.
  14. Clicked “Disconnect the site” → the list now said “No site is connected. A site asks when it wants to, and you choose.”
  15. Switched to the website → still “Connected to Seedelf Wallet”, with the address and balance; the tester worried the disconnect hadn’t worked.
  16. Pressed F5 on the website → “Not connected.”, the site’s log “isEnabled() -> false”, “Buy item - 15 ADA” and “Sign in with wallet” disabled, and “Connect a wallet to buy.”
  17. Clicked “Connect wallet” on the site → the site’s “Choose a wallet” dialog, listing Seedelf Wallet.
  18. Clicked “Seedelf Wallet” in the chooser → a wallet popup: “Connect a site”, “dapp.example”, “Example Market (test site) · https://dapp.example”, “Choose what the site sees”, with “Connect” disabled until a choice is made; this confirmed that dapp.example was Example Market.
  19. Clicked “Cancel” in the popup → “Nothing’s waiting.”, then the popup closed; the site showed “The wallet did not connect: The user declined. (code -3)” and logged “enable() -> refused (code -3)”.
  20. Switched to the wallet → Connected sites still said “No site is connected.”; ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Can Example Market still see or use the wallet, checked from the website’s side? No (High). After the disconnect and a reload the site shows “Not connected.”, logs “isEnabled() -> false”, and “Buy item - 15 ADA” and “Sign in with wallet” are disabled. Clicking Connect made the wallet ask again; the tester cancelled and the site showed “The wallet did not connect: The user declined. (code -3)”. The wallet’s Connected sites says “No site is connected.” Per the wallet, the site “keeps what it already saw” (the public address and balance). Correct. The cut-off took effect at the disconnect itself, not at the reload: from then on the wallet refuses every call from that origin except isEnabled and enable, and enable opens a new approval. The site keeps what it read while connected: the network id, the used address addr_test1qq…mqkt5dmn “and 3 more”, and “10,350.538725 ADA and 6 tokens”.

Verifier notes.

Final result. The tester disconnected Example Market through Settings > “Sites and mixing” > “Sites” > “Connected sites” > “Disconnect” > “Disconnect the site”, and confirmed it from the website after a reload (“Not connected.”, isEnabled() false, and a fresh approval needed to reconnect, which they cancelled). The friction: the dApps page first, the site listed only as “dapp.example”, and the open page still showing itself connected until reloaded.

E04 · Withdraw staking rewards

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel. Starting state: the funded wallet, unlocked, on Home’s Private tab (28 ₳). A harness override set the staking rewards to 12.345678 ₳, so the public account showed 10,362.884403 ₳ including them; staked with LOGIC, voting power “Always abstain”. The task said “Do it (you may confirm if you are comfortable)”. The network confirms only on the tester’s command: the task offered world confirm (“makes the network put your submitted transaction into a block, as would happen within about a minute in real life”), to use only after submitting something and looking at what the wallet shows right after. Transactions paid by the public account complete normally here (the refusing outside service affects only spends from the private balance), so this task could finish end to end, and no environment note was given. The tester saw only the scenario and goal, not the task title, which says “withdraw”. Main-run trace (it predates the harness fix for “Details” toggles; none was involved).

Result. PASS WITH FRICTION · confidence Medium · 1 wrong turn · 7 navigation steps · prior product knowledge needed: no, they had to infer that staking belongs to the Public side, which a basic crypto user could guess from the two tabs.

Path taken.

  1. Ran stop, then start → Home, Private tab: “Private balance 28 ₳”, Receive / Send / Make public / Create, a Tokens card with an unlisted tUSDM token, and dApps; nothing about staking.
  2. Scrolled down the Private tab looking for staking (wrong turn) → only “Activity” and “UTxOs” buttons and the version footer.
  3. Scrolled back up and clicked the “Public” tab → “Public account 10,362.884403 ₳”, with “Includes 12.345678 ₳ of staking rewards” in small grey text beneath, and a card “Staking and governance”, “Staking with LOGIC”, “Voting power: Always abstain”.
  4. Clicked “Staking and governance” → “Your pool” “LOGIC · Logical Mechanism”; “Your ADA stays in your public account, free to spend: the pool never holds it. …”; “Rewards” “12.345678 ₳”; “Spent along with anything your public account pays, or withdrawn here. Settings can keep them here instead.”; a large “Withdraw rewards” button.
  5. Clicked “Withdraw rewards” → “Review: withdraw rewards”: “Nothing is sent until you press Withdraw 12.345678 ₳”, “Rewards withdrawn 12.345678 ₳”, “Network fee 0.171749 ₳”, “Public account after 10,362.712654 ₳”, “Your balance stays the same, but for the fee: these rewards were already counted in it.”, “This is public: it names your public account.”
  6. Clicked “Transaction details” → “The transaction” dialog: “Spends 1 UTxO”; “Pays 1 output” to addr_test1qq8ac7…kt5dmn, labelled “#0 · a key that stakes”, 15.173929 ₳; “Network fee 0.171749 ₳”.
  7. Scrolled down in the dialog → “Size 372 bytes (161 of body)”, “Signed 2 signatures, not sent yet”, “Withdraws rewards” stake_test1urj40…324ywz 12.345678 ₳.
  8. Clicked Close → back on the same review.
  9. Clicked “Withdraw 12.345678 ₳” → back on the Public Home: “Reward withdrawal sent. Waiting for the network…” with a spinner and a Cardanoscan link; the balance still 10,362.884403 ₳ with “Includes 12.345678 ₳ of staking rewards”; “Send” and “Make private” greyed out, with “Wait for the last transaction to confirm” below them.
  10. Ran world confirm, then waited 3 s → the harness reported the block (5212001), but the wallet still showed “Waiting for the network…”; no change yet.
  11. Waited 15 s → a green “Rewards withdrawn” banner with “Dismiss”; “Public account 10,362.712654 ₳”; the “Includes … staking rewards” line gone; Send and Make private enabled again.
  12. Opened “Staking and governance” again to check → “Rewards 0 ₳”, “Withdraw rewards” greyed out.
  13. Ran stop.

Wrong turns.

Hesitations.

Observations.

Verifier notes.

Final result. The tester withdrew the 12.345678 ₳ of rewards through the Public tab → “Staking and governance” → “Withdraw rewards” → “Withdraw 12.345678 ₳”, paying a 0.171749 ₳ fee, and after world confirm saw “Rewards withdrawn”, “Public account 10,362.712654 ₳” and “Rewards 0 ₳”, exactly as the review predicted. They remained unsure whether withdrawing was needed at all; the verifier confirms that, under the default setting, it wasn’t.

E05 · Understand a failed refresh

Test notes. Surface: a 360x640 window standing in for Chrome’s side panel. Starting state: the funded wallet, unlocked, on Home’s Private tab (28 ₳ private; the public account 10,408.014036 ₳ including 57.475311 ₳ of rewards). Backend “fail-after-load”: the wallet’s start-up read succeeded, then, from the moment the starting state showed, the fake Koios answered every request with HTTP 503 for the whole task; so the first screen’s “Updated just now” was true, and no retry could succeed. press F5 reloads the panel’s page. The view is printed once things settle after each command, so short-lived states (“Trying…”, a spinning icon) show only when a command lands inside them. Main-run trace, made before the harness fix for “Details” toggles: role=button name="Details" matched nothing although the view listed a “Details” button, and text="Details" worked (step 6). The tester saw only the scenario and goal, not the task title, which says “failed refresh”. Nothing is sent in this task.

Result. PASS WITH FRICTION · confidence High · 2 wrong turns · 11 navigation steps · prior product knowledge needed: no, the stale balance and the advice to retry needed nothing, though “Koios” and “503” take outside knowledge or the Settings privacy text.

Path taken.

  1. Ran stop, then start → unlocked on the Private tab: “Updated just now” with a refresh icon beside it, “Private balance 28 ₳”, a Tokens list; no warning of any kind.
  2. Hovered the “Updated just now” text → no tooltip.
  3. Hovered the circular-arrows icon beside it → tooltip “Read the chain again”; the label now read “Updated 12 s ago”.
  4. Clicked Refresh → the label changed to “Updating…” and Refresh went disabled.
  5. Waited 5 s and took a screenshot → a yellow-bordered warning box at the top: “Couldn’t refresh: these are your balances as last read”, a green “Try again” link and a “Details” toggle; below it, “Updated 22 s ago”.
  6. Clicked “Details” (the first try missed because of a remote-control targeting quirk; the second worked) → “Koios is having trouble right now (503 for account_info). Try again in a minute.”
  7. Clicked the “Public” tab, to see whether the public side was affected too → the same warning stayed at the top; “Public account 10,408.014036 ₳”, “Includes 57.475311 ₳ of staking rewards”, “Updated 32 s ago”.
  8. Opened Settings (gear), looking for a network or server option (wrong turn) → “Network” (Mainnet / Preprod), “Public accounts”, “Contacts”, “Collateral”.
  9. Scrolled down Settings about 2,000 px → reached About and the privacy text “The wallet only ever talks to Koios and giveme.my, …”, which told the tester what Koios is; no way to choose a different data source.
  10. Tried to click Home (the Seedelf logo) (wrong turn) → refused: “That control isn’t in the visible area right now (it is above).”
  11. Scrolled up and clicked Back → Home (Public tab), and the warning box was gone: only “Updated 57 s ago”, although nothing had refreshed.
  12. Waited 60 s (two 30 s waits), as the message asked → “Updated 1 min ago”; no automatic refresh visible.
  13. Clicked Refresh again → it failed again and the warning came back: “Couldn’t refresh: these are your balances as last read”, “Updated 2 min ago”.
  14. Opened “Details”, then clicked “Try again” (the command log shows two clicks, about 15 s apart) → the button changed to “Trying…” (disabled) and the label to “Updating…”, then it failed again with the same Koios 503 message.
  15. Clicked the Private tab and scrolled down → the rest of Home: Tokens, dApps, Activity, UTxOs.
  16. Opened “Activity” → “Private activity”, “Updated 2 min ago” and two incoming items (+25 ₳; +3 ₳ and 1 token); no error banner on this page.
  17. Clicked Back, then pressed F5 to reload the panel → “Updating…”, then the same warning: “Couldn’t refresh: these are your balances as last read”, “Updated 2 min ago”.
  18. Ran stop.

Wrong turns.

Hesitations.

Observations.

Answers the task asked for.

Question Tester’s answer from the UI Verifier’s check
Is the balance being shown current? No (High). After Refresh the wallet said “Couldn’t refresh: these are your balances as last read”, and the label kept counting (“Updated 22 s ago” … “Updated 2 min ago”); the figures (Private 28 ₳, Public 10,408.014036 ₳) are from the last successful read, when the session started. Correct. The only successful read was at session start (at step 1 the figures really were fresh); every later read failed. By the end they were about 3 minutes old; the label rounds minutes down, so it said “2 min ago”. Nothing changed on the fake chain, so they were still accurate, but the wallet couldn’t confirm that.
What went wrong? “Koios is having trouble right now (503 for account_info).” From the Settings privacy text, Koios is the outside service the wallet reads the blockchain from, so it’s that service’s problem, not the wallet’s or the funds’. (High) Correct. Koios, the fixed third-party service the wallet reads Cardano through, answered every read with HTTP 503 from the moment the starting state showed (the harness’s fake outage); each read was retried twice and then failed at account_info. Neither the wallet nor the funds were at fault.
What can be done about it? “Try again in a minute”, with “Try again” or the Refresh icon (“Read the chain again”); meanwhile the balances shown are the last ones read. Nothing else is offered: no way to switch provider. Retrying after a minute, and reloading, still failed. (High) Correct. Wait and retry: “Try again”, the Refresh icon, or reopening Home more than a minute after the last read, which reads again by itself. No other provider, status link or setting exists. The fake outage never lifted, so no retry could succeed in this run.

Verifier notes.

Final result. The tester found that the balances weren’t current only after pressing Refresh (“Couldn’t refresh: these are your balances as last read”, with “Updated … ago” climbing to 2 min), learned the cause under Details (“Koios is having trouble right now (503 for account_info)”), and concluded that the only remedy was to wait and retry, which kept failing through a minute’s wait, two retries and a reload. The verifier kept PASS WITH FRICTION: the “no warning until Refresh” point is mostly the harness’s timing, while the warning vanishing after a visit to Settings, the developer wording and the lack of any remedy beyond retrying are real.

4. Abandonment moments

There were 43 moments, in 23 of the 29 runs; T02, T13, T17, T18, T20b and E02 had none. 35 come from the product and are merged below into 25 entries. 8 come from the test environment and are listed at the end. By type, across all 43: 14 “This seems broken”, 13 “I don’t know what to do”, 10 “I don’t understand what this means”, 3 “I don’t trust pressing this button” and 3 “I might lose money”. Severities ran from 2 to 4.

Each entry also says how it stands against the earlier usability reviews (Appendix B), a classification made after the blind runs; it doesn’t change what the testers saw.

Ranking, most serious first:

An entry that merges moments ranks by its highest severity and, at that severity, its most serious type.

1. While a send is pending, the balance rises above its pre-send figure

2. “Sent +32.300614 ₳” for a 25 ₳ payment

3. “No Cardano wallet was found on this page.”

4. The most the private balance can send

5. Still no wallet after turning Sites on

6. A disconnected site still shows itself as connected

7. Paying an ordinary address starts at the wrong Send

8. Two activity lists, and the first one gives the wrong answer

9. What a mix costs

10. After a send, nothing on Home or in Activity changes

11. The swap review has no total

12. A payment comes in and the balance stays at 0 ₳

13. No visible sign that Create Seedelf was sent

14. A retry during the decline cooldown is refused, and the wallet shows nothing

15. An outside party, and a privacy caveat, on private-spend reviews

16. “Signed 3 signatures, not sent yet” before the user had confirmed

17. The refusal headline names the wrong cause, and a second refusal leaves nothing to do

18. “Staking rewards moved into your balance … already counted in it”

19. Why withdraw rewards at all?

20. Staking and voting aren’t on the tab Home opens on

21. Swaps and mixing only behind “dApps”

22. “dApps” doesn’t list connected sites

23. Private Receive on a new wallet: no Seedelf, and Create disabled

24. No sign of accounts on Home

25. After repeated failures, only “Try again in a minute”

Caused by the test environment (not product findings)

H1. A private payment’s final Send is refused. T04b (step 12; “This seems broken”; 3), T06 (step 8; “This seems broken”; 2), T16 (step 13; “This seems broken”; 3). The screen said “Nothing was sent. Something it spends may have been spent or changed…”; in T16, “Nothing was sent: something it spends may have changed since you reviewed it.”. Reason: the fake giveme.my refuses every collateral request. With the real service, T04b and T06 would have paid and T16’s session would have been funded. The headline’s wording is a real finding (entry 17).

H2. A listed pool can’t be read. T12 (step 13; “This seems broken”; 2): HODLr, from “559 live pools”, gave “Couldn’t read the pool’s details just now”. Reason: the fake Koios had no details for a pool in its own list. Real Koios has details for every listed pool, and a retired one would show “This pool has retired: it earns nothing now. Choose another.”

H3. No proposal can be understood. T14 (step 17; “I don’t understand what this means”; 4): every action said “Koios has no title or summary for it.”, and both “Read its full text” and “See it on Cardanoscan” opened “Page not available”. Reason: the recorded preprod proposals had no metadata, and the harness blocks outside pages. With metadata, the T14r tester could decide. What remains real: the missing titles are what preprod Koios returned for these actions, since it hadn’t read their anchors. Any action Koios has no text for looks like this, and its only route to the text is the outside link, which the wallet never fetches itself (verifier; see section 5, Governance).

H4. A treasury withdrawal with no amount or recipient. T14 (step 14; “I might lose money”; 3). Reason: the recorded rows lacked the withdrawal field. In T14r the detail page showed the amount and the recipient stake address. In any case, a DRep vote never moves the voter’s own funds.

H5. A restored wallet that looks new. T20a (step 10; “I don’t know what to do”; 2): 0 ₳ on both sides and no “restored” message. Reason: the test phrase was never funded; a funded phrase shows its balance on the first read. The missing confirmation is a real but minor point, and T20b hesitated at the same moment.

H6. “Updated just now” during an outage. E05 (step 1; “I don’t know what to do”; 2). Reason: the harness let the first read succeed before the outage began; a wallet opened during an outage shows the warning by itself. What remains real: Home doesn’t re-read while it stays open, so an outage that starts while Home is open goes unnoticed until Refresh.

5. Mental-model failures

Public vs Private

Seedelf

Make private and Make public

Pending money

Staking rewards

dApp private sessions

Lovejoin

Governance

Other mismatches

6. Discoverability problems

Everything below exists and was reached, but only after a detour, a guess or a search.

Where things are, and how testers got there

Goal Where it is What happened Tasks
Pay an ordinary address Public tab → “Send”; from the private balance, “Make public” Pressed the Private tab’s “Send” (T04b, T06; T04 hesitated over it); reached “Make public” only through Send’s address error; T04b found the public Send last T04, T04b, T06
Give an ordinary wallet an address Public tab → “Receive”; Get started’s “Show my address”; “Show my public address” on private Receive Pressed the Private tab’s “Receive” first (T01); T03 nearly did T01, T03
Make ADA private Public tab → “Make private” Looked on the Private tab first T07
Stake, withdraw rewards Public tab → “Staking and governance” Searched the Private tab first T12, E04, T13
Stop staking A red row at the bottom of the Staking page, about 700 px down; only “Change pool” sits by “Your pool” Wondered whether it was inside “Change pool”; scrolled T13
Vote Public tab → “Staking and governance” → about 400 px down → “Governance actions” Searched Private first; both rated it as needing prior knowledge T14, T14r
Latest incoming payment “Activity” from each tab opens that tab’s list; on Public it’s below the token list, about 500 px down Read Private activity first E01
Swap Private tab → “dApps” (cut off at the bottom of the first screen at 360x640) → Minswap → “New swap”; no dApps row on Public Searched Public first; three screens deep T10
Mix Private tab → “dApps” → Lovejoin Guessed that a mixer would be a dApp T11
Let sites see the wallet Settings → “Sites and mixing” → Sites, about 850 px down; also the Private tab’s “dApps” row (“Off: sites can’t see Seedelf Wallet”, “Let sites connect”) Searched Settings after the site found no wallet; never saw the dApps notice T15
Check or remove connected sites Settings → “Sites and mixing” → Sites → “Connected sites”, about 1,000 px down; the only pointer is the connect prompt’s ⓘ Opened “dApps” first; T17r never found the list T17, T17r, E03
Add an account Settings → Wallet → “Public accounts” → “Look for the next account” → “Add Account 2”; nothing on Home until a second account exists Guessed Settings; read “Look for” as a search T19

Help that exists but sits off the path (exists-not-found)

On the screen, but out of view on arrival

Screens keep the previous screen’s scroll position; the verifier found nothing in the UI that resets it.

7. Trust problems

Balances and history that contradict the review

Failures that point at the wrong cause

Outside parties in the path of money

Approval and signing

Whose output is whose

Reviews that can be confirmed unseen

Promises that the fine print qualifies

Disclosure to sites

What earned trust

8. Tasks that worked naturally

Nine runs had no wrong turns: T02, T04, T07, T11, T13, T19, T20a, T20b and E02 (T04’s because of its title). The workflows below went cleanly, and the patterns behind them are the ones to reuse.

  1. Lock and unlock (E02: PASS, 0 wrong turns, 6 steps). The padlock at the top right, with the tooltip “Lock”, locked the wallet at once. The tester checked that the lock held after a reload, in a tab and after reopening, and “Unlock” returned them to the same Home. “I’d do it the same way again without thinking.” Pattern: one always-visible control with an immediate, visible effect. Not exercised: the idle auto-lock.
  2. Restore (T20a, T20b: 0 wrong turns; T20b PASS). 24 words were preselected; the words go in numbered plain-text boxes on one screen; Enter or Space moves to the next box; the steps are marked “Step 1 of 2” and “Step 2 of 2”; and a warning says the panel hands over to a tab (“Each opens in a full tab”). Both testers could check every word before submitting. Pattern: a short wizard whose whole state is visible.
  3. Receive privately (T02: 0 wrong turns, 6 steps). The labels answer the question: “Its whole name: share this to be paid privately”, “Share a Seedelf’s whole name, not its tag”, “Only someone using Seedelf Wallet can pay this. Anyone else needs your public address.” Pattern: put the instruction in the label.
  4. Fund a new wallet (T03). The numbered “Get started” checklist has a button for each step, ticks steps off as they finish, and disappears at the end, which the tester called “a clean completion signal”. The tester stated the intended order exactly, and the create form’s estimate matched the review. Pattern: a checklist with direct actions and a visible end.
  5. Make ADA private (T07: 0 wrong turns, High). The teal “Make private” button has a tooltip. The review shows both “after” balances and puts the amount in the button (“Make 20 ₳ private”). Then come the banner, actions held with “Wait for the last transaction to confirm”, a “Pending” row in Private activity, and “Made private” on confirmation, at exactly the reviewed balances. Pattern: the private side’s pending lifecycle; Home’s balances still waited for confirmation (section 4). Private activity’s “Pending” row is the model Public activity lacks (T08).
  6. Stop staking (T13: 0 wrong turns, High). The review lists each consequence in plain bullets (rewards withdrawn, unpaid rewards lost, vote delegation ending, how to undo it), states the deposit’s return and has a red confirm button. The tester called it “Consequential but reversible”, which is right. Pattern: list the consequences before a consequential action. (The review opens at its bottom; see section 6.)
  7. Sign a site’s transaction (T18: 5 steps, High). “Total leaving your public account 15.25 ₳” comes first, then “Network fee 0.25 ₳, counted in the total”, the full payee (matching the site), and “Signing ties this transaction to your public account, as any payment from it. Your private balance isn’t in it.” All five task answers were right. Pattern: total first, a fee “counted in the total”, and a privacy line on the signing screen.
  8. Recover from a refused send (T09). “Nothing was sent” comes first. Send is replaced by a single “Refresh and review again”, which rebuilt the review in place (“Review updated just now. Check it again.”), and Back kept the form. Pattern: one obvious recovery action, with nothing lost.
  9. See whether Lovejoin can mix (T11: 0 wrong turns, 5 steps). The page gives readiness in plain numbers above the fold, disables Review with “Try again later” under it, shows the cost large with a percentage, and discloses the missing audit. Pattern: say whether it can work before the user commits.
  10. Correct a wrong input (T06, T04b). Pasting an address into “Seedelf name” got a specific explanation and “Pay it with Make public”, with the address carried over. The private Receive’s “Show my public address” works the same way (T01). Both testers listed it as working well. Pattern: recognise the input and carry it into the right flow.
  11. The connect prompt (T15, T16, T17, T17r, E03). Nothing is preselected, and Connect stays disabled until the user picks what the site sees. The site’s name, URL and network badge are shown, the public card names the account, and “No fee” made the choice easy. Declining is another matter: the wallet never shows that it refused a site, and a quick retry meets a silent cooldown (section 4). Pattern: an explicit choice, and the site’s identity, before connecting.
  12. Add an account (T19: 0 wrong turns, 5 steps). Once in Settings, the ⓘ explained what an account is, “Add Account 2” was prominent, and “Account 2 is in the list now.” confirmed the result. Pattern: say in a sentence what just changed. The lock, restore and decline flows lack this.
  13. Understand a stale balance (E05). “Couldn’t refresh: these are your balances as last read”, with “Updated N ago” counting from the last good read, reassured the tester that their funds weren’t gone. Pattern: say what the numbers on screen mean when they’re old.
  14. Withdraw rewards (E04). A big “Withdraw rewards” button, an honest review (“Your balance stays the same, but for the fee”), “Withdraw 12.345678 ₳” on the button, and “Rewards withdrawn” afterwards. The confusion was about why to withdraw, not how (section 5).
  15. Reviews in general. Testers read the standard review correctly every time it appeared, and every submitted transaction matched its review. That layout is the one to reuse where it is missing: on the swap review (T10), the Lovejoin page (T11) and the private-session costs (T16). It is “Nothing is sent until you press …”, “Total leaving …”, “… after”, and a button that names the action and the amount.

9. Highest-value follow-up changes

Each change ends with how it stands against the earlier usability reviews; Appendix B gives the references.

Order: changes that fix wrong money figures first; then by the abandonment moments in section 4 that each change would remove, weighted by severity (a severity-4 moment counts 4); ties go to the change whose problem showed up in more runs. The weights: item 1, 6; item 2, 14; item 3, up to 10; item 4, 8; item 5, up to 8, behind item 4 on runs (10 against 11); item 6, 6; items 7 and 8, 5 (three runs each); item 9, 4; item 10, 2. Item 3 depends on item 1 and must ship with it or after it.

  1. Fix the two figures that show money that isn’t there.
    • Failure: while T08’s 25 ₳ send was pending, a Refresh showed 10,440.31465 ₳, with the withdrawn rewards counted twice, against the review’s 10,382.839339 ₳. After confirmation, Activity listed the payment as “Sent +32.300614 ₳”. The verifier confirmed both as defects, and T04’s payment would have read “Sent +45.300614 ₳”. With “Use staking rewards when spending” on, every payment from a staked account with rewards is exposed; T04, T04b, T07 and T08 all withdrew rewards.
    • Change: never count withdrawn rewards twice, and list a sent payment as what left, with the rewards collected shown separately.
    • Effect: removes T08’s two severity-3 moments, and the only balance shown in this test that matched no real state.
    • Earlier reviews: regression: reported before and marked fixed, seen again here (Appendix B).
  2. Tell the user about site state where they are.
    • Failure:
      • A site couldn’t see the wallet because Sites is off by default and the switch is 850 px into Settings (T15, severity 4).
      • After turning it on, an unexplained reload was needed (T15, severity 3).
      • Three testers looked for connected sites in “dApps” (T17, T17r, E03).
      • Connected sites shows the domain, not the site’s name (E03), and “Your public account” without its number (T15).
      • A decline shows “Nothing’s waiting.” and closes; a retry during the cooldown is refused silently (T17r); and a disconnected page still looks connected (E03).
    • Change: in the places users look (Home, “dApps”, the Sites switch), the wallet says whether sites can see it, which sites are connected and with which account, and when an open page must be reloaded. The connect prompt’s “Cancel” says that it refuses the site and that the site must wait before asking again.
    • Effect: removes the highest-severity product moment and four more (T15, T17r, and two in E03). The severity-4 moment measures a first connection: a long-time user would often have turned Sites on already (T15).
    • Earlier reviews: partly reported before; part of it is new (Appendix B).
  3. Make Home and Activity follow money in motion.
    • Failure: after a send, Home kept the pre-send balances and Public activity showed nothing until confirmation (T04, T04b, T07, T08). Incoming money waited for a manual Refresh (T01, T02, T03). The “X ₳ of this is on its way” line exists for this case but appears only after a manual Refresh (T08), because Home doesn’t re-read after a send (T07 verifier).
    • Change: right after a send, Home reads again and shows what is leaving and what is coming back, and Public activity lists the payment as pending, as Private activity already does. For money coming in, not polling is deliberate (E05 verifier) and every poll costs a Koios read, so that part is a trade-off: a Refresh that is easier to find than the small unlabelled icon (T01, T03), or reads at chosen moments, rather than polling all the time.
    • Depends on item 1: with today’s code, a read right after a send would show T08’s double count on every public send that withdraws rewards (T07 verifier), so this ships with item 1 or after it.
    • Effect: removes the three moments after a send, including T07’s “I might lose money”, and eases the two at incoming payments, including T01’s “I don’t trust pressing this button”, as far as the chosen design reaches them.
    • Earlier reviews: regression: reported before and marked fixed, seen again here (Appendix B).
  4. Make the public side visible from the Private tab.
    • Failure: Home opens on Private on every panel open. Nothing there shows the public balance or says that ordinary sends, Make private, staking and voting are one tab away. 11 runs looked on Private first (wrong turns in T01, T04b, T12, T14, T14r, E01, E04; hesitations in T03, T04, T07, T13). The visible labels “Send” and “Receive” don’t say which side they act on; only the accessible names do.
    • Change: whichever tab Home opens on, the user can see that the public balance exists and can reach its actions, staking and governance in one step, and the action labels name their side.
    • Effect: removes the most common first wrong turn (7 runs) and four abandonment moments (T01, T04, T12, T14r).
    • Earlier reviews: partly reported before; part of it is new (Appendix B).
  5. Name causes and third parties in the user’s terms.
    • Failure: any giveme.my refusal blames “something it spends” and hides who refused under “Details”, with no advice for a repeat (T04b, T05, T06, T09, T16). “Send asks giveme.my to lend the collateral” never says whose money it is or whether it costs anything (T04b, T06, T09, T10, T16). “Koios is having trouble right now (503 for account_info)” is the one Koios error that doesn’t say what Koios is (E05 verifier), and the activity headers and the Public accounts note name Koios without explaining it (T07, E01, T19).
    • Change: the headline says who refused and what to try if it happens again; the review explains the collateral line in a phrase or links to Settings → Collateral; and the 5xx error and the notes that name Koios say what it is, as the timeout and unreachable errors already do.
    • Effect: removes T09’s two moments and T04b’s at the collateral line, and eases T16’s; refusals and outages read less often as something broken.
    • Earlier reviews: partly reported before; part of it is new (Appendix B).
  6. Give private Send a Max for ADA and an honest shortfall message.
    • Failure: private Send has no ADA Max, though public Send, Make private and Make public all have one (verifier). “Not enough ADA … for this and its fee” also covers the change’s minimum, so amounts well within the fee on screen were refused, and the check uses an estimated fee higher than the one shown, so the maximum can’t be worked out from the screen (verifier). The tester needed about 15 guesses and ended with Low confidence (T05).
    • Change: Max fills in the largest amount that will pass, and the message says what must stay behind.
    • Effect: the test’s only Low-confidence task becomes one click, and T05’s two severity-3 moments go.
    • Earlier reviews: partly reported before; part of it is new (Appendix B).
  7. Offer both routes for paying an ordinary address, and explain the words on the way.
    • Failure: Private Send’s only field is “Seedelf name”, and its address error offers only “Make public”, never the public Send (T04b, T06). “Make public” read as a privacy toggle or a transfer to oneself (T04b, T06). “Seedelf” is undefined where it is used (T02, T04b, T06).
    • Change: the address error offers the public account’s Send as well as “Make public”, saying what each reveals. “Seedelf name” and “Make public” explain themselves where they first appear.
    • Effect: T04b’s two real wrong turns (the Private Send, pasting the address) and T06’s one become a single informed choice, which removes their moments at the wrong Send. Without the fake refusal, T04b’s tester would most likely have paid through Make public from the private balance, never learning that the public account has an ordinary Send (verifier); the choice shows both.
    • Earlier reviews: partly reported before; part of it is new (Appendix B).
  8. Give the swap, Lovejoin and private-session screens one total.
    • Failure: the swap review lacks the “Total leaving …” and “… after” rows that the reviews for both Sends, Make public, Make private and Create a Seedelf have, “For the swap 16 ₳” reads like a total and isn’t, and “the collateral” means two things (T10). Lovejoin’s “3.8 ₳” and “15.3 ₳” don’t reconcile (T11). The private session’s “A fee each way” gives no figure for the way back (T16).
    • Change: each screen states what leaves the balance now, what comes back and the expected total cost, in the review layout the other flows use.
    • Effect: removes T10’s “I might lose money” and T11’s severity-3 moment, and testers no longer have to add up outputs in Transaction details.
    • Earlier reviews: partly reported before; part of it is new (Appendix B).
  9. Say what happens to the user’s own money on reviews and in Transaction details.
    • Failure: the rewards row stopped four testers (T04, T04b, T07, T08). E04 couldn’t see why to withdraw, and “Settings can keep them here instead.” names no setting. The change output is only “a key that stakes” (T04, T08, T12, T13, E04, T18), so testers worked out which outputs were theirs from address suffixes (T18).
    • Change: the rewards row says which balance it means and that nothing extra leaves; the staking screen says when withdrawing by hand matters; and Transaction details marks the user’s own outputs.
    • Effect: removes T07’s and E04’s moments and a hesitation seen in eight runs, and makes the details dialog usable for checking a payment.
    • Earlier reviews: regression: reported before and marked fixed, seen again here (Appendix B).
  10. Open every screen at its top.
    • Failure: screens keep the previous scroll position, and the verifier found nothing that resets it.
      • “Review: stop staking” opened with the red button in view and “Nothing is sent until you press Stop staking” hidden (T13).
      • After “Create Seedelf”, Home hid its own “Seedelf creation sent…” banner, so the tester thought nothing had happened (T03).
      • Other screens opened 86 to 360 px down, or at their bottom (T04b, T06, T10, T11, T14, T14r, T16).
    • Change: a new screen starts at its top.
    • Effect: titles, “Nothing is sent until …” lines and status banners are seen on arrival. One case needs more than this: at 360x480 the send review’s total sits below a pinned, clickable Send whatever the scroll position, because the review keeps its footer pinned (T04 verifier).
    • Earlier reviews: new in this test (Appendix B).

10. Human testing recommendations

The AI testers read every word and act more slowly than people. They saw accessible names that sighted users don’t, saw a tooltip only when they hovered on purpose (and then at once), couldn’t feel visual weight, and ran into harness limits. These tasks are where that most likely changed the outcome.

  1. Pay a friend’s ordinary address, untitled, in the docked side panel (T04, T04b).
    • Watch for: which Send they press first; whether “Seedelf name” stops them; whether they choose “Make public” or look for the Public tab; and what they think “Make public” will reveal.
    • Why the AI test couldn’t settle it: T04’s title gave the answer away. T04b’s tester saw “Send privately” and “Send publicly” in the harness view, had been warned that an outside service would refuse, and found the public Send only after the fake refusal. How a real user finishes this task is unknown.
  2. Send from a staked account, then watch it confirm on the real network (T07, T08).
    • Watch for: whether they notice the unchanged balance; whether they press Refresh mid-send (which shows the double count); how they read “35.300614 ₳ of this is on its way”; whether they try to send again or close the wallet; and how they read “Sent +32.300614 ₳”.
    • Why the AI test couldn’t settle it: the harness confirmed on command, and the AI testers read the banner closely and did the arithmetic. A person may watch the big number rather than read the small banner.
  3. First run: install, create a wallet, fund it from another wallet and receive (T01, T03).
    • Watch for: whether they press the Private tab’s “Receive”; whether they find Get started’s “Show my address”; how long they wait before finding Refresh; and whether they try the disabled Create.
    • Why the AI test couldn’t settle it: T01’s onboarding ran in a 1280x720 tab, which shows more of Home than the panel does, and the harness’s payments landed instantly and announced themselves.
  4. First connection to a real dApp in real Chrome (T15).
    • Watch for: what they do when the site finds no wallet; whether they find the Sites switch or the Private tab’s “dApps” notice; whether they accept Chrome’s “all websites” permission prompt; and whether they think to reload.
    • Why the AI test couldn’t settle it: the headless browser couldn’t show Chrome’s permission prompt (access was pre-granted), the panel wasn’t docked beside the site, and the AI tester got through on CIP-30 knowledge.
  5. Connect privately and buy, with a working giveme.my (T16).
    • Watch for: how they choose the amount; whether they understand what the site sees after reading the linking note; how they wait for the funding; whether they close the window; and whether they ever bring the money back.
    • Why the AI test couldn’t settle it: the run was BLOCKED, and no session was ever created.
  6. Stop staking in the side panel (T13).
    • Watch for: whether they press the red “Stop staking”, which is in view on arrival, without scrolling up to the title and “Nothing is sent until you press Stop staking”.
    • Why the AI test couldn’t settle it: AI testers scroll and read everything, while people act on the most prominent button. The risk is about visual weight and speed.
  7. Swap ADA for MIN through “Start swap”, with a working giveme.my and a Lovejoin pool that has room (T10, T11).
    • Watch for: whether they find “dApps”; whether they look for a total; whether they leave “Bring it back through Lovejoin” on; whether they understand the three transactions and know when the swap is done; and how they react to Lovejoin’s cost.
    • Why the AI test couldn’t settle it: Start swap couldn’t complete; the pool had 0 boxes, so the Lovejoin cost table never appeared; and the AI tester computed totals that people won’t.
  8. Send as much of the private balance as possible (T05).
    • Watch for: how many tries they make before settling; whether they conclude the wallet is broken; and whether they include the tokens.
    • Why the AI test couldn’t settle it: the AI tester bisected about 15 times. People stop much sooner, so the real cost is the amount they settle for.
  9. Decline a real dApp, retry at once, then find and remove the connection (T17, T17r, E03).
    • Watch for: what they conclude when nothing appears during the cooldown; whether they look in “dApps”; whether they find Connected sites; and whether they trust the disconnect while the site still shows itself as connected.
    • Why the AI test couldn’t settle it: the test site printed the wallet’s cooldown text word for word and logged every call, which real dApps rarely do, and harness latency moved the retry’s timing.
  10. Vote as a DRep on real proposals (T14, T14r).
    • Watch for: whether they find governance starting from the Private tab; whether the abstract is enough to decide; what they make of “Read its full text” opening raw JSON; and whether they confirm which action they are voting on.
    • Why the AI test couldn’t settle it: T14’s data was empty, T14r’s texts were written for the test, and T14r’s tester knew CIP-108. Real proposals and less technical DReps may behave differently.

11. The fix round

What was done with each of §9’s changes, on web-wallet/style-flow-3 after the test. Fixed means the change asked for, or one that meets the same need; partly says what’s left; left says why. Pass one made §9’s changes; pass two followed the owner’s answers on what it left. No blind run has checked the fixes yet: the owner’s own testing comes first, and §10’s human tests still stand.

§9   What changed
1. The two figures that show money that isn’t there Fixed The pending balance. Every balance the worker answers is now its kept reading, less what the wallet has spent since, plus what the wallet’s own transactions on their way pay back to it, each transaction counted whole whenever the reading was made (background/incoming.ts). Rewards a transaction on its way withdraws are taken out of the rewards (withdrawing), so T08’s Refresh now reads 10,382.839339 ₳, the review’s “after”, not 10,440.31465 ₳. The forms don’t offer those rewards again, and Withdraw rewards and Stop staking wait for that payment to land, since the rewards can be withdrawn only once. A sent transaction counts for as long as its inputs are held as spent (2 hours), not 20 minutes, and a Lovejoin chain can’t push a payment out of the record. Activity lists a payment at what it paid (“Sent −25 ₳” for T08, “12 ₳” for T04), with the fee and the rewards collected in their own rows; Sent never carries a plus; a deposit is money out and its refund money in; an entry that only cost a fee is listed at its fee. The CSV’s ADA column leaves the fee out. Tokens in Activity use their decimals (E01’s “+1,234,560,000” reads “+1,234.56”).
2. Site state where users look Fixed, bounded The dApps page says whether sites can see the wallet, with Let sites connect; lists the connected sites (the page’s title beside the domain, and the account by name when there are several), each with Disconnect; and lists a declined site’s wait, counting down, with Let it ask now. The dApps row shows on both tabs with that state. Turning Sites on reaches pages already open: no reload, except a page still holding an older copy of the wallet, which the switch’s note covers. Cancel is Decline, on the connect question and the funding review, with the wait it starts stated before pressing; afterwards the window says the site was declined and when it can ask again. The waits survive Chrome stopping the worker (they’re in session storage). After Disconnect, the wallet says the open page may still look connected but can’t use the wallet. Left: CIP-30 has no disconnect event, so an open page learns on its next call, which is refused.
3. Home and Activity follow money in motion Fixed, bounded Right after a send, Home reads again from the kept reading, with no Koios request, so the balance shows what’s leaving at once, and the line under it says what’s “on its way to this balance”, the rewards collected included. Public activity lists the payment as Pending from the device’s own record, as Private activity does, and Activity shows the pending banner. Refresh is a labelled button beside “Updated N ago”. In pass two, the UTxOs list leaves spent UTxOs out and says what’s coming back. Left: polling for money coming in (the owner’s call); a site-signed transaction’s change isn’t counted as on its way, so the balance reads low until it lands.
4. The public side visible from the Private tab Fixed Each tab has a row for the other side: its balance, what it’s for (“Pay any address, get paid by any wallet, stake and vote”; “Pay and get paid privately, swap and mix”), and one press to that tab. It sits after Get started and the mint-first note, so a new wallet’s next step stays first. In pass two, at the owner’s call, the action labels name their side (“Receive privately”, “Send publicly”, …). Home keeps opening on Private (the owner’s call).
5. Causes and third parties in the user’s terms Fixed A refusal names who refused: giveme.my, “the service that lends the collateral”, and tells its refusal from its outage (5xx or 429), with what to try if it happens again. Before asking giveme.my, the wallet checks the review’s inputs against what this device has spent since, and says so plainly when one was; a review already being sent is never offered for a rebuild. Every private-spend review has one note: giveme.my lends 5 ₳ of its own, charges nothing, is run by Logical Mechanism, and sees the transaction with your IP address; an ⓘ says what collateral is. On the swap and session reviews it’s never the one-time account’s 5 ₳. Koios is “the service the wallet reads Cardano from” in every error and note that names it. A failed reading adds “Your money is safe on chain”, and the alert stays after a trip to Settings until a good reading. Left: a link from a review to Settings → Collateral (leaving would drop the review; the ⓘ carries it).
6. A Max for private Send, and an honest shortfall Fixed Max pays one Seedelf all the ADA of up to 20 private UTxOs, less the fee and the minimum the tokens kept need, as public Send’s Max does: tokens added go with it; the rest stay with exactly their minimum. Core: transfer_most, ScriptSpend::pay_rest, max_inputs. The shortfall is checked with the fee the review would show, so T05’s 26.07 ₳ and 26.081594 ₳ pass, and a refusal says “up to about X ₳” and what has to stay with the tokens kept. Make public had the same fault and got the same fix.
7. Both routes for paying an ordinary address Fixed An address in private Send offers two buttons, private first: Pay from your private balance (Make public: it shows at their end as coming from the Seedelf contract) and Pay from your public account (its Send: it shows as coming from your public account), each carrying the address and the amount, and each saying why when it can’t pay. “Seedelf name” and Make public have an ⓘ, and Make public says what it shows. Its “links back” note reads as a condition. Left: renaming Make public (the owner’s call).
8. One total for the swap, Lovejoin and private sessions Fixed The swap review has “Total leaving your private balance” and “Private balance after”, and a table of what the swap costs and what comes back, the later transactions’ fees “about” (0.25 ₳ each, measured against real ones). Lovejoin gives one breakdown that adds up: the 1.5 ₳ reserve is named, and the headline is the whole cost, network fees and the box’s way back included (about 4.85 ₳ for 10 ₳ at two waves, where the page said 3.8 ₳). Waves have an ⓘ; disabled −/+ say why. A private session’s funding review has totals, and its way back’s fees (two through Lovejoin: the deposit and the return). The “bring it back directly” links are switches, as Stop’s is.
9. The user’s own money on reviews and in Transaction details Fixed The rewards row is “Staking rewards”, with “57.475311 ₳, already in your public account’s balance: nothing extra leaves”. The staking page names the setting and says when withdrawing by hand matters (for a site; otherwise it costs a fee and changes nothing), and the withdrawal review says what withdrawn rewards become. Transaction details marks the user’s outputs: “Yours, in your public account” (or the account’s name), the private balance, a Seedelf, or a private session. In pass two, the Staking page has the setting’s own switch. Left: the signing window naming the addresses it signs for (it carries only a count; the details mark them).
10. Every screen at its top Fixed A screen opens at its top when its title changes (Screen), Home after any flow, and browser Back too. On windows 600 px high or less, a review’s foot follows its rows, so the total is read before the button. In pass two, a review with several recipients puts its totals first, and Back returns to where you were in a list.

The fix round’s own review

Four reviewers read the merged changes across areas, and a fifth read the fixes they led to. The round fixed what they found:

Pass two: the owner’s answers, and the smaller fixes

Asked about what pass one left, the owner (5 October 2026) kept Home opening on Private, Swap and Mix behind dApps, and Make private enabled before a Seedelf exists; asked for side-named labels, the two activity lists to point to each other, and a restore to be confirmed; and took the smaller fixes “if it makes the UX/UI better … in a critique way”. Each was critiqued before it was built, the merged pass was reviewed across areas, and a visual critic screenshotted every changed screen at 360×640 (the connector at 400×605) and its findings were fixed.

Pass three: the owner’s review of the fix round

The owner tried the two passes by hand (6 October 2026) and listed eight things. What each became:

  1. The account picker took a row on every screen for something rarely used. It’s the Public tab’s heading on Home now, “Public account 2 ▾”, and gone from the other screens; Settings → Public accounts still switches. With one account nothing shows, as before. Since the other screens no longer name the account, a public review’s totals do with several: “Total leaving Public account 2”, “Public account 2 after”.
  2. Symmetry between the sides. The Private tab’s row for the other side reads “Public account 2” (or “Public account · Savings”), as the Public tab’s reads “Private balance”.
  3. The language note is gone; Settings keeps Report a translation error.
  4. Settings → About’s paragraph on whom the wallet talks to is gone: the privacy policy, linked beside it, says all of it. One fact in it was said nowhere else in the wallet, that Koios sends every transaction from the IP address that reads the public account, so the giveme.my note on every private review now ends “It and Koios see this transaction with your IP address, the one that reads your public account.”
  5. “Using the app is damn near a reading comprehension test.” Every screen’s copy was cut, in seven areas at once (Home and history, payments and the worker’s messages, swaps, Lovejoin, dApps and sites, staking and governance, Settings and onboarding), to a budget of about 20 words for a note always on screen. Mechanism, history and repeats went; every privacy, cost, can’t-be-undone and next-step fact stayed, shorter. English went from 26,879 words to about 21,000; strings over 30 words from 189 to 37, over 40 from 81 to 6. Spanish and Japanese were rewritten from the new English. Some screens: the dApps page 196 → 104 words, the swap review 391 → 251, Settings 111 → 62, Lovejoin’s page 222 → 113, Send publicly 55 → 33. Three reviews followed, of facts lost, of the translations and of the code and tests; their fixes put back “on chain” in two notes that had come to say “nothing ties”, “here or elsewhere” in Remove wallet’s double-pay warnings, the mixes’ cost in Bring everything back, the no-break space before ₳ in 23 keys, and nine Spanish and Japanese wordings.
  6. Buttons pinned left under a note are centred (Let sites connect, Create a Seedelf in Home’s callout, the DRep card’s and Staking’s retry); links stay with their text.
  7. The swap review’s numbered steps showed through Start swap: the sticky foot sits above the body now (z-index), wherever a positioned element scrolls under it.
  8. Does dApps from the Public tab use the private side? Yes, by design: the dApps page is the same from either tab. A Minswap swap always runs from a one-time account funded from the private balance; Lovejoin’s mix defaults to paying from the private balance and offers the public account; a site connecting asks, each time, for the public account or a private session. Nothing changed.

Left for the owner

Appendix A. How the test was run

What was tested

The testers

The verifiers

After each run, a separate agent with access to the source, the run’s command log, its screenshots and the decoded transactions annotated the trace without changing it. It marked each disputed claim as real, harness (caused by the test setup), exists-not-found (it exists, but the tester didn’t find it), misread or unverifiable. It checked the tester’s answers against the true values, said what actually happened to any funds, and recommended a different result only when the setup caused it. Across the 29 runs there were 437 annotations: 331 real, 62 harness, 26 exists-not-found, 17 misread and 1 unverifiable.

The test browser

Choices and deviations

Limits that remain in the traces

Appendix B. New, previously reported, or regression

This classification was made after the blind runs and their write-up were finished, by reading the earlier usability reviews. It doesn’t change any finding above; it says which ones were known.

Four of section 4’s 25 product moments are regressions. An earlier review marked each of them fixed, and this test saw the problem again. In each case the fix covered less than the finding, or caused the new failure. None is a fix that worked and broke later.

These make section 9’s changes 1, 3 and 9 regressions. Changes 2 and 8 also each hold a regressed part: CW-3 again, and CW-8’s “the collateral”, which still means two things on the swap review. The fix rounds also made two findings that count as new: R2’s PY-10 fix took “the change” out of the private shortfall message, and the refusal headline is R1 P-3’s suggested copy.

  Regression Partly Previously reported New
Section 9 (10 changes) 3 6 0 1
Section 4 (25 product moments) 4 8 7 6

Nearly everything reported before was left on purpose:

Sources.

Each row has one status. Where a row mixes statuses, the note says which part is which.

Section 9: follow-up changes

Change Status Earlier reference Note
1. Fix the two figures that show money that isn’t there Regression R2 HM-1, and R2 §9’s “The fix round’s own review”; R2 AC-3; launch review H1 The pending balance was marked fixed twice. HM-1’s fix counts change on its way (background/incoming.ts). The fix round’s own review then closed three ways that change could count twice, and a reward withdrawal isn’t one of them. The change holds the withdrawn rewards, and the balance still counts them. So the HM-1 fix is itself what showed T08 32.3 ₳ too much, where R2 had seen too little. The Activity half is partly known. AC-3 noted that the detail’s amount includes the fee, and that was left open. The plus sign and the ignored withdrawal are new. Launch review H1 found the same fault in the site’s signing prompt and fixed it there.
2. Tell the user about site state where they are Partly R1 D-1, SET-1; R2 CW-3, CW-5, CW-6, SE-1 Known, and partly fixed. D-1 is fixed: the dApps row says “Off: sites can’t see Seedelf Wallet” and offers “Let sites connect”. A user who starts at the site never passes it. Settings as an index is an open call (SE-1), and Sites off by default is a privacy decision. A part regressed. CW-3 was marked fixed: waits of 10 s, 60 s and then 5 min, and the site hears when it can ask again. But the wallet still shows nothing during the wait (T17r). Left. One list of sites was left as a structural call (CW-6). The account is named in the windows only (CW-5), so Connected sites says “Your public account”. New: the reload after turning Sites on; the open page not told of a disconnect; “Nothing’s waiting.” after a decline; Cancel not saying it refuses the site; and Connected sites showing only the domain.
3. Make Home and Activity follow money in motion Regression R1 H-10; R2 HM-1, HM-2, HM-6; chunk 14’s list HM-6 was marked fixed, but its “refresh on return” was never built. Only the tab part was. Home’s sent handler reads nothing, and flows.md describes only the tab. So this test saw the balances as they were before the send, as R1 H-10 described. HM-1/HM-2’s “on its way” line appeared only after a manual Refresh. Left on purpose: the public Activity’s pending row (HM-1/HM-2, “bounded”). The owner declined polling for money coming in (chunk 14), and the notification centre waits for the data layer. New: the small, unlabelled Refresh.
4. Make the public side visible from the Private tab Partly R1 H-2, H-6, §4; R2 GS-3, HM-10, §4; chunk 14 item 4 Reported in both rounds and left. Both reviews reported tabs that hide destinations, and a two-balance model that nothing introduces. Opening on Public is an open call (GS-3). A Home that doesn’t depend on the tab was left as a layout call (HM-10). New: the action labels don’t name their side. The owner’s approved wording in chunk 14 put the side only in the accessible names, and R1 H-2’s fix renamed only the checklist’s Receive. Also new: this test measured it on a set-up wallet, where Get started is gone.
5. Name causes and third parties in the user’s terms Partly R1 P-3, P-4, L-2, §6; R2 PY-7, PY-13, CW-8, §6, §8.2 Kept on purpose. R2 kept the giveme.my sentence and the name Koios as disclosures (PY-7, PY-13). This change explains them rather than dropping them. New: the refusal headline’s wrong cause, which is R1 P-3’s suggested copy as built (“may have changed”, with the service’s words under Details); advice for a second refusal; and the 5xx text, the one Koios error that doesn’t say what Koios is.
6. Give private Send a Max for ADA and an honest shortfall message Partly R1 P-5; R2 PY-3, PY-10 Max was reported in both rounds and left. It needs a core builder that pays one Seedelf everything, like sweep_from (PY-3). The message is new, and R2’s PY-10 fix wrote it. Core says “for this, its fee and the change”. The fix dropped “the change” as jargon, and only the public side got a message saying what stays would be too little. So the private message names only the fee.
7. Offer both routes for paying an ordinary address, and explain the words on the way Partly R1 P-1, P-2, SE-1; R2 PY-2, GS-4, FR-4, §6 Known. Round one made private Send catch an address and offer “Pay it with Make public” (P-1). Renaming Make public is an open call (P-2, PY-2). Defining Seedelf is half done: Get started’s step 2 and the ⓘ say what a Seedelf is (GS-4), and the closing onboarding screen was left (FR-4). New: offering the public account’s Send beside Make public.
8. Give the swap, Lovejoin and private-session screens one total Partly R1 D-3; R2 DX-3, CW-7, CW-8, LJ-3 Left. The swap’s total was left: DX-3 was “Partly” fixed, “Not the three-row summary”. A part regressed. CW-8 was marked fixed, and the session’s 5 ₳ is now “Kept aside for contracts”. But the swap review’s own note still calls it “the collateral”, beside giveme.my’s (T10). Fixed. Lovejoin’s cost is put in proportion, with one figure everywhere (D-3, LJ-3). LJ-3 also noted that the return fee isn’t its own line. New: nothing reconciles 3.8 ₳ with 15.3 ₳. The private session’s way back also has no figure: CW-7’s fix shortened that line to “A fee each way”.
9. Say what happens to the user’s own money on reviews and in Transaction details Regression R1 S-2, S-9; R2 PY-6, PY-7, ST-6, SE-3, §6 The rewards row was reworded in both rounds. It went from “spent” to “collected” (S-2), then to “moved into your balance” (PY-6, marked fixed). Four testers still stopped at it. Still open: unmarked own outputs. PY-7’s partial fix left “the user’s own change address isn’t marked”, and §6 flagged “a key that stakes”. New: when withdrawing by hand matters, which the ST-6 fix’s honest review now raises.
10. Open every screen at its top New None; for the 360x480 case, R1 V-5 and R2 V-1 No earlier review reported scroll position. The 360x480 case, a pinned Send over the total, belongs to the sticky-foot problem R1 V-5 and R2 V-1 reported. R2’s fix made the sign windows’ feet follow the body, but not the wallet’s own reviews.

Section 4: product moments

Rank Moment (short) Status Earlier reference
1 Pending balance rises above its pre-send figure Regression R2 HM-1 (“Fixed, bounded”), and the double counts R2 §9’s own review closed. The HM-1 fix’s change on its way holds the withdrawn rewards, which the balance still counts. So the figure is now too high by the rewards, where R2 saw it too low.
2 “Sent +32.300614 ₳” for a 25 ₳ payment Partly R2 AC-3 noted that the detail’s amount includes the fee, and it was left open. New: the plus sign, and the withdrawal ignored in the net. Launch review H1 found the same fault in the site’s signing prompt and fixed it there.
3 “No Cardano wallet was found on this page.” Partly R1 D-1 is fixed: the dApps row says Sites is off and offers “Let sites connect”. Off by default is a privacy decision. Settings as an index is an open call (R1 SET-1, R2 SE-1). New: the failure starts at the site, away from that notice.
4 The most the private balance can send Partly No Max: R1 P-5 and R2 PY-3, left because it needs a core builder. New: the message leaves out the change’s minimum, which R2’s PY-10 fix dropped from core’s “its fee and the change”. Also new: the check’s fee estimate is higher than the review’s.
5 Still no wallet after turning Sites on New None. No review or design doc mentions the reload.
6 A disconnected site still shows itself as connected New None. R2 CW-6 fixed the wallet’s own session text (“stays connected”), which is a different screen.
7 Paying an ordinary address starts at the wrong Send Partly R1 P-1 was fixed in round one: Send catches an address and offers Make public. Renaming Make public (R1 P-2, R2 PY-2) and opening on Public (R2 GS-3) are open calls. New: the error never offers the public account’s Send.
8 Two activity lists, and the first gives the wrong answer Previously reported R1 §4 and R2 §4: “all my activity” has no route. Neither review gave it an ID, and §9 doesn’t take it up, so it is still open, with no decision. Since: the two lists point to each other (the owner’s ask, 5 October 2026).
9 What a mix costs Partly R1 D-3 and R2 LJ-3 are fixed: the cost is put in proportion, with one figure everywhere. LJ-3 also noted that the return fee isn’t its own line. New: 3.8 ₳ and 15.3 ₳ don’t reconcile, because of an unnamed 1.5 ₳ reserve.
10 After a send, nothing on Home or in Activity changes Regression R1 H-10: round one fixed only the inline reason. R2 HM-1/HM-2 were “Fixed, bounded”, saying each side shows what’s on its way. R2 HM-6 was “Fixed”, though it had asked for a refresh on return. Home’s sent handler reads nothing, so the on-its-way line shows only after a manual Refresh. The public Activity’s pending row was left on purpose.
11 The swap review has no total Previously reported R2 DX-3 was “Partly” fixed: “Not the three-row summary”, and that summary’s total cost was left. Round one’s “Total leaving” (R1 S-3) reached the standard reviews, not the swap’s. The Minswap warning is DX-2’s fix. Lovejoin on by default follows the private-by-default rule.
12 A payment comes in, and the balance stays at 0 ₳ Partly The owner left polling for incoming payments out of chunk 14’s list, and the post-release roadmap’s notification centre waits for the data layer. New: only a small, unlabelled Refresh shows the deposit.
13 No visible sign that Create Seedelf was sent New None for scroll position. R2 HM-11’s renamed banner was on the screen, above the view.
14 Decline cooldown: a retry is refused, and the wallet shows nothing Regression R2 CW-3 (“the wallet showed nothing”) was marked fixed: waits of 10 s, 60 s and 5 min, and the site is told when it can ask again. The wallet itself still shows nothing.
15 Outside party and privacy caveat on private-spend reviews Partly R1 P-4 and R2 PY-7: R2 kept the giveme.my sentence on purpose. R2 CW-8 renamed the collateral. Privacy review §2.12 added the follow-the-money caveat on purpose. It also called “the site sees only it” an over-promise, yet the connect window still says “The site sees only a new one-time account”. New: who giveme.my is, whose money the collateral is, whether it charges anything, and no link to Settings → Collateral.
16 “Signed … not sent yet” before confirming Previously reported R2 PY-7 was “Partly” fixed: “not sent yet” was added, but “Signed” stays and “Ready to send” wasn’t adopted. A password on the wallet’s own sends is an open call (R1 S-8, R2 §7).
17 Refusal headline names the wrong cause, and a second refusal leaves nothing to do New The headline is R1 P-3’s suggested copy as built, with the service’s words under Details and R2 §6’s “make a new review”. Neither review questioned the guess at the cause, or a repeat refusal. R2 PY-1’s fix, “Review updated just now”, worked in this test.
18 “Staking rewards moved into your balance … already counted in it” Regression R1 S-2 (“spent”) was reworded to “collected”. R2 PY-6 said “collected” reads as a charge, and was marked fixed as “moved into your balance”. T07 still read the row as money moving, and T04, T04b and T08 paused at it.
19 Why withdraw rewards at all? New The question comes from two R2 fixes: ST-6 (the withdrawal says the balance stays the same) and SE-3 (the setting says why to turn it off). “Settings can keep them here instead” is older text that no review flagged.
20 Staking and voting aren’t on the tab Home opens on Previously reported R1 H-6 and §4. R2 HM-10 was left as a layout call, and opening on Public is an open call (R2 GS-3).
21 Swaps and mixing only behind “dApps” Previously reported R1 D-2 and H-6. Swap on Home is an open call (R2 DX-6), and R2 HM-10 was left.
22 “dApps” doesn’t list connected sites Previously reported R2 CW-6 and §4: one list of sites was left as “a structural call”.
23 Private Receive on a new wallet: no Seedelf, and Create disabled Previously reported R1 H-2 and H-3: round one added the reason and “Show my public address”, which kept T01 going. Opening a new wallet on Public is an open call (R2 GS-3).
24 No sign of accounts on Home New None. Chunk 18 hides the account picker with one account by design. R2 PA-1’s fix of the add flow worked in this test.
25 After repeated failures, only “Try again in a minute” Partly R1 L-2 and R2 HM-5 are fixed, and this test found the stale-balance alert reassuring. New: there’s nothing else to try. A user-set Koios is privacy review §4.7, still open and waiting for the data layer. E05’s alert also vanished after a trip to Settings with nothing fixed, though HM-5’s fix meant it to clear on a good reading (synthesis §7, not ranked).