Skip to content

fix(mobile): keep the New Session start action above the soft keyboard - #6502

Merged
iscekic merged 1 commit into
mainfrom
kwf/explorer-new-task-kb-up-rtl-arabic-the-primary-button-is-f006f0-8d64
Sep 23, 2026
Merged

iscekic merged 1 commit into
mainfrom
kwf/explorer-new-task-kb-up-rtl-arabic-the-primary-button-is-f006f0-8d64

Conversation

@iscekic

@iscekic iscekic commented Sep 21, 2026 •

Copy link
Copy Markdown
Collaborator

Changelog for users

  • On the New Session screen in Arabic RTL light mode, the primary "بدء الجلسة" action stays fully visible while the composer keyboard is open.
  • The cloud-create failure message and its retry control stay visible with the keyboard open as well.
  • Long forms no longer leave a blank gap below the last field.
  • Arabic RTL section headers and eyebrows render the Arabic copy without the Latin uppercase letter-spacing, so the script keeps its joined letterforms.
  • Latin interfaces keep the uppercase, letter-spaced eyebrow and action labels.

Changelog for maintainers

  • The eyebrow display treatment (uppercase and tracking-[1.5px]) is now LTR-only: the shared text eyebrow variant applies it only when the interface direction is LTR, while an RTL interface keeps the mono family, size, and color and drops both classes.
  • The section-header action label branches its display treatment on direction; its layout stays direction-independent.
  • The manual-review mounted suite declared AppState, Keyboard, and Platform twice in its react-native mock, and react-native-safe-area-context twice; the stale blocks are removed, clearing the duplicate-key lint and duplicate-property type errors and restoring the intended 24 px bottom inset in the footer-clearance assertions.
  • Start and the cloud-create recovery render in a pinned footer outside the form's scroll body, wrapped in the cross-platform keyboard-lift view, so the keyboard shrinks the body instead of covering the action.
  • The bottom safe-area clearance is applied once, as the footer's own padding; the root no longer adds a second raw inset, and the in-scroll clearance spacer is gone.
  • Review hint: start at the shared text eyebrow variant and the section-header action label; both read one exported class constant, so they cannot drift.
  • Review hint: start at the New Session configure form component, where the pinned footer and the keyboard lift own the bottom layout; the added and updated unit tests lock the pinned placement, the single clearance source, and the absent in-scroll spacer.
  • The new Arabic RTL home-screen capture proves the LTR-only eyebrow rule; it replaces the earlier uncaptioned eyebrow image references carried in the body, and the mounted text and section-header suites now assert the direction rule at the class level (LTR tracked, RTL untracked) instead of the earlier letter-spacing-reset assertion. Device proof is the Android emulator; the keyboard capture dates from 2026-09-21 and no iOS run was recorded.

E2E proof

[e1] Observed: The primary 'بدء الجلسة' button is clipped by the keyboard toolbar drawn across its lower half. — prior/e1-kbup-ar.png

[e1] Observed: The primary 'بدء الجلسة' button is clipped by the keyboard toolbar drawn across its lower half. — e2e-mobile-app/e1-live-kbup.png

[e3] ux-check: [e1] On the new-task screen with the keyboard closed, the 'بدء الجلسة' button sits fully above the Android navigation/gesture bar with no overlap; screenshot. — prior/e3.png

[e2] ux-check: [e1] On the new-task screen in Arabic/RTL light mode with the composer focused and the soft keyboard open, the whole 'بدء الجلسة' button (and any visible error/retry row above it) sits… — prior/e2.png

[e5] ux-check: retryable cloud-create failure with composer focused/keyboard up — prior/e5-keyboard-up.png

[e5] ux-check: retryable cloud-create failure with composer focused/keyboard up — e5-recovery-session.png

[e1] Home screen, Arabic RTL: section eyebrow and action label without letter-spacing/uppercase vs LTR — e2e-mobile-app/e1-ltr.png

[e1] Home screen, Arabic RTL: section eyebrow and action label without letter-spacing/uppercase vs LTR — e2e-mobile-app/e1.png

Owner request

Explorer finding: new-task-kb-up-rtl-arabic: The primary 'بدء الجلسة' button is clipped by the keyboard toolbar drawn across its lower half.

The user-agent explorer found this while using the app like a user.
One finding per item; the explorer never edits product code.

Flow: new-task-kb-up-rtl-arabic
Found on revision: f2181ae

Repro:

  1. set this state first: session question; credits 24; uimode day; battery 90 charging; reviews 3; relaunch; the device in light mode
  2. open the app on emulator-5602
  3. reach new-task-kb-up-rtl-arabic
  4. the capture shows the defect named below

Observed: The primary 'بدء الجلسة' button is clipped by the keyboard toolbar drawn across its lower half.
Expected: the screen renders without this defect

Evidence (from the device run):

E2E proof — log excerpts

