Repository navigation
feat(mobile): auto-open first-run tour only for zero-usage accounts on cold boot - #6327
Conversation
a7224c4 to
fba806e
Compare
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Executive SummaryReviewed the mobile tour cold-boot/zero-usage gate, the launch-account boot marker, the gateway-usage hook and Files Reviewed (13 files)
Previous Review Summaries (5 snapshots, latest commit baa73a0)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit baa73a0)Status: No Issues Found | Recommendation: Merge Executive SummaryReviewed the mobile tour auto-open gate, its once-per-process launch-account marker and gateway-usage hook, the web OpenAI-ChatGPT routing gate and Files Reviewed (16 files)
Previous review (commit 097fa38)Status: 1 Issue Found | Recommendation: Address before merge Executive SummaryOne narrow gap remains in the mobile tour gate: the process attempt is claimed only after the tour-completion read loads, so a warm account switch during that window can still auto-open the tour; the web routing, Overview
Issue Details (click to expand)SUGGESTION
Files Reviewed (12 files)
Fix these issues in Kilo Cloud Previous review (commit 7311ed5)Status: 1 Issue Found | Recommendation: Address before merge Executive SummaryOne narrow gap remains in the mobile tour gate: the process attempt is claimed only after the tour-completion read loads, so a warm account switch during that window can still auto-open the tour; the web routing, Overview
Issue Details (click to expand)SUGGESTION
Files Reviewed (12 files)
Fix these issues in Kilo Cloud Previous review (commit 1abde4e)Status: No Issues Found | Recommendation: Merge Executive SummaryReviewed the incremental changes — the mobile tour auto-open gate's launch-account attempt binding, its boot marker and tests, the web user-router test teardown, and a provider log cleanup — at high confidence, and found no new defects in the changed lines. Files Reviewed (6 files)
Previous review (commit 38133be)Status: 2 Issues Found | Recommendation: Address before merge Executive SummaryThe tour gate's once-per-process marker is not bound to the account, so a sign-out and sign-in in the same process can auto-open the tour for a later account when the first account never spent the attempt. Overview
Issue Details (click to expand)WARNING
SUGGESTION
Files Reviewed (9 files)
Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0 Review guidance: REVIEW.md from base branch |
03029cc to
1abde4e
Compare
f703d6d to
7311ed5
Compare
2bfe15d to
097fa38
Compare
|
The merge bot leaves this one to a human: Jev names a concrete break (0.89 / named 0.51). |
dce8466 to
94d1564
Compare
Changelog for users
Changelog for maintainers
apps/mobile/src/components/tour/tour-auto-open.tsx:151— accepted: the gate returned on the consent and usage holds without spending the process attempt, so a later sign-in could inherit it and auto-open. The attempt is now bound to the launch account, and a different account spends it instead of opening.apps/web/src/routers/user-router.test.ts:1970— accepted: thehasGatewayUsageteardown deleted the org and its users but left theorganization_membershipsrowcreateTestOrganizationinserted. It now deletes that membership row for the org owner first.apps/web/src/lib/ai-gateway/openai-chatgpt/routing.ts:112— accepted: a disabled Kilo-exclusive alias was treated as a delegated OpenAI model. The gate now rejects disabled exclusives and trims and lower-cases the id before its alias checks. Review this gate first; it decides delegated eligibility for every OpenAI model id.routing.test.tsparameterized coverage pins the disabled aliases (plain, upper-case, padded) as ineligible before any connection, token, or served-model lookup;apps/mobile/src/lib/case-guard.test.tsallowslib/auth/passkey-client.ts, whose bare case calls classify native credential-API errors and never produce display text.user.hasGatewayUsage, a single indexed lookup on the primary database that reports anymicrodollar_usagerow; org-scoped and zero-cost free-model rows count as usage. Mobile reads the signal through the newuseTourGatewayUsagehook, enabled while the launch attempt is unspent.services/kilo-mcp/catalog.jsoncommits the summary, so the catalog dump no longer calls the unsigned Kilo CLI on CI.(app)area or a foreground resume cannot re-arm the automatic open. Unknown usage (loading or failed) holds the gate without spending the launch account's attempt, and an unknown value never opens the tour.apps/mobile/src/components/ui/segmented-control.tsx— a duplicatednumberOfLinesprop failed typecheck and lint; the duplicate is removed and onenumberOfLineswithadjustsFontSizeToFitremains, so every option label stays on one line. Start the repair review here.manual-review-screen.mounted.test.tsxstubs the keyboard-padding wrapper, whose module loads the real React Native throughreact-native-safe-area-contextoutside the partial mock;text.rtl-tracking.mounted.test.tsxexpects the RTL eyebrow to drop the Latin tracking class;screen-insets.test.tspins the Profile sign-out confirmation to the shareduseSignOutConfirmationhook. Proof replacement: the passinge1verification under E2E proof replaces the superseded zero-usage cold-start proof, and the 2026-09-18 gateway-usage captures remain valid. The mobile device checks for the segmented-control label and the RTL eyebrow did not run (the Android resource did not start), so they remain skipped and pending owner verification.E2E proof
Owner request
E2E proof — log excerpts