Skip to content

fix(mobile): hide pull Updating, keep one Live Activity, fix sheet header - #5972

Merged
iscekic merged 3 commits into
mainfrom
fix/mobile-live-session-polish
Sep 8, 2026
Merged

fix(mobile): hide pull Updating, keep one Live Activity, fix sheet header#5972
iscekic merged 3 commits into
mainfrom
fix/mobile-live-session-polish

Conversation

@iscekic

@iscekic iscekic commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Hide the visible Updating label on the Agents live list during pull-to-refresh. The spinner stays. Screen readers still hear Updating. The reserved line still shows Couldn't refresh + Retry on failure.
  • Do not throttle Live Activities. Debounce idle-end by 5s while the app is active so brief idle transitions preserve the same card. Background transitions submit the native dismissal immediately. Resume inside that window updates the same card. A new start also ends every other visible ActivityKit instance.
  • Fix the submit-review form sheet header: close caret on the same row as the title and eyebrow, and 20 logical pixels of top padding below the grabber.

Test plan

  • Agents live list: pull to refresh. Confirm no visible Updating. Confirm the spinner shows. Confirm VoiceOver still announces Updating.
  • Agents live list: fail a pull. Confirm Couldn't refresh + Retry. Confirm Retry works.
  • iOS: native ActivityKit identity stays unchanged across a measured 3.1-second busy → idle → busy transition.
  • iOS: backgrounding inside the five-second idle delay retains the card for ten minutes, then dismisses it.
  • iOS review, comment, and merge sheets: title and caret alignment, added top padding, keyboard layout, and dismissal.
  • Android review, comment, and merge sheets: header spacing, visible keyboard, action placement, and dismissal.

Local verification — 2026-09-08

Earlier run; Android verification is completed below. Header fix pushed in 84b0c009b213b537db1a6500ed9b7a1871e79844.

  • Added eight logical pixels to the shared sheet header (pt-3pt-5).
  • Registered the PR overview before the sheet routes. Direct PR links now open the overview without a background Add comment header.
  • iOS: review and comment typing, merge keyboard focus, and all three dismissals passed. Screenshots show the final commit contents on iPhone 17, iOS 26.5.
  • iOS history refresh smoke passed with stored rows retained. This does not prove live-list failure handling or VoiceOver behavior.
  • Focused checks passed: 5 suites, 42 tests; mobile type checking, lint, and changed-file formatting.
  • check:unused was not run because its command loads a dotenv file, which the local runbook prohibits.
  • Earlier Android preparation failed at sign-in and Appium. The matching native build and recovery below resolved the setup blockers.
  • Live-list failure/retry and VoiceOver/TalkBack checks remain unverified. The later lifecycle run below established a real remote session.

Visual changes

The recording shows review opening, keyboard typing, and dismissal. No review, comment, or merge was submitted.

ios-review.mp4

iOS review header spacing

iOS review with keyboard

iOS comment with keyboard

iOS merge with keyboard

Kilobot finding fixed

  • Commit 276f658a2 submits idle dismissal immediately when the app is inactive or backgrounded.
  • Leaving the foreground flushes a pending idle delay. Resuming work cancels the delay and its listener.
  • The background push handler waits for ActivityKit to accept the idle end before it returns.
  • Regression checks reproduced four failures before the fix. All 162 focused tests, type checking, lint, and formatting now pass.
  • This repair does not change the sheet visuals. The device lifecycle results appear below.

iOS lifecycle verification — head 276f658a2

  • Passed on iPhone 17, iOS 26.5, with the native development build and a real CLI session.
  • The native card displayed one working session and one idle session.
  • A foreground busy → idle → busy transition took 3,061 ms. The same native card stayed active.
  • The app entered the background and stopped within 2,879 ms of opening, before the five-second idle delay expired.
  • The idle card remained visible at 300 and 590 seconds. It disappeared by 615 seconds without foreground reopening.
  • After observation, iOS reported the app suspended in the background. This does not prove continuous process termination.
  • Simulator APNs acceptance did not prove background notification consumption. That delivery path remains unverified on a device.
  • The recording covers 599.4 seconds because the recorder has a ten-minute cap. The final screenshot proves dismissal after the recording ends.
  • The separate rapid-transition recording failed. Read-only native observations below prove card identity; the existing unit tests cover cancellation.

