Merge upstream/main into fork/dev (14 commits) - #400
Merged
Conversation
Co-authored-by: t3-code[bot] <219304759+t3-code[bot]@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
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>
…otgg#4844) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com>
…isting, update branch, reactions, in-place editing, smarter diffs (pingdotgg#6039) Co-authored-by: Julius Marminge <julius0216@outlook.com>
…ingdotgg#6330) Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
…6393) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tgg#6423) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
14 upstream commits, six conflicts. Notable incoming work: the pull request surfaces overhaul (pingdotgg#6039), T3 Connect environment deregistration (pingdotgg#4844), project favicons in command subtitles (pingdotgg#6330), and PR links that honour modifier-clicks (pingdotgg#6278, pingdotgg#6378). Resolutions: - LegacySidebar: upstream reworked the PR badge from a button into a real anchor so cmd/middle-click opens the PR in the browser. The fork had already replaced that icon badge with a numeric one, so taking upstream's block verbatim would have rendered two badges per row. Upstream's block is dropped and its anchor behaviour ported onto the fork's numeric badge — which the merged `handlePrClick` now requires anyway, since its event type became MouseEvent<HTMLAnchorElement>. - Sidebar.logic(.test): both sides added independent functions and describe blocks around a shared closing brace; unioned, with the fork's block closed explicitly so nothing ends up nested. - CommandPalette.logic: unioned both Pick<> field lists (fork's originSource / participantSummaries with upstream's modelSelection / session / worktreePath). - remote-access.md: kept both new sections. - mobile-showcase-environment: took upstream's added schema-wait helpers. Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
…dges Two adversarial reviews of the merge found the port was incomplete. The showcase script kept upstream's `waitForSeedableSchema` helpers but lost its call site to an auto-merge, leaving them dead and restoring the startup race they were added for: the environment server listens before it finishes migrating, so seeding could hit a table or column that does not exist yet. The fork's second numeric PR badge, in Recent Threads, was still a button. `useOpenPrLink` only leaves the native default alone for an anchor with an href, so middle-click and "open in new tab" did nothing there while working on the project rows — upstream's pingdotgg#6378 half-applied. It is now the same anchor. That conversion needs upstream's nested-link guard, which the recents row handler never had: without it a modifier-click on the badge would open the pull request *and* toggle the row's selection. Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
omegent-app Bot
added a commit
that referenced
this pull request
Aug 15, 2026
#401 was squash-merged. That kept the code and threw the lineage away: the 23 upstream commits stopped being ancestors, so `fork/dev` read as **29 commits behind upstream when only 6 were genuinely outstanding**, and the next sync would have re-merged and re-resolved all 23 — on the same mobile files that took sixteen conflicts to land the first time. Nobody noticed for two merges. It surfaced in a deploy alert that said **"Commits (2)"** for a range that had carried 23. ## What this adds A `push`-triggered check on `fork/dev` that fails when a commit which carried a sync has fewer than two parents, and prints the `-s ours` repair in the log. Sync commits are identified by **the head branch of the PR they came from**, not by their subject, because subjects vary by merge method: ``` Merge pull request #400 from patroza/sync/upstream-2026-08-12b Merge upstream/main into fork/dev (23 commits) (#401) merge: sync upstream through b73232b ``` A merge-button commit names the branch inline, so no API call is needed; squash and rebase commits are resolved through the API, with the subject line as a fallback when that is unavailable. **Ordinary fork PRs are untouched** — they are expected to squash, and are never checked. ## Verified against the real commits | commit | what it is | result | |---|---|---| | `5e63531b1` | #401, squash-merged sync | **fails**, exit 1 | | `0bf7835cc` | #400, sync merged properly | recognised as a sync, passes (2 parents) | | `a76069bd9` | #402, an ordinary squashed PR | not flagged | The third row is the one that matters most: the guard has to stay silent on your normal workflow. ## This detects, it does not prevent Worth being explicit, since it was the first question asked: **clicking merge does not fail.** The check runs after the merge lands, because GitHub has no per-PR merge-method control, and a repository-wide setting cannot allow squash for ordinary fork PRs while requiring a merge commit for syncs. Squash merges do fire `push` — `5e63531b1` triggered Fork CI at 08:08 — so this turns a silent, weeks-later discovery into a red check within a minute. Actual prevention is `gh pr merge <n> --merge`, which is how #398, #399 and #400 all landed correctly. That is now written into the sync runbook in `AGENTS.md`. If you would rather it be enforced at the button, the next step is a `sync:upstream` label workflow that merges the PR through the API once checks pass — say the word and I will add it. Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com> 🤖 Generated with [Claude Code](https://claude.com/claude-code) via [T3 Chat](https://t3.chat) on Discord --------- Co-authored-by: omegent-app[bot] <306514130+omegent-app[bot]@users.noreply.github.com> Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
14 upstream commits. Six conflicts, resolved by hand; two adversarial reviews (grok-4.6, gpt-5.6-sol) then found the merge had welded two of them incompletely, fixed in the follow-up commit.
Notable incoming work: the pull request surfaces overhaul (#6039 — filters and qualifiers, all-server listing, update branch, reactions, in-place editing), T3 Connect environment deregistration (#4844), project favicons in command subtitles (#6330), and PR links that honour modifier-clicks (#6278, #6378).
Conflicts
LegacySidebar.tsx— the interesting one. Upstream reworked the PR status badge from a<button>into a real<a href>so cmd/middle-click opens the PR in the browser. The fork had already replaced that icon badge with a numeric#1234one, so taking upstream's block verbatim would have rendered two badges per row. Upstream's block is dropped and its anchor behaviour ported onto the fork's badge — which the mergedhandlePrClickrequires anyway, since its event type becameMouseEvent<HTMLAnchorElement>.Sidebar.logic.ts/.test.ts— both sides added independent functions anddescribeblocks around a shared closing brace. Unioned, with the fork's block closed explicitly so nothing ends up nested (135it(blocks before and after).CommandPalette.logic.ts— unioned bothPick<>field lists: the fork'soriginSource/participantSummarieswith upstream'smodelSelection/session/worktreePath.remote-access.mdkept both new sections;mobile-showcase-environment.tstook upstream's added schema-wait helpers.What review caught
waitForSeedableSchemabut lost its call site to an auto-merge — the classic weld failure. That restored the exact startup race upstream added it for: the server listens before it finishes migrating, so seeding could hit a column that doesn't exist yet. Call site restored.setTimeout; the fork's Effect diagnostics reject that inscripts/. Opted out at the file header the way its siblingmobile-showcase.tsalready does, rather than rewriting upstream's helper.useOpenPrLinkonly leaves the native default alone for an anchor with an href, so middle-click and "open in new tab" did nothing there while working on project rows. Now the same anchor — and that conversion needs upstream's nested-link guard, which the recents row handler never had: without it a modifier-click on the badge would open the PR and toggle the row's selection.Known, not changed
Upstream's new command-subtitle maps key project metadata by
ProjectIdalone, ignoringenvironmentId. In this fork projects come from every connected environment, so two environments sharing aProjectIdwould cross their cwd/favicon/title.ProjectIdis a random UUID per environment, so that needs a collision or a copiedstate.sqlite— worth a follow-up, not worth restructuring upstream's new code inside a sync.Verification
pnpm typecheck(18 packages) ·pnpm test— 272 files, 0 failures ·vp buildinapps/web·vp check --fix·forkSurfaceExistence(the anti-stack-drop net) green.Co-authored-by: Patrick Roza 42661+patroza@users.noreply.github.com
🤖 Generated with Claude Code via T3 Chat on Discord