Skip to content

docs(wallet): redesign the Send screen as one From/To form - #1111

Merged
lklimek merged 4 commits into
v1.0-devfrom
docs/send-screen-redesign
Oct 26, 2026
Merged

lklimek merged 4 commits into
v1.0-devfrom
docs/send-screen-redesign

Conversation

@Claudius-Maginificent

@Claudius-Maginificent Claudius-Maginificent commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

TL;DR: A design for a simpler Wallet > Send screen: one form with a "From" part and a "To" part, an Auto choice on either side that says in plain words what it picked, and one summary of what will be sent and paid. Design documents only; no code changes.

User story

As a wallet user, I want to send funds by saying where they come from and where they go, without choosing between several send modes or opening hidden options, so that sending is quick and I can see exactly what will happen before I confirm.

Scenario

Actual behavior

The Send screen mixes several modes, scattered fee and route read-outs, and a separate "Advanced Options" form. Choosing a source clears an already pasted destination.

Expected behavior

One form: pick the wallet and a balance to pay from (or Auto), then someone else's address, username or identity, or one of your own wallets (with Auto). Each Auto shows a live line saying what it chose; one Summary card shows amount, fee and total; the button always says "Send".

Detailed discussion

Documents in docs/ai-design/2026-10-23-send-screen-redesign/:

  • 01-requirements.md: inventory of today's screen, UX findings, requirements SR-01..21, acceptance criteria, deviations from the original brief (D-01..14) and dependencies.
  • 02-ux-spec.md: flows, Auto resolution rules (source fallback order per destination kind, destination address allocation), Max with Auto, conflicts when Auto is chosen on both sides, errors, locked wallets, accessibility and progressive disclosure.
  • 03-wireframes.md: ASCII wireframes W1–W14.
  • docs/user-stories.md: SND-019..022 added as [Gap].

Main deviations from the brief, all aimed at a simpler screen: the To section is a "Someone else / My wallets" switch instead of wallet options plus a manual field; the default To is "Someone else" (the literal default would produce a fee-only self-send); Auto never spends identity credits, never unshields for a non-private destination, and never splits one payment across balances; Advanced sources and multiple recipients are Expert view only. All four fee strategies are kept, behind a collapsed "Fee options" row in the Summary card, shown only in Expert view when an Advanced source or several recipients involve Platform.

Decisions

Q1–Q5 are resolved; the answers are recorded in the design README and 01-requirements.md §7.

Dependencies

Builds on the Max semantics of #1107 (upstream quotes, pooled Core) and #1106 (Core→Shielded drain). Implementation is a follow-up.

Testing

Documentation only. The required CI checks do not run for documentation-only changes.

🤖 Co-authored by Claudius the Magnificent AI Agent

🤖 Generated with Claude Code

Adds a UX analysis, simplified requirements, a UX spec and ASCII
wireframes for Wallet > Send: one form with a From section (wallet and
a "Pay from" choice with Auto) and a To section (someone else's address,
username or identity, or one of my wallets with Auto), a live Auto
status line, one Summary card and Advanced sources inside the form.
User stories SND-019..022 are added as gaps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 59 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
Commits

Reviewing files that changed from the base of the PR and between aca9bb4 and 557e933.

Files selected for processing: 6
  • docs/ai-design/2026-10-23-send-screen-redesign/01-requirements.md
  • docs/ai-design/2026-10-23-send-screen-redesign/02-ux-spec.md
  • docs/ai-design/2026-10-23-send-screen-redesign/03-wireframes.md
  • docs/ai-design/2026-10-23-send-screen-redesign/README.md
  • docs/ai-design/2026-10-23-send-screen-redesign/wireframes.html
  • docs/user-stories.md
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Records the user's decisions on the open questions. The four Platform
fee strategies stay, with their labels and default, behind a collapsed
"Fee options" row in the Summary card shown only in Expert view when
an Advanced source or several recipients involve Platform.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@thepastaclaw

thepastaclaw commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

✅ Final review complete — no blockers (commit 99aef55) · triage: trivial · Phase 2 only (no Phase 1 for this repository)

Renders wireframes W1–W14 as an interactive HTML page in the same
visual style as the usernames redesign wireframes, linked from the
design README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@thepastaclaw thepastaclaw left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Final validation — Phase 2 only (no Phase 1 for this repository)

The documentation-only redesign is coherent overall, but two specification gaps should be resolved before implementation. SND-019 summarizes Auto resolution too broadly compared with the destination-specific ordering, and destination Auto does not define what happens when its allocated address becomes used while the form remains open.

🟡 2 suggestion(s)

Review provenance