Native observations from the real foreground session:

1788891688507 busy: C1F1EA77-1B3A-4172-9A18-CB85477A8BD0 active
1788891689925 idle: C1F1EA77-1B3A-4172-9A18-CB85477A8BD0 active
1788891692986 busy: C1F1EA77-1B3A-4172-9A18-CB85477A8BD0 active
idle-window.mp4

Idle card immediately after closing the app

Idle card retained at 590 seconds

Idle card dismissed by 615 seconds

Android verification — head 276f658a2

  • Passed all nine checks across the review, comment, and merge sheets on Android API 36.1.
  • Confirmed header top padding and caret alignment, typing or focus with the visible software keyboard, visible actions, and dismissal.
  • Installed the matching native build after the restored emulator lacked ExpoBattery. OTP sign-in then passed.
  • Fixed shell quoting in the local workflow helper so Android comment links retain all query parameters. A focused regression check passed.
  • No product code changed during this verification. The fixture received no review, comment, or merge submission.
  • Real background push delivery and the earlier live-list failure/retry and accessibility checks remain outside this device result.
review-recovered.mp4
comment.mp4
merge.mp4

Android review header

Android review keyboard

Android comment keyboard

Android merge keyboard

…ader

Hide the visible Updating label during Agents pull-to-refresh. Keep the spinner and the screen-reader announcement.

Debounce idle Live Activity ends by 5s so brief idle does not start a second card. End extra visible activities when a new card starts.

Put the PR form-sheet close caret on the title row. Drop the safe-area top pad.
@iscekic iscekic self-assigned this Sep 8, 2026
Comment thread apps/mobile/src/glanceable-ios/ios-sink.ts
@kilo-code-bot

kilo-code-bot Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Files Reviewed (6 files)
  • apps/mobile/src/glanceable-ios/ending-activities.ts
  • apps/mobile/src/glanceable-ios/ios-sink.native.test.ts
  • apps/mobile/src/glanceable-ios/ios-sink.test.ts
  • apps/mobile/src/glanceable-ios/ios-sink.ts
  • apps/mobile/src/lib/notifications.test.ts
  • apps/mobile/src/lib/notifications.ts
Previous Review Summary (commit 84b0c00)

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

Previous review (commit 84b0c00)

Status: 1 Issue Found | Recommendation: Address before merge

Executive Summary

Idle Live Activity retirement now depends on a 5s JavaScript timer, so a background idle transition can leave the Lock Screen card up for the rest of the ActivityKit lifetime.

Overview

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

WARNING

File Line Issue
apps/mobile/src/glanceable-ios/ios-sink.ts 325 Idle-end debounce never reaches ActivityKit if JS sleeps
Files Reviewed (13 files)
  • apps/mobile/src/app/(app)/pr-review/[owner]/[repo]/[number]/_layout.tsx
  • apps/mobile/src/components/agents/session-history-screen.pull-failure.mounted.test.tsx
  • apps/mobile/src/components/agents/session-list-refresh-status.tsx
  • apps/mobile/src/components/agents/session-list-screen.pull-failure.mounted.test.tsx
  • apps/mobile/src/components/home/agent-sessions-section.tsx
  • apps/mobile/src/components/pr-review/pr-form-sheet-chrome.tsx
  • apps/mobile/src/components/screen-header.mounted.test.tsx
  • apps/mobile/src/components/screen-header.tsx
  • apps/mobile/src/glanceable-ios/ending-activities.ts
  • apps/mobile/src/glanceable-ios/ios-sink.native.test.ts
  • apps/mobile/src/glanceable-ios/ios-sink.ts - 1 issue
  • apps/mobile/src/glanceable-ios/view-props.ts
  • packages/app-shared/src/glanceable-agents-snapshot.ts

Fix these issues in Kilo Cloud


Reviewed by grok-4.6 · Input: 150.3K · Output: 15.3K · Cached: 510.8K

Review guidance: REVIEW.md from base branch main

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants