feat(mobile): refresh onboarding and smooth QR scanner motion - #8019
Conversation
Signed-off-by: kenny lopez <klopez4212@gmail.com>
Signed-off-by: kenny lopez <klopez4212@gmail.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
🔐 Codex Security Review
Review SummaryOverall Risk: NONE
FindingsNo concrete security, correctness, or reliability findings were identified. Notes
Generated by Codex Security Review | |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 443858a96b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
jedwards27
left a comment
There was a problem hiding this comment.
Review by :bot: Jude’s code review agent
Verdict: REQUEST CHANGES
Reviewed: 5fdb2e53659ee29002545f1022c138fe0b8282f9..443858a96ba2bc54a2d854fe6b7da597c7fe0891 (exact head 443858a96ba2bc54a2d854fe6b7da597c7fe0891)
Risk: medium — user-visible onboarding/accessibility behavior plus native camera lifecycle and iOS-specific motion.
Blocking finding
[P2] The “both themes” accessibility regression test contradicts the dark UI it claims to protect. Production now selects 0xFFFFAAA0 for dark-theme SAS errors (mobile/lib/features/pairing/pairing_page/onboarding_colors.dart:12-13), but mobile/test/features/pairing/pairing_page_test.dart:718-744 still requires the light-theme 0xFF7A1025 in both iterations and evaluates it against the removed light gradient for both themes. The intended dark color itself is sound against the dark base (#FFAAA0 on #11181D is approximately 9.82:1); the defect is stale, non-theme-specific regression coverage that no longer validates the shipped dark error state.
Author action: make the test assert each theme’s actual selected error ink against that theme’s actual onboarding background (or render/sample the production surface), and ensure the dark row causally fails if the dark color/background wiring regresses. Run the required full mobile gate on the corrected head.
Verification owner: author + Clients / Mobile CI.
Integrated contract review
No additional author-actionable defect was found across the systems/lifecycle and product/UI passes:
- The Dynamic Island route owns one memoized scanner controller, fences duplicate close/result paths, keeps the camera mounted through animated dismissal, and disposes it on route teardown (
dynamic_island_portal.dart:13-27,29-35,74-92,133-165). Reduced motion jumps to the target and pops after an end-of-frame (:29-35,43-64). - Onboarding source/tests cover semantics, reduced motion and app lifecycle (
onboarding_wordmark_test.dart:10-103), keyboard/action reachability (pairing_page_test.dart:78-123), and reduced-motion scanner dismissal (pairing_qr_scanner_test.dart:288-341). - The supplied exact-head 420×912 production-widget renders show coherent light/dark layouts, readable primary copy, and reachable actions. These are static renders, not native scanner-transition proof.
Validation
- PASS —
just mobile-install mobile-check: dependencies resolved; 608 Dart files formatted unchanged; Flutter analyze reported no issues; exact clean head confirmed afterward. - PASS —
git diff --check 5fdb2e53659ee29002545f1022c138fe0b8282f9..HEADat matching head. - Hosted exact-head mobile and Mobile Swift jobs had completed their format/analyze/test and simulator steps but were still running terminal Android/unsigned-iOS build steps at final review time.
- Local
mobile-testdid not reach test discovery: the reviewer machine has not accepted the Xcode 27 license, so theobjective_c-9.3.0native-asset hook could not resolve the SDK (xcrun --show-sdk-pathexited 69). This is a reviewer/tooling gap, not additional author rework.
Residual risk / confidence gaps
The real iOS interruption/background/foreground scanner journey and release artifact were not independently observed. The PR reports an iPhone Air trial, but no scanner-transition recording/receipt or Android-device observation was available for independent inspection. Verification owner: reviewer/tooling and the named hosted gates; no additional author action beyond the blocking test correction above.
Any new head expires this review.
Signed-off-by: kenny lopez <klopez4212@gmail.com>
|
🤖 @jedwards27 Addressed your blocking contrast-test finding in
|
jedwards27
left a comment
There was a problem hiding this comment.
Review by :bot: Jude’s code review agent
APPROVE at exact head 0bb357f7ab1dea26a3741a61f39108bb09605bc1 (base 5fdb2e53659ee29002545f1022c138fe0b8282f9). Any head movement expires this verdict.
The sole prior blocker is resolved. The delta from reviewed head 443858a96b is test-only (mobile/test/features/pairing/pairing_page_test.dart, +101/-16); production UI, assets, shaders, scanner, and lifecycle code are unchanged. The replacement coverage independently exercises settled light and dark themes against the actual production error ink and rendered production background/painter, samples the surface beneath the error rectangle, requires opaque pixels, and enforces WCAG contrast >= 4.5. This removes the stale light-gradient assumption that caused the previous rejection.
Independent product/UI and systems/integration review found no concrete defects. The author also reports that temporary mutations to dark ink, background selection, and glow each failed the corrected dark-theme test and were restored.
Validation at this exact clean head:
just mobile-install mobile-check: 608 files unchanged; Flutter analyze reported no issues; gateway recipe probes passed.git diff --check 5fdb2e536..0bb357f7a: passed.- Hosted
Clients / Mobile, requiredMobile, and Mobile Swift domain result: green. Final freshness query confirmed the live head and all relevant checks remain unchanged/green.
Non-blocking confidence gap: local Flutter test discovery cannot start on this reviewer host because its Xcode 27 license is unaccepted (xcodebuild -license check rc 69; objective_c-9.3.0 cannot resolve the SDK). That is reviewer tooling, not author rework. Independent mutation execution was therefore not repeated locally; the structurally sensitive assertions, author mutation report, and green hosted full mobile gate provide sufficient evidence.
Author action: none.
Residual risk: native Android/iOS scanner motion was not re-observed in this test-only round; no production bytes changed, so that prior non-blocking risk is unchanged.
jedwards27
left a comment
There was a problem hiding this comment.
:bot: Jude’s code review agent
Verdict: APPROVE
Reviewed: 5fdb2e53659ee29002545f1022c138fe0b8282f9..0bb357f7ab1dea26a3741a61f39108bb09605bc1 (exact head 0bb357f7ab1dea26a3741a61f39108bb09605bc1)
Risk: medium — user-visible mobile onboarding/scanner behavior, with this follow-up limited to accessibility regression coverage.
Behavior/contracts traced: The follow-up changes only mobile/test/features/pairing/pairing_page_test.dart; production mobile bytes are unchanged from the previously reviewed head. The replacement tests independently settle light and dark themes, bind the active theme and production error ink, reuse the production onboarding decoration and painter, sample the rendered surface beneath the laid-out error text, and require WCAG AA contrast at each sample.
Findings: No unresolved blocking or non-blocking code finding. The previous blocker is resolved: dark mode now has a theme-specific, production-seam-bound contrast regression rather than reusing stale light-theme constants.
Author action: none.
Verification owner: reviewer/tooling for optional independent mutation reproduction; CI for required mobile gates (terminal green at filing).
Validation:
- PASS —
just mobile-install mobile-checkat clean exact head: 608 files unchanged, Flutter analyze clean, gateway recipe probes passed. - PASS — exact-head hosted
Clients / Mobileand Mobile Swift gates; no failing or pending checks at final freshness poll. - PASS —
git diff --check 5fdb2e53659ee29002545f1022c138fe0b8282f9..0bb357f7ab1dea26a3741a61f39108bb09605bc1. - NOT RUN locally —
mobile-testcannot reach discovery because this reviewer host has not accepted the Xcode 27 license;objective_c-9.3.0cannot resolve the SDK. This is reviewer tooling, not author rework.
Manual/native evidence: No new native run; the correction is test-only and production UI/scanner bytes are unchanged.
Residual risk: Independent mutation execution was not repeated on this host. Source inspection establishes causal exact-ink and exact-background assertions; the author reports restored mutations for dark ink, background selection, and glow, and the required hosted full mobile suite passed. No author-actionable defect remains.
…ty-from-device * origin/main: fix(acp): interrupted frame writes close the sole writer; fixed native-steer refusal reasons (#7568) fix(desktop): read channel metadata and member lists from writer after writes (#7999) feat(mobile): refresh onboarding and smooth QR scanner motion (#8019) Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
Catches the fork up 87 commits (previous upstream merge ef2aa1a, block#7757). Clean merge, no conflicts; all fork patches intact (NIP-42 auth timeout env, pairing-cli, pair-relay 600s, web NIP-07 signer/shared socket). Brings migrations 0047-0055 and the admin member-restriction routes (block#7302) that Desktop 0.5.26 Admin calls. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: zbk <141564032+zbkilla@users.noreply.github.com>
Main added eight commits since the last merge: mobile onboarding and push settings (#8019, #8025, #7526), desktop reads after channel writes (#7999), following a channel message before its first reply (#7692), two ACP fixes (#7568, #8022) and the macOS icon (#8018). They change buzz-acp, desktop, mobile, CI workflows and tooling only. No file is changed on both sides, and main adds no migration. The merge is textually clean and needs no follow-on edit. buzz-db, buzz-relay, migrations, schema and Cargo.lock are byte-identical to the branch before the merge, and this branch's diff against main is unchanged: the same 31 files with the same added and removed lines. Co-authored-by: Eva <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@buzz.block.builderlab.xyz> Signed-off-by: Eva <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@buzz.block.builderlab.xyz>



Summary
Refresh mobile onboarding with light/dark gradients, an animated fuzzy Buzz wordmark and tagline, and bottom-aligned glass/ghost actions. Remove the dot grid and idle scroll bounce, and smooth the QR scanner's continuous corners and spring transitions by deferring camera teardown until dismissal finishes.
Related issue
N/A — no matching mobile onboarding issue or PR found.
Testing
0bb357f7a.buzz-review-completed
Preview
Production-widget renders at 420 × 912; before:
5fdb2e536, after:443858a96.