Skip to content

fix(mobile): keep centered empty states clear of the fixed tab bar - #6601

Merged
iscekic merged 3 commits into
mainfrom
kwf/explorer-2-visual-defects-on-android-in-the-card-the-comp-41a71-ce94
Sep 24, 2026
Merged

iscekic merged 3 commits into
mainfrom
kwf/explorer-2-visual-defects-on-android-in-the-card-the-comp-41a71-ce94

Conversation

@iscekic

@iscekic iscekic commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

Changelog for users

  • On the Agents tab, a search that matches no session keeps its message and its Clear-search button above the fixed bottom tab bar.
  • On a phone held sideways, that no-match state drops its decorative icon and tightens its spacing so the message and button stay on screen without scrolling.

Changelog for maintainers

  • Finding 2 (search-empty): accepted and fixed. The centered no-match body now clears the fixed bottom tab bar; the screen reserves that band once through the surface inset, and the not-ready fallback pads by the surface reservation instead of centering the body under the bar.
  • Finding 1 (review-detail): rejected. The Details card's completion row already renders the localized completion label beside its relative time, and the explorer's own capture shows that label, so no product change was made; a stronger mounted guard now asserts the label and its value together.
  • A centered state now learns whether its band is short (a phone held sideways) and may drop decoration the band cannot hold; the empty state drops its icon bubble and halves its gaps only in that case.
  • The reserved bottom band drops the floating action's strip in a short landscape window, where the action is a corner overlay the centered column never reaches.
  • The Agents list's floating New-session action moved into its own component; its behavior is unchanged.
  • The branded-splash test now tolerates the extra Android colors that introspect: true reads from a worktree's generated android/ tree, fixing a pre-existing suite failure.
  • Review hint: the centering math is the risk; check how a short window is detected and how the Agents screen reserves the bottom band for its centered states.

E2E proof

e6.png

e1-live-landscape.png

e1-live-portrait.png

Owner request

Surface: mobile-app

Explorer finding: 2 visual defects on android: In the التفاصيل card the completion-time; The empty-state secondary line "Prueba c

The user-agent explorer found these 2 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 2 musts, one for each finding below.
The explorer never edits product code.

Evidence (from the device runs):

--- Finding 1 of 2: review-detail: In the التفاصيل card the completion-time row shows only the value "قبل 14 دقيقة" with a blank label column, unlike every other row which has a right-aligned label.
Flow: review-detail
Found on revision: f2181ae
Repro:

  1. set this state first: credits 25; org; reviews 3; uimode night; battery 12 discharging; rotate landscape; relaunch; key back; deeplink kiloapp://expo-development-client/?url=http%3A%2F%2Flocalhost%3A20081; rotate portrait; the device in dark mode
  2. open the app on emulator-5554
  3. reach review-detail
  4. the capture shows the defect named below
    Observed: In the التفاصيل card the completion-time row shows only the value "قبل 14 دقيقة" with a blank label column, unlike every other row which has a right-aligned label.
    Expected: the screen renders without this defect

--- Finding 2 of 2: search-empty: The empty-state secondary line "Prueba con otro término de búsqueda." sits in the fixed bottom tab bar's band and is clipped by it, while the empty state itself is centered in a container that extends under the bar.
Flow: search-empty
Found on revision: f2181ae
Repro:

  1. set this state first: credits 25; org; reviews 3; uimode night; battery 12 discharging; rotate landscape; relaunch; key back; deeplink kiloapp://expo-development-client/?url=http%3A%2F%2Flocalhost%3A20081; rotate portrait; the device in dark mode
  2. open the app on emulator-5554
  3. reach search-empty
  4. the capture shows the defect named below
    Observed: The empty-state secondary line "Prueba con otro término de búsqueda." sits in the fixed bottom tab bar's band and is clipped by it, while the empty state itself is centered in a container that extends under the bar.
    Expected: the screen renders without this defect

[e1] ux-check: landscape Agents no-match — copy and Clear-search action clear the tab bar with no scrolling — Landscape digest (2400x1080) shows the bottom tab bar on screen at top y=875 ('android.view.View Home, tab, 1 of 3 tappable [0,875][800,1017]') with the empty state entirely above it: 'centered-state-content tappable [0,569][2400,823]', 'Try a different search term. tappable [999,643][1401,689]', 'Clear search tappable [1068,708][1332,823]' (823<875); the staged scene ran live, not the script (e1-landscape-no-match.log). Tapping the empty-state Clear-search CTA cleared the query on the first tap with no scroll and the list returned (e1-cta-tap.log). Capture for the visual reviewer: e1p.png…

