chore(upstream): sync marcode through 70cd258d - #69

Draft
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom
Draft

chore(upstream): sync marcode through 70cd258d#69
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom

Conversation

@maarco

@maarcomaarco commented Sep 2, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges pingdotgg/t3code@70cd258d — 254 upstream commits past the f035a0f4 sync base.

Built on the unmergedb883fc06 sync branch (PR #68) rather than restarting from main, so that PR's hand resolution carries forward instead of being re-derived. This is a strict superset and supersedes #53, #55, #56, #58, #61, #63, #65 and #68 — all eight can be closed once this lands.

Conflict decisions (26 paths)

Retired right-panel file surfaces — Marcode's floating editor stays the only file-editing surface.

Service and CLI identity

  • cloud/bootService: kept marcode.service, MARCODE_HOME in both the systemd unit and the plist, and the "Marcode server" description; took upstream's downgrade refusal (fix(server): prevent accidental service downgrades pingdotgg/t3code#5302). Re-exported BOOT_SERVICE_UNIT_ENV (upstream un-exported it) because Marcode's test pins the unit name through it.
  • cli/service: took upstream's --allow-downgrade flag and installedVersion reporting; kept the "Marcode service" label.

Persistence

  • Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to 045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; the pin test was updated.

Navigation shell

Other

  • WorkspaceFileSystem: kept Marcode's mutation-target resolution and took upstream's resolveReadTarget — which also lets the floating editor read host files outside the workspace.
  • commandInvariants, cloud/linkEnvironment, package.json build filters, GrokProvider test: took upstream's dead-code removals after confirming each symbol is unused in Marcode.
  • contracts/settings.test: kept both describe blocks.
  • ThreadTerminalDrawer (+ test): Marcode keeps xterm for its search, so upstream's Ghostty context-menu rewrite is not taken. Restored three declarations the auto-merge dropped from outside the conflict blocks (MULTI_CLICK_SELECTION_ACTION_DELAY_MS, selectionPointerRef, selectionGestureActiveRef).
  • fileSaveCoordinator: both sides changed the same behavior. Upstream's confirmedRevision baseline (fix(web): avoid stale file writes on close pingdotgg/t3code#8630) met Marcode's cancel(), which zeroes latestRevision. A write resolving after a cancel no longer adopts its discarded revision as the baseline — otherwise it re-armed the entry guard, and once the user typed that many characters again the save was silently skipped. Pinned by a new test.

Fork-boundary breaks that merged with no conflict

The dangerous category: each merged cleanly, and nothing marked them. Seven in this sync — four found while resolving, three more that only CI caught.

BreakEffect if unfixedFound by
cli/app (upstream's new t3 app) read T3CODE_HOMEThe one CLI command ignoring an exported MARCODE_HOME, silently targeting the default installreview
cli/app fixtures hardcoded .t3Marcode's default home is ~/.marcode; the fake desktop listened on a socket the command never dialedreview
updatesTestHarness (extracted by upstream) set T3CODE_* env namesDesktopConfig reads MARCODE_*, so every setting was dropped and the update tests asserted against defaultsreview
bootService.test — two new upstream assertions hardcoded t3code.serviceUnit-name assertions passing against the wrong servicereview
thread-work-log imports mobile components/T3WordmarkMarcode replaced it with MarcodeMark; mobile typecheck brokeCI Check
DesktopRemoteUpdates.test set T3CODE_DISABLE_AUTO_UPDATEDesktopConfig reads MARCODE_*, so updates stayed on and no terminal report was producedCI Test
016_CanonicalizeModelSelections seeds at 43, runs through 44Marcode's ids sit one higher; the migration renumbered to 045 never ranCI Test Server 2

Plus two non-identity breaks: ElectronProtocol.test (kept the marcode: scheme and took upstream's added http:/https: media-src sources) and scripts/package.json (upstream dropped yaml as unused, but Marcode's own upstream-sync-workflow.test.ts imports it). editor-pane now passes the workspaceRoot that openFileInPreview requires.

Both cli/app breaks, the migration offset, and the retired-surface removals are pinned by tests so a future sync fails loudly instead of silently reverting.

Why

Daily upstream sync. Hotspot paths were treated as mandatory-review, not automatic keep-Marcode: upstream's correctness and security work (service downgrade refusal, stale-write guard, host-file reads, the highlighter fix, PR sidebar refresh) is preserved even where it landed in customized files.

Coupled changes:pnpm-workspace.yaml and infra/relay/package.json differ from upstream only by Marcode's own renames, so neither vendored subtree moved — no sync:repos run needed. The lockfile was regenerated with pnpm, not hand-edited.

UI Changes

Not captured, and this is the one thing still owed. The sync container has no browser or simulator, so the integrated web (test-t3-app) and mobile (test-t3-mobile) verification passes in AGENTS.md were not run. Upstream touches a lot of user-visible surface here — inline assistant citations, the file viewer, the release-notes popover, media previews, mobile video — and the sync runbook also asks for a live pass at 390px and 820px when apps/web/** and apps/mobile/** hotspots change. That pass, not CI, is what this PR is waiting on.

Checklist

  • This PR is small and focused — no: it is a 254-commit upstream sync, reviewed by conflict decision rather than by size
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — not run, see above
  • I included a video for animation/interaction changes — not run, see above

Verification

CI green on da25937: Check, Test, Mobile Native Static Analysis and Release Smoke — the four required checks — plus Test Server 1/2/3, Rust, Native fingerprint diff and claude-review. Thread transfer is within every ceiling (Codex total wire −2.3%, Claude −2.1%).

Locally: full vpr typecheck clean across all 14 packages, and the full vp run test suite clean apart from packages/shared/src/Net.test.ts — a findAvailablePort port-allocation artifact of the sync container. Both that test and its subject are byte-identical to main, and the check passes in CI.

🤖 Generated with Claude Code

https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e

t3dotggand others added 30 commits August 24, 2026 21:51
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
…gg#7140)
Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#8231)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tgg#8358)
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
maria-rcksand others added 24 commits September 2, 2026 01:33
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…tgg#9167)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…g#9101)
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Merges upstream through 70cd258 (254 commits past the f035a0f sync base),
built on the unmerged b883fc0 sync branch so its hand resolution carries
forward. This supersedes PRs #53, #55, #56, #58, #61, #63, #65 and #68.
Conflicts resolved (26 paths):
Retired right-panel file surfaces (Marcode keeps the floating editor)
- files/{FileBrowserPanel,FilePreviewPanel,filePath,filePath.test}: kept
deleted. Upstream's breadcrumbs (pingdotgg#8910) and file-tree path reconciliation
(pingdotgg#8968) arrived as new modules imported only by those panels, so they are
dropped too and added to retired-right-panel-file-surfaces.test.ts.
- rightPanelStore / RightPanelTabs: kept the `file`/`files` union members out.
- ChatMarkdown: took upstream's panelPath refactor and its onOpenMedia
fallback, but landed the open in the floating editor. Two auto-merged
`useRightPanelStore.getState().openFile(...)` media actions rerouted the
same way (they would not have compiled).
- ChatView: took upstream's refreshVcsStatus / sidebarPrRefreshKeyRef (pingdotgg#9092),
dropped its activeFileSurface derivation.
- Upstream's Oniguruma highlighter fix (pingdotgg#8360) landed on the shared producer;
every creation site in the merged tree passes PREFERRED_HIGHLIGHTER.
Service and CLI identity
- cloud/bootService: kept `marcode.service`, MARCODE_HOME in both the systemd
unit and the plist, and Marcode's "Marcode server" description; took
upstream's downgrade refusal (pingdotgg#5302). Re-exported BOOT_SERVICE_UNIT_ENV,
which upstream un-exported, because Marcode's test pins the unit name.
- cli/service: took upstream's --allow-downgrade flag and installedVersion
reporting; kept the "Marcode service" label.
Persistence
- Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to
045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; pin updated.
Navigation shell
- AppSidebarLayout / SidebarChrome: kept the FloatingPillNav shell and the
no-sidebar-on-settings behavior. Removed the lazy SettingsSidebarNav binding
upstream re-added (pingdotgg#9058); Marcode never renders it.
- SidebarUpdatePill: took upstream's extraction into SidebarUpdateReleaseNotes
(pingdotgg#9138) and re-applied Marcode's font-medium heading there.
- index.css: kept Marcode's absolute oklch dark palette; upstream's relative
darkening (pingdotgg#9064) is not ported, and the block says so.
Other
- WorkspaceFileSystem: kept Marcode's mutation-target resolution and took
upstream's resolveReadTarget, which also lets the floating editor read host
files outside the workspace.
- commandInvariants, cloud/linkEnvironment, package.json build filters,
GrokProvider test: took upstream's dead-code removals after confirming each
symbol is unused in Marcode.
- contracts/settings.test: kept both describes.
- ThreadTerminalDrawer (+test): Marcode keeps xterm for its search, so the
Ghostty context-menu rewrite is not taken. Restored three declarations the
auto-merge dropped outside the conflict blocks.
- fileSaveCoordinator: upstream's confirmedRevision baseline (pingdotgg#8630) and
Marcode's cancel() met here. A write resolving after a cancel no longer
adopts its discarded revision as the baseline, which otherwise re-armed the
entry guard and would have silently skipped a later save. Pinned by a test.
Fork-boundary breaks that merged without a conflict
- cli/app (new `t3 app`): read T3CODE_HOME; now MARCODE_HOME, like every other
Marcode CLI command. Its fixtures hardcoded `.t3`; Marcode's default home is
`~/.marcode`. Both pinned by tests.
- updatesTestHarness (extracted by upstream): set T3CODE_* env names that
DesktopConfig does not read, so every setting was silently dropped.
- bootService.test: two new upstream assertions hardcoded `t3code.service`.
- ElectronProtocol.test: kept the `marcode:` scheme and took upstream's added
http:/https: media-src sources.
- scripts/package.json: upstream removed `yaml` as unused, but Marcode's
upstream-sync-workflow test imports it.
- editor-pane: passes the workspaceRoot that openFileInPreview now requires.
Coupled changes: pnpm-workspace.yaml and infra/relay/package.json differ from
upstream only by Marcode's own renames, so neither vendored subtree moved and
no sync:repos run is needed.
Verified: typecheck clean for contracts, web, server, desktop and scripts;
focused tests for every resolved path; vp fmt --check and vp lint clean on the
changed files and directories.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Sep 2, 2026
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.1 KiB−318 B (−2.3%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB−5 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.2 KiB−313 B (−4.7%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB54.7 KiB−352 B (−0.6%)66.4 KiB
CodexLive turn messages168−8 (−50.0%)21
ClaudeTotal thread wire13.4 KiB13.2 KiB−283 B (−2.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.3 KiB−291 B (−4.3%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB55.5 KiB−352 B (−0.6%)66.4 KiB
ClaudeLive turn messages168−8 (−50.0%)21

Baseline: 200e149 · PR result: da25937 · 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.

The 70cd258 sync merged upstream's new "t3-code" work-log icon cleanly,
but it imports `components/T3Wordmark` — a module Marcode replaced with
`MarcodeMark` before this sync. No conflict, and the mobile typecheck was
the only thing that caught it.
Substitutes `MarcodeMark`, the same swap `CompactBrandTitle` already makes.
It is the fixed black-on-white rounded mark and takes no color props, so
the tint branch upstream passes goes away with it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Both merged cleanly in the 70cd258 sync and both failed CI, for the same
reason the mobile wordmark did: upstream's new test asserts on a value
Marcode renamed, and nothing conflicts.
DesktopRemoteUpdates set T3CODE_DISABLE_AUTO_UPDATE. DesktopConfig reads
MARCODE_DISABLE_AUTO_UPDATE, so the env was ignored, updates stayed on and
no terminal report was produced. The runtime message it asserts already
says MARCODE_*.
016_CanonicalizeModelSelections covers upstream's new
ClearAutomaticProjectModelDefaults migration, seeding at its 43 and running
through its 44. Marcode's ProjectWorkspaceLayout holds 033, so every shared
upstream migration sits one id higher and that boundary is 44 and 45 here —
the migration this sync renumbered to 045 never ran.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native ChangeChanges the native fingerprint; merging blocks production OTAs until a new store build ships.size:XXLvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

20 participants

@maarco@t3dotgg@lnieuwenhuis@tris203@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@StiensWout@ikifar2012@anirudhsama@none23@extoci@shivamhwp@Bil0000@walid-baharwal
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

chore(upstream): sync marcode through 70cd258d - #69

Draft
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom
Draft

chore(upstream): sync marcode through 70cd258d#69
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom

Conversation

@maarco

@maarcomaarco commented Sep 2, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges pingdotgg/t3code@70cd258d — 254 upstream commits past the f035a0f4 sync base.

Built on the unmergedb883fc06 sync branch (PR #68) rather than restarting from main, so that PR's hand resolution carries forward instead of being re-derived. This is a strict superset and supersedes #53, #55, #56, #58, #61, #63, #65 and #68 — all eight can be closed once this lands.

Conflict decisions (26 paths)

Retired right-panel file surfaces — Marcode's floating editor stays the only file-editing surface.

Service and CLI identity

  • cloud/bootService: kept marcode.service, MARCODE_HOME in both the systemd unit and the plist, and the "Marcode server" description; took upstream's downgrade refusal (fix(server): prevent accidental service downgrades pingdotgg/t3code#5302). Re-exported BOOT_SERVICE_UNIT_ENV (upstream un-exported it) because Marcode's test pins the unit name through it.
  • cli/service: took upstream's --allow-downgrade flag and installedVersion reporting; kept the "Marcode service" label.

Persistence

  • Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to 045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; the pin test was updated.

Navigation shell

Other

  • WorkspaceFileSystem: kept Marcode's mutation-target resolution and took upstream's resolveReadTarget — which also lets the floating editor read host files outside the workspace.
  • commandInvariants, cloud/linkEnvironment, package.json build filters, GrokProvider test: took upstream's dead-code removals after confirming each symbol is unused in Marcode.
  • contracts/settings.test: kept both describe blocks.
  • ThreadTerminalDrawer (+ test): Marcode keeps xterm for its search, so upstream's Ghostty context-menu rewrite is not taken. Restored three declarations the auto-merge dropped from outside the conflict blocks (MULTI_CLICK_SELECTION_ACTION_DELAY_MS, selectionPointerRef, selectionGestureActiveRef).
  • fileSaveCoordinator: both sides changed the same behavior. Upstream's confirmedRevision baseline (fix(web): avoid stale file writes on close pingdotgg/t3code#8630) met Marcode's cancel(), which zeroes latestRevision. A write resolving after a cancel no longer adopts its discarded revision as the baseline — otherwise it re-armed the entry guard, and once the user typed that many characters again the save was silently skipped. Pinned by a new test.

Fork-boundary breaks that merged with no conflict

The dangerous category: each merged cleanly, and nothing marked them. Seven in this sync — four found while resolving, three more that only CI caught.

BreakEffect if unfixedFound by
cli/app (upstream's new t3 app) read T3CODE_HOMEThe one CLI command ignoring an exported MARCODE_HOME, silently targeting the default installreview
cli/app fixtures hardcoded .t3Marcode's default home is ~/.marcode; the fake desktop listened on a socket the command never dialedreview
updatesTestHarness (extracted by upstream) set T3CODE_* env namesDesktopConfig reads MARCODE_*, so every setting was dropped and the update tests asserted against defaultsreview
bootService.test — two new upstream assertions hardcoded t3code.serviceUnit-name assertions passing against the wrong servicereview
thread-work-log imports mobile components/T3WordmarkMarcode replaced it with MarcodeMark; mobile typecheck brokeCI Check
DesktopRemoteUpdates.test set T3CODE_DISABLE_AUTO_UPDATEDesktopConfig reads MARCODE_*, so updates stayed on and no terminal report was producedCI Test
016_CanonicalizeModelSelections seeds at 43, runs through 44Marcode's ids sit one higher; the migration renumbered to 045 never ranCI Test Server 2

Plus two non-identity breaks: ElectronProtocol.test (kept the marcode: scheme and took upstream's added http:/https: media-src sources) and scripts/package.json (upstream dropped yaml as unused, but Marcode's own upstream-sync-workflow.test.ts imports it). editor-pane now passes the workspaceRoot that openFileInPreview requires.

Both cli/app breaks, the migration offset, and the retired-surface removals are pinned by tests so a future sync fails loudly instead of silently reverting.

Why

Daily upstream sync. Hotspot paths were treated as mandatory-review, not automatic keep-Marcode: upstream's correctness and security work (service downgrade refusal, stale-write guard, host-file reads, the highlighter fix, PR sidebar refresh) is preserved even where it landed in customized files.

Coupled changes:pnpm-workspace.yaml and infra/relay/package.json differ from upstream only by Marcode's own renames, so neither vendored subtree moved — no sync:repos run needed. The lockfile was regenerated with pnpm, not hand-edited.

UI Changes

Not captured, and this is the one thing still owed. The sync container has no browser or simulator, so the integrated web (test-t3-app) and mobile (test-t3-mobile) verification passes in AGENTS.md were not run. Upstream touches a lot of user-visible surface here — inline assistant citations, the file viewer, the release-notes popover, media previews, mobile video — and the sync runbook also asks for a live pass at 390px and 820px when apps/web/** and apps/mobile/** hotspots change. That pass, not CI, is what this PR is waiting on.

Checklist

  • This PR is small and focused — no: it is a 254-commit upstream sync, reviewed by conflict decision rather than by size
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — not run, see above
  • I included a video for animation/interaction changes — not run, see above

Verification

CI green on da25937: Check, Test, Mobile Native Static Analysis and Release Smoke — the four required checks — plus Test Server 1/2/3, Rust, Native fingerprint diff and claude-review. Thread transfer is within every ceiling (Codex total wire −2.3%, Claude −2.1%).

Locally: full vpr typecheck clean across all 14 packages, and the full vp run test suite clean apart from packages/shared/src/Net.test.ts — a findAvailablePort port-allocation artifact of the sync container. Both that test and its subject are byte-identical to main, and the check passes in CI.

🤖 Generated with Claude Code

https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e

t3dotggand others added 30 commits August 24, 2026 21:51
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
…gg#7140)
Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#8231)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tgg#8358)
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
maria-rcksand others added 24 commits September 2, 2026 01:33
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…tgg#9167)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…g#9101)
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Merges upstream through 70cd258 (254 commits past the f035a0f sync base),
built on the unmerged b883fc0 sync branch so its hand resolution carries
forward. This supersedes PRs #53, #55, #56, #58, #61, #63, #65 and #68.
Conflicts resolved (26 paths):
Retired right-panel file surfaces (Marcode keeps the floating editor)
- files/{FileBrowserPanel,FilePreviewPanel,filePath,filePath.test}: kept
deleted. Upstream's breadcrumbs (pingdotgg#8910) and file-tree path reconciliation
(pingdotgg#8968) arrived as new modules imported only by those panels, so they are
dropped too and added to retired-right-panel-file-surfaces.test.ts.
- rightPanelStore / RightPanelTabs: kept the `file`/`files` union members out.
- ChatMarkdown: took upstream's panelPath refactor and its onOpenMedia
fallback, but landed the open in the floating editor. Two auto-merged
`useRightPanelStore.getState().openFile(...)` media actions rerouted the
same way (they would not have compiled).
- ChatView: took upstream's refreshVcsStatus / sidebarPrRefreshKeyRef (pingdotgg#9092),
dropped its activeFileSurface derivation.
- Upstream's Oniguruma highlighter fix (pingdotgg#8360) landed on the shared producer;
every creation site in the merged tree passes PREFERRED_HIGHLIGHTER.
Service and CLI identity
- cloud/bootService: kept `marcode.service`, MARCODE_HOME in both the systemd
unit and the plist, and Marcode's "Marcode server" description; took
upstream's downgrade refusal (pingdotgg#5302). Re-exported BOOT_SERVICE_UNIT_ENV,
which upstream un-exported, because Marcode's test pins the unit name.
- cli/service: took upstream's --allow-downgrade flag and installedVersion
reporting; kept the "Marcode service" label.
Persistence
- Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to
045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; pin updated.
Navigation shell
- AppSidebarLayout / SidebarChrome: kept the FloatingPillNav shell and the
no-sidebar-on-settings behavior. Removed the lazy SettingsSidebarNav binding
upstream re-added (pingdotgg#9058); Marcode never renders it.
- SidebarUpdatePill: took upstream's extraction into SidebarUpdateReleaseNotes
(pingdotgg#9138) and re-applied Marcode's font-medium heading there.
- index.css: kept Marcode's absolute oklch dark palette; upstream's relative
darkening (pingdotgg#9064) is not ported, and the block says so.
Other
- WorkspaceFileSystem: kept Marcode's mutation-target resolution and took
upstream's resolveReadTarget, which also lets the floating editor read host
files outside the workspace.
- commandInvariants, cloud/linkEnvironment, package.json build filters,
GrokProvider test: took upstream's dead-code removals after confirming each
symbol is unused in Marcode.
- contracts/settings.test: kept both describes.
- ThreadTerminalDrawer (+test): Marcode keeps xterm for its search, so the
Ghostty context-menu rewrite is not taken. Restored three declarations the
auto-merge dropped outside the conflict blocks.
- fileSaveCoordinator: upstream's confirmedRevision baseline (pingdotgg#8630) and
Marcode's cancel() met here. A write resolving after a cancel no longer
adopts its discarded revision as the baseline, which otherwise re-armed the
entry guard and would have silently skipped a later save. Pinned by a test.
Fork-boundary breaks that merged without a conflict
- cli/app (new `t3 app`): read T3CODE_HOME; now MARCODE_HOME, like every other
Marcode CLI command. Its fixtures hardcoded `.t3`; Marcode's default home is
`~/.marcode`. Both pinned by tests.
- updatesTestHarness (extracted by upstream): set T3CODE_* env names that
DesktopConfig does not read, so every setting was silently dropped.
- bootService.test: two new upstream assertions hardcoded `t3code.service`.
- ElectronProtocol.test: kept the `marcode:` scheme and took upstream's added
http:/https: media-src sources.
- scripts/package.json: upstream removed `yaml` as unused, but Marcode's
upstream-sync-workflow test imports it.
- editor-pane: passes the workspaceRoot that openFileInPreview now requires.
Coupled changes: pnpm-workspace.yaml and infra/relay/package.json differ from
upstream only by Marcode's own renames, so neither vendored subtree moved and
no sync:repos run is needed.
Verified: typecheck clean for contracts, web, server, desktop and scripts;
focused tests for every resolved path; vp fmt --check and vp lint clean on the
changed files and directories.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Sep 2, 2026
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.1 KiB−318 B (−2.3%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB−5 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.2 KiB−313 B (−4.7%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB54.7 KiB−352 B (−0.6%)66.4 KiB
CodexLive turn messages168−8 (−50.0%)21
ClaudeTotal thread wire13.4 KiB13.2 KiB−283 B (−2.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.3 KiB−291 B (−4.3%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB55.5 KiB−352 B (−0.6%)66.4 KiB
ClaudeLive turn messages168−8 (−50.0%)21

Baseline: 200e149 · PR result: da25937 · 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.

The 70cd258 sync merged upstream's new "t3-code" work-log icon cleanly,
but it imports `components/T3Wordmark` — a module Marcode replaced with
`MarcodeMark` before this sync. No conflict, and the mobile typecheck was
the only thing that caught it.
Substitutes `MarcodeMark`, the same swap `CompactBrandTitle` already makes.
It is the fixed black-on-white rounded mark and takes no color props, so
the tint branch upstream passes goes away with it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Both merged cleanly in the 70cd258 sync and both failed CI, for the same
reason the mobile wordmark did: upstream's new test asserts on a value
Marcode renamed, and nothing conflicts.
DesktopRemoteUpdates set T3CODE_DISABLE_AUTO_UPDATE. DesktopConfig reads
MARCODE_DISABLE_AUTO_UPDATE, so the env was ignored, updates stayed on and
no terminal report was produced. The runtime message it asserts already
says MARCODE_*.
016_CanonicalizeModelSelections covers upstream's new
ClearAutomaticProjectModelDefaults migration, seeding at its 43 and running
through its 44. Marcode's ProjectWorkspaceLayout holds 033, so every shared
upstream migration sits one id higher and that boundary is 44 and 45 here —
the migration this sync renumbered to 045 never ran.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native ChangeChanges the native fingerprint; merging blocks production OTAs until a new store build ships.size:XXLvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

20 participants

@maarco@t3dotgg@lnieuwenhuis@tris203@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@StiensWout@ikifar2012@anirudhsama@none23@extoci@shivamhwp@Bil0000@walid-baharwal
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore(upstream): sync marcode through 70cd258d - #69

Draft
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom
Draft

chore(upstream): sync marcode through 70cd258d#69
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom

Conversation

@maarco

@maarcomaarco commented Sep 2, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges pingdotgg/t3code@70cd258d — 254 upstream commits past the f035a0f4 sync base.

Built on the unmergedb883fc06 sync branch (PR #68) rather than restarting from main, so that PR's hand resolution carries forward instead of being re-derived. This is a strict superset and supersedes #53, #55, #56, #58, #61, #63, #65 and #68 — all eight can be closed once this lands.

Conflict decisions (26 paths)

Retired right-panel file surfaces — Marcode's floating editor stays the only file-editing surface.

Service and CLI identity

  • cloud/bootService: kept marcode.service, MARCODE_HOME in both the systemd unit and the plist, and the "Marcode server" description; took upstream's downgrade refusal (fix(server): prevent accidental service downgrades pingdotgg/t3code#5302). Re-exported BOOT_SERVICE_UNIT_ENV (upstream un-exported it) because Marcode's test pins the unit name through it.
  • cli/service: took upstream's --allow-downgrade flag and installedVersion reporting; kept the "Marcode service" label.

Persistence

  • Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to 045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; the pin test was updated.

Navigation shell

Other

  • WorkspaceFileSystem: kept Marcode's mutation-target resolution and took upstream's resolveReadTarget — which also lets the floating editor read host files outside the workspace.
  • commandInvariants, cloud/linkEnvironment, package.json build filters, GrokProvider test: took upstream's dead-code removals after confirming each symbol is unused in Marcode.
  • contracts/settings.test: kept both describe blocks.
  • ThreadTerminalDrawer (+ test): Marcode keeps xterm for its search, so upstream's Ghostty context-menu rewrite is not taken. Restored three declarations the auto-merge dropped from outside the conflict blocks (MULTI_CLICK_SELECTION_ACTION_DELAY_MS, selectionPointerRef, selectionGestureActiveRef).
  • fileSaveCoordinator: both sides changed the same behavior. Upstream's confirmedRevision baseline (fix(web): avoid stale file writes on close pingdotgg/t3code#8630) met Marcode's cancel(), which zeroes latestRevision. A write resolving after a cancel no longer adopts its discarded revision as the baseline — otherwise it re-armed the entry guard, and once the user typed that many characters again the save was silently skipped. Pinned by a new test.

Fork-boundary breaks that merged with no conflict

The dangerous category: each merged cleanly, and nothing marked them. Seven in this sync — four found while resolving, three more that only CI caught.

BreakEffect if unfixedFound by
cli/app (upstream's new t3 app) read T3CODE_HOMEThe one CLI command ignoring an exported MARCODE_HOME, silently targeting the default installreview
cli/app fixtures hardcoded .t3Marcode's default home is ~/.marcode; the fake desktop listened on a socket the command never dialedreview
updatesTestHarness (extracted by upstream) set T3CODE_* env namesDesktopConfig reads MARCODE_*, so every setting was dropped and the update tests asserted against defaultsreview
bootService.test — two new upstream assertions hardcoded t3code.serviceUnit-name assertions passing against the wrong servicereview
thread-work-log imports mobile components/T3WordmarkMarcode replaced it with MarcodeMark; mobile typecheck brokeCI Check
DesktopRemoteUpdates.test set T3CODE_DISABLE_AUTO_UPDATEDesktopConfig reads MARCODE_*, so updates stayed on and no terminal report was producedCI Test
016_CanonicalizeModelSelections seeds at 43, runs through 44Marcode's ids sit one higher; the migration renumbered to 045 never ranCI Test Server 2

Plus two non-identity breaks: ElectronProtocol.test (kept the marcode: scheme and took upstream's added http:/https: media-src sources) and scripts/package.json (upstream dropped yaml as unused, but Marcode's own upstream-sync-workflow.test.ts imports it). editor-pane now passes the workspaceRoot that openFileInPreview requires.

Both cli/app breaks, the migration offset, and the retired-surface removals are pinned by tests so a future sync fails loudly instead of silently reverting.

Why

Daily upstream sync. Hotspot paths were treated as mandatory-review, not automatic keep-Marcode: upstream's correctness and security work (service downgrade refusal, stale-write guard, host-file reads, the highlighter fix, PR sidebar refresh) is preserved even where it landed in customized files.

Coupled changes:pnpm-workspace.yaml and infra/relay/package.json differ from upstream only by Marcode's own renames, so neither vendored subtree moved — no sync:repos run needed. The lockfile was regenerated with pnpm, not hand-edited.

UI Changes

Not captured, and this is the one thing still owed. The sync container has no browser or simulator, so the integrated web (test-t3-app) and mobile (test-t3-mobile) verification passes in AGENTS.md were not run. Upstream touches a lot of user-visible surface here — inline assistant citations, the file viewer, the release-notes popover, media previews, mobile video — and the sync runbook also asks for a live pass at 390px and 820px when apps/web/** and apps/mobile/** hotspots change. That pass, not CI, is what this PR is waiting on.

Checklist

  • This PR is small and focused — no: it is a 254-commit upstream sync, reviewed by conflict decision rather than by size
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — not run, see above
  • I included a video for animation/interaction changes — not run, see above

Verification

CI green on da25937: Check, Test, Mobile Native Static Analysis and Release Smoke — the four required checks — plus Test Server 1/2/3, Rust, Native fingerprint diff and claude-review. Thread transfer is within every ceiling (Codex total wire −2.3%, Claude −2.1%).

Locally: full vpr typecheck clean across all 14 packages, and the full vp run test suite clean apart from packages/shared/src/Net.test.ts — a findAvailablePort port-allocation artifact of the sync container. Both that test and its subject are byte-identical to main, and the check passes in CI.

🤖 Generated with Claude Code

https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e

t3dotggand others added 30 commits August 24, 2026 21:51
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
…gg#7140)
Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#8231)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tgg#8358)
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
maria-rcksand others added 24 commits September 2, 2026 01:33
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…tgg#9167)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…g#9101)
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Merges upstream through 70cd258 (254 commits past the f035a0f sync base),
built on the unmerged b883fc0 sync branch so its hand resolution carries
forward. This supersedes PRs #53, #55, #56, #58, #61, #63, #65 and #68.
Conflicts resolved (26 paths):
Retired right-panel file surfaces (Marcode keeps the floating editor)
- files/{FileBrowserPanel,FilePreviewPanel,filePath,filePath.test}: kept
deleted. Upstream's breadcrumbs (pingdotgg#8910) and file-tree path reconciliation
(pingdotgg#8968) arrived as new modules imported only by those panels, so they are
dropped too and added to retired-right-panel-file-surfaces.test.ts.
- rightPanelStore / RightPanelTabs: kept the `file`/`files` union members out.
- ChatMarkdown: took upstream's panelPath refactor and its onOpenMedia
fallback, but landed the open in the floating editor. Two auto-merged
`useRightPanelStore.getState().openFile(...)` media actions rerouted the
same way (they would not have compiled).
- ChatView: took upstream's refreshVcsStatus / sidebarPrRefreshKeyRef (pingdotgg#9092),
dropped its activeFileSurface derivation.
- Upstream's Oniguruma highlighter fix (pingdotgg#8360) landed on the shared producer;
every creation site in the merged tree passes PREFERRED_HIGHLIGHTER.
Service and CLI identity
- cloud/bootService: kept `marcode.service`, MARCODE_HOME in both the systemd
unit and the plist, and Marcode's "Marcode server" description; took
upstream's downgrade refusal (pingdotgg#5302). Re-exported BOOT_SERVICE_UNIT_ENV,
which upstream un-exported, because Marcode's test pins the unit name.
- cli/service: took upstream's --allow-downgrade flag and installedVersion
reporting; kept the "Marcode service" label.
Persistence
- Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to
045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; pin updated.
Navigation shell
- AppSidebarLayout / SidebarChrome: kept the FloatingPillNav shell and the
no-sidebar-on-settings behavior. Removed the lazy SettingsSidebarNav binding
upstream re-added (pingdotgg#9058); Marcode never renders it.
- SidebarUpdatePill: took upstream's extraction into SidebarUpdateReleaseNotes
(pingdotgg#9138) and re-applied Marcode's font-medium heading there.
- index.css: kept Marcode's absolute oklch dark palette; upstream's relative
darkening (pingdotgg#9064) is not ported, and the block says so.
Other
- WorkspaceFileSystem: kept Marcode's mutation-target resolution and took
upstream's resolveReadTarget, which also lets the floating editor read host
files outside the workspace.
- commandInvariants, cloud/linkEnvironment, package.json build filters,
GrokProvider test: took upstream's dead-code removals after confirming each
symbol is unused in Marcode.
- contracts/settings.test: kept both describes.
- ThreadTerminalDrawer (+test): Marcode keeps xterm for its search, so the
Ghostty context-menu rewrite is not taken. Restored three declarations the
auto-merge dropped outside the conflict blocks.
- fileSaveCoordinator: upstream's confirmedRevision baseline (pingdotgg#8630) and
Marcode's cancel() met here. A write resolving after a cancel no longer
adopts its discarded revision as the baseline, which otherwise re-armed the
entry guard and would have silently skipped a later save. Pinned by a test.
Fork-boundary breaks that merged without a conflict
- cli/app (new `t3 app`): read T3CODE_HOME; now MARCODE_HOME, like every other
Marcode CLI command. Its fixtures hardcoded `.t3`; Marcode's default home is
`~/.marcode`. Both pinned by tests.
- updatesTestHarness (extracted by upstream): set T3CODE_* env names that
DesktopConfig does not read, so every setting was silently dropped.
- bootService.test: two new upstream assertions hardcoded `t3code.service`.
- ElectronProtocol.test: kept the `marcode:` scheme and took upstream's added
http:/https: media-src sources.
- scripts/package.json: upstream removed `yaml` as unused, but Marcode's
upstream-sync-workflow test imports it.
- editor-pane: passes the workspaceRoot that openFileInPreview now requires.
Coupled changes: pnpm-workspace.yaml and infra/relay/package.json differ from
upstream only by Marcode's own renames, so neither vendored subtree moved and
no sync:repos run is needed.
Verified: typecheck clean for contracts, web, server, desktop and scripts;
focused tests for every resolved path; vp fmt --check and vp lint clean on the
changed files and directories.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Sep 2, 2026
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.1 KiB−318 B (−2.3%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB−5 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.2 KiB−313 B (−4.7%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB54.7 KiB−352 B (−0.6%)66.4 KiB
CodexLive turn messages168−8 (−50.0%)21
ClaudeTotal thread wire13.4 KiB13.2 KiB−283 B (−2.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.3 KiB−291 B (−4.3%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB55.5 KiB−352 B (−0.6%)66.4 KiB
ClaudeLive turn messages168−8 (−50.0%)21

Baseline: 200e149 · PR result: da25937 · 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.

The 70cd258 sync merged upstream's new "t3-code" work-log icon cleanly,
but it imports `components/T3Wordmark` — a module Marcode replaced with
`MarcodeMark` before this sync. No conflict, and the mobile typecheck was
the only thing that caught it.
Substitutes `MarcodeMark`, the same swap `CompactBrandTitle` already makes.
It is the fixed black-on-white rounded mark and takes no color props, so
the tint branch upstream passes goes away with it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Both merged cleanly in the 70cd258 sync and both failed CI, for the same
reason the mobile wordmark did: upstream's new test asserts on a value
Marcode renamed, and nothing conflicts.
DesktopRemoteUpdates set T3CODE_DISABLE_AUTO_UPDATE. DesktopConfig reads
MARCODE_DISABLE_AUTO_UPDATE, so the env was ignored, updates stayed on and
no terminal report was produced. The runtime message it asserts already
says MARCODE_*.
016_CanonicalizeModelSelections covers upstream's new
ClearAutomaticProjectModelDefaults migration, seeding at its 43 and running
through its 44. Marcode's ProjectWorkspaceLayout holds 033, so every shared
upstream migration sits one id higher and that boundary is 44 and 45 here —
the migration this sync renumbered to 045 never ran.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native ChangeChanges the native fingerprint; merging blocks production OTAs until a new store build ships.size:XXLvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

20 participants

@maarco@t3dotgg@lnieuwenhuis@tris203@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@StiensWout@ikifar2012@anirudhsama@none23@extoci@shivamhwp@Bil0000@walid-baharwal
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore(upstream): sync marcode through 70cd258d - #69

Draft
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom
Draft

chore(upstream): sync marcode through 70cd258d#69
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom

Conversation

@maarco

@maarcomaarco commented Sep 2, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges pingdotgg/t3code@70cd258d — 254 upstream commits past the f035a0f4 sync base.

Built on the unmergedb883fc06 sync branch (PR #68) rather than restarting from main, so that PR's hand resolution carries forward instead of being re-derived. This is a strict superset and supersedes #53, #55, #56, #58, #61, #63, #65 and #68 — all eight can be closed once this lands.

Conflict decisions (26 paths)

Retired right-panel file surfaces — Marcode's floating editor stays the only file-editing surface.

Service and CLI identity

  • cloud/bootService: kept marcode.service, MARCODE_HOME in both the systemd unit and the plist, and the "Marcode server" description; took upstream's downgrade refusal (fix(server): prevent accidental service downgrades pingdotgg/t3code#5302). Re-exported BOOT_SERVICE_UNIT_ENV (upstream un-exported it) because Marcode's test pins the unit name through it.
  • cli/service: took upstream's --allow-downgrade flag and installedVersion reporting; kept the "Marcode service" label.

Persistence

  • Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to 045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; the pin test was updated.

Navigation shell

Other

  • WorkspaceFileSystem: kept Marcode's mutation-target resolution and took upstream's resolveReadTarget — which also lets the floating editor read host files outside the workspace.
  • commandInvariants, cloud/linkEnvironment, package.json build filters, GrokProvider test: took upstream's dead-code removals after confirming each symbol is unused in Marcode.
  • contracts/settings.test: kept both describe blocks.
  • ThreadTerminalDrawer (+ test): Marcode keeps xterm for its search, so upstream's Ghostty context-menu rewrite is not taken. Restored three declarations the auto-merge dropped from outside the conflict blocks (MULTI_CLICK_SELECTION_ACTION_DELAY_MS, selectionPointerRef, selectionGestureActiveRef).
  • fileSaveCoordinator: both sides changed the same behavior. Upstream's confirmedRevision baseline (fix(web): avoid stale file writes on close pingdotgg/t3code#8630) met Marcode's cancel(), which zeroes latestRevision. A write resolving after a cancel no longer adopts its discarded revision as the baseline — otherwise it re-armed the entry guard, and once the user typed that many characters again the save was silently skipped. Pinned by a new test.

Fork-boundary breaks that merged with no conflict

The dangerous category: each merged cleanly, and nothing marked them. Seven in this sync — four found while resolving, three more that only CI caught.

BreakEffect if unfixedFound by
cli/app (upstream's new t3 app) read T3CODE_HOMEThe one CLI command ignoring an exported MARCODE_HOME, silently targeting the default installreview
cli/app fixtures hardcoded .t3Marcode's default home is ~/.marcode; the fake desktop listened on a socket the command never dialedreview
updatesTestHarness (extracted by upstream) set T3CODE_* env namesDesktopConfig reads MARCODE_*, so every setting was dropped and the update tests asserted against defaultsreview
bootService.test — two new upstream assertions hardcoded t3code.serviceUnit-name assertions passing against the wrong servicereview
thread-work-log imports mobile components/T3WordmarkMarcode replaced it with MarcodeMark; mobile typecheck brokeCI Check
DesktopRemoteUpdates.test set T3CODE_DISABLE_AUTO_UPDATEDesktopConfig reads MARCODE_*, so updates stayed on and no terminal report was producedCI Test
016_CanonicalizeModelSelections seeds at 43, runs through 44Marcode's ids sit one higher; the migration renumbered to 045 never ranCI Test Server 2

Plus two non-identity breaks: ElectronProtocol.test (kept the marcode: scheme and took upstream's added http:/https: media-src sources) and scripts/package.json (upstream dropped yaml as unused, but Marcode's own upstream-sync-workflow.test.ts imports it). editor-pane now passes the workspaceRoot that openFileInPreview requires.

Both cli/app breaks, the migration offset, and the retired-surface removals are pinned by tests so a future sync fails loudly instead of silently reverting.

Why

Daily upstream sync. Hotspot paths were treated as mandatory-review, not automatic keep-Marcode: upstream's correctness and security work (service downgrade refusal, stale-write guard, host-file reads, the highlighter fix, PR sidebar refresh) is preserved even where it landed in customized files.

Coupled changes:pnpm-workspace.yaml and infra/relay/package.json differ from upstream only by Marcode's own renames, so neither vendored subtree moved — no sync:repos run needed. The lockfile was regenerated with pnpm, not hand-edited.

UI Changes

Not captured, and this is the one thing still owed. The sync container has no browser or simulator, so the integrated web (test-t3-app) and mobile (test-t3-mobile) verification passes in AGENTS.md were not run. Upstream touches a lot of user-visible surface here — inline assistant citations, the file viewer, the release-notes popover, media previews, mobile video — and the sync runbook also asks for a live pass at 390px and 820px when apps/web/** and apps/mobile/** hotspots change. That pass, not CI, is what this PR is waiting on.

Checklist

  • This PR is small and focused — no: it is a 254-commit upstream sync, reviewed by conflict decision rather than by size
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — not run, see above
  • I included a video for animation/interaction changes — not run, see above

Verification

CI green on da25937: Check, Test, Mobile Native Static Analysis and Release Smoke — the four required checks — plus Test Server 1/2/3, Rust, Native fingerprint diff and claude-review. Thread transfer is within every ceiling (Codex total wire −2.3%, Claude −2.1%).

Locally: full vpr typecheck clean across all 14 packages, and the full vp run test suite clean apart from packages/shared/src/Net.test.ts — a findAvailablePort port-allocation artifact of the sync container. Both that test and its subject are byte-identical to main, and the check passes in CI.

🤖 Generated with Claude Code

https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e

t3dotggand others added 30 commits August 24, 2026 21:51
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
…gg#7140)
Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#8231)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tgg#8358)
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
maria-rcksand others added 24 commits September 2, 2026 01:33
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…tgg#9167)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…g#9101)
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Merges upstream through 70cd258 (254 commits past the f035a0f sync base),
built on the unmerged b883fc0 sync branch so its hand resolution carries
forward. This supersedes PRs #53, #55, #56, #58, #61, #63, #65 and #68.
Conflicts resolved (26 paths):
Retired right-panel file surfaces (Marcode keeps the floating editor)
- files/{FileBrowserPanel,FilePreviewPanel,filePath,filePath.test}: kept
deleted. Upstream's breadcrumbs (pingdotgg#8910) and file-tree path reconciliation
(pingdotgg#8968) arrived as new modules imported only by those panels, so they are
dropped too and added to retired-right-panel-file-surfaces.test.ts.
- rightPanelStore / RightPanelTabs: kept the `file`/`files` union members out.
- ChatMarkdown: took upstream's panelPath refactor and its onOpenMedia
fallback, but landed the open in the floating editor. Two auto-merged
`useRightPanelStore.getState().openFile(...)` media actions rerouted the
same way (they would not have compiled).
- ChatView: took upstream's refreshVcsStatus / sidebarPrRefreshKeyRef (pingdotgg#9092),
dropped its activeFileSurface derivation.
- Upstream's Oniguruma highlighter fix (pingdotgg#8360) landed on the shared producer;
every creation site in the merged tree passes PREFERRED_HIGHLIGHTER.
Service and CLI identity
- cloud/bootService: kept `marcode.service`, MARCODE_HOME in both the systemd
unit and the plist, and Marcode's "Marcode server" description; took
upstream's downgrade refusal (pingdotgg#5302). Re-exported BOOT_SERVICE_UNIT_ENV,
which upstream un-exported, because Marcode's test pins the unit name.
- cli/service: took upstream's --allow-downgrade flag and installedVersion
reporting; kept the "Marcode service" label.
Persistence
- Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to
045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; pin updated.
Navigation shell
- AppSidebarLayout / SidebarChrome: kept the FloatingPillNav shell and the
no-sidebar-on-settings behavior. Removed the lazy SettingsSidebarNav binding
upstream re-added (pingdotgg#9058); Marcode never renders it.
- SidebarUpdatePill: took upstream's extraction into SidebarUpdateReleaseNotes
(pingdotgg#9138) and re-applied Marcode's font-medium heading there.
- index.css: kept Marcode's absolute oklch dark palette; upstream's relative
darkening (pingdotgg#9064) is not ported, and the block says so.
Other
- WorkspaceFileSystem: kept Marcode's mutation-target resolution and took
upstream's resolveReadTarget, which also lets the floating editor read host
files outside the workspace.
- commandInvariants, cloud/linkEnvironment, package.json build filters,
GrokProvider test: took upstream's dead-code removals after confirming each
symbol is unused in Marcode.
- contracts/settings.test: kept both describes.
- ThreadTerminalDrawer (+test): Marcode keeps xterm for its search, so the
Ghostty context-menu rewrite is not taken. Restored three declarations the
auto-merge dropped outside the conflict blocks.
- fileSaveCoordinator: upstream's confirmedRevision baseline (pingdotgg#8630) and
Marcode's cancel() met here. A write resolving after a cancel no longer
adopts its discarded revision as the baseline, which otherwise re-armed the
entry guard and would have silently skipped a later save. Pinned by a test.
Fork-boundary breaks that merged without a conflict
- cli/app (new `t3 app`): read T3CODE_HOME; now MARCODE_HOME, like every other
Marcode CLI command. Its fixtures hardcoded `.t3`; Marcode's default home is
`~/.marcode`. Both pinned by tests.
- updatesTestHarness (extracted by upstream): set T3CODE_* env names that
DesktopConfig does not read, so every setting was silently dropped.
- bootService.test: two new upstream assertions hardcoded `t3code.service`.
- ElectronProtocol.test: kept the `marcode:` scheme and took upstream's added
http:/https: media-src sources.
- scripts/package.json: upstream removed `yaml` as unused, but Marcode's
upstream-sync-workflow test imports it.
- editor-pane: passes the workspaceRoot that openFileInPreview now requires.
Coupled changes: pnpm-workspace.yaml and infra/relay/package.json differ from
upstream only by Marcode's own renames, so neither vendored subtree moved and
no sync:repos run is needed.
Verified: typecheck clean for contracts, web, server, desktop and scripts;
focused tests for every resolved path; vp fmt --check and vp lint clean on the
changed files and directories.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Sep 2, 2026
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.1 KiB−318 B (−2.3%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB−5 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.2 KiB−313 B (−4.7%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB54.7 KiB−352 B (−0.6%)66.4 KiB
CodexLive turn messages168−8 (−50.0%)21
ClaudeTotal thread wire13.4 KiB13.2 KiB−283 B (−2.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.3 KiB−291 B (−4.3%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB55.5 KiB−352 B (−0.6%)66.4 KiB
ClaudeLive turn messages168−8 (−50.0%)21

Baseline: 200e149 · PR result: da25937 · 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.

The 70cd258 sync merged upstream's new "t3-code" work-log icon cleanly,
but it imports `components/T3Wordmark` — a module Marcode replaced with
`MarcodeMark` before this sync. No conflict, and the mobile typecheck was
the only thing that caught it.
Substitutes `MarcodeMark`, the same swap `CompactBrandTitle` already makes.
It is the fixed black-on-white rounded mark and takes no color props, so
the tint branch upstream passes goes away with it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Both merged cleanly in the 70cd258 sync and both failed CI, for the same
reason the mobile wordmark did: upstream's new test asserts on a value
Marcode renamed, and nothing conflicts.
DesktopRemoteUpdates set T3CODE_DISABLE_AUTO_UPDATE. DesktopConfig reads
MARCODE_DISABLE_AUTO_UPDATE, so the env was ignored, updates stayed on and
no terminal report was produced. The runtime message it asserts already
says MARCODE_*.
016_CanonicalizeModelSelections covers upstream's new
ClearAutomaticProjectModelDefaults migration, seeding at its 43 and running
through its 44. Marcode's ProjectWorkspaceLayout holds 033, so every shared
upstream migration sits one id higher and that boundary is 44 and 45 here —
the migration this sync renumbered to 045 never ran.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native ChangeChanges the native fingerprint; merging blocks production OTAs until a new store build ships.size:XXLvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

20 participants

@maarco@t3dotgg@lnieuwenhuis@tris203@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@StiensWout@ikifar2012@anirudhsama@none23@extoci@shivamhwp@Bil0000@walid-baharwal
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

chore(upstream): sync marcode through 70cd258d - #69

Draft
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom
Draft

chore(upstream): sync marcode through 70cd258d#69
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom

Conversation

@maarco

@maarcomaarco commented Sep 2, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges pingdotgg/t3code@70cd258d — 254 upstream commits past the f035a0f4 sync base.

Built on the unmergedb883fc06 sync branch (PR #68) rather than restarting from main, so that PR's hand resolution carries forward instead of being re-derived. This is a strict superset and supersedes #53, #55, #56, #58, #61, #63, #65 and #68 — all eight can be closed once this lands.

Conflict decisions (26 paths)

Retired right-panel file surfaces — Marcode's floating editor stays the only file-editing surface.

Service and CLI identity

  • cloud/bootService: kept marcode.service, MARCODE_HOME in both the systemd unit and the plist, and the "Marcode server" description; took upstream's downgrade refusal (fix(server): prevent accidental service downgrades pingdotgg/t3code#5302). Re-exported BOOT_SERVICE_UNIT_ENV (upstream un-exported it) because Marcode's test pins the unit name through it.
  • cli/service: took upstream's --allow-downgrade flag and installedVersion reporting; kept the "Marcode service" label.

Persistence

  • Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to 045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; the pin test was updated.

Navigation shell

Other

  • WorkspaceFileSystem: kept Marcode's mutation-target resolution and took upstream's resolveReadTarget — which also lets the floating editor read host files outside the workspace.
  • commandInvariants, cloud/linkEnvironment, package.json build filters, GrokProvider test: took upstream's dead-code removals after confirming each symbol is unused in Marcode.
  • contracts/settings.test: kept both describe blocks.
  • ThreadTerminalDrawer (+ test): Marcode keeps xterm for its search, so upstream's Ghostty context-menu rewrite is not taken. Restored three declarations the auto-merge dropped from outside the conflict blocks (MULTI_CLICK_SELECTION_ACTION_DELAY_MS, selectionPointerRef, selectionGestureActiveRef).
  • fileSaveCoordinator: both sides changed the same behavior. Upstream's confirmedRevision baseline (fix(web): avoid stale file writes on close pingdotgg/t3code#8630) met Marcode's cancel(), which zeroes latestRevision. A write resolving after a cancel no longer adopts its discarded revision as the baseline — otherwise it re-armed the entry guard, and once the user typed that many characters again the save was silently skipped. Pinned by a new test.

Fork-boundary breaks that merged with no conflict

The dangerous category: each merged cleanly, and nothing marked them. Seven in this sync — four found while resolving, three more that only CI caught.

BreakEffect if unfixedFound by
cli/app (upstream's new t3 app) read T3CODE_HOMEThe one CLI command ignoring an exported MARCODE_HOME, silently targeting the default installreview
cli/app fixtures hardcoded .t3Marcode's default home is ~/.marcode; the fake desktop listened on a socket the command never dialedreview
updatesTestHarness (extracted by upstream) set T3CODE_* env namesDesktopConfig reads MARCODE_*, so every setting was dropped and the update tests asserted against defaultsreview
bootService.test — two new upstream assertions hardcoded t3code.serviceUnit-name assertions passing against the wrong servicereview
thread-work-log imports mobile components/T3WordmarkMarcode replaced it with MarcodeMark; mobile typecheck brokeCI Check
DesktopRemoteUpdates.test set T3CODE_DISABLE_AUTO_UPDATEDesktopConfig reads MARCODE_*, so updates stayed on and no terminal report was producedCI Test
016_CanonicalizeModelSelections seeds at 43, runs through 44Marcode's ids sit one higher; the migration renumbered to 045 never ranCI Test Server 2

Plus two non-identity breaks: ElectronProtocol.test (kept the marcode: scheme and took upstream's added http:/https: media-src sources) and scripts/package.json (upstream dropped yaml as unused, but Marcode's own upstream-sync-workflow.test.ts imports it). editor-pane now passes the workspaceRoot that openFileInPreview requires.

Both cli/app breaks, the migration offset, and the retired-surface removals are pinned by tests so a future sync fails loudly instead of silently reverting.

Why

Daily upstream sync. Hotspot paths were treated as mandatory-review, not automatic keep-Marcode: upstream's correctness and security work (service downgrade refusal, stale-write guard, host-file reads, the highlighter fix, PR sidebar refresh) is preserved even where it landed in customized files.

Coupled changes:pnpm-workspace.yaml and infra/relay/package.json differ from upstream only by Marcode's own renames, so neither vendored subtree moved — no sync:repos run needed. The lockfile was regenerated with pnpm, not hand-edited.

UI Changes

Not captured, and this is the one thing still owed. The sync container has no browser or simulator, so the integrated web (test-t3-app) and mobile (test-t3-mobile) verification passes in AGENTS.md were not run. Upstream touches a lot of user-visible surface here — inline assistant citations, the file viewer, the release-notes popover, media previews, mobile video — and the sync runbook also asks for a live pass at 390px and 820px when apps/web/** and apps/mobile/** hotspots change. That pass, not CI, is what this PR is waiting on.

Checklist

  • This PR is small and focused — no: it is a 254-commit upstream sync, reviewed by conflict decision rather than by size
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — not run, see above
  • I included a video for animation/interaction changes — not run, see above

Verification

CI green on da25937: Check, Test, Mobile Native Static Analysis and Release Smoke — the four required checks — plus Test Server 1/2/3, Rust, Native fingerprint diff and claude-review. Thread transfer is within every ceiling (Codex total wire −2.3%, Claude −2.1%).

Locally: full vpr typecheck clean across all 14 packages, and the full vp run test suite clean apart from packages/shared/src/Net.test.ts — a findAvailablePort port-allocation artifact of the sync container. Both that test and its subject are byte-identical to main, and the check passes in CI.

🤖 Generated with Claude Code

https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e

t3dotggand others added 30 commits August 24, 2026 21:51
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
…gg#7140)
Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#8231)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tgg#8358)
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
maria-rcksand others added 24 commits September 2, 2026 01:33
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…tgg#9167)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…g#9101)
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Merges upstream through 70cd258 (254 commits past the f035a0f sync base),
built on the unmerged b883fc0 sync branch so its hand resolution carries
forward. This supersedes PRs #53, #55, #56, #58, #61, #63, #65 and #68.
Conflicts resolved (26 paths):
Retired right-panel file surfaces (Marcode keeps the floating editor)
- files/{FileBrowserPanel,FilePreviewPanel,filePath,filePath.test}: kept
deleted. Upstream's breadcrumbs (pingdotgg#8910) and file-tree path reconciliation
(pingdotgg#8968) arrived as new modules imported only by those panels, so they are
dropped too and added to retired-right-panel-file-surfaces.test.ts.
- rightPanelStore / RightPanelTabs: kept the `file`/`files` union members out.
- ChatMarkdown: took upstream's panelPath refactor and its onOpenMedia
fallback, but landed the open in the floating editor. Two auto-merged
`useRightPanelStore.getState().openFile(...)` media actions rerouted the
same way (they would not have compiled).
- ChatView: took upstream's refreshVcsStatus / sidebarPrRefreshKeyRef (pingdotgg#9092),
dropped its activeFileSurface derivation.
- Upstream's Oniguruma highlighter fix (pingdotgg#8360) landed on the shared producer;
every creation site in the merged tree passes PREFERRED_HIGHLIGHTER.
Service and CLI identity
- cloud/bootService: kept `marcode.service`, MARCODE_HOME in both the systemd
unit and the plist, and Marcode's "Marcode server" description; took
upstream's downgrade refusal (pingdotgg#5302). Re-exported BOOT_SERVICE_UNIT_ENV,
which upstream un-exported, because Marcode's test pins the unit name.
- cli/service: took upstream's --allow-downgrade flag and installedVersion
reporting; kept the "Marcode service" label.
Persistence
- Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to
045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; pin updated.
Navigation shell
- AppSidebarLayout / SidebarChrome: kept the FloatingPillNav shell and the
no-sidebar-on-settings behavior. Removed the lazy SettingsSidebarNav binding
upstream re-added (pingdotgg#9058); Marcode never renders it.
- SidebarUpdatePill: took upstream's extraction into SidebarUpdateReleaseNotes
(pingdotgg#9138) and re-applied Marcode's font-medium heading there.
- index.css: kept Marcode's absolute oklch dark palette; upstream's relative
darkening (pingdotgg#9064) is not ported, and the block says so.
Other
- WorkspaceFileSystem: kept Marcode's mutation-target resolution and took
upstream's resolveReadTarget, which also lets the floating editor read host
files outside the workspace.
- commandInvariants, cloud/linkEnvironment, package.json build filters,
GrokProvider test: took upstream's dead-code removals after confirming each
symbol is unused in Marcode.
- contracts/settings.test: kept both describes.
- ThreadTerminalDrawer (+test): Marcode keeps xterm for its search, so the
Ghostty context-menu rewrite is not taken. Restored three declarations the
auto-merge dropped outside the conflict blocks.
- fileSaveCoordinator: upstream's confirmedRevision baseline (pingdotgg#8630) and
Marcode's cancel() met here. A write resolving after a cancel no longer
adopts its discarded revision as the baseline, which otherwise re-armed the
entry guard and would have silently skipped a later save. Pinned by a test.
Fork-boundary breaks that merged without a conflict
- cli/app (new `t3 app`): read T3CODE_HOME; now MARCODE_HOME, like every other
Marcode CLI command. Its fixtures hardcoded `.t3`; Marcode's default home is
`~/.marcode`. Both pinned by tests.
- updatesTestHarness (extracted by upstream): set T3CODE_* env names that
DesktopConfig does not read, so every setting was silently dropped.
- bootService.test: two new upstream assertions hardcoded `t3code.service`.
- ElectronProtocol.test: kept the `marcode:` scheme and took upstream's added
http:/https: media-src sources.
- scripts/package.json: upstream removed `yaml` as unused, but Marcode's
upstream-sync-workflow test imports it.
- editor-pane: passes the workspaceRoot that openFileInPreview now requires.
Coupled changes: pnpm-workspace.yaml and infra/relay/package.json differ from
upstream only by Marcode's own renames, so neither vendored subtree moved and
no sync:repos run is needed.
Verified: typecheck clean for contracts, web, server, desktop and scripts;
focused tests for every resolved path; vp fmt --check and vp lint clean on the
changed files and directories.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Sep 2, 2026
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.1 KiB−318 B (−2.3%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB−5 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.2 KiB−313 B (−4.7%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB54.7 KiB−352 B (−0.6%)66.4 KiB
CodexLive turn messages168−8 (−50.0%)21
ClaudeTotal thread wire13.4 KiB13.2 KiB−283 B (−2.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.3 KiB−291 B (−4.3%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB55.5 KiB−352 B (−0.6%)66.4 KiB
ClaudeLive turn messages168−8 (−50.0%)21

Baseline: 200e149 · PR result: da25937 · 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.

The 70cd258 sync merged upstream's new "t3-code" work-log icon cleanly,
but it imports `components/T3Wordmark` — a module Marcode replaced with
`MarcodeMark` before this sync. No conflict, and the mobile typecheck was
the only thing that caught it.
Substitutes `MarcodeMark`, the same swap `CompactBrandTitle` already makes.
It is the fixed black-on-white rounded mark and takes no color props, so
the tint branch upstream passes goes away with it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Both merged cleanly in the 70cd258 sync and both failed CI, for the same
reason the mobile wordmark did: upstream's new test asserts on a value
Marcode renamed, and nothing conflicts.
DesktopRemoteUpdates set T3CODE_DISABLE_AUTO_UPDATE. DesktopConfig reads
MARCODE_DISABLE_AUTO_UPDATE, so the env was ignored, updates stayed on and
no terminal report was produced. The runtime message it asserts already
says MARCODE_*.
016_CanonicalizeModelSelections covers upstream's new
ClearAutomaticProjectModelDefaults migration, seeding at its 43 and running
through its 44. Marcode's ProjectWorkspaceLayout holds 033, so every shared
upstream migration sits one id higher and that boundary is 44 and 45 here —
the migration this sync renumbered to 045 never ran.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native ChangeChanges the native fingerprint; merging blocks production OTAs until a new store build ships.size:XXLvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

20 participants

@maarco@t3dotgg@lnieuwenhuis@tris203@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@StiensWout@ikifar2012@anirudhsama@none23@extoci@shivamhwp@Bil0000@walid-baharwal
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore(upstream): sync marcode through 70cd258d - #69

Draft
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom
Draft

chore(upstream): sync marcode through 70cd258d#69
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom

Conversation

@maarco

@maarcomaarco commented Sep 2, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges pingdotgg/t3code@70cd258d — 254 upstream commits past the f035a0f4 sync base.

Built on the unmergedb883fc06 sync branch (PR #68) rather than restarting from main, so that PR's hand resolution carries forward instead of being re-derived. This is a strict superset and supersedes #53, #55, #56, #58, #61, #63, #65 and #68 — all eight can be closed once this lands.

Conflict decisions (26 paths)

Retired right-panel file surfaces — Marcode's floating editor stays the only file-editing surface.

Service and CLI identity

  • cloud/bootService: kept marcode.service, MARCODE_HOME in both the systemd unit and the plist, and the "Marcode server" description; took upstream's downgrade refusal (fix(server): prevent accidental service downgrades pingdotgg/t3code#5302). Re-exported BOOT_SERVICE_UNIT_ENV (upstream un-exported it) because Marcode's test pins the unit name through it.
  • cli/service: took upstream's --allow-downgrade flag and installedVersion reporting; kept the "Marcode service" label.

Persistence

  • Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to 045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; the pin test was updated.

Navigation shell

Other

  • WorkspaceFileSystem: kept Marcode's mutation-target resolution and took upstream's resolveReadTarget — which also lets the floating editor read host files outside the workspace.
  • commandInvariants, cloud/linkEnvironment, package.json build filters, GrokProvider test: took upstream's dead-code removals after confirming each symbol is unused in Marcode.
  • contracts/settings.test: kept both describe blocks.
  • ThreadTerminalDrawer (+ test): Marcode keeps xterm for its search, so upstream's Ghostty context-menu rewrite is not taken. Restored three declarations the auto-merge dropped from outside the conflict blocks (MULTI_CLICK_SELECTION_ACTION_DELAY_MS, selectionPointerRef, selectionGestureActiveRef).
  • fileSaveCoordinator: both sides changed the same behavior. Upstream's confirmedRevision baseline (fix(web): avoid stale file writes on close pingdotgg/t3code#8630) met Marcode's cancel(), which zeroes latestRevision. A write resolving after a cancel no longer adopts its discarded revision as the baseline — otherwise it re-armed the entry guard, and once the user typed that many characters again the save was silently skipped. Pinned by a new test.

Fork-boundary breaks that merged with no conflict

The dangerous category: each merged cleanly, and nothing marked them. Seven in this sync — four found while resolving, three more that only CI caught.

BreakEffect if unfixedFound by
cli/app (upstream's new t3 app) read T3CODE_HOMEThe one CLI command ignoring an exported MARCODE_HOME, silently targeting the default installreview
cli/app fixtures hardcoded .t3Marcode's default home is ~/.marcode; the fake desktop listened on a socket the command never dialedreview
updatesTestHarness (extracted by upstream) set T3CODE_* env namesDesktopConfig reads MARCODE_*, so every setting was dropped and the update tests asserted against defaultsreview
bootService.test — two new upstream assertions hardcoded t3code.serviceUnit-name assertions passing against the wrong servicereview
thread-work-log imports mobile components/T3WordmarkMarcode replaced it with MarcodeMark; mobile typecheck brokeCI Check
DesktopRemoteUpdates.test set T3CODE_DISABLE_AUTO_UPDATEDesktopConfig reads MARCODE_*, so updates stayed on and no terminal report was producedCI Test
016_CanonicalizeModelSelections seeds at 43, runs through 44Marcode's ids sit one higher; the migration renumbered to 045 never ranCI Test Server 2

Plus two non-identity breaks: ElectronProtocol.test (kept the marcode: scheme and took upstream's added http:/https: media-src sources) and scripts/package.json (upstream dropped yaml as unused, but Marcode's own upstream-sync-workflow.test.ts imports it). editor-pane now passes the workspaceRoot that openFileInPreview requires.

Both cli/app breaks, the migration offset, and the retired-surface removals are pinned by tests so a future sync fails loudly instead of silently reverting.

Why

Daily upstream sync. Hotspot paths were treated as mandatory-review, not automatic keep-Marcode: upstream's correctness and security work (service downgrade refusal, stale-write guard, host-file reads, the highlighter fix, PR sidebar refresh) is preserved even where it landed in customized files.

Coupled changes:pnpm-workspace.yaml and infra/relay/package.json differ from upstream only by Marcode's own renames, so neither vendored subtree moved — no sync:repos run needed. The lockfile was regenerated with pnpm, not hand-edited.

UI Changes

Not captured, and this is the one thing still owed. The sync container has no browser or simulator, so the integrated web (test-t3-app) and mobile (test-t3-mobile) verification passes in AGENTS.md were not run. Upstream touches a lot of user-visible surface here — inline assistant citations, the file viewer, the release-notes popover, media previews, mobile video — and the sync runbook also asks for a live pass at 390px and 820px when apps/web/** and apps/mobile/** hotspots change. That pass, not CI, is what this PR is waiting on.

Checklist

  • This PR is small and focused — no: it is a 254-commit upstream sync, reviewed by conflict decision rather than by size
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — not run, see above
  • I included a video for animation/interaction changes — not run, see above

Verification

CI green on da25937: Check, Test, Mobile Native Static Analysis and Release Smoke — the four required checks — plus Test Server 1/2/3, Rust, Native fingerprint diff and claude-review. Thread transfer is within every ceiling (Codex total wire −2.3%, Claude −2.1%).

Locally: full vpr typecheck clean across all 14 packages, and the full vp run test suite clean apart from packages/shared/src/Net.test.ts — a findAvailablePort port-allocation artifact of the sync container. Both that test and its subject are byte-identical to main, and the check passes in CI.

🤖 Generated with Claude Code

https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e

t3dotggand others added 30 commits August 24, 2026 21:51
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
…gg#7140)
Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#8231)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tgg#8358)
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
maria-rcksand others added 24 commits September 2, 2026 01:33
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…tgg#9167)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…g#9101)
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Merges upstream through 70cd258 (254 commits past the f035a0f sync base),
built on the unmerged b883fc0 sync branch so its hand resolution carries
forward. This supersedes PRs #53, #55, #56, #58, #61, #63, #65 and #68.
Conflicts resolved (26 paths):
Retired right-panel file surfaces (Marcode keeps the floating editor)
- files/{FileBrowserPanel,FilePreviewPanel,filePath,filePath.test}: kept
deleted. Upstream's breadcrumbs (pingdotgg#8910) and file-tree path reconciliation
(pingdotgg#8968) arrived as new modules imported only by those panels, so they are
dropped too and added to retired-right-panel-file-surfaces.test.ts.
- rightPanelStore / RightPanelTabs: kept the `file`/`files` union members out.
- ChatMarkdown: took upstream's panelPath refactor and its onOpenMedia
fallback, but landed the open in the floating editor. Two auto-merged
`useRightPanelStore.getState().openFile(...)` media actions rerouted the
same way (they would not have compiled).
- ChatView: took upstream's refreshVcsStatus / sidebarPrRefreshKeyRef (pingdotgg#9092),
dropped its activeFileSurface derivation.
- Upstream's Oniguruma highlighter fix (pingdotgg#8360) landed on the shared producer;
every creation site in the merged tree passes PREFERRED_HIGHLIGHTER.
Service and CLI identity
- cloud/bootService: kept `marcode.service`, MARCODE_HOME in both the systemd
unit and the plist, and Marcode's "Marcode server" description; took
upstream's downgrade refusal (pingdotgg#5302). Re-exported BOOT_SERVICE_UNIT_ENV,
which upstream un-exported, because Marcode's test pins the unit name.
- cli/service: took upstream's --allow-downgrade flag and installedVersion
reporting; kept the "Marcode service" label.
Persistence
- Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to
045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; pin updated.
Navigation shell
- AppSidebarLayout / SidebarChrome: kept the FloatingPillNav shell and the
no-sidebar-on-settings behavior. Removed the lazy SettingsSidebarNav binding
upstream re-added (pingdotgg#9058); Marcode never renders it.
- SidebarUpdatePill: took upstream's extraction into SidebarUpdateReleaseNotes
(pingdotgg#9138) and re-applied Marcode's font-medium heading there.
- index.css: kept Marcode's absolute oklch dark palette; upstream's relative
darkening (pingdotgg#9064) is not ported, and the block says so.
Other
- WorkspaceFileSystem: kept Marcode's mutation-target resolution and took
upstream's resolveReadTarget, which also lets the floating editor read host
files outside the workspace.
- commandInvariants, cloud/linkEnvironment, package.json build filters,
GrokProvider test: took upstream's dead-code removals after confirming each
symbol is unused in Marcode.
- contracts/settings.test: kept both describes.
- ThreadTerminalDrawer (+test): Marcode keeps xterm for its search, so the
Ghostty context-menu rewrite is not taken. Restored three declarations the
auto-merge dropped outside the conflict blocks.
- fileSaveCoordinator: upstream's confirmedRevision baseline (pingdotgg#8630) and
Marcode's cancel() met here. A write resolving after a cancel no longer
adopts its discarded revision as the baseline, which otherwise re-armed the
entry guard and would have silently skipped a later save. Pinned by a test.
Fork-boundary breaks that merged without a conflict
- cli/app (new `t3 app`): read T3CODE_HOME; now MARCODE_HOME, like every other
Marcode CLI command. Its fixtures hardcoded `.t3`; Marcode's default home is
`~/.marcode`. Both pinned by tests.
- updatesTestHarness (extracted by upstream): set T3CODE_* env names that
DesktopConfig does not read, so every setting was silently dropped.
- bootService.test: two new upstream assertions hardcoded `t3code.service`.
- ElectronProtocol.test: kept the `marcode:` scheme and took upstream's added
http:/https: media-src sources.
- scripts/package.json: upstream removed `yaml` as unused, but Marcode's
upstream-sync-workflow test imports it.
- editor-pane: passes the workspaceRoot that openFileInPreview now requires.
Coupled changes: pnpm-workspace.yaml and infra/relay/package.json differ from
upstream only by Marcode's own renames, so neither vendored subtree moved and
no sync:repos run is needed.
Verified: typecheck clean for contracts, web, server, desktop and scripts;
focused tests for every resolved path; vp fmt --check and vp lint clean on the
changed files and directories.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Sep 2, 2026
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.1 KiB−318 B (−2.3%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB−5 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.2 KiB−313 B (−4.7%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB54.7 KiB−352 B (−0.6%)66.4 KiB
CodexLive turn messages168−8 (−50.0%)21
ClaudeTotal thread wire13.4 KiB13.2 KiB−283 B (−2.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.3 KiB−291 B (−4.3%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB55.5 KiB−352 B (−0.6%)66.4 KiB
ClaudeLive turn messages168−8 (−50.0%)21

Baseline: 200e149 · PR result: da25937 · 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.

The 70cd258 sync merged upstream's new "t3-code" work-log icon cleanly,
but it imports `components/T3Wordmark` — a module Marcode replaced with
`MarcodeMark` before this sync. No conflict, and the mobile typecheck was
the only thing that caught it.
Substitutes `MarcodeMark`, the same swap `CompactBrandTitle` already makes.
It is the fixed black-on-white rounded mark and takes no color props, so
the tint branch upstream passes goes away with it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Both merged cleanly in the 70cd258 sync and both failed CI, for the same
reason the mobile wordmark did: upstream's new test asserts on a value
Marcode renamed, and nothing conflicts.
DesktopRemoteUpdates set T3CODE_DISABLE_AUTO_UPDATE. DesktopConfig reads
MARCODE_DISABLE_AUTO_UPDATE, so the env was ignored, updates stayed on and
no terminal report was produced. The runtime message it asserts already
says MARCODE_*.
016_CanonicalizeModelSelections covers upstream's new
ClearAutomaticProjectModelDefaults migration, seeding at its 43 and running
through its 44. Marcode's ProjectWorkspaceLayout holds 033, so every shared
upstream migration sits one id higher and that boundary is 44 and 45 here —
the migration this sync renumbered to 045 never ran.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native ChangeChanges the native fingerprint; merging blocks production OTAs until a new store build ships.size:XXLvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

20 participants

@maarco@t3dotgg@lnieuwenhuis@tris203@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@StiensWout@ikifar2012@anirudhsama@none23@extoci@shivamhwp@Bil0000@walid-baharwal
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore(upstream): sync marcode through 70cd258d - #69

Draft
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom
Draft

chore(upstream): sync marcode through 70cd258d#69
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom

Conversation

@maarco

@maarcomaarco commented Sep 2, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges pingdotgg/t3code@70cd258d — 254 upstream commits past the f035a0f4 sync base.

Built on the unmergedb883fc06 sync branch (PR #68) rather than restarting from main, so that PR's hand resolution carries forward instead of being re-derived. This is a strict superset and supersedes #53, #55, #56, #58, #61, #63, #65 and #68 — all eight can be closed once this lands.

Conflict decisions (26 paths)

Retired right-panel file surfaces — Marcode's floating editor stays the only file-editing surface.

Service and CLI identity

  • cloud/bootService: kept marcode.service, MARCODE_HOME in both the systemd unit and the plist, and the "Marcode server" description; took upstream's downgrade refusal (fix(server): prevent accidental service downgrades pingdotgg/t3code#5302). Re-exported BOOT_SERVICE_UNIT_ENV (upstream un-exported it) because Marcode's test pins the unit name through it.
  • cli/service: took upstream's --allow-downgrade flag and installedVersion reporting; kept the "Marcode service" label.

Persistence

  • Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to 045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; the pin test was updated.

Navigation shell

Other

  • WorkspaceFileSystem: kept Marcode's mutation-target resolution and took upstream's resolveReadTarget — which also lets the floating editor read host files outside the workspace.
  • commandInvariants, cloud/linkEnvironment, package.json build filters, GrokProvider test: took upstream's dead-code removals after confirming each symbol is unused in Marcode.
  • contracts/settings.test: kept both describe blocks.
  • ThreadTerminalDrawer (+ test): Marcode keeps xterm for its search, so upstream's Ghostty context-menu rewrite is not taken. Restored three declarations the auto-merge dropped from outside the conflict blocks (MULTI_CLICK_SELECTION_ACTION_DELAY_MS, selectionPointerRef, selectionGestureActiveRef).
  • fileSaveCoordinator: both sides changed the same behavior. Upstream's confirmedRevision baseline (fix(web): avoid stale file writes on close pingdotgg/t3code#8630) met Marcode's cancel(), which zeroes latestRevision. A write resolving after a cancel no longer adopts its discarded revision as the baseline — otherwise it re-armed the entry guard, and once the user typed that many characters again the save was silently skipped. Pinned by a new test.

Fork-boundary breaks that merged with no conflict

The dangerous category: each merged cleanly, and nothing marked them. Seven in this sync — four found while resolving, three more that only CI caught.

BreakEffect if unfixedFound by
cli/app (upstream's new t3 app) read T3CODE_HOMEThe one CLI command ignoring an exported MARCODE_HOME, silently targeting the default installreview
cli/app fixtures hardcoded .t3Marcode's default home is ~/.marcode; the fake desktop listened on a socket the command never dialedreview
updatesTestHarness (extracted by upstream) set T3CODE_* env namesDesktopConfig reads MARCODE_*, so every setting was dropped and the update tests asserted against defaultsreview
bootService.test — two new upstream assertions hardcoded t3code.serviceUnit-name assertions passing against the wrong servicereview
thread-work-log imports mobile components/T3WordmarkMarcode replaced it with MarcodeMark; mobile typecheck brokeCI Check
DesktopRemoteUpdates.test set T3CODE_DISABLE_AUTO_UPDATEDesktopConfig reads MARCODE_*, so updates stayed on and no terminal report was producedCI Test
016_CanonicalizeModelSelections seeds at 43, runs through 44Marcode's ids sit one higher; the migration renumbered to 045 never ranCI Test Server 2

Plus two non-identity breaks: ElectronProtocol.test (kept the marcode: scheme and took upstream's added http:/https: media-src sources) and scripts/package.json (upstream dropped yaml as unused, but Marcode's own upstream-sync-workflow.test.ts imports it). editor-pane now passes the workspaceRoot that openFileInPreview requires.

Both cli/app breaks, the migration offset, and the retired-surface removals are pinned by tests so a future sync fails loudly instead of silently reverting.

Why

Daily upstream sync. Hotspot paths were treated as mandatory-review, not automatic keep-Marcode: upstream's correctness and security work (service downgrade refusal, stale-write guard, host-file reads, the highlighter fix, PR sidebar refresh) is preserved even where it landed in customized files.

Coupled changes:pnpm-workspace.yaml and infra/relay/package.json differ from upstream only by Marcode's own renames, so neither vendored subtree moved — no sync:repos run needed. The lockfile was regenerated with pnpm, not hand-edited.

UI Changes

Not captured, and this is the one thing still owed. The sync container has no browser or simulator, so the integrated web (test-t3-app) and mobile (test-t3-mobile) verification passes in AGENTS.md were not run. Upstream touches a lot of user-visible surface here — inline assistant citations, the file viewer, the release-notes popover, media previews, mobile video — and the sync runbook also asks for a live pass at 390px and 820px when apps/web/** and apps/mobile/** hotspots change. That pass, not CI, is what this PR is waiting on.

Checklist

  • This PR is small and focused — no: it is a 254-commit upstream sync, reviewed by conflict decision rather than by size
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — not run, see above
  • I included a video for animation/interaction changes — not run, see above

Verification

CI green on da25937: Check, Test, Mobile Native Static Analysis and Release Smoke — the four required checks — plus Test Server 1/2/3, Rust, Native fingerprint diff and claude-review. Thread transfer is within every ceiling (Codex total wire −2.3%, Claude −2.1%).

Locally: full vpr typecheck clean across all 14 packages, and the full vp run test suite clean apart from packages/shared/src/Net.test.ts — a findAvailablePort port-allocation artifact of the sync container. Both that test and its subject are byte-identical to main, and the check passes in CI.

🤖 Generated with Claude Code

https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e

t3dotggand others added 30 commits August 24, 2026 21:51
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
…gg#7140)
Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#8231)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tgg#8358)
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
maria-rcksand others added 24 commits September 2, 2026 01:33
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…tgg#9167)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…g#9101)
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Merges upstream through 70cd258 (254 commits past the f035a0f sync base),
built on the unmerged b883fc0 sync branch so its hand resolution carries
forward. This supersedes PRs #53, #55, #56, #58, #61, #63, #65 and #68.
Conflicts resolved (26 paths):
Retired right-panel file surfaces (Marcode keeps the floating editor)
- files/{FileBrowserPanel,FilePreviewPanel,filePath,filePath.test}: kept
deleted. Upstream's breadcrumbs (pingdotgg#8910) and file-tree path reconciliation
(pingdotgg#8968) arrived as new modules imported only by those panels, so they are
dropped too and added to retired-right-panel-file-surfaces.test.ts.
- rightPanelStore / RightPanelTabs: kept the `file`/`files` union members out.
- ChatMarkdown: took upstream's panelPath refactor and its onOpenMedia
fallback, but landed the open in the floating editor. Two auto-merged
`useRightPanelStore.getState().openFile(...)` media actions rerouted the
same way (they would not have compiled).
- ChatView: took upstream's refreshVcsStatus / sidebarPrRefreshKeyRef (pingdotgg#9092),
dropped its activeFileSurface derivation.
- Upstream's Oniguruma highlighter fix (pingdotgg#8360) landed on the shared producer;
every creation site in the merged tree passes PREFERRED_HIGHLIGHTER.
Service and CLI identity
- cloud/bootService: kept `marcode.service`, MARCODE_HOME in both the systemd
unit and the plist, and Marcode's "Marcode server" description; took
upstream's downgrade refusal (pingdotgg#5302). Re-exported BOOT_SERVICE_UNIT_ENV,
which upstream un-exported, because Marcode's test pins the unit name.
- cli/service: took upstream's --allow-downgrade flag and installedVersion
reporting; kept the "Marcode service" label.
Persistence
- Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to
045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; pin updated.
Navigation shell
- AppSidebarLayout / SidebarChrome: kept the FloatingPillNav shell and the
no-sidebar-on-settings behavior. Removed the lazy SettingsSidebarNav binding
upstream re-added (pingdotgg#9058); Marcode never renders it.
- SidebarUpdatePill: took upstream's extraction into SidebarUpdateReleaseNotes
(pingdotgg#9138) and re-applied Marcode's font-medium heading there.
- index.css: kept Marcode's absolute oklch dark palette; upstream's relative
darkening (pingdotgg#9064) is not ported, and the block says so.
Other
- WorkspaceFileSystem: kept Marcode's mutation-target resolution and took
upstream's resolveReadTarget, which also lets the floating editor read host
files outside the workspace.
- commandInvariants, cloud/linkEnvironment, package.json build filters,
GrokProvider test: took upstream's dead-code removals after confirming each
symbol is unused in Marcode.
- contracts/settings.test: kept both describes.
- ThreadTerminalDrawer (+test): Marcode keeps xterm for its search, so the
Ghostty context-menu rewrite is not taken. Restored three declarations the
auto-merge dropped outside the conflict blocks.
- fileSaveCoordinator: upstream's confirmedRevision baseline (pingdotgg#8630) and
Marcode's cancel() met here. A write resolving after a cancel no longer
adopts its discarded revision as the baseline, which otherwise re-armed the
entry guard and would have silently skipped a later save. Pinned by a test.
Fork-boundary breaks that merged without a conflict
- cli/app (new `t3 app`): read T3CODE_HOME; now MARCODE_HOME, like every other
Marcode CLI command. Its fixtures hardcoded `.t3`; Marcode's default home is
`~/.marcode`. Both pinned by tests.
- updatesTestHarness (extracted by upstream): set T3CODE_* env names that
DesktopConfig does not read, so every setting was silently dropped.
- bootService.test: two new upstream assertions hardcoded `t3code.service`.
- ElectronProtocol.test: kept the `marcode:` scheme and took upstream's added
http:/https: media-src sources.
- scripts/package.json: upstream removed `yaml` as unused, but Marcode's
upstream-sync-workflow test imports it.
- editor-pane: passes the workspaceRoot that openFileInPreview now requires.
Coupled changes: pnpm-workspace.yaml and infra/relay/package.json differ from
upstream only by Marcode's own renames, so neither vendored subtree moved and
no sync:repos run is needed.
Verified: typecheck clean for contracts, web, server, desktop and scripts;
focused tests for every resolved path; vp fmt --check and vp lint clean on the
changed files and directories.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Sep 2, 2026
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.1 KiB−318 B (−2.3%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB−5 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.2 KiB−313 B (−4.7%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB54.7 KiB−352 B (−0.6%)66.4 KiB
CodexLive turn messages168−8 (−50.0%)21
ClaudeTotal thread wire13.4 KiB13.2 KiB−283 B (−2.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.3 KiB−291 B (−4.3%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB55.5 KiB−352 B (−0.6%)66.4 KiB
ClaudeLive turn messages168−8 (−50.0%)21

Baseline: 200e149 · PR result: da25937 · 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.

The 70cd258 sync merged upstream's new "t3-code" work-log icon cleanly,
but it imports `components/T3Wordmark` — a module Marcode replaced with
`MarcodeMark` before this sync. No conflict, and the mobile typecheck was
the only thing that caught it.
Substitutes `MarcodeMark`, the same swap `CompactBrandTitle` already makes.
It is the fixed black-on-white rounded mark and takes no color props, so
the tint branch upstream passes goes away with it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Both merged cleanly in the 70cd258 sync and both failed CI, for the same
reason the mobile wordmark did: upstream's new test asserts on a value
Marcode renamed, and nothing conflicts.
DesktopRemoteUpdates set T3CODE_DISABLE_AUTO_UPDATE. DesktopConfig reads
MARCODE_DISABLE_AUTO_UPDATE, so the env was ignored, updates stayed on and
no terminal report was produced. The runtime message it asserts already
says MARCODE_*.
016_CanonicalizeModelSelections covers upstream's new
ClearAutomaticProjectModelDefaults migration, seeding at its 43 and running
through its 44. Marcode's ProjectWorkspaceLayout holds 033, so every shared
upstream migration sits one id higher and that boundary is 44 and 45 here —
the migration this sync renumbered to 045 never ran.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native ChangeChanges the native fingerprint; merging blocks production OTAs until a new store build ships.size:XXLvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

20 participants

@maarco@t3dotgg@lnieuwenhuis@tris203@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@StiensWout@ikifar2012@anirudhsama@none23@extoci@shivamhwp@Bil0000@walid-baharwal
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

chore(upstream): sync marcode through 70cd258d - #69

Draft
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom
Draft

chore(upstream): sync marcode through 70cd258d#69
maarco wants to merge 260 commits into
mainfrom
claude/gracious-bohr-ebfyom

Conversation

@maarco

@maarcomaarco commented Sep 2, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges pingdotgg/t3code@70cd258d — 254 upstream commits past the f035a0f4 sync base.

Built on the unmergedb883fc06 sync branch (PR #68) rather than restarting from main, so that PR's hand resolution carries forward instead of being re-derived. This is a strict superset and supersedes #53, #55, #56, #58, #61, #63, #65 and #68 — all eight can be closed once this lands.

Conflict decisions (26 paths)

Retired right-panel file surfaces — Marcode's floating editor stays the only file-editing surface.

Service and CLI identity

  • cloud/bootService: kept marcode.service, MARCODE_HOME in both the systemd unit and the plist, and the "Marcode server" description; took upstream's downgrade refusal (fix(server): prevent accidental service downgrades pingdotgg/t3code#5302). Re-exported BOOT_SERVICE_UNIT_ENV (upstream un-exported it) because Marcode's test pins the unit name through it.
  • cli/service: took upstream's --allow-downgrade flag and installedVersion reporting; kept the "Marcode service" label.

Persistence

  • Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to 045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; the pin test was updated.

Navigation shell

Other

  • WorkspaceFileSystem: kept Marcode's mutation-target resolution and took upstream's resolveReadTarget — which also lets the floating editor read host files outside the workspace.
  • commandInvariants, cloud/linkEnvironment, package.json build filters, GrokProvider test: took upstream's dead-code removals after confirming each symbol is unused in Marcode.
  • contracts/settings.test: kept both describe blocks.
  • ThreadTerminalDrawer (+ test): Marcode keeps xterm for its search, so upstream's Ghostty context-menu rewrite is not taken. Restored three declarations the auto-merge dropped from outside the conflict blocks (MULTI_CLICK_SELECTION_ACTION_DELAY_MS, selectionPointerRef, selectionGestureActiveRef).
  • fileSaveCoordinator: both sides changed the same behavior. Upstream's confirmedRevision baseline (fix(web): avoid stale file writes on close pingdotgg/t3code#8630) met Marcode's cancel(), which zeroes latestRevision. A write resolving after a cancel no longer adopts its discarded revision as the baseline — otherwise it re-armed the entry guard, and once the user typed that many characters again the save was silently skipped. Pinned by a new test.

Fork-boundary breaks that merged with no conflict

The dangerous category: each merged cleanly, and nothing marked them. Seven in this sync — four found while resolving, three more that only CI caught.

BreakEffect if unfixedFound by
cli/app (upstream's new t3 app) read T3CODE_HOMEThe one CLI command ignoring an exported MARCODE_HOME, silently targeting the default installreview
cli/app fixtures hardcoded .t3Marcode's default home is ~/.marcode; the fake desktop listened on a socket the command never dialedreview
updatesTestHarness (extracted by upstream) set T3CODE_* env namesDesktopConfig reads MARCODE_*, so every setting was dropped and the update tests asserted against defaultsreview
bootService.test — two new upstream assertions hardcoded t3code.serviceUnit-name assertions passing against the wrong servicereview
thread-work-log imports mobile components/T3WordmarkMarcode replaced it with MarcodeMark; mobile typecheck brokeCI Check
DesktopRemoteUpdates.test set T3CODE_DISABLE_AUTO_UPDATEDesktopConfig reads MARCODE_*, so updates stayed on and no terminal report was producedCI Test
016_CanonicalizeModelSelections seeds at 43, runs through 44Marcode's ids sit one higher; the migration renumbered to 045 never ranCI Test Server 2

Plus two non-identity breaks: ElectronProtocol.test (kept the marcode: scheme and took upstream's added http:/https: media-src sources) and scripts/package.json (upstream dropped yaml as unused, but Marcode's own upstream-sync-workflow.test.ts imports it). editor-pane now passes the workspaceRoot that openFileInPreview requires.

Both cli/app breaks, the migration offset, and the retired-surface removals are pinned by tests so a future sync fails loudly instead of silently reverting.

Why

Daily upstream sync. Hotspot paths were treated as mandatory-review, not automatic keep-Marcode: upstream's correctness and security work (service downgrade refusal, stale-write guard, host-file reads, the highlighter fix, PR sidebar refresh) is preserved even where it landed in customized files.

Coupled changes:pnpm-workspace.yaml and infra/relay/package.json differ from upstream only by Marcode's own renames, so neither vendored subtree moved — no sync:repos run needed. The lockfile was regenerated with pnpm, not hand-edited.

UI Changes

Not captured, and this is the one thing still owed. The sync container has no browser or simulator, so the integrated web (test-t3-app) and mobile (test-t3-mobile) verification passes in AGENTS.md were not run. Upstream touches a lot of user-visible surface here — inline assistant citations, the file viewer, the release-notes popover, media previews, mobile video — and the sync runbook also asks for a live pass at 390px and 820px when apps/web/** and apps/mobile/** hotspots change. That pass, not CI, is what this PR is waiting on.

Checklist

  • This PR is small and focused — no: it is a 254-commit upstream sync, reviewed by conflict decision rather than by size
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — not run, see above
  • I included a video for animation/interaction changes — not run, see above

Verification

CI green on da25937: Check, Test, Mobile Native Static Analysis and Release Smoke — the four required checks — plus Test Server 1/2/3, Rust, Native fingerprint diff and claude-review. Thread transfer is within every ceiling (Codex total wire −2.3%, Claude −2.1%).

Locally: full vpr typecheck clean across all 14 packages, and the full vp run test suite clean apart from packages/shared/src/Net.test.ts — a findAvailablePort port-allocation artifact of the sync container. Both that test and its subject are byte-identical to main, and the check passes in CI.

🤖 Generated with Claude Code

https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e

t3dotggand others added 30 commits August 24, 2026 21:51
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
…gg#7140)
Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#8231)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tgg#8358)
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
maria-rcksand others added 24 commits September 2, 2026 01:33
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…tgg#9167)
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…g#9101)
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Merges upstream through 70cd258 (254 commits past the f035a0f sync base),
built on the unmerged b883fc0 sync branch so its hand resolution carries
forward. This supersedes PRs #53, #55, #56, #58, #61, #63, #65 and #68.
Conflicts resolved (26 paths):
Retired right-panel file surfaces (Marcode keeps the floating editor)
- files/{FileBrowserPanel,FilePreviewPanel,filePath,filePath.test}: kept
deleted. Upstream's breadcrumbs (pingdotgg#8910) and file-tree path reconciliation
(pingdotgg#8968) arrived as new modules imported only by those panels, so they are
dropped too and added to retired-right-panel-file-surfaces.test.ts.
- rightPanelStore / RightPanelTabs: kept the `file`/`files` union members out.
- ChatMarkdown: took upstream's panelPath refactor and its onOpenMedia
fallback, but landed the open in the floating editor. Two auto-merged
`useRightPanelStore.getState().openFile(...)` media actions rerouted the
same way (they would not have compiled).
- ChatView: took upstream's refreshVcsStatus / sidebarPrRefreshKeyRef (pingdotgg#9092),
dropped its activeFileSurface derivation.
- Upstream's Oniguruma highlighter fix (pingdotgg#8360) landed on the shared producer;
every creation site in the merged tree passes PREFERRED_HIGHLIGHTER.
Service and CLI identity
- cloud/bootService: kept `marcode.service`, MARCODE_HOME in both the systemd
unit and the plist, and Marcode's "Marcode server" description; took
upstream's downgrade refusal (pingdotgg#5302). Re-exported BOOT_SERVICE_UNIT_ENV,
which upstream un-exported, because Marcode's test pins the unit name.
- cli/service: took upstream's --allow-downgrade flag and installedVersion
reporting; kept the "Marcode service" label.
Persistence
- Migrations: upstream's 044_ClearAutomaticProjectModelDefaults renamed to
045 to preserve Marcode's 033 ProjectWorkspaceLayout offset; pin updated.
Navigation shell
- AppSidebarLayout / SidebarChrome: kept the FloatingPillNav shell and the
no-sidebar-on-settings behavior. Removed the lazy SettingsSidebarNav binding
upstream re-added (pingdotgg#9058); Marcode never renders it.
- SidebarUpdatePill: took upstream's extraction into SidebarUpdateReleaseNotes
(pingdotgg#9138) and re-applied Marcode's font-medium heading there.
- index.css: kept Marcode's absolute oklch dark palette; upstream's relative
darkening (pingdotgg#9064) is not ported, and the block says so.
Other
- WorkspaceFileSystem: kept Marcode's mutation-target resolution and took
upstream's resolveReadTarget, which also lets the floating editor read host
files outside the workspace.
- commandInvariants, cloud/linkEnvironment, package.json build filters,
GrokProvider test: took upstream's dead-code removals after confirming each
symbol is unused in Marcode.
- contracts/settings.test: kept both describes.
- ThreadTerminalDrawer (+test): Marcode keeps xterm for its search, so the
Ghostty context-menu rewrite is not taken. Restored three declarations the
auto-merge dropped outside the conflict blocks.
- fileSaveCoordinator: upstream's confirmedRevision baseline (pingdotgg#8630) and
Marcode's cancel() met here. A write resolving after a cancel no longer
adopts its discarded revision as the baseline, which otherwise re-armed the
entry guard and would have silently skipped a later save. Pinned by a test.
Fork-boundary breaks that merged without a conflict
- cli/app (new `t3 app`): read T3CODE_HOME; now MARCODE_HOME, like every other
Marcode CLI command. Its fixtures hardcoded `.t3`; Marcode's default home is
`~/.marcode`. Both pinned by tests.
- updatesTestHarness (extracted by upstream): set T3CODE_* env names that
DesktopConfig does not read, so every setting was silently dropped.
- bootService.test: two new upstream assertions hardcoded `t3code.service`.
- ElectronProtocol.test: kept the `marcode:` scheme and took upstream's added
http:/https: media-src sources.
- scripts/package.json: upstream removed `yaml` as unused, but Marcode's
upstream-sync-workflow test imports it.
- editor-pane: passes the workspaceRoot that openFileInPreview now requires.
Coupled changes: pnpm-workspace.yaml and infra/relay/package.json differ from
upstream only by Marcode's own renames, so neither vendored subtree moved and
no sync:repos run is needed.
Verified: typecheck clean for contracts, web, server, desktop and scripts;
focused tests for every resolved path; vp fmt --check and vp lint clean on the
changed files and directories.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. labels Sep 2, 2026
@github-actions

github-actionsBot commented Sep 2, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.1 KiB−318 B (−2.3%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB−5 B (−0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.2 KiB−313 B (−4.7%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB54.7 KiB−352 B (−0.6%)66.4 KiB
CodexLive turn messages168−8 (−50.0%)21
ClaudeTotal thread wire13.4 KiB13.2 KiB−283 B (−2.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.3 KiB−291 B (−4.3%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB55.5 KiB−352 B (−0.6%)66.4 KiB
ClaudeLive turn messages168−8 (−50.0%)21

Baseline: 200e149 · PR result: da25937 · 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.

The 70cd258 sync merged upstream's new "t3-code" work-log icon cleanly,
but it imports `components/T3Wordmark` — a module Marcode replaced with
`MarcodeMark` before this sync. No conflict, and the mobile typecheck was
the only thing that caught it.
Substitutes `MarcodeMark`, the same swap `CompactBrandTitle` already makes.
It is the fixed black-on-white rounded mark and takes no color props, so
the tint branch upstream passes goes away with it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Both merged cleanly in the 70cd258 sync and both failed CI, for the same
reason the mobile wordmark did: upstream's new test asserts on a value
Marcode renamed, and nothing conflicts.
DesktopRemoteUpdates set T3CODE_DISABLE_AUTO_UPDATE. DesktopConfig reads
MARCODE_DISABLE_AUTO_UPDATE, so the env was ignored, updates stayed on and
no terminal report was produced. The runtime message it asserts already
says MARCODE_*.
016_CanonicalizeModelSelections covers upstream's new
ClearAutomaticProjectModelDefaults migration, seeding at its 43 and running
through its 44. Marcode's ProjectWorkspaceLayout holds 033, so every shared
upstream migration sits one id higher and that boundary is 44 and 45 here —
the migration this sync renumbered to 045 never ran.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015Fnpr83Gi1Wj7sgfMF4q6e
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native ChangeChanges the native fingerprint; merging blocks production OTAs until a new store build ships.size:XXLvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

20 participants

@maarco@t3dotgg@lnieuwenhuis@tris203@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@StiensWout@ikifar2012@anirudhsama@none23@extoci@shivamhwp@Bil0000@walid-baharwal