Skip to content

fix(mobile): render Arabic Home labels whole in RTL - #6495

Merged
iscekic merged 2 commits into
mainfrom
kwf/explorer-home-rtl-the-home-section-header-row-and-and-the-443be-0d75
Sep 23, 2026
Merged

iscekic merged 2 commits into
mainfrom
kwf/explorer-home-rtl-the-home-section-header-row-and-and-the-443be-0d75

Conversation

@iscekic

@iscekic iscekic commented Sep 21, 2026 •

Copy link
Copy Markdown
Collaborator

Changelog for users

  • On the Arabic Home, the section header "الجلسات الجارية الآن" / "عرض الكل" and the "استكشاف" label render whole, with connected Arabic letterforms and no glyph broken or clipped at the top.
  • The English Home keeps its tracked mono eyebrow: LIVE NOW, SEE ALL, and EXPLORE are unchanged, and EXPLORE still sits above the explore card.
  • In an Arabic (RTL) interface, Latin-script labels keep their tracked mono design instead of losing it.

Changelog for maintainers

  • The shared Text component drops the JetBrains Mono family from Arabic-script copy in an RTL interface, because that font ships no Arabic glyphs and forces the system to draw the word one character at a time.
  • Those same labels get letterSpacing: 0: the tracked Latin spacing pulls Arabic letters apart from each other. Latin copy keeps its tracking.
  • Arabic detection walks the React child tree and matches the Arabic-script Unicode blocks; the rule applies only when the interface is RTL.
  • The reported symptom is broken, disconnected Arabic glyphs rather than vertical clipping; the mono family plus letter-spacing on the eyebrow variants produced it.
  • The gray section labels on Profile and Preferences use a variant with no mono family and stay as they are; no catalog, config, or dependency changes.
  • Tests pin the Arabic-versus-Latin behavior for Text and the Eyebrow wrapper, and update two existing RTL style expectations.
  • Device proof for the Arabic fallback is iOS only; the proof host had no Android device.

E2E proof

Owner request

Explorer finding: home-rtl: The Home section-header row ("الجلسات الجارية الآن" and "عرض الكل") and the "استكشف" section label are cut off at the top of the glyphs, while the same gray section labels on Profile and Preferences render whole.

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

Flow: home-rtl
Found on revision: f2181ae

Repro:

  1. set this state first: seed coding-plans:available-credentials mobile 3; reviews 3; credits 25
  2. open the app on 1F6F1503-9C26-4120-82D4-5F8768CBE42F
  3. reach home-rtl
  4. the capture shows the defect named below

Observed: The Home section-header row ("الجلسات الجارية الآن" and "عرض الكل") and the "استكشف" section label are cut off at the top of the glyphs, while the same gray section labels on Profile and Preferences render whole.
Expected: the screen renders without this defect

Evidence (from the device run):

