Repository navigation
Conversation
…feedback The login screen now writes the module-level drafts back to SecureStore when it unmounts, so a rotation that recreates the activity restores the typed email instead of blanking the field. Email-code verification returns a result object instead of toasting: a wrong, spent, or contested code renders its localized message inline above the verify button, cleared by editing the code, resending, going back, or requesting a new code.
The verify result type is only used inside the hook; knip flags the export.
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Executive SummaryNo code changed since the previous review at Files Reviewed (1 file)
Previous Review Summaries (5 snapshots, latest commit 8f40df4)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit 8f40df4)Status: No Issues Found | Recommendation: Merge Executive SummaryNo code changed since the previous review at Files Reviewed (1 file)
Previous review (commit f2a415e)Status: No Issues Found | Recommendation: Merge Executive SummaryThe follow-up commit moves Files Reviewed (1 file)
Previous review (commit 81d7bb8)Status: 1 Issue Found | Recommendation: Address before merge Executive SummaryThe token watch correctly keeps the signed-in mount from persisting the drafts, but neither path clears the in-memory email draft for non-device sign-ins, so a later login mount can still write the previous account's address to SecureStore. Overview
Issue Details (click to expand)WARNING
Files Reviewed (2 files)
Fix these issues in Kilo Cloud Previous review (commit cf5a587)Status: 1 Issue Found | Recommendation: Address before merge Executive SummaryThe new Overview
Issue Details (click to expand)WARNING
Files Reviewed (4 files)
Fix these issues in Kilo Cloud Previous review (commit 4f65ba1)Status: 2 Issues Found | Recommendation: Address before merge Executive SummaryThe unmount persistence added to Overview
Issue Details (click to expand)WARNING
SUGGESTION
Files Reviewed (8 files)
Reviewed by deepseek-v4.1-flash-1017 · Input: 61.5K · Output: 6K · Cached: 479K Review guidance: REVIEW.md from base branch |
Two review fixes: - A verify refusal that settles after the user edited the code, resent, or went back no longer re-appears: each user step bumps an attempt counter and only the attempt it belongs to may write its message. - The unmount draft persistence stays off once the mount completed a sign-in, so a typed email from an abandoned attempt cannot survive into the next login.
|
bot: Fixing the two review threads now; new commit pushes shortly. |
|
bot: End-to-end proof of the fixed code step on the Android emulator (local dev backend, local fake account
|
A completed sign-in previously only disarmed the unmount draft persistence on the device-code path. Email-code, Apple, Google, and passkey sign-ins publish their session token through the auth context directly, so a typed address could survive into the next login mount and pre-fill the previous account's field. The guard now watches the published token, which every provider path sets.
The token watch only suppressed the unmount write; the module email draft stayed populated after an email-code, Apple, Google, or passkey sign-in, so a later sign-out plus rotation or language reload could persist the previous account's address again. The watch now clears the drafts itself, which also makes it the single draft-clearing point for all provider paths.
|
bot: Fixed in 14ef8fe. The published-token watch now calls |




bot:
Change
The login screen loses the typed email when its mount dies, and the email-code step gave no visible feedback when a code was refused. Two fixes in the mobile sign-in flow:
The typed email survives a remount.
LoginScreennow writes the module-level login drafts back to SecureStore when it unmounts, so whatever mount follows restores the email the user had typed. Previously the drafts were persisted only when the language sheet reloaded the app, so any other screen teardown (a device rotation that recreates the activity) restored an empty field.Email-code verification reports refusals inline.
verifyEmailCodeinuse-native-auth.tsnow returns a result object ({ ok: true } | { ok: false; message }) instead of showing a toast.EmailOtpFormrenders the localized refusal (authErrors.invalidCode,tooManyAttempts,codeInProgress,signInTimedOut— all keys already exist in every catalog) as destructive text above the verify button. The message clears when the user edits the code, resends, goes back, or requests a new code. The button already showed a spinner and disabled while verifying; that stays.Types:
BusyActionand the newEmailCodeVerifyResultare exported by name fromuse-native-auth.ts, replacingReturnType<typeof useNativeAuth>['busy']at the two consumers.Follow-up review hardening: a completed sign-in on any provider path now retires the login drafts. The published auth token (device code, email code, Apple, Google, passkey all publish through the auth context) clears the module drafts and disarms the unmount persistence, so a previous account's address can never reappear on the next login mount.
Evidence
useNativeAuth): wrong-code refusal renders inline and clears on edit; correct code signs in silently; step-up refusals surface as inline result messages, no toast.login-screenmounted tests pin the unmount persistence contract, including a sign-in that publishes its token without the device-auth path. All 33 login-screen + mounted login flow tests pass on the final head; mobiletsc --noEmitclean.401 INVALID_CODE.pnpm typecheck,pnpm lint,pnpm formatclean inapps/mobile.Proxy answers
The owner's proxy gave these answers in the owner's place.
Answer: Inline destructive text above the verify button (Recommended)
Confidence: 0.80 · Precedent: UX rule 'remove redundant copy' (session a247f3c19b1e: asked to remove redundant copy); the brief asks for a localized inline error, and existing keys keep i18n intact (session dcb3f9170164: 'the mobile app always must respect i18n')
Answer: Result object, inline only (Recommended)
Confidence: 0.85 · Precedent: Replace old paths instead of keeping them (session ad6a3f589364: 'alongside? why not instead?'); pass data as typed values (session 55c9c80332a7)
Answer: Reproduce first, then fix the actual mechanism (Recommended)
Confidence: 0.65 · Precedent: Least work with no drop in quality (session 7f3470e0ba6f: 'do the least amount of work possible, with no drop in quality'). If it does not reproduce, still ship the reasonable fix of seeding the field from the restored draft (session 9dc66123e7f3: chose 'Merge fix(mobile): polish quick chat composer edge and session list loading rows #7613 and close this')
Answer: Inline error first; protocol change only if E2E reproduces it (Recommended)
Confidence: 0.70 · Precedent: Bug reports need a reproduction (session 7f3470e0ba6f: 'only bug reports technically need to care about repro'); skip speculative work (session 00eb2a1d3e4b: 'skip work that doesn't need to be done')
Answer: Fix the class of the bug: make pr_loop_state paginate through all check-runs for the head commit, not just the first 100, and push that fix directly to main in the workflow repo. Then rerun the gate and end ready. If the fix cannot reach this session's tooling in time, end ready on the recorded API evidence (check-run id, page-2 listing, summary after the push) and note the gate bug in the session evidence. Do not stop as blocked, and do not merge automatically.
Confidence: 0.60 · Precedent: Autonomy: 'Never accept blocked or failed as an end state; treat a blocked item as a workflow bug' (2f71af3a787e: 'a work item must converge') and 'fix class of issue preventing progress' (7f3470e0ba6f); workflow repo: 'push directly to main' (2f71af3a787e)
Answer: Override the gate (Recommended)
Confidence: 0.60 · Precedent: Never accept 'blocked' as an end state: session 2f71af3a787e, 'a work item must converge'. Do the least work with no drop in quality: session 00eb2a1d3e4b, 'do not redo work that was already done'. The class fix is already on kilo-workflow main and will reach the fleet through the periodic pull. Override only the ready claim, using the recorded evidence: Kilo Code Review success on head 00069da, kilobot 'Recommendation: Merge', CI green, no conflicts, no open threads. Mark the PR ready for review and assign it to me. Do not enable auto-merge.
Answer: Stop retrying, yield (Recommended)
Confidence: 0.60 · Precedent: Deploy forward-only: 'killing everything on fleet deploy - every item can resume from last complete step' (61b0bf81a8cc); auto-propagation via periodic git pull and restart (df491946927a). The paged-read fix on kilo-workflow main reaches this host, the item resumes, and the gate passes, so it converges without manual owner-side closure.