Skip to content

fix(mobile): stop the fixed status row overprinting the transcript - #6456

Merged
iscekic merged 1 commit into
mainfrom
kwf/explorer-question-kb-down-the-errored-question-row-draws-fad76c-aa59
Sep 21, 2026
Merged

iscekic merged 1 commit into
mainfrom
kwf/explorer-question-kb-down-the-errored-question-row-draws-fad76c-aa59

Conversation

@iscekic

@iscekic iscekic commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator

Changelog for users

  • An error or retry row no longer prints over the transcript when the session list resizes.
  • The row snaps into place and stays opaque, so the transcript line underneath stays readable.

Changelog for maintainers

  • In session-detail-content.tsx, the fixed status-indicator row no longer runs a position layout transition, so it stops animating across transcript rows during a list resize.
  • The row wrapper gained an opaque background, so a resize covers a transcript row instead of overprinting it; the opacity entering/exiting fades are unchanged.
  • Row visibility rules are unchanged: it still needs at least one message and stays suppressed while the preparation group already shows it.
  • New unit tests cover error and warning rows, assert the fades and opaque background remain, and assert an empty transcript renders no fixed row.
  • Review hint: the overprint came from the list-resize path, not from the indicator label, so check transcript resizing first.
  • Device proof ran on Android; the requested iOS run was not proved, so iOS remains pending owner verification.

E2E proof

[e1] Explorer finding: question-kb-down: the errored question row draws two red strings on top of each other, so the line is unreadable — prior/e1-qerr-kb-up.png

[e1] Explorer finding: question-kb-down: the errored question row draws two red strings on top of each other, so the line is unreadable — prior/e1q-down.png

