Skip to content

fix(web): leaving the home page while the app loads no longer bounces you to a new draft - #18672

Merged
shivamhwp merged 2 commits into
pingdotgg:mainfrom
shivamhwp:fix/web-startup-draft-redirect
Oct 13, 2026
Merged

shivamhwp merged 2 commits into
pingdotgg:mainfrom
shivamhwp:fix/web-startup-draft-redirect

Conversation

@shivamhwp

Copy link
Copy Markdown
Collaborator

Problem

If you leave the home page while the app is still loading, the app can pull you back to a new draft thread a moment later.

A user hit this through the Nightly "Get the beta app" popup. The popup shows during startup. Tapping it opened Settings → General, then the app jumped to a new draft, so the button seemed to go nowhere. Any navigation away from the home page during startup can hit this, not just the popup.

Closes: no issue filed. Reported by a Nightly user on X.

Change

On startup the home page waits for threads to load, then opens a draft for your latest project. The router switches to the new address as soon as you navigate, but the home page stays on screen until the next page finishes loading. If threads finish loading inside that gap, the home page starts the draft. useNewThreadHandler remembers the address at that moment, which is already Settings. Its "did the route change?" check then compares Settings to Settings, sees no change, and replaces Settings with the draft.

The home page now starts the draft only if the router is still on /. One file: apps/web/src/routes/_chat.index.tsx.

Scope and approval

A small fix for an obvious bug: the app overrides a navigation the user just chose. It touches one check in one route and changes nothing else.

Verification

Web dev server set up as Nightly, phone-size Chromium window (390×844), CPU slowed 6×, real data copied into the worktree. A yellow label at the bottom shows the current URL. The test taps "Get the beta app" 0.8 s after the popup appears.

To make the timing repeatable, the recording holds back the Settings → General page code for 5 s, like a slow network. Without that delay I caught the same jump unaided on the dev server, with a stack trace pointing at useHandleNewThread.ts, but it only happens some of the time.

Before: Settings opens, then the app jumps to /draft/… After: stays on Settings and scrolls to the Mobile app row

Router log, same setup, two runs each way:

  • Before: tap → /settings/general#nightly-mobile-beta → /draft/… about 1.5–2 s later, in both runs.
  • After: tap → /settings/general#nightly-mobile-beta → /settings/general once the scroll lands, in both runs.
  • With nothing tapped, startup still leaves the home page on its own, as before.

Also checked:

  • Typecheck passes for apps/web.
  • Lint adds no new warnings. The remaining exhaustive-effect-dependencies warning on startState.retryRequest was already there.

Not checked:

  • A packaged desktop build. The dev desktop app on a virtual display took the user to the right place in my runs.
  • Safari on a real iPhone.

Claude Opus 5.5 via Claude Code, running in T3 Code.

🤖 Generated with Claude Code

… you to a new draft

The home page opens a draft for the latest project once threads load. It
stays mounted while a navigation away from "/" is still loading, but the
router already points at the new page, so the draft step's own
"did the route change?" guard saw no change and replaced the page the user
picked. Tapping "Get the beta app" in the Nightly popup during startup hit
this: Settings opened, then the app jumped to a new draft.

Only start the draft while the router is still on "/".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Oct 12, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6c639c3

Macroscope's review found this PR approvable — This is a small, self-contained fix to prevent startup draft creation from overriding navigation away from the home page. Existing home-page behavior remains unchanged when the user stays on /, with no broader API, schema, infrastructure, or configuration impact.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: ee75dde2-370b-43ff-9140-19df4f4db61e
📥 Commits

Reviewing files that changed from the base of the PR and between 6c639c3 and 8130a7b.

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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b216bb0d-7751-4897-9e68-ba59b785a6d5
📥 Commits

Reviewing files that changed from the base of the PR and between 5753207 and 6c639c3.

📒 Files selected for processing (1)
  • apps/web/src/routes/_chat.index.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

📝 Walkthrough

The index route now checks the current pathname before starting a draft. If navigation has moved away from /, the effect returns without starting one.

Changes: Index draft guard

Layer / File(s) Summary
Check the current pathname
apps/web/src/routes/_chat.index.tsx
IndexDraftLanding uses useRouter and useEffectEvent to read the current pathname. The effect skips draft creation when the pathname is not /.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Suggested reviewers: juliusmarminge

Merge Risk: ⚪ Minimal · up to 6c639

