Skip to content

fix(mobile): stop Latin tracking from splitting Arabic text - #6446

Merged
iscekic merged 15 commits into
mainfrom
kwf/explorer-preferences-ar-the-arabic-headings-such-as-and-t-5faea-6357
Sep 28, 2026
Merged

iscekic merged 15 commits into
mainfrom
kwf/explorer-preferences-ar-the-arabic-headings-such-as-and-t-5faea-6357

Conversation

@iscekic

@iscekic iscekic commented Sep 20, 2026 •

Copy link
Copy Markdown
Collaborator

Changelog for users

  • Arabic-script text (Arabic, Farsi, Urdu, Kurdish, and Pashto) renders with its letters joined in every interface language, not only in an Arabic (RTL) interface: an Arabic repository or agent label on an English screen no longer draws with letter gaps.
  • An Arabic label keeps the same size, weight and colour everywhere; the mono family and the letter tracking drop together, because JetBrains Mono ships no Arabic glyph.
  • Hebrew text keeps the tracking its class asks for on an English screen, and keeps the reset inside an RTL interface.
  • Latin text keeps its existing letter tracking in both directions, including uppercase section labels.
  • An explicit letter spacing supplied by a caller still overrides the reset.
  • Signing out from Profile shows the same in-app confirmation with a red sign-out control on iOS and Android.
  • The Agents header's New-session and Filter controls no longer overlap, so a tap in the gap between them triggers neither.

Changelog for maintainers

  • The shared mobile text component keys both script rules on the copy, not on I18nManager.isRTL: withoutMonoFamily follows hasRtlScript (Hebrew and Arabic), and the letter-spacing reset follows containsJoinedScript (the joined Arabic blocks), in either direction.
  • An RTL interface keeps resetting its own RTL-script copy, because the RTL catalogs carry no tracked design the Hebrew block could take.
  • NATURAL_LETTER_SPACING replaces the direction-named RTL_NO_LETTER_SPACING; the reset is no longer direction-specific.
  • JOINED_SCRIPT now covers Arabic Extended-B, the block hasRtlScript already read for the font rule. Without it the new LTR path would miss a block the Arabic catalog uses.
  • Delete textLetterSpacing, which no production code called since the reset became script-keyed.
  • Only direct string children are inspected; the caller's style stays last in the merged array, so an explicit letter spacing still wins.
  • The eyebrow variant's tracked class stays on an LTR element and the inline reset draws its tracking inert.
  • Right-to-left writing direction is still applied when the interface reports right-to-left.
  • The sign-out confirmation no longer branches on platform; the profile screen always opens the in-app dialog and drops the native alert.
  • The filter button accepts a caller-supplied hit slop, and the Agents header caps its facing sides to the row gap.
  • CI repairs removed the mounted text test's stale duplicate imports and helpers, the case-guard allowlist's duplicate key, and the configure-form test's real skeleton import.
  • Review Text's two predicates first, then JOINED_SCRIPT, then the changed expectations in the mounted tests, then the hit-slop constants and the sign-out paths.

Verification

  • apps/mobile vitest run on the seven files this change touches: 140 tests pass. The files are text.mounted, text.rtl-labels, text.rtl-tracking, rtl-text, section-header.mounted, and the two RTL counter tests the array shape pins (chat-composer, new-session-prompt-initial-prompt).
  • The two script predicates are pinned per direction with it.each([false, true]); the mono-family rule is pinned in section-header.mounted and text.rtl-labels.
  • The reset still lands ahead of the caller's style: tracking-[1.5px] compiles to a positive value while the resolved spacing is 0 (compiledLetterSpacing in text.mounted).
  • oxlint on the changed files: 0 warnings, 0 errors. oxfmt --list-different on the changed files: no output.
  • CI on ccfea7d8a1: 18 checks pass, 11 skip, 0 fail. The test and test (kilo-app) jobs cover the mobile suite; typecheck, lint, format-check, check-unused, drizzle-check, trufflehog, and Kilo Code Review pass.
  • The first CI run on 60f3398484 failed test: a filtered style array dropped the trailing entry that chat-composer.test.ts and new-session-prompt-initial-prompt.test.ts pin in RTL. c7a6e9c744 restores the three-entry array main ships.
  • The branch carries main at eba9bec1b8 (merged twice, no conflict in either merge).