[e1] Explorer finding: question-kb-down: the errored question row draws two red  -> pass :: android/emulator-5554: entered the errored-question state in session ses_f3dbeae91fffatgCYLYWRZBKXW ('ses_f3dbeae91fffatgCYLYWRZBKXW|Config selection|question', e1-session-state.log) and in the keyboard-down digest (e1-qerr-kb-down.log) the errored question row's two red strings occupy separate lines — 'android.widget.TextView Failed to deliver. Retry available. tappable [36,1599][1044,1645]' and 'android.widget.TextView The agent could not run this message. tappable [36,1654][1044,1691]' — with the fixed error row 'android.widget.TextView The response failed. tappable [92,2099][393,2145]' entirely below the transcript row 'android.widget.Button question tool, running tappable [40,1959][1042
/home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-proof-61337bc-98d0/e2e-mobile-app/e1-qerr-kb-down.log
android.widget.Button Rename session: Config selection tappable [111,84][763,213]
android.view.View Config selection tappable [111,115][763,180]
android.widget.Button Tap to view context details. tappable [790,91][924,206]
android.widget.Button Copy link tappable [942,98][1043,199]
android.widget.TextView 4:37 AM tappable [476,1331][604,1370]
android.view.ViewGroup fake:question:q1:Which config should I edit?, User message tappable [0,1389][1080,1590]
android.widget.TextView fake:question:q1:Which config should I edit? tappable [250,1426][1011,1552]
android.widget.TextView Failed to deliver. Retry available. tappable [36,1599][1044,1645]
android.widget.TextView The agent could not run this message. tappable [36,1654][1044,1691]
android.widget.Button Retry tappable [37,1701][176,1795]
android.widget.TextView Retry tappable [67,1725][146,1771]
android.widget.Button Copy to composer tappable [195,1701][525,1795]
android.widget.TextView Copy to composer tappable [225,1725][495,1771]
android.widget.Button Preparation complete tappable [40,1825][1042,1926]
android.widget.TextView Preparation complete tappable [188,1852][506,1898]
android.view.ViewGroup Assistant message tappable [0,1947][1080,2060]
android.widget.Button question tool, running tappable [40,1959][1042,2048]
android.widget.TextView question tappable [138,1981][267,2027]
android.widget.TextView The response failed. tappable [92,2099][393,2145]
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]
shot: /home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-proof-61337bc-98d0/e2e-mobile-app/e1.png
/home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-proof-61337bc-98d0/e2e-mobile-app/e1-session-state.log
ses_f3dbeae91fffatgCYLYWRZBKXW|Config selection|question
/home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-proof-61337bc-98d0/e2e-mobile-app/e1-kb-up-scene.log
android.view.ViewGroup fake:question:q1:Which config should I edit?, User message tappable [0,1207][1080,1408]
android.widget.TextView fake:question:q1:Which config should I edit? tappable [250,1244][1011,1370]
android.widget.TextView Failed to deliver. Retry available. tappable [36,1417][1044,1463]
android.widget.TextView The agent could not run this message. tappable [36,1472][1044,1509]
android.widget.Button Retry tappable [37,1519][176,1613]
android.widget.TextView Retry tappable [67,1543][146,1589]
android.widget.Button Copy to composer tappable [195,1519][525,1613]
android.widget.TextView Copy to composer tappable [225,1543][495,1589]
android.widget.Button Preparation complete tappable [40,1643][1042,1744]
android.widget.TextView Preparation complete tappable [188,1670][506,1716]
android.view.ViewGroup Assistant message tappable [0,1765][1080,1878]
android.widget.Button question tool, running tappable [40,1777][1042,1866]
android.widget.TextView question tappable [138,1799][267,1845]
android.widget.TextView The response failed. tappable [92,1916][393,1962]
android.widget.Button Mode: Code tappable [28,2005][261,2078]
android.widget.TextView Code tappable [106,2018][183,2064]
android.widget.Button Fake Deterministic tappable [279,2005][661,2078]
android.widget.TextView Fake Deterministic tappable [307,2019][583,2065]
android.widget.Button Paste from clipboard tappable [979,2005][1052,2078]
android.widget.Button Add attachment tappable [28,2151][101,2225]
android.widget.EditText Message tappable [126,2128][800,2248]
android.widget.Button Start voice input tappable [835,2142][926,2234]
android.widget.Button Send message [926,2125][1052,2251]
shot: /home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-proof-61337bc-98d0/e2e-mobile-app/e1-kb-up.png
/home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-proof-61337bc-98d0/e2e-mobile-app/e1-kb-down-scene.log
android.view.ViewGroup fake:question:q1:Which config should I edit?, User message tappable [0,1270][1080,1471]
android.widget.TextView fake:question:q1:Which config should I edit? tappable [250,1307][1011,1433]
android.widget.TextView Failed to deliver. Retry available. tappable [36,1480][1044,1526]
android.widget.TextView The agent could not run this message. tappable [36,1535][1044,1572]
android.widget.Button Retry tappable [37,1582][176,1676]
android.widget.TextView Retry tappable [67,1606][146,1652]
android.widget.Button Copy to composer tappable [195,1582][525,1676]
android.widget.TextView Copy to composer tappable [225,1606][495,1652]
android.widget.Button Preparation complete tappable [40,1706][1042,1807]
android.widget.TextView Preparation complete tappable [188,1733][506,1779]
android.view.ViewGroup Assistant message tappable [0,1828][1080,1941]
android.widget.Button question tool, running tappable [40,1840][1042,1929]
android.widget.TextView question tappable [138,1862][267,1908]
android.widget.TextView The response failed. tappable [92,1979][393,2025]
android.widget.Button Mode: Code tappable [28,2068][261,2141]
android.widget.TextView Code tappable [106,2081][183,2127]
android.widget.Button Fake Deterministic tappable [279,2068][661,2141]
android.widget.TextView Fake Deterministic tappable [307,2082][583,2128]
android.widget.Button Paste from clipboard tappable [979,2068][1052,2141]
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]
shot: /home/igor_kilocode_ai/.local/share/kwf/sections/kwf-fix-proof-61337bc-98d0/e2e-mobile-app/e1-kb-down.png
## Follow-ups (not changed here) - not proved live: A session whose status row is retrying keeps that row below the transcript across a keyboard cycle: the transcript rows and the retrying text are both readable, nothing is overprinted (platform:both(keyboard - the dismiss relayout differs per OS: Android keyboardDidHide vs iOS keyboardWillHide, app-aware-keyboard-padding-state.ts:20-27)) (no capture cited it) - not proved live: An idle session shows no fixed indicator row (empty row state) and its transcript rows stay readable across a keyboard cycle (platform:both(keyboard)) (no capture cited it) - not proved live: ux-check: At rest, the errored status line renders in its normal position above the question card/composer with the same single-line appearance as before the change (no new opaque band, clipping, or duplication). (no capture cited it) - not proved live: ux-check: In the happy state (session working/progress), the fixed indicator row still fades in/out and stays in its own band without overlapping transcript rows when the keyboard toggles. (no capture cited it) - not proved live: ux-check: On an errored session (red 'The response failed.' status) with a question card present, dismiss the keyboard and watch the transition: the red status line is never superimposed on a thinking/tool transcript row; both the row's label and the status text are fully legible throughout. (no capture cited it) - not proved live: ux-check: Repeat the keyboard open/dismiss cycle several times on the errored session; at no captured frame does transcript text show through the fixed status row's background. (no capture cited it)