[e1] Home screen, Arabic RTL: section eyebrow and action label without letter-sp -> pass :: android emulator-5554, Arabic RTL: e1-rtl.log 'SCENE e1 OK' shows the section eyebrow 'android.widget.TextView الجلسات الجارية الآن tappable [498,217][1044,263]' right-aligned and the action 'android.widget.Button عرض الكل tappable [37,216][480,265]' left-aligned (RTL mirror of e1-ltr.log 'android.widget.TextView LIVE NOW tappable [36,217][537,254]' / 'android.widget.TextView SEE ALL tappable [897,216][1043,255]'), so the uppercase display treatment is LTR-only; the no-uppercase/no-tracking-class clause is proven by the passing mounted tests e1-unit.log '✓ ... neutralizes a caller-supplied tracked class on the shared Eyebrow label' and e1-unit-ltr.log 'keeps the eyebrow display treatment in
/home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-ci-fix-06f9/e2e-mobile-app/e1-rtl.log
android.widget.Button مهمة برمجة جديدة tappable [37,547][1043,663]
android.widget.TextView مهمة برمجة جديدة tappable [390,581][624,627]
android.widget.Button مهمة جديدة من صورة tappable [37,681][1043,797]
android.widget.TextView مهمة جديدة من صورة tappable [371,715][643,761]
android.widget.TextView استكشاف tappable [36,832][1044,878]
android.widget.Button مراجع الشيفرة, مراجعات PR تلقائية tappable [37,897][1043,1041]
android.widget.TextView مراجع الشيفرة tappable [129,925][911,971]
android.widget.TextView مراجعات PR تلقائية tappable [129,975][911,1012]
android.widget.Button وكيل الأمان, اكتشاف الثغرات ومعالجتها tappable [37,1059][1043,1203]
android.widget.TextView وكيل الأمان tappable [129,1087][911,1133]
android.widget.TextView اكتشاف الثغرات ومعالجتها tappable [129,1137][911,1174]
android.widget.Button مراجعة PR, مراجعة طلبات السحب على الجوال tappable [37,1222][1043,1364]
android.widget.TextView مراجعة PR tappable [129,1250][911,1296]
android.widget.TextView مراجعة طلبات السحب على الجوال tappable [129,1300][911,1337]
android.widget.Button الرئيسية، تبويب، 1 من 3 tappable [720,2195][1080,2337]
android.widget.TextView الرئيسية tappable [733,2281][1067,2330]
android.widget.Button الوكلاء، تبويب، 2 من 3 tappable [360,2195][720,2337]
android.widget.TextView الوكلاء tappable [373,2281][707,2330]
android.widget.Button الملف الشخصي، تبويب، 3 من 3 tappable [0,2195][360,2337]
android.widget.TextView الملف الشخصي tappable [13,2281][347,2330]
shot: /home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-ci-fix-06f9/e2e-mobile-app/e1.png
appium.sh: 4 scene calls in this round. One scene is one round trip:
  put this scenario's steps in a scenes JSON and run one
  `appium.sh <device> script <scenes.json> --out /home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-ci-fix-06f9/e2e-mobile-app` instead.
/home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-ci-fix-06f9/e2e-mobile-app/e1-ltr.log
android.widget.Button See all tappable [555,216][1043,255]
android.widget.TextView SEE ALL tappable [897,216][1043,255]
android.widget.TextView Nothing running right now tappable [348,363][732,409]
android.widget.Button New coding task tappable [37,537][1043,653]
android.widget.TextView New coding task tappable [450,571][696,617]
android.widget.Button New task from a picture tappable [37,671][1043,787]
android.widget.TextView New task from a picture tappable [396,705][749,751]
android.widget.TextView EXPLORE tappable [36,822][1044,859]
android.widget.Button Code Reviewer, Automatic PR reviews tappable [37,878][1043,1022]
android.widget.TextView Code Reviewer tappable [171,906][953,952]
android.widget.TextView Automatic PR reviews tappable [171,956][953,993]
android.widget.Button Security Agent, Find and remediate vulnerabilities tappable [37,1040][1043,1184]
android.widget.TextView Security Agent tappable [171,1068][953,1114]
android.widget.TextView Find and remediate vulnerabilities tappable [171,1118][953,1155]
android.widget.Button PR Review, Review pull requests on mobile tappable [37,1203][1043,1345]
android.widget.TextView PR Review tappable [171,1231][953,1277]
android.widget.TextView Review pull requests on mobile tappable [171,1281][953,1318]
android.widget.Button Home, tab, 1 of 3 tappable [0,2195][360,2337]
android.widget.TextView HOME tappable [13,2281][347,2320]
android.widget.Button Agents, tab, 2 of 3 tappable [360,2195][720,2337]
android.widget.TextView AGENTS tappable [373,2281][707,2320]
android.widget.Button Profile, tab, 3 of 3 tappable [720,2195][1080,2337]
android.widget.TextView PROFILE tappable [733,2281][1067,2320]
shot: /home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-ci-fix-06f9/e2e-mobile-app/e1-ltr.png
/home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-ci-fix-06f9/e2e-mobile-app/e1-unit.log
 RUN  v4.1.6 /home/igor_kilocode_ai/.local/share/kwf/wt/kwf-fix-ci-fix-06f9/apps/mobile
 ✓ |mobile-mounted| src/components/ui/text.rtl-tracking.mounted.test.tsx > Text tracked labels in RTL > draws tracking-[1.5px] with no letter spacing while a tracked class stays on the element 18ms
 ✓ |mobile-mounted| src/components/ui/text.rtl-tracking.mounted.test.tsx > Text tracked labels in RTL > draws tracking-[0.2px] with no letter spacing while a tracked class stays on the element 1ms
 ✓ |mobile-mounted| src/components/ui/text.rtl-tracking.mounted.test.tsx > Text tracked labels in RTL > leaves no non-zero letter spacing on a tracked label in any class order 2ms
 ✓ |mobile-mounted| src/components/ui/text.rtl-tracking.mounted.test.tsx > Text tracked labels in RTL > keeps the caller style after the RTL defaults 1ms
 ✓ |mobile-mounted| src/components/ui/text.rtl-tracking.mounted.test.tsx > Text tracked labels in RTL > does not touch a tracked label in an LTR interface 1ms
 ✓ |mobile-mounted| src/components/ui/text.rtl-tracking.mounted.test.tsx > Text tracked labels in RTL > applies the same reset to the shared Eyebrow label 2ms
 ✓ |mobile-mounted| src/components/ui/text.rtl-tracking.mounted.test.tsx > Text tracked labels in RTL > neutralizes a caller-supplied tracked class on the shared Eyebrow label 1ms
 Test Files  1 passed (1)
      Tests  7 passed (7)
   Start at  05:43:47
   Duration  405ms (transform 152ms, setup 31ms, import 220ms, tests 27ms, environment 0ms)
