Skip to content

fix(mobile): keep long session titles on one header line - #6336

Open
iscekic wants to merge 1 commit into
mainfrom
kwf/explorer-new-task-started-the-session-title-in-the-header-a5387-e2b5
Open

iscekic wants to merge 1 commit into
mainfrom
kwf/explorer-new-task-started-the-session-title-in-the-header-a5387-e2b5

Conversation

@iscekic

@iscekic iscekic commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator

Changelog for users

  • The session header shows a long session title on a single line.
  • A title that no longer fits ends with a trailing ellipsis instead of breaking a word across two lines.
  • Renaming a session to another long hyphenated name keeps the one-line title.

Changelog for maintainers

  • The session detail screen passes titleNumberOfLines={1} to ScreenHeader; the component default stays two lines.
  • reserveTitleSpace still reserves min-h-14, so a one-line title stays vertically centered and the body does not move.
  • Two existing header tests now expect numberOfLines: 1; a new test mounts a long hyphenated title and asserts one line with ellipsizeMode: 'tail'.
  • A test-only sessionTitleOverride in the session detail test supplies that long title and is reset in beforeEach.
  • Review focus: confirm long titles should truncate rather than wrap, and that the reserved header height is unchanged.

E2E proof

[e1] rename to another long hyphenated name keeps one line — android/emulator-5554: live rename via the header title (e1-rename.log shows the dialog, 'android.view.ViewGroup Rename session tappable [55,270][1025,711]') to 'Cross-repository dependency-resolution baseline'; e1-header.log line 1 'SCENE e1 OK' and the header node 'android.view.View Cross-repository dependency-resolution baseline tappable [111,180][627,245]' is 65px tall in a 516px column (one line), versus the 2-line transcript node 'android.widget.TextView Moving-average rage empty baseline test tappable [250,1202][1011,1328]' at 126px; the tail-ellipsis glyph itself is the visual…

[e1] header title one line for 'Moving-average rage …' with event-service down — e2e-mobile-app/e1.png

[e2] rename to another long hyphenated name keeps one line — android emulator-5554; renamed from the header title dialog to 'Cross-repository dependency-resolution baseline'; SCENE e2 OK and digest line 'android.view.View Cross-repository dependency-resolution baseline tappable [111,180][627,245]' keep the 47-char hyphenated title on one 65px line; capture e2.png and e2-rename-dialog.png for the visual reviewer; title restored afterwards (db.sh shows 'Moving-average rage empty baseline|busy'); no UX-DEFECT.

[e2] rename to another long hyphenated name keeps one line — e2e-mobile-app/e2-rename-dialog.png (capture not retained)

[e2] rename to another long hyphenated name keeps one line

[e2] rename to another long hyphenated name keeps one line — e2e-mobile-app/e2.png (capture not retained)

[e1] rename to another long hyphenated name keeps one line

[e1] rename to another long hyphenated name keeps one line — e2e-mobile-app/e1.png

[e2] rename to another long hyphenated name keeps one line

[e2] rename to another long hyphenated name keeps one line — prior/e2-rename-dialog.png

[e2] rename to another long hyphenated name keeps one line

[e2] rename to another long hyphenated name keeps one line — prior/e2.png

E2E proof — log excerpts

