chore(upstream): sync marcode through 78f462c4e18c - #21
Conversation
pingdotgg#5782) Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…stalled providers are found (pingdotgg#5074) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…thread (pingdotgg#5901) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…gdotgg#5887) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: codex <codex@users.noreply.github.com>
…5928) Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ing (pingdotgg#5659) Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Merges upstream through v0.0.33 (28 commits). Five conflicts, resolved by combining both intents: apps/server/src/http.ts Upstream sandboxes user-provided SVG assets (pingdotgg#5916) by adding SVG_CONTENT_SECURITY_POLICY and assetResponseHeaders() next to DESKTOP_RENDERER_ORIGINS, which Marcode had renamed to the marcode:// scheme. Kept Marcode's marcode://app + marcode-dev://app origins and took the whole security fix; the asset route's switch to assetResponseHeaders() auto-merged. apps/web/src/routes/__root.tsx Import-block collision only. Kept Marcode's FloatingPillNav and FloatingCodePill imports and added upstream's ConfirmDialogHost. All three are mounted (the JSX auto-merged); ConfirmDialogHost is required now that localApi.confirm() routes through the themed dialog instead of window.confirm. apps/web/src/components/chat/DraftHeroHeadline.tsx Upstream's only change was align-bottom -> align-baseline (pingdotgg#5864), so the project name sits on the headline baseline. Marcode's variant colors the dotted underline from the animated GIF headline text (border-current + headlineTextClassName) rather than upstream's fixed border-foreground/60. Kept Marcode's classes, applied upstream's alignment fix. apps/web/src/components/AppSidebarLayout.tsx Upstream added ProjectProjectionRetention, which keeps the project projection subscribed while settings swaps the thread sidebar out of the tree, so returning to a draft never flashes the zero-project state. Marcode renders no sidebar at all on settings routes, so it needs this more than upstream does: mounted it inside SidebarProvider and kept the !isOnSettings guard. Upstream's in-sidebar settings chrome (SettingsSidebarNav, SidebarChromeHeader, useSidebarStageBackdropVariant) stays dropped -- FloatingPillNav owns brand, settings and sidebar controls. Left a comment at the import seam so the next sync sees why. apps/web/src/components/chat/ChatHeader.tsx Upstream refactored the header title area onto the new WorkspaceBreadcrumb primitive (pingdotgg#5929) -- project favicon segment, separator, inline rename, and the thread action menu. Marcode split this file: ThreadActionsCluster is portaled into the pill nav and ChatHeader renders the title alone, with thread actions living on the sidebar row's context menu. None of upstream's refactor targets a surface Marcode renders, so Marcode's structure is kept and the breadcrumb imports stay dropped. Fork-boundary checks on the clean-merged remainder: - upstream moved project settings from /settings/projects/$projectKey to /projects/$projectKey; no Marcode surface referenced the old route. - Sidebar.tsx fork seam and the unified workspace mount survived the worktree-indicator and project-settings changes untouched. - WORKTREE_BRANCH_PREFIX stays "marcode" and every call site reads the constant; serviceLauncher still requires MARCODE_HOME and still rejects T3CODE_HOME; T3_BOOT_SERVICE_UNIT, T3_SERVICE_LAUNCHER_CONTEXT, @t3tools/*, and the t3 package/CLI name stay upstream-shaped. - authRedirect.test.ts fixtures use t3code:// URLs, but resolveClerkSignInProps is scheme-agnostic, so they pin behavior, not identity. Left as upstream wrote them to avoid needless conflict surface. - neither pnpm-workspace.yaml nor infra/relay/package.json moved, so no coupled vendored subtree sync is required. Verified: focused tests for every touched area (19 files, 304 tests), typecheck for web/server/shared/contracts/client-runtime/desktop, fmt --check and lint on the resolved files.
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
|
CI terminal on
Thread transfer impact stayed within every ceiling. One non-required job, upstream's new advisory Staying draft: still needs live client verification of upstream's UI changes (settings/usage breadcrumbs, themed confirm dialogs, sidebar worktree icon, draft hero baseline) at 390px and 820px, plus a decision on the EAS production workflow's project ownership. Generated by Claude Code |
What Changed
Merges
pingdotgg/t3code@78f462c4e18c8ea5e5037dc916389a3b72246025(upstream v0.0.33, 28 commits) into Marcode as one--no-ffmerge commit. Five conflicts, each resolved by hand combining both intents — no whole-file ours/theirs, no force push, reset, restore, stash, or clean.Conflict decisions
apps/server/src/http.tsSVG_CONTENT_SECURITY_POLICY+assetResponseHeaders()besideDESKTOP_RENDERER_ORIGINSmarcode://schememarcode://app+marcode-dev://app, took the whole security fix. The asset route's switch toassetResponseHeaders()auto-merged.apps/web/src/routes/__root.tsxConfirmDialogHost(themed confirmation dialogs, pingdotgg#5624)FloatingPillNav+FloatingCodePillConfirmDialogHostis now required —localApi.confirm()routes through the themed dialog instead ofwindow.confirm.apps/web/src/components/chat/DraftHeroHeadline.tsxalign-bottom→align-baselineso the project name sits on the headline baseline (pingdotgg#5864)border-current+headlineTextClassName) rather than a fixedborder-foreground/60apps/web/src/components/AppSidebarLayout.tsxProjectProjectionRetentionso settings swapping the thread sidebar out of the tree never flashes the zero-project state on return (pingdotgg#5923/pingdotgg#5930)FloatingPillNavowns brand, settings and sidebar controlsProjectProjectionRetentioninsideSidebarProviderand kept the!isOnSettingsguard — Marcode unmounts the sidebar entirely, so it needs this fix more than upstream does. Upstream's in-sidebar settings chrome (SettingsSidebarNav,SidebarChromeHeader,useSidebarStageBackdropVariant) stays dropped, with a comment at the import seam.apps/web/src/components/chat/ChatHeader.tsxWorkspaceBreadcrumbprimitive — project favicon segment, separator, inline rename, thread action menu (pingdotgg#5929)ThreadActionsClusteris portaled into the pill nav,ChatHeaderrenders the title alone, thread actions live on the sidebar row's context menuFork-boundary checks on the clean-merged remainder
Clean merges are the dangerous ones, so the merged tree was swept for upstream identity Marcode renames:
/settings/projects/$projectKeyto/projects/$projectKeyand deleted both old route files. No Marcode surface referenced the old route;routeTree.gen.tsis consistent withapps/web/src/routes/.── Marcode fork seam ──inSidebar.tsxand the unified workspace mount survived upstream's worktree-indicator and project-settings changes untouched.WORKTREE_BRANCH_PREFIXis still"marcode"and every call site and fixture reads the constant — no hardcodedt3code/<hex>branch fixtures came in.serviceLauncherstill requiresMARCODE_HOMEand still rejectsT3CODE_HOME(its test asserts the throw).T3_BOOT_SERVICE_UNIT(t3code.service),T3_SERVICE_LAUNCHER_CONTEXT,@t3tools/*, thet3package/CLI name, and thet3code:*theme storage keys.authRedirect.test.tsfixtures uset3code://URLs, butresolveClerkSignInPropsis scheme-agnostic — they pin behavior, not identity, so they were left as upstream wrote them rather than adding conflict surface.pnpm-workspace.yamlnorinfra/relay/package.jsonmoved, so no coupled vendored subtree sync (sync:repos) is required.Upstream added
.github/workflows/mobile-eas-production.yml(pingdotgg#5609). On every push tomaintouching mobile paths it runseas build --auto-submit, which submits to TestFlight and the Play internal track. It is inert today — every step is gated onsecrets.EXPO_TOKENand the job logs "skipping" without it — and it follows the same guard as themobile-eas-preview.ymlthis fork already carries, so it was taken as upstream shipped it.The catch:
apps/mobile/app.config.tsstill points at upstream's Expo project (owner: "pingdotgg",projectId: d763fcb8-…) while Marcode's bundle identifiers arecom.t3tools.marcode*. If anEXPO_TOKENis ever added to this repo, that workflow would attempt store submissions against upstream's Expo org. Worth deciding whether to point the EAS project at Marcode or drop the push trigger — a release-ownership call, so nothing was changed here.Why
Daily upstream sync. Marcode is a maintained fork, so upstream correctness, security, and operational fixes have to land even when they touch customized files — hotspots in
.github/upstream-sync.ymlare mandatory-review paths, not automatic keep-Marcode paths. The SVG sandboxing fix inhttp.tsis the clearest example: it landed inside a hotspot line Marcode had renamed, and dropping it would have silently reverted a security fix.Resolves the
upstream-sync-blockedtracking issue #20.UI Changes
No Marcode-authored UI change. The user-visible deltas are upstream's, unverified in a live client from this container (no display;
test-t3-appwas not run):window.confirm/projects/$projectKeyroute move--update-foregroundtoken now--color-blue-400Worth a pass over settings, usage, and the draft hero at 390px and 820px before this comes out of draft.
Checklist
Verification
Focused only, per
AGENTS.md— no full workspace suite.vp test runover 19 files covering every touched area — 304 tests passed:http.test.ts,authRedirect.test.ts,confirmDialog.test.ts,localApi.test.ts,shell.test.ts,composerInlineTokens.test.ts,projectGrouping.test.ts,ProjectFaviconResolver.test.ts,usageTranscripts.test.ts,settingsSearch.test.ts,Sidebar.logic.test.ts,rightPanelStore.test.ts,DesktopShellEnvironment.test.ts,DesktopApplicationMenu.test.ts,ElectronDialog.test.ts,git.test.ts,serviceLauncher.test.ts,wideMarkdownBlocks.test.ts,upstream-sync-workflow.test.tsvp run --filtertypecheck for@t3tools/web,t3,@t3tools/shared,@t3tools/contracts,@t3tools/client-runtime,@t3tools/desktop— all clean (only pre-existing Effect suggestion diagnostics in files this merge did not touch)vp fmt --checkon the five resolved files — cleanvp lint apps/server/src apps/web/src/components apps/web/src/routes— exit 0, only pre-existing warningsNot verified here: the four required CI checks (
Check,Test,Mobile Native Static Analysis,Release Smoke) and live client verification. Leaving as draft for those.Generated by Claude Code