Skip to content

fix(mobile): render run-location help without inline-code backticks - #6433

Merged
iscekic merged 3 commits into
mainfrom
kwf/explorer-11-new-task-kbup-the-same-run-location-help-text-ea813-27b9
Sep 21, 2026
Merged

iscekic merged 3 commits into
mainfrom
kwf/explorer-11-new-task-kbup-the-same-run-location-help-text-ea813-27b9

Conversation

@iscekic

@iscekic iscekic commented Sep 20, 2026

Copy link
Copy Markdown
Collaborator

Changelog for users

  • The new-session help line shows kilo remote and /remote as plain text in every app language.
  • The first-sign-in tour's computer step and the run-on picker show the same commands without backticks.

Changelog for maintainers

  • English catalog strings for the four run-location keys no longer contain backticks.
  • A new stripInlineCodeMarkers helper removes backticks at render time and is applied to the five run-location call sites.
  • Translated catalogs keep their backticks; the helper makes them readable without a translation pass.
  • New unit tests cover the helper and sweep every supported language for the four keys.
  • The new-session form test asserts the rendered help contains no backtick for cloud and remote modes.
  • Review hint: tour.remoteRunHint resolves through $t(agentChat.newSession.remoteHint), so the tour is covered at its render site.
  • Risk: the helper strips every backtick, so a future intentional code span in these strings would lose its markers.

E2E proof

[e2] Open the first-sign-in tour's computer step with no CLI connected: both the empty-state body and the mono start-instructions line show 'kilo remote' / '/remote' with no backticks. — Android emulator-5604; run in Swedish so the diff is exercised — the screen shows the empty-state body 'För att ansluta den, kör kilo remote på din dator.' and the mono line 'Kör kilo remote på din dator, eller /remote i en aktiv CLI-session, för att styra en lokal kilo-process.', with no backtick in any text (e2-tour-computer-step.txt, e2-tour-computer-step.png, e2-tour-computer-step-hierarchy.txt); the default-locale English run confirms the same copy marker-free (e2-tour-computer-step-en.txt, e2-tour-computer-step-en.png), as does the fork step (e2-tour-fork-step.txt). UX observation…

Open the first-sign-in tour's computer step with no CLI connected: both the empty-state body and the mono start-instructions line show 'kilo remote' / '/remote' with no backticks. — e2-tour-computer-step.png

[e1] new-session help line shows kilo remote and /remote without backticks (Urdu) — Urdu new-session digest (e1-scene.log, SCENE e1 OK) renders 'اپنے کمپیوٹر پر kilo remote یا چلتے ہوئے CLI سیشن میں /remote چلائیں۔' under the run-target selector with 0 backticks; screenshot e1.png for the visual reviewer. No UX defect in the digest.

[e1] new-session help line shows kilo remote and /remote without backticks (Urdu) — e2e-mobile-app/e1.png

[e3] Run-on picker empty card shows kilo remote without backticks — Run-on picker digest (e3-scene.xml/e3-run-on-empty.log, SCENE e3 OK) shows header 'چلانے کی جگہ', empty title 'کوئی CLI انسٹینس منسلک نہیں', and description 'اپنے کمپیوٹر پر کسی پروجیکٹ میں kilo remote چلائیں۔' with no backticks; screenshot e3.png for the visual reviewer. No UX defect in the digest.

[e3] Run-on picker empty card shows kilo remote without backticks — e2e-mobile-app/e3.png

[e2] Open the first-sign-in tour's computer step with no CLI connected: both the empty-state body and the mono start-instructions line show 'kilo remote' / '/remote' with no backticks.

[e2] Open the first-sign-in tour's computer step with no CLI connected: both the empty-state body and the mono start-instructions line show 'kilo remote' / '/remote' with no backticks. — e2e-mobile-app/e2-tour-computer-step.png

