Skip to content

fix(mobile): hide default session titles, state failures once, and shorten model-chip copy - #6594

Merged
iscekic merged 1 commit into
mainfrom
kwf/explorer-10-unlabeled-defects-on-android-the-in-flight-to-b9b5e
Sep 23, 2026
Merged

iscekic merged 1 commit into
mainfrom
kwf/explorer-10-unlabeled-defects-on-android-the-in-flight-to-b9b5e

Conversation

@iscekic

@iscekic iscekic commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

Changelog for users

  • Sessions the backend has not named yet show the app's untitled copy instead of the raw New session - 2026-09-20T08:10:35.172Z stamp.
  • A stored title with surrounding whitespace renders trimmed, and a whitespace-only title renders as untitled, on every surface that names a session.
  • The session list row, the session-detail header, the continue-from line, search results, the glanceable widget line, and needs-input notifications all use that fallback copy.
  • A message the agent could not run states the failure once as "Response failed", with a working Retry and Copy to composer.
  • An agent-execution failure no longer prints "Failed to deliver" in the fixed footer under a row that already says "Response failed".
  • The duplicate "The agent could not run this message." line and the repeating "The response failed." footer line no longer render.
  • The model chip shows a short model name such as "DeepSeek V4 Flash 0731" instead of the raw stored reference "DeepSeek: DeepSeek V4 Flash 0731", and falls back to the generic "Model" label when it cannot resolve a human name.
  • Renaming a session the backend has not named opens an empty name field with the "Session name" placeholder instead of the raw New session - <timestamp> string.

Changelog for maintainers

  • apps/mobile/src/components/agents/session-row.tsx:114 — accepted: the stored row and the remote row seeded the rename field (and the iOS prompt) with session.title, so an unnamed session reopened the raw New session - <ISO> string the row hides. Both now seed sessionDisplayTitle(session.title) ?? '', so an unnamed session opens blank with the "Session name" placeholder, and the unchanged/blank guards keep a no-edit confirm from persisting it. Tests pin the empty seed, the trimmed seed for a named session, and the Android modal's empty initial value.
  • apps/mobile/src/components/agents/session-terminal-error.ts:331 — accepted: an agent-execution delivery failure renders the assistant-failure title while its SDK status indicator is the "Message delivery failed" line, so the footer printed "Failed to deliver" under a row already saying "Response failed". The predicate now also matches a delivery failure whose title key is the assistant-failure title and whose status copy is the delivery-title line, and keys on the failure title rather than the kind; a test pins it.
  • apps/mobile/src/lib/session-title.ts:20 — accepted: displaySessionTitle duplicated sessionDisplayTitle without its trim(), so padded and whitespace-only titles diverged. The duplicate module and its test are deleted; the session list, detail header, continue-from line, and needs-input notification now import sessionDisplayTitle from src/lib/session-display-title.ts, whose untitled check comes from isDefaultSessionTitle in the shared session-ingest-contracts package instead of a local regex copy.
  • selectMessageFailure maps an execution delivery failure to the assistant-failure title with a null detail, keeping Retry and copy-to-composer reachable behind the copy action; the deliveryExecution copy key stays in the delivery-reason map but is intentionally unreachable from the row now.
  • resolveModelSelectorLabel picks the catalog name, else the short display name for a non-provider-aware unmatched reference, else the generic label; the chip renders its result.
  • Tests pin the composer placeholder as catalog copy, the Arabic markdown path naming base direction without alignment, and the opaque non-absolute fixed footer; the tool-row overlap, tab highlight, and icon tints needed no code change.
  • Review hint: the shared default-title pattern is the risk area, since a session legitimately named like the pattern is hidden; also confirm the provider-aware chip falling back to the generic "Model" label is acceptable.
  • The rename runs replace the earlier raw-title prefill proof: the stored row and the remote tray row now open the rename field blank for a session the backend has not named, and a typed name still renames. The iOS prompt path was not proved on iOS, so it stays skipped, pending owner verification.

E2E proof

step-e1-1.png

e1-session-answered.png

step-e1b-1.png

e2.png

e5.png

e5-session-tools-ar.png

e6-session-typed-kb-up.png

