Repository navigation
feat(mobile): collapse the session goal and move connection status into the context sheet - #6265
Conversation
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Files Reviewed (2 files)
Previous Review Summaries (4 snapshots, latest commit 6f9b2c0)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit 6f9b2c0)Status: 1 Issue Found | Recommendation: Address before merge Executive SummaryA cached session's first load now reads "Reconnecting…" instead of "Connecting…" because the connection latch is set from the raw transport even while a pending metadata refresh overrides the displayed state; the rest of the changed code (goal disclosure, context-sheet connection row, deleted page-level indicator) is sound. Overview
Issue Details (click to expand)WARNING
Files Reviewed (10 files)
Fix these issues in Kilo Cloud Previous review (commit cbb3a42)Status: No Issues Found | Recommendation: Merge Executive SummaryIncremental review of the follow-up commit ( Files Reviewed (2 files)
Previous review (commit 8442279)Status: No Issues Found | Recommendation: Merge Executive SummaryAll three prior findings are fixed on the current HEAD (8442279): the ever-connected latch now consults the app-wide user-web leg only for a Files Reviewed (7 files)
Previous review (commit f8e822c)Status: 3 Issues Found | Recommendation: Address before merge Executive SummaryA remote/cloud-agent session whose own transport is down while the app-wide socket is up can report "Reconnecting…" on its first connection because the ever-connected latch consults the app-wide user-web leg; two low-severity follow-ups cover an unbounded module-level goal-disclosure map and a stale comment. Overview
Issue Details (click to expand)WARNING
SUGGESTION
Files Reviewed (105 files)
Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0 Review guidance: REVIEW.md from base branch |
b0e0ccc to
8442279
Compare
|
kilo-review — independent audit of the published diff. Status: 1 Issues
|
8442279 to
cbb3a42
Compare
|
bot: Accepted. Pushed cbb3a42 (kwf What changed:
|
|
This description names a scenario the proof did not capture:
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. |
cbb3a42 to
6f9b2c0
Compare
d7e9b8b to
1ff8faa
Compare
…to the context sheet #6265
1ff8faa to
31f950c
Compare
|
This description names a scenario the proof did not capture:
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. |
Changelog for users
Changelog for maintainers
resolveSessionConnectionDisplaymaps the transport, the app-wide user-web leg, reconnect exhaustion, and an ever-connected latch to connected/connecting/reconnecting/lost; the app-wide leg is consulted only for anonetransport.connectionDisplayandonRetryConnection: Retry re-runs the metadata refresh when the transcript is cached, and otherwise retries the socket.DisclosureChevronandDisclosureLayoutare extracted from the security-agent collapsible section: 180° collapsed, 0° expanded, 200 ms, and instant under reduced motion.py-2topt-0.5 pb-2, the action pressable stretches across the row, and the chevron stays its sibling because a nested pressable disappears from assistive technology.SESSION_HEADER_HEIGHTstays 92, so the composer height cap is unchanged after the indicator row is removed; review the connection-display wiring and retry routing first, then the goal row's layout and accessibility.sessionConnection.label,goal.collapse, andgoal.expand; Connected reuses the existingcommon.connected.E2E proof
[e3] ux-check: Chevron affordance: expanded the chevron points down and collapsed it points up; the transition rotates rather than swapping icons, and under system Reduce Motion the toggle is instant with… — (android emulator-5606) The scripted replay returned 'SCENE e3 OK' covering collapse, leave, re-enter and expand-back, its final digest showing the re-expanded row 'android.widget.Button Collapse goal tappable [988,310][1043,365]' (e3-live-scene.log), and the state moves are corroborated by the digests: after collapsing, 'android.widget.Button Active goal tappable [37,310][970,394]' with 'android.widget.Button Expand goal tappable [988,310][1043,365]' and the composer still at 'android.widget.Button Send message [926,2187][1052,2313]' (e3-collapse-live.log), the collapsed state persisted…
[e4] ux-check: Expanded goal block sits closer to the session header, header spacing unchanged, icon/status/objective/reason legible — android emulator-5554, live remote-CLI session with an active goal: e4-scene.log shows the expanded block ('android.widget.Button Active goal. Goal: Ship the release notes tappable [37,365][970,450]', 'android.widget.TextView Active goal tappable [92,365][970,402]', 'android.widget.TextView Ship the release notes tappable [92,402][970,448]', chevron 'android.widget.Button Collapse goal tappable [988,365][1043,420]') while the header is identical to the pre-goal digest in after-remote-digest.log ('android.widget.Button Go back tappable [0,163][101,264]', 'android.widget.Button Rename session…
[e1] ux-check: Expanded goal block sits closer to the session header, header spacing unchanged, icon/status/objective legible — Live scene digest out/e1-live2.log (SCENE goalexpanded2 OK, android) shows the expanded goal block:
android.widget.Button Active goal. Goal: Ship the release notes tappable [37,310][970,394],android.widget.TextView Ship the release notes tappable [92,347][970,393],android.widget.Button Collapse goal tappable [988,310][1043,365], with the header carrying onlyandroid.widget.Button Context 17,867 of 1,310,720 tokens, 1% used, cost 0.11 cents. Tap to view context details. tappable [741,156][1043,271]and no connection row; the amendment's sheet state is proven in out/ctxsid.log by…[e1] ux-check: Expanded goal block sits closer to the header, header spacing unchanged, icon/status/objective legible — out/e1-run2.log prints "SCENE e1 OK" with the header unchanged at "android.widget.Button Rename session: Greeting tappable [111,149][714,278]" and the goal row directly beneath it at "android.widget.Button Active goal. Goal: Ship the release notes tappable [37,310][970,394]" with the carat "android.widget.Button Collapse goal tappable [988,310][1043,365]", against the same session's earlier digest out/e6-goal-set-scene.log (2026-09-16 23:39) where those identical header bounds carried the goal at "android.widget.Button Active goal. Goal: Ship the release notes tappable [37,365][970,450]"; the…
[e1] ux-check: Expanded goal block sits closer to the header, header spacing unchanged, icon/status/objective legible
[e3] ux-check: Chevron affordance: expanded the chevron points down and collapsed it points up; the transition rotates rather than swapping icons, and under system Reduce Motion the toggle is instant with…
E2E proof — log excerpts
/home/igor_kilocode_ai/.local/share/kwf/sections/two-improvements-to-the-session-page-when-4757/e2e-mobile-app/e1-live2.log/home/igor_kilocode_ai/.local/share/kwf/sections/two-improvements-to-the-session-page-when-4757/e2e-mobile-app/ctxsid.log/home/igor_kilocode_ai/.local/share/kwf/sections/two-improvements-to-the-session-page-when-4757/e2e-mobile-app/e1-goalset.log/home/igor_kilocode_ai/.local/share/kwf/sections/two-improvements-to-the-session-page-when-4757/e2e-mobile-app/e1-cli-goal.logOwner request
[e10] ux-check: Localization — chevron screen-reader label announces the localized collapse/expand copy in a non-English locale, no raw key or English copy — android emulator-5554 with the app's per-app locale set to de-DE ('Locales for com.kilocode.kiloapp for user 0 are [de-DE]' in e10-locale.log): in a live session with an active goal, e10b-scene.log holds 'SCENE e10b OK' with 'android.widget.Button Ziel einklappen tappable [988,365][1043,420]' and 'android.widget.Button Aktives Ziel. Ziel: Ship the release notes tappable [37,365][970,450]' — the same chevron element (Button at [988,365][1043,420]) that announced 'android.widget.Button Collapse goal tappable [988,365][1043,420]' in the English build (e4-scene.log) — and after collapsing…
[e11] ux-check: PR proof for both goal states — android/emulator-5604, one ordered run: expanded block shows the full goal ('android.widget.TextView Ship the release notes tappable [92,402][970,448]' plus 'android.widget.Button Collapse goal tappable [988,365][1043,420]'), capture e11-expanded.png; after 'tap Collapse goal' the scene reported SCENE e11 OK and the collapsed block shows 'android.widget.Button Active goal tappable [37,365][970,450]' with 'android.widget.Button Expand goal tappable [988,365][1043,420]' and the digest after the capture still reads Expand goal, capture e11-collapsed.png (scene capture e11.png). Both screenshots…
[e11] ux-check: PR proof for both goal states
[e7] ux-check: No jank: toggling collapse/expand animates the block's height instead of snapping, the transcript does not jump or blank, and the composer stays fully on screen. — Android (emulator-5554): SCENE e7 OK (e7-live.log:2) with collapsed -> expanded -> collapsed in one session - the block's row is 157px tall expanded (e1-run1.log:9) and 85px collapsed with the same status text and no objective (e7-live.log:10-12), the transcript below it stays rendered (e7-live.log:13-18) and the composer stays fully on screen after every toggle (e7-live.log:19-22), so the block moves its height instead of the content blanking; stills captured for the visual reviewer as e7-collapsed.png and e7-expanded.png (the smoothness of the height animation and the carat rotation are the…
[e9] ux-check: Collapsed tap target: tapping anywhere within the visible collapsed row above or below the status line (outside the chevron) opens the goal actions sheet; only the chevron toggles the… — android/emulator-5606: collapsed row in e9-collapsed-digest.log ('android.widget.Button Active goal tappable [37,365][970,450]', status text ending at y 402, chevron 'Expand goal tappable [988,365][1043,420]'); tap at (500,430) in that row region opened the goal actions sheet ('android.widget.Button Remove goal tappable [0,2043][1080,2190]') while the disclosure stayed collapsed, and only the chevron toggled it (e9-expanded-again.log: 'Active goal. Goal: Ship the release notes', 'Collapse goal'); captures e9-collapsed.png / e9-row-tap-sheet.png / e9-expanded-again.png for the visual reviewer…
[e5] ux-check: Collapsed goal row — android/emulator-5604: after tapping Collapse goal (SCENE e5 OK, rc=0) the goal row carries only the status — e5-scene.log: 'android.widget.Button Active goal tappable [37,365][970,450]' and 'android.widget.TextView Active goal tappable [92,365][970,402]' — with no objective or reason node in the row (the expanded row's label 'Goal: Ship the release notes' is absent; this goal carries no reason even when expanded, see e11-states.log line 'android.widget.TextView Ship the release notes tappable [92,402][970,448]' as the row's last line); the disclosure sits on the right of the row…
[e11] ux-check: PR proof for both goal states
[e9] ux-check: Collapsed tap target: tapping anywhere within the visible collapsed row above or below the status line (outside the chevron) opens the goal actions sheet; only the chevron toggles the…
[p1] goal disclosure, expanded -> collapsed -> expanded: seed an active goal by sending '/goal Ship the release notes' from the composer (needs:seed; the command needs a session whose catalog advertises… — Declared start state restored (p1-state-run.log:
STATE HIT session-open) and the harvested replay ran live on emulator-5604: p1-replay.log holdsSCENE p1 OK, with the collapsed block showing only the icon+status row (android.widget.Button Expand goal tappable [988,310][1043,365], p1-collapsed.log, whose goal block is justandroid.widget.Button Active goal tappable [37,310][970,394]) and the re-expanded blockandroid.widget.Button Collapse goal tappable [988,310][1043,365]carrying the objectiveandroid.widget.TextView Ship the release notes tappable [92,347][970,393]…[e5] ux-check: PR proof - expanded and collapsed goal block, session header without the reconnecting row, context details sheet carrying the connection status — Expanded goal row reads 'android.widget.Button Active goal. Goal: Ship the release notes tappable [37,310][970,394]' with 'android.widget.Button Collapse goal tappable [988,310][1043,365]', and after that tap the row reads 'android.widget.Button Active goal tappable [37,310][970,394]' with 'android.widget.Button Expand goal tappable [988,310][1043,365]', re-expanding restoring the objective (e5e6-rest.log); the header digest goes from 'android.widget.Button Context 17,803 of 1,310,720 tokens, 1% used, cost 1 cent. Tap to view context details. tappable [773,156][1043,271]' straight to the goal…
[p4] ux-check: No jank: toggling collapse/expand animates the block's height instead of snapping, the transcript does not jump or blank, and the composer stays fully on screen. — (android emulator-5606) Re-ran because the diff rewrites the goal block and the disclosure primitives; the edited parked list started from the expanded state and returned 'SCENE p4 OK' for collapse, 'Expand goal', the objective dropped from the collapsed row (row label reduced to 'android.widget.Button Active goal tappable [37,310][970,394]' in e3-collapse-live.log) and expand-back, with the composer in place in both states ('android.widget.Button Send message [926,2187][1052,2313]' and the unchanged transcript group at [0,415] in p4-live-scene.log); height animation versus snapping is motion…
[e5] ux-check: PR proof - expanded and collapsed goal block, session header without the reconnecting row, context details sheet carrying the connection status
[owner-amendment-s4] Context details sheet always shows the connection status; the session header carries no reconnecting row — android emulator-5554: the sheet renders a dedicated connection row (
android.view.ViewGroup session-context-sheet-connection tappable [0,526][1080,600],android.widget.TextView CONNECTION tappable [55,539][237,576],android.widget.TextView Connected tappable [865,535][1025,581]), and directly below the header's Context button sits the collapsed goal row, not a connection row (android.widget.Button Expand goal tappable [988,310][1043,365]); captures amendment-goal-collapsed.png, amendment-goal-expanded.png and amendment-ctxsheet.png are left for the visual reviewer. No UX-DEFECT…[owner-amendment-s4] Context details sheet always shows the connection status; the session header carries no reconnecting row
[p6] ux-check: Localization of the chevron's screen-reader label — With the German per-app locale applied first (
Locales for com.kilocode.kiloapp for user 0 are [de-DE], p6-locale.log) the harvested replay ran live and p6-script.log holdsSCENE p6 OK: the chevron announces the localized labelandroid.widget.Button Ziel einklappen tappable [988,310][1043,365], the goal status isandroid.widget.TextView Aktives Ziel tappable [92,310][970,347]and the expanded block readsandroid.widget.Button Aktives Ziel. Ziel: Ship the release notes tappable [37,310][970,394], with the replay's absent-checks for the raw key 'agentChat.goal' and the English…[owner-amendment-s4] Context details sheet always shows the connection status; the session header carries no reconnecting row
[e5] ux-check: PR proof - expanded and collapsed goal block, session header without the reconnecting row, context details sheet carrying the connection status
[e5] ux-check: PR proof - expanded and collapsed goal block, session header without the reconnecting row, context details sheet carrying the connection status
[e5] ux-check: PR proof - expanded and collapsed goal block, session header without the reconnecting row, context details sheet carrying the connection status
[e1] ux-check: Expanded goal block sits closer to the header, header spacing unchanged, icon/status/objective legible — out/e1-run2.log prints "SCENE e1 OK" with the header unchanged at "android.widget.Button Rename session: Greeting tappable [111,149][714,278]" and the goal row directly beneath it at "android.widget.Button Active goal. Goal: Ship the release notes tappable [37,310][970,394]" with the carat "android.widget.Button Collapse goal tappable [988,310][1043,365]", against the same session's earlier digest out/e6-goal-set-scene.log (2026-09-16 23:39) where those identical header bounds carried the goal at "android.widget.Button Active goal. Goal: Ship the release notes tappable [37,365][970,450]"; the…
[e1] ux-check: Expanded goal block sits closer to the header, header spacing unchanged, icon/status/objective legible
Follow-ups (not changed here)