Before submitting
Area
apps/mobile
Steps to reproduce
- In the native mobile app, create a thread in a Git repository.
- Leave the default workspace mode on the current/local checkout and do not explicitly choose a branch in the branch picker.
- Start the task.
- Create or let the agent create a branch and an open pull request for the work.
- Return to native mobile Thread List v2.
Expected behavior
The thread should retain enough branch/change-request identity to show the matching PR badge once an open PR is discovered, just as a thread created with explicit branch metadata can.
At minimum, a new current-checkout thread should not persist branch: null merely because the user accepted the already displayed current-checkout default without opening the branch picker.
Actual behavior
The mobile creation flow can persist branch: null. The row's PR hook refuses to subscribe or render any PR when that field is null, so an existing open PR is invisible on the thread row.
This produces a misleading asymmetry: threads with stored branch metadata can show their PR badge, while a mobile-created current-checkout thread may never show one despite its repository and PR being valid.
Impact
Minor bug or occasional failure
Version or commit
Source inspected at 9146ed2f; behavior observed in the current iOS app with T3 server 0.0.31.
Environment
Native iOS app, Thread List v2, GitHub repository on a connected environment.
Notes
No private screenshot, repository name, branch name, or PR number is attached.
Relevant source path:
apps/mobile/src/features/threads/new-task-flow-provider.tsx
workspaceMode defaults to "local".
selectedBranchName defaults to null unless a branch was explicitly written into workspaceSelection.
- The automatic preferred/current-branch selection effect runs only for
workspaceMode === "worktree".
- Queued creation serializes
branch: workspaceSelection?.branch ?? null.
apps/mobile/src/features/threads/NewTaskDraftScreen.tsx
- Online creation passes
branch: selectedBranchName, which remains null for an untouched local/current-checkout default.
apps/mobile/src/state/use-thread-pr.ts
- Does not subscribe when
thread.branch === null.
- Returns null unless
status.refName === thread.branch.
A narrow first fix is to resolve and serialize the current local ref when the default local checkout is used. Please also consider the follow-on case where an agent switches branches after creation, since the PR matcher requires exact equality and branch identity can become stale.
Suggested regression coverage:
- New local/current-checkout task with an untouched branch control serializes the current local ref, not null.
- Explicit branch selection continues to win.
- Detached HEAD and non-repository projects remain safe and do not fabricate a branch.
- A matching live PR becomes visible through
useThreadPr().
Related but not duplicate:
This report is the native-mobile creation path storing no initial branch when the current-checkout default is accepted implicitly.
Before submitting
Area
apps/mobile
Steps to reproduce
Expected behavior
The thread should retain enough branch/change-request identity to show the matching PR badge once an open PR is discovered, just as a thread created with explicit branch metadata can.
At minimum, a new current-checkout thread should not persist
branch: nullmerely because the user accepted the already displayed current-checkout default without opening the branch picker.Actual behavior
The mobile creation flow can persist
branch: null. The row's PR hook refuses to subscribe or render any PR when that field is null, so an existing open PR is invisible on the thread row.This produces a misleading asymmetry: threads with stored branch metadata can show their PR badge, while a mobile-created current-checkout thread may never show one despite its repository and PR being valid.
Impact
Minor bug or occasional failure
Version or commit
Source inspected at
9146ed2f; behavior observed in the current iOS app with T3 server 0.0.31.Environment
Native iOS app, Thread List v2, GitHub repository on a connected environment.
Notes
No private screenshot, repository name, branch name, or PR number is attached.
Relevant source path:
apps/mobile/src/features/threads/new-task-flow-provider.tsxworkspaceModedefaults to"local".selectedBranchNamedefaults tonullunless a branch was explicitly written intoworkspaceSelection.workspaceMode === "worktree".branch: workspaceSelection?.branch ?? null.apps/mobile/src/features/threads/NewTaskDraftScreen.tsxbranch: selectedBranchName, which remains null for an untouched local/current-checkout default.apps/mobile/src/state/use-thread-pr.tsthread.branch === null.status.refName === thread.branch.A narrow first fix is to resolve and serialize the current local ref when the default local checkout is used. Please also consider the follow-on case where an agent switches branches after creation, since the PR matcher requires exact equality and branch identity can become stale.
Suggested regression coverage:
useThreadPr().Related but not duplicate:
This report is the native-mobile creation path storing no initial branch when the current-checkout default is accepted implicitly.