chore(upstream): sync marcode through b1670ac7 - #49
Closed
maarco wants to merge 112 commits into
Closed
Conversation
…in GitHubPullRequestCli (pingdotgg#7385) Signed-off-by: aoright <102943475+aoright@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@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>
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>
…pingdotgg#7459) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…t full speed (pingdotgg#7460) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…nt (pingdotgg#6563) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ngdotgg#7477) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tgg#6286) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: GPT-5.6 <noreply@openai.com>
Co-authored-by: GPT-5.6 <noreply@openai.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
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: maria <254055478+maria-rcks@users.noreply.github.com>
Merges 111 upstream commits (merge base 82b8a93) 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 - .plans/effect-atom.md: took upstream's deletion. Upstream moved implementation plans out of the repository (pingdotgg#7665); Marcode's only edit to that file was rewriting `.t3` paths to `.marcode`, so nothing survives it. - apps/web/src/components/files/FileBrowserPanel.tsx, FilePreviewPanel.tsx: stayed deleted. Marcode retired the right-panel file surfaces. Upstream's edits there were a refresh-the-open-file wiring (pingdotgg#7490) and a `--contrast-foreground` token swap for its own tree; Marcode's floating editor has neither affordance, so there was nothing to port. CI runners and the workspace search dependency - .github/workflows/ci.yml: took upstream's `mobile_native_changes` gate on the macOS lint job, kept Marcode's GitHub-hosted `macos-26` runner. The three jobs upstream added in the same range (`test_server`, `rust`, `mobile_native_changes`) merged clean on Blacksmith runners the fork cannot schedule on; all mapped to `ubuntu-24.04`. - Upstream sharded apps/server out of `test` into `test_server` (pingdotgg#7286), which moved WorkspaceFileSystem's tests away from Marcode's ripgrep install step. The step follows the tests into `test_server`. - scripts/upstream-sync-workflow.test.ts: both pins rewritten as invariants rather than positions — no ci.yml job may use a Blacksmith runner, and whichever job runs `--filter t3 test` must install ripgrep. The positional list would have broken on every upstream job addition. Fork identity (clean merges that would have failed silently) - apps/server/src/cloud/bootService.ts: upstream's new launchd plist (pingdotgg#6286) exports `T3CODE_HOME`. resolveLauncherBaseDir reads `MARCODE_HOME` and exits otherwise, so the launch agent would never have started a server. Renamed, and pinned with a test asserting the plist carries MARCODE_HOME and no T3CODE_HOME. - apps/server/src/cloud/bootService.test.ts: an upstream assertion hardcoded `systemctl --user disable --now t3code.service`; Marcode's unit is marcode.service. - apps/server/src/cli/triage.ts: upstream's new `t3 triage` command (pingdotgg#6563) read `T3CODE_HOME`. Every other Marcode CLI path reads `MARCODE_HOME`. - docs/user/background-service.md: new upstream doc pointed users at `~/.config/systemd/user/t3code.service`. The launchd label stays upstream-shaped (compatibility identifier); the systemd unit name does not. - apps/web/src/components/ChatView.tsx: upstream's cmd+enter background draft (pingdotgg#7821) calls `handleNewThread`, declared in a hunk Marcode had restructured for the pill-nav header. It merged clean into a ChatView that never declared it; restored `useNewThreadHandler()`. Migrations - Migrations.ts / Migrations.test.ts: upstream's 041_AuthSessionClientConnection collided with Marcode's 041_ProjectionProjectFaviconPath. Renumbered to 042, keeping the established +1 offset from Marcode owning id 33; the pin test now covers it. Server CLI copy - cli/connect.ts, cli/service.ts: took upstream's platform-aware launchd copy (a launch agent only runs while logged in) with Marcode's product name. "T3 Connect" stays as-is — it is the product name of the service, not fork branding. Web surfaces - routes/settings.tsx, components/usage/UsagePage.tsx: adopted upstream's WorkspacePageHeader (pingdotgg#7153) and passed SIDEBARLESS_TITLEBAR_INSET_CLASS as an override. Both routes mount no sidebar, so the header's collapsed-sidebar inset never matches and the breadcrumb would sit under the traffic lights. workspaceTitlebar.fork.test.ts rewritten to follow the refactor: the drag region now lives in WorkspacePageHeader, and each sidebarless call site must supply the unconditional inset. - components/chat/ChatComposer.tsx: took upstream's composer top drawer (pingdotgg#7150); Marcode's glass surface classes moved onto the surface div upstream nested inside the new frame. - components/chat/ComposerPendingApprovalPanel.tsx: took upstream's redesign. Marcode's only change here shrank a "PENDING APPROVAL" label the redesign deletes. - components/chat/ChatHeader.tsx: kept Marcode's title-only header. Upstream added a breadcrumb, inline rename, and a title action menu; Marcode portals the header into FloatingPillNav and thread actions already have an entry point on the sidebar row's context menu. Added ChatHeader.fork.test.tsx so the next sync fails here instead of shipping two entry points. - components/sidebar/SidebarChrome.tsx: kept Marcode's update-pill-only footer (already pinned by SidebarChrome.fork.test.tsx). Upstream's SidebarUtilityMenu stays exported so their SettingsSidebarNav keeps compiling unedited; their SidebarBrand/T3Wordmark were dropped, reachable only from a header Marcode replaced. - components/RightPanelTabs.tsx: took upstream's tab mute (pingdotgg#7252) and the shortcut-driven add-surface menu (pingdotgg#7318), dropped their `copy-path` action and "Files" entry — Marcode has no right-panel file surface. The menu keeps Marcode's placement beside the surface list rather than inline in the tab strip, where the collision-aware shelf owns the layout. - components/ThreadTerminalDrawer.tsx: kept Marcode's terminal chrome (placement slot, find) and routed all three of its close affordances through upstream's new confirm-before-close (pingdotgg#7592). `onSessionExited` stays direct. Took upstream's `--terminal-background` token, kept the p-2 FitAddon padding. - components/chat/MessagesTimeline.tsx: took upstream's `-mx-1` removal (the subagent row border fix, pingdotgg#7207), kept Marcode's text size. - components/Sidebar.tsx: took upstream's `cursor-pointer` fix (pingdotgg#5545), kept Marcode's text size. - routes/_chat.pull-requests.tsx, pullRequest/PullRequestListFilters.tsx: took upstream's extracted PullRequestRefreshControl and Button-based filter trigger; re-applied Marcode's styled Tooltip at the shared producer so both call sites keep it. - routes/__root.tsx: kept both watchers. - index.css: both conflicts were unrelated blocks git aligned on a shared brace. Kept Marcode's sidebar surface rules and floating chrome, took upstream's preview-loading-progress animation. Upstream's `@variant dark` sidebar tokens ride inside the zinc override block Marcode already declines. - packages/client-runtime/src/state/threadSettled.ts: took upstream's settle-only-once rule (pingdotgg#7454) — the terminal PR state must be the thread's latest event — and kept Marcode's one-hour warm window on top. Migrated the Marcode tests to the new `changeRequest` option shape and added a case pinning the combination. Other - pnpm-lock.yaml regenerated with pnpm install --lockfile-only. - pnpm-workspace.yaml moved (Clerk bumps), but the effect version is unchanged and infra/relay/package.json did not move, so neither coupled vendored subtree needed a sync. - AGENTS.md: adopted upstream's "Plans and work artifacts" section and their no-committed-PR-assets rule; their duplicate "Verifying"/"Pull requests" sections and user-count blurb do not apply to Marcode's rewritten document. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xswf8VNiCmKDPUvzUR8o7W
This was referenced Aug 23, 2026
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. |
Owner
Author
|
Superseded by PR #51, the newer upstream sync through |
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
Merges
pingdotgg/t3code@b1670ac7(111 upstream commits, merge base82b8a938) intomainas anormal two-parent merge on
claude/gracious-bohr-x80z9c. 27 conflicted paths were resolved by hand;no file was taken wholesale from either side.
The full per-path decision record is in the merge commit body. The parts that need a reviewer's eye:
Fork-identity breaks that merged clean and would have failed silently
apps/server/src/cloud/bootService.ts— upstream's new macOS launchd plist (feat(server): run the background service on macOS via launchd pingdotgg/t3code#6286) exportsT3CODE_HOME.resolveLauncherBaseDirreadsMARCODE_HOMEand exits otherwise, so the launchagent would never have started a server. Renamed and pinned with a test.
apps/server/src/cli/triage.ts— upstream's newt3 triagecommand (feat(cli): npx t3 triage hands broken installs to your own coding agent pingdotgg/t3code#6563) readT3CODE_HOME.apps/server/src/cloud/bootService.test.ts— an upstream assertion hardcodedsystemctl --user disable --now t3code.service; Marcode's unit ismarcode.service.docs/user/background-service.md— new upstream doc pointed users at~/.config/systemd/user/t3code.service.apps/web/src/components/ChatView.tsx— upstream's cmd+enter background draft (feat(web): cmd+enter to create thread in background pingdotgg/t3code#7821) callshandleNewThread, which arrived in a hunk Marcode had restructured for the pill-nav header. Itmerged clean into a
ChatViewthat never declared it (caught by typecheck)..github/workflows/ci.yml— upstream added three jobs (test_server,rust,mobile_native_changes) on its Blacksmith fleet, which this fork cannot schedule on. All mapped toGitHub-hosted runners. Upstream also sharded
apps/serverout oftestintotest_server, whichmoved
WorkspaceFileSystem's tests away from Marcode's ripgrep install step — the step followsthem.
Marcode contracts held, upstream fixes taken on top
threadSettled.ts— took upstream's settle-only-once rule (fix(threads): a merged PR settles its thread only once pingdotgg/t3code#7454), kept Marcode's one-hour warmwindow on top, migrated the Marcode tests to the new
changeRequestoption shape.ThreadTerminalDrawer.tsx— kept Marcode's terminal chrome, routed all three of its closeaffordances through upstream's new confirm-before-close (feat(web): confirm before closing a terminal pingdotgg/t3code#7592).
RightPanelTabs.tsx— took upstream's tab mute (feat(desktop): mute a browser tab pingdotgg/t3code#7252) and shortcut-driven add-surface menu(feat(web): add shortcuts to the surface dropdown pingdotgg/t3code#7318); dropped their
copy-pathaction and "Files" entry, since Marcode has no right-panel filesurface. The menu keeps Marcode's placement beside the surface list.
settings.tsx/UsagePage.tsx— adopted upstream'sWorkspacePageHeader(feat(web): unify workspace navigation pingdotgg/t3code#7153) and passed thesidebarless titlebar inset as an override; both routes mount no sidebar, so the header's
collapsed-sidebar inset never matches.
ChatHeader.tsx/SidebarChrome.tsx— kept Marcode's title-only header and update-pill-onlyfooter against upstream's breadcrumb, inline rename, title action menu, and footer nav.
041_AuthSessionClientConnectionrenumbered to042; Marcode owns id 33, so sharedmigrations sit one id higher.
Tests added or rewritten to pin the boundary
ChatHeader.fork.test.tsx(new) — the header renders the title alone: no breadcrumb, rename, oraction menu.
bootService.test.ts— the launchd plist exportsMARCODE_HOMEand noT3CODE_HOME.workspaceTitlebar.fork.test.ts— rewritten to follow upstream's header refactor: the drag regionnow lives in
WorkspacePageHeader, and each sidebarless call site must supply the unconditionalinset. (This test failed on the raw merge — the pin worked.)
upstream-sync-workflow.test.ts— the two CI pins rewritten as invariants (no Blacksmith runner inci.yml; whichever job runs--filter t3 testinstalls ripgrep) rather than positions, so theysurvive upstream adding jobs.
Migrations.test.ts— extended to cover id 42.Why
The daily upstream sync found 111 new commits. This is the reviewable merge; it is a draft because
the per-hotspot decisions above want a human read, and because two things still need attention:
t3 triagepoints at upstream. The newapps/server/src/cli/triagePrompt.tstells the user tosearch issues in
pingdotgg/t3code, fetchPLAYBOOK.mdfrom that repo, and file atgithub.laiyagushi.com/pingdotgg/t3code/issues/new. Only theMARCODE_HOMEread and the command descriptionwere retargeted — where Marcode users should file triage issues is a product call, and rewriting
the whole playbook would be a large permanent edit surface in a brand-new upstream file.
surfaces touched here (composer drawers, right-panel tabs, terminal chrome, usage redesign,
settings/usage headers) have not been driven. Worth one pass with
test-t3-appbefore this comesout of draft.
UI Changes
Not captured — this container cannot drive a client. Upstream's own UI work in this range (usage
insights redesign pingdotgg#7147, composer state drawers pingdotgg#7150, unified workspace navigation pingdotgg#7153, collapsed
tool activity pingdotgg#7152) lands on surfaces Marcode customizes, so before/after images belong to the
verification pass above.
Checklist
Verification
Run locally against the merge commit (
e39df1e3):contracts,client-runtime,web,server(t3),scripts,desktop,mobile,shared— all clean (suggestion-level Effect diagnostics only).apps/websuite (292 files, 2993 tests), fullpackages/client-runtime(53/685), fullpackages/contracts(20/290), fullscripts(22 files), and focusedapps/serverundercli/,cloud/,persistence/, plusserviceLauncher.test.tsandCheckpointReactor.test.ts(41 files, 182 tests). All pass.
vp fmt --checkclean across every changed file;vp lintclean (warnings only, all pre-existing).One pre-existing failure, not caused by this merge:
scripts/update-release-package-versions.test.ts > preserves manifest write context and the filesystem causechmods a file to0o400and expects the write to fail. This container runs asroot, which ignores the permission bit. The file is untouched by this merge and the test passes in
CI.
Coupled vendored subtrees:
pnpm-workspace.yamlmoved (Clerk bumps) but theeffectversion isunchanged and
infra/relay/package.jsondid not move, so neithersync:reposcoupling triggered.pnpm-lock.yamlwas regenerated withpnpm install --lockfile-only.Generated by Claude Code