chore(upstream): sync marcode through 018d7f27 - #58

Draft
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn
Draft

chore(upstream): sync marcode through 018d7f27#58
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn

Conversation

@maarco

@maarcomaarco commented Aug 28, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges 59 upstream commits, f035a0f4..018d7f27 (pingdotgg/t3code@018d7f27), into Marcode as one two-parent merge commit (a940ce5c), plus one follow-up commit (0a265857) fixing a Marcode-owned test the merge invalidated. No force push, reset, restore, stash, clean, or wholesale ours/theirs resolution was used; MERGE_HEAD stayed at 018d7f27 for the whole resolution.

Supersedes #53, #55, and #56 — those draft syncs targeted older upstream SHAs (a3a8cbd6, f6f2be32) that are contained in this one. Merging this closes the delta they cover; they can be closed unmerged.

Conflicts resolved (24 paths)

PathDecision
apps/mobile/app.config.tsTook upstream's adaptive-launcher-icon fix (pingdotgg#4332) — release now uses the shared transparent foreground instead of the rounded-square universal export Android was masking twice. See the branding note below.
apps/mobile/src/lib/authClientMetadata.tsKept "Marcode Mobile"; took upstream's tablet/phone deviceType detection.
apps/mobile/src/components/CompactBrandTitle.tsxKept MarcodeMark and the conditional stage badge; took upstream's Uniwind className styling over useThemeColor + inline styles (the new lint rule forbids them).
apps/mobile/src/components/T3Wordmark.tsxKept Marcode's deletion; upstream only restyled it.
apps/mobile/src/features/home/HomeHeader.tsxKept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.tsUpstream deleted it (pingdotgg#8397). Kept — it pins Marcode returning "" (no badge) where upstream returns "Alpha". Now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*Landed upstream's new rule under Marcode's plugin dir; renamed the test's rule prefix t3code/marcode/ to match the plugin meta name.
vite.config.tsEnabled the new rule at upstream's "error"; kept Marcode's prefixes and the no-native-title-tooltip"warn" seam.
apps/server/src/cloud/bootService.ts + testTook upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path); kept MARCODE_HOME, not T3CODE_HOME. Both guard tests now stand side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.tsKept both capability flags: workspaceLayoutMutations and the new threadPullRequestLinking.
apps/server/src/persistence/Migrations.tsMarcode ids sit one higher (033 is ProjectWorkspaceLayout). Renamed upstream's 042/043 → 043/044 and fixed the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsxKept Marcode's bare Electron drag strip. Upstream's only change was a project-settings case for the sidebar Back button (pingdotgg#8168) — Marcode's FloatingPillNav already shows Back to Workspace on every non-thread route, so that intent is covered.
apps/web/src/components/threadSidebarWidth.test.tsAccepted upstream's prune of the trivial width assertions, but moved the Marcode brand-removal pin into its own components/sidebar/sidebarBrandRemoval.test.ts so a future upstream prune can't take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsxKept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488) lands in the shared terminal-links.ts, which Marcode's match.kind classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsxKept Marcode's FolderOpenFilled icon; took upstream's move of labels to the shared editorLabelForPlatform.
apps/web/src/components/ChatMarkdown.tsxTook upstream's editorPreferences/editorLabels/remoteOpen imports; kept openFileInFloatingEditor. The fork seam routing agent file links to the floating editor survives — upstream's right-panel file viewer (pingdotgg#8098) is not reintroduced.
apps/web/src/components/ChatView.tsxTook upstream's hoisted useNewThreadHandler/useThreadActions (needed by the new settle/pin keyboard shortcuts) and removed the duplicate later declaration. Kept Marcode's slim ChatHeader; dropped upstream's openProjectPullRequest, unreachable here because openThreadPullRequest already falls back to the project repository.
pnpm-lock.yamlKept Marcode's xterm entries, then regenerated with pnpm install --lockfile-only from the merged manifests.

Fork-boundary breaks that merged cleanly (no conflict) and were fixed here

These are the dangerous ones — they produce no conflict marker:

  1. apps/web/src/connection/clientMetadata.ts arrived new from upstream with hardcoded "T3 Code Desktop" / "T3 Code Web" labels and replaced Marcode's inline metadata builder in platform.ts. Every client would have reported itself as T3 Code. Routed both labels through APP_BASE_NAME and pinned "Marcode Desktop" in clientMetadata.test.ts.
  2. Three upstream oxlint-disable-next-line t3code/no-global-process-runtime comments (apps/desktop/src/preload.ts, apps/desktop/scripts/verify-preload-bundle.mjs, apps/server/src/process/externalLauncher.test.ts). Marcode's plugin is named marcode, so those disables match nothing and the rule — set to "error" — would have failed the Check job. Repointed to marcode/.

Swept and confirmed correct for Marcode: T3CODE_HOME (only guard tests/comments), t3code.service / com.t3tools.t3code launchd label, WORKTREE_BRANCH_PREFIX ("marcode"; the t3code/... branch strings in server/checkpoint tests are pre-existing arbitrary fixtures, not prefix-derived), t3code: storage keys, T3_BOOT_SERVICE_UNIT, T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR, @t3tools/*, and the t3 package/CLI name — all left upstream-shaped on purpose.

Follow-up commit 0a265857

CI caught one thing the focused local run did not: apps/server/src/persistence/Migrations.test.ts pins the migration registry with slice(-10), so appending the two renumbered upstream migrations pushed id 33 — the id the test is named for — out of the asserted window.

Fixed by anchoring the slice at id 33 via findIndex rather than a fixed tail length, so the assertion keeps covering Marcode's owned migration however many upstream ones land after it. Without that, the pin would have silently stopped testing its own subject on the next sync.

Coupled vendored subtrees

pnpm-workspace.yaml moved, but only Clerk versions; effect stayed at 4.0.0-beta.103 and infra/relay/package.json did not change. No sync:repos run was needed.

Why

Daily upstream sync. Upstream had 59 unmerged commits including a Codex approval-callback recovery fix, a projection-bootstrap replay fix (pingdotgg#7538), the macOS service PATH fix, Grok reliability work, and the Clerk 6.30/0.0.37 bumps.

UI Changes

Two decisions need your eye — I could not drive a browser or simulator for them in this container:

  • Android release launcher icon. Upstream's fix pairs a transparent light mark with a dark plate. Marcode's release previously used the black-on-white universal export as the foreground, which is exactly the double-masking bug upstream fixed. Taking the fix means the release Android launcher is now a light mark on #000000, diverging from Marcode's black-on-white rule for that one surface. Restoring black-on-white needs a Marcode-owned foreground SVG/PNG pair; no rasterizer is available here to generate one. Flagging for your call — the alternative was keeping the double-mask bug or shipping a white mark on a white plate.
  • vp run icons:check could not run: it needs macOS Icon Composer.

Checklist

  • This PR is small and focused — no, it is a 59-commit upstream sync; that is the unit of work
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — no browser/simulator available in this environment
  • I included a video for animation/interaction changes — n/a

CI on 0a265857

All four required checks green: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅. Also green: Test Server 1/2/3, Rust, Mobile Native Changes, claude-review, and the thread-transfer budget report (every metric within its ceiling). Native fingerprint diff sits queued, as it did on the previous head; it is not a required check.

Local verification before pushing (focused, per AGENTS.md — not the full suite)

  • vp test run green on: clientMetadata, sidebarBrandRemoval, mobileBranding, no-mobile-uniwind-theme-escape-hatches, bootService, ServerEnvironment, Migrations, 043_ProjectionThreadLinkedPullRequest, 042_AuthSessionClientConnection, build-desktop-artifact, contracts/environment, contracts/settings, terminal-links, editorLabels, Sidebar.logic, versionSkew, upstream-sync-workflow, serviceLauncher, electron-launcher, generate-uniwind-themes, connection/platform.
  • vp run --filter … typecheck clean for @t3tools/contracts, @t3tools/web, @t3tools/shared, @t3tools/client-runtime, t3 (server), @t3tools/mobile, @t3tools/desktop (only pre-existing Effect style suggestions, no errors).
  • vp fmt --check clean on all 356 changed TS files.
  • vp lint on the 82 changed directories: no errors; only warnings that are pre-existing on main.
  • generate-uniwind-themes.mts --check passes, so the generated theme CSS matches Marcode's tokens.

One thing to review deliberately

apps/server/src/provider/ModelManifest.ts is new from upstream and fetches legacy model classification from https://raw.githubusercontent.com/pingdotgg/t3code/main/apps/server/src/provider/model-manifest.json. I left the URL pointing at upstream — they maintain that data and Marcode benefits from their updates — but it does mean Marcode servers read a file from upstream's repo at runtime. Repointing it at maarco/marcode is a one-line change if you'd rather own it. The in-repo model-manifest.json is the fallback either way.

Left deliberately as a draft: this sync is yours to review and mark ready.

t3dotggand others added 30 commits August 24, 2026 12:42
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>
t3-codeBotand others added 21 commits August 27, 2026 13:28
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>
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>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Recent scheduled nightlies have been delayed or skipped.
Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.
Authored by GPT-5.6 Sol with the Codex harness.
Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.
Co-authored-by: codex <codex@users.noreply.github.com>
Merges 59 upstream commits (f035a0f..018d7f2) into Marcode. Conflict
decisions, path by path:
apps/mobile/app.config.ts
Took upstream's adaptive-launcher-icon fix (pingdotgg#4332): the release variant now
uses the shared transparent foreground instead of the rounded-square universal
export, which Android was masking a second time. The shipped foreground
artwork is a light mark, so the release plate stays dark; every other Marcode
production mark is still black-on-white.
apps/mobile/src/lib/authClientMetadata.ts
Kept the "Marcode Mobile" label, took upstream's tablet/phone deviceType
detection.
apps/mobile/src/components/CompactBrandTitle.tsx
Kept MarcodeMark and the conditional stage badge; took upstream's Uniwind
className styling in place of useThemeColor + inline styles, which the new
no-mobile-uniwind-theme-escape-hatches rule forbids.
apps/mobile/src/components/T3Wordmark.tsx
Kept Marcode's deletion; upstream only restyled it for Uniwind.
apps/mobile/src/features/home/HomeHeader.tsx
Kept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.ts
Upstream deleted this in pingdotgg#8397. Kept it: it pins Marcode returning "" (no
badge) where upstream returns "Alpha", and now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*
Landed upstream's new rule under Marcode's plugin directory and renamed its
test's rule prefix from t3code/ to marcode/ to match the plugin meta name.
vite.config.ts
Enabled the new rule at upstream's "error", kept Marcode's prefixes and the
no-native-title-tooltip "warn" seam.
apps/server/src/cloud/bootService.ts + test
Took upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path)
and kept MARCODE_HOME rather than T3CODE_HOME. Both guard tests now stand
side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.ts
Kept both capability flags: workspaceLayoutMutations and the new
threadPullRequestLinking.
apps/server/src/persistence/Migrations.ts
Marcode ids sit one higher than upstream's because 033 is
ProjectWorkspaceLayout here. Renamed upstream's 042/043 to 043/044 and fixed
the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsx
Kept Marcode's bare Electron drag strip. Upstream's only change in the file
was adding a project-settings case to the sidebar Back button (pingdotgg#8168);
Marcode's FloatingPillNav already shows Back to Workspace on every non-thread
route, so that intent is already covered.
apps/web/src/components/threadSidebarWidth.test.ts
Accepted upstream's prune of the trivial width assertions, but moved the
Marcode brand-removal pin into its own file,
components/sidebar/sidebarBrandRemoval.test.ts, so a future upstream prune
cannot take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsx
Kept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488)
lands in the shared terminal-links.ts, which Marcode's match.kind
classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsx
Kept Marcode's FolderOpenFilled icon, took upstream's move of labels to the
shared editorLabelForPlatform helper.
apps/web/src/components/ChatMarkdown.tsx
Took upstream's editorPreferences/editorLabels/remoteOpen imports and kept
openFileInFloatingEditor. The Marcode fork seam routing agent file links to
the floating editor survives; the right-panel file viewer upstream added in
pingdotgg#8098 is not reintroduced.
apps/web/src/components/ChatView.tsx
Took upstream's hoisted useNewThreadHandler/useThreadActions (needed by the
new settle and pin keyboard shortcuts) and removed the now-duplicate later
declaration. Kept Marcode's slim ChatHeader; dropped upstream's
openProjectPullRequest, which is unreachable here because Marcode's
openThreadPullRequest already falls back to the project repository.
pnpm-lock.yaml
Kept Marcode's xterm entries, then regenerated the lockfile with pnpm from
the merged manifests. Effect and Alchemy versions did not move, so no
vendored subtree sync was needed.
Fork-boundary breaks that merged cleanly and were fixed here:
- apps/web/src/connection/clientMetadata.ts arrived new from upstream with
hardcoded "T3 Code Desktop"/"T3 Code Web" labels and replaced Marcode's
inline metadata builder. Routed both through APP_BASE_NAME and pinned the
label in clientMetadata.test.ts.
- Three upstream oxlint-disable comments referenced the t3code/ rule prefix,
which does not match Marcode's plugin name and would have let
no-global-process-runtime fire in CI. Repointed to marcode/.
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Aug 28, 2026
The registry pin sliced the last 10 entries, so appending upstream's two new
migrations (043/044 after renumbering) pushed migration 33 — the id the test is
named for — out of the asserted window.
Anchor the slice at id 33 instead of a fixed tail length so the assertion keeps
covering Marcode's owned migration however many upstream ones land after it, and
add the two new entries.
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.3 KiB−122 B (−0.9%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB+5 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.4 KiB−127 B (−1.9%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB55.6 KiB+558 B (+1.0%)66.4 KiB
CodexLive turn messages1610−6 (−37.5%)21
ClaudeTotal thread wire13.4 KiB13.3 KiB−156 B (−1.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.6 KiB6.4 KiB−164 B (−2.4%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB56.4 KiB+532 B (+0.9%)66.4 KiB
ClaudeLive turn messages169−7 (−43.8%)21

Baseline: 133f3f7 · PR result: 0a26585 · 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.

@maarcoClaude

Copy link
Copy Markdown
OwnerAuthor

Two status changes since the description was written.

Native fingerprint diff is now cancelled, and it is not this PR's failure. It sat queued for exactly 24h (2026-08-28 15:42:11 → 2026-08-29 15:42:11) and GitHub killed it on the job timeout. Every run of mobile-fingerprint-check.yml on this fork does the same: I checked the last 30 runs and not one has ever completedclaude/gracious-bohr-1dtucn, -rlxi8l, -ie7aa6, -23bj7a, -x80z9c, -23l2b6, back to at least 2026-08-23, all queued-then-cancelled. It is a pre-existing fork-environment condition (the job never starts; the blacksmith-8vcpu-ubuntu-2404 label itself is fine, since Check, Test, and Rust all run on it here), and it is not in requiredPullRequestChecks. I am deliberately not spending the one re-run on it: 30 runs across 6 branches is stronger evidence than a 31st would be, and a re-run would just occupy a runner slot for another 24h. It needs a repo-settings fix, not a change to this PR.

The four required checks remain green on 0a265857: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅.

This PR's upstream coverage is now superseded by #61 (053affbe), opened by today's scheduled run. I verified 018d7f27 is an ancestor of #61's head, so #61 covers everything here.

But #61 branched from main independently rather than building on this branch, so the two are not interchangeable:

So the migration-pin fix in 0a265857 is the one piece of this PR that #61 still needs. Cherry-picking that single commit onto #61 should get it green, at which point #61 is the better merge candidate and this PR can be closed alongside #53, #55, and #56.

I have not pushed to #61 — it is not a PR I opened, and this session was not asked to drive it.


Generated by Claude Code

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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.

16 participants

@maarco@t3dotgg@tris203@flamboh@RakshithBhat03@StiensWout@lnieuwenhuis@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@claude
, '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 018d7f27 - #58

Draft
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn
Draft

chore(upstream): sync marcode through 018d7f27#58
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn

Conversation

@maarco

@maarcomaarco commented Aug 28, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges 59 upstream commits, f035a0f4..018d7f27 (pingdotgg/t3code@018d7f27), into Marcode as one two-parent merge commit (a940ce5c), plus one follow-up commit (0a265857) fixing a Marcode-owned test the merge invalidated. No force push, reset, restore, stash, clean, or wholesale ours/theirs resolution was used; MERGE_HEAD stayed at 018d7f27 for the whole resolution.

Supersedes #53, #55, and #56 — those draft syncs targeted older upstream SHAs (a3a8cbd6, f6f2be32) that are contained in this one. Merging this closes the delta they cover; they can be closed unmerged.

Conflicts resolved (24 paths)

PathDecision
apps/mobile/app.config.tsTook upstream's adaptive-launcher-icon fix (pingdotgg#4332) — release now uses the shared transparent foreground instead of the rounded-square universal export Android was masking twice. See the branding note below.
apps/mobile/src/lib/authClientMetadata.tsKept "Marcode Mobile"; took upstream's tablet/phone deviceType detection.
apps/mobile/src/components/CompactBrandTitle.tsxKept MarcodeMark and the conditional stage badge; took upstream's Uniwind className styling over useThemeColor + inline styles (the new lint rule forbids them).
apps/mobile/src/components/T3Wordmark.tsxKept Marcode's deletion; upstream only restyled it.
apps/mobile/src/features/home/HomeHeader.tsxKept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.tsUpstream deleted it (pingdotgg#8397). Kept — it pins Marcode returning "" (no badge) where upstream returns "Alpha". Now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*Landed upstream's new rule under Marcode's plugin dir; renamed the test's rule prefix t3code/marcode/ to match the plugin meta name.
vite.config.tsEnabled the new rule at upstream's "error"; kept Marcode's prefixes and the no-native-title-tooltip"warn" seam.
apps/server/src/cloud/bootService.ts + testTook upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path); kept MARCODE_HOME, not T3CODE_HOME. Both guard tests now stand side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.tsKept both capability flags: workspaceLayoutMutations and the new threadPullRequestLinking.
apps/server/src/persistence/Migrations.tsMarcode ids sit one higher (033 is ProjectWorkspaceLayout). Renamed upstream's 042/043 → 043/044 and fixed the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsxKept Marcode's bare Electron drag strip. Upstream's only change was a project-settings case for the sidebar Back button (pingdotgg#8168) — Marcode's FloatingPillNav already shows Back to Workspace on every non-thread route, so that intent is covered.
apps/web/src/components/threadSidebarWidth.test.tsAccepted upstream's prune of the trivial width assertions, but moved the Marcode brand-removal pin into its own components/sidebar/sidebarBrandRemoval.test.ts so a future upstream prune can't take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsxKept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488) lands in the shared terminal-links.ts, which Marcode's match.kind classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsxKept Marcode's FolderOpenFilled icon; took upstream's move of labels to the shared editorLabelForPlatform.
apps/web/src/components/ChatMarkdown.tsxTook upstream's editorPreferences/editorLabels/remoteOpen imports; kept openFileInFloatingEditor. The fork seam routing agent file links to the floating editor survives — upstream's right-panel file viewer (pingdotgg#8098) is not reintroduced.
apps/web/src/components/ChatView.tsxTook upstream's hoisted useNewThreadHandler/useThreadActions (needed by the new settle/pin keyboard shortcuts) and removed the duplicate later declaration. Kept Marcode's slim ChatHeader; dropped upstream's openProjectPullRequest, unreachable here because openThreadPullRequest already falls back to the project repository.
pnpm-lock.yamlKept Marcode's xterm entries, then regenerated with pnpm install --lockfile-only from the merged manifests.

Fork-boundary breaks that merged cleanly (no conflict) and were fixed here

These are the dangerous ones — they produce no conflict marker:

  1. apps/web/src/connection/clientMetadata.ts arrived new from upstream with hardcoded "T3 Code Desktop" / "T3 Code Web" labels and replaced Marcode's inline metadata builder in platform.ts. Every client would have reported itself as T3 Code. Routed both labels through APP_BASE_NAME and pinned "Marcode Desktop" in clientMetadata.test.ts.
  2. Three upstream oxlint-disable-next-line t3code/no-global-process-runtime comments (apps/desktop/src/preload.ts, apps/desktop/scripts/verify-preload-bundle.mjs, apps/server/src/process/externalLauncher.test.ts). Marcode's plugin is named marcode, so those disables match nothing and the rule — set to "error" — would have failed the Check job. Repointed to marcode/.

Swept and confirmed correct for Marcode: T3CODE_HOME (only guard tests/comments), t3code.service / com.t3tools.t3code launchd label, WORKTREE_BRANCH_PREFIX ("marcode"; the t3code/... branch strings in server/checkpoint tests are pre-existing arbitrary fixtures, not prefix-derived), t3code: storage keys, T3_BOOT_SERVICE_UNIT, T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR, @t3tools/*, and the t3 package/CLI name — all left upstream-shaped on purpose.

Follow-up commit 0a265857

CI caught one thing the focused local run did not: apps/server/src/persistence/Migrations.test.ts pins the migration registry with slice(-10), so appending the two renumbered upstream migrations pushed id 33 — the id the test is named for — out of the asserted window.

Fixed by anchoring the slice at id 33 via findIndex rather than a fixed tail length, so the assertion keeps covering Marcode's owned migration however many upstream ones land after it. Without that, the pin would have silently stopped testing its own subject on the next sync.

Coupled vendored subtrees

pnpm-workspace.yaml moved, but only Clerk versions; effect stayed at 4.0.0-beta.103 and infra/relay/package.json did not change. No sync:repos run was needed.

Why

Daily upstream sync. Upstream had 59 unmerged commits including a Codex approval-callback recovery fix, a projection-bootstrap replay fix (pingdotgg#7538), the macOS service PATH fix, Grok reliability work, and the Clerk 6.30/0.0.37 bumps.

UI Changes

Two decisions need your eye — I could not drive a browser or simulator for them in this container:

  • Android release launcher icon. Upstream's fix pairs a transparent light mark with a dark plate. Marcode's release previously used the black-on-white universal export as the foreground, which is exactly the double-masking bug upstream fixed. Taking the fix means the release Android launcher is now a light mark on #000000, diverging from Marcode's black-on-white rule for that one surface. Restoring black-on-white needs a Marcode-owned foreground SVG/PNG pair; no rasterizer is available here to generate one. Flagging for your call — the alternative was keeping the double-mask bug or shipping a white mark on a white plate.
  • vp run icons:check could not run: it needs macOS Icon Composer.

Checklist

  • This PR is small and focused — no, it is a 59-commit upstream sync; that is the unit of work
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — no browser/simulator available in this environment
  • I included a video for animation/interaction changes — n/a

CI on 0a265857

All four required checks green: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅. Also green: Test Server 1/2/3, Rust, Mobile Native Changes, claude-review, and the thread-transfer budget report (every metric within its ceiling). Native fingerprint diff sits queued, as it did on the previous head; it is not a required check.

Local verification before pushing (focused, per AGENTS.md — not the full suite)

  • vp test run green on: clientMetadata, sidebarBrandRemoval, mobileBranding, no-mobile-uniwind-theme-escape-hatches, bootService, ServerEnvironment, Migrations, 043_ProjectionThreadLinkedPullRequest, 042_AuthSessionClientConnection, build-desktop-artifact, contracts/environment, contracts/settings, terminal-links, editorLabels, Sidebar.logic, versionSkew, upstream-sync-workflow, serviceLauncher, electron-launcher, generate-uniwind-themes, connection/platform.
  • vp run --filter … typecheck clean for @t3tools/contracts, @t3tools/web, @t3tools/shared, @t3tools/client-runtime, t3 (server), @t3tools/mobile, @t3tools/desktop (only pre-existing Effect style suggestions, no errors).
  • vp fmt --check clean on all 356 changed TS files.
  • vp lint on the 82 changed directories: no errors; only warnings that are pre-existing on main.
  • generate-uniwind-themes.mts --check passes, so the generated theme CSS matches Marcode's tokens.

One thing to review deliberately

apps/server/src/provider/ModelManifest.ts is new from upstream and fetches legacy model classification from https://raw.githubusercontent.com/pingdotgg/t3code/main/apps/server/src/provider/model-manifest.json. I left the URL pointing at upstream — they maintain that data and Marcode benefits from their updates — but it does mean Marcode servers read a file from upstream's repo at runtime. Repointing it at maarco/marcode is a one-line change if you'd rather own it. The in-repo model-manifest.json is the fallback either way.

Left deliberately as a draft: this sync is yours to review and mark ready.

t3dotggand others added 30 commits August 24, 2026 12:42
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>
t3-codeBotand others added 21 commits August 27, 2026 13:28
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>
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>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Recent scheduled nightlies have been delayed or skipped.
Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.
Authored by GPT-5.6 Sol with the Codex harness.
Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.
Co-authored-by: codex <codex@users.noreply.github.com>
Merges 59 upstream commits (f035a0f..018d7f2) into Marcode. Conflict
decisions, path by path:
apps/mobile/app.config.ts
Took upstream's adaptive-launcher-icon fix (pingdotgg#4332): the release variant now
uses the shared transparent foreground instead of the rounded-square universal
export, which Android was masking a second time. The shipped foreground
artwork is a light mark, so the release plate stays dark; every other Marcode
production mark is still black-on-white.
apps/mobile/src/lib/authClientMetadata.ts
Kept the "Marcode Mobile" label, took upstream's tablet/phone deviceType
detection.
apps/mobile/src/components/CompactBrandTitle.tsx
Kept MarcodeMark and the conditional stage badge; took upstream's Uniwind
className styling in place of useThemeColor + inline styles, which the new
no-mobile-uniwind-theme-escape-hatches rule forbids.
apps/mobile/src/components/T3Wordmark.tsx
Kept Marcode's deletion; upstream only restyled it for Uniwind.
apps/mobile/src/features/home/HomeHeader.tsx
Kept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.ts
Upstream deleted this in pingdotgg#8397. Kept it: it pins Marcode returning "" (no
badge) where upstream returns "Alpha", and now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*
Landed upstream's new rule under Marcode's plugin directory and renamed its
test's rule prefix from t3code/ to marcode/ to match the plugin meta name.
vite.config.ts
Enabled the new rule at upstream's "error", kept Marcode's prefixes and the
no-native-title-tooltip "warn" seam.
apps/server/src/cloud/bootService.ts + test
Took upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path)
and kept MARCODE_HOME rather than T3CODE_HOME. Both guard tests now stand
side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.ts
Kept both capability flags: workspaceLayoutMutations and the new
threadPullRequestLinking.
apps/server/src/persistence/Migrations.ts
Marcode ids sit one higher than upstream's because 033 is
ProjectWorkspaceLayout here. Renamed upstream's 042/043 to 043/044 and fixed
the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsx
Kept Marcode's bare Electron drag strip. Upstream's only change in the file
was adding a project-settings case to the sidebar Back button (pingdotgg#8168);
Marcode's FloatingPillNav already shows Back to Workspace on every non-thread
route, so that intent is already covered.
apps/web/src/components/threadSidebarWidth.test.ts
Accepted upstream's prune of the trivial width assertions, but moved the
Marcode brand-removal pin into its own file,
components/sidebar/sidebarBrandRemoval.test.ts, so a future upstream prune
cannot take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsx
Kept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488)
lands in the shared terminal-links.ts, which Marcode's match.kind
classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsx
Kept Marcode's FolderOpenFilled icon, took upstream's move of labels to the
shared editorLabelForPlatform helper.
apps/web/src/components/ChatMarkdown.tsx
Took upstream's editorPreferences/editorLabels/remoteOpen imports and kept
openFileInFloatingEditor. The Marcode fork seam routing agent file links to
the floating editor survives; the right-panel file viewer upstream added in
pingdotgg#8098 is not reintroduced.
apps/web/src/components/ChatView.tsx
Took upstream's hoisted useNewThreadHandler/useThreadActions (needed by the
new settle and pin keyboard shortcuts) and removed the now-duplicate later
declaration. Kept Marcode's slim ChatHeader; dropped upstream's
openProjectPullRequest, which is unreachable here because Marcode's
openThreadPullRequest already falls back to the project repository.
pnpm-lock.yaml
Kept Marcode's xterm entries, then regenerated the lockfile with pnpm from
the merged manifests. Effect and Alchemy versions did not move, so no
vendored subtree sync was needed.
Fork-boundary breaks that merged cleanly and were fixed here:
- apps/web/src/connection/clientMetadata.ts arrived new from upstream with
hardcoded "T3 Code Desktop"/"T3 Code Web" labels and replaced Marcode's
inline metadata builder. Routed both through APP_BASE_NAME and pinned the
label in clientMetadata.test.ts.
- Three upstream oxlint-disable comments referenced the t3code/ rule prefix,
which does not match Marcode's plugin name and would have let
no-global-process-runtime fire in CI. Repointed to marcode/.
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Aug 28, 2026
The registry pin sliced the last 10 entries, so appending upstream's two new
migrations (043/044 after renumbering) pushed migration 33 — the id the test is
named for — out of the asserted window.
Anchor the slice at id 33 instead of a fixed tail length so the assertion keeps
covering Marcode's owned migration however many upstream ones land after it, and
add the two new entries.
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.3 KiB−122 B (−0.9%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB+5 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.4 KiB−127 B (−1.9%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB55.6 KiB+558 B (+1.0%)66.4 KiB
CodexLive turn messages1610−6 (−37.5%)21
ClaudeTotal thread wire13.4 KiB13.3 KiB−156 B (−1.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.6 KiB6.4 KiB−164 B (−2.4%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB56.4 KiB+532 B (+0.9%)66.4 KiB
ClaudeLive turn messages169−7 (−43.8%)21

Baseline: 133f3f7 · PR result: 0a26585 · 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.

@maarcoClaude

Copy link
Copy Markdown
OwnerAuthor

Two status changes since the description was written.

Native fingerprint diff is now cancelled, and it is not this PR's failure. It sat queued for exactly 24h (2026-08-28 15:42:11 → 2026-08-29 15:42:11) and GitHub killed it on the job timeout. Every run of mobile-fingerprint-check.yml on this fork does the same: I checked the last 30 runs and not one has ever completedclaude/gracious-bohr-1dtucn, -rlxi8l, -ie7aa6, -23bj7a, -x80z9c, -23l2b6, back to at least 2026-08-23, all queued-then-cancelled. It is a pre-existing fork-environment condition (the job never starts; the blacksmith-8vcpu-ubuntu-2404 label itself is fine, since Check, Test, and Rust all run on it here), and it is not in requiredPullRequestChecks. I am deliberately not spending the one re-run on it: 30 runs across 6 branches is stronger evidence than a 31st would be, and a re-run would just occupy a runner slot for another 24h. It needs a repo-settings fix, not a change to this PR.

The four required checks remain green on 0a265857: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅.

This PR's upstream coverage is now superseded by #61 (053affbe), opened by today's scheduled run. I verified 018d7f27 is an ancestor of #61's head, so #61 covers everything here.

But #61 branched from main independently rather than building on this branch, so the two are not interchangeable:

So the migration-pin fix in 0a265857 is the one piece of this PR that #61 still needs. Cherry-picking that single commit onto #61 should get it green, at which point #61 is the better merge candidate and this PR can be closed alongside #53, #55, and #56.

I have not pushed to #61 — it is not a PR I opened, and this session was not asked to drive it.


Generated by Claude Code

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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.

16 participants

@maarco@t3dotgg@tris203@flamboh@RakshithBhat03@StiensWout@lnieuwenhuis@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@claude
, '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 018d7f27 - #58

Draft
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn
Draft

chore(upstream): sync marcode through 018d7f27#58
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn

Conversation

@maarco

@maarcomaarco commented Aug 28, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges 59 upstream commits, f035a0f4..018d7f27 (pingdotgg/t3code@018d7f27), into Marcode as one two-parent merge commit (a940ce5c), plus one follow-up commit (0a265857) fixing a Marcode-owned test the merge invalidated. No force push, reset, restore, stash, clean, or wholesale ours/theirs resolution was used; MERGE_HEAD stayed at 018d7f27 for the whole resolution.

Supersedes #53, #55, and #56 — those draft syncs targeted older upstream SHAs (a3a8cbd6, f6f2be32) that are contained in this one. Merging this closes the delta they cover; they can be closed unmerged.

Conflicts resolved (24 paths)

PathDecision
apps/mobile/app.config.tsTook upstream's adaptive-launcher-icon fix (pingdotgg#4332) — release now uses the shared transparent foreground instead of the rounded-square universal export Android was masking twice. See the branding note below.
apps/mobile/src/lib/authClientMetadata.tsKept "Marcode Mobile"; took upstream's tablet/phone deviceType detection.
apps/mobile/src/components/CompactBrandTitle.tsxKept MarcodeMark and the conditional stage badge; took upstream's Uniwind className styling over useThemeColor + inline styles (the new lint rule forbids them).
apps/mobile/src/components/T3Wordmark.tsxKept Marcode's deletion; upstream only restyled it.
apps/mobile/src/features/home/HomeHeader.tsxKept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.tsUpstream deleted it (pingdotgg#8397). Kept — it pins Marcode returning "" (no badge) where upstream returns "Alpha". Now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*Landed upstream's new rule under Marcode's plugin dir; renamed the test's rule prefix t3code/marcode/ to match the plugin meta name.
vite.config.tsEnabled the new rule at upstream's "error"; kept Marcode's prefixes and the no-native-title-tooltip"warn" seam.
apps/server/src/cloud/bootService.ts + testTook upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path); kept MARCODE_HOME, not T3CODE_HOME. Both guard tests now stand side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.tsKept both capability flags: workspaceLayoutMutations and the new threadPullRequestLinking.
apps/server/src/persistence/Migrations.tsMarcode ids sit one higher (033 is ProjectWorkspaceLayout). Renamed upstream's 042/043 → 043/044 and fixed the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsxKept Marcode's bare Electron drag strip. Upstream's only change was a project-settings case for the sidebar Back button (pingdotgg#8168) — Marcode's FloatingPillNav already shows Back to Workspace on every non-thread route, so that intent is covered.
apps/web/src/components/threadSidebarWidth.test.tsAccepted upstream's prune of the trivial width assertions, but moved the Marcode brand-removal pin into its own components/sidebar/sidebarBrandRemoval.test.ts so a future upstream prune can't take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsxKept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488) lands in the shared terminal-links.ts, which Marcode's match.kind classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsxKept Marcode's FolderOpenFilled icon; took upstream's move of labels to the shared editorLabelForPlatform.
apps/web/src/components/ChatMarkdown.tsxTook upstream's editorPreferences/editorLabels/remoteOpen imports; kept openFileInFloatingEditor. The fork seam routing agent file links to the floating editor survives — upstream's right-panel file viewer (pingdotgg#8098) is not reintroduced.
apps/web/src/components/ChatView.tsxTook upstream's hoisted useNewThreadHandler/useThreadActions (needed by the new settle/pin keyboard shortcuts) and removed the duplicate later declaration. Kept Marcode's slim ChatHeader; dropped upstream's openProjectPullRequest, unreachable here because openThreadPullRequest already falls back to the project repository.
pnpm-lock.yamlKept Marcode's xterm entries, then regenerated with pnpm install --lockfile-only from the merged manifests.

Fork-boundary breaks that merged cleanly (no conflict) and were fixed here

These are the dangerous ones — they produce no conflict marker:

  1. apps/web/src/connection/clientMetadata.ts arrived new from upstream with hardcoded "T3 Code Desktop" / "T3 Code Web" labels and replaced Marcode's inline metadata builder in platform.ts. Every client would have reported itself as T3 Code. Routed both labels through APP_BASE_NAME and pinned "Marcode Desktop" in clientMetadata.test.ts.
  2. Three upstream oxlint-disable-next-line t3code/no-global-process-runtime comments (apps/desktop/src/preload.ts, apps/desktop/scripts/verify-preload-bundle.mjs, apps/server/src/process/externalLauncher.test.ts). Marcode's plugin is named marcode, so those disables match nothing and the rule — set to "error" — would have failed the Check job. Repointed to marcode/.

Swept and confirmed correct for Marcode: T3CODE_HOME (only guard tests/comments), t3code.service / com.t3tools.t3code launchd label, WORKTREE_BRANCH_PREFIX ("marcode"; the t3code/... branch strings in server/checkpoint tests are pre-existing arbitrary fixtures, not prefix-derived), t3code: storage keys, T3_BOOT_SERVICE_UNIT, T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR, @t3tools/*, and the t3 package/CLI name — all left upstream-shaped on purpose.

Follow-up commit 0a265857

CI caught one thing the focused local run did not: apps/server/src/persistence/Migrations.test.ts pins the migration registry with slice(-10), so appending the two renumbered upstream migrations pushed id 33 — the id the test is named for — out of the asserted window.

Fixed by anchoring the slice at id 33 via findIndex rather than a fixed tail length, so the assertion keeps covering Marcode's owned migration however many upstream ones land after it. Without that, the pin would have silently stopped testing its own subject on the next sync.

Coupled vendored subtrees

pnpm-workspace.yaml moved, but only Clerk versions; effect stayed at 4.0.0-beta.103 and infra/relay/package.json did not change. No sync:repos run was needed.

Why

Daily upstream sync. Upstream had 59 unmerged commits including a Codex approval-callback recovery fix, a projection-bootstrap replay fix (pingdotgg#7538), the macOS service PATH fix, Grok reliability work, and the Clerk 6.30/0.0.37 bumps.

UI Changes

Two decisions need your eye — I could not drive a browser or simulator for them in this container:

  • Android release launcher icon. Upstream's fix pairs a transparent light mark with a dark plate. Marcode's release previously used the black-on-white universal export as the foreground, which is exactly the double-masking bug upstream fixed. Taking the fix means the release Android launcher is now a light mark on #000000, diverging from Marcode's black-on-white rule for that one surface. Restoring black-on-white needs a Marcode-owned foreground SVG/PNG pair; no rasterizer is available here to generate one. Flagging for your call — the alternative was keeping the double-mask bug or shipping a white mark on a white plate.
  • vp run icons:check could not run: it needs macOS Icon Composer.

Checklist

  • This PR is small and focused — no, it is a 59-commit upstream sync; that is the unit of work
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — no browser/simulator available in this environment
  • I included a video for animation/interaction changes — n/a

CI on 0a265857

All four required checks green: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅. Also green: Test Server 1/2/3, Rust, Mobile Native Changes, claude-review, and the thread-transfer budget report (every metric within its ceiling). Native fingerprint diff sits queued, as it did on the previous head; it is not a required check.

Local verification before pushing (focused, per AGENTS.md — not the full suite)

  • vp test run green on: clientMetadata, sidebarBrandRemoval, mobileBranding, no-mobile-uniwind-theme-escape-hatches, bootService, ServerEnvironment, Migrations, 043_ProjectionThreadLinkedPullRequest, 042_AuthSessionClientConnection, build-desktop-artifact, contracts/environment, contracts/settings, terminal-links, editorLabels, Sidebar.logic, versionSkew, upstream-sync-workflow, serviceLauncher, electron-launcher, generate-uniwind-themes, connection/platform.
  • vp run --filter … typecheck clean for @t3tools/contracts, @t3tools/web, @t3tools/shared, @t3tools/client-runtime, t3 (server), @t3tools/mobile, @t3tools/desktop (only pre-existing Effect style suggestions, no errors).
  • vp fmt --check clean on all 356 changed TS files.
  • vp lint on the 82 changed directories: no errors; only warnings that are pre-existing on main.
  • generate-uniwind-themes.mts --check passes, so the generated theme CSS matches Marcode's tokens.

One thing to review deliberately

apps/server/src/provider/ModelManifest.ts is new from upstream and fetches legacy model classification from https://raw.githubusercontent.com/pingdotgg/t3code/main/apps/server/src/provider/model-manifest.json. I left the URL pointing at upstream — they maintain that data and Marcode benefits from their updates — but it does mean Marcode servers read a file from upstream's repo at runtime. Repointing it at maarco/marcode is a one-line change if you'd rather own it. The in-repo model-manifest.json is the fallback either way.

Left deliberately as a draft: this sync is yours to review and mark ready.

t3dotggand others added 30 commits August 24, 2026 12:42
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>
t3-codeBotand others added 21 commits August 27, 2026 13:28
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>
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>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Recent scheduled nightlies have been delayed or skipped.
Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.
Authored by GPT-5.6 Sol with the Codex harness.
Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.
Co-authored-by: codex <codex@users.noreply.github.com>
Merges 59 upstream commits (f035a0f..018d7f2) into Marcode. Conflict
decisions, path by path:
apps/mobile/app.config.ts
Took upstream's adaptive-launcher-icon fix (pingdotgg#4332): the release variant now
uses the shared transparent foreground instead of the rounded-square universal
export, which Android was masking a second time. The shipped foreground
artwork is a light mark, so the release plate stays dark; every other Marcode
production mark is still black-on-white.
apps/mobile/src/lib/authClientMetadata.ts
Kept the "Marcode Mobile" label, took upstream's tablet/phone deviceType
detection.
apps/mobile/src/components/CompactBrandTitle.tsx
Kept MarcodeMark and the conditional stage badge; took upstream's Uniwind
className styling in place of useThemeColor + inline styles, which the new
no-mobile-uniwind-theme-escape-hatches rule forbids.
apps/mobile/src/components/T3Wordmark.tsx
Kept Marcode's deletion; upstream only restyled it for Uniwind.
apps/mobile/src/features/home/HomeHeader.tsx
Kept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.ts
Upstream deleted this in pingdotgg#8397. Kept it: it pins Marcode returning "" (no
badge) where upstream returns "Alpha", and now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*
Landed upstream's new rule under Marcode's plugin directory and renamed its
test's rule prefix from t3code/ to marcode/ to match the plugin meta name.
vite.config.ts
Enabled the new rule at upstream's "error", kept Marcode's prefixes and the
no-native-title-tooltip "warn" seam.
apps/server/src/cloud/bootService.ts + test
Took upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path)
and kept MARCODE_HOME rather than T3CODE_HOME. Both guard tests now stand
side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.ts
Kept both capability flags: workspaceLayoutMutations and the new
threadPullRequestLinking.
apps/server/src/persistence/Migrations.ts
Marcode ids sit one higher than upstream's because 033 is
ProjectWorkspaceLayout here. Renamed upstream's 042/043 to 043/044 and fixed
the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsx
Kept Marcode's bare Electron drag strip. Upstream's only change in the file
was adding a project-settings case to the sidebar Back button (pingdotgg#8168);
Marcode's FloatingPillNav already shows Back to Workspace on every non-thread
route, so that intent is already covered.
apps/web/src/components/threadSidebarWidth.test.ts
Accepted upstream's prune of the trivial width assertions, but moved the
Marcode brand-removal pin into its own file,
components/sidebar/sidebarBrandRemoval.test.ts, so a future upstream prune
cannot take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsx
Kept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488)
lands in the shared terminal-links.ts, which Marcode's match.kind
classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsx
Kept Marcode's FolderOpenFilled icon, took upstream's move of labels to the
shared editorLabelForPlatform helper.
apps/web/src/components/ChatMarkdown.tsx
Took upstream's editorPreferences/editorLabels/remoteOpen imports and kept
openFileInFloatingEditor. The Marcode fork seam routing agent file links to
the floating editor survives; the right-panel file viewer upstream added in
pingdotgg#8098 is not reintroduced.
apps/web/src/components/ChatView.tsx
Took upstream's hoisted useNewThreadHandler/useThreadActions (needed by the
new settle and pin keyboard shortcuts) and removed the now-duplicate later
declaration. Kept Marcode's slim ChatHeader; dropped upstream's
openProjectPullRequest, which is unreachable here because Marcode's
openThreadPullRequest already falls back to the project repository.
pnpm-lock.yaml
Kept Marcode's xterm entries, then regenerated the lockfile with pnpm from
the merged manifests. Effect and Alchemy versions did not move, so no
vendored subtree sync was needed.
Fork-boundary breaks that merged cleanly and were fixed here:
- apps/web/src/connection/clientMetadata.ts arrived new from upstream with
hardcoded "T3 Code Desktop"/"T3 Code Web" labels and replaced Marcode's
inline metadata builder. Routed both through APP_BASE_NAME and pinned the
label in clientMetadata.test.ts.
- Three upstream oxlint-disable comments referenced the t3code/ rule prefix,
which does not match Marcode's plugin name and would have let
no-global-process-runtime fire in CI. Repointed to marcode/.
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Aug 28, 2026
The registry pin sliced the last 10 entries, so appending upstream's two new
migrations (043/044 after renumbering) pushed migration 33 — the id the test is
named for — out of the asserted window.
Anchor the slice at id 33 instead of a fixed tail length so the assertion keeps
covering Marcode's owned migration however many upstream ones land after it, and
add the two new entries.
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.3 KiB−122 B (−0.9%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB+5 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.4 KiB−127 B (−1.9%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB55.6 KiB+558 B (+1.0%)66.4 KiB
CodexLive turn messages1610−6 (−37.5%)21
ClaudeTotal thread wire13.4 KiB13.3 KiB−156 B (−1.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.6 KiB6.4 KiB−164 B (−2.4%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB56.4 KiB+532 B (+0.9%)66.4 KiB
ClaudeLive turn messages169−7 (−43.8%)21

Baseline: 133f3f7 · PR result: 0a26585 · 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.

@maarcoClaude

Copy link
Copy Markdown
OwnerAuthor

Two status changes since the description was written.

Native fingerprint diff is now cancelled, and it is not this PR's failure. It sat queued for exactly 24h (2026-08-28 15:42:11 → 2026-08-29 15:42:11) and GitHub killed it on the job timeout. Every run of mobile-fingerprint-check.yml on this fork does the same: I checked the last 30 runs and not one has ever completedclaude/gracious-bohr-1dtucn, -rlxi8l, -ie7aa6, -23bj7a, -x80z9c, -23l2b6, back to at least 2026-08-23, all queued-then-cancelled. It is a pre-existing fork-environment condition (the job never starts; the blacksmith-8vcpu-ubuntu-2404 label itself is fine, since Check, Test, and Rust all run on it here), and it is not in requiredPullRequestChecks. I am deliberately not spending the one re-run on it: 30 runs across 6 branches is stronger evidence than a 31st would be, and a re-run would just occupy a runner slot for another 24h. It needs a repo-settings fix, not a change to this PR.

The four required checks remain green on 0a265857: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅.

This PR's upstream coverage is now superseded by #61 (053affbe), opened by today's scheduled run. I verified 018d7f27 is an ancestor of #61's head, so #61 covers everything here.

But #61 branched from main independently rather than building on this branch, so the two are not interchangeable:

So the migration-pin fix in 0a265857 is the one piece of this PR that #61 still needs. Cherry-picking that single commit onto #61 should get it green, at which point #61 is the better merge candidate and this PR can be closed alongside #53, #55, and #56.

I have not pushed to #61 — it is not a PR I opened, and this session was not asked to drive it.


Generated by Claude Code

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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.

16 participants

@maarco@t3dotgg@tris203@flamboh@RakshithBhat03@StiensWout@lnieuwenhuis@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@claude
, '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 018d7f27 - #58

Draft
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn
Draft

chore(upstream): sync marcode through 018d7f27#58
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn

Conversation

@maarco

@maarcomaarco commented Aug 28, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges 59 upstream commits, f035a0f4..018d7f27 (pingdotgg/t3code@018d7f27), into Marcode as one two-parent merge commit (a940ce5c), plus one follow-up commit (0a265857) fixing a Marcode-owned test the merge invalidated. No force push, reset, restore, stash, clean, or wholesale ours/theirs resolution was used; MERGE_HEAD stayed at 018d7f27 for the whole resolution.

Supersedes #53, #55, and #56 — those draft syncs targeted older upstream SHAs (a3a8cbd6, f6f2be32) that are contained in this one. Merging this closes the delta they cover; they can be closed unmerged.

Conflicts resolved (24 paths)

PathDecision
apps/mobile/app.config.tsTook upstream's adaptive-launcher-icon fix (pingdotgg#4332) — release now uses the shared transparent foreground instead of the rounded-square universal export Android was masking twice. See the branding note below.
apps/mobile/src/lib/authClientMetadata.tsKept "Marcode Mobile"; took upstream's tablet/phone deviceType detection.
apps/mobile/src/components/CompactBrandTitle.tsxKept MarcodeMark and the conditional stage badge; took upstream's Uniwind className styling over useThemeColor + inline styles (the new lint rule forbids them).
apps/mobile/src/components/T3Wordmark.tsxKept Marcode's deletion; upstream only restyled it.
apps/mobile/src/features/home/HomeHeader.tsxKept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.tsUpstream deleted it (pingdotgg#8397). Kept — it pins Marcode returning "" (no badge) where upstream returns "Alpha". Now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*Landed upstream's new rule under Marcode's plugin dir; renamed the test's rule prefix t3code/marcode/ to match the plugin meta name.
vite.config.tsEnabled the new rule at upstream's "error"; kept Marcode's prefixes and the no-native-title-tooltip"warn" seam.
apps/server/src/cloud/bootService.ts + testTook upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path); kept MARCODE_HOME, not T3CODE_HOME. Both guard tests now stand side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.tsKept both capability flags: workspaceLayoutMutations and the new threadPullRequestLinking.
apps/server/src/persistence/Migrations.tsMarcode ids sit one higher (033 is ProjectWorkspaceLayout). Renamed upstream's 042/043 → 043/044 and fixed the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsxKept Marcode's bare Electron drag strip. Upstream's only change was a project-settings case for the sidebar Back button (pingdotgg#8168) — Marcode's FloatingPillNav already shows Back to Workspace on every non-thread route, so that intent is covered.
apps/web/src/components/threadSidebarWidth.test.tsAccepted upstream's prune of the trivial width assertions, but moved the Marcode brand-removal pin into its own components/sidebar/sidebarBrandRemoval.test.ts so a future upstream prune can't take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsxKept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488) lands in the shared terminal-links.ts, which Marcode's match.kind classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsxKept Marcode's FolderOpenFilled icon; took upstream's move of labels to the shared editorLabelForPlatform.
apps/web/src/components/ChatMarkdown.tsxTook upstream's editorPreferences/editorLabels/remoteOpen imports; kept openFileInFloatingEditor. The fork seam routing agent file links to the floating editor survives — upstream's right-panel file viewer (pingdotgg#8098) is not reintroduced.
apps/web/src/components/ChatView.tsxTook upstream's hoisted useNewThreadHandler/useThreadActions (needed by the new settle/pin keyboard shortcuts) and removed the duplicate later declaration. Kept Marcode's slim ChatHeader; dropped upstream's openProjectPullRequest, unreachable here because openThreadPullRequest already falls back to the project repository.
pnpm-lock.yamlKept Marcode's xterm entries, then regenerated with pnpm install --lockfile-only from the merged manifests.

Fork-boundary breaks that merged cleanly (no conflict) and were fixed here

These are the dangerous ones — they produce no conflict marker:

  1. apps/web/src/connection/clientMetadata.ts arrived new from upstream with hardcoded "T3 Code Desktop" / "T3 Code Web" labels and replaced Marcode's inline metadata builder in platform.ts. Every client would have reported itself as T3 Code. Routed both labels through APP_BASE_NAME and pinned "Marcode Desktop" in clientMetadata.test.ts.
  2. Three upstream oxlint-disable-next-line t3code/no-global-process-runtime comments (apps/desktop/src/preload.ts, apps/desktop/scripts/verify-preload-bundle.mjs, apps/server/src/process/externalLauncher.test.ts). Marcode's plugin is named marcode, so those disables match nothing and the rule — set to "error" — would have failed the Check job. Repointed to marcode/.

Swept and confirmed correct for Marcode: T3CODE_HOME (only guard tests/comments), t3code.service / com.t3tools.t3code launchd label, WORKTREE_BRANCH_PREFIX ("marcode"; the t3code/... branch strings in server/checkpoint tests are pre-existing arbitrary fixtures, not prefix-derived), t3code: storage keys, T3_BOOT_SERVICE_UNIT, T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR, @t3tools/*, and the t3 package/CLI name — all left upstream-shaped on purpose.

Follow-up commit 0a265857

CI caught one thing the focused local run did not: apps/server/src/persistence/Migrations.test.ts pins the migration registry with slice(-10), so appending the two renumbered upstream migrations pushed id 33 — the id the test is named for — out of the asserted window.

Fixed by anchoring the slice at id 33 via findIndex rather than a fixed tail length, so the assertion keeps covering Marcode's owned migration however many upstream ones land after it. Without that, the pin would have silently stopped testing its own subject on the next sync.

Coupled vendored subtrees

pnpm-workspace.yaml moved, but only Clerk versions; effect stayed at 4.0.0-beta.103 and infra/relay/package.json did not change. No sync:repos run was needed.

Why

Daily upstream sync. Upstream had 59 unmerged commits including a Codex approval-callback recovery fix, a projection-bootstrap replay fix (pingdotgg#7538), the macOS service PATH fix, Grok reliability work, and the Clerk 6.30/0.0.37 bumps.

UI Changes

Two decisions need your eye — I could not drive a browser or simulator for them in this container:

  • Android release launcher icon. Upstream's fix pairs a transparent light mark with a dark plate. Marcode's release previously used the black-on-white universal export as the foreground, which is exactly the double-masking bug upstream fixed. Taking the fix means the release Android launcher is now a light mark on #000000, diverging from Marcode's black-on-white rule for that one surface. Restoring black-on-white needs a Marcode-owned foreground SVG/PNG pair; no rasterizer is available here to generate one. Flagging for your call — the alternative was keeping the double-mask bug or shipping a white mark on a white plate.
  • vp run icons:check could not run: it needs macOS Icon Composer.

Checklist

  • This PR is small and focused — no, it is a 59-commit upstream sync; that is the unit of work
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — no browser/simulator available in this environment
  • I included a video for animation/interaction changes — n/a

CI on 0a265857

All four required checks green: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅. Also green: Test Server 1/2/3, Rust, Mobile Native Changes, claude-review, and the thread-transfer budget report (every metric within its ceiling). Native fingerprint diff sits queued, as it did on the previous head; it is not a required check.

Local verification before pushing (focused, per AGENTS.md — not the full suite)

  • vp test run green on: clientMetadata, sidebarBrandRemoval, mobileBranding, no-mobile-uniwind-theme-escape-hatches, bootService, ServerEnvironment, Migrations, 043_ProjectionThreadLinkedPullRequest, 042_AuthSessionClientConnection, build-desktop-artifact, contracts/environment, contracts/settings, terminal-links, editorLabels, Sidebar.logic, versionSkew, upstream-sync-workflow, serviceLauncher, electron-launcher, generate-uniwind-themes, connection/platform.
  • vp run --filter … typecheck clean for @t3tools/contracts, @t3tools/web, @t3tools/shared, @t3tools/client-runtime, t3 (server), @t3tools/mobile, @t3tools/desktop (only pre-existing Effect style suggestions, no errors).
  • vp fmt --check clean on all 356 changed TS files.
  • vp lint on the 82 changed directories: no errors; only warnings that are pre-existing on main.
  • generate-uniwind-themes.mts --check passes, so the generated theme CSS matches Marcode's tokens.

One thing to review deliberately

apps/server/src/provider/ModelManifest.ts is new from upstream and fetches legacy model classification from https://raw.githubusercontent.com/pingdotgg/t3code/main/apps/server/src/provider/model-manifest.json. I left the URL pointing at upstream — they maintain that data and Marcode benefits from their updates — but it does mean Marcode servers read a file from upstream's repo at runtime. Repointing it at maarco/marcode is a one-line change if you'd rather own it. The in-repo model-manifest.json is the fallback either way.

Left deliberately as a draft: this sync is yours to review and mark ready.

t3dotggand others added 30 commits August 24, 2026 12:42
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>
t3-codeBotand others added 21 commits August 27, 2026 13:28
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>
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>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Recent scheduled nightlies have been delayed or skipped.
Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.
Authored by GPT-5.6 Sol with the Codex harness.
Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.
Co-authored-by: codex <codex@users.noreply.github.com>
Merges 59 upstream commits (f035a0f..018d7f2) into Marcode. Conflict
decisions, path by path:
apps/mobile/app.config.ts
Took upstream's adaptive-launcher-icon fix (pingdotgg#4332): the release variant now
uses the shared transparent foreground instead of the rounded-square universal
export, which Android was masking a second time. The shipped foreground
artwork is a light mark, so the release plate stays dark; every other Marcode
production mark is still black-on-white.
apps/mobile/src/lib/authClientMetadata.ts
Kept the "Marcode Mobile" label, took upstream's tablet/phone deviceType
detection.
apps/mobile/src/components/CompactBrandTitle.tsx
Kept MarcodeMark and the conditional stage badge; took upstream's Uniwind
className styling in place of useThemeColor + inline styles, which the new
no-mobile-uniwind-theme-escape-hatches rule forbids.
apps/mobile/src/components/T3Wordmark.tsx
Kept Marcode's deletion; upstream only restyled it for Uniwind.
apps/mobile/src/features/home/HomeHeader.tsx
Kept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.ts
Upstream deleted this in pingdotgg#8397. Kept it: it pins Marcode returning "" (no
badge) where upstream returns "Alpha", and now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*
Landed upstream's new rule under Marcode's plugin directory and renamed its
test's rule prefix from t3code/ to marcode/ to match the plugin meta name.
vite.config.ts
Enabled the new rule at upstream's "error", kept Marcode's prefixes and the
no-native-title-tooltip "warn" seam.
apps/server/src/cloud/bootService.ts + test
Took upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path)
and kept MARCODE_HOME rather than T3CODE_HOME. Both guard tests now stand
side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.ts
Kept both capability flags: workspaceLayoutMutations and the new
threadPullRequestLinking.
apps/server/src/persistence/Migrations.ts
Marcode ids sit one higher than upstream's because 033 is
ProjectWorkspaceLayout here. Renamed upstream's 042/043 to 043/044 and fixed
the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsx
Kept Marcode's bare Electron drag strip. Upstream's only change in the file
was adding a project-settings case to the sidebar Back button (pingdotgg#8168);
Marcode's FloatingPillNav already shows Back to Workspace on every non-thread
route, so that intent is already covered.
apps/web/src/components/threadSidebarWidth.test.ts
Accepted upstream's prune of the trivial width assertions, but moved the
Marcode brand-removal pin into its own file,
components/sidebar/sidebarBrandRemoval.test.ts, so a future upstream prune
cannot take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsx
Kept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488)
lands in the shared terminal-links.ts, which Marcode's match.kind
classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsx
Kept Marcode's FolderOpenFilled icon, took upstream's move of labels to the
shared editorLabelForPlatform helper.
apps/web/src/components/ChatMarkdown.tsx
Took upstream's editorPreferences/editorLabels/remoteOpen imports and kept
openFileInFloatingEditor. The Marcode fork seam routing agent file links to
the floating editor survives; the right-panel file viewer upstream added in
pingdotgg#8098 is not reintroduced.
apps/web/src/components/ChatView.tsx
Took upstream's hoisted useNewThreadHandler/useThreadActions (needed by the
new settle and pin keyboard shortcuts) and removed the now-duplicate later
declaration. Kept Marcode's slim ChatHeader; dropped upstream's
openProjectPullRequest, which is unreachable here because Marcode's
openThreadPullRequest already falls back to the project repository.
pnpm-lock.yaml
Kept Marcode's xterm entries, then regenerated the lockfile with pnpm from
the merged manifests. Effect and Alchemy versions did not move, so no
vendored subtree sync was needed.
Fork-boundary breaks that merged cleanly and were fixed here:
- apps/web/src/connection/clientMetadata.ts arrived new from upstream with
hardcoded "T3 Code Desktop"/"T3 Code Web" labels and replaced Marcode's
inline metadata builder. Routed both through APP_BASE_NAME and pinned the
label in clientMetadata.test.ts.
- Three upstream oxlint-disable comments referenced the t3code/ rule prefix,
which does not match Marcode's plugin name and would have let
no-global-process-runtime fire in CI. Repointed to marcode/.
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Aug 28, 2026
The registry pin sliced the last 10 entries, so appending upstream's two new
migrations (043/044 after renumbering) pushed migration 33 — the id the test is
named for — out of the asserted window.
Anchor the slice at id 33 instead of a fixed tail length so the assertion keeps
covering Marcode's owned migration however many upstream ones land after it, and
add the two new entries.
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.3 KiB−122 B (−0.9%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB+5 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.4 KiB−127 B (−1.9%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB55.6 KiB+558 B (+1.0%)66.4 KiB
CodexLive turn messages1610−6 (−37.5%)21
ClaudeTotal thread wire13.4 KiB13.3 KiB−156 B (−1.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.6 KiB6.4 KiB−164 B (−2.4%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB56.4 KiB+532 B (+0.9%)66.4 KiB
ClaudeLive turn messages169−7 (−43.8%)21

Baseline: 133f3f7 · PR result: 0a26585 · 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.

@maarcoClaude

Copy link
Copy Markdown
OwnerAuthor

Two status changes since the description was written.

Native fingerprint diff is now cancelled, and it is not this PR's failure. It sat queued for exactly 24h (2026-08-28 15:42:11 → 2026-08-29 15:42:11) and GitHub killed it on the job timeout. Every run of mobile-fingerprint-check.yml on this fork does the same: I checked the last 30 runs and not one has ever completedclaude/gracious-bohr-1dtucn, -rlxi8l, -ie7aa6, -23bj7a, -x80z9c, -23l2b6, back to at least 2026-08-23, all queued-then-cancelled. It is a pre-existing fork-environment condition (the job never starts; the blacksmith-8vcpu-ubuntu-2404 label itself is fine, since Check, Test, and Rust all run on it here), and it is not in requiredPullRequestChecks. I am deliberately not spending the one re-run on it: 30 runs across 6 branches is stronger evidence than a 31st would be, and a re-run would just occupy a runner slot for another 24h. It needs a repo-settings fix, not a change to this PR.

The four required checks remain green on 0a265857: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅.

This PR's upstream coverage is now superseded by #61 (053affbe), opened by today's scheduled run. I verified 018d7f27 is an ancestor of #61's head, so #61 covers everything here.

But #61 branched from main independently rather than building on this branch, so the two are not interchangeable:

So the migration-pin fix in 0a265857 is the one piece of this PR that #61 still needs. Cherry-picking that single commit onto #61 should get it green, at which point #61 is the better merge candidate and this PR can be closed alongside #53, #55, and #56.

I have not pushed to #61 — it is not a PR I opened, and this session was not asked to drive it.


Generated by Claude Code

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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.

16 participants

@maarco@t3dotgg@tris203@flamboh@RakshithBhat03@StiensWout@lnieuwenhuis@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@claude
, '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 018d7f27 - #58

Draft
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn
Draft

chore(upstream): sync marcode through 018d7f27#58
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn

Conversation

@maarco

@maarcomaarco commented Aug 28, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges 59 upstream commits, f035a0f4..018d7f27 (pingdotgg/t3code@018d7f27), into Marcode as one two-parent merge commit (a940ce5c), plus one follow-up commit (0a265857) fixing a Marcode-owned test the merge invalidated. No force push, reset, restore, stash, clean, or wholesale ours/theirs resolution was used; MERGE_HEAD stayed at 018d7f27 for the whole resolution.

Supersedes #53, #55, and #56 — those draft syncs targeted older upstream SHAs (a3a8cbd6, f6f2be32) that are contained in this one. Merging this closes the delta they cover; they can be closed unmerged.

Conflicts resolved (24 paths)

PathDecision
apps/mobile/app.config.tsTook upstream's adaptive-launcher-icon fix (pingdotgg#4332) — release now uses the shared transparent foreground instead of the rounded-square universal export Android was masking twice. See the branding note below.
apps/mobile/src/lib/authClientMetadata.tsKept "Marcode Mobile"; took upstream's tablet/phone deviceType detection.
apps/mobile/src/components/CompactBrandTitle.tsxKept MarcodeMark and the conditional stage badge; took upstream's Uniwind className styling over useThemeColor + inline styles (the new lint rule forbids them).
apps/mobile/src/components/T3Wordmark.tsxKept Marcode's deletion; upstream only restyled it.
apps/mobile/src/features/home/HomeHeader.tsxKept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.tsUpstream deleted it (pingdotgg#8397). Kept — it pins Marcode returning "" (no badge) where upstream returns "Alpha". Now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*Landed upstream's new rule under Marcode's plugin dir; renamed the test's rule prefix t3code/marcode/ to match the plugin meta name.
vite.config.tsEnabled the new rule at upstream's "error"; kept Marcode's prefixes and the no-native-title-tooltip"warn" seam.
apps/server/src/cloud/bootService.ts + testTook upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path); kept MARCODE_HOME, not T3CODE_HOME. Both guard tests now stand side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.tsKept both capability flags: workspaceLayoutMutations and the new threadPullRequestLinking.
apps/server/src/persistence/Migrations.tsMarcode ids sit one higher (033 is ProjectWorkspaceLayout). Renamed upstream's 042/043 → 043/044 and fixed the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsxKept Marcode's bare Electron drag strip. Upstream's only change was a project-settings case for the sidebar Back button (pingdotgg#8168) — Marcode's FloatingPillNav already shows Back to Workspace on every non-thread route, so that intent is covered.
apps/web/src/components/threadSidebarWidth.test.tsAccepted upstream's prune of the trivial width assertions, but moved the Marcode brand-removal pin into its own components/sidebar/sidebarBrandRemoval.test.ts so a future upstream prune can't take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsxKept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488) lands in the shared terminal-links.ts, which Marcode's match.kind classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsxKept Marcode's FolderOpenFilled icon; took upstream's move of labels to the shared editorLabelForPlatform.
apps/web/src/components/ChatMarkdown.tsxTook upstream's editorPreferences/editorLabels/remoteOpen imports; kept openFileInFloatingEditor. The fork seam routing agent file links to the floating editor survives — upstream's right-panel file viewer (pingdotgg#8098) is not reintroduced.
apps/web/src/components/ChatView.tsxTook upstream's hoisted useNewThreadHandler/useThreadActions (needed by the new settle/pin keyboard shortcuts) and removed the duplicate later declaration. Kept Marcode's slim ChatHeader; dropped upstream's openProjectPullRequest, unreachable here because openThreadPullRequest already falls back to the project repository.
pnpm-lock.yamlKept Marcode's xterm entries, then regenerated with pnpm install --lockfile-only from the merged manifests.

Fork-boundary breaks that merged cleanly (no conflict) and were fixed here

These are the dangerous ones — they produce no conflict marker:

  1. apps/web/src/connection/clientMetadata.ts arrived new from upstream with hardcoded "T3 Code Desktop" / "T3 Code Web" labels and replaced Marcode's inline metadata builder in platform.ts. Every client would have reported itself as T3 Code. Routed both labels through APP_BASE_NAME and pinned "Marcode Desktop" in clientMetadata.test.ts.
  2. Three upstream oxlint-disable-next-line t3code/no-global-process-runtime comments (apps/desktop/src/preload.ts, apps/desktop/scripts/verify-preload-bundle.mjs, apps/server/src/process/externalLauncher.test.ts). Marcode's plugin is named marcode, so those disables match nothing and the rule — set to "error" — would have failed the Check job. Repointed to marcode/.

Swept and confirmed correct for Marcode: T3CODE_HOME (only guard tests/comments), t3code.service / com.t3tools.t3code launchd label, WORKTREE_BRANCH_PREFIX ("marcode"; the t3code/... branch strings in server/checkpoint tests are pre-existing arbitrary fixtures, not prefix-derived), t3code: storage keys, T3_BOOT_SERVICE_UNIT, T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR, @t3tools/*, and the t3 package/CLI name — all left upstream-shaped on purpose.

Follow-up commit 0a265857

CI caught one thing the focused local run did not: apps/server/src/persistence/Migrations.test.ts pins the migration registry with slice(-10), so appending the two renumbered upstream migrations pushed id 33 — the id the test is named for — out of the asserted window.

Fixed by anchoring the slice at id 33 via findIndex rather than a fixed tail length, so the assertion keeps covering Marcode's owned migration however many upstream ones land after it. Without that, the pin would have silently stopped testing its own subject on the next sync.

Coupled vendored subtrees

pnpm-workspace.yaml moved, but only Clerk versions; effect stayed at 4.0.0-beta.103 and infra/relay/package.json did not change. No sync:repos run was needed.

Why

Daily upstream sync. Upstream had 59 unmerged commits including a Codex approval-callback recovery fix, a projection-bootstrap replay fix (pingdotgg#7538), the macOS service PATH fix, Grok reliability work, and the Clerk 6.30/0.0.37 bumps.

UI Changes

Two decisions need your eye — I could not drive a browser or simulator for them in this container:

  • Android release launcher icon. Upstream's fix pairs a transparent light mark with a dark plate. Marcode's release previously used the black-on-white universal export as the foreground, which is exactly the double-masking bug upstream fixed. Taking the fix means the release Android launcher is now a light mark on #000000, diverging from Marcode's black-on-white rule for that one surface. Restoring black-on-white needs a Marcode-owned foreground SVG/PNG pair; no rasterizer is available here to generate one. Flagging for your call — the alternative was keeping the double-mask bug or shipping a white mark on a white plate.
  • vp run icons:check could not run: it needs macOS Icon Composer.

Checklist

  • This PR is small and focused — no, it is a 59-commit upstream sync; that is the unit of work
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — no browser/simulator available in this environment
  • I included a video for animation/interaction changes — n/a

CI on 0a265857

All four required checks green: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅. Also green: Test Server 1/2/3, Rust, Mobile Native Changes, claude-review, and the thread-transfer budget report (every metric within its ceiling). Native fingerprint diff sits queued, as it did on the previous head; it is not a required check.

Local verification before pushing (focused, per AGENTS.md — not the full suite)

  • vp test run green on: clientMetadata, sidebarBrandRemoval, mobileBranding, no-mobile-uniwind-theme-escape-hatches, bootService, ServerEnvironment, Migrations, 043_ProjectionThreadLinkedPullRequest, 042_AuthSessionClientConnection, build-desktop-artifact, contracts/environment, contracts/settings, terminal-links, editorLabels, Sidebar.logic, versionSkew, upstream-sync-workflow, serviceLauncher, electron-launcher, generate-uniwind-themes, connection/platform.
  • vp run --filter … typecheck clean for @t3tools/contracts, @t3tools/web, @t3tools/shared, @t3tools/client-runtime, t3 (server), @t3tools/mobile, @t3tools/desktop (only pre-existing Effect style suggestions, no errors).
  • vp fmt --check clean on all 356 changed TS files.
  • vp lint on the 82 changed directories: no errors; only warnings that are pre-existing on main.
  • generate-uniwind-themes.mts --check passes, so the generated theme CSS matches Marcode's tokens.

One thing to review deliberately

apps/server/src/provider/ModelManifest.ts is new from upstream and fetches legacy model classification from https://raw.githubusercontent.com/pingdotgg/t3code/main/apps/server/src/provider/model-manifest.json. I left the URL pointing at upstream — they maintain that data and Marcode benefits from their updates — but it does mean Marcode servers read a file from upstream's repo at runtime. Repointing it at maarco/marcode is a one-line change if you'd rather own it. The in-repo model-manifest.json is the fallback either way.

Left deliberately as a draft: this sync is yours to review and mark ready.

t3dotggand others added 30 commits August 24, 2026 12:42
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>
t3-codeBotand others added 21 commits August 27, 2026 13:28
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>
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>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Recent scheduled nightlies have been delayed or skipped.
Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.
Authored by GPT-5.6 Sol with the Codex harness.
Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.
Co-authored-by: codex <codex@users.noreply.github.com>
Merges 59 upstream commits (f035a0f..018d7f2) into Marcode. Conflict
decisions, path by path:
apps/mobile/app.config.ts
Took upstream's adaptive-launcher-icon fix (pingdotgg#4332): the release variant now
uses the shared transparent foreground instead of the rounded-square universal
export, which Android was masking a second time. The shipped foreground
artwork is a light mark, so the release plate stays dark; every other Marcode
production mark is still black-on-white.
apps/mobile/src/lib/authClientMetadata.ts
Kept the "Marcode Mobile" label, took upstream's tablet/phone deviceType
detection.
apps/mobile/src/components/CompactBrandTitle.tsx
Kept MarcodeMark and the conditional stage badge; took upstream's Uniwind
className styling in place of useThemeColor + inline styles, which the new
no-mobile-uniwind-theme-escape-hatches rule forbids.
apps/mobile/src/components/T3Wordmark.tsx
Kept Marcode's deletion; upstream only restyled it for Uniwind.
apps/mobile/src/features/home/HomeHeader.tsx
Kept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.ts
Upstream deleted this in pingdotgg#8397. Kept it: it pins Marcode returning "" (no
badge) where upstream returns "Alpha", and now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*
Landed upstream's new rule under Marcode's plugin directory and renamed its
test's rule prefix from t3code/ to marcode/ to match the plugin meta name.
vite.config.ts
Enabled the new rule at upstream's "error", kept Marcode's prefixes and the
no-native-title-tooltip "warn" seam.
apps/server/src/cloud/bootService.ts + test
Took upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path)
and kept MARCODE_HOME rather than T3CODE_HOME. Both guard tests now stand
side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.ts
Kept both capability flags: workspaceLayoutMutations and the new
threadPullRequestLinking.
apps/server/src/persistence/Migrations.ts
Marcode ids sit one higher than upstream's because 033 is
ProjectWorkspaceLayout here. Renamed upstream's 042/043 to 043/044 and fixed
the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsx
Kept Marcode's bare Electron drag strip. Upstream's only change in the file
was adding a project-settings case to the sidebar Back button (pingdotgg#8168);
Marcode's FloatingPillNav already shows Back to Workspace on every non-thread
route, so that intent is already covered.
apps/web/src/components/threadSidebarWidth.test.ts
Accepted upstream's prune of the trivial width assertions, but moved the
Marcode brand-removal pin into its own file,
components/sidebar/sidebarBrandRemoval.test.ts, so a future upstream prune
cannot take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsx
Kept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488)
lands in the shared terminal-links.ts, which Marcode's match.kind
classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsx
Kept Marcode's FolderOpenFilled icon, took upstream's move of labels to the
shared editorLabelForPlatform helper.
apps/web/src/components/ChatMarkdown.tsx
Took upstream's editorPreferences/editorLabels/remoteOpen imports and kept
openFileInFloatingEditor. The Marcode fork seam routing agent file links to
the floating editor survives; the right-panel file viewer upstream added in
pingdotgg#8098 is not reintroduced.
apps/web/src/components/ChatView.tsx
Took upstream's hoisted useNewThreadHandler/useThreadActions (needed by the
new settle and pin keyboard shortcuts) and removed the now-duplicate later
declaration. Kept Marcode's slim ChatHeader; dropped upstream's
openProjectPullRequest, which is unreachable here because Marcode's
openThreadPullRequest already falls back to the project repository.
pnpm-lock.yaml
Kept Marcode's xterm entries, then regenerated the lockfile with pnpm from
the merged manifests. Effect and Alchemy versions did not move, so no
vendored subtree sync was needed.
Fork-boundary breaks that merged cleanly and were fixed here:
- apps/web/src/connection/clientMetadata.ts arrived new from upstream with
hardcoded "T3 Code Desktop"/"T3 Code Web" labels and replaced Marcode's
inline metadata builder. Routed both through APP_BASE_NAME and pinned the
label in clientMetadata.test.ts.
- Three upstream oxlint-disable comments referenced the t3code/ rule prefix,
which does not match Marcode's plugin name and would have let
no-global-process-runtime fire in CI. Repointed to marcode/.
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Aug 28, 2026
The registry pin sliced the last 10 entries, so appending upstream's two new
migrations (043/044 after renumbering) pushed migration 33 — the id the test is
named for — out of the asserted window.
Anchor the slice at id 33 instead of a fixed tail length so the assertion keeps
covering Marcode's owned migration however many upstream ones land after it, and
add the two new entries.
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.3 KiB−122 B (−0.9%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB+5 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.4 KiB−127 B (−1.9%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB55.6 KiB+558 B (+1.0%)66.4 KiB
CodexLive turn messages1610−6 (−37.5%)21
ClaudeTotal thread wire13.4 KiB13.3 KiB−156 B (−1.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.6 KiB6.4 KiB−164 B (−2.4%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB56.4 KiB+532 B (+0.9%)66.4 KiB
ClaudeLive turn messages169−7 (−43.8%)21

Baseline: 133f3f7 · PR result: 0a26585 · 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.

@maarcoClaude

Copy link
Copy Markdown
OwnerAuthor

Two status changes since the description was written.

Native fingerprint diff is now cancelled, and it is not this PR's failure. It sat queued for exactly 24h (2026-08-28 15:42:11 → 2026-08-29 15:42:11) and GitHub killed it on the job timeout. Every run of mobile-fingerprint-check.yml on this fork does the same: I checked the last 30 runs and not one has ever completedclaude/gracious-bohr-1dtucn, -rlxi8l, -ie7aa6, -23bj7a, -x80z9c, -23l2b6, back to at least 2026-08-23, all queued-then-cancelled. It is a pre-existing fork-environment condition (the job never starts; the blacksmith-8vcpu-ubuntu-2404 label itself is fine, since Check, Test, and Rust all run on it here), and it is not in requiredPullRequestChecks. I am deliberately not spending the one re-run on it: 30 runs across 6 branches is stronger evidence than a 31st would be, and a re-run would just occupy a runner slot for another 24h. It needs a repo-settings fix, not a change to this PR.

The four required checks remain green on 0a265857: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅.

This PR's upstream coverage is now superseded by #61 (053affbe), opened by today's scheduled run. I verified 018d7f27 is an ancestor of #61's head, so #61 covers everything here.

But #61 branched from main independently rather than building on this branch, so the two are not interchangeable:

So the migration-pin fix in 0a265857 is the one piece of this PR that #61 still needs. Cherry-picking that single commit onto #61 should get it green, at which point #61 is the better merge candidate and this PR can be closed alongside #53, #55, and #56.

I have not pushed to #61 — it is not a PR I opened, and this session was not asked to drive it.


Generated by Claude Code

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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.

16 participants

@maarco@t3dotgg@tris203@flamboh@RakshithBhat03@StiensWout@lnieuwenhuis@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@claude
, '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 018d7f27 - #58

Draft
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn
Draft

chore(upstream): sync marcode through 018d7f27#58
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn

Conversation

@maarco

@maarcomaarco commented Aug 28, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges 59 upstream commits, f035a0f4..018d7f27 (pingdotgg/t3code@018d7f27), into Marcode as one two-parent merge commit (a940ce5c), plus one follow-up commit (0a265857) fixing a Marcode-owned test the merge invalidated. No force push, reset, restore, stash, clean, or wholesale ours/theirs resolution was used; MERGE_HEAD stayed at 018d7f27 for the whole resolution.

Supersedes #53, #55, and #56 — those draft syncs targeted older upstream SHAs (a3a8cbd6, f6f2be32) that are contained in this one. Merging this closes the delta they cover; they can be closed unmerged.

Conflicts resolved (24 paths)

PathDecision
apps/mobile/app.config.tsTook upstream's adaptive-launcher-icon fix (pingdotgg#4332) — release now uses the shared transparent foreground instead of the rounded-square universal export Android was masking twice. See the branding note below.
apps/mobile/src/lib/authClientMetadata.tsKept "Marcode Mobile"; took upstream's tablet/phone deviceType detection.
apps/mobile/src/components/CompactBrandTitle.tsxKept MarcodeMark and the conditional stage badge; took upstream's Uniwind className styling over useThemeColor + inline styles (the new lint rule forbids them).
apps/mobile/src/components/T3Wordmark.tsxKept Marcode's deletion; upstream only restyled it.
apps/mobile/src/features/home/HomeHeader.tsxKept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.tsUpstream deleted it (pingdotgg#8397). Kept — it pins Marcode returning "" (no badge) where upstream returns "Alpha". Now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*Landed upstream's new rule under Marcode's plugin dir; renamed the test's rule prefix t3code/marcode/ to match the plugin meta name.
vite.config.tsEnabled the new rule at upstream's "error"; kept Marcode's prefixes and the no-native-title-tooltip"warn" seam.
apps/server/src/cloud/bootService.ts + testTook upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path); kept MARCODE_HOME, not T3CODE_HOME. Both guard tests now stand side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.tsKept both capability flags: workspaceLayoutMutations and the new threadPullRequestLinking.
apps/server/src/persistence/Migrations.tsMarcode ids sit one higher (033 is ProjectWorkspaceLayout). Renamed upstream's 042/043 → 043/044 and fixed the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsxKept Marcode's bare Electron drag strip. Upstream's only change was a project-settings case for the sidebar Back button (pingdotgg#8168) — Marcode's FloatingPillNav already shows Back to Workspace on every non-thread route, so that intent is covered.
apps/web/src/components/threadSidebarWidth.test.tsAccepted upstream's prune of the trivial width assertions, but moved the Marcode brand-removal pin into its own components/sidebar/sidebarBrandRemoval.test.ts so a future upstream prune can't take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsxKept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488) lands in the shared terminal-links.ts, which Marcode's match.kind classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsxKept Marcode's FolderOpenFilled icon; took upstream's move of labels to the shared editorLabelForPlatform.
apps/web/src/components/ChatMarkdown.tsxTook upstream's editorPreferences/editorLabels/remoteOpen imports; kept openFileInFloatingEditor. The fork seam routing agent file links to the floating editor survives — upstream's right-panel file viewer (pingdotgg#8098) is not reintroduced.
apps/web/src/components/ChatView.tsxTook upstream's hoisted useNewThreadHandler/useThreadActions (needed by the new settle/pin keyboard shortcuts) and removed the duplicate later declaration. Kept Marcode's slim ChatHeader; dropped upstream's openProjectPullRequest, unreachable here because openThreadPullRequest already falls back to the project repository.
pnpm-lock.yamlKept Marcode's xterm entries, then regenerated with pnpm install --lockfile-only from the merged manifests.

Fork-boundary breaks that merged cleanly (no conflict) and were fixed here

These are the dangerous ones — they produce no conflict marker:

  1. apps/web/src/connection/clientMetadata.ts arrived new from upstream with hardcoded "T3 Code Desktop" / "T3 Code Web" labels and replaced Marcode's inline metadata builder in platform.ts. Every client would have reported itself as T3 Code. Routed both labels through APP_BASE_NAME and pinned "Marcode Desktop" in clientMetadata.test.ts.
  2. Three upstream oxlint-disable-next-line t3code/no-global-process-runtime comments (apps/desktop/src/preload.ts, apps/desktop/scripts/verify-preload-bundle.mjs, apps/server/src/process/externalLauncher.test.ts). Marcode's plugin is named marcode, so those disables match nothing and the rule — set to "error" — would have failed the Check job. Repointed to marcode/.

Swept and confirmed correct for Marcode: T3CODE_HOME (only guard tests/comments), t3code.service / com.t3tools.t3code launchd label, WORKTREE_BRANCH_PREFIX ("marcode"; the t3code/... branch strings in server/checkpoint tests are pre-existing arbitrary fixtures, not prefix-derived), t3code: storage keys, T3_BOOT_SERVICE_UNIT, T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR, @t3tools/*, and the t3 package/CLI name — all left upstream-shaped on purpose.

Follow-up commit 0a265857

CI caught one thing the focused local run did not: apps/server/src/persistence/Migrations.test.ts pins the migration registry with slice(-10), so appending the two renumbered upstream migrations pushed id 33 — the id the test is named for — out of the asserted window.

Fixed by anchoring the slice at id 33 via findIndex rather than a fixed tail length, so the assertion keeps covering Marcode's owned migration however many upstream ones land after it. Without that, the pin would have silently stopped testing its own subject on the next sync.

Coupled vendored subtrees

pnpm-workspace.yaml moved, but only Clerk versions; effect stayed at 4.0.0-beta.103 and infra/relay/package.json did not change. No sync:repos run was needed.

Why

Daily upstream sync. Upstream had 59 unmerged commits including a Codex approval-callback recovery fix, a projection-bootstrap replay fix (pingdotgg#7538), the macOS service PATH fix, Grok reliability work, and the Clerk 6.30/0.0.37 bumps.

UI Changes

Two decisions need your eye — I could not drive a browser or simulator for them in this container:

  • Android release launcher icon. Upstream's fix pairs a transparent light mark with a dark plate. Marcode's release previously used the black-on-white universal export as the foreground, which is exactly the double-masking bug upstream fixed. Taking the fix means the release Android launcher is now a light mark on #000000, diverging from Marcode's black-on-white rule for that one surface. Restoring black-on-white needs a Marcode-owned foreground SVG/PNG pair; no rasterizer is available here to generate one. Flagging for your call — the alternative was keeping the double-mask bug or shipping a white mark on a white plate.
  • vp run icons:check could not run: it needs macOS Icon Composer.

Checklist

  • This PR is small and focused — no, it is a 59-commit upstream sync; that is the unit of work
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — no browser/simulator available in this environment
  • I included a video for animation/interaction changes — n/a

CI on 0a265857

All four required checks green: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅. Also green: Test Server 1/2/3, Rust, Mobile Native Changes, claude-review, and the thread-transfer budget report (every metric within its ceiling). Native fingerprint diff sits queued, as it did on the previous head; it is not a required check.

Local verification before pushing (focused, per AGENTS.md — not the full suite)

  • vp test run green on: clientMetadata, sidebarBrandRemoval, mobileBranding, no-mobile-uniwind-theme-escape-hatches, bootService, ServerEnvironment, Migrations, 043_ProjectionThreadLinkedPullRequest, 042_AuthSessionClientConnection, build-desktop-artifact, contracts/environment, contracts/settings, terminal-links, editorLabels, Sidebar.logic, versionSkew, upstream-sync-workflow, serviceLauncher, electron-launcher, generate-uniwind-themes, connection/platform.
  • vp run --filter … typecheck clean for @t3tools/contracts, @t3tools/web, @t3tools/shared, @t3tools/client-runtime, t3 (server), @t3tools/mobile, @t3tools/desktop (only pre-existing Effect style suggestions, no errors).
  • vp fmt --check clean on all 356 changed TS files.
  • vp lint on the 82 changed directories: no errors; only warnings that are pre-existing on main.
  • generate-uniwind-themes.mts --check passes, so the generated theme CSS matches Marcode's tokens.

One thing to review deliberately

apps/server/src/provider/ModelManifest.ts is new from upstream and fetches legacy model classification from https://raw.githubusercontent.com/pingdotgg/t3code/main/apps/server/src/provider/model-manifest.json. I left the URL pointing at upstream — they maintain that data and Marcode benefits from their updates — but it does mean Marcode servers read a file from upstream's repo at runtime. Repointing it at maarco/marcode is a one-line change if you'd rather own it. The in-repo model-manifest.json is the fallback either way.

Left deliberately as a draft: this sync is yours to review and mark ready.

t3dotggand others added 30 commits August 24, 2026 12:42
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>
t3-codeBotand others added 21 commits August 27, 2026 13:28
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>
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>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Recent scheduled nightlies have been delayed or skipped.
Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.
Authored by GPT-5.6 Sol with the Codex harness.
Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.
Co-authored-by: codex <codex@users.noreply.github.com>
Merges 59 upstream commits (f035a0f..018d7f2) into Marcode. Conflict
decisions, path by path:
apps/mobile/app.config.ts
Took upstream's adaptive-launcher-icon fix (pingdotgg#4332): the release variant now
uses the shared transparent foreground instead of the rounded-square universal
export, which Android was masking a second time. The shipped foreground
artwork is a light mark, so the release plate stays dark; every other Marcode
production mark is still black-on-white.
apps/mobile/src/lib/authClientMetadata.ts
Kept the "Marcode Mobile" label, took upstream's tablet/phone deviceType
detection.
apps/mobile/src/components/CompactBrandTitle.tsx
Kept MarcodeMark and the conditional stage badge; took upstream's Uniwind
className styling in place of useThemeColor + inline styles, which the new
no-mobile-uniwind-theme-escape-hatches rule forbids.
apps/mobile/src/components/T3Wordmark.tsx
Kept Marcode's deletion; upstream only restyled it for Uniwind.
apps/mobile/src/features/home/HomeHeader.tsx
Kept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.ts
Upstream deleted this in pingdotgg#8397. Kept it: it pins Marcode returning "" (no
badge) where upstream returns "Alpha", and now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*
Landed upstream's new rule under Marcode's plugin directory and renamed its
test's rule prefix from t3code/ to marcode/ to match the plugin meta name.
vite.config.ts
Enabled the new rule at upstream's "error", kept Marcode's prefixes and the
no-native-title-tooltip "warn" seam.
apps/server/src/cloud/bootService.ts + test
Took upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path)
and kept MARCODE_HOME rather than T3CODE_HOME. Both guard tests now stand
side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.ts
Kept both capability flags: workspaceLayoutMutations and the new
threadPullRequestLinking.
apps/server/src/persistence/Migrations.ts
Marcode ids sit one higher than upstream's because 033 is
ProjectWorkspaceLayout here. Renamed upstream's 042/043 to 043/044 and fixed
the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsx
Kept Marcode's bare Electron drag strip. Upstream's only change in the file
was adding a project-settings case to the sidebar Back button (pingdotgg#8168);
Marcode's FloatingPillNav already shows Back to Workspace on every non-thread
route, so that intent is already covered.
apps/web/src/components/threadSidebarWidth.test.ts
Accepted upstream's prune of the trivial width assertions, but moved the
Marcode brand-removal pin into its own file,
components/sidebar/sidebarBrandRemoval.test.ts, so a future upstream prune
cannot take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsx
Kept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488)
lands in the shared terminal-links.ts, which Marcode's match.kind
classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsx
Kept Marcode's FolderOpenFilled icon, took upstream's move of labels to the
shared editorLabelForPlatform helper.
apps/web/src/components/ChatMarkdown.tsx
Took upstream's editorPreferences/editorLabels/remoteOpen imports and kept
openFileInFloatingEditor. The Marcode fork seam routing agent file links to
the floating editor survives; the right-panel file viewer upstream added in
pingdotgg#8098 is not reintroduced.
apps/web/src/components/ChatView.tsx
Took upstream's hoisted useNewThreadHandler/useThreadActions (needed by the
new settle and pin keyboard shortcuts) and removed the now-duplicate later
declaration. Kept Marcode's slim ChatHeader; dropped upstream's
openProjectPullRequest, which is unreachable here because Marcode's
openThreadPullRequest already falls back to the project repository.
pnpm-lock.yaml
Kept Marcode's xterm entries, then regenerated the lockfile with pnpm from
the merged manifests. Effect and Alchemy versions did not move, so no
vendored subtree sync was needed.
Fork-boundary breaks that merged cleanly and were fixed here:
- apps/web/src/connection/clientMetadata.ts arrived new from upstream with
hardcoded "T3 Code Desktop"/"T3 Code Web" labels and replaced Marcode's
inline metadata builder. Routed both through APP_BASE_NAME and pinned the
label in clientMetadata.test.ts.
- Three upstream oxlint-disable comments referenced the t3code/ rule prefix,
which does not match Marcode's plugin name and would have let
no-global-process-runtime fire in CI. Repointed to marcode/.
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Aug 28, 2026
The registry pin sliced the last 10 entries, so appending upstream's two new
migrations (043/044 after renumbering) pushed migration 33 — the id the test is
named for — out of the asserted window.
Anchor the slice at id 33 instead of a fixed tail length so the assertion keeps
covering Marcode's owned migration however many upstream ones land after it, and
add the two new entries.
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.3 KiB−122 B (−0.9%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB+5 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.4 KiB−127 B (−1.9%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB55.6 KiB+558 B (+1.0%)66.4 KiB
CodexLive turn messages1610−6 (−37.5%)21
ClaudeTotal thread wire13.4 KiB13.3 KiB−156 B (−1.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.6 KiB6.4 KiB−164 B (−2.4%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB56.4 KiB+532 B (+0.9%)66.4 KiB
ClaudeLive turn messages169−7 (−43.8%)21

Baseline: 133f3f7 · PR result: 0a26585 · 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.

@maarcoClaude

Copy link
Copy Markdown
OwnerAuthor

Two status changes since the description was written.

Native fingerprint diff is now cancelled, and it is not this PR's failure. It sat queued for exactly 24h (2026-08-28 15:42:11 → 2026-08-29 15:42:11) and GitHub killed it on the job timeout. Every run of mobile-fingerprint-check.yml on this fork does the same: I checked the last 30 runs and not one has ever completedclaude/gracious-bohr-1dtucn, -rlxi8l, -ie7aa6, -23bj7a, -x80z9c, -23l2b6, back to at least 2026-08-23, all queued-then-cancelled. It is a pre-existing fork-environment condition (the job never starts; the blacksmith-8vcpu-ubuntu-2404 label itself is fine, since Check, Test, and Rust all run on it here), and it is not in requiredPullRequestChecks. I am deliberately not spending the one re-run on it: 30 runs across 6 branches is stronger evidence than a 31st would be, and a re-run would just occupy a runner slot for another 24h. It needs a repo-settings fix, not a change to this PR.

The four required checks remain green on 0a265857: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅.

This PR's upstream coverage is now superseded by #61 (053affbe), opened by today's scheduled run. I verified 018d7f27 is an ancestor of #61's head, so #61 covers everything here.

But #61 branched from main independently rather than building on this branch, so the two are not interchangeable:

So the migration-pin fix in 0a265857 is the one piece of this PR that #61 still needs. Cherry-picking that single commit onto #61 should get it green, at which point #61 is the better merge candidate and this PR can be closed alongside #53, #55, and #56.

I have not pushed to #61 — it is not a PR I opened, and this session was not asked to drive it.


Generated by Claude Code

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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.

16 participants

@maarco@t3dotgg@tris203@flamboh@RakshithBhat03@StiensWout@lnieuwenhuis@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@claude
, '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 018d7f27 - #58

Draft
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn
Draft

chore(upstream): sync marcode through 018d7f27#58
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn

Conversation

@maarco

@maarcomaarco commented Aug 28, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges 59 upstream commits, f035a0f4..018d7f27 (pingdotgg/t3code@018d7f27), into Marcode as one two-parent merge commit (a940ce5c), plus one follow-up commit (0a265857) fixing a Marcode-owned test the merge invalidated. No force push, reset, restore, stash, clean, or wholesale ours/theirs resolution was used; MERGE_HEAD stayed at 018d7f27 for the whole resolution.

Supersedes #53, #55, and #56 — those draft syncs targeted older upstream SHAs (a3a8cbd6, f6f2be32) that are contained in this one. Merging this closes the delta they cover; they can be closed unmerged.

Conflicts resolved (24 paths)

PathDecision
apps/mobile/app.config.tsTook upstream's adaptive-launcher-icon fix (pingdotgg#4332) — release now uses the shared transparent foreground instead of the rounded-square universal export Android was masking twice. See the branding note below.
apps/mobile/src/lib/authClientMetadata.tsKept "Marcode Mobile"; took upstream's tablet/phone deviceType detection.
apps/mobile/src/components/CompactBrandTitle.tsxKept MarcodeMark and the conditional stage badge; took upstream's Uniwind className styling over useThemeColor + inline styles (the new lint rule forbids them).
apps/mobile/src/components/T3Wordmark.tsxKept Marcode's deletion; upstream only restyled it.
apps/mobile/src/features/home/HomeHeader.tsxKept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.tsUpstream deleted it (pingdotgg#8397). Kept — it pins Marcode returning "" (no badge) where upstream returns "Alpha". Now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*Landed upstream's new rule under Marcode's plugin dir; renamed the test's rule prefix t3code/marcode/ to match the plugin meta name.
vite.config.tsEnabled the new rule at upstream's "error"; kept Marcode's prefixes and the no-native-title-tooltip"warn" seam.
apps/server/src/cloud/bootService.ts + testTook upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path); kept MARCODE_HOME, not T3CODE_HOME. Both guard tests now stand side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.tsKept both capability flags: workspaceLayoutMutations and the new threadPullRequestLinking.
apps/server/src/persistence/Migrations.tsMarcode ids sit one higher (033 is ProjectWorkspaceLayout). Renamed upstream's 042/043 → 043/044 and fixed the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsxKept Marcode's bare Electron drag strip. Upstream's only change was a project-settings case for the sidebar Back button (pingdotgg#8168) — Marcode's FloatingPillNav already shows Back to Workspace on every non-thread route, so that intent is covered.
apps/web/src/components/threadSidebarWidth.test.tsAccepted upstream's prune of the trivial width assertions, but moved the Marcode brand-removal pin into its own components/sidebar/sidebarBrandRemoval.test.ts so a future upstream prune can't take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsxKept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488) lands in the shared terminal-links.ts, which Marcode's match.kind classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsxKept Marcode's FolderOpenFilled icon; took upstream's move of labels to the shared editorLabelForPlatform.
apps/web/src/components/ChatMarkdown.tsxTook upstream's editorPreferences/editorLabels/remoteOpen imports; kept openFileInFloatingEditor. The fork seam routing agent file links to the floating editor survives — upstream's right-panel file viewer (pingdotgg#8098) is not reintroduced.
apps/web/src/components/ChatView.tsxTook upstream's hoisted useNewThreadHandler/useThreadActions (needed by the new settle/pin keyboard shortcuts) and removed the duplicate later declaration. Kept Marcode's slim ChatHeader; dropped upstream's openProjectPullRequest, unreachable here because openThreadPullRequest already falls back to the project repository.
pnpm-lock.yamlKept Marcode's xterm entries, then regenerated with pnpm install --lockfile-only from the merged manifests.

Fork-boundary breaks that merged cleanly (no conflict) and were fixed here

These are the dangerous ones — they produce no conflict marker:

  1. apps/web/src/connection/clientMetadata.ts arrived new from upstream with hardcoded "T3 Code Desktop" / "T3 Code Web" labels and replaced Marcode's inline metadata builder in platform.ts. Every client would have reported itself as T3 Code. Routed both labels through APP_BASE_NAME and pinned "Marcode Desktop" in clientMetadata.test.ts.
  2. Three upstream oxlint-disable-next-line t3code/no-global-process-runtime comments (apps/desktop/src/preload.ts, apps/desktop/scripts/verify-preload-bundle.mjs, apps/server/src/process/externalLauncher.test.ts). Marcode's plugin is named marcode, so those disables match nothing and the rule — set to "error" — would have failed the Check job. Repointed to marcode/.

Swept and confirmed correct for Marcode: T3CODE_HOME (only guard tests/comments), t3code.service / com.t3tools.t3code launchd label, WORKTREE_BRANCH_PREFIX ("marcode"; the t3code/... branch strings in server/checkpoint tests are pre-existing arbitrary fixtures, not prefix-derived), t3code: storage keys, T3_BOOT_SERVICE_UNIT, T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR, @t3tools/*, and the t3 package/CLI name — all left upstream-shaped on purpose.

Follow-up commit 0a265857

CI caught one thing the focused local run did not: apps/server/src/persistence/Migrations.test.ts pins the migration registry with slice(-10), so appending the two renumbered upstream migrations pushed id 33 — the id the test is named for — out of the asserted window.

Fixed by anchoring the slice at id 33 via findIndex rather than a fixed tail length, so the assertion keeps covering Marcode's owned migration however many upstream ones land after it. Without that, the pin would have silently stopped testing its own subject on the next sync.

Coupled vendored subtrees

pnpm-workspace.yaml moved, but only Clerk versions; effect stayed at 4.0.0-beta.103 and infra/relay/package.json did not change. No sync:repos run was needed.

Why

Daily upstream sync. Upstream had 59 unmerged commits including a Codex approval-callback recovery fix, a projection-bootstrap replay fix (pingdotgg#7538), the macOS service PATH fix, Grok reliability work, and the Clerk 6.30/0.0.37 bumps.

UI Changes

Two decisions need your eye — I could not drive a browser or simulator for them in this container:

  • Android release launcher icon. Upstream's fix pairs a transparent light mark with a dark plate. Marcode's release previously used the black-on-white universal export as the foreground, which is exactly the double-masking bug upstream fixed. Taking the fix means the release Android launcher is now a light mark on #000000, diverging from Marcode's black-on-white rule for that one surface. Restoring black-on-white needs a Marcode-owned foreground SVG/PNG pair; no rasterizer is available here to generate one. Flagging for your call — the alternative was keeping the double-mask bug or shipping a white mark on a white plate.
  • vp run icons:check could not run: it needs macOS Icon Composer.

Checklist

  • This PR is small and focused — no, it is a 59-commit upstream sync; that is the unit of work
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — no browser/simulator available in this environment
  • I included a video for animation/interaction changes — n/a

CI on 0a265857

All four required checks green: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅. Also green: Test Server 1/2/3, Rust, Mobile Native Changes, claude-review, and the thread-transfer budget report (every metric within its ceiling). Native fingerprint diff sits queued, as it did on the previous head; it is not a required check.

Local verification before pushing (focused, per AGENTS.md — not the full suite)

  • vp test run green on: clientMetadata, sidebarBrandRemoval, mobileBranding, no-mobile-uniwind-theme-escape-hatches, bootService, ServerEnvironment, Migrations, 043_ProjectionThreadLinkedPullRequest, 042_AuthSessionClientConnection, build-desktop-artifact, contracts/environment, contracts/settings, terminal-links, editorLabels, Sidebar.logic, versionSkew, upstream-sync-workflow, serviceLauncher, electron-launcher, generate-uniwind-themes, connection/platform.
  • vp run --filter … typecheck clean for @t3tools/contracts, @t3tools/web, @t3tools/shared, @t3tools/client-runtime, t3 (server), @t3tools/mobile, @t3tools/desktop (only pre-existing Effect style suggestions, no errors).
  • vp fmt --check clean on all 356 changed TS files.
  • vp lint on the 82 changed directories: no errors; only warnings that are pre-existing on main.
  • generate-uniwind-themes.mts --check passes, so the generated theme CSS matches Marcode's tokens.

One thing to review deliberately

apps/server/src/provider/ModelManifest.ts is new from upstream and fetches legacy model classification from https://raw.githubusercontent.com/pingdotgg/t3code/main/apps/server/src/provider/model-manifest.json. I left the URL pointing at upstream — they maintain that data and Marcode benefits from their updates — but it does mean Marcode servers read a file from upstream's repo at runtime. Repointing it at maarco/marcode is a one-line change if you'd rather own it. The in-repo model-manifest.json is the fallback either way.

Left deliberately as a draft: this sync is yours to review and mark ready.

t3dotggand others added 30 commits August 24, 2026 12:42
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>
t3-codeBotand others added 21 commits August 27, 2026 13:28
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>
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>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Recent scheduled nightlies have been delayed or skipped.
Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.
Authored by GPT-5.6 Sol with the Codex harness.
Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.
Co-authored-by: codex <codex@users.noreply.github.com>
Merges 59 upstream commits (f035a0f..018d7f2) into Marcode. Conflict
decisions, path by path:
apps/mobile/app.config.ts
Took upstream's adaptive-launcher-icon fix (pingdotgg#4332): the release variant now
uses the shared transparent foreground instead of the rounded-square universal
export, which Android was masking a second time. The shipped foreground
artwork is a light mark, so the release plate stays dark; every other Marcode
production mark is still black-on-white.
apps/mobile/src/lib/authClientMetadata.ts
Kept the "Marcode Mobile" label, took upstream's tablet/phone deviceType
detection.
apps/mobile/src/components/CompactBrandTitle.tsx
Kept MarcodeMark and the conditional stage badge; took upstream's Uniwind
className styling in place of useThemeColor + inline styles, which the new
no-mobile-uniwind-theme-escape-hatches rule forbids.
apps/mobile/src/components/T3Wordmark.tsx
Kept Marcode's deletion; upstream only restyled it for Uniwind.
apps/mobile/src/features/home/HomeHeader.tsx
Kept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.ts
Upstream deleted this in pingdotgg#8397. Kept it: it pins Marcode returning "" (no
badge) where upstream returns "Alpha", and now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*
Landed upstream's new rule under Marcode's plugin directory and renamed its
test's rule prefix from t3code/ to marcode/ to match the plugin meta name.
vite.config.ts
Enabled the new rule at upstream's "error", kept Marcode's prefixes and the
no-native-title-tooltip "warn" seam.
apps/server/src/cloud/bootService.ts + test
Took upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path)
and kept MARCODE_HOME rather than T3CODE_HOME. Both guard tests now stand
side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.ts
Kept both capability flags: workspaceLayoutMutations and the new
threadPullRequestLinking.
apps/server/src/persistence/Migrations.ts
Marcode ids sit one higher than upstream's because 033 is
ProjectWorkspaceLayout here. Renamed upstream's 042/043 to 043/044 and fixed
the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsx
Kept Marcode's bare Electron drag strip. Upstream's only change in the file
was adding a project-settings case to the sidebar Back button (pingdotgg#8168);
Marcode's FloatingPillNav already shows Back to Workspace on every non-thread
route, so that intent is already covered.
apps/web/src/components/threadSidebarWidth.test.ts
Accepted upstream's prune of the trivial width assertions, but moved the
Marcode brand-removal pin into its own file,
components/sidebar/sidebarBrandRemoval.test.ts, so a future upstream prune
cannot take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsx
Kept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488)
lands in the shared terminal-links.ts, which Marcode's match.kind
classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsx
Kept Marcode's FolderOpenFilled icon, took upstream's move of labels to the
shared editorLabelForPlatform helper.
apps/web/src/components/ChatMarkdown.tsx
Took upstream's editorPreferences/editorLabels/remoteOpen imports and kept
openFileInFloatingEditor. The Marcode fork seam routing agent file links to
the floating editor survives; the right-panel file viewer upstream added in
pingdotgg#8098 is not reintroduced.
apps/web/src/components/ChatView.tsx
Took upstream's hoisted useNewThreadHandler/useThreadActions (needed by the
new settle and pin keyboard shortcuts) and removed the now-duplicate later
declaration. Kept Marcode's slim ChatHeader; dropped upstream's
openProjectPullRequest, which is unreachable here because Marcode's
openThreadPullRequest already falls back to the project repository.
pnpm-lock.yaml
Kept Marcode's xterm entries, then regenerated the lockfile with pnpm from
the merged manifests. Effect and Alchemy versions did not move, so no
vendored subtree sync was needed.
Fork-boundary breaks that merged cleanly and were fixed here:
- apps/web/src/connection/clientMetadata.ts arrived new from upstream with
hardcoded "T3 Code Desktop"/"T3 Code Web" labels and replaced Marcode's
inline metadata builder. Routed both through APP_BASE_NAME and pinned the
label in clientMetadata.test.ts.
- Three upstream oxlint-disable comments referenced the t3code/ rule prefix,
which does not match Marcode's plugin name and would have let
no-global-process-runtime fire in CI. Repointed to marcode/.
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Aug 28, 2026
The registry pin sliced the last 10 entries, so appending upstream's two new
migrations (043/044 after renumbering) pushed migration 33 — the id the test is
named for — out of the asserted window.
Anchor the slice at id 33 instead of a fixed tail length so the assertion keeps
covering Marcode's owned migration however many upstream ones land after it, and
add the two new entries.
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.3 KiB−122 B (−0.9%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB+5 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.4 KiB−127 B (−1.9%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB55.6 KiB+558 B (+1.0%)66.4 KiB
CodexLive turn messages1610−6 (−37.5%)21
ClaudeTotal thread wire13.4 KiB13.3 KiB−156 B (−1.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.6 KiB6.4 KiB−164 B (−2.4%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB56.4 KiB+532 B (+0.9%)66.4 KiB
ClaudeLive turn messages169−7 (−43.8%)21

Baseline: 133f3f7 · PR result: 0a26585 · 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.

@maarcoClaude

Copy link
Copy Markdown
OwnerAuthor

Two status changes since the description was written.

Native fingerprint diff is now cancelled, and it is not this PR's failure. It sat queued for exactly 24h (2026-08-28 15:42:11 → 2026-08-29 15:42:11) and GitHub killed it on the job timeout. Every run of mobile-fingerprint-check.yml on this fork does the same: I checked the last 30 runs and not one has ever completedclaude/gracious-bohr-1dtucn, -rlxi8l, -ie7aa6, -23bj7a, -x80z9c, -23l2b6, back to at least 2026-08-23, all queued-then-cancelled. It is a pre-existing fork-environment condition (the job never starts; the blacksmith-8vcpu-ubuntu-2404 label itself is fine, since Check, Test, and Rust all run on it here), and it is not in requiredPullRequestChecks. I am deliberately not spending the one re-run on it: 30 runs across 6 branches is stronger evidence than a 31st would be, and a re-run would just occupy a runner slot for another 24h. It needs a repo-settings fix, not a change to this PR.

The four required checks remain green on 0a265857: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅.

This PR's upstream coverage is now superseded by #61 (053affbe), opened by today's scheduled run. I verified 018d7f27 is an ancestor of #61's head, so #61 covers everything here.

But #61 branched from main independently rather than building on this branch, so the two are not interchangeable:

So the migration-pin fix in 0a265857 is the one piece of this PR that #61 still needs. Cherry-picking that single commit onto #61 should get it green, at which point #61 is the better merge candidate and this PR can be closed alongside #53, #55, and #56.

I have not pushed to #61 — it is not a PR I opened, and this session was not asked to drive it.


Generated by Claude Code

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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.

16 participants

@maarco@t3dotgg@tris203@flamboh@RakshithBhat03@StiensWout@lnieuwenhuis@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@claude
, '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 018d7f27 - #58

Draft
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn
Draft

chore(upstream): sync marcode through 018d7f27#58
maarco wants to merge 61 commits into
mainfrom
claude/gracious-bohr-1dtucn

Conversation

@maarco

@maarcomaarco commented Aug 28, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges 59 upstream commits, f035a0f4..018d7f27 (pingdotgg/t3code@018d7f27), into Marcode as one two-parent merge commit (a940ce5c), plus one follow-up commit (0a265857) fixing a Marcode-owned test the merge invalidated. No force push, reset, restore, stash, clean, or wholesale ours/theirs resolution was used; MERGE_HEAD stayed at 018d7f27 for the whole resolution.

Supersedes #53, #55, and #56 — those draft syncs targeted older upstream SHAs (a3a8cbd6, f6f2be32) that are contained in this one. Merging this closes the delta they cover; they can be closed unmerged.

Conflicts resolved (24 paths)

PathDecision
apps/mobile/app.config.tsTook upstream's adaptive-launcher-icon fix (pingdotgg#4332) — release now uses the shared transparent foreground instead of the rounded-square universal export Android was masking twice. See the branding note below.
apps/mobile/src/lib/authClientMetadata.tsKept "Marcode Mobile"; took upstream's tablet/phone deviceType detection.
apps/mobile/src/components/CompactBrandTitle.tsxKept MarcodeMark and the conditional stage badge; took upstream's Uniwind className styling over useThemeColor + inline styles (the new lint rule forbids them).
apps/mobile/src/components/T3Wordmark.tsxKept Marcode's deletion; upstream only restyled it.
apps/mobile/src/features/home/HomeHeader.tsxKept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.tsUpstream deleted it (pingdotgg#8397). Kept — it pins Marcode returning "" (no badge) where upstream returns "Alpha". Now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*Landed upstream's new rule under Marcode's plugin dir; renamed the test's rule prefix t3code/marcode/ to match the plugin meta name.
vite.config.tsEnabled the new rule at upstream's "error"; kept Marcode's prefixes and the no-native-title-tooltip"warn" seam.
apps/server/src/cloud/bootService.ts + testTook upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path); kept MARCODE_HOME, not T3CODE_HOME. Both guard tests now stand side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.tsKept both capability flags: workspaceLayoutMutations and the new threadPullRequestLinking.
apps/server/src/persistence/Migrations.tsMarcode ids sit one higher (033 is ProjectWorkspaceLayout). Renamed upstream's 042/043 → 043/044 and fixed the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsxKept Marcode's bare Electron drag strip. Upstream's only change was a project-settings case for the sidebar Back button (pingdotgg#8168) — Marcode's FloatingPillNav already shows Back to Workspace on every non-thread route, so that intent is covered.
apps/web/src/components/threadSidebarWidth.test.tsAccepted upstream's prune of the trivial width assertions, but moved the Marcode brand-removal pin into its own components/sidebar/sidebarBrandRemoval.test.ts so a future upstream prune can't take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsxKept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488) lands in the shared terminal-links.ts, which Marcode's match.kind classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsxKept Marcode's FolderOpenFilled icon; took upstream's move of labels to the shared editorLabelForPlatform.
apps/web/src/components/ChatMarkdown.tsxTook upstream's editorPreferences/editorLabels/remoteOpen imports; kept openFileInFloatingEditor. The fork seam routing agent file links to the floating editor survives — upstream's right-panel file viewer (pingdotgg#8098) is not reintroduced.
apps/web/src/components/ChatView.tsxTook upstream's hoisted useNewThreadHandler/useThreadActions (needed by the new settle/pin keyboard shortcuts) and removed the duplicate later declaration. Kept Marcode's slim ChatHeader; dropped upstream's openProjectPullRequest, unreachable here because openThreadPullRequest already falls back to the project repository.
pnpm-lock.yamlKept Marcode's xterm entries, then regenerated with pnpm install --lockfile-only from the merged manifests.

Fork-boundary breaks that merged cleanly (no conflict) and were fixed here

These are the dangerous ones — they produce no conflict marker:

  1. apps/web/src/connection/clientMetadata.ts arrived new from upstream with hardcoded "T3 Code Desktop" / "T3 Code Web" labels and replaced Marcode's inline metadata builder in platform.ts. Every client would have reported itself as T3 Code. Routed both labels through APP_BASE_NAME and pinned "Marcode Desktop" in clientMetadata.test.ts.
  2. Three upstream oxlint-disable-next-line t3code/no-global-process-runtime comments (apps/desktop/src/preload.ts, apps/desktop/scripts/verify-preload-bundle.mjs, apps/server/src/process/externalLauncher.test.ts). Marcode's plugin is named marcode, so those disables match nothing and the rule — set to "error" — would have failed the Check job. Repointed to marcode/.

Swept and confirmed correct for Marcode: T3CODE_HOME (only guard tests/comments), t3code.service / com.t3tools.t3code launchd label, WORKTREE_BRANCH_PREFIX ("marcode"; the t3code/... branch strings in server/checkpoint tests are pre-existing arbitrary fixtures, not prefix-derived), t3code: storage keys, T3_BOOT_SERVICE_UNIT, T3CODE_DESKTOP_REUSE_RESOURCE_MONITOR, @t3tools/*, and the t3 package/CLI name — all left upstream-shaped on purpose.

Follow-up commit 0a265857

CI caught one thing the focused local run did not: apps/server/src/persistence/Migrations.test.ts pins the migration registry with slice(-10), so appending the two renumbered upstream migrations pushed id 33 — the id the test is named for — out of the asserted window.

Fixed by anchoring the slice at id 33 via findIndex rather than a fixed tail length, so the assertion keeps covering Marcode's owned migration however many upstream ones land after it. Without that, the pin would have silently stopped testing its own subject on the next sync.

Coupled vendored subtrees

pnpm-workspace.yaml moved, but only Clerk versions; effect stayed at 4.0.0-beta.103 and infra/relay/package.json did not change. No sync:repos run was needed.

Why

Daily upstream sync. Upstream had 59 unmerged commits including a Codex approval-callback recovery fix, a projection-bootstrap replay fix (pingdotgg#7538), the macOS service PATH fix, Grok reliability work, and the Clerk 6.30/0.0.37 bumps.

UI Changes

Two decisions need your eye — I could not drive a browser or simulator for them in this container:

  • Android release launcher icon. Upstream's fix pairs a transparent light mark with a dark plate. Marcode's release previously used the black-on-white universal export as the foreground, which is exactly the double-masking bug upstream fixed. Taking the fix means the release Android launcher is now a light mark on #000000, diverging from Marcode's black-on-white rule for that one surface. Restoring black-on-white needs a Marcode-owned foreground SVG/PNG pair; no rasterizer is available here to generate one. Flagging for your call — the alternative was keeping the double-mask bug or shipping a white mark on a white plate.
  • vp run icons:check could not run: it needs macOS Icon Composer.

Checklist

  • This PR is small and focused — no, it is a 59-commit upstream sync; that is the unit of work
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — no browser/simulator available in this environment
  • I included a video for animation/interaction changes — n/a

CI on 0a265857

All four required checks green: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅. Also green: Test Server 1/2/3, Rust, Mobile Native Changes, claude-review, and the thread-transfer budget report (every metric within its ceiling). Native fingerprint diff sits queued, as it did on the previous head; it is not a required check.

Local verification before pushing (focused, per AGENTS.md — not the full suite)

  • vp test run green on: clientMetadata, sidebarBrandRemoval, mobileBranding, no-mobile-uniwind-theme-escape-hatches, bootService, ServerEnvironment, Migrations, 043_ProjectionThreadLinkedPullRequest, 042_AuthSessionClientConnection, build-desktop-artifact, contracts/environment, contracts/settings, terminal-links, editorLabels, Sidebar.logic, versionSkew, upstream-sync-workflow, serviceLauncher, electron-launcher, generate-uniwind-themes, connection/platform.
  • vp run --filter … typecheck clean for @t3tools/contracts, @t3tools/web, @t3tools/shared, @t3tools/client-runtime, t3 (server), @t3tools/mobile, @t3tools/desktop (only pre-existing Effect style suggestions, no errors).
  • vp fmt --check clean on all 356 changed TS files.
  • vp lint on the 82 changed directories: no errors; only warnings that are pre-existing on main.
  • generate-uniwind-themes.mts --check passes, so the generated theme CSS matches Marcode's tokens.

One thing to review deliberately

apps/server/src/provider/ModelManifest.ts is new from upstream and fetches legacy model classification from https://raw.githubusercontent.com/pingdotgg/t3code/main/apps/server/src/provider/model-manifest.json. I left the URL pointing at upstream — they maintain that data and Marcode benefits from their updates — but it does mean Marcode servers read a file from upstream's repo at runtime. Repointing it at maarco/marcode is a one-line change if you'd rather own it. The in-repo model-manifest.json is the fallback either way.

Left deliberately as a draft: this sync is yours to review and mark ready.

t3dotggand others added 30 commits August 24, 2026 12:42
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>
t3-codeBotand others added 21 commits August 27, 2026 13:28
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>
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>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Recent scheduled nightlies have been delayed or skipped.
Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.
Authored by GPT-5.6 Sol with the Codex harness.
Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.
Co-authored-by: codex <codex@users.noreply.github.com>
Merges 59 upstream commits (f035a0f..018d7f2) into Marcode. Conflict
decisions, path by path:
apps/mobile/app.config.ts
Took upstream's adaptive-launcher-icon fix (pingdotgg#4332): the release variant now
uses the shared transparent foreground instead of the rounded-square universal
export, which Android was masking a second time. The shipped foreground
artwork is a light mark, so the release plate stays dark; every other Marcode
production mark is still black-on-white.
apps/mobile/src/lib/authClientMetadata.ts
Kept the "Marcode Mobile" label, took upstream's tablet/phone deviceType
detection.
apps/mobile/src/components/CompactBrandTitle.tsx
Kept MarcodeMark and the conditional stage badge; took upstream's Uniwind
className styling in place of useThemeColor + inline styles, which the new
no-mobile-uniwind-theme-escape-hatches rule forbids.
apps/mobile/src/components/T3Wordmark.tsx
Kept Marcode's deletion; upstream only restyled it for Uniwind.
apps/mobile/src/features/home/HomeHeader.tsx
Kept MarcodeMark.
apps/mobile/src/lib/mobileBranding.test.ts
Upstream deleted this in pingdotgg#8397. Kept it: it pins Marcode returning "" (no
badge) where upstream returns "Alpha", and now says so in a comment.
oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*
Landed upstream's new rule under Marcode's plugin directory and renamed its
test's rule prefix from t3code/ to marcode/ to match the plugin meta name.
vite.config.ts
Enabled the new rule at upstream's "error", kept Marcode's prefixes and the
no-native-title-tooltip "warn" seam.
apps/server/src/cloud/bootService.ts + test
Took upstream's PATH export (pingdotgg#8173, keeps provider CLIs on the service path)
and kept MARCODE_HOME rather than T3CODE_HOME. Both guard tests now stand
side by side.
apps/server/src/environment/ServerEnvironment.ts, packages/contracts/src/environment.ts
Kept both capability flags: workspaceLayoutMutations and the new
threadPullRequestLinking.
apps/server/src/persistence/Migrations.ts
Marcode ids sit one higher than upstream's because 033 is
ProjectWorkspaceLayout here. Renamed upstream's 042/043 to 043/044 and fixed
the new migration test's hardcoded toMigrationInclusive ids.
apps/web/src/components/sidebar/SidebarChrome.tsx
Kept Marcode's bare Electron drag strip. Upstream's only change in the file
was adding a project-settings case to the sidebar Back button (pingdotgg#8168);
Marcode's FloatingPillNav already shows Back to Workspace on every non-thread
route, so that intent is already covered.
apps/web/src/components/threadSidebarWidth.test.ts
Accepted upstream's prune of the trivial width assertions, but moved the
Marcode brand-removal pin into its own file,
components/sidebar/sidebarBrandRemoval.test.ts, so a future upstream prune
cannot take it out silently.
apps/web/src/components/ThreadTerminalDrawer.tsx
Kept Marcode's xterm link provider. Upstream's isTerminalUrl fix (pingdotgg#7488)
lands in the shared terminal-links.ts, which Marcode's match.kind
classification already goes through.
apps/web/src/components/chat/OpenInPicker.tsx
Kept Marcode's FolderOpenFilled icon, took upstream's move of labels to the
shared editorLabelForPlatform helper.
apps/web/src/components/ChatMarkdown.tsx
Took upstream's editorPreferences/editorLabels/remoteOpen imports and kept
openFileInFloatingEditor. The Marcode fork seam routing agent file links to
the floating editor survives; the right-panel file viewer upstream added in
pingdotgg#8098 is not reintroduced.
apps/web/src/components/ChatView.tsx
Took upstream's hoisted useNewThreadHandler/useThreadActions (needed by the
new settle and pin keyboard shortcuts) and removed the now-duplicate later
declaration. Kept Marcode's slim ChatHeader; dropped upstream's
openProjectPullRequest, which is unreachable here because Marcode's
openThreadPullRequest already falls back to the project repository.
pnpm-lock.yaml
Kept Marcode's xterm entries, then regenerated the lockfile with pnpm from
the merged manifests. Effect and Alchemy versions did not move, so no
vendored subtree sync was needed.
Fork-boundary breaks that merged cleanly and were fixed here:
- apps/web/src/connection/clientMetadata.ts arrived new from upstream with
hardcoded "T3 Code Desktop"/"T3 Code Web" labels and replaced Marcode's
inline metadata builder. Routed both through APP_BASE_NAME and pinned the
label in clientMetadata.test.ts.
- Three upstream oxlint-disable comments referenced the t3code/ rule prefix,
which does not match Marcode's plugin name and would have let
no-global-process-runtime fire in CI. Repointed to marcode/.
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Aug 28, 2026
The registry pin sliced the last 10 entries, so appending upstream's two new
migrations (043/044 after renumbering) pushed migration 33 — the id the test is
named for — out of the asserted window.
Anchor the slice at id 33 instead of a fixed tail length so the assertion keeps
covering Marcode's owned migration however many upstream ones land after it, and
add the two new entries.
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.4 KiB13.3 KiB−122 B (−0.9%)15.1 KiB
CodexThread snapshot wire6.9 KiB6.9 KiB+5 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.5 KiB6.4 KiB−127 B (−1.9%)7.8 KiB
CodexLive turn WebSocket decoded55.0 KiB55.6 KiB+558 B (+1.0%)66.4 KiB
CodexLive turn messages1610−6 (−37.5%)21
ClaudeTotal thread wire13.4 KiB13.3 KiB−156 B (−1.1%)15.1 KiB
ClaudeThread snapshot wire6.9 KiB6.9 KiB+8 B (+0.1%)7.3 KiB
ClaudeLive turn WebSocket wire6.6 KiB6.4 KiB−164 B (−2.4%)7.8 KiB
ClaudeLive turn WebSocket decoded55.8 KiB56.4 KiB+532 B (+0.9%)66.4 KiB
ClaudeLive turn messages169−7 (−43.8%)21

Baseline: 133f3f7 · PR result: 0a26585 · 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.

@maarcoClaude

Copy link
Copy Markdown
OwnerAuthor

Two status changes since the description was written.

Native fingerprint diff is now cancelled, and it is not this PR's failure. It sat queued for exactly 24h (2026-08-28 15:42:11 → 2026-08-29 15:42:11) and GitHub killed it on the job timeout. Every run of mobile-fingerprint-check.yml on this fork does the same: I checked the last 30 runs and not one has ever completedclaude/gracious-bohr-1dtucn, -rlxi8l, -ie7aa6, -23bj7a, -x80z9c, -23l2b6, back to at least 2026-08-23, all queued-then-cancelled. It is a pre-existing fork-environment condition (the job never starts; the blacksmith-8vcpu-ubuntu-2404 label itself is fine, since Check, Test, and Rust all run on it here), and it is not in requiredPullRequestChecks. I am deliberately not spending the one re-run on it: 30 runs across 6 branches is stronger evidence than a 31st would be, and a re-run would just occupy a runner slot for another 24h. It needs a repo-settings fix, not a change to this PR.

The four required checks remain green on 0a265857: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅.

This PR's upstream coverage is now superseded by #61 (053affbe), opened by today's scheduled run. I verified 018d7f27 is an ancestor of #61's head, so #61 covers everything here.

But #61 branched from main independently rather than building on this branch, so the two are not interchangeable:

So the migration-pin fix in 0a265857 is the one piece of this PR that #61 still needs. Cherry-picking that single commit onto #61 should get it green, at which point #61 is the better merge candidate and this PR can be closed alongside #53, #55, and #56.

I have not pushed to #61 — it is not a PR I opened, and this session was not asked to drive it.


Generated by Claude Code

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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.

16 participants

@maarco@t3dotgg@tris203@flamboh@RakshithBhat03@StiensWout@lnieuwenhuis@MohtashamMurshid@SunkenInTime@luckyPipewrench@krutftw@colonelpanic8@gsimone@juliusmarminge@ipanasenko@claude