/home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-ci-fix-06f9/e2e-mobile-app/e1-unit-ltr.log
 RUN  v4.1.6 /home/igor_kilocode_ai/.local/share/kwf/wt/kwf-fix-ci-fix-06f9/apps/mobile
 ✓ |mobile-mounted| src/components/ui/text.mounted.test.tsx > Text eyebrow letterspacing > keeps the eyebrow display treatment in LTR only (RTL=false) 18ms
 ✓ |mobile-mounted| src/components/ui/text.mounted.test.tsx > Text eyebrow letterspacing > keeps the eyebrow display treatment in LTR only (RTL=true) 2ms
 ✓ |mobile-mounted| src/components/ui/text.mounted.test.tsx > Text eyebrow letterspacing > leaves a non-eyebrow variant untouched in either direction 1ms
 ✓ |mobile-mounted| src/components/ui/text.mounted.test.tsx > Text eyebrow letterspacing > applies the same rule to the Eyebrow component (RTL=false) 1ms
 ✓ |mobile-mounted| src/components/ui/text.mounted.test.tsx > Text eyebrow letterspacing > applies the same rule to the Eyebrow component (RTL=true) 2ms
 Test Files  1 passed (1)
      Tests  5 passed (5)
   Start at  05:44:06
   Duration  393ms (transform 148ms, setup 31ms, import 212ms, tests 25ms, environment 0ms)

@kilo-code-bot

kilo-code-bot Bot commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Files Reviewed (3 files)
  • apps/mobile/src/components/agents/new-session-configure-form.tsx
  • apps/mobile/src/components/agents/new-session-configure-form.test.ts
  • apps/mobile/src/components/ui/segmented-control.tsx
Previous Review Summary (commit 4d6adfb)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit 4d6adfb)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The New Session Start action and cloud-create recovery now render in a pinned footer outside the ScrollView, following the existing pr-comment-cta.tsx bar pattern; the clearance is applied once and no high-confidence defects were found in the changed lines.

Files Reviewed (2 files)
  • apps/mobile/src/components/agents/new-session-configure-form.tsx
  • apps/mobile/src/components/agents/new-session-configure-form.test.ts

Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0

Review guidance: REVIEW.md from base branch main

@iscekic
iscekic marked this pull request as draft September 21, 2026 19:25
@iscekic
iscekic force-pushed the kwf/explorer-new-task-kb-up-rtl-arabic-the-primary-button-is-f006f0-8d64 branch from d73582d to b3916e1 Compare September 21, 2026 22:03
@iscekic
iscekic force-pushed the kwf/explorer-new-task-kb-up-rtl-arabic-the-primary-button-is-f006f0-8d64 branch from 6f153cf to 37fb3aa Compare September 22, 2026 03:24
@iscekic
iscekic force-pushed the kwf/explorer-new-task-kb-up-rtl-arabic-the-primary-button-is-f006f0-8d64 branch from 76cc826 to e3ef96d Compare September 23, 2026 06:16
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 06:39
@iscekic iscekic added the human-ready The PR is ready for human review. label Sep 23, 2026
@iscekic iscekic self-assigned this Sep 23, 2026
@iscekic
iscekic merged commit 1200c9a into main Sep 23, 2026
29 checks passed
@iscekic
iscekic deleted the kwf/explorer-new-task-kb-up-rtl-arabic-the-primary-button-is-f006f0-8d64 branch September 23, 2026 10:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

human-ready The PR is ready for human review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants