Skip to content

Mobile: combined fixes test branch (scroll, back-swipe, thread lists, computer switching)#3687

Open
t3dotgg wants to merge 14 commits into
mainfrom
integration/test-all
Open

Mobile: combined fixes test branch (scroll, back-swipe, thread lists, computer switching)#3687
t3dotgg wants to merge 14 commits into
mainfrom
integration/test-all

Conversation

@t3dotgg

@t3dotgg t3dotgg commented Jul 4, 2026

Copy link
Copy Markdown
Member

Note

Draft integration branch combining several in-flight mobile fixes for on-device testing. One commit per fix; not intended to merge as-is.

What Changed

All changes scoped to apps/mobile/ (plus one dependency bump):

  • Fix thread scroll jump after send — dismiss the keyboard before the anchor scroll so a swallowed close event can't leave a phantom bottom inset; apply the RN 0.81 contentInset hit-test workaround so the blank area after a send is scrollable.
  • Fix dead far-left-edge back swipe — remove the legacy thread navigation drawer and its left-edge pan gesture, which stole edge touches from the native back-swipe recognizer. The drawer was unreachable dead code from the old sheet-based routing.
  • Quick new-thread button per project — pencil button in each Home project group header that opens the new-task draft pre-targeted to that project.
  • Recent-threads window on Home — project groups default to threads from the last 5 days (or the 3 most recent), integrated with the existing Show more/less pagination.
  • Stable timestamps — sub-minute times render as <1m instead of a ticking seconds counter; fixed-width timestamp column to stop layout shifts.
  • Fix silent computer-switch failure — the machine picker only offers environments hosting the selected repository, so switching computers keeps the same repo instead of silently picking the first project.
  • Bigger new-task composer text — headline type role (18pt, Dynamic Type-aware) instead of body.
  • Bump react-native-keyboard-controller 1.21.6 → 1.21.13 — the app was below @legendapp/list's required 1.21.7; includes upstream fixes for non-scrollable chat scroll views with large blank space. Needs a fresh native build.

Checklist

  • This PR is small and focused (combined test branch by design)
  • I explained what changed and why
  • Screenshots/videos pending device testing

🤖 Generated with Claude Code


Note

Medium Risk
Touches core navigation, keyboard/scroll timing, and new-task environment selection; changes are localized to mobile UI with added tests but need on-device validation.

Overview
Bundles several mobile UX fixes: thread detail no longer uses the slide-out ThreadNavigationDrawer or its left-edge pan (which blocked native back-swipe); compact thread routes without stack history get a Home header button instead.

After send, ThreadDetailScreen waits for KeyboardController.dismiss() before anchor scroll to avoid a stuck bottom inset; ThreadFeed enables the RN contentInset hit-test workaround so the blank area below the last message is scrollable. react-native-keyboard-controller is bumped to 1.21.13.

Home project groups now default to a 5-day recency window (or the 3 newest threads), with Show more/less tied to that baseline; search still shows full history. Group headers gain a + action (single real project only) that opens NewTaskDraft pre-scoped to that project.

New-task flow filters the machine picker to environments that host the selected repo and remaps the project when switching machines. Composer prompt uses headline typography; relativeTime shows <1m with a fixed-width timestamp column to stop row jitter.

Reviewed by Cursor Bugbot for commit cf9a564. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix scroll, back-swipe, and thread list behavior in mobile app

  • Removes the thread navigation drawer and replaces it with a Home button in the header for compact layouts without navigation history (ThreadRouteScreen.tsx)
  • Fixes a stuck bottom inset after sending a message by waiting for keyboard dismissal via KeyboardController.dismiss before scrolling to anchor (ThreadDetailScreen.tsx)
  • Scopes the environment picker in the new-task flow to machines that host the selected repository, and preserves the same repository when switching environments (new-task-flow-provider.tsx)
  • Home list groups now baseline on recent threads (5-day window, fallback to 3) per project; show-more/show-less compares against this baseline rather than a global constant
  • Adds a plus button to single-project group headers in the home list to quickly create a new thread scoped to that project
  • Changes relativeTime output under one minute from 'now'/seconds to '<1m' to reduce timestamp layout jitter

Macroscope summarized cf9a564.

t3dotgg and others added 7 commits July 4, 2026 04:15
The new-task draft composer (route /new/draft) typed its text at the
compact 14pt `composer` size, which felt too small for a full-screen,
primary task-description input. Bump it to the iOS-standard 17pt body
size via the existing `headline` typography token.

Scoped to the new-task screen only; the in-thread ThreadComposer pill
keeps its intentional 14pt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…7dad)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…795bc9), resolve import conflict

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…resolve HomeScreen conflicts

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 58ecf259-549d-48d7-98af-b9bffc40dd15

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch integration/test-all

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Jul 4, 2026
Comment thread apps/mobile/src/features/threads/new-task-flow-provider.tsx
Comment thread apps/mobile/src/app/index.tsx Outdated
…s onto the split-view restructure

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Comment thread apps/mobile/src/features/threads/thread-list-items.tsx
Comment thread apps/mobile/src/features/home/homeListItems.ts
t3dotgg and others added 3 commits July 4, 2026 05:58
…Inset scroll fixes