e7.png

e9.png

e9-account.png

e2-row-padded.png

e1-list-untitled.png

e1-rename-empty.png

e3-agents-row-untitled.png

e3-rename-empty.png

e2-rename-open.png

Owner request

Explorer finding: 10 unlabeled defects on android: The in-flight tool row truncates its tit; The message composer field renders the l; The same failure is stated three times i (+7 more)

The user-agent explorer found these 10 while using the app like a user. They are one kind of defect on one platform, so they are ONE item: the pull request must fix and prove every one of them.
One must-run scenario per finding: the plan needs 10 musts, one for each finding below.
The explorer never edits product code.

Evidence (from the device runs):

--- Finding 1 of 10: session-answered: The in-flight tool row truncates its title to "Install vitest as dev dependen..." and the "Running commands · 2 min, 14 sec" status collides with the row's bottom border.
Flow: session-answered
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 (session-answered)
  4. the capture shows the defect named below
    Observed: The in-flight tool row truncates its title to "Install vitest as dev dependen..." and the "Running commands · 2 min, 14 sec" status collides with the row's bottom border.
    Expected: the screen renders without this defect

--- Finding 2 of 10: session-detail: The message composer field renders the literal developer string 'undefined' instead of a placeholder or the user's text.
Flow: session-detail
Found on revision: f2181ae
Repro:

  1. set this state first: uimode day; battery 12 discharging; relaunch; back; the device in light mode
  2. open the app on emulator-5602
  3. reach session-detail
  4. the capture shows the defect named below
    Observed: The message composer field renders the literal developer string 'undefined' instead of a placeholder or the user's text.
    Expected: the screen renders without this defect

--- Finding 3 of 10: session-error: The same failure is stated three times in near-identical copy ("Response failed", "The response failed.", "The response failed."), which reads as a glitch rather than a designed error state.
Flow: session-error
Found on revision: fd04ca1
Repro:

  1. set this state first: account e2e-mobile-cloud-android@example.com signed in via emailed code (~$258.98 credits), Code Reviewer seeded with 3 pull requests (the checks state is blocked by a harness preflight: tracked edits present), a second organization to switch to, one needs-input session; system night mode, display size 480x1040, portrait.
  2. open the app on emulator-5554
  3. reach the screen the capture names (session-error)
  4. the capture shows the defect named below
    Observed: The same failure is stated three times in near-identical copy ("Response failed", "The response failed.", "The response failed."), which reads as a glitch rather than a designed error state.
    Expected: the screen renders without this defect

--- Finding 4 of 10: session-question: The default session title is a raw ISO-8601 timestamp with milliseconds, which reads as machine output rather than human copy.
Flow: session-question
Found on revision: fd04ca1
Repro:

  1. open the app on emulator-5554
  2. reach the screen the capture names (session-question)
  3. the capture shows the defect named below
    Observed: The default session title is a raw ISO-8601 timestamp with milliseconds, which reads as machine output rather than human copy.
    Expected: the screen renders without this defect

--- Finding 5 of 10: session-question: The primary "Send answers" button breaks its label mid-word across three lines ("Send / answ / ers"), so the main action is hard to read.
Flow: session-question
Found on revision: fd04ca1
Repro:

  1. set this state first: account e2e-mobile-cloud-android@example.com signed in via emailed code (~$258.98 credits), Code Reviewer seeded with 3 pull requests (the checks state is blocked by a harness preflight: tracked edits present), a second organization to switch to, one needs-input session; system night mode, display size 480x1040, portrait.
  2. open the app on emulator-5554
  3. reach the screen the capture names (session-question)
  4. the capture shows the defect named below
    Observed: The primary "Send answers" button breaks its label mid-word across three lines ("Send / answ / ers"), so the main action is hard to read.
    Expected: the screen renders without this defect

--- Finding 6 of 10: session-tools-ar: The session-summary body and its bullet list are centre-aligned, so every line is ragged on both margins and the bullet glyphs float detached at the right edge of the first line, while the title above them sits flush right in the same block.
Flow: session-tools-ar
Found on revision: f2181ae
Repro:

  1. set this state first: uimode night; battery 11 discharging; relaunch; back; key back; resume; the device in dark mode
  2. open the app on emulator-5554
  3. reach session-tools-ar
  4. the capture shows the defect named below
    Observed: The session-summary body and its bullet list are centre-aligned, so every line is ragged on both margins and the bullet glyphs float detached at the right edge of the first line, while the title above them sits flush right in the same block.
    Expected: the screen renders without this defect