Source: reviewer 1: gpt-6.1-sol (agent: phase2-reviewer, role: general); final verifier: gpt-6.1-sol (agent: sol-verifier, role: final-verifier)

  • Triage: trivial by gpt-6.1-sol (effort low) — This pull request adds design documentation and user-story entries only, without changing application behavior or any critical code surface.
  • Phase 1 reviewers: not run (disabled for this repository)
  • Fresh verifier: gpt-6.1-sol — final-verifier; agent sol-verifier
  • Phase 2 reviewers: gpt-6.1-sol — general (completed, effort low); agent phase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.

In `docs/user-stories.md`:
- [SUGGESTION] docs/user-stories.md:545-547: Align SND-019 Auto ordering with the destination-specific rules
  SND-019 says Auto pays from the same kind as the recipient and then falls back to Platform, then Core. That does not precisely describe the rules in `01-requirements.md` §4 and `02-ux-spec.md` §4.1: Core destinations try Core then Platform, Platform and Identity destinations try Platform then Core, and Shielded destinations try Shielded then Platform then Core. The story also omits that Shielded must never be used for a non-private destination. Because this catalog is intended to summarize the gap for implementers, its wording can lead to behavior that conflicts with the detailed specification. State the destination-specific candidate order, or explicitly link the story to the normative table.

In `docs/ai-design/2026-10-23-send-screen-redesign/02-ux-spec.md`:
- [SUGGESTION] docs/ai-design/2026-10-23-send-screen-redesign/02-ux-spec.md:101-111: Define how destination Auto handles an address that becomes used
  Destination Auto must use an unused receiving address, but the spec says the address is fetched again only when the To wallet or kind changes and otherwise remains displayed. The pinned wallet integration confirms that `next_unused` is non-reserving: repeated calls return the same address until it is actually marked used. If another receive flow or an incoming payment uses that address while this form is open, the form can retain an address that no longer satisfies the stated unused-address invariant. Specify either a reservation and release lifecycle, or a final revalidation immediately before confirmation that replaces the address when it has become used.

Comment thread docs/user-stories.md
Comment on lines +545 to +547
- The form has two sections, From and To. From is a wallet plus "Pay from": Auto, Core, Platform, Identity (when the wallet has identities), Shielded (when shielded sending is available) and Advanced (Expert view). Auto is the default.
- Auto pays from the same kind of balance as the recipient (Core address → Core, Platform address → Platform, private address → private balance), then falls back to Platform, then Core. It never spends identity credits, never unshields private funds for a non-private recipient, and never splits one payment across two balances.
- A line under Pay from says what Auto chose and how much that balance holds, and why when it fell back. The line updates as the recipient, amount or balances change. The confirmation repeats the chosen balance.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

🟡 Suggestion: Align SND-019 Auto ordering with the destination-specific rules

SND-019 says Auto pays from the same kind as the recipient and then falls back to Platform, then Core. That does not precisely describe the rules in 01-requirements.md §4 and 02-ux-spec.md §4.1: Core destinations try Core then Platform, Platform and Identity destinations try Platform then Core, and Shielded destinations try Shielded then Platform then Core. The story also omits that Shielded must never be used for a non-private destination. Because this catalog is intended to summarize the gap for implementers, its wording can lead to behavior that conflicts with the detailed specification. State the destination-specific candidate order, or explicitly link the story to the normative table.

source: gpt-6.1-sol (phase2-reviewer: general)

Comment on lines +101 to +111
### 4.2 Destination Auto (My wallets)

```
kind = source kind (Advanced source → its Core/Platform kind)
if source is Identity → Platform (SR-09)
if To wallet == From wallet:
Core → Platform, Platform → Core, Shielded → Platform
address = next unused receive address of `kind` in the To wallet
```

The status line shows "Getting a new address in Savings…" until the address arrives. The address is fetched again only when the To wallet or the kind changes (it stays the same while unused).

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

🟡 Suggestion: Define how destination Auto handles an address that becomes used

Destination Auto must use an unused receiving address, but the spec says the address is fetched again only when the To wallet or kind changes and otherwise remains displayed. The pinned wallet integration confirms that next_unused is non-reserving: repeated calls return the same address until it is actually marked used. If another receive flow or an incoming payment uses that address while this form is open, the form can retain an address that no longer satisfies the stated unused-address invariant. Specify either a reservation and release lifecycle, or a final revalidation immediately before confirmation that replaces the address when it has become used.

source: gpt-6.1-sol (phase2-reviewer: general)

@lklimek
lklimek marked this pull request as ready for review October 26, 2026 20:58
@lklimek
lklimek merged commit 01434ec into v1.0-dev Oct 26, 2026
4 checks passed
@lklimek
lklimek deleted the docs/send-screen-redesign branch October 26, 2026 20:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants