Skip to content

chore(upstream): sync marcode through b1670ac7 - #49

Closed
maarco wants to merge 112 commits into
mainfrom
claude/gracious-bohr-x80z9c
Closed

chore(upstream): sync marcode through b1670ac7#49
maarco wants to merge 112 commits into
mainfrom
claude/gracious-bohr-x80z9c

Conversation

@maarco

@maarco maarco commented Aug 23, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges pingdotgg/t3code@b1670ac7 (111 upstream commits, merge base 82b8a938) into main as a
normal 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) 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.
  • apps/server/src/cli/triage.ts — upstream's new t3 triage command (feat(cli): npx t3 triage hands broken installs to your own coding agent pingdotgg/t3code#6563) read 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.
  • 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) calls
    handleNewThread, which arrived in a hunk Marcode had restructured for the pill-nav header. It
    merged clean into a ChatView that 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 to
    GitHub-hosted runners. Upstream also sharded apps/server out of test into test_server, which
    moved WorkspaceFileSystem's tests away from Marcode's ripgrep install step — the step follows
    them.

Marcode contracts held, upstream fixes taken on top

Tests added or rewritten to pin the boundary

  • ChatHeader.fork.test.tsx (new) — the header renders the title alone: no breadcrumb, rename, or
    action menu.
  • bootService.test.ts — the launchd plist exports MARCODE_HOME and no T3CODE_HOME.
  • workspaceTitlebar.fork.test.ts — rewritten to follow upstream's header refactor: the drag region
    now lives in WorkspacePageHeader, and each sidebarless call site must supply the unconditional
    inset. (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 in
    ci.yml; whichever job runs --filter t3 test installs ripgrep) rather than positions, so they
    survive 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 triage points at upstream. The new apps/server/src/cli/triagePrompt.ts tells the user to
    search issues in pingdotgg/t3code, fetch PLAYBOOK.md from that repo, and file at
    github.com/pingdotgg/t3code/issues/new. Only the MARCODE_HOME read and the command description
    were 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.
  • No live client verification. This container has no browser or simulator, so the web and mobile
    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-app before this comes
    out 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

  • This PR is small and focused — no: it is a 111-commit upstream sync, which is inherently broad.
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — see above
  • I included a video for animation/interaction changes — not applicable

Verification

Run locally against the merge commit (e39df1e3):

  • Typecheck: contracts, client-runtime, web, server (t3), scripts, desktop, mobile,
    shared — all clean (suggestion-level Effect diagnostics only).
  • Tests: full apps/web suite (292 files, 2993 tests), full packages/client-runtime (53/685), full
    packages/contracts (20/290), full scripts (22 files), and focused apps/server under
    cli/, cloud/, persistence/, plus serviceLauncher.test.ts and CheckpointReactor.test.ts
    (41 files, 182 tests). All pass.
  • vp fmt --check clean across every changed file; vp lint clean (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 cause chmods a file to 0o400 and expects the write to fail. This container runs as
root, which ignores the permission bit. The file is untouched by this merge and the test passes in
CI.

Coupled vendored subtrees: pnpm-workspace.yaml moved (Clerk bumps) but the effect version is
unchanged and infra/relay/package.json did not move, so neither sync:repos coupling triggered.
pnpm-lock.yaml was regenerated with pnpm install --lockfile-only.


Generated by Claude Code

aoright and others added 30 commits August 18, 2026 13:38
…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>
…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>
…tgg#6286)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: GPT-5.6 <noreply@openai.com>
t3-code Bot and others added 22 commits August 22, 2026 10:30
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
@maarco maarco added the upstream-sync Upstream T3 Code sync label Aug 23, 2026 — with Claude
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Aug 23, 2026
@github-actions

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 12.6 KiB 13.4 KiB +865 B (+6.7%) 15.1 KiB
Codex Thread snapshot wire 6.3 KiB 6.9 KiB +629 B (+9.8%) 7.3 KiB
Codex Live turn WebSocket wire 6.3 KiB 6.5 KiB +236 B (+3.7%) 7.8 KiB
Codex Live turn WebSocket decoded 51.8 KiB 55.0 KiB +3.2 KiB (+6.1%) 66.4 KiB
Codex Live turn messages 16 16 0 (0.0%) 21
Claude Total thread wire 12.6 KiB 13.4 KiB +875 B (+6.8%) 15.1 KiB
Claude Thread snapshot wire 6.3 KiB 6.9 KiB +631 B (+9.8%) 7.3 KiB
Claude Live turn WebSocket wire 6.3 KiB 6.5 KiB +244 B (+3.8%) 7.8 KiB
Claude Live turn WebSocket decoded 52.7 KiB 55.8 KiB +3.2 KiB (+6.0%) 66.4 KiB
Claude Live turn messages 16 16 0 (0.0%) 21

Baseline: 5bcc188 · PR result: e39df1e · 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: 109.4 KiB
  • Claude decoded thread snapshot: 110.1 KiB

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

maarco commented Aug 25, 2026

Copy link
Copy Markdown
Owner Author

Superseded by PR #51, the newer upstream sync through f035a0f4, which has now merged to main. Closing this older draft to keep the sync queue clean.

@maarco maarco closed this Aug 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL upstream-sync Upstream T3 Code sync 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.