--- Finding 7 of 10: session-typed-kb-up: The model chip reads 'DeepSeek: DeepSeek V4 Flash 0731', repeating the vendor name and exposing a bare build number in user-facing copy.
Flow: session-typed-kb-up
Found on revision: fb5e67d
Repro:

  1. set this state first: credits 12; reviews 3; org; session question; uimode night; density 420; battery 55 discharging; rotate portrait; relaunch; seed app:github-account e2e-empty-1789891482@example.com; the device in dark mode
  2. open the app on emulator-5554
  3. reach session-typed-kb-up
  4. the capture shows the defect named below
    Observed: The model chip reads 'DeepSeek: DeepSeek V4 Flash 0731', repeating the vendor name and exposing a bare build number in user-facing copy.
    Expected: the screen renders without this defect

--- Finding 8 of 10: session-working: The fixed footer line "Valutazione dei prossimi passaggi · 4 min e 42 s" is drawn over the scrolling transcript, so the file-update line and its /workspace path are obscured underneath it.
Flow: session-working
Found on revision: f2181ae
Repro:

  1. set this state first: uimode night; battery 25 discharging; relaunch; the device in dark mode
  2. open the app on emulator-5602
  3. reach session-working
  4. the capture shows the defect named below
    Observed: The fixed footer line "Valutazione dei prossimi passaggi · 4 min e 42 s" is drawn over the scrolling transcript, so the file-update line and its /workspace path are obscured underneath it.
    Expected: the screen renders without this defect

--- Finding 9 of 10: settings-account: The persistent bottom tab bar loses the active-section highlight on a Profile sub-screen, so nothing indicates which section is current, unlike the Profile root.
Flow: settings-account
Found on revision: fd04ca1
Repro:

  1. open the app on emulator-5554
  2. reach the screen the capture names (settings-account)
  3. the capture shows the defect named below
    Observed: The persistent bottom tab bar loses the active-section highlight on a Profile sub-screen, so nothing indicates which section is current, unlike the Profile root.
    Expected: the screen renders without this defect

--- Finding 10 of 10: settings-account: The three row icons carry three different accent tints (yellow-green, blue, purple) instead of one consistent accent.
Flow: settings-account
Found on revision: fd04ca1
Repro:

  1. set this state first: brand-new first-run account e2e-firstrun-1789794214@example.com with $10 credits, a second organization, 3 Code Reviewer pull requests, one top-level session question (ses_f47e65f26ffeo07Rjk0jgg7YM5); device portrait, system day mode, default font.
  2. open the app on emulator-5602
  3. reach the screen the capture names (settings-account)
  4. the capture shows the defect named below
    Observed: The three row icons carry three different accent tints (yellow-green, blue, purple) instead of one consistent accent.
    Expected: the screen renders without this defect

E2E proof — log excerpts

[e1] Untitled active (remote tray) session: long-press -> Rename; the prompt ope -> pass :: jev read the digest: pass (confidence 0.97)
/home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-review-e777/e2e-mobile-app/scripted-e1.log
SCENE e1 OK
android.widget.LinearLayout com.kilocode.kiloapp:id/action_bar_root tappable [0,0][1080,2400]
android.widget.FrameLayout android:id/content tappable [0,0][1080,2400]
android.widget.Button Go back tappable [0,130][101,231]
android.widget.Button Rename session: e3 renamed row tappable [111,84][883,277]
android.view.View e3 renamed row tappable [111,147][883,212]
android.widget.Button Tap to view context details. tappable [910,123][1044,238]
android.widget.ScrollView centered-state tappable [0,286][1080,2164]
android.view.ViewGroup centered-state-content tappable [0,1057][1080,1343]
android.widget.TextView No messages yet tappable [377,1222][702,1287]
android.widget.TextView Send a message below to get started. tappable [262,1296][818,1342]
android.widget.Button Add attachment tappable [28,2214][101,2288]
android.widget.EditText Message tappable [126,2191][800,2311]
android.widget.Button Start voice input tappable [835,2205][926,2297]
android.widget.Button Send message [926,2188][1052,2314]