The guard preserves navigation away from the home page during startup. No identified issue remains that should block merging.

Pre-merge checks | Passed 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check Passed The title clearly and concisely describes the startup navigation race and the fix that prevents users from being redirected to a new draft.
Description check Passed The description includes complete Problem, Change, Scope and approval, and Verification sections. It explains reproduction, implementation, evidence, test results, limitations, and the agent used.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@shivamhwp
shivamhwp merged commit 346247b into pingdotgg:main Oct 13, 2026
28 checks passed
aorwall added a commit to aorwall/t3code that referenced this pull request Oct 13, 2026
Merges upstream `pingdotgg/t3code` `5070a83a32` (48 commits, base
`e688034b5f`) into the fork. It does not stack on another PR.

## Merge
- 240 of 240 upstream-range files landed. Fork delta: 775 files.
- One conflict: `apps/web/src/routeTree.gen.ts`, regenerated for
upstream's new `/_chat/new` route. The other 18 files both sides touched
auto-merged: `duplicate-adds` and `resolution-check` are clean, and
every delta guard holds.
- `pnpm-lock.yaml` was re-derived by install, and `verify --only
lockfile` passes.
- Sweep: `promptLinks/HostedPromptLinkLanding.tsx` renders only in the
`hosted-static` auth state, which Moatless never reaches. Taken as
upstream's.
- Unsupported methods: ADD 0, DROP 0.

## Verification
`verify.mjs` passes duplicate-adds, tripwires, resolution-check,
unsupported-methods, lockfile, fmt, lint, typecheck and build. `test`
fails only on files that fail alone and failed the same way on the last
three merges, because of the sandbox: shared `AgentScope`
(`oom_score_adj` is 935 here), server `ServerBrowserPage` (no Playwright
browser), `AcpAdapterV2`, `OrchestratorReplayFixtures`, and
provider-opencode `OpenCodeServerLedger`.