[e1] rename to another long hyphenated name keeps one line -> pass :: android/emulator-5554: live rename via the header title (e1-rename.log shows the dialog, 'android.view.ViewGroup Rename session tappable [55,270][1025,711]') to 'Cross-repository dependency-resolution baseline'; e1-header.log line 1 'SCENE e1 OK' and the header node 'android.view.View Cross-repository dependency-resolution baseline tappable [111,180][627,245]' is 65px tall in a 516px column (one line), versus the 2-line transcript node 'android.widget.TextView Moving-average rage empty baseline test tappable [250,1202][1011,1328]' at 126px; the tail-ellipsis glyph itself is the visual reviewer's call on e1.png; no UX-DEFECT on the session-detail header or the rename dialog.
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-new-task-started-the-session-title-in-the-header-a5387-e2b5/e2e-mobile-app/e1-header.log
android.widget.TextView Moving-average rage empty baseline test tappable [250,1202][1011,1328]
android.view.ViewGroup Assistant message tappable [0,1366][1080,1676]
android.widget.Button Thought tappable [40,1378][1042,1452]
android.widget.TextView THOUGHT tappable [68,1396][206,1433]
android.widget.Button moving.?average tool, completed tappable [40,1475][1042,1558]
android.widget.TextView moving.?average tappable [128,1493][379,1539]
android.widget.TextView 2 matches tappable [392,1500][524,1537]
android.widget.Button rage (*.{ts,tsx,js,json,md}) tool, completed tappable [40,1582][1042,1665]
android.widget.TextView rage (*.{ts,tsx,js,json,md}) tappable [128,1600][508,1646]
android.widget.TextView 68 matches tappable [521,1607][669,1644]
android.view.ViewGroup Assistant message tappable [0,1676][1080,1880]
android.widget.Button Thought tappable [40,1688][1042,1762]
android.widget.TextView THOUGHT tappable [68,1706][206,1743]
android.widget.Button session-detail-content.test.ts tool, completed tappable [40,1785][1042,1868]
android.widget.TextView session-detail-content.test.ts tappable [128,1803][562,1849]
android.widget.TextView L820 and 120 lines tappable [575,1810][813,1847]
android.view.ViewGroup Assistant message tappable [0,1880][1080,2090]
android.widget.Button Thought tappable [40,1892][1042,1966]
android.widget.TextView THOUGHT tappable [68,1910][206,1947]
android.widget.Button Inspect git state and recent commits tool, running tappable [40,1989][1042,2078]
android.widget.TextView Inspect git state and recent commits tappable [138,2011][679,2057]
android.widget.TextView This is a read-only session tappable [36,2141][1044,2187]
android.widget.Button Continue tappable [37,2215][1043,2309]
android.widget.TextView Continue tappable [473,2239][606,2285]
/home/igor_kilocode_ai/.local/share/kwf/sections/explorer-new-task-started-the-session-title-in-the-header-a5387-e2b5/e2e-mobile-app/e1-rename.log
SCENE e1-rename OK
android.widget.FrameLayout android:id/content tappable [0,0][1080,2400]
android.view.ViewGroup Rename session tappable [55,270][1025,711]
android.widget.TextView Rename session tappable [100,315][978,371]
android.widget.EditText Session name tappable [100,408][978,513]
android.widget.Button Cancel tappable [625,550][806,665]
android.widget.TextView Cancel tappable [664,584][766,630]
android.widget.Button Save [833,550][979,665]
android.widget.TextView Save tappable [869,584][941,630]
appium.sh: 5 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/explorer-new-task-started-the-session-title-in-the-header-a5387-e2b5/e2e-mobile-app` instead.
Owner request

Explorer finding: new-task-started: The session title in the header wraps mid-word and truncates to "Moving-ave / rage empt…".

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-started
Found on revision: fd04ca1

Repro:

  1. set this state first: account e2e-mobile-cloud-android@example.com, $10 credits, 3 Code Reviewer pull requests, one top-level busy session (ses_f488ff9c9ffefhXjlZMDy7Ix8y), display 720x1600, day mode, font 1.0, portrait, event-service down.
  2. open the app on emulator-5554
  3. reach the screen the capture names (new-task-started)
  4. the capture shows the defect named below

Observed: The session title in the header wraps mid-word and truncates to "Moving-ave / rage empt…".
Expected: the screen renders without this defect

Evidence (from the device run):

Production record (automatic, 2026-09-19):

Production record for ses_f488ff9c9ffefhXjlZMDy7Ix8y

Axiom, last 72 h

No line carries this term in: vercel, cloudflare-logpush, supabase-production.

The session row, read replica

No row in cli_sessions_v2 carries ses_f488ff9c9ffefhXjlZMDy7Ix8y.

Log archives, R2 kilocode-sessions

NOT READ: R2 keys are indexed by the agent id, not the session id; take the agent_* from the worker logs above and query that.

Sentry, last 72h

No Sentry issue carries this term.

[e1] rename to another long hyphenated name keeps one line — android/emulator-5554: live rename via the header title (e1-rename.log shows the dialog, 'android.view.ViewGroup Rename session tappable [55,270][1025,711]') to 'Cross-repository dependency-resolution baseline'; e1-header.log line 1 'SCENE e1 OK' and the header node 'android.view.View Cross-repository dependency-resolution baseline tappable [111,180][627,245]' is 65px tall in a 516px column (one line), versus the 2-line transcript node 'android.widget.TextView Moving-average rage empty baseline test tappable [250,1202][1011,1328]' at 126px; the tail-ellipsis glyph itself is the visual…

[e1] header title one line for 'Moving-average rage …' with event-service down — prior/e1.png

Follow-ups (not changed here)

  • not proved live: From the same session, tap the title, rename it to another long hyphenated name, and confirm the header still keeps one line with a trailing ellipsis. (no capture cited it)
  • not proved live: Open the app on emulator-5554 as e2e-mobile-cloud-android@example.com with the finding's state (one busy session whose title starts 'Moving-average rage …', event-service down) and open that session: the header title stays on one line and ellipsizes at its end — no word is split across two lines (the 'Moving-ave / rage empt…' render is gone). (no capture cited it)

Open findings (not fixed here)

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

@kilo-code-bot

kilo-code-bot Bot commented Sep 19, 2026

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Executive Summary

The incremental diff since the previously reviewed commit 246d6085 is empty (identical trees at HEAD cb326cb6), so there are no new changes to flag. The previously reviewed change (titleNumberOfLines={1} on the session detail ScreenHeader plus its test updates) remains correct on current HEAD.

Files Reviewed (2 files)
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/components/agents/session-detail-content.test.ts

Notes

  • ScreenHeader supports titleNumberOfLines (default 2) at apps/mobile/src/components/screen-header.tsx:160; passing 1 is a valid, non-breaking use of the existing contract.
  • reserveTitleSpace still renders min-h-14 justify-center, so header height and body position stay stable while the title truncates with ellipsizeMode="tail".
  • The new test resets the test-only sessionTitleOverride in beforeEach, so no cross-test leakage.
Previous Review Summary (commit 246d608)

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

Previous review (commit 246d608)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The change wires the existing titleNumberOfLines prop to SessionHeader for the session detail title (titleNumberOfLines={1}), which is the correct minimal fix for the mid-word wrap, and the test updates are consistent with the new behavior.

Files Reviewed (2 files)
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/components/agents/session-detail-content.test.ts

Notes

  • ScreenHeader already supports titleNumberOfLines (default 2) and is covered by screen-header.mounted.test.tsx:365, so no new prop contract was introduced.
  • reserveTitleSpace continues to reserve two lines (min-h-14 justify-center), keeping header height and body position stable while the title renders on one line with ellipsizeMode="tail".
  • Only the session detail header receives the new value; the loading/error headers in agent-chat/[session-id].tsx use short static titles and remain unaffected.

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

Review guidance: REVIEW.md from base branch main

@iscekic

iscekic commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator Author

This description names a scenario the proof did not capture:

  • not proved live: From the same session, tap the title, rename it to another long hyphenated name, and confirm the header still keeps one line with a trailing ellipsis. (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 19, 2026
@iscekic iscekic self-assigned this Sep 19, 2026
Explorer finding: new-task-started: The session title in the header wraps mid-word and truncates to "Moving-ave / rage empt…".

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-started
Found on revision: fd04ca1

Repro:
1. set this state first: account e2e-mobile-cloud-android@example.com, $10 credits, 3 Code Reviewer pull requests, one top-level busy session (ses_f488ff9c9ffefhXjlZMDy7Ix8y), display 720x1600, day mode, font 1.0, portrait, **event-service down**.
2. open the app on emulator-5554
3. reach the screen the capture names (new-task-started)
4. the capture shows the defect named below

Observed: The session title in the header wraps mid-word and truncates to "Moving-ave / rage empt…".
Expected: the screen renders without this defect

Evidence (from the device run):
- ~/.local/share/kwf/findings/explorer-new-task-started-the-session-title-in-the-header-a5387799/new-task-started.png

Production record (automatic, 2026-09-19):
## Production record for `ses_f488ff9c9ffefhXjlZMDy7Ix8y`

### Axiom, last 72 h
No line carries this term in: `vercel`, `cloudflare-logpush`, `supabase-production`.

### The session row, read replica
No row in `cli_sessions_v2` carries `ses_f488ff9c9ffefhXjlZMDy7Ix8y`.

### Log archives, R2 `kilocode-sessions`
NOT READ: R2 keys are indexed by the agent id, not the session id; take the agent_* from the worker logs above and query that.

### Sentry, la
@iscekic
iscekic force-pushed the kwf/explorer-new-task-started-the-session-title-in-the-header-a5387-e2b5 branch from 246d608 to cb326cb Compare September 19, 2026 05:01
@iscekic iscekic changed the title fix(mobile): keep session header title on one line fix(mobile): keep long session titles on one header line Sep 19, 2026
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.

1 participant