@iscekic
iscekic marked this pull request as draft September 22, 2026 20:13
Comment thread apps/mobile/src/components/agents/session-row.tsx Outdated
Comment thread apps/mobile/src/components/agents/remote-session-row.tsx Outdated
Comment thread apps/mobile/src/lib/system-search-entries.ts Outdated
Comment thread apps/mobile/src/components/agents/session-terminal-error.ts Outdated
@kilo-code-bot

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

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Executive Summary

Re-reviewed the full diff at HEAD 0b9a62fa (the branch history was rewritten, so the previous incremental base was no longer an ancestor and the 24-file diff was re-analyzed): the rename-seeding guard, the single-statement failure suppression, and the model-chip label resolution are consistent across every surface, and every prior review finding is resolved.

Files Reviewed (24 files)
  • apps/mobile/src/components/agents/markdown-renderer.test.ts
  • apps/mobile/src/components/agents/message-failure-state.test.ts
  • apps/mobile/src/components/agents/message-failure-state.ts
  • apps/mobile/src/components/agents/model-selector-label.test.ts
  • apps/mobile/src/components/agents/model-selector-label.ts
  • apps/mobile/src/components/agents/model-selector.tsx
  • apps/mobile/src/components/agents/new-session-screen-body.tsx
  • apps/mobile/src/components/agents/remote-session-row.mounted.test.tsx
  • apps/mobile/src/components/agents/remote-session-row.tsx
  • apps/mobile/src/components/agents/session-detail-content.test.ts
  • apps/mobile/src/components/agents/session-detail-rename-state.test.ts
  • apps/mobile/src/components/agents/session-detail-rename-state.ts
  • apps/mobile/src/components/agents/session-row-actions.test.ts
  • apps/mobile/src/components/agents/session-row-actions.ts
  • apps/mobile/src/components/agents/session-row.mounted.test.tsx
  • apps/mobile/src/components/agents/session-row.tsx
  • apps/mobile/src/components/agents/session-terminal-error.test.ts
  • apps/mobile/src/components/agents/session-terminal-error.ts
  • apps/mobile/src/lib/glanceable/newest-session.test.ts
  • apps/mobile/src/lib/glanceable/newest-session.ts
  • apps/mobile/src/lib/needs-input-notification.test.ts
  • apps/mobile/src/lib/needs-input-notification.ts
  • apps/mobile/src/lib/system-search-entries.test.ts
  • apps/mobile/src/lib/system-search-entries.ts
Previous Review Summaries (6 snapshots, latest commit f61b6af)

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

Previous review (commit f61b6af)

Status: No Issues Found | Recommendation: Merge

Executive Summary

Re-reviewed the full PR diff at HEAD f61b6af27 (the branch was rebased onto current main, so the previous incremental SHA is no longer an ancestor and the whole 26-file diff was re-analyzed): the backend-default-title hiding, rename seeding, failure-stated-once, and model-chip changes are consistent across every surface and no new issues were found. Runtime tests were not executed (mobile dependencies unavailable), so findings were verified by reading current HEAD and prior verification of the changed logic.