E2E proof

The captures below predate this change. They prove the RTL screens and the sign-out flow on Android. No capture shows an Arabic label on an English screen, which is the case this change adds.

e1-prefs.png

e1.png

e2.png

e3.png

e3-signed-out.png

e4-filter-action.png

Open findings (not fixed here)

  • The six Android captures above replace the earlier iOS screenshots of the Arabic section labels.
  • iOS is not proved: the run covered Android, and the scenarios that also named iOS remain skipped and pending owner verification.
  • Some optional checks did not run.
  • No device run covers an Arabic label on an English screen, or a Hebrew label on an English screen. Unit tests pin both; a visual check of the eyebrow, a section header, and a session row in an English interface is still open.
  • The first copy of the letter-spacing fix landed on main before this branch (#6497, then #6495). The earlier revision of this pull request re-applied that older helper and lost the newest commit in the merge. This revision keys both rules on the script and keeps one source for the reset.
  • tsgo --noEmit in this worktree reports 106 errors in files this change does not touch (generated tRPC types are absent). CI holds the typecheck.
Owner request

@iscekic
iscekic marked this pull request as draft September 20, 2026 23:23
@kilo-code-bot

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

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Executive Summary

Incremental review of the commits after 60f3398484: the new commit keeps the RTL style array at three entries ([writingDirection, reset, callerStyle]) so the pre-existing chat-composer and new-session-prompt assertions that pin that shape keep passing, and behaviour is unchanged because the undefined placeholders are inert and the caller's style still lands last. The script-keyed letter-spacing reset, the joined-vs-Hebrew distinction, and the direction-agnostic hit-slop cap still hold at HEAD; no memory-leak surface is added (a per-render style array only).

Files Reviewed (14 files)
  • apps/mobile/src/components/agents/session-filter-button.tsx
  • apps/mobile/src/components/agents/session-list-header-actions.mounted.test.tsx
  • apps/mobile/src/components/agents/session-list-header-actions.tsx
  • apps/mobile/src/components/home/section-header.mounted.test.tsx
  • apps/mobile/src/components/profile-screen.signout.mounted.test.tsx
  • apps/mobile/src/components/profile-screen.tsx
  • apps/mobile/src/components/ui/text.mounted.test.tsx
  • apps/mobile/src/components/ui/text.rtl-labels.mounted.test.tsx
  • apps/mobile/src/components/ui/text.rtl-tracking.mounted.test.tsx
  • apps/mobile/src/components/ui/text.tsx
  • apps/mobile/src/components/use-sign-out-confirmation.ts
  • apps/mobile/src/lib/alert-dialog-platform-parity.test.ts
  • apps/mobile/src/lib/rtl-text.test.ts
  • apps/mobile/src/lib/rtl-text.ts
Previous Review Summaries (7 snapshots, latest commit 60f3398)

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

Previous review (commit 60f3398)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The new commit keys both mobile text rules on the copy's script instead of the interface direction (a joined-script Arabic run resets letter spacing and drops the mono family in either direction, while Hebrew keeps its tracking on an English screen), and the in-app sign-out confirm and the direction-agnostic facing hit-slop cap still hold at HEAD.

Files Reviewed (14 files)
  • apps/mobile/src/components/agents/session-filter-button.tsx
  • apps/mobile/src/components/agents/session-list-header-actions.mounted.test.tsx
  • apps/mobile/src/components/agents/session-list-header-actions.tsx
  • apps/mobile/src/components/home/section-header.mounted.test.tsx
  • apps/mobile/src/components/profile-screen.signout.mounted.test.tsx
  • apps/mobile/src/components/profile-screen.tsx
  • apps/mobile/src/components/ui/text.mounted.test.tsx
  • apps/mobile/src/components/ui/text.rtl-labels.mounted.test.tsx
  • apps/mobile/src/components/ui/text.rtl-tracking.mounted.test.tsx
  • apps/mobile/src/components/ui/text.tsx
  • apps/mobile/src/components/use-sign-out-confirmation.ts
  • apps/mobile/src/lib/alert-dialog-platform-parity.test.ts
  • apps/mobile/src/lib/rtl-text.test.ts
  • apps/mobile/src/lib/rtl-text.ts

Previous review (commit fdfa0e5)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The new commits since the prior review only merged origin/main into the branch; every file this PR owns is unchanged, and the direction-agnostic hit-slop cap, the single in-app sign-out confirm, and the joined-script/RTL test updates still hold against the merged tree.

Files Reviewed (9 files)
  • apps/mobile/src/components/agents/session-filter-button.tsx
  • apps/mobile/src/components/agents/session-list-header-actions.mounted.test.tsx
  • apps/mobile/src/components/agents/session-list-header-actions.tsx
  • apps/mobile/src/components/profile-screen.signout.mounted.test.tsx
  • apps/mobile/src/components/profile-screen.tsx
  • apps/mobile/src/components/ui/text.mounted.test.tsx
  • apps/mobile/src/components/use-sign-out-confirmation.ts
  • apps/mobile/src/lib/alert-dialog-platform-parity.test.ts
  • apps/mobile/src/lib/rtl-text.test.ts

Previous review (commit 94e1090)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The follow-up commits stop the leaked mounted Text renderer, and the current diff's direction-agnostic hit-slop cap, shared in-app sign-out confirm, and joined-script/RTL test updates hold up against the code; no new defects found.

Files Reviewed (11 files)
  • apps/mobile/src/components/agents/session-filter-button.tsx
  • apps/mobile/src/components/agents/session-list-header-actions.mounted.test.tsx
  • apps/mobile/src/components/agents/session-list-header-actions.tsx
  • apps/mobile/src/components/destructive-confirm-dialog.mounted.test.tsx
  • apps/mobile/src/components/destructive-confirm-dialog.tsx
  • apps/mobile/src/components/profile-screen.signout.mounted.test.tsx
  • apps/mobile/src/components/profile-screen.tsx
  • apps/mobile/src/components/ui/text.mounted.test.tsx
  • apps/mobile/src/components/use-sign-out-confirmation.ts
  • apps/mobile/src/lib/alert-dialog-platform-parity.test.ts
  • apps/mobile/src/lib/rtl-text.test.ts

Previous review (commit 38f23f9)

Status: 2 Issues Found | Recommendation: Address before merge

Executive Summary

The joined-script tracking reset and the one-dialog sign-out change are correct and the previously reported RTL hit-slop overlap is fixed; the only remaining findings are a leaked test renderer and a now-inverted test comment.

Overview

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

SUGGESTION

File Line Issue
apps/mobile/src/components/ui/text.mounted.test.tsx 129 The second mount overwrites the module-level renderer without unmounting the first, leaking a React tree
apps/mobile/src/components/agents/session-list-header-actions.mounted.test.tsx 255 Comment states the pre-change slop ownership; the filter now takes the per-side slop and the new-session control no longer caps a side
Files Reviewed (17 files)
  • apps/mobile/plugins/branded-splash.test.ts
  • apps/mobile/src/components/agents/session-filter-button.tsx
  • apps/mobile/src/components/agents/session-list-header-actions.mounted.test.tsx - 1 issue
  • apps/mobile/src/components/agents/session-list-header-actions.tsx
  • apps/mobile/src/components/code-reviewer/manual-review-screen.mounted.test.tsx
  • apps/mobile/src/components/destructive-confirm-dialog.mounted.test.tsx
  • apps/mobile/src/components/destructive-confirm-dialog.tsx
  • apps/mobile/src/components/profile-screen.signout.mounted.test.tsx
  • apps/mobile/src/components/profile-screen.tsx
  • apps/mobile/src/components/ui/segmented-control.tsx
  • apps/mobile/src/components/ui/text.mounted.test.tsx - 1 issue
  • apps/mobile/src/components/ui/text.rtl-tracking.mounted.test.tsx
  • apps/mobile/src/components/ui/text.tsx
  • apps/mobile/src/components/use-sign-out-confirmation.ts
  • apps/mobile/src/lib/destructive-confirm-platform.ts (deleted)
  • apps/mobile/src/lib/rtl-text.test.ts
  • apps/mobile/src/lib/rtl-text.ts

The branch was rewritten (rebased onto fd990a18b), so this is a full review of the current diff. Re-verified at HEAD: the previous session-list-header-actions.tsx RTL overlap warning is fixed (the new-session control keeps the symmetric 8pt compact slop and the filter caps both horizontal sides at 6, so the facing pair sums to the 14pt gap in either direction), and the duplicate react-native-safe-area-context mock is gone; the new-session-configure-form.test.ts skeleton finding is not part of this diff. The joined-script regex in rtl-text.ts and the reset prepended in text.tsx (caller style stays last) behave as documented, the sign-out hook no longer branches on platform, and the deleted destructive-confirm-platform.ts has no remaining references. No memory-leak surface was added: no timers, subscriptions, listeners, or retained refs.

Fix these issues in Kilo Cloud

Previous review (commit 7576aa4)

Status: 3 Issues Found | Recommendation: Address before merge

Overview

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

WARNING

File Line Issue
apps/mobile/src/components/agents/session-list-header-actions.tsx 26 Symmetric filter hit slop only meets the 14pt row gap in LTR; under RTL the row mirrors and the facing pair sums to 16pt, reintroducing the 2pt overlap this change removes

SUGGESTION

File Line Issue
apps/mobile/src/components/profile-screen.signout.mounted.test.tsx 30 Duplicate vi.mock('react-native-safe-area-context') whose factory conflicts with the pre-existing registration at line 41
apps/mobile/src/components/agents/new-session-configure-form.test.ts 126 Third identical vi.mock('@/components/ui/skeleton'), redundant with lines 134 and 145
Files Reviewed (11 files)
  • apps/mobile/src/lib/rtl-text.ts
  • apps/mobile/src/lib/rtl-text.test.ts
  • apps/mobile/src/components/ui/text.tsx
  • apps/mobile/src/components/ui/text.mounted.test.tsx
  • apps/mobile/src/components/agents/session-filter-button.tsx
  • apps/mobile/src/components/agents/session-list-header-actions.tsx - 1 issue
  • apps/mobile/src/components/agents/new-session-configure-form.test.ts - 1 issue
  • apps/mobile/src/components/profile-screen.tsx
  • apps/mobile/src/components/profile-screen.signout.mounted.test.tsx - 1 issue
  • apps/mobile/src/components/destructive-confirm-dialog.tsx
  • apps/mobile/src/components/destructive-confirm-dialog.mounted.test.tsx

Re-reviewed incrementally after the branch was rewritten. The joined-script reset in text.tsx/rtl-text.ts and its tests are unchanged from the prior review and still behave as documented; no memory-leak risk was introduced by any changed file (no subscriptions, timers, or retained references; only a module-level regex and per-render style arrays). The sign-out change drops the Platform branch cleanly (Alert is still used by delete-account), the moved useState keeps a stable hook order, and the remaining findings are a latent RTL hit-slop overlap plus two duplicate test mocks.

Fix these issues in Kilo Cloud

Previous review (commit 6170b07)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (4 files)
  • apps/mobile/src/lib/rtl-text.ts
  • apps/mobile/src/lib/rtl-text.test.ts
  • apps/mobile/src/components/ui/text.tsx
  • apps/mobile/src/components/ui/text.mounted.test.tsx

Re-reviewed incrementally: the branch was rebased onto a newer base, but the four changed files' content is unchanged from the prior review. The joined-script reset is prepended to the rendered style array while the caller's props.style stays last, so an explicit letterSpacing still wins; the RTL writingDirection entry and the Latin/RTL behavior are preserved. The Arabic-script regex covers the joined-script blocks the app ships, and the detection scope (direct string children and arrays, nested elements excluded) matches the component's documented contract. No production memory-leak risk: the change adds a module-level regex, two pure functions, and a per-render style array with no subscriptions, timers, or retained references. Mocked react-native in both new suites is consistent with the existing mounted-test harness, and the Tailwind/react-native-css compile helpers are available dependencies.

Previous review (commit 734a317)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (4 files)
  • apps/mobile/src/lib/rtl-text.ts
  • apps/mobile/src/lib/rtl-text.test.ts
  • apps/mobile/src/components/ui/text.tsx
  • apps/mobile/src/components/ui/text.mounted.test.tsx

The joined-script reset is prepended to the style array while the caller's props.style stays last, so explicit letterSpacing still wins; the RTL writingDirection entry and the Latin/RTL behavior are unchanged. The regex covers every Arabic-script locale the app ships (ar, fa, ur, ckb, ps), and the detection scope (direct string children and arrays) matches the component's documented contract. No production memory-leak risk: the change adds only a regex constant, two pure functions, and a per-render style array with no subscriptions, timers, or retained references.


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 ready for review September 20, 2026 23:47
@iscekic
iscekic marked this pull request as draft September 21, 2026 13:11
@iscekic
iscekic force-pushed the kwf/explorer-preferences-ar-the-arabic-headings-such-as-and-t-5faea-6357 branch from 45a951b to 6170b07 Compare September 21, 2026 14:29
@iscekic
iscekic marked this pull request as ready for review September 21, 2026 14:50
@iscekic
iscekic marked this pull request as draft September 21, 2026 15:17
@iscekic
iscekic force-pushed the kwf/explorer-preferences-ar-the-arabic-headings-such-as-and-t-5faea-6357 branch from ae4e14d to 199cc17 Compare September 21, 2026 19:36
@iscekic
iscekic force-pushed the kwf/explorer-preferences-ar-the-arabic-headings-such-as-and-t-5faea-6357 branch from 2898e92 to 7576aa4 Compare September 21, 2026 21:02
@iscekic
iscekic marked this pull request as ready for review September 21, 2026 21:23
Comment thread apps/mobile/src/components/agents/session-list-header-actions.tsx
Comment thread apps/mobile/src/components/profile-screen.signout.mounted.test.tsx
Comment thread apps/mobile/src/components/agents/new-session-configure-form.test.ts Outdated
@iscekic
iscekic marked this pull request as draft September 21, 2026 21:44
@iscekic
iscekic force-pushed the kwf/explorer-preferences-ar-the-arabic-headings-such-as-and-t-5faea-6357 branch from 7e9efc8 to ed9cbd2 Compare September 22, 2026 00:57
@iscekic
iscekic force-pushed the kwf/explorer-preferences-ar-the-arabic-headings-such-as-and-t-5faea-6357 branch from ed9cbd2 to 38f23f9 Compare September 22, 2026 03:06
@iscekic
iscekic marked this pull request as ready for review September 22, 2026 03:18
Comment thread apps/mobile/src/components/ui/text.mounted.test.tsx Outdated
Comment thread apps/mobile/src/components/agents/session-list-header-actions.mounted.test.tsx Outdated
@iscekic
iscekic marked this pull request as draft September 22, 2026 03:40
iscekic and others added 6 commits September 23, 2026 05:45
The joined-script test mounts a Latin tree and then an Arabic one through
the module-level renderer, so the first tree stayed mounted: `afterEach`
only unmounts the last one. The shared helper now unmounts the tracked
tree before it replaces it, and the test reads the Latin styles before
the Arabic mount takes its place.
…ces-ar-the-arabic-headings-such-as-and-t-5faea-6357
The main merge brought in the mono-variant tests, whose `mount(element)`
helper this branch replaced with `renderRoot(element)` plus a
`mount(children, style, className)` wrapper, so those calls no longer
matched the signature. The mono tests now call `renderRoot`. `renderRoot`
also unmounts inside the same `act` as the next `create`: assigning
`renderer = undefined` between them narrowed it to `never` for the
`if (!renderer)` guard and the following `renderer.root` read.
@iscekic iscekic added the human-ready The PR is ready for human review. label Sep 25, 2026
@iscekic
iscekic marked this pull request as ready for review September 25, 2026 13:49
…ces-ar-the-arabic-headings-such-as-and-t-5faea-6357
@iscekic
iscekic marked this pull request as draft September 25, 2026 18:57
@iscekic
iscekic marked this pull request as ready for review September 25, 2026 18:58
…ces-ar-the-arabic-headings-such-as-and-t-5faea-6357
…ces-ar-the-arabic-headings-such-as-and-t-5faea-6357

# Conflicts:
#	apps/mobile/src/components/profile-screen.tsx
@iscekic iscekic added merge-by-human the merge bot routed this PR to a human and removed human-ready The PR is ready for human review. labels Sep 26, 2026
…ces-ar-the-arabic-headings-such-as-and-t-5faea-6357

@eshurakov eshurakov left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Warning — the letter-spacing fix this branch is named for is not present at the PR head.

apps/mobile/src/components/ui/text.tsx at head (89aa4e6) is byte-identical to main. The top commit 38f23f96 ("stop Latin tracking from splitting Arabic text") changed Text to reset via textLetterSpacing(props.children), i.e. by script regardless of interface direction, but that change is absent now — a later merge from main appears to have overwritten it.

Consequences at head:

  • containsJoinedScript / textLetterSpacing (apps/mobile/src/lib/rtl-text.ts:152,163) have no production caller (code search finds only their own definition and test).
  • The reset in Text is still gated on I18nManager.isRTL (apps/mobile/src/components/ui/text.tsx:84-101), so a joined-script run in an LTR interface keeps the tracking class — the exact case 38f23f96 set out to fix.
  • The added tests only pin the interface-keyed behavior, so this regression is not caught.

If the interface gate is the intended behavior, the dead helpers and the commit message should be reconciled; if the script-based reset was intended, it needs to be reapplied.

…ces-ar-the-arabic-headings-such-as-and-t-5faea-6357
…rface

The reset followed `I18nManager.isRTL`, so an Arabic label on an English
screen kept the Latin tracking and split its joins. Key both script rules on
the copy instead:

- The letter-spacing reset follows `containsJoinedScript` (the joined Arabic
  blocks) in either direction. An RTL interface keeps resetting its
  RTL-script copy, because the RTL catalogs carry no tracked design the
  Hebrew block could take.
- `withoutMonoFamily` follows `hasRtlScript` (Hebrew and Arabic) in either
  direction: JetBrains Mono ships no glyph of either script.

`NATURAL_LETTER_SPACING` replaces the direction-named `RTL_NO_LETTER_SPACING`.
`JOINED_SCRIPT` now covers Arabic Extended-B, the block `hasRtlScript` already
read for the font rule. Delete `textLetterSpacing`, which no production code
called since the reset became script-keyed.
@iscekic

iscekic commented Sep 28, 2026

Copy link
Copy Markdown
Collaborator Author

Your warning was valid: the merge took main's text.tsx and left the branch's fix out.

Resolution in 60f3398, which does not re-apply the old helper:

  • The letter-spacing reset now follows containsJoinedScript (the joined Arabic blocks) in either interface direction.
  • An RTL interface still resets its RTL-script copy, so a Hebrew label inside an RTL interface keeps the reset that main ships.
  • withoutMonoFamily follows hasRtlScript (Hebrew and Arabic) in either direction, because JetBrains Mono ships no glyph of either script.
  • NATURAL_LETTER_SPACING replaces RTL_NO_LETTER_SPACING. The old helper's ?? (isRTL ? ...) fallback is not restored: Latin copy in an RTL interface keeps its tracking.
  • containsJoinedScript now has a production caller, and textLetterSpacing is deleted.
  • JOINED_SCRIPT now covers Arabic Extended-B, the block hasRtlScript already matched for the font rule.
  • text.rtl-labels.mounted.test.tsx:94 no longer pins the LTR case the fix changes; it pins the reset and the mono-family drop.

Two RTL assertions outside this change — `chat-composer.test.ts` and
`new-session-prompt-initial-prompt.test.ts` — pin the array
`[{ writingDirection: 'rtl' }, undefined, undefined]`. A filtered array
dropped the trailing entry and failed both. Restore the array `main` ships:
the RTL run keeps its three entries, and a joined-script run in an LTR
interface carries a leading `undefined`.
…ces-ar-the-arabic-headings-such-as-and-t-5faea-6357
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-by-human the merge bot routed this PR to a human

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants