Skip to content

chore(upstream): sync marcode through 82b8a938 - #39

Merged
maarco merged 171 commits into
mainfrom
claude/gracious-bohr-e6mz60
Aug 19, 2026
Merged

chore(upstream): sync marcode through 82b8a938#39
maarco merged 171 commits into
mainfrom
claude/gracious-bohr-e6mz60

Conversation

@maarco

@maarco maarco commented Aug 18, 2026

Copy link
Copy Markdown
Owner

What Changed

Daily upstream sync: merges 169 commits from pingdotgg/t3code through 82b8a938 (merge base b73232bd) into main via a --no-ff merge. Every conflict was resolved by hand, combining upstream intent with Marcode's product contracts — no file was taken wholesale from either side.

Upstream tip 82b8a938: fix(orchestration): do not revive idle tasks from status-free progress (#7172).

Conflict decisions

Structural / deletions

  • apps/desktop/resources/icon.{icns,ico,png} — took upstream's deletion. Upstream now generates desktop icons at build time from assets/ (DesktopAssets.ts, ensureMacIconIcns). Marcode's marks live in assets/, and stageMacIcons still composites them onto the opaque white matte, so the packaged icon is unchanged.
  • apps/web/src/components/files/FileBrowserPanel.tsx, FilePreviewPanel.tsx — stayed deleted (Marcode retired the right-panel file surfaces). Upstream's edits were subheader styling + a remote-open gate, both of which live on Marcode's floating-editor path.
  • oxlint-plugin-marcode/rules/no-native-title-tooltip.{ts,test.ts} — took upstream's new rule into the renamed plugin dir; retargeted the hardcoded t3code/ prefix to marcode/.

Fork identity (clean merges that would have silently broken)

  • vite.config.ts — registered the new rule under marcode/. Landed it at warn (not upstream's error): 35 native title tooltips remain on Marcode-only surfaces (floating editor, floating terminal shell, git actions, open-in picker) upstream never had. The rule reports every one; raise to error once they migrate.
  • .agents/skills/test-t3-mobile/scripts/pair-client.sh — upstream's new helper read T3CODE_PORT and launched com.t3tools.t3code.dev; retargeted to MARCODE_PORT / com.t3tools.marcode.dev.
  • apps/desktop/src/wsl/DesktopWslServerTree.test.ts — upstream fixture set T3CODE_HOME/T3CODE_MODE; DesktopConfig reads MARCODE_HOME. Retargeted.
  • apps/web/src/components/desktopUpdate.logic.test.ts — retargeted upstream's "restart T3 Code?" assertion to Marcode.
  • apps/server/src/provider/Layers/CodexSessionRuntime.test.ts — took upstream's codexDefaultModeDeveloperInstructions(browserToolsAvailable) refactor, kept /Marcode/, retargeted the doesNotMatch assertion to "Marcode collaborative browser".
  • scripts/build-desktop-artifact.test.ts — retargeted the DMG installer title to "Marcode 1.2.3 Installer".
  • apps/desktop/resources/dmg/dmg-background-{latest,nightly}.svg — rebranded "Drag T3 Code to Applications".
  • apps/mobile/src/lib/mobileTheme.ts — rebranded the default built-in theme label to Marcode.
  • apps/web/src/components/clerk/T3ConnectUserProfilePage.tsx, T3ConnectSidebarSignIn.tsx — upstream's new Connect page + sidebar entry ship "T3 Connect" copy; rebranded to "Marcode Connect" to match ConnectionsSettings.
  • apps/server/src/sourceControl/BitbucketSourceControlProvider.ts — kept MARCODE_BITBUCKET_* names, took upstream's added "user read" scope.
  • apps/desktop/scripts/electron-launcher.mjs — took upstream's resolveMacLauncherIconPaths/ensureMacIconIcns refactor + LAUNCHER_VERSION 15; kept Marcode's bundle ids, protocol schemes, and disable directive.
  • packaging/aur/** left upstream-shaped (Marcode publishes no AUR package).

Marcode product contracts kept (upstream fixes ported on top)

  • packages/client-runtime/src/state/threadSettled.ts — took upstream's changeRequestAutoSettles + autoSettleOnMerge setting, applied through Marcode's one-hour warm window instead of settling immediately. Retargeted upstream's immediate-settle test past the warm window and added a test pinning the window over both PR-state signals.
  • apps/web/src/diffFileActions.ts / .test.ts — took upstream's resolveDiffPathForWorkspace (repository-relative diff paths in nested projects/worktrees), landed the result in the floating editor instead of the removed right-panel file surface; rewrote the two upstream tests that asserted right-panel state.
  • apps/web/src/components/ChatMarkdown.tsx — took upstream's workspace basename lookup for bare filenames, routed its result into the floating editor (upstream's openFileInPanel called useRightPanelStore.openFile, gone in Marcode's store).
  • apps/web/src/components/RightPanelTabs.tsx — took upstream's desktop favicon plumbing + Button-based add-panel trigger; dropped the theme prop and PierreEntryIcon (upstream threads them in only for the retired file surface).
  • apps/web/src/components/ChatView.tsx — took upstream's surface-keyed PR-tab status fix + workspace file drop target; kept Marcode's hero background, composer inset, and pill-nav-only layout controls (tagged with upstream's data-workspace-titlebar-controls).
  • apps/web/src/components/ThreadTerminalDrawer.tsxkept Marcode's xterm terminal. Upstream migrated this surface to a Ghostty WASM surface; see UI Changes.
  • SidebarChrome.tsx, AppSidebarLayout.tsx, threadSidebarWidth.test.ts, ui/tooltip.tsx — kept Marcode's brand-free sidebar header/footer, pill-nav toggle bridge, removal pin, and inline z-index.
  • apps/web/src/index.css — took upstream's @variant dark refactor, @layer base stage-art defaults, alert-glass + sidebar-stage-backdrop utilities, and theme-art aliases; kept Marcode's dark palette, sidebar palette, workspace topbar, composer inset, scroll fades, and mono nav voice.
  • ConnectionsSettings.tsx (desktop-only gate + Marcode Connect copy), MobileClientsUserProfilePage.tsx (upstream ClerkUserProfilePage refactor + Marcode branding), ChatHeader.tsx (both imports; upstream inline rename left unmounted), useHandleNewThread.ts (Marcode placement options + upstream carryComposerContent).
  • Native-titleTooltip migrations (DraftHeroHeadline, Sidebar woke pill, UsagePage, PullRequestDetailPanel, PullRequestCodeTab) — took upstream's Tooltip structure, kept Marcode's styling and icon sizes.

Tests upstream deleted that pinned Marcode behavior — kept

  • infra/relay/scripts/deploy.test.ts (MARCODE_RELAY_URL reconciliation)
  • scripts/mobile-showcase.test.ts (marcode:// showcase scene routes)

Why

This is the scheduled fork sync — bringing in 169 upstream correctness, security, and feature commits while preserving Marcode's intentional divergences (floating editor as the only file-editing surface, unified workspace shell, branding, and compatibility identifiers). Hotspot paths were reviewed as mandatory-review, not automatic keep-Marcode: upstream fixes embedded in customized files (diff-path resolution, PR-tab status keying, the autoSettleOnMerge setting, the Bitbucket scope) were all ported on top.

pnpm-workspace.yaml and infra/relay/package.json are unchanged, so no effect-smol / alchemy-effect subtree sync was required.

UI Changes

No intended visual change — Marcode's shell, palette, and surfaces are preserved.

Not ported (flagging): upstream's Ghostty terminal migration (right-click paste + context menu, pingdotgg#5240) was not brought in. Marcode intentionally keeps the xterm terminal for its search feature; this is a documented divergence, and the paste/context-menu work would need re-porting onto xterm by hand. No behavior regressed — the feature simply isn't added.

Verification

  • 169 commits merged; pnpm-lock.yaml regenerated with pnpm install --lockfile-only.
  • Typecheck green: @t3tools/{web,shared,contracts,client-runtime,scripts,desktop,mobile,oxlint-plugin-marcode}, t3, marcode-relay.
  • Lint 0 errors; format clean on all 650 changed files.
  • Focused tests: 705 passed across the touched paths.

Full CI (Check, Test, Mobile Native Static Analysis, Release Smoke) runs on this PR.

Checklist

  • I explained what changed and why
  • This PR is small and focused — N/A: this is the scheduled 169-commit upstream sync
  • Before/after screenshots — N/A: no intended UI change
  • Video for animation/interaction changes — N/A

🤖 Generated with Claude Code

https://claude.ai/code/session_01Y7hnoykEhpviir998tucot


Generated by Claude Code

t3-code Bot and others added 30 commits August 12, 2026 14:32
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>
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>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
…ngdotgg#6495)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: t3-code[bot] <236186684+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
)

Co-authored-by: Julius Marminge <julius0216@outlook.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>
chrisdeeming and others added 17 commits August 16, 2026 10:13
…#6392)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
…ingdotgg#7082)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…g#7083)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Merges 169 upstream commits (merge base b73232b) into main. Every conflict
was resolved by hand, combining upstream intent with Marcode's product
contracts; no file was taken wholesale from either side.

Conflict decisions
------------------

Structural / deletions

- apps/desktop/resources/icon.{icns,ico,png}: took upstream's deletion.
  Upstream now generates the desktop icons at build time from assets/
  (DesktopAssets.ts, ensureMacIconIcns). Marcode's marks live in assets/,
  and stageMacIcons still composites them onto the opaque white matte, so
  the packaged icon is unchanged.
- apps/web/src/components/files/FileBrowserPanel.tsx, FilePreviewPanel.tsx:
  stayed deleted. Marcode retired the right-panel file surfaces; upstream's
  edits there were subheader styling plus a remote-open gate, both of which
  live on Marcode's floating-editor path.
- oxlint-plugin-marcode/rules/no-native-title-tooltip.{ts,test.ts}: took
  upstream's new rule into the renamed plugin directory. The test hardcoded
  the `t3code/` plugin prefix; retargeted to `marcode/`.

Fork identity

- vite.config.ts: registered the new rule under the `marcode/` plugin name.
  Landed it at "warn" rather than upstream's "error": 35 native `title`
  tooltips remain on Marcode-only surfaces (floating editor, floating
  terminal shell, git actions, open-in picker) that upstream never had.
  The rule still reports every one; raise to "error" once they migrate.
- .agents/skills/test-t3-mobile/scripts/pair-client.sh: upstream's new
  pairing helper read T3CODE_PORT and launched com.t3tools.t3code.dev.
  Marcode's server reads MARCODE_PORT and its dev package is
  com.t3tools.marcode.dev. Merged cleanly; would have silently failed.
- apps/desktop/src/wsl/DesktopWslServerTree.test.ts: upstream's fixture set
  T3CODE_HOME/T3CODE_MODE, but DesktopConfig reads MARCODE_HOME. Merged
  cleanly; retargeted.
- apps/web/src/components/desktopUpdate.logic.test.ts: upstream's replacement
  test asserted the exact "restart T3 Code?" string. Merged cleanly;
  rebranded.
- apps/server/src/provider/Layers/CodexSessionRuntime.test.ts: took
  upstream's codexDefaultModeDeveloperInstructions(browserToolsAvailable)
  refactor, kept Marcode's /Marcode/ assertion, and retargeted the
  doesNotMatch assertion to "Marcode collaborative browser".
- scripts/build-desktop-artifact.test.ts: upstream's new DMG assertion
  expected "T3 Code (Alpha) 1.2.3 Installer"; Marcode's productName is
  Marcode. Merged cleanly; retargeted.
- apps/desktop/resources/dmg/dmg-background-{latest,nightly}.svg: upstream's
  new installer art said "Drag T3 Code to Applications". Rebranded.
- apps/mobile/src/lib/mobileTheme.ts: upstream's new built-in theme list
  labelled the default theme "T3 Code". Rebranded to Marcode.
- apps/web/src/components/clerk/T3ConnectUserProfilePage.tsx and
  T3ConnectSidebarSignIn.tsx: upstream's new Connect environments page and
  its sidebar entry ship "T3 Connect" copy; rebranded to Marcode Connect to
  match ConnectionsSettings.
- apps/server/src/sourceControl/BitbucketSourceControlProvider.ts: kept
  MARCODE_BITBUCKET_* env names, took upstream's added "user read" scope.
- apps/desktop/scripts/electron-launcher.mjs: took upstream's
  resolveMacLauncherIconPaths/ensureMacIconIcns refactor and LAUNCHER_VERSION
  15; kept Marcode's bundle ids, protocol schemes, and plugin-name disable
  directive.
- packaging/aur/**: left upstream-shaped. Marcode publishes no AUR package,
  so this is upstream packaging carried along, not a Marcode surface.

Marcode product contracts kept (upstream fixes ported on top)

- packages/client-runtime/src/state/threadSettled.ts: took upstream's
  changeRequestAutoSettles + autoSettleOnMerge setting, then applied it
  through Marcode's one-hour warm window instead of settling immediately.
  Upstream's new test asserted an immediate settle on a closed PR one
  millisecond after activity; retargeted it past the warm window and added a
  test pinning that the window outranks both PR-state signals.
- apps/web/src/diffFileActions.ts / .test.ts: took upstream's
  resolveDiffPathForWorkspace (repository-relative diff paths in nested
  projects and worktrees) and landed the resolved path in the floating
  editor rather than the removed right-panel file surface. Rewrote the two
  upstream tests that asserted right-panel state.
- apps/web/src/components/ChatMarkdown.tsx: took upstream's workspace
  basename lookup for bare filenames and routed its result into the floating
  editor. Upstream's openFileInPanel called useRightPanelStore.openFile,
  which Marcode's store no longer has.
- apps/web/src/components/RightPanelTabs.tsx: took upstream's desktop favicon
  plumbing and Button-based add-panel trigger; dropped the `theme` prop and
  PierreEntryIcon import, which upstream threads in only for the retired
  file surface.
- apps/web/src/components/ChatView.tsx: took upstream's surface-keyed
  pull-request tab status fix and the workspace file drop target; kept
  Marcode's hero background, composer inset utility, and pill-nav-only
  layout controls, tagged with upstream's new
  data-workspace-titlebar-controls attribute.
- apps/web/src/components/ThreadTerminalDrawer.tsx: kept Marcode's xterm
  terminal. Upstream migrated this surface to a Ghostty WASM surface and
  built its right-click paste / context menu on that API. Not ported here;
  see the PR body.
- apps/web/src/components/sidebar/SidebarChrome.tsx: kept Marcode's
  brand-free header and footer; upstream's SidebarBrand/T3Wordmark stay out.
- apps/web/src/components/threadSidebarWidth.test.ts: kept Marcode's removal
  pin over upstream's replacement wordmark test.
- apps/web/src/components/AppSidebarLayout.tsx: kept the pill-nav toggle
  bridge over upstream's floating SidebarTrigger.
- apps/web/src/components/ui/tooltip.tsx: kept Marcode's inline
  FLOATING_SURFACE_Z z-index and anchor-hidden class over upstream's
  z-[140] utility.
- apps/web/src/index.css: took upstream's @variant dark refactor, @layer base
  stage-art defaults, alert-glass utility, sidebar-stage-backdrop utility,
  and theme-art aliases; kept Marcode's dark palette, sidebar surface
  palette, workspace topbar, composer inset, scroll fades, and mono nav
  voice.
- apps/web/src/components/settings/ConnectionsSettings.tsx: took upstream's
  desktop-only gate, kept Marcode Connect copy.
- apps/web/src/components/clerk/MobileClientsUserProfilePage.tsx: took
  upstream's ClerkUserProfilePage/Row/RefreshButton refactor, reapplied
  Marcode branding.
- apps/web/src/components/chat/ChatHeader.tsx: kept both imports; left
  upstream's inline rename and thread action menu unmounted, as before.
- apps/web/src/hooks/useHandleNewThread.ts: kept Marcode's draftId/threadId/
  placement options and took upstream's carryComposerContent.
- Native title -> Tooltip migrations (DraftHeroHeadline, Sidebar woke pill,
  UsagePage refresh, PullRequestDetailPanel, PullRequestCodeTab): took
  upstream's Tooltip structure, kept Marcode's styling and icon sizes.

Tests upstream deleted that pinned Marcode behavior, kept

- infra/relay/scripts/deploy.test.ts (MARCODE_RELAY_URL reconciliation)
- scripts/mobile-showcase.test.ts (marcode:// showcase scene routes)

Tests added

- scripts/build-desktop-artifact.test.ts: pins that stageMacIcons composites
  the packaged macOS icon onto the opaque white matte, so an upstream rewrite
  of that function conflicts loudly instead of silently reverting it.

Other

- pnpm-lock.yaml regenerated with pnpm install --lockfile-only.
- pnpm-workspace.yaml and infra/relay/package.json are unchanged, so no
  coupled vendored subtree sync was required.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7hnoykEhpviir998tucot
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Aug 18, 2026
@github-actions

github-actions Bot commented Aug 18, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 11.3 KiB 12.6 KiB +1.3 KiB (+11.5%) 15.1 KiB
Codex Thread snapshot wire 5.5 KiB 6.3 KiB +839 B (+15.0%) 7.3 KiB
Codex Live turn WebSocket wire 5.9 KiB 6.3 KiB +489 B (+8.2%) 7.8 KiB
Codex Live turn WebSocket decoded 49.7 KiB 51.8 KiB +2.1 KiB (+4.2%) 66.4 KiB
Codex Live turn messages 16 16 0 (0.0%) 21
Claude Total thread wire 11.3 KiB 12.6 KiB +1.3 KiB (+11.2%) 15.1 KiB
Claude Thread snapshot wire 5.5 KiB 6.3 KiB +815 B (+14.5%) 7.3 KiB
Claude Live turn WebSocket wire 5.8 KiB 6.3 KiB +483 B (+8.1%) 7.8 KiB
Claude Live turn WebSocket decoded 50.6 KiB 52.7 KiB +2.1 KiB (+4.2%) 66.4 KiB
Claude Live turn messages 16 16 0 (0.0%) 21

Baseline: 1af3478 · PR result: 720bbde · Source CI: success

Scenario and decoded snapshot size

10 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.

  • Codex decoded thread snapshot: 99.9 KiB
  • Claude decoded thread snapshot: 100.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

Upstream pingdotgg#5644 added isPublicFaviconHost, and the merged favicon.ts now
returns null for private/loopback hosts (Google's favicon service cannot
resolve them). buildTree.test.ts pinned the old behavior with a
`localhost:3000` url node expecting a favicon URL, so the merge broke it
cleanly with no conflict.

Point the favicon assertion at a public URL (example.com) and add a
localhost url node asserting no iconUrl, so the new filter is pinned and a
future sync that loosens it conflicts loudly here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7hnoykEhpviir998tucot
@maarco
maarco marked this pull request as ready for review August 19, 2026 05:20
@maarco
maarco merged commit 2ffb140 into main Aug 19, 2026
13 of 14 checks passed
@maarco
maarco deleted the claude/gracious-bohr-e6mz60 branch August 19, 2026 05:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.