Files Reviewed (26 files)
  • apps/mobile/src/components/agents/markdown-renderer.test.ts
  • apps/mobile/src/components/agents/message-failure-state.test.ts
  • apps/mobile/src/components/agents/message-failure-state.ts
  • apps/mobile/src/components/agents/model-selector-label.test.ts
  • apps/mobile/src/components/agents/model-selector-label.ts
  • apps/mobile/src/components/agents/model-selector.tsx
  • apps/mobile/src/components/agents/new-session-screen-body.tsx
  • apps/mobile/src/components/agents/remote-session-row.mounted.test.tsx
  • apps/mobile/src/components/agents/remote-session-row.tsx
  • apps/mobile/src/components/agents/session-detail-content.test.ts
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/components/agents/session-detail-rename-state.test.ts
  • apps/mobile/src/components/agents/session-detail-rename-state.ts
  • apps/mobile/src/components/agents/session-row-actions.test.ts
  • apps/mobile/src/components/agents/session-row-actions.ts
  • apps/mobile/src/components/agents/session-row.mounted.test.tsx
  • apps/mobile/src/components/agents/session-row.tsx
  • apps/mobile/src/components/agents/session-terminal-error.test.ts
  • apps/mobile/src/components/agents/session-terminal-error.ts
  • apps/mobile/src/lib/glanceable/newest-session.test.ts
  • apps/mobile/src/lib/glanceable/newest-session.ts
  • apps/mobile/src/lib/needs-input-notification.test.ts
  • apps/mobile/src/lib/needs-input-notification.ts
  • apps/mobile/src/lib/system-search-entries.test.ts
  • apps/mobile/src/lib/system-search-entries.ts
  • pnpm-lock.yaml

Previous review (commit 5e955db)

Status: No Issues Found | Recommendation: Merge

Executive Summary

Re-reviewed the incremental changes at HEAD 5e955db: both session rows now seed the rename field and the iOS prompt with sessionDisplayTitle(session.title) ?? '', so an unnamed session opens a blank field and the unchanged/blank guards keep a no-edit confirm from persisting it. No new issues found.

Files Reviewed (5 files)
  • apps/mobile/src/components/agents/session-row.tsx
  • apps/mobile/src/components/agents/remote-session-row.tsx
  • apps/mobile/src/components/agents/session-row.mounted.test.tsx
  • apps/mobile/src/components/agents/remote-session-row.mounted.test.tsx
  • apps/mobile/src/components/agents/session-row-actions.test.ts

All previously raised findings in the 25-file diff were accepted and fixed in the current HEAD; the files not changed since the last review were not re-analyzed.

Previous review (commit 93d95ff)

Status: No Issues Found | Recommendation: Merge

Executive Summary

Reviewed the full 25-file mobile diff at HEAD 93d95ff; no unresolved issues remain in the changed code.

Files Reviewed (25 files)
  • apps/mobile/src/components/agents/markdown-renderer.test.ts
  • apps/mobile/src/components/agents/message-failure-state.test.ts
  • apps/mobile/src/components/agents/message-failure-state.ts
  • apps/mobile/src/components/agents/model-selector-label.test.ts
  • apps/mobile/src/components/agents/model-selector-label.ts
  • apps/mobile/src/components/agents/model-selector.tsx
  • apps/mobile/src/components/agents/new-session-screen-body.tsx
  • apps/mobile/src/components/agents/remote-session-row.mounted.test.tsx
  • apps/mobile/src/components/agents/remote-session-row.tsx
  • apps/mobile/src/components/agents/session-detail-content.test.ts
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/components/agents/session-detail-rename-state.test.ts
  • apps/mobile/src/components/agents/session-detail-rename-state.ts
  • apps/mobile/src/components/agents/session-row-actions.test.ts
  • apps/mobile/src/components/agents/session-row-actions.ts
  • apps/mobile/src/components/agents/session-row.mounted.test.tsx
  • apps/mobile/src/components/agents/session-row.tsx
  • apps/mobile/src/components/agents/session-terminal-error.test.ts
  • apps/mobile/src/components/agents/session-terminal-error.ts
  • apps/mobile/src/lib/glanceable/newest-session.test.ts
  • apps/mobile/src/lib/glanceable/newest-session.ts
  • apps/mobile/src/lib/needs-input-notification.test.ts
  • apps/mobile/src/lib/needs-input-notification.ts
  • apps/mobile/src/lib/system-search-entries.test.ts
  • apps/mobile/src/lib/system-search-entries.ts

Previous review (commit 55b09a7)

Status: 2 Issues Found | Recommendation: Address before merge

Overview

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

WARNING

File Line Issue
apps/mobile/src/components/agents/session-terminal-error.ts 331 An agent-execution delivery failure whose status indicator is the SDK's Message delivery failed line is no longer suppressed, so the footer prints Failed to deliver under a row that already says Response failed

SUGGESTION

