Skip to content

chore(upstream): sync reviewed changes through dab5f6e6e - #115

Merged
richardsolomou merged 79 commits into
mainfrom
ras-code/sync-upstream-9
Sep 5, 2026
Merged

chore(upstream): sync reviewed changes through dab5f6e6e#115
richardsolomou merged 79 commits into
mainfrom
ras-code/sync-upstream-9

Conversation

@richardsolomou

Copy link
Copy Markdown
Owner

What Changed

Forty-four upstream changes reviewed against their real diffs and recorded in upstream/sync.json: 28 adopted, 14 adapted, 1 obsolete, 1 skipped. lastReviewed moves to dab5f6e6e, leaving 259 unreviewed.

Twenty-eight needed no decision, and adopt-aligned carried runs of 9, 3 and 2 without stopping. The ones that needed judgement:

#9597, shared runtime instructions (adapted). Upstream introduced buildRuntimeInstructions, now used by all seven adapters, which duplicates the bespoke <runtime_info> string #81 wrote for Codex. Ours is deleted and the shared builder carries what it carried: the exact-identifier wording a gateway-routed model needs, and images that resolve inside the project directory rather than upstream's "absolute file paths", which this server does not serve. The long-form image rules stay appended for Codex and Claude.

#8769, markdown image previews (adapted). Upstream moved ThreadMarkdownImageView out of ThreadFeed.tsx into its own module so file previews can share it. Took the move and carried the failureReason and detail placeholder from #45 into the new file. The inline codeBackground styling that looked like ours turned out to be upstream's own older shape, so it went.

#9673, bounded diff highlighting (adapted). Upstream's chunked tokenizer replaces our tokenizeTimeLimit-only guard. The limit itself stays at 0: their chunks still call codeToTokensBase with Shiki's 500ms default, which corrupts grammar state for everything after a slow chunk.

#9662, thread summary queries (adapted). Our fallback-offer count joins upstream's approval count query, and latestAssistantSummary moved to a new getLatestSettledAssistantText query rather than keeping the full message-list load this change exists to remove.

#9688, chat feed row reuse (adapted). Upstream's new activity-entry cache is keyed by resolver as well as activities, so a provider rename is not served a stale instance name.

#9602, headless setup diagnostics (adapted). Added RelayEnvironmentLinkLimitExceededError to the contracts: the relay can return it and we could not decode it. Two hunks touch surfaces this fork does not carry, both from upstream changes that predate the ledger.

#9679 (obsolete) skips the legacy home list build; #23 deleted that path outright. #9682 (skipped) is marketing.

Two fork consumers a clean pick broke

perf(web): defer composer draft serialization removed createDebouncedStorage, which the split chat panes from #63 still used. The pane layout now goes through createDeferredStorage like composer drafts, so a no-op set no longer stringifies the layout, and a round-trip test covers it. perf(clients): avoid waiting to read cached relay tokens brought a fixture using cloudflare_tunnel, which #54 removed from RelayManagedEndpointProviderKind when it replaced managed tunnels with the RAS relay.

Rebrand map

Two bugs, both the same shape as the three before them, a rule that works on a bare token and not in context:

  • An escaped newline in a source string ends in n, so \nT3 Code had no word boundary before the name and fell through to the bare-shorthand rule, producing "RAS Code Code".
  • RelayPublicClientId spells the relay client ids ras-mobile and ras-web, so the catch-all kebab rule was producing ids the schema rejects. The replacement rule needed tightening too: \b after mobile matches a following hyphen, so it first rewrote t3-mobile-composer.

Skill

Three rules encoded, each from something that cost time in this round:

  • When the parent sync branch was squash-merged, rebase onto origin/main instead of merging it. Squashing moves the merge base behind the parent's commits, so both sides look like they added the same code and git duplicates it without reporting a conflict. That is how this branch briefly acquired a redeclared findRemoteTrackingRemote and three duplicate function implementations in UsageLimits.tsx, none of them a conflict.
  • When upstream ships their own version of something we built, delete ours and take theirs whole unless ours does something theirs does not. Two implementations of one feature costs the maintenance and still conflicts on every future upstream edit.
  • Reinstall before a mid-round typecheck if a pick touched a manifest. A dependency bump lands in the lockfile but not in node_modules, so the typecheck reads the old package's types and reports errors in code that is correct against the new one.

Why

We want upstream's improvements without their repository structure, feature set or release cadence, and we want our copy of a file to stay close enough to theirs that their next edit applies. Each change is reviewed on its own diff and recorded with a decision.

UI Changes

Web picks up desktop titlebar interactions, draft pull requests in gray, usage provider controls under settings, failed tool icons keeping their artwork, and Markdown staying mounted while a turn streams. Mobile picks up workspace images in file previews, chunked diff highlighting, and row reuse in the chat feed and diff view. I ran no browser or simulator pass for this round.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Forty-four upstream changes, reviewed as one ordered pass.

Validation: node scripts/upstream-sync.ts gate --quick passed end to end, including a frozen-lockfile reinstall, verify, every workspace typecheck, lint and the mobile native check.

The full local test run has two failures I could not clear here, both in apps/server/src/preview/PortScanner.test.ts. Neither this round nor origin/main touches that file or the scanner. Another dev server on this machine holds [::1]:3000, so the fixture binds the wildcard :: while the scanner's probe to localhost:3000 reaches the neighbouring process instead. CI has no such listener, so I am relying on it to confirm.

t3dotgg and others added 30 commits September 5, 2026 23:46
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

(cherry picked from commit 07891e9)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
(cherry picked from commit 5783280)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

(cherry picked from commit 39abb9d1d6ae6501c573b9dc0cb9c28e2f75659c)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
(cherry picked from commit 5cc369b)
… main

Squashing the parent sync branch moves the merge base behind its commits,
so main and the stacked branch both look like they added the same code and
git duplicates it without reporting a conflict.
…we built

Carrying two implementations of one feature costs the maintenance and still
conflicts on every future upstream edit to their copy.
The provider Advanced section renders unconditionally, so advancedVisible,
setAdvancedOpen and searchTargetId had no readers left.
Co-authored-by: Claude Code <noreply@anthropic.com>
(cherry picked from commit 61a91b6)
richardsolomou and others added 26 commits September 6, 2026 00:12
#23 deleted the legacy home list and its presentation helpers, so upstream
edits to them have nothing to land on here.
Defer the draft walk and JSON serialization until the storage write flushes.
Preserve hydration, migrations, attachment verification, and final flushes.

Continues the web portion of [#9049](pingdotgg/t3code#9049).
The mobile storage migration remains separate.

Created with GPT-6 Astra (preview) in Codex.

Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

(cherry picked from commit dab5f6e)
RelayPublicClientId spells them ras-mobile and ras-web, so the catch-all
kebab rule was producing ids the schema rejects.
#54 replaced managed Cloudflare tunnels with the RAS relay, so
cloudflare_tunnel is no longer in RelayManagedEndpointProviderKind.
createDebouncedStorage is gone; the pane layout now serializes at flush
time like composer drafts, so a no-op set no longer stringifies the layout.
@github-actions github-actions Bot added size:XXL 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Sep 5, 2026
@richardsolomou
richardsolomou merged commit 40a0946 into main Sep 5, 2026
17 checks passed
@richardsolomou
richardsolomou deleted the ras-code/sync-upstream-9 branch September 5, 2026 21:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. size:XXL

Projects

None yet

Development

Successfully merging this pull request may close these issues.