## Usable as-is
- Prompt links (pingdotgg#18454): `/new?prompt=…`, `ThreadLinkPrompt` on thread
routes, and copy-prompt-link from messages and the command palette.
Choosing a project and placing the prompt work against Moatless.
- Terminal colors (pingdotgg#17168), context meter rounding (pingdotgg#17539), stable
button text (pingdotgg#18866), setup wizards follow themes (pingdotgg#18725), Git actions
follow the selected thread (pingdotgg#18862), dropped threads attach to pending
answers (pingdotgg#18789), the compact merge-button second click (pingdotgg#18878), a
numeric `q` on pull requests (pingdotgg#18666), the home-page bounce fix
(pingdotgg#18672), running terminals shown in the sidebar (pingdotgg#18740), and
computer-use titles (pingdotgg#18865).
- Mobile and desktop fixes (theme contrast, settings rows, the PR action
bar, image caching, the iOS 27.2 black screen, Hyprland, updater
diagnostics).
- "Update everything" sidebar pill (pingdotgg#18053): inert against Moatless,
which advertises no `serverSelfUpdate` or `versionAdvisory`.

## Unsupported in Moatless / needs implementation
- Prompt-link "clone this repository"
(`NewThreadLinkView.cloneRepository`): needs `projectClone.start` and
the `projectCloneTracking` capability. It refuses with a message today.
Added to gaps.md under *Project and repository management*.
- Renaming built-in models (pingdotgg#18840): saves through
`server.updateSettings` (custom model entry with a built-in slug). It
stays behind `FEATURES.providerConfiguration`, under the existing
settings gap.
- Provider secret settings (pingdotgg#18505, `secretSetting` and
`isSecretSetting` in contracts): stored on the host, so they fall under
the same settings gap.

## Backend behavior to consider reproducing in Moatless
Recorded in gaps.md under *Runtime fixes upstream made to its own
server*:
- A confirmed Claude subagent outcome settles that task and its child
work (pingdotgg#18778, the new `subagent` target on
`thread.background-work.settle`).
- Claude thinking before a tool call stays a collapsed Thought (pingdotgg#18887).
- Codex title and branch-name generation no longer starts the user's MCP
servers (pingdotgg#17058).
- The event store resyncs a thread holding an event type from a newer
build (pingdotgg#15937, `isKnownOrchestrationV2EventType`).
- A migration id clash stops startup with a clear error (pingdotgg#15925).
- Cached branch PR lookups start no git process (pingdotgg#17063).
- PR head commits are reported for Forgejo, GitLab and Bitbucket
(pingdotgg#18463, pingdotgg#18608, pingdotgg#18402), and PR bases resolve to branch names (pingdotgg#18754).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---
Moatless task:
https://moatless.soaplabstest.com/tasks/dcd13b46-6495-4b1d-af7c-03da83644d11
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 13, 2026
## What's Changed
* fix(server): apply confirmed Claude subagent outcomes by @Yash-Singh1 in pingdotgg/t3code#18778
* fix(mobile): Browser page no longer logs a duplicate key warning by @tris203 in pingdotgg/t3code#18776
* fix(web): a numeric q in the pull requests URL no longer crashes the page by @ScottN-PV in pingdotgg/t3code#18666
* fix(client): T3 Connect clients reconnect once a new tunnel is ready by @shivamhwp in pingdotgg/t3code#16554
* fix(web): leaving the home page while the app loads no longer bounces you to a new draft by @shivamhwp in pingdotgg/t3code#18672
* fix(mobile): attachment images no longer re-download on every reconnect by @shivamhwp in pingdotgg/t3code#18824
* fix(server): a migration id clash stops startup with a clear error instead of crash-looping by @shivamhwp in pingdotgg/t3code#15925
* fix(server): a thread with an event type from a newer build can still resync after a downgrade by @shivamhwp in pingdotgg/t3code#15937
* fix(server): Codex titles and branch names no longer start the user's MCP servers by @brycedbjork in pingdotgg/t3code#17058
* fix(server): Claude thinking before a tool call stays a collapsed Thought by @maria-rcks in pingdotgg/t3code#18887
* perf(server): cached branch PR lookups no longer start git processes by @SunkenInTime in pingdotgg/t3code#17063
* fix(web): compact merge buttons show when they need a second click by @TonybynMp4 in pingdotgg/t3code#18878
* fix(mobile): pull requests load from another environment when theirs is offline by @juliusmarminge in pingdotgg/t3code#18698
* perf(web): collect active tool calls without array shifts by @saphid in pingdotgg/t3code#18853
* fix(web): center the pace icon on the limit card's "left" label by @akash3444 in pingdotgg/t3code#18580
* fix(web): update everything includes npm-installed servers again by @ScottN-PV in pingdotgg/t3code#18709
* fix(server): review guides find Bitbucket heads reported by short hash by @ahilles107 in pingdotgg/t3code#18900
* fix(web): scheduled task model picker no longer shifts the dialog by @flamboh in pingdotgg/t3code#18940
* fix(ci): CodeRabbit reviews no longer request changes by @Yash-Singh1 in pingdotgg/t3code#18954

## New Contributors
* @brycedbjork made their first contribution in pingdotgg/t3code#17058

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261013.3042...v0.0.46-nightly.20261013.3053

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261013.3053
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 13, 2026
## What's Changed
* fix(server): apply confirmed Claude subagent outcomes by @Yash-Singh1 in pingdotgg/t3code#18778
* fix(mobile): Browser page no longer logs a duplicate key warning by @tris203 in pingdotgg/t3code#18776
* fix(web): a numeric q in the pull requests URL no longer crashes the page by @ScottN-PV in pingdotgg/t3code#18666
* fix(client): T3 Connect clients reconnect once a new tunnel is ready by @shivamhwp in pingdotgg/t3code#16554
* fix(web): leaving the home page while the app loads no longer bounces you to a new draft by @shivamhwp in pingdotgg/t3code#18672
* fix(mobile): attachment images no longer re-download on every reconnect by @shivamhwp in pingdotgg/t3code#18824
* fix(server): a migration id clash stops startup with a clear error instead of crash-looping by @shivamhwp in pingdotgg/t3code#15925
* fix(server): a thread with an event type from a newer build can still resync after a downgrade by @shivamhwp in pingdotgg/t3code#15937
* fix(server): Codex titles and branch names no longer start the user's MCP servers by @brycedbjork in pingdotgg/t3code#17058
* fix(server): Claude thinking before a tool call stays a collapsed Thought by @maria-rcks in pingdotgg/t3code#18887
* perf(server): cached branch PR lookups no longer start git processes by @SunkenInTime in pingdotgg/t3code#17063
* fix(web): compact merge buttons show when they need a second click by @TonybynMp4 in pingdotgg/t3code#18878
* fix(mobile): pull requests load from another environment when theirs is offline by @juliusmarminge in pingdotgg/t3code#18698
* perf(web): collect active tool calls without array shifts by @saphid in pingdotgg/t3code#18853
* fix(web): center the pace icon on the limit card's "left" label by @akash3444 in pingdotgg/t3code#18580
* fix(web): update everything includes npm-installed servers again by @ScottN-PV in pingdotgg/t3code#18709
* fix(server): review guides find Bitbucket heads reported by short hash by @ahilles107 in pingdotgg/t3code#18900
* fix(web): scheduled task model picker no longer shifts the dialog by @flamboh in pingdotgg/t3code#18940
* fix(ci): CodeRabbit reviews no longer request changes by @Yash-Singh1 in pingdotgg/t3code#18954

## New Contributors
* @brycedbjork made their first contribution in pingdotgg/t3code#17058

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261013.3042...v0.0.46-nightly.20261013.3053

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261013.3053
adampeterhiggins added a commit to adampeterhiggins/t3code that referenced this pull request Oct 13, 2026
* fix(gitlab): merge request details report their head commit (pingdotgg#18608)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* feat(server): rename built-in models from settings (pingdotgg#18840)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): Git actions follow the selected thread (pingdotgg#18862)

* fix(desktop): preserve updater failure causes in diagnostics (pingdotgg#18864)

* fix(web): attach dropped threads to pending answers (pingdotgg#18789)

* fix(web): keep button text stable during press scaling (pingdotgg#18866)

* fix(bitbucket): preserve PR head commits for review guides (pingdotgg#18402)

* fix(server): return null for unresolved optional commands (pingdotgg#18871)

* fix: show computer-use action titles and align app icons (pingdotgg#18865)

* fix(server): apply confirmed Claude subagent outcomes (pingdotgg#18778)

* fix(mobile): Browser page no longer logs a duplicate key warning (pingdotgg#18776)

* fix(web): a numeric q in the pull requests URL no longer crashes the page (pingdotgg#18666)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(client): T3 Connect clients reconnect once a new tunnel is ready (pingdotgg#16554)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(web): leaving the home page while the app loads no longer bounces you to a new draft (pingdotgg#18672)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(mobile): attachment images no longer re-download on every reconnect (pingdotgg#18824)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(server): a migration id clash stops startup with a clear error instead of crash-looping (pingdotgg#15925)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: PR Batch Tester <agent@local.test>

* fix(server): a thread with an event type from a newer build can still resync after a downgrade (pingdotgg#15937)

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: PR Batch Tester <agent@local.test>

* fix(server): Codex titles and branch names no longer start the user's MCP servers (pingdotgg#17058)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix(server): Claude thinking before a tool call stays a collapsed Thought (pingdotgg#18887)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* perf(server): cached branch PR lookups no longer start git processes (pingdotgg#17063)

* fix(web): compact merge buttons show when they need a second click (pingdotgg#18878)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(mobile): pull requests load from another environment when theirs is offline (pingdotgg#18698)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* perf(web): collect active tool calls without array shifts (pingdotgg#18853)

Co-authored-by: SAPHID <saphid@users.noreply.github.com>
Co-authored-by: GPT-6.1 Sol <noreply@openai.com>

* fix(web): center the pace icon on the limit card's "left" label (pingdotgg#18580)

* fix(web): update everything includes npm-installed servers again (pingdotgg#18709)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(server): review guides find Bitbucket heads reported by short hash (pingdotgg#18900)

Co-authored-by: Pawel Mikolajczuk <pmikolajczuk@atlassian.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): scheduled task model picker no longer shifts the dialog (pingdotgg#18940)

* fix(ci): CodeRabbit reviews no longer request changes (pingdotgg#18954)

---------

Co-authored-by: Scott Norteman <snorteman@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Paweł Mikołajczuk <pawel@mikolajczuk.in>
Co-authored-by: Tristan Knight <admin@snappeh.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Bryce Bjork <brycedbjork@gmail.com>
Co-authored-by: maria <maria@kuuro.net>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: Antony <97451137+TonybynMp4@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Alex Southwell <saphid@gmail.com>
Co-authored-by: SAPHID <saphid@users.noreply.github.com>
Co-authored-by: GPT-6.1 Sol <noreply@openai.com>
Co-authored-by: Akash Moradiya <64416825+akash3444@users.noreply.github.com>
Co-authored-by: Pawel Mikolajczuk <pmikolajczuk@atlassian.com>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 10-29 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