File Line Issue
apps/mobile/src/lib/session-title.ts 20 New displaySessionTitle duplicates the existing sessionDisplayTitle without its trim(), so padded and whitespace-only titles render differently across surfaces
Files Reviewed (27 files)
  • apps/mobile/src/components/agents/markdown-renderer.test.ts
  • apps/mobile/src/components/agents/message-failure-state.test.ts
  • apps/mobile/src/components/agents/message-failure-state.ts - 1 issue
  • apps/mobile/src/components/agents/model-selector-label.test.ts
  • apps/mobile/src/components/agents/model-selector-label.ts
  • apps/mobile/src/components/agents/model-selector.tsx
  • apps/mobile/src/components/agents/new-session-screen-body.tsx
  • apps/mobile/src/components/agents/remote-session-row.mounted.test.tsx
  • apps/mobile/src/components/agents/remote-session-row.tsx
  • apps/mobile/src/components/agents/session-detail-content.test.ts
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/components/agents/session-detail-rename-state.test.ts
  • apps/mobile/src/components/agents/session-detail-rename-state.ts
  • apps/mobile/src/components/agents/session-row-actions.test.ts
  • apps/mobile/src/components/agents/session-row-actions.ts
  • apps/mobile/src/components/agents/session-row.mounted.test.tsx
  • apps/mobile/src/components/agents/session-row.tsx
  • apps/mobile/src/components/agents/session-terminal-error.test.ts
  • apps/mobile/src/components/agents/session-terminal-error.ts - 1 issue
  • apps/mobile/src/lib/glanceable/newest-session.test.ts
  • apps/mobile/src/lib/glanceable/newest-session.ts
  • apps/mobile/src/lib/needs-input-notification.test.ts
  • apps/mobile/src/lib/needs-input-notification.ts
  • apps/mobile/src/lib/session-title.test.ts
  • apps/mobile/src/lib/session-title.ts - 1 issue
  • apps/mobile/src/lib/system-search-entries.test.ts
  • apps/mobile/src/lib/system-search-entries.ts

Fix these issues in Kilo Cloud

Note: runtime tests were not executed (dependencies unavailable), so findings were verified by reading current HEAD 55b09a7. The PR branch was rebased, so this review covers the full PR diff against main.

Previous review (commit 4c7736f)

Status: No Issues Found | Recommendation: Merge

Reviewed the fix commit on top of 050a58ad: all four previously raised findings are resolved in current code. The iOS rename path now seeds the prompt with the session's own title (session.title ?? '' / session.title) and showRenamePrompt skips a confirm whose trimmed value equals the trimmed seed (session-row-actions.ts:32), so a no-edit tap can no longer persist placeholder copy. The indexed search title is trimmed again (system-search-entries.ts:198), and duplicate suppression now compares locale-independent catalog keys (MessageFailure.titleKey/detailKey) instead of memoized localized strings. No new issues found in the changed lines; no memory leaks introduced (no listeners, timers, refs, or caches added).

Files Reviewed (14 changed since previous review)
  • apps/mobile/src/components/agents/message-failure-state.ts
  • apps/mobile/src/components/agents/model-selector.tsx
  • apps/mobile/src/components/agents/remote-session-row.tsx
  • apps/mobile/src/components/agents/remote-session-row.mounted.test.tsx
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/components/agents/session-detail-content.test.ts
  • apps/mobile/src/components/agents/session-row.tsx
  • apps/mobile/src/components/agents/session-row-actions.ts
  • apps/mobile/src/components/agents/session-row-actions.test.ts
  • apps/mobile/src/components/agents/session-row.mounted.test.tsx
  • apps/mobile/src/components/agents/session-terminal-error.ts
  • apps/mobile/src/components/agents/session-terminal-error.test.ts
  • apps/mobile/src/lib/system-search-entries.ts
  • apps/mobile/src/lib/system-search-entries.test.ts

Notes: runtime tests were not executed (dependencies not installed); findings verified by reading current HEAD 4c7736f8 and the incremental diff against 050a58ad.

Previous review (commit 050a58a)

Status: 4 Issues Found | Recommendation: Address before merge

Executive Summary

The title-fallback refactor is sound, but routing backend-default titles through the untitled fallback makes the iOS rename prompt persist placeholder copy as the real session title.

