Skip to content

chore: sync with upstream (2026-10-27) - #70

Merged
riccardovandra merged 127 commits into
mainfrom
sync/upstream-2026-10-27
Oct 27, 2026
Merged

riccardovandra merged 127 commits into
mainfrom
sync/upstream-2026-10-27

Conversation

@riccardovandra

Copy link
Copy Markdown
Owner

Merges 126 commits from upstream/main (up to 394929af76) into the fork.

Conflicts and resolutions

  • Settings reorganisation (SettingsSidebarNav.tsx, settingsSearch.ts, mobile SettingsRouteScreen.tsx): upstream added Threads, Browser, Devices, Worktrees, Access, Maintenance, Labs and About, and renamed Integrations to Browser (old links redirect). Kept the fork's Tools and MCP servers pages and dropped the fork's /settings/integrations entries, which now redirect. On mobile, the fork's MCP servers row now sits under Agents next to Providers.
  • routeTree.gen.ts: regenerated with the TanStack router generator. It includes both upstream's new routes and the fork's ai-pm, settings/tools and settings/mcp-servers.
  • _chat.tsx: upstream moved the global shortcuts into shortcuts/chatRouteCommands.ts (refactor(web): chat route shortcuts register once instead of rebuilding on every store change pingdotgg/t3code#25366). Took upstream's file and ported the fork's project-scoped "new thread" behaviour (from the multi-project sidebar filter, feat(web): filter the sidebar by several projects at once #67) into chatRouteCommands.ts.
  • ChatView.tsx: upstream removed useAgentOpenedPreviews (fix(web): devices agents open in background threads now show up pingdotgg/t3code#25714, the logic moved into useRightPanelActions). Kept the fork's useAgentOpenedDocs call and import, plus upstream's new import.
  • ChatComposer.tsx: kept the fork's mergeProjectDisabledSkills import. Dropped the now-unused useDelayedStatus import.
  • CodexAdapterV2.ts: kept both sides' imports.
  • McpHttpServer.ts: upstream split out layerTools, which the new AgentContextBudget.test.ts uses. layerTools keeps upstream's toolkits only. The fork's toolkits (Docs, AI PM, MCP servers, skill trash, skill library) and the upstream MCP route are merged into layer. T3_MCP_TOOLKITS is unchanged.
  • Docs (composer.md, project-settings.md): took upstream's new settings page names and kept the fork's Tools references.

Judgment calls

  • Upstream changed the effectFnOpportunity diagnostic from a suggestion to an error. That flagged 30 sites in fork-only server code: DocCommentsService, McpServerOAuth, McpServerRegistry, McpUpstreamClients, McpServerTools, SkillLibrary, the tools toolkit handlers and McpHttpServer. All were rewritten to named Effect.fn("Module.op"). In McpServerOAuth, three functions had a manual withSpan with the same name, so it was removed to avoid a duplicate span.
  • AgentContextBudget.test.ts (new upstream test) fails on the fork by design. The fork's own instructions and its additions to the tools toolkit make agent context larger than upstream's committed budget: the Claude system append is 6294 bytes, the Codex context 6842 and the MCP tool list 57676, versus upstream's lower values. I added a SkillLibrary mock so the test can build its layer at all. I left agentContextBudget.json at upstream's values, so the file won't conflict on every sync. The CI workflow that enforces the budget is disabled on the fork. Decision for Riccardo: keep it as a known fork failure, or commit fork budget values and accept occasional conflicts in that JSON.

Verification

  • node scripts/fork-brand.ts --check: applies cleanly to 179 files.
  • vp run typecheck: clean in apps/server, apps/web, apps/mobile and packages/contracts.
  • apps/server fork tests (mcpHub, mcpServers, skills, docs, aipm, ForkSchema, McpHttpServer, MCP toolkits, CodexAdapterV2): 259 passed. The 1 failure is the AgentContextBudget test above.
  • apps/web: settingsSearch, sidebarProjectGrouping, docs, chatThreadActions and chatRouteCommands.browser.test.ts all pass.
  • vp i lockfile churn was discarded.

Model and harness: Claude Opus 5.5 in Claude Code (T3 Code daily upstream sync task).

🤖 Generated with Claude Code

t3dotgg and others added 30 commits October 25, 2026 23:22
…e crash (pingdotgg#25345)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…nstall them by URL

agent-device install-from-source picks the archive type from the download's
filename, and the cache URL has no extension. Device pool workers can now
fetch the dev client straight from the cache instead of the caller uploading
it through the gateway.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Android clients are cached as the bare APK, not a tarball.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ngdotgg#24912)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
…24618)

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… instead of effect timers (pingdotgg#25363)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
`vp run mobile:e2e` now leases iOS and Android devices from the Simlock pool
(SIMLOCK_AGENT_DEVICE_URL + AGENT_DEVICE_DAEMON_AUTH_TOKEN) instead of booting
local simulators, and walks each of 12 poses (phone sizes, iPads, a fold,
a tablet, dark mode, largest text) through the app: thread list, a thread,
scrolling, typing, back, settings, then rotation or folding.

Every screen gets generic layout checks that need no per-screen code: app in
front, no error screen or launch dialog, no fixed control cut off by the
screen edge, no sibling controls stacked, nothing under a system bar, no
input under the keyboard. Transitions keep the video check for tabs lagging
the screen, now measured against the recording's own first and last frames.
Afterwards a headless Claude reviews each pose's screenshots for what the
checks cannot see, and the findings land in the same report grid.

`mobile:install --session` now has the session's host download the dev
client from the shared cache with the read-only key, instead of uploading it
through the gateway (13 s instead of 10+ minutes for an APK).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…otgg#25409)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…by up to 10s (pingdotgg#25368)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…, iOS on EAS (pingdotgg#25390)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…allback (pingdotgg#25412)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…e, not on every open (pingdotgg#25377)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…failing (pingdotgg#25371)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…provider and cwd (pingdotgg#25370)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…aft, not by the composer (pingdotgg#25376)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Poses now cover iPhone SE, iPhone 18 Pro, iPhone Duo folded and unfolded,
iPad Pro 13" in both orientations, Pixel 10 Pro, Pixel 10 Pro Fold folded,
unfolded and unfolded landscape, and Pixel Tablet in both orientations.
Landscape poses rotate once the app is up (a rotation during launch is lost)
and check that the screen really is wider than tall. Taps fall back to the
element's centre when agent-device refuses a covered ref, and a gateway
whose workers briefly reconnect is retried.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The --prepare flag from pingdotgg#25390 had no default, so effect/cli made it
required and every mobile:install failed with "Missing required flag".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
agent-device names rotations relative to the device's natural orientation,
which is landscape on the Pixel Tablet and an unfolded Fold, so
"landscape-left" turned them portrait. The runner now asks for a shape and
tries each rotation until the screen has it. It also prepares each platform's
dev client before leasing, rides out longer worker drops, and skips the
Duo poses by default until agent-device can fold Simlock's simulators.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juliusmarminge and others added 29 commits October 26, 2026 19:19
…tgg#25710)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…otgg#25704)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…fter render (pingdotgg#25706)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… reconnect (pingdotgg#25712)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…s refetch by construction (pingdotgg#25732)

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…idget stops re-rendering on every presentation change (pingdotgg#25740)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…achable environment (pingdotgg#25703)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… pickers drop timer and sync effects (pingdotgg#25733)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…utton's focus ring and tooltip (pingdotgg#25774)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…elow the header (pingdotgg#25765)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…s send Max Mode (pingdotgg#21074)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
…e charts (pingdotgg#25776)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…gg#25660)

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@riccardovandra
riccardovandra merged commit 54b5070 into main Oct 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.