Skip to content

fix(mobile): stop Choose computer modal jitter - #786

Merged
github-actions[bot] merged 1 commit into
mainfrom
fix/picker-probe-jitter-20260722
Jul 23, 2026
Merged

fix(mobile): stop Choose computer modal jitter#786
github-actions[bot] merged 1 commit into
mainfrom
fix/picker-probe-jitter-20260722

Conversation

@IgorGanapolsky

Copy link
Copy Markdown
Owner

Summary

  • Background Tailscale probes no longer re-fire on every health.checkedAt tick or flip the Choose computer “searching” UI
  • Probe cadence is silent + 30s minimum for automatic discovery; Find computers / open picker still show UI
  • BottomSheetModal keyboard lift is debounced 160ms so Android IME metric polls cannot bounce the sheet

Test plan

  • tailscaleProbeCadence + BottomSheetModal + computer picker status Jest
  • Open Choose computer on device — modal should stay visually stable while reconnecting
  • Tap Find computers still shows searching; Connect / address field keyboard should not jump repeatedly

Made with Cursor

@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@IgorGanapolsky
IgorGanapolsky enabled auto-merge (squash) July 22, 2026 14:41
@gitar-bot

gitar-bot Bot commented Jul 22, 2026

Copy link
Copy Markdown

Gitar is working

Gitar

@IgorGanapolsky
IgorGanapolsky force-pushed the fix/picker-probe-jitter-20260722 branch from ba0f68c to 8ecc93d Compare July 22, 2026 14:43
@greptile-apps

greptile-apps Bot commented Jul 22, 2026

Copy link
Copy Markdown

Greptile Summary

This PR reduces Choose computer modal jitter by making background discovery quieter and stabilizing Android keyboard lift. The main changes are:

  • Adds silent/background options for Tailscale computer probes.
  • Removes automatic Tailscale probing from the health.checkedAt polling loop.
  • Adds a 30s minimum cadence for non-forced background Tailscale discovery.
  • Keeps explicit Find computers and picker-open probes visible to users.
  • Debounces Android bottom-sheet keyboard lift by 160ms.
  • Adds Jest coverage for probe cadence and bottom-sheet lift timing.

Confidence Score: 5/5

Safe to merge with low risk.

The changed code is narrowly scoped to Tailscale probe cadence, picker loading state, and bottom-sheet keyboard lift. The updated behavior keeps explicit user actions visible while making automatic discovery silent and rate-limited. No connect/onboarding false-green, wrong-key, demo shortcut, or Tailscale regression was found in the reviewed changes.

No files require special attention.

T-Rex T-Rex Logs

What T-Rex did

  • Blocker evidence was identified before test execution, showing that adb, java, and xcodebuild were not found.
  • A Jest run proof showed all targeted tests passed with exit code 0.
  • No severity-bearing issues were observed in the executed evidence.
  • Two proof artifacts were created to document the pre-test blockers and post-test results.

View all artifacts

T-Rex Ran code and verified through T-Rex

Important Files Changed

Filename Overview
hermes-mobile/src/context/GatewayContext.tsx Introduces silent/background Tailscale probe options, removes health tick coupling, and rate-limits automatic discovery.
hermes-mobile/src/screens/ChatScreen.tsx Marks picker/help-triggered probes as explicit UI probes so Find computers and modal open still show searching state.
hermes-mobile/src/components/BottomSheetModal.tsx Adds a 160ms debounced Android keyboard lift for bottom sheets.
hermes-mobile/src/utils/tailscaleProbeCadence.ts Adds the shared 30s background probe cadence helper and probe options type.
hermes-mobile/src/tests/BottomSheetModal.test.tsx Updates bottom sheet tests to cover delayed keyboard lift behavior with fake timers.
hermes-mobile/src/tests/tailscaleProbeCadence.test.ts Covers first, suppressed, and allowed background Tailscale probe cadence cases.