Open findings (not fixed here)

  • appearance is the visual reviewer's (e2.png)."},{"name":"e3","result":"pass","evidence":"/Users/igor/.local/share/kwf/ios/runs/explorer-home-rtl-the-home-section-header-row-and-and-the-443be-0d75/evidence/e3-scene.log","note":"ios: e3-scene.log shows the label 'XCUIElementTypeStaticText …[truncated]
  • 1). --- shard 1 ---
    VERDICT {"verdict":"passed","scenarios":[{"name":"e1","result":"pass","evidence":"/Users/igor/.local/share/kwf/ios/runs/explorer-home-rtl-the-home-section-header-row-and-and-the-443be-0d75/evidence/e1-scene.log","note":"ios: e1-scene.log shows 'XCUIElementTypeStaticText EXPLORE t
  • the '## E2E proof' section is empty

@iscekic
iscekic marked this pull request as draft September 21, 2026 15:57
Comment thread apps/mobile/src/components/ui/text.tsx Outdated
@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

Executive Summary

Incremental review of the Hebrew RTL-script coverage fix: the RTL reset now keys on hasRtlScript, which matches the Hebrew block and presentation forms as well as the Arabic blocks, so the prior WARNING (Hebrew copy keeping tracked eyebrow and tab labels in RTL) is resolved. No new defects were found in the changed code.

Files Reviewed (9 files)
  • apps/mobile/src/lib/rtl-text.ts - 0 issues (hasRtlScript matches Hebrew U+0590-U+05FF and U+FB1D-U+FB4F plus the Arabic blocks; withoutMonoFamily strips only font-mono* utilities)
  • apps/mobile/src/components/ui/text.tsx - 0 issues (prior Hebrew finding resolved)
  • apps/mobile/src/lib/rtl-text.test.ts - 0 issues
  • apps/mobile/src/components/ui/text.rtl-labels.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/ui/text.rtl-tracking.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/ui/text.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/home/section-header.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/agents/chat-composer.test.ts - 0 issues
  • apps/mobile/src/components/agents/new-session-prompt-initial-prompt.test.ts - 0 issues

No potential memory leaks were introduced: the change is pure render-time text/class computation with no listeners, timers, or subscriptions.

Previous Review Summaries (5 snapshots, latest commit 44fb1ce)

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

Previous review (commit 44fb1ce)

Status: 1 Issue Found | Recommendation: Address before merge

Executive Summary

The RTL reset added by this PR is gated on Arabic-script detection, so Hebrew (he), another RTL language the app ships, regains tracked eyebrow and tab labels in an RTL interface.

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
apps/mobile/src/components/ui/text.tsx 99 The RTL letter-spacing reset is now gated on Arabic script, so Hebrew copy (a shipped RTL locale, RTL_LANGUAGES = ar, he, fa, ur, ckb, ps) keeps tracking-*/EYEBROW_LATIN_DISPLAY in RTL, where it was previously neutralized
Files Reviewed (9 files)
  • apps/mobile/src/lib/rtl-text.ts - 0 issues (Arabic Extended-B range U+0870-U+089F now matches; withoutMonoFamily strips only font-mono* utilities)
  • apps/mobile/src/components/ui/text.tsx - 1 issue
  • apps/mobile/src/lib/rtl-text.test.ts - 0 issues
  • apps/mobile/src/components/ui/text.rtl-labels.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/ui/text.rtl-tracking.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/ui/text.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/home/section-header.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/agents/chat-composer.test.ts - 0 issues
  • apps/mobile/src/components/agents/new-session-prompt-initial-prompt.test.ts - 0 issues

Fix these issues in Kilo Cloud

The branch was force-pushed since the prior review (30ddd77 is not an ancestor of HEAD), so this is a full review of the current PR diff. No potential memory leaks were introduced: the change is pure render-time text/class computation with no listeners, timers, or subscriptions.

Previous review (commit 30ddd77)

Status: No Issues Found | Recommendation: Merge

Executive Summary

Incremental review of the RTL/Arabic label fix: HEAD adds only pinned tests plus the Arabic Extended-B range, and I found no new defects in the changed code. The one prior SUGGESTION (hasArabicScript runs on every render even in LTR, apps/mobile/src/components/ui/text.tsx:84) is re-verified as still present in unchanged code, was declined by the author as non-blocking, and is not a correctness defect.

Files Reviewed (10 files)
  • apps/mobile/src/lib/rtl-text.ts - 0 issues (Arabic Extended-B range U+0870-U+089F now matches; withoutMonoFamily strips only font-mono* utilities)
  • apps/mobile/src/components/ui/text.tsx - 0 issues (unchanged since the prior review)
  • apps/mobile/src/lib/rtl-text.test.ts - 0 issues
  • apps/mobile/src/components/ui/text.rtl-labels.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/ui/text.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/home/section-header.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/agents/chat-composer.test.ts - 0 issues
  • apps/mobile/src/components/agents/new-session-prompt-initial-prompt.test.ts - 0 issues
  • apps/mobile/plugins/branded-splash.test.ts - 0 issues
  • apps/mobile/src/app/(app)/(tabs)/layout.mounted.test.tsx - 0 issues (rename from _layout.mounted.test.tsx; no stale references)

No potential memory leaks were introduced: the change is pure render-time text/class computation with no listeners, timers, or subscriptions.

Previous review (commit eb44ac4)

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 1
Issue Details (click to expand)

SUGGESTION

File Line Issue
apps/mobile/src/components/ui/text.tsx 84 hasArabicScript walks the child tree on every render even in LTR, where the result is unused (carried forward; author declined as non-blocking)
Files Reviewed (5 files)
  • apps/mobile/src/lib/rtl-text.ts - 0 issues (Arabic Extended-B range U+0870–U+089F added; previous finding resolved)
  • apps/mobile/src/lib/rtl-text.test.ts - 0 issues
  • apps/mobile/src/components/ui/text.rtl-labels.mounted.test.tsx - 0 issues
  • apps/mobile/plugins/branded-splash.test.ts - 0 issues
  • apps/mobile/src/app/(app)/(tabs)/layout.mounted.test.tsx - 0 issues (rename only; metro test-file exclusion still matches)

Fix these issues in Kilo Cloud

Previous review (commit 96c9042)

Status: 2 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 2
Issue Details (click to expand)

SUGGESTION

File Line Issue
apps/mobile/src/lib/rtl-text.ts 29 ARABIC_SCRIPT omits the Arabic Extended-B block (U+0870–U+089F), so copy using only those characters keeps the mono family and tracking
apps/mobile/src/components/ui/text.tsx 84 hasArabicScript walks the child tree on every render even in LTR, where the result is unused
Files Reviewed (7 files)
  • apps/mobile/src/lib/rtl-text.ts - 1 issue
  • apps/mobile/src/components/ui/text.tsx - 1 issue
  • apps/mobile/src/components/home/section-header.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/ui/text.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/ui/text.rtl-labels.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/agents/chat-composer.test.ts - 0 issues
  • apps/mobile/src/components/agents/new-session-prompt-initial-prompt.test.ts - 0 issues

Fix these issues in Kilo Cloud

Previous review (commit b2ae13c)

Status: 1 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 0
SUGGESTION 1
Issue Details (click to expand)

SUGGESTION

File Line Issue
apps/mobile/src/components/ui/text.tsx 71 hasArabicScript walks the child tree on every render even in LTR, where the result is unused
Files Reviewed (6 files)
  • apps/mobile/src/lib/rtl-text.ts - 0 issues
  • apps/mobile/src/components/ui/text.tsx - 1 issue
  • apps/mobile/src/components/home/section-header.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/ui/text.rtl-labels.mounted.test.tsx - 0 issues
  • apps/mobile/src/components/agents/chat-composer.test.ts - 0 issues
  • apps/mobile/src/components/agents/new-session-prompt-initial-prompt.test.ts - 0 issues

Fix these issues in Kilo Cloud


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

Review guidance: REVIEW.md from base branch main

@iscekic
iscekic force-pushed the kwf/explorer-home-rtl-the-home-section-header-row-and-and-the-443be-0d75 branch from a41a624 to 96c9042 Compare September 21, 2026 19:39
@iscekic
iscekic marked this pull request as ready for review September 21, 2026 19:58
Comment thread apps/mobile/src/lib/rtl-text.ts Outdated
@iscekic
iscekic marked this pull request as draft September 21, 2026 20:11
@iscekic
iscekic force-pushed the kwf/explorer-home-rtl-the-home-section-header-row-and-and-the-443be-0d75 branch from e7e20a0 to eb44ac4 Compare September 21, 2026 21:25
@iscekic
iscekic marked this pull request as ready for review September 21, 2026 22:24
@iscekic

iscekic commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator Author

bot: rejected: a suggestion, not a defect. A typed review read this finding as needing no code change before merge; the code stays as is. Say so here if one of them does change behaviour and it will be repaired.

  • apps/mobile/src/components/ui/text.tsx:84 — hasArabicScript walks the child tree on every render even in LTR, where the result is unused (carried forward; author declined as non-blocking) (p=0.88)

@iscekic
iscekic marked this pull request as draft September 21, 2026 22:31
@iscekic
iscekic force-pushed the kwf/explorer-home-rtl-the-home-section-header-row-and-and-the-443be-0d75 branch from eb44ac4 to 30ddd77 Compare September 21, 2026 23:25
@iscekic
iscekic marked this pull request as ready for review September 21, 2026 23:44
@iscekic
iscekic marked this pull request as draft September 22, 2026 01:18
@iscekic
iscekic force-pushed the kwf/explorer-home-rtl-the-home-section-header-row-and-and-the-443be-0d75 branch from 30ddd77 to 9a16df4 Compare September 22, 2026 03:59
@iscekic
iscekic force-pushed the kwf/explorer-home-rtl-the-home-section-header-row-and-and-the-443be-0d75 branch from 9a16df4 to 44fb1ce Compare September 23, 2026 04:39
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 04:58
Comment thread apps/mobile/src/components/ui/text.tsx Outdated
@iscekic
iscekic marked this pull request as draft September 23, 2026 05:07
@iscekic
iscekic force-pushed the kwf/explorer-home-rtl-the-home-section-header-row-and-and-the-443be-0d75 branch from c129c04 to ceab4eb Compare September 23, 2026 05:56
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 06:06
@iscekic

iscekic commented Sep 23, 2026

Copy link
Copy Markdown
Collaborator Author

This description names a scenario the proof did not capture:

  • not proved live: e1.png is no longer on the host that took it, so no publish can carry it

A repeated proof run rebuilds the same evidence, so no proof run is dispatched for a named gap. Merging with this gap open is your decision.

@iscekic iscekic added the human-ready The PR is ready for human review. label Sep 23, 2026
@iscekic
iscekic requested a review from eshurakov September 23, 2026 07:05
@iscekic
iscekic requested a review from pandemicsyn September 23, 2026 07:05
@iscekic iscekic self-assigned this Sep 23, 2026
@iscekic iscekic removed the human-ready The PR is ready for human review. label Sep 23, 2026
@iscekic
iscekic marked this pull request as draft September 23, 2026 07:22
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 07:35
@iscekic iscekic added the human-ready The PR is ready for human review. label Sep 23, 2026
@iscekic
iscekic merged commit 379fb99 into main Sep 23, 2026
28 checks passed
@iscekic
iscekic deleted the kwf/explorer-home-rtl-the-home-section-header-row-and-and-the-443be-0d75 branch September 23, 2026 12:06
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