feat(spend): tell the user a second passkey sheet follows on a mixed spend - #2965
Conversation
…spend Ceremony telemetry shows the mixed spend's second sheet (the UserOp, 1.5 s after the Rain admin signature) is the one that gets dismissed: Android NotAllowedError and iOS LOGIN_CANCELED both cluster at that gap, and the retry then costs four sheets. The overlay between the two taps said only "Verifying security…", which reads as "done". - ModalsContext: the overlay takes a variant; 'next-passkey' swaps the copy. - useSpendBundle passes it before tap #2. useSignSpendBundle showed no overlay at all between its two taps; it now shows the same beat. - en / es-419 / pt-BR copy (es-AR inherits es-419). Stopgap until the one-tap path (ui#2959) removes the second sheet.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
Code-analysis diffPainscore total: 7096.21 → 7097.33 (+1.12) 🆕 New findings (11)
✅ Resolved (11)
|
🧪 UI test report — ✅ all greenSuites
📊 Coverage (unit)
⏱ 10 slowest test cases
|
There was a problem hiding this comment.
Chip review — no blocking findings — this is not an approval
The overlay variant is propagated atomically, used only for mixed-spend second-passkey paths, and reset on both success and failure without changing signing or transaction ordering.
Checked clean
- Confirmed the detached worktree head, supplied base SHA, merge base, trusted author, and dev target.
- Reviewed the ModalsContext state/API change and all security-verification overlay call sites for stale variants, cleanup failures, and regressions to default copy.
- Reviewed both mixed-spend signing paths and verified the overlay wraps only the existing second UserOp signature while finally blocks close it on rejection.
- Verified en, es-419, and pt-BR catalogs parse and that es-AR inherits the es-419 key through the existing resolved-catalog tests.
- Exact-head typecheck, lint, format, unit, native-export, and policy checks passed; visual snapshots and preview deployment were still running at review time.
- Focused local tests were unavailable because the detached worktree has no installed dependencies; diff validation and catalog parsing passed locally.
Security review: did not run — this change has no security, privacy or money surface, so it was not asked. This review is one reviewer short.
Third opinion by claude-opus: 0 finding(s), marked with the model name. It answers only product truth, missing tests and the cross-repo contract, so treat its findings as advice.
Exact head: 4ac0b0f13c35 · Context: repo · Took 5m
🖼 Visual diff — 2 screens moved3 of 66 shots changed · 63 identical · baseline
job summary · before/after/diff images — artifact Fixture screenshots, no backend. Advisory — this check never blocks a merge. Posted from the default branch by ds-shots-comment.yml; the report it renders is untrusted data. |
Why
Ceremony telemetry shows the mixed spend's second sheet (the UserOp, ~1.5 s after the Rain admin signature) is the one that gets dismissed: Android
NotAllowedErrorand iOSLOGIN_CANCELEDboth cluster at that gap, and the retry then costs four sheets. The overlay between the two taps said only "Verifying security…", which reads as "done". The data cannot tell whether the user or the OS dismisses it; the copy fix covers the first, the one-tap path (#2959) removes the sheet altogether.What
ModalsContext.setIsSecurityVerificationOpen(open, variant?)—'next-passkey'swaps the overlay copy to "Verifying security… one more passkey confirmation comes next".useSpendBundlepasses it before tap Fetch Chain details from SDK #2.useSignSpendBundle(QR pay, Manteca withdraw, card lock/cancel, return-excess) showed no overlay at all between its two taps; it now shows the same beat, closed in afinally.No change to signing or ordering. Stopgap until #2959 lands.
Verification
pnpm typecheckclean; ModalsContext, useSignSpendBundle, useSendMoney and all i18n suites green; prettier clean.