Reviews (2): Last reviewed commit: "fix(mobile): stop Choose computer modal ..." | Re-trigger Greptile

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ba0f68c244

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plan.md Outdated
- 2026-07-21T23:55:00Z `codex-thumbgate-provider-logout`: **Expanded the P0 acceptance contract to signed-out copy.** The screenshot showed the public landing correctly reporting `SIGN-IN REQUIRED`, but the card and primary CTA still said `Open private dashboard` / `Open Hermes on the web`. Those controls route to AuthKit, yet their wording falsely implies that private access is available before authentication. The signed-out render will now say `Sign in` explicitly while the provider-session revocation fix closes the silent-reentry path.
- `hermes-mobile/src/screens/ChatScreen.tsx` (session-list refresh/reconnect selection only; no overlap with T-PROJECT-LANE-HEADER-GONE's project-lane row removal), `hermes-mobile/src/utils/sessionListSelection.ts`, `hermes-mobile/src/__tests__/sessionListSelection.test.ts`, `plan.md` → **claude-code-mobile-cron-evict** (T-MOBILE-CRON-EVICT-20260722: stop the open scheduled-job thread from being silently swapped for a different session on reconnect) (2026-07-22T08:15:00Z)
- T-MOBILE-CRON-EVICT-20260722 claimed files above → **released by claude-code-mobile-cron-evict** after `ensureCurrentSessionSelectable` fix landed, focused suites green (sessionListSelection.test.ts 19/19, ChatScreen.test.tsx 61/61), and tsc clean (2026-07-22T08:16:00Z)
<<<<<<< Updated upstream

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Remove unresolved conflict markers from plan

This commits raw conflict markers into plan.md, including a duplicate ## Decisions Log branch, so the shared coordination board now has mutually-exclusive versions of the latest claims/release log and git diff --check reports leftover conflict markers. Since agents rely on this file as the single source of truth before touching files, leaving this unresolved makes ownership/release state ambiguous; resolve the conflict and append the picker release entry under the existing log.

AGENTS.md reference: AGENTS.md:L14-L22

Useful? React with 👍 / 👎.

Comment on lines +2709 to 2710
if (tailscaleProbeInFlightRef.current) {
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep picker probing visible during silent in-flight scans

If a silent background probe has already started from the new showUi: false call paths, opening the Choose computer modal immediately calls probeTailscaleComputers({ showUi: true, force: true }), but this early return exits before setting tailscaleDiscoveryProbing. The picker status region therefore receives false and shows no searching/adding state while the scan is actually running, which regresses the stated foreground picker behavior whenever the modal is opened during an automatic probe; promote the in-flight probe to visible or track visible probing separately.

Useful? React with 👍 / 👎.

@IgorGanapolsky

Copy link
Copy Markdown
Owner Author

Device proof at 12:58 shows this PR addresses probe jitter only, not picker layout. The sheet still pushes the second machine and Find computers below the fold, uses a side-by-side Forget action that crushes the card, and retains Mac-only prose. Please keep this PR scoped to jitter and do not present it as complete picker UX; compact platform-neutral layout needs a coordinated follow-up after current owners release the files.

@IgorGanapolsky
IgorGanapolsky force-pushed the fix/picker-probe-jitter-20260722 branch from d120bca to ab7a64c Compare July 22, 2026 18:01
IgorGanapolsky added a commit that referenced this pull request Jul 22, 2026
Reorder mac picker so saved computers render first, collapse idle teal help
when profiles exist, and use compact paste-IP row (#787 copy). Incorporates

Co-authored-by: Cursor <cursoragent@cursor.com>
#786 keyboard debounce and dense profile rows with Forget below the card.
@IgorGanapolsky

Copy link
Copy Markdown
Owner Author

Closing/reopening to force a fresh CodeQL run after fixing the default-setup/advanced-config conflict repo-wide.

auto-merge was automatically disabled July 22, 2026 18:38

Pull request was closed

@github-actions
github-actions Bot enabled auto-merge (squash) July 22, 2026 18:38
@IgorGanapolsky
IgorGanapolsky force-pushed the fix/picker-probe-jitter-20260722 branch 11 times, most recently from ae94b00 to 30a982a Compare July 23, 2026 01:31
…cale probes

Background discovery no longer flips the picker searching UI on every health tick; keyboard sheet lift is debounced so Android IME polls cannot bounce the modal.

Co-authored-by: Cursor <cursoragent@cursor.com>
@IgorGanapolsky
IgorGanapolsky force-pushed the fix/picker-probe-jitter-20260722 branch from 30a982a to be16b91 Compare July 23, 2026 02:11
@github-actions
github-actions Bot merged commit c2bd936 into main Jul 23, 2026
11 checks passed
@IgorGanapolsky
IgorGanapolsky deleted the fix/picker-probe-jitter-20260722 branch July 28, 2026 16:49
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.

1 participant