[e1] ux-check: landscape Agents no-match — copy and Clear-search action clear the tab bar with no scrolling — scripted-shard1/e1.png

[e1] ux-check: landscape Agents no-match — copy and Clear-search action clear the tab bar with no scrolling

[e1] ux-check: landscape Agents no-match — copy and Clear-search action clear the tab bar with no scrolling — prior/e1p.png

[e1] ux-check: Reproduce the explorer state (dark mode, rotate landscape, relaunch, deeplink, rotate portrait): the empty state stays centred and does not jump or re-centre as the surface layout resolves. — android/emulator-5554, dark mode (cmd uimode night -> 'Night mode: yes'). Reached the Agents search-empty state ('zzzznothingmatches') live with sim_browser_click/type after a cold relaunch (sim_app_launch cold); portrait digest e1-relaunch-portrait-digest.log reads 'android.view.ViewGroup centered-state-content tappable [0,918][1080,1356]', 'android.widget.TextView No sessions match tappable [360,1083][720,1148]', 'android.widget.TextView Try a different search term. tappable [339,1157][741,1203]' and the empty-state CTA 'android.widget.Button Clear search tappable [408,1240][672,1355]'…

[e1] ux-check: Reproduce the explorer state (dark mode, rotate landscape, relaunch, deeplink, rotate portrait): the empty state stays centred and does not jump or re-centre as the surface layout resolves. — prior/e1-portrait-dark.png

[p3] ux-check: portrait Agents no-match — icon, title, copy and Clear-search above the tab bar — Previously-passed portrait control; the diff touches this screen, and its scripted scene re-ran in this run: 'SCENE p3 OK' with the empty state above the tab bar top y=2195 ('android.widget.Button Clear search tappable [408,1240][672,1355]'), capture scripted-shard1/p3.png. No UX-DEFECT.

[p3] ux-check: portrait Agents no-match — icon, title, copy and Clear-search above the tab bar — scripted-shard1/p3.png

