chore(upstream): sync reviewed changes through dab5f6e6e - #115
Merged
Conversation
(cherry picked from commit 2675e3c)
(cherry picked from commit 09b81a3)
(cherry picked from commit b34ff8f)
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)
(cherry picked from commit f559fe0)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> (cherry picked from commit 5cc369b)
(cherry picked from commit caab2fd)
… 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.
(cherry picked from commit f1e90e3)
…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.
(cherry picked from commit 00f8b7c)
Co-authored-by: Claude Code <noreply@anthropic.com> (cherry picked from commit 61a91b6)
(cherry picked from commit c3b8825)
(cherry picked from commit 99e3b72)
(cherry picked from commit 4cc800c)
(cherry picked from commit cccd7e3)
(cherry picked from commit 082cab2)
(cherry picked from commit 3b6be3e)
(cherry picked from commit 887ece3)
#23 deleted the legacy home list and its presentation helpers, so upstream edits to them have nothing to land on here.
(cherry picked from commit 27e6cc2)
(cherry picked from commit 2263e13)
(cherry picked from commit f2e3764)
(cherry picked from commit 44dc8ae)
(cherry picked from commit ec8b211)
(cherry picked from commit 2460649)
(cherry picked from commit 777f5bb)
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.
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.
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.lastReviewedmoves todab5f6e6e, leaving 259 unreviewed.Twenty-eight needed no decision, and
adopt-alignedcarried 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
ThreadMarkdownImageViewout ofThreadFeed.tsxinto its own module so file previews can share it. Took the move and carried thefailureReasonanddetailplaceholder from #45 into the new file. The inlinecodeBackgroundstyling 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 callcodeToTokensBasewith 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
latestAssistantSummarymoved to a newgetLatestSettledAssistantTextquery 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
RelayEnvironmentLinkLimitExceededErrorto 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 serializationremovedcreateDebouncedStorage, which the split chat panes from #63 still used. The pane layout now goes throughcreateDeferredStoragelike 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 tokensbrought a fixture usingcloudflare_tunnel, which #54 removed fromRelayManagedEndpointProviderKindwhen 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:
n, so\nT3 Codehad no word boundary before the name and fell through to the bare-shorthand rule, producing "RAS Code Code".RelayPublicClientIdspells the relay client idsras-mobileandras-web, so the catch-all kebab rule was producing ids the schema rejects. The replacement rule needed tightening too:\baftermobilematches a following hyphen, so it first rewrotet3-mobile-composer.Skill
Three rules encoded, each from something that cost time in this round:
origin/maininstead 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 redeclaredfindRemoteTrackingRemoteand three duplicate function implementations inUsageLimits.tsx, none of them a conflict.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
Forty-four upstream changes, reviewed as one ordered pass.
Validation:
node scripts/upstream-sync.ts gate --quickpassed 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 nororigin/maintouches 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 tolocalhost:3000reaches the neighbouring process instead. CI has no such listener, so I am relying on it to confirm.