Overview

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

WARNING

File Line Issue
apps/mobile/src/components/agents/session-row.tsx 109 iOS rename prompt now prefills the untitled fallback; a no-edit tap persists "Untitled session" as the real title (session-row-actions.ts:28 has no change guard).
apps/mobile/src/components/agents/remote-session-row.tsx 94 Same iOS rename-prefill defect as session-row.tsx.

SUGGESTION

File Line Issue
apps/mobile/src/lib/system-search-entries.ts 198 The .trim() on the indexed title was dropped, so padded titles now enter the search document (and fingerprint) untrimmed.
apps/mobile/src/components/agents/session-terminal-error.ts 328 Duplicate suppression compares a memoized localized failure.title against a freshly evaluated i18n.t(...), so an in-place language switch re-shows the footer line this PR removes.
Files Reviewed (23 files)
  • apps/mobile/src/components/agents/markdown-renderer.test.ts - no issues
  • apps/mobile/src/components/agents/message-failure-state.test.ts - no issues
  • apps/mobile/src/components/agents/message-failure-state.ts - no issues
  • apps/mobile/src/components/agents/model-selector-label.test.ts - no issues
  • apps/mobile/src/components/agents/model-selector-label.ts - no issues
  • apps/mobile/src/components/agents/model-selector.tsx - no issues
  • apps/mobile/src/components/agents/new-session-screen-body.tsx - no issues
  • apps/mobile/src/components/agents/remote-session-row.tsx - 1 issue
  • apps/mobile/src/components/agents/session-detail-content.test.ts - no issues
  • apps/mobile/src/components/agents/session-detail-content.tsx - no issues
  • apps/mobile/src/components/agents/session-detail-rename-state.test.ts - no issues
  • apps/mobile/src/components/agents/session-detail-rename-state.ts - no issues
  • apps/mobile/src/components/agents/session-row.tsx - 1 issue
  • apps/mobile/src/components/agents/session-terminal-error.test.ts - no issues
  • apps/mobile/src/components/agents/session-terminal-error.ts - 1 issue
  • apps/mobile/src/lib/glanceable/newest-session.test.ts - no issues
  • apps/mobile/src/lib/glanceable/newest-session.ts - no issues
  • apps/mobile/src/lib/needs-input-notification.test.ts - no issues
  • apps/mobile/src/lib/needs-input-notification.ts - no issues
  • apps/mobile/src/lib/session-title.test.ts - no issues
  • apps/mobile/src/lib/session-title.ts - no issues
  • apps/mobile/src/lib/system-search-entries.test.ts - no issues
  • apps/mobile/src/lib/system-search-entries.ts - 1 issue

Fix these issues in Kilo Cloud

Notes: no memory leaks found in the changed pure derivations (no listeners, timers, refs, or caches added). The local DEFAULT_SESSION_TITLE_PATTERN matches packages/session-ingest-contracts/src/index.ts exactly and is not ReDoS-vulnerable. Runtime tests were not executed (dependencies not installed).


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

Review guidance: REVIEW.md from base branch main

iscekic added a commit that referenced this pull request Sep 22, 2026
@iscekic
iscekic force-pushed the kwf/explorer-10-unlabeled-defects-on-android-the-in-flight-to-b9b5e branch from 036cf1e to 4c7736f Compare September 22, 2026 22:38
@iscekic
iscekic marked this pull request as ready for review September 22, 2026 23:09
@iscekic
iscekic marked this pull request as draft September 22, 2026 23:48
iscekic added a commit that referenced this pull request Sep 23, 2026
@iscekic
iscekic force-pushed the kwf/explorer-10-unlabeled-defects-on-android-the-in-flight-to-b9b5e branch from 7e25674 to 55b09a7 Compare September 23, 2026 01:31
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 01:42
Comment thread apps/mobile/src/components/agents/session-terminal-error.ts
Comment thread apps/mobile/src/lib/session-title.ts Outdated
@iscekic
iscekic marked this pull request as draft September 23, 2026 02:14
iscekic added a commit that referenced this pull request Sep 23, 2026
@iscekic
iscekic force-pushed the kwf/explorer-10-unlabeled-defects-on-android-the-in-flight-to-b9b5e branch from cddd9f5 to 93d95ff Compare September 23, 2026 03:42
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 03:54
@iscekic