[e5] ux-check: empty state stays centred, does not re-centre as the surface layout resolves — android emulator-5604, dark mode: Agents search no-match body present after the cold relaunch + dev-client deeplink layout resolve with SCENE e5 OK, content at [0,918][1080,1356], 'Try a different search term.' at [339,1157][741,1203] and 'Clear search' at [408,1240][672,1356], all clear of the fixed tab bar top y=2195 (scripted-e1.log); the identical content bounds in e5-portrait.txt and e5-portrait-after-repro.txt show no re-centre across the re-resolve; rotation sub-steps not reproducible (e5-landscape.txt reports rotation="0" 1080x2400 after sim_browser_resize returned 'orientation…

[e5] ux-check: empty state stays centred, does not re-centre as the surface layout resolves — prior/e5-portrait.png

[e3] ux-check: Agents tab, search term matching nothing, portrait — empty state clear of the bottom tab bar — SCENE digest e3.txt (android emulator-5606, portrait 1080x2400) shows the no-match body with 'No sessions match' y[1146-1211], 'Try a different search term.' y[1220-1266], the Clear-search button y[1303-1419] and the icon SvgView y[1014-1077], all above the fixed tab bar's top edge y[2195]; the vertical-centring layout judgement is the visual reviewer's on e3.png (also saved).

[e3] ux-check: Agents tab, search term matching nothing, portrait — empty state clear of the bottom tab bar — e3.png

[p4] ux-check: Reproduce the explorer state (dark mode, rotate landscape, relaunch, deeplink, rotate portrait): the empty state stays centred and does not jump or re-centre as the surface layout resolves. — Android emulator-5604, from signed-in-home: 'SCENE p4 OK' (p4-scene.log:1), digest shows the no-match state with 'No sessions match' [360,1146][720,1211], 'Try a different search term.' bottom 1266 and 'Clear search' [408,1303][672,1418] all fully above the fixed tab bar top 2195, matching the recorded portrait control bounds exactly (no portrait layout shift, no UX-DEFECT observed); the landscape rotation branch could not be re-driven because appium 'do rotate landscape' and sim_browser_resize both report landscape while the tree stays [0,0][1080,2400] (harness rotate no-op, papercut cap…

[p4] ux-check: Reproduce the explorer state (dark mode, rotate landscape, relaunch, deeplink, rotate portrait): the empty state stays centred and does not jump or re-centre as the surface layout resolves. — p4.png

[e1] ux-check: landscape Agents no-match — copy and Clear-search action clear the tab bar with no scrolling

[e1] ux-check: landscape Agents no-match — copy and Clear-search action clear the tab bar with no scrolling — e1.png

[e1] ux-check: Reproduce the explorer state (dark mode, rotate landscape, relaunch, deeplink, rotate portrait): the empty state stays centred and does not jump or re-centre as the surface layout resolves.

[e1] ux-check: Reproduce the explorer state (dark mode, rotate landscape, relaunch, deeplink, rotate portrait): the empty state stays centred and does not jump or re-centre as the surface layout resolves. — e1-landscape-dark.png

[e1] ux-check: Reproduce the explorer state (dark mode, rotate landscape, relaunch, deeplink, rotate portrait): the empty state stays centred and does not jump or re-centre as the surface layout resolves. — android emulator-5554, dark mode on: Night mode: yes (e1-live-runtime.log); captured after the explorer sequence landscape -> cold relaunch -> deeplink -> portrait. Landscape no-match: SCENE e1-live-landscape OK and android.view.ViewGroup centered-state-content tappable [0,569][2400,823] with android.widget.Button Clear search tappable [1068,708][1332,823] above the tab-bar top edge android.view.View Home, tab, 1 of 3 tappable [0,875][800,1017] (e1-landscape-no-match.log); the same bounds are in the previous review's e1-relaunch-landscape-digest.log. Portrait round trip…

[e1] ux-check: Reproduce the explorer state (dark mode, rotate landscape, relaunch, deeplink, rotate portrait): the empty state stays centred and does not jump or re-centre as the surface layout resolves. — e1-live-portrait-back.png

Open findings (not fixed here)

  • [e4] ux-check: Repeat the same no-match state in landscape: the empty-state copy and its Clear-search action clear the tab bar with no scrolling required.
  • [e4] ux-check: Repeat the same no-match state in landscape: the empty-state copy and its Clear-search action clear the tab bar with no scrolling required.: UX-DEFECT: Agents landscape no-match — [changed] the empty-state body overflows the landscape viewport: tapping the Clear-search CTA (e11) left
  • the verifier's claims failed the proof audit 3 times on mobile-app; its notes quote text not in its logs
  • the '## E2E proof' section carries no log excerpt, so nothing shows the change was driven end to end

Merge proof

Merged origin/main (8d07bf579c) into the branch. The only conflict was in apps/mobile/plugins/branded-splash.test.ts, and its resolution is byte-identical to origin/main (git diff origin/main --stat -- apps/mobile/plugins/branded-splash.test.ts is empty).

Merged test command, from apps/mobile:

pnpm exec vitest run plugins/branded-splash.test.ts src/components/centered-state.mounted.test.tsx src/components/centered-state.stability.mounted.test.tsx src/components/code-reviewer/review-detail-screen.mounted.test.tsx src/components/empty-state.mounted.test.tsx src/lib/centered-state-layout.test.ts

Decisive output:

 Test Files  6 passed (6)
      Tests  108 passed (108)

Each of the six files passes on its own (Test Files 1 passed (1)). The auto-merged session-list-screen.tsx also passes its own suite: pnpm exec vitest run src/components/agents/session-list-screen.mounted.test.tsx reports Tests 87 passed (87).

@iscekic
iscekic marked this pull request as draft September 22, 2026 23:09
@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

Full review of gh pr diff 6601 at HEAD 5d0866f363565c9c25094d92fbb2e40128fd965a (the prior review SHA is not an ancestor, so history was rewritten again). The centering change is coherent: isShortViewport pins the exclusive height < 600 tablet boundary with Number.isFinite guards, CenteredState publishes the short-band flag and pads its pending-layout fallback by surface.bottomReservation, the Agents screen reserves the tab-bar band once and adds the FAB strip only on a non-short window, and the SessionListFab extraction preserves every prop, testID, accessibility attribute, and style. The one previously raised finding is fixed: the Agents mounted test now asserts the surface bottomInset the screen actually sets, so the duplicate-clearance guard is real. No orphaned useCenteredStateBand/CenteredStateBandContext references remain, and no new subscription, listener, or timer leak was found.

Files Reviewed (13 files)
  • apps/mobile/plugins/branded-splash.test.ts
  • apps/mobile/src/components/agents/session-list-fab.tsx
  • apps/mobile/src/components/agents/session-list-screen.mounted.test.tsx
  • apps/mobile/src/components/agents/session-list-screen.tsx
  • apps/mobile/src/components/centered-state-band.ts
  • apps/mobile/src/components/centered-state.mounted.test.tsx
  • apps/mobile/src/components/centered-state.stability.mounted.test.tsx
  • apps/mobile/src/components/centered-state.tsx
  • apps/mobile/src/components/code-reviewer/review-detail-screen.mounted.test.tsx
  • apps/mobile/src/components/empty-state.mounted.test.tsx
  • apps/mobile/src/components/empty-state.tsx
  • apps/mobile/src/lib/centered-state-layout.test.ts
  • apps/mobile/src/lib/centered-state-layout.ts
Previous Review Summaries (4 snapshots, latest commit f20e2aa)

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

Previous review (commit f20e2aa)

Status: 1 Issue Found | Recommendation: Address before merge

Overview

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

SUGGESTION

File Line Issue
apps/mobile/src/components/agents/session-list-screen.mounted.test.tsx 1399 props.frameStyle is not a prop of CenteredState, so the new assertion can never fail and does not guard the duplicate-clearance regression it claims to cover
Files Reviewed (14 files)
  • apps/mobile/plugins/branded-splash.test.ts
  • apps/mobile/src/components/agents/session-list-fab.tsx
  • apps/mobile/src/components/agents/session-list-screen.mounted.test.tsx - 1 issue
  • apps/mobile/src/components/agents/session-list-screen.tsx
  • apps/mobile/src/components/centered-state-band.ts
  • apps/mobile/src/components/centered-state.mounted.test.tsx
  • apps/mobile/src/components/centered-state.stability.mounted.test.tsx
  • apps/mobile/src/components/centered-state.tsx
  • apps/mobile/src/components/code-reviewer/review-detail-screen.mounted.test.tsx
  • apps/mobile/src/components/empty-state.mounted.test.tsx
  • apps/mobile/src/components/empty-state.tsx
  • apps/mobile/src/lib/centered-state-layout.test.ts
  • apps/mobile/src/lib/centered-state-layout.ts
  • pnpm-lock.yaml

The prior review SHA 09a3acaa1b530e774955c818eaf08205601c313a is not an ancestor of HEAD f20e2aae0 (history was rewritten), so the whole gh pr diff 6601 was reviewed at current HEAD. Production behavior is unchanged from the previously approved revision: isShortViewport correctly pins the exclusive height < 600 tablet boundary, CenteredState publishes the short-band flag and pads its pending-layout fallback by surface.bottomReservation, the Agents screen reserves the tab-bar band once and adds the FAB strip only on a non-short window, and the SessionListFab extraction preserves every prop, testID, accessibility attribute, and style. No orphaned references to the removed useCenteredStateBand/CenteredStateBandContext remain, and no new subscription, listener, or timer leak was found. The review-detail completion-row test verifies a real MetaRow label/value pair and would fail on regression, confirming the author's rejection of that finding.

Fix these issues in Kilo Cloud

Previous review (commit 09a3aca)

Status: No Issues Found | Recommendation: Merge

Full-diff review of the 13 changed mobile files at HEAD 09a3acaa1b530e774955c818eaf08205601c313a (the prior review SHA 73c9ec9b is not an ancestor of HEAD, so the whole gh pr diff 6601 was reviewed). The change is coherent: CenteredState pads its pending-layout fallback by surface.bottomReservation, the Agents screen reserves the tab-bar band once through StateSurfaceInsets (adding the FAB strip only while the window can spare it), isShortViewport decides a short landscape band from the window shape with Number.isFinite guards for partial platform mocks and an exclusive height < 600 tablet boundary, and EmptyState compacts only for a centered state inside that short band. The SessionListFab extraction preserves behavior, props, testID, and accessibility; no removed import or orphaned reference remains; and no subscription, listener, or timer leak is introduced. The earlier audit finding (height <= 600 mis-classifying a 600dp-short-edge tablet) is fixed at centered-state-layout.ts:73, with unit and mounted coverage.

Files Reviewed (13 files)
  • apps/mobile/plugins/branded-splash.test.ts
  • apps/mobile/src/components/agents/session-list-fab.tsx
  • apps/mobile/src/components/agents/session-list-screen.mounted.test.tsx
  • apps/mobile/src/components/agents/session-list-screen.tsx
  • apps/mobile/src/components/centered-state-band.ts
  • apps/mobile/src/components/centered-state.mounted.test.tsx
  • apps/mobile/src/components/centered-state.stability.mounted.test.tsx
  • apps/mobile/src/components/centered-state.tsx
  • apps/mobile/src/components/code-reviewer/review-detail-screen.mounted.test.tsx
  • apps/mobile/src/components/empty-state.mounted.test.tsx
  • apps/mobile/src/components/empty-state.tsx
  • apps/mobile/src/lib/centered-state-layout.test.ts
  • apps/mobile/src/lib/centered-state-layout.ts

Previous review (commit 73c9ec9)

Status: No Issues Found | Recommendation: Merge

Executive Summary

Full-diff review of the 13 changed mobile files (the prior review SHA be194d4f is no longer an ancestor of HEAD, so the incremental path was abandoned and the whole gh pr diff 6601 was reviewed). The change is coherent: CenteredState pads its pending-layout fallback by surface.bottomReservation, the Agents screen reserves the tab-bar band once through StateSurfaceInsets (adding the FAB strip only while the window can spare it), isShortViewport decides a short landscape band from the window shape with Number.isFinite guards for partial platform mocks, and EmptyState compacts only for a centered state inside that short band. The SessionListFab extraction preserves behavior, props, testID, and accessibility, and no removed import or orphaned reference remains.

Files Reviewed (13 files)
  • apps/mobile/plugins/branded-splash.test.ts
  • apps/mobile/src/components/agents/session-list-fab.tsx
  • apps/mobile/src/components/agents/session-list-screen.mounted.test.tsx
  • apps/mobile/src/components/agents/session-list-screen.tsx
  • apps/mobile/src/components/centered-state-band.ts
  • apps/mobile/src/components/centered-state.mounted.test.tsx
  • apps/mobile/src/components/centered-state.stability.mounted.test.tsx
  • apps/mobile/src/components/centered-state.tsx
  • apps/mobile/src/components/code-reviewer/review-detail-screen.mounted.test.tsx
  • apps/mobile/src/components/empty-state.mounted.test.tsx
  • apps/mobile/src/components/empty-state.tsx
  • apps/mobile/src/lib/centered-state-layout.test.ts
  • apps/mobile/src/lib/centered-state-layout.ts

Previous review (commit be194d4)

Status: No Issues Found | Recommendation: Merge

Reviewed PR #6601 (fix(mobile): keep centered empty states clear of the fixed tab bar) against HEAD be194d4f. The change was verified as a coherent set: the pending-layout fallback in centered-state.tsx now pads by surface.bottomReservation, isShortViewport gates the FAB strip out of the Agents surface inset in short landscape windows, and EmptyState compacts (drops the decorative icon, halves the gaps) only for centered placement in a short band. The short-band context is provided by CenteredState and read by EmptyStateBody across a real ancestor boundary; the SessionListFab extraction preserves props, testID, accessibility, and style; and no removed imports or orphaned frameStyle references remain. No memory-leak, hook-order, or context-propagation defect was found.

Files Reviewed (14 files)
  • apps/mobile/plugins/branded-splash.test.ts
  • apps/mobile/src/app/(app)/(tabs)/tabs-layout.mounted.test.tsx
  • apps/mobile/src/components/agents/session-list-fab.tsx
  • apps/mobile/src/components/agents/session-list-screen.mounted.test.tsx
  • apps/mobile/src/components/agents/session-list-screen.tsx
  • apps/mobile/src/components/centered-state-band.ts
  • apps/mobile/src/components/centered-state.mounted.test.tsx
  • apps/mobile/src/components/centered-state.stability.mounted.test.tsx
  • apps/mobile/src/components/centered-state.tsx
  • apps/mobile/src/components/empty-state.mounted.test.tsx
  • apps/mobile/src/components/empty-state.tsx
  • apps/mobile/src/lib/centered-state-layout.test.ts
  • apps/mobile/src/lib/centered-state-layout.ts
  • apps/mobile/src/components/code-reviewer/review-detail-screen.mounted.test.tsx

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

Review guidance: REVIEW.md from base branch main

@iscekic
iscekic force-pushed the kwf/explorer-2-visual-defects-on-android-in-the-card-the-comp-41a71-ce94 branch from a0dd122 to b9c8bbf Compare September 23, 2026 03:28
@iscekic
iscekic force-pushed the kwf/explorer-2-visual-defects-on-android-in-the-card-the-comp-41a71-ce94 branch from ebeec49 to 73c9ec9 Compare September 23, 2026 03:55
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 04:15
@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/lib/centered-state-layout.ts 69 isShortViewport uses height <= 600, so a 600dp-short-edge landscape tablet (Android sw600dp, e.g. the 1024x600 emulator) is classified as a phone held sideways and every centered EmptyState drops its decorative icon bubble and halves its gaps there, and the Agents screen stops reserving the FAB strip, even though that window's band (~384dp) is far taller than the ~167dp full stack.

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

iscekic commented Sep 23, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Accepted. Pushed 99787f0 (kwf kwf-fix-review-d84d).

What changed:

  • apps/mobile/src/lib/centered-state-layout.ts:69 — accepted and fixed. The short-window test classified a 600dp-short-edge landscape tablet as a phone held sideways.
  • The boundary is now exclusive (height < 600), so a tablet at Android's sw600dp qualifier keeps its full centered stack.
  • The Agents screen keeps reserving the floating action's strip in that window, where the centered column never reaches the corner action.
  • A unit test pins isShortViewport(1024, 600) to false; a mounted test pins the FAB strip at a 1024x600 window.
  • Finding 2 (search-empty): accepted and fixed. The centered no-match body clears the fixed bottom tab bar; the screen reserves that band through the surface inset.
  • Finding 1 (review-detail): rejected. The completion row already renders the localized label beside its relative time; a mounted guard asserts the label and value together.
  • Review hint: the centering math is the risk; check the short-window boundary and how the Agents screen reserves the bottom band.

@iscekic
iscekic force-pushed the kwf/explorer-2-visual-defects-on-android-in-the-card-the-comp-41a71-ce94 branch from 99787f0 to 09a3aca Compare September 23, 2026 05:44
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 05:57
@iscekic
iscekic marked this pull request as draft September 23, 2026 06:44
@iscekic
iscekic force-pushed the kwf/explorer-2-visual-defects-on-android-in-the-card-the-comp-41a71-ce94 branch from 09a3aca to f20e2aa Compare September 23, 2026 07:36
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 07:57
Comment thread apps/mobile/src/components/agents/session-list-screen.mounted.test.tsx Outdated
@iscekic
iscekic marked this pull request as draft September 23, 2026 08:19
@iscekic
iscekic force-pushed the kwf/explorer-2-visual-defects-on-android-in-the-card-the-comp-41a71-ce94 branch from e3eb7b6 to 5d0866f Compare September 23, 2026 09:05
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 09:23
@iscekic

iscekic commented Sep 23, 2026

Copy link
Copy Markdown
Collaborator Author

This description names a scenario the proof did not capture:

  • not proved live: review-detail.png is no longer on the host that took it, so no publish can carry 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 23, 2026
@iscekic iscekic self-assigned this Sep 23, 2026
@iscekic iscekic removed the human-ready The PR is ready for human review. label Sep 23, 2026
@iscekic
iscekic marked this pull request as draft September 23, 2026 09:55
@iscekic
iscekic marked this pull request as ready for review September 23, 2026 10:05
@iscekic iscekic added the human-ready The PR is ready for human review. label Sep 23, 2026
Resolves the conflict in apps/mobile/plugins/branded-splash.test.ts. Both
sides rewrote the same comment block; main's version already carries the
containment rationale plus the file-wide 30s test timeout, so main's side
is kept and the branch's reword is dropped.
@iscekic
iscekic merged commit 055d411 into main Sep 24, 2026
28 checks passed
@iscekic
iscekic deleted the kwf/explorer-2-visual-defects-on-android-in-the-card-the-comp-41a71-ce94 branch September 24, 2026 14:36
iscekic pushed a commit to Kilo-Org/kilocode that referenced this pull request Sep 26, 2026
…4554)

## Automated docs sync — 2026-09-25

This PR keeps kilo.ai/docs in sync with features merged to [Kilo-Org/cloud](https://github.com/Kilo-Org/cloud) and [Kilo-Org/kilocode](https://github.com/Kilo-Org/kilocode). Every change below links to the merged PR it documents.

- Window: `2026-09-24T07:08:33.639Z` → `2026-09-25T07:05:29.302Z`
- Verification (docs build + tests): **passing**

### Surface: `cloud-mobile`

- Assignees / requested reviewers: @iscekic and @eshurakov
- Derivation: Derived from the repository layout. A product surface is a package under packages/ that ships a distinct client, plugin, backend, or hosted service: cli = packages/opencode/ + packages/tui/ + packages/server/ + packages/sdk/ + packages/plugin/; vscode = packages/kilo-vscode/ + packages/kilo-web-ui/ + packages/kilo-ui/; jetbrains = packages/kilo-jetbrains/; gateway = packages/kilo-gateway/; web = packages/kilo-console/ + packages/kilo-indexing/ + packages/kilo-memory/ + packages/kilo-sandbox/. Docs route from the IA tree packages/kilo-docs/pages/ plus docs/jetbrains-vscode-settings-parity.md: each surface lists the pages sections that document it, and the per-platform pages under packages/kilo-docs/pages/code-with-ai/platforms/ map to the matching extension surface (the vscode/ directory to vscode, jetbrains.md to jetbrains). A doc path belongs to the surface with the longest matching prefix; a path that matches none of those prefixes falls to `other` (the explicit other prefixes are listed under other.docs). The cloud surfaces are derived the same way from the Kilo-Org/cloud layout: cloud-mobile = apps/mobile/, cloud-web = apps/web/, cloud-extension = apps/extension/, and cloud-agent = the cloud-agent packages under packages/ (packages/cloud-agent-sdk/ + packages/cloud-agent-profile/). A cloud source names its repository while a bare string still means this repository. The pages under packages/kilo-docs/pages/collaborate/ document the cloud web app (app.kilo.ai: teams dashboard, billing, SSO, adoption dashboard), so they route to cloud-web. No page under packages/kilo-docs/pages/ documents the browser side-panel extension yet, so cloud-extension lists no docs prefix.
- Map: `.github/docs-sync/surfaces.json`
- Surface map: `cli`, `vscode`, `jetbrains`, `gateway`, `web`, `cloud-mobile`, `cloud-web`, `cloud-extension`, `cloud-agent`, `other`
- Source prefixes: `apps/mobile/` (Kilo-Org/cloud)
- Doc prefixes: `packages/kilo-docs/pages/code-with-ai/platforms/mobile.md`
- Paths that fall to `other`: `packages/kilo-docs/pages/community/`, `packages/kilo-docs/pages/kiloclaw/`, `packages/kilo-docs/pages/contributing/`, `packages/kilo-docs/LEARNINGS.md`, `docs/`
- Reviewers are ranked from `Kilo-Org/cloud`; the workflow needs a token with `contents: read` on that repository (repository secret `CROSS_REPO_ACCESS_TOKEN`, exposed to the upsert step as `CLOUD_REPO_TOKEN`).
- How the two were computed: Reviewers for `cloud-mobile` are ranked from `Kilo-Org/cloud` git history over `apps/mobile/` (a commit 180 days old counts half as much, half-life 180 days). Bots (author type "Bot" or a login matching /\[bot\]$/i) and people without admin, write, or maintain permission are excluded.

### Changes

<!-- docs-sync:changes:start -->
| Docs change | Source |
| --- | --- |
| updated pages/code-with-ai/platforms/mobile.md | [Kilo-Org/cloud#6386](Kilo-Org/cloud#6386) |
| updated pages/ai-providers/openai-chatgpt-plus-pro.md | [Kilo-Org/cloud#6702](Kilo-Org/cloud#6702) |
| updated pages/code-with-ai/platforms/cloud-agent.md | [Kilo-Org/cloud#6683](Kilo-Org/cloud#6683) |
| updated pages/getting-started/byok.md | [Kilo-Org/cloud#6692](Kilo-Org/cloud#6692) |
<!-- docs-sync:changes:end -->

### Pending — will retry

<!-- docs-sync:pending:start -->
_None._
<!-- docs-sync:pending:end -->

### Considered, no docs change needed

<!-- docs-sync:skipped:start -->
| PR | Reason |
| --- | --- |
| [Kilo-Org/cloud#6658](Kilo-Org/cloud#6658) | Internal sandbox lifecycle fix with no user-visible workflow or setting. |
| [Kilo-Org/cloud#6673](Kilo-Org/cloud#6673) | Internal container CA trust plumbing, no user-facing behavior. |
| [Kilo-Org/cloud#6672](Kilo-Org/cloud#6672) | Internal sandbox launch/recovery fix with no documented workflow change. |
| [Kilo-Org/cloud#6660](Kilo-Org/cloud#6660) | Internal cloud-agent queue delivery fix; no new command, setting, or workflow for users. |
| [Kilo-Org/cloud#6226](Kilo-Org/cloud#6226) | Internal gateway alias-routing change, not user-visible. |
| [#14490](#14490) | Tool-call animation and streaming UI polish; users do not need to learn a new workflow. |
| [#14530](#14530) | Bug fix restoring intended worktree-pool behavior, no doc change needed. |
| [#14529](#14529) | Bug fix restoring tab/panel state across project switches. |
| [#14531](#14531) | Reconnect recovery bug fix, restores already-documented behavior. |
| [#14532](#14532) | Bug fix keeping session tab title in sync on rename. |
| [Kilo-Org/cloud#6088](Kilo-Org/cloud#6088) | Removes internal/admin model-experiment surfaces, not public product docs. |
| [Kilo-Org/cloud#6682](Kilo-Org/cloud#6682) | Internal control-socket reconnect race fix, no user-facing change. |
| [#14534](#14534) | Transcript re-render performance bug fix. |
| [#14535](#14535) | Bug fix preserving the loaded browser page across context switches. |
| [Kilo-Org/cloud#6684](Kilo-Org/cloud#6684) | Reverted by Kilo-Org/cloud#6685. |
| [Kilo-Org/cloud#6678](Kilo-Org/cloud#6678) | Dead-code constant removal, no user-visible effect. |
| [Kilo-Org/cloud#6687](Kilo-Org/cloud#6687) | Removes internal model-experiment maintenance and retains tables, no user-facing change. |
| [#14515](#14515) | JetBrains plugin unload crash fix, no documented behavior change. |
| [#14520](#14520) | JetBrains transcript/list rendering performance work. |
| [Kilo-Org/cloud#6614](Kilo-Org/cloud#6614) | Mobile PR Review header and session title bug fix, no doc change needed. |
| [Kilo-Org/cloud#6625](Kilo-Org/cloud#6625) | Internal mobile secure-store error-handling refactor. |
| [Kilo-Org/cloud#6624](Kilo-Org/cloud#6624) | Mobile auth bug fix that stops a retry loop; restores expected sign-in behavior with no new setting or workflow. |
| [#14310](#14310) | Contributor/CI fix making the kilo-v2 checkout installable; not user-visible product behavior. |
| [Kilo-Org/cloud#6611](Kilo-Org/cloud#6611) | Mobile notification-tap fix that selects the session's organization; restores correct behavior rather than adding a learnable feature. |
| [Kilo-Org/cloud#6644](Kilo-Org/cloud#6644) | Mobile sign-in layout/alignment polish; no change to what a user must do. |
| [Kilo-Org/cloud#6601](Kilo-Org/cloud#6601) | Mobile layout fix keeping empty states clear of the tab bar; purely visual. |
| [#14543](#14543) | CI/release infrastructure adding Windows binary code signing; no public docs impact. |
| [Kilo-Org/cloud#6616](Kilo-Org/cloud#6616) | Mobile visual defect fixes and a session-title fallback; no new user workflow or setting. |
| [Kilo-Org/cloud#6630](Kilo-Org/cloud#6630) | Reports an edge-case partial worktree restore; failure-path plumbing with no new user-facing workflow, target setting, or config. |
| [Kilo-Org/cloud#6699](Kilo-Org/cloud#6699) | Cloud Agent e2e stabilization plus internal idle-sandbox capacity handling; not user-visible. |
| [#14545](#14545) | Automated JetBrains release/changelog PR; underlying user-facing changes are triaged from their own PRs. |
| [Kilo-Org/cloud#6708](Kilo-Org/cloud#6708) | Internal AI-gateway request-logging policy change in the admin panel; no existing public docs surface and no change to how users run Kilo Code. |
| [#14533](#14533) | Documentation already shipped with the merged PR. The experimental.task_model_selection flag is gone from the current source, and pages/code-with-ai/agents/model-selection.md, pages/code-with-ai/agents/context-mentions.md, and pages/getting-started/settings/index.md already describe per-task selection as default-on with no stale experiment references. |
| [#14510](#14510) | Documentation already shipped with the merged PR. Marketplace companion-skill support is present in the current source (packages/opencode/src/kilocode/marketplace/companions.ts and installer), and pages/customize/marketplace.md already documents installing, publishing, and removing MCP servers with companion skills. |
<!-- docs-sync:skipped:end -->

---

(bot) Generated by the docs-sync workflow. Humans review and merge; while this PR stays open, the next daily run appends new changes here. Branch: `docs/auto-sync-2026-09-25`.
<!-- docs-sync: processed-through 2026-09-25T07:05:29.302Z -->
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

Sponsor
SponsoredKunjungi sekarang
Promo