[e2] Open the first-sign-in tour's computer step with no CLI connected: both the empty-state body and the mono start-instructions line show 'kilo remote' / '/remote' with no backticks.

[e2] Open the first-sign-in tour's computer step with no CLI connected: both the empty-state body and the mono start-instructions line show 'kilo remote' / '/remote' with no backticks. — e2e-mobile-app/e2-tour-computer-step-en.png

E2E proof — log excerpts

[e1] new-session help line shows kilo remote and /remote without backticks (Urdu -> pass :: Urdu new-session digest (e1-scene.log, SCENE e1 OK) renders 'اپنے کمپیوٹر پر kilo remote یا چلتے ہوئے CLI سیشن میں /remote چلائیں۔' under the run-target selector with 0 backticks; screenshot e1.png for the visual reviewer. No UX defect in the digest.
[e3] Run-on picker empty card shows kilo remote without backticks -> pass :: Run-on picker digest (e3-scene.xml/e3-run-on-empty.log, SCENE e3 OK) shows header 'چلانے کی جگہ', empty title 'کوئی CLI انسٹینس منسلک نہیں', and description 'اپنے کمپیوٹر پر کسی پروجیکٹ میں kilo remote چلائیں۔' with no backticks; screenshot e3.png for the visual reviewer. No UX defect in the digest.
[e2] Open the first-sign-in tour's computer step with no CLI connected: both the -> pass :: Android emulator-5604; run in Swedish so the diff is exercised — the screen shows the empty-state body 'För att ansluta den, kör kilo remote på din dator.' and the mono line 'Kör kilo remote på din dator, eller /remote i en aktiv CLI-session, för att styra en lokal kilo-process.', with no backtick in any text (e2-tour-computer-step.txt, e2-tour-computer-step.png, e2-tour-computer-step-hierarchy.txt); the default-locale English run confirms the same copy marker-free (e2-tour-computer-step-en.txt, e2-tour-computer-step-en.png), as does the fork step (e2-tour-fork-step.txt). UX observation (non-blocking, [pre-existing]): the 'Check again' button carries content-desc="busy" rather than its visib
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-11-new-task-kbup-the-same-run-location-help-text-ea813-27b9/e2e-mobile-app/e1-scene.log
android.widget.TextView چلانے کی جگہ tappable [37,857][1045,903]
android.widget.Button Cloud Agent پر چلائیں tappable [171,921][1043,1037]
android.widget.TextView Cloud Agent tappable [237,951][1014,1007]
android.widget.Button تازہ کریں tappable [37,921][152,1037]
android.widget.TextView مقامی kilo پراسیس کو کنٹرول کرنے کے لیے اپنے کمپیوٹر پر kilo remote یا چلتے ہوئے CLI سیشن میں /remote چلائیں۔ tappable [36,1056][1044,1130]
android.widget.TextView ریپوزٹری tappable [37,1176][1045,1222]
android.widget.Button ریپوزٹری: ریپوزٹری منتخب کریں tappable [37,1240][1043,1356]
android.widget.TextView ریپوزٹری منتخب کریں tappable [103,1270][1014,1326]
android.widget.Button GitLab کو منسلک کریں tappable [76,1423][1004,1469]
android.widget.TextView GitLab کو منسلک کریں tappable [136,1423][1004,1469]
android.widget.TextView اپنے براؤزر میں GitLab کو منسلک کریں، پھر ریپوزٹری منتخب کرنے کے لیے یہاں واپس آئیں۔ tappable [76,1497][1004,1589]
android.widget.Button GitLab کھولیں tappable [210,1617][1004,1732]
android.widget.TextView GitLab کھولیں tappable [480,1651][673,1697]
android.widget.Button ریپوزٹریوں کی فہرست تازہ کریں tappable [76,1617][192,1732]
android.widget.TextView تبدیلیاں tappable [37,1818][1045,1864]
android.view.View تبدیلیاں tappable [37,1882][1043,2001]
android.widget.RadioButton تبدیلیاں رہنے دیں tappable [540,1891][1034,1992]
android.widget.TextView تبدیلیاں رہنے دیں tappable [685,1918][888,1964]
android.widget.RadioButton کمٹ اور پش کریں tappable [46,1891][540,1992]
android.widget.TextView کمٹ اور پش کریں tappable [184,1918][401,1964]
android.widget.TextView ماحول tappable [37,2047][1045,2093]
android.widget.TextView پہلے سے طے شدہ ماحول tappable [37,2111][1045,2157]
android.widget.Button سیشن شروع کریں [37,2213][1043,2274]
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-11-new-task-kbup-the-same-run-location-help-text-ea813-27b9/e2e-mobile-app/e3-run-on-empty.log
text="مقامی kilo پراسیس کو کنٹرول کرنے کے لیے اپنے کمپیوٹر پر kilo remote یا چلتے ہوئے CLI سیشن میں /remote چلائیں۔"
text="اپنے کمپیوٹر پر کسی پروجیکٹ میں kilo remote چلائیں۔ اگر Kilo CLI پہلے سے چل رہا ہے تو اسے اپ ڈیٹ کریں۔"
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-11-new-task-kbup-the-same-run-location-help-text-ea813-27b9/e2e-mobile-app/e2-tour-computer-step.txt
- Button "Hoppa över guiden"
- TextView "Hoppa över guiden"
Checks against the scenario:
- empty-state body (tour.remoteEmptyBody): "För att ansluta den, kör kilo remote på din dator."
    contains 'kilo remote', contains no backtick.
- mono start-instructions line (tour.remoteRunHint): "Kör kilo remote på din dator, eller /remote i en aktiv CLI-session, för att styra en lokal kilo-process."
    contains 'kilo remote' and '/remote', contains no backtick.
- neither line contains the character U+0060.
Catalog before strip (apps/mobile/src/i18n/locales/sv.json):
  remoteEmptyBody: "För att ansluta den, kör `kilo remote` på din dator."
  remoteHint (referenced by tour.remoteRunHint): "Kör `kilo remote` på din dator, eller `/remote` i en aktiv CLI-session, för att styra en lokal kilo-process."
Screenshot: e2-tour-computer-step.png (same moment)
Hierarchy dump (same moment): e2-tour-computer-step-hierarchy.txt (77 elements),
  still beside it: e2-tour-computer-step-hierarchy.png
UX audit observation (android emulator-5604, tour computer step):
- The 'Check again' (Kontrollera igen) button carries content-desc="busy" instead of its
  visible label; the two other buttons on the screen carry their visible labels
  ("Gå tillbaka", "Hoppa över guiden"). From e2-tour-computer-step-hierarchy.txt:
    <android.widget.Button ... content-desc="busy" ... > <android.widget.TextView text="Kontrollera igen" .../>
  The tour polls activeSessions.listInstances continuously (dev/logs/nextjs.log shows a
  stream of POST /api/trpc/activeSessions.listInstances 200), so the button is in its
  checking/loading state. This is an accessibility-label nit on a control the diff does not
  change ([pre-existing]); it is not missing feedback, lost work or broken recovery, so it
  is recorded, not failed.
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-11-new-task-kbup-the-same-run-location-help-text-ea813-27b9/e2e-mobile-app/e2-tour-computer-step-hierarchy.txt
                                      </android.widget.Button>
                                    </android.view.ViewGroup>
                                  </android.widget.ScrollView>
<redacted>
<redacted>
                                  </android.widget.Button>
                                </android.view.ViewGroup>
                              </android.view.ViewGroup>
                            </android.widget.ScrollView>
                          </android.view.ViewGroup>
                        </android.view.ViewGroup>
                      </android.view.ViewGroup>
<redacted>
                    </android.view.ViewGroup>
                  </android.view.ViewGroup>
                </android.view.ViewGroup>
              </android.widget.FrameLayout>
            </android.widget.FrameLayout>
          </android.widget.FrameLayout>
        </android.widget.LinearLayout>
      </android.widget.FrameLayout>
    </android.widget.LinearLayout>
  </android.widget.FrameLayout>
</hierarchy>
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-11-new-task-kbup-the-same-run-location-help-text-ea813-27b9/e2e-mobile-app/e2-tour-computer-step-en.txt
The tour is device-scoped (it re-appeared for the default account after the fresh account had
already seen it), so this is the same screen in the shipped default locale.
SCENE digest (accessibility tree, Android, 2026-09-20):
- Button "Go back"
- TextView "QUICK TOUR"
- android.view.View "Start your first remote session"
- TextView "Connect your computer, then choose it below to start a new session."
- TextView "No computer connected yet"
- TextView "Run kilo remote on your computer to connect it."
- TextView "Run kilo remote on your computer, or /remote in a running CLI session, to control a local kilo process."
- Button "busy"
- TextView "Check again"
- Button "Skip tour"
- TextView "Skip tour"
Checks:
- empty-state body (tour.remoteEmptyBody): "Run kilo remote on your computer to connect it."
    contains 'kilo remote', no backtick.
- mono start-instructions line (tour.remoteRunHint): "Run kilo remote on your computer, or /remote in a running CLI session, to control a local kilo process."
    contains 'kilo remote' and '/remote', no backtick.
- the character U+0060 appears in no text on the screen.
Screenshot: e2-tour-computer-step-en.png (same moment)
This English run confirms the shipped default; the Swedish run (e2-tour-computer-step.txt /
e2-tour-computer-step.png) is the one that exercises the diff, because the English catalog
already ships without backticks while the sv catalog still carries them.
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-11-new-task-kbup-the-same-run-location-help-text-ea813-27b9/e2e-mobile-app/e2-tour-fork-step.txt
- RadioButton "Cloud Agent, Kör Kilo i en isolerad molnmiljö utan att behöva installera något."
- TextView "Cloud Agent"
- TextView "Kör Kilo i en isolerad molnmiljö utan att behöva installera något."
- RadioButton "Din dator, Kör Kilo på din egen maskin via kilo remote-CLI:n."
- TextView "Din dator"
- TextView "Kör Kilo på din egen maskin via kilo remote-CLI:n."
- Button "Hoppa över guiden"
- TextView "Hoppa över guiden"
  -> remoteOptionBody renders "Kör Kilo på din egen maskin via kilo remote-CLI:n." (no backticks,
     contains 'kilo remote').
English run (default locale; catalog already ships without markers):
- TextView "QUICK TOUR"
- android.view.View "Where would you like to run Kilo?"
- TextView "Pick where Kilo runs for your first session."
- RadioButton "Cloud Agent, Run Kilo in a sandboxed cloud environment with nothing to install."
- TextView "Cloud Agent"
- TextView "Run Kilo in a sandboxed cloud environment with nothing to install."
- RadioButton "Your computer, Run Kilo on your own machine through the kilo remote CLI."
- TextView "Your computer"
- TextView "Run Kilo on your own machine through the kilo remote CLI."
- Button "Skip tour"
- TextView "Skip tour"
Screenshot: e2-tour-fork-step.png (English, same moment)
UX audit: no layout shift, no stacked loaders, no ambiguous/empty state on this screen.
Owner request

Explorer finding: 11-new-task-kbup: The same run-location help text renders the literal backticks around kilo remote and /remote in the visible copy.

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

Flow: 11-new-task-kbup
Found on revision: fb5e67d

Repro:

  1. set this state first: uimode day; density 560; battery 88 charging; reviews 4; credits 15; relaunch; back; seed app:github-account e2e-firstrun-1789896598@example.com; rotate landscape; rotate portrait; home; resume; fault nextjs down; fault nextjs up; the device in light mode
  2. open the app on emulator-5554
  3. reach 11-new-task-kbup, 12-new-task-kbdown
  4. the capture shows the defect named below

Observed: The same run-location help text renders the literal backticks around kilo remote and /remote in the visible copy.
Expected: the screen renders without this defect

Evidence (from the device run):

Follow-ups (not changed here)

  • not proved live: Open the Run-on picker with no CLI instance connected: the empty card description shows 'kilo remote' with no backticks. (no capture cited it)
  • not proved live: Open the new-session screen and read the help line under the run-target selector: it shows 'kilo remote' and '/remote' with no backtick characters (check in a non-English app language such as Urdu, where the finding was captured). (no capture cited it)

Open findings (not fixed here)

  • not proved live: 11-new-task-kbup.png is no longer on the host that took it, so no publish can carry it
  • not proved live: 12-new-task-kbdown.png is no longer on the host that took it, so no publish can carry it

Explorer finding: 11-new-task-kbup: The same run-location help text renders the literal backticks around `kilo remote` and `/remote` in the visible copy.

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

Flow: 11-new-task-kbup
Found on revision: fb5e67d

Repro:
1. set this state first: uimode day; density 560; battery 88 charging; reviews 4; credits 15; relaunch; back; seed app:github-account e2e-firstrun-1789896598@example.com; rotate landscape; rotate portrait; home; resume; fault nextjs down; fault nextjs up; the device in light mode
2. open the app on emulator-5554
3. reach 11-new-task-kbup, 12-new-task-kbdown
4. the capture shows the defect named below

Observed: The same run-location help text renders the literal backticks around `kilo remote` and `/remote` in the visible copy.
Expected: the screen renders without this defect

Evidence (from the device run):
- ~/.local/share/kwf/findings/explorer-11-new-task-kbup-the-same-run-location-help-text-ea813e76/11-new-task-kbup.png
- ~/.local/share/kwf/findings/explorer-11-new-task-kbup-the-same-run-location-help-text-ea813e76/12-new-task-kbdown.png
@iscekic

iscekic commented Sep 20, 2026

Copy link
Copy Markdown
Collaborator Author

This description names a scenario the proof did not capture:

  • not proved live: Open the Run-on picker with no CLI instance connected: the empty card description shows 'kilo remote' with no backticks. (no capture cited 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 20, 2026
@iscekic iscekic self-assigned this Sep 20, 2026
@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

Reviewed all eight changed files of this mobile copy fix (a pure backtick-stripping helper applied at all five run-location call sites, the marker-free English catalog, and the new unit tests); no correctness, security, or memory-leak issues found. Verified statically: every call site wraps its t() output with stripInlineCodeMarkers, en.json now ships the four keys without backticks, all 87 catalogs contain the literal kilo remote in every swept key (so the new sweep test's premise holds), and nothing stateful was added that could leak; the test suite itself was not executed in this read-only session.

Files Reviewed (8 files)
  • apps/mobile/src/app/(app)/agent-chat/instance-picker.tsx
  • apps/mobile/src/components/agents/new-session-configure-form.test.ts
  • apps/mobile/src/components/agents/new-session-configure-form.tsx
  • apps/mobile/src/components/tour/tour-remote-step.tsx
  • apps/mobile/src/components/tour/tour-screen.tsx
  • apps/mobile/src/i18n/locales/en.json
  • apps/mobile/src/i18n/plain-copy.test.ts
  • apps/mobile/src/i18n/plain-copy.ts

Reviewed by efficient · Input: 0 · Output: 0 · Cached: 0

Review guidance: REVIEW.md from base branch main

@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.

Approved after a shallow triage pass. No blocking findings.

@iscekic
iscekic merged commit 3ecc6d3 into main Sep 21, 2026
28 checks passed
@iscekic
iscekic deleted the kwf/explorer-11-new-task-kbup-the-same-run-location-help-text-ea813-27b9 branch September 21, 2026 22:37
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