fix(server): avoid PRs inherited from default upstreams - #7317
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
ApprovabilityVerdict: Needs human review 1 blocking correctness issue found. You can customize Macroscope's approvability policy. Learn more. |
## What's Changed * feat(web): show project location in new thread picker by @StiensWout in pingdotgg/t3code#7392 * fix(packaging): install AUR launcher icons where icon themes look by @AugusDogus in pingdotgg/t3code#7421 * fix(web): label pull request merge actions by @tarik02 in pingdotgg/t3code#7381 * fix(server): avoid PRs inherited from default upstreams by @gsimone in pingdotgg/t3code#7317 * fix(desktop): stop the passkey dialog from popping as soon as sign-in opens by @t3dotgg in pingdotgg/t3code#7437 ## New Contributors * @AugusDogus made their first contribution in pingdotgg/t3code#7421 **Full Changelog**: pingdotgg/t3code@v0.0.34-nightly.20260818.1127...v0.0.34-nightly.20260818.1128 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.34-nightly.20260818.1128
pingdotgg#7437, pingdotgg#7459, pingdotgg#7460, pingdotgg#7445, pingdotgg#7122, pingdotgg#7317, pingdotgg#7381, pingdotgg#6563) Where upstream reworked something the fork had already built, upstream's version wins and the fork's extras ride on top: - Browser tab mute (pingdotgg#7252): upstream's rollback-on-refusal setAudioMuted and tabMuteMenuItem replace the fork's earlier copies; the fork's guest viewport override (setViewport/automationSetViewport) stays. - Passkey autofill (pingdotgg#7437): upstream's `passkeys` const replaces the fork's duplicate manualOnlyPasskeys. - Settle-once-on-merge (pingdotgg#7454): the sidebar now reports the whole change request (state + updatedAt) instead of a bare state, so the new rules can tell a fresh merge from inherited branch history. The fork's per-row reporting stays; upstream's semantics win. - Merge action labels (pingdotgg#7381): upstream's confirmation state object, extended with the fork's merge-stack action. Also: Clerk v6 moved `layout` into `options`, so the appearance override moves with it, and the connect-providers helper joins the web tsconfig include list. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 636caf4)
* test(web): remove duplicate lookup assertion (pingdotgg#7364) * fix(mobile): show structured input option descriptions (pingdotgg#7321) * fix(orchestration): do not revive idle tasks from status-free progress (pingdotgg#7172) * refactor(server): simplify error transformation with Effect.mapError in GitHubPullRequestCli (pingdotgg#7385) Signed-off-by: aoright <102943475+aoright@users.noreply.github.com> * fix(preview): open local environment ports on localhost (pingdotgg#7300) * fix(desktop): prevent quit shortcut spillover (pingdotgg#7397) * fix(desktop): stop overwriting a custom dock icon on launch (pingdotgg#7125) * feat(web): show project location in new thread picker (pingdotgg#7392) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * fix(packaging): install AUR launcher icons where icon themes look (pingdotgg#7421) * fix(web): label pull request merge actions (pingdotgg#7381) * fix(server): avoid PRs inherited from default upstreams (pingdotgg#7317) * fix(desktop): stop the passkey dialog from popping as soon as sign-in opens (pingdotgg#7437) * feat(desktop): mute a browser tab (pingdotgg#7252) * fix(web): improve disconnected composer placeholder (pingdotgg#7122) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com> * fix(desktop): throttle hidden preview rendering (pingdotgg#7445) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com> * fix(server): stop probing Grok, Cursor, and OpenCode unless turned on (pingdotgg#7459) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(desktop): boot the main window unthrottled so cold start paints at full speed (pingdotgg#7460) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(threads): a merged PR settles its thread only once (pingdotgg#7454) * feat(cli): npx t3 triage hands broken installs to your own coding agent (pingdotgg#6563) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(marketing): Safari gets the arm64 Mac download (pingdotgg#7473) * feat(web): add shortcuts to the surface dropdown (pingdotgg#7318) * fix(marketing): never serve the Intel build to Apple Silicon Macs (pingdotgg#7477) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): animate command palette when closing (pingdotgg#5169) * fix(desktop): upgrade Clerk OAuth transport (pingdotgg#7479) * feat(server): run the background service on macOS via launchd (pingdotgg#6286) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): align sidebar statuses with project names (pingdotgg#7491) Co-authored-by: GPT-5.6 <noreply@openai.com> * fix(desktop): close the window before quit cleanup (pingdotgg#6562) * fix(desktop): stop automatic passkey prompts (pingdotgg#7522) * docs(user): document phoenix triage and macOS background service The 2026-08-19 upstream sync added the triage command with no docs/user entry, and the docs index still called the background service Linux-only after launchd support landed. Found by PR #61 code review. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Signed-off-by: aoright <102943475+aoright@users.noreply.github.com> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Nick Anisimov <n.anisimov.23@gmail.com> Co-authored-by: Maslin Edwin <maslinje@gmail.com> Co-authored-by: aoright <102943475+aoright@users.noreply.github.com> Co-authored-by: Guilherme Barros <gbarros1095@gmail.com> Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com> Co-authored-by: Rishet11 <154429365+Rishet11@users.noreply.github.com> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: Augie <augie@luebbers.email> Co-authored-by: Taras <Taras.Fomin@gmail.com> Co-authored-by: Gianmarco <gianmarcosimone89@gmail.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Chris Deeming <chris@xenforo.com> Co-authored-by: Inaya Yousfi <zied.essaber@gmail.com> Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Rakshith Bhat <88523594+RakshithBhat03@users.noreply.github.com> Co-authored-by: GPT-5.6 <noreply@openai.com>
Problem
A local feature branch can legitimately track the repository's default branch when it is created from a remote start point:
Git records
origin/mainas the new branch's upstream. T3 currently derives the PR head selector from that upstream, so it searches for PRs whose head ismaininstead offeature/local-worktree.If the repository has ever merged a reverse PR with
mainas its head and another branch as its base, T3 associates that historical merged PR with the unrelated feature thread. The merged PR state then feeds the normal thread lifecycle and auto-settles the thread once its session is idle.This is intermittent across repositories and worktrees because it requires both:
Anonymized reproduction
A public repository containing only synthetic fixture data is available at:
https://github.com/gsimone/t3-default-upstream-pr-repro
Its merged PR #1 deliberately uses
mainas the head andmaintenance-targetas the base:gsimone/t3-default-upstream-pr-repro#1
Reproduce the Git state with:
Before this fix, opening a T3 thread for
/tmp/t3-pr-repro-worktreecan show the merged synthetic PR even thoughfeature/local-worktreehas no PR. When the thread becomes idle, the unrelated merged state can move it to the settled shelf.Expected behavior: the remote default branch is treated as the feature branch's starting/base relationship, not as its published PR head.
Fix
Verification
vp test run apps/server/src/git/GitManager.test.ts— 83 passedpnpm --filter t3 typecheck— passed (existing unrelated Effect suggestions only)Implemented with GPT-5.6 Sol through the Codex harness in T3 Code.
Note
Fix PR status resolution to ignore PRs inherited from default branch upstreams
origin/main(or the repo's default branch) in the same repository,GitManager.statusnow returnsnullfor the PR lookup instead of inheriting a merged PR from that default branch.contributor:main) are still resolved correctly, since the early-exit only applies to same-repo branches.prLookupCacheKeynow includesdefaultBranchso cache entries are correctly segmented when the default branch varies.defaultBranchis added toGitRemoteStatusDetailsand propagated fromGitVcsDriverCorethrough tolookupStatusPr.Macroscope summarized 81a3765.