Open findings (not fixed here)

  • not proved live: e1.png is no longer on the host that took it, so no publish can carry it
  • not proved live: e3.png is no longer on the host that took it, so no publish can carry it
  • not proved live: question-kb-down.png is no longer on the host that took it, so no publish can carry it
  • the '## E2E proof' section says the proof was not captured

e1-qerr-kb-up

e1q-down

@iscekic
iscekic marked this pull request as draft September 21, 2026 03:35
@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

The fixed status row now drops its position LinearTransition and gains an opaque bg-background, which stops the list-resize overprint without changing the row's visibility gates or opacity fades; the accompanying unit tests exercise error and warning rows and the empty-transcript case.

Files Reviewed (2 files)
  • apps/mobile/src/components/agents/session-detail-content.tsx
  • apps/mobile/src/components/agents/session-detail-content.test.ts
Previous Review Summary (commit 61337bc)

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

Previous review (commit 61337bc)

Status: No Issues Found | Recommendation: Merge

Executive Summary

The fixed status row correctly drops its position LinearTransition and gains an opaque bg-background, which stops the list-resize overprint without changing the row's visibility gates or fades; the accompanying unit tests exercise error and warning rows and the empty-transcript case.

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

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 21, 2026 03:53
@iscekic

iscekic commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator Author

This description names a scenario the proof did not capture:

  • not proved live: A session whose status row is retrying keeps that row below the transcript across a keyboard cycle: the transcript rows and the retrying text are both readable, nothing is overprinted (platform:both(keyboard - the dismiss relayout differs per OS: Android keyboardDidHide vs iOS keyboardWillHide, app-aware-keyboard-padding-state.ts:20-27)) (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 21, 2026
@iscekic iscekic self-assigned this Sep 21, 2026

@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 removed the human-ready The PR is ready for human review. label Sep 21, 2026
@iscekic
iscekic marked this pull request as draft September 21, 2026 13:10
@iscekic
iscekic force-pushed the kwf/explorer-question-kb-down-the-errored-question-row-draws-fad76c-aa59 branch from 568c85e to c810692 Compare September 21, 2026 14:55
@iscekic
iscekic marked this pull request as ready for review September 21, 2026 15:16
@iscekic

iscekic commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator Author

This description names a scenario the proof did not capture:

  • not proved live: A session whose status row is retrying keeps that row below the transcript across a keyboard cycle: the transcript rows and the retrying text are both readable, nothing is overprinted (platform:both(keyboard - the dismiss relayout differs per OS: Android keyboardDidHide vs iOS keyboardWillHide, app-aware-keyboard-padding-state.ts:20-27)) (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 21, 2026
@iscekic
iscekic requested a review from eshurakov September 21, 2026 15:30
@iscekic
iscekic merged commit e47785a into main Sep 21, 2026
29 checks passed
@iscekic
iscekic deleted the kwf/explorer-question-kb-down-the-errored-question-row-draws-fad76c-aa59 branch September 21, 2026 16:25
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