The far-edge/blank-area scroll failures trace to the keyboard-controller
version: @legendapp/list's KeyboardAwareLegendList requires >= 1.21.7,
and 1.21.12 additionally fixes the non-scrollable KeyboardChatScrollView
when blankSpace is large (viewport clamp + Android touch-dispatch
workaround).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The drawer gesture's 40px-wide left-edge hitSlop spans the full screen
height; its y-position check only ran in onEnd, after the pan had
already activated and stolen the touch from the native back-swipe
recognizer. Fail the gesture immediately when the touch starts below
the header so left-edge back-swipes work everywhere else.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The drawer predates the current navigation (it shipped with the old
sheet-based thread routing). On phones its only trigger was an invisible
40px left-edge pan that competed with the native back swipe — the cause
of the dead far-left-edge back gesture — and on split view it never
rendered at all. Thread switching now goes through Home (compact) or the
persistent sidebar (split view), so the drawer, its gesture, its modal
component, and the now-orphaned thread-navigation-groups helpers are all
removed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions github-actions Bot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Jul 4, 2026
@t3dotgg t3dotgg changed the title Mobile: combined test branch — 7 in-flight mobile improvements Mobile: combined fixes test branch (scroll, back-swipe, thread lists, computer switching) Jul 4, 2026
@coderabbitai

coderabbitai Bot commented Jul 4, 2026

Copy link
Copy Markdown

Note

Unit test generation is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it.


Generating unit tests... This may take up to 20 minutes.

@t3dotgg t3dotgg marked this pull request as ready for review July 4, 2026 13:17
- selectEnvironment: fall back to workspace basename, then title, when the
  selected project has no repositoryIdentity, so computer switching still
  follows the same repo instead of resetting to the target's first project.
- ThreadListGroupHeader: lift the new-thread button out of the collapse
  toggle Pressable — nested touchables are invisible to VoiceOver/TalkBack.
- homeListItems: compare canShowLess against the group's recency baseline
  instead of the global page size, so stale groups can collapse back.
- HomeScreen: only offer the quick new-thread button on single-project
  groups; an aggregated group's representative is arbitrary.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Comment thread apps/mobile/src/features/threads/ThreadRouteScreen.tsx
@macroscopeapp

macroscopeapp Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

1 blocking correctness issue found. This PR introduces multiple runtime behavioral changes (thread recency filtering, environment switching, removed drawer navigation) and has an unresolved review comment about a missing collapse/expand chevron indicator. The scope and the identified UX bug warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@cursor cursor Bot 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.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 3edb72e. Configure here.

Comment thread apps/mobile/src/features/threads/new-task-flow-provider.tsx
Comment thread apps/mobile/src/features/threads/new-task-flow-provider.tsx
Comment thread apps/mobile/src/features/home/HomeScreen.tsx
Comment thread apps/mobile/src/features/threads/thread-list-items.tsx
@coderabbitai

coderabbitai Bot commented Jul 4, 2026

Copy link
Copy Markdown

✅ Created PR with unit tests: #3688

- Replace the pencil icon with a larger plus, flush right with full-height
  padded hit area; drop the fold/unfold chevron (title press still toggles).
- Give the collapse toggle back its padded hit area (was reduced when
  padding moved to the outer View).
- Hide the quick new-thread button on synthetic pending-project groups.
- Environment picker: fall back to workspace basename/title matching when
  either side lacks repositoryIdentity, so still-indexing hosts stay visible.
- Deep-link/cold-start threads (no back stack) get an explicit header
  button to reach the threads list.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

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.

🟡 Medium

ThreadListGroupHeader no longer renders the collapse/expand chevron. The old chevron.right/chevron.down glyph was removed and replaced only by the plus new-thread button (or a blank spacer when onNewThread is absent), so every project header gives no visual indication of its collapsed state and looks non-collapsible. Consider restoring the disclosure chevron inside the toggle Pressable so the expanded/collapsed state is visible again.

🚀 Reply "fix it for me" or copy this AI Prompt for your agent:
In file @apps/mobile/src/features/threads/thread-list-items.tsx around line 95:

`ThreadListGroupHeader` no longer renders the collapse/expand chevron. The old `chevron.right`/`chevron.down` glyph was removed and replaced only by the `plus` new-thread button (or a blank spacer when `onNewThread` is absent), so every project header gives no visual indication of its collapsed state and looks non-collapsible. Consider restoring the disclosure chevron inside the toggle `Pressable` so the expanded/collapsed state is visible again.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Intentional — the disclosure chevron was removed at the maintainer's request; tapping the project title row toggles collapse. Declining this one.

Comment thread apps/mobile/src/features/threads/new-task-flow-provider.tsx Outdated
A pending-task placeholder project has workspaceRoot "" when no cwd was
snapshotted; an "" basename rejected every real host, emptying the
environment picker for that queued task.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
nnNyx added a commit to nnNyx/t3code that referenced this pull request Jul 4, 2026
navigationPathConfig was built in Stack.tsx but never passed to the
navigation container, so appLinking had prefixes and no config: a
cold-start deep link produced a single-screen stack and back finished
the activity (Android back-swipe quit the app). Wire the config with
initialRouteName Home so deep-linked threads get a Home route beneath
them. Upstream pingdotgg#3687 works around the same symptom with a header Home
button; this fixes the cause.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL 500-999 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant