Repository navigation
fix(mobile): keep the PR link draft after a cancelled open and name a denied paste - #8166
Conversation
…nd name a denied paste
|
bot: End-to-end evidence from the local dev stack with the owned fake account. Android (emulator iOS (leased simulator lane): the clipboard held the same GitLab merge request URL. Choosing "Don't Allow Paste" showed the denied-paste message instead of the empty-clipboard message. Allowing paste filled the field and opened the GitLab connect gate; Back returned to the entry screen with the link retained. |
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Executive SummaryThe incremental change is a behavior-preserving extraction of the PR-link field's refs, module draft and derived Open state into Files Reviewed (94 files)
Scope note: the baseline for this pass is Previous Review Summary (commit 58e4d64)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit 58e4d64)Status: No Issues Found | Recommendation: Merge Executive SummaryThe module-memory link draft, the focus-effect restore, and the Files Reviewed (93 files)
Note on scope: the 86 non-English catalogs are hand-edited here, which Reviewed by deepseek-v4.1-flash-1017 · Input: 104.9K · Output: 21.4K · Cached: 2.3M Review guidance: REVIEW.md from base branch |
…nd-paste-denied # Conflicts: # apps/mobile/src/components/pr-review/pr-review-entry-screen.test.ts # apps/mobile/src/components/pr-review/pr-review-entry-screen.tsx # apps/mobile/src/lib/pr-review/pr-link-paste.test.ts # apps/mobile/src/lib/pr-review/pr-link-paste.ts
The entry screen stays under the mobile max-lines cap after the merge: the uncontrolled field's refs, module draft writes and derived Open state now live in usePrLinkField, and selectPrLinkOpenState replaces the local inline validity ternary. No behavior change.
|
bot: End-to-end evidence at the current head Sequence exercised: PR Review entry, typed a GitLab merge request URL, pressed Open, then system Back while the GitLab connect gate was shown.
Pressing Open again from the restored field reached the same gate. The clear control then emptied both the field and the stored draft: after navigating away and back the field was empty, the placeholder was shown, the clear control was absent and Open was disabled. The denied-paste copy is iOS-only (the paste prompt has no Android counterpart); it stays covered by the unit tests in this pull request and by the iOS captures from the earlier head. |
…nd-paste-denied # Conflicts: # apps/mobile/src/i18n/locales/sv.json # apps/mobile/src/i18n/locales/th.json
|
bot: Review coverage for the merge head The review that covers this pull request is the completed Kilo Code Review on head Head The Kilo Code Review check suite for Ending the session on the |
…nd-paste-denied # Conflicts: # apps/mobile/src/i18n/locales/fi.json
|
bot: Review coverage for merge head
Post-merge checks on |






Change
hasStringAsyncprobe distinguishes denial from a truly empty clipboard; the denied case shows the newprReview.linkPasteDeniedcopy, and the empty case keepsprReview.linkPasteClipboardEmpty.prReview.linkPasteDeniedis added toen.jsonand translated into the other 86 catalogs, socheck:i18nstays green.main, which added link validation to this screen: the field reports an invalid link inline and Open stays disabled until the link resolves. The branch-local invalid-link toast that predated that work is gone, since the inline status announces the same message.usePrLinkField, andselectPrLinkOpenStateis the single mapping from field text to Open state. The screen stays under the mobilemax-linescap that the merge pushed it over.Verification
Local checks on this VM:
pnpm --filter kilo-app exec vitest run— 1199 files, 17971 tests passed, 2 skipped.pnpm --filter kilo-app lint— 0 warnings, 0 errors;oxfmt --list-different srcclean.pnpm exec tsc --noEmit— 0 errors.pnpm --filter kilo-app check:i18n—check-catalogs: 87 languages, every catalog matches en.json;check:plurals— every counted message and locale declares its plural categories.main(which rewrote existingprReviewcopy insv.json,th.jsonandfi.json), the merge keptmain's wording for those existing keys and keptprReview.linkPasteDenied; the same catalog and plural checks pass.pr-review-entry-screen.test.tspluspr-link-paste.test.tspass (34 tests), and the whole PR Review area passes:vitest run src/components/pr-review src/lib/pr-review— 134 files, 1450 tests.Android (emulator
omp36, local dev stack, owned fake account):iOS (leased simulator lane, local dev stack, owned fake account):
Proxy answers
The owner's proxy gave these answers in the owner's place.
Answer: Memory-only single-shot (Recommended)
Confidence: 0.75 · Precedent: Speed and least work: "do the least amount of work possible, with no drop in quality"
Answer: Focus effect + setNativeProps (Recommended)
Confidence: 0.65 · Precedent: UX and design quality: no layout shift, best-in-class standard, "CLS is a massive enemy"
Answer: Add a new prReview.linkPasteDenied key in en.json only, as the brief specifies, and let the existing translation flow fill in the other locales. Use the Clipboard.hasStringAsync probe to tell denial apart from a truly empty clipboard. Keep linkPasteClipboardEmpty for the empty case.
Confidence: 0.55 · Precedent: UX and design quality: "the mobile app always must respect i18n"
Answer: No toast, restore the field (Recommended)
Confidence: 0.70 · Precedent: UX and design quality: remove redundant copy, e.g. the owner asked to remove the redundant "context" copy
Answer: New key + all 86 translations
Confidence: 0.75 · Precedent: UX: 'Localize every string in the mobile app' ("the mobile app always must respect i18n"); PR loop requires CI green ("make sure that CI is passing too")
Answer: Paste access was denied. Allow paste and try again.
Confidence: 0.60 · Precedent: Communication: 'make on-call alerts informative and actionable', the nearest rule for actionable copy
Answer: Lease iOS lane and observe Don't Allow Paste
Confidence: 0.85 · Precedent: Proof: 'Verify on both iOS and Android' ("Both iOS and Android need to be verified"); iOS lane on request ("iOS lane must specifically be asked for by the agent")
Answer: End on the 08819c3 review. The PR already meets the human-ready bar: no comments to address, no conflicts, CI green, and human approval. A merge-only head whose effective patch is identical to an already-reviewed head is covered by that review. Fix the class of the problem: change the end gate to accept the latest review when the only commits since it are merges of main and the patch content has not changed. Add a short bot: comment on the PR that links the 08819c3 review and records the stuck queue entry. Do not push a filler commit, and do not keep waiting on a dead queue.
Confidence: 0.60 · Precedent: Autonomy: 'blocked is not an acceptable end state' and 'fix class of issue preventing progress'; Speed: 'the measurements requirement may be too strict - so let's loosen it'