iscekic commented Sep 23, 2026

Copy link
Copy Markdown
Collaborator Author

kilo-review — independent audit of the published diff.

Status: 1 Issues

File Line Issue
apps/mobile/src/components/agents/session-row.tsx 114 The rename field and iOS rename prompt are now seeded with the raw stored title, so renaming an untitled session shows the backend machine string 'New session - 2026-09-20T08:10:35.172Z' that this change hides on every other surface.

@iscekic
iscekic marked this pull request as draft September 23, 2026 04:26
@iscekic

iscekic commented Sep 23, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Accepted. Pushed ec23a09 (kwf kwf-fix-review-e777).

What changed:

  • apps/mobile/src/components/agents/session-row.tsx:114 — accepted: the stored row and the remote row seeded the rename field (and the iOS prompt) with session.title, so an unnamed session reopened the raw New session - <ISO> string the row hides. Both now seed sessionDisplayTitle(session.title) ?? '', so an unnamed session opens blank with the "Session name" placeholder, and the unchanged/blank guards keep a no-edit confirm from persisting it. Tests pin the empty seed, the trimmed seed for a named session, and the Android modal's empty initial value.
  • apps/mobile/src/components/agents/session-terminal-error.ts:331 — accepted: an agent-execution delivery failure renders the assistant-failure title while its SDK status indicator is the "Message delivery failed" line, so the footer printed "Failed to deliver" under a row already saying "Response failed". The predicate now also matches a delivery failure whose title key is the assistant-failure title and whose status copy is the delivery-title line, and keys on the failure title rather than the kind; a test pins it.
  • apps/mobile/src/lib/session-title.ts:20 — accepted: displaySessionTitle duplicated sessionDisplayTitle without its trim(), so padded and whitespace-only titles diverged. The duplicate module and its test are deleted; the session list, detail header, continue-from line, and needs-input notification now import sessionDisplayTitle from src/lib/session-display-title.ts, whose untitled check comes from isDefaultSessionTitle in the shared session-ingest-contracts package instead of a local regex copy.
  • selectMessageFailure maps an execution delivery failure to the assistant-failure title with a null detail, keeping Retry and copy-to-composer reachable behind the copy action; the deliveryExecution copy key stays in the delivery-reason map but is intentionally unreachable from the row now.
  • resolveModelSelectorLabel picks the catalog name, else the short display name for a non-provider-aware unmatched reference, else the generic label; the chip renders its result.
  • Tests pin the composer placeholder as catalog copy, the Arabic markdown path naming base direction without alignment, and the opaque non-absolute fixed footer; the tool-row overlap, tab highlight, and icon tints needed no code change.
  • Review hint: the shared default-title pattern is the risk area, since a session legitimately named like the pattern is hidden; also confirm the provider-aware chip falling back to the generic "Model" label is acceptable.

@iscekic
iscekic force-pushed the kwf/explorer-10-unlabeled-defects-on-android-the-in-flight-to-b9b5e branch from ec23a09 to 5e955db Compare September 23, 2026 05:57
iscekic added a commit that referenced this pull request Sep 23, 2026
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 06:09
@iscekic
iscekic marked this pull request as draft September 23, 2026 06:32
iscekic added a commit that referenced this pull request Sep 23, 2026
@iscekic
iscekic force-pushed the kwf/explorer-10-unlabeled-defects-on-android-the-in-flight-to-b9b5e branch from 5e955db to f61b6af Compare September 23, 2026 07:36
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 07:57
@iscekic
iscekic marked this pull request as draft September 23, 2026 08:19
@iscekic
iscekic force-pushed the kwf/explorer-10-unlabeled-defects-on-android-the-in-flight-to-b9b5e branch from 1d65d57 to 0b9a62f Compare September 23, 2026 09:23
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 09:35
@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 101cb46 into main Sep 23, 2026
29 checks passed
@iscekic
iscekic deleted the kwf/explorer-10-unlabeled-defects-on-android-the-in-flight-to-b9b5e 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