chore(upstream): sync marcode through 018d7f27 - #58
Conversation
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
…gdotgg#8144) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ingdotgg#8189) Co-authored-by: Claude Fable 5 <noreply@anthropic.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>
pingdotgg#8227) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…pingdotgg#7538) Co-authored-by: Theo Browne <me@t3.gg>
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>
…ngdotgg#8395) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.
…gdotgg#8235) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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/.
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.
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
|
Two status changes since the description was written.
The four required checks remain green on This PR's upstream coverage is now superseded by #61 ( But #61 branched from
So the migration-pin fix in 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 |
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_HEADstayed at018d7f27for 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)
apps/mobile/app.config.tsapps/mobile/src/lib/authClientMetadata.ts"Marcode Mobile"; took upstream's tablet/phonedeviceTypedetection.apps/mobile/src/components/CompactBrandTitle.tsxMarcodeMarkand the conditional stage badge; took upstream's UniwindclassNamestyling overuseThemeColor+ inline styles (the new lint rule forbids them).apps/mobile/src/components/T3Wordmark.tsxapps/mobile/src/features/home/HomeHeader.tsxMarcodeMark.apps/mobile/src/lib/mobileBranding.test.ts""(no badge) where upstream returns"Alpha". Now says so in a comment.oxlint-plugin-marcode/rules/no-mobile-uniwind-theme-escape-hatches.*t3code/→marcode/to match the plugin meta name.vite.config.ts"error"; kept Marcode's prefixes and theno-native-title-tooltip"warn"seam.apps/server/src/cloud/bootService.ts+ testPATHexport (pingdotgg#8173, keeps provider CLIs on the service path); keptMARCODE_HOME, notT3CODE_HOME. Both guard tests now stand side by side.apps/server/src/environment/ServerEnvironment.ts,packages/contracts/src/environment.tsworkspaceLayoutMutationsand the newthreadPullRequestLinking.apps/server/src/persistence/Migrations.tsProjectWorkspaceLayout). Renamed upstream's 042/043 → 043/044 and fixed the new migration test's hardcodedtoMigrationInclusiveids.apps/web/src/components/sidebar/SidebarChrome.tsxFloatingPillNavalready shows Back to Workspace on every non-thread route, so that intent is covered.apps/web/src/components/threadSidebarWidth.test.tscomponents/sidebar/sidebarBrandRemoval.test.tsso a future upstream prune can't take it out silently.apps/web/src/components/ThreadTerminalDrawer.tsxisTerminalUrlfix (pingdotgg#7488) lands in the sharedterminal-links.ts, which Marcode'smatch.kindclassification already goes through.apps/web/src/components/chat/OpenInPicker.tsxFolderOpenFilledicon; took upstream's move of labels to the sharededitorLabelForPlatform.apps/web/src/components/ChatMarkdown.tsxeditorPreferences/editorLabels/remoteOpenimports; keptopenFileInFloatingEditor. 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.tsxuseNewThreadHandler/useThreadActions(needed by the new settle/pin keyboard shortcuts) and removed the duplicate later declaration. Kept Marcode's slimChatHeader; dropped upstream'sopenProjectPullRequest, unreachable here becauseopenThreadPullRequestalready falls back to the project repository.pnpm-lock.yamlpnpm install --lockfile-onlyfrom 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:
apps/web/src/connection/clientMetadata.tsarrived new from upstream with hardcoded"T3 Code Desktop"/"T3 Code Web"labels and replaced Marcode's inline metadata builder inplatform.ts. Every client would have reported itself as T3 Code. Routed both labels throughAPP_BASE_NAMEand pinned"Marcode Desktop"inclientMetadata.test.ts.oxlint-disable-next-line t3code/no-global-process-runtimecomments (apps/desktop/src/preload.ts,apps/desktop/scripts/verify-preload-bundle.mjs,apps/server/src/process/externalLauncher.test.ts). Marcode's plugin is namedmarcode, so those disables match nothing and the rule — set to"error"— would have failed theCheckjob. Repointed tomarcode/.Swept and confirmed correct for Marcode:
T3CODE_HOME(only guard tests/comments),t3code.service/com.t3tools.t3codelaunchd label,WORKTREE_BRANCH_PREFIX("marcode"; thet3code/...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 thet3package/CLI name — all left upstream-shaped on purpose.Follow-up commit
0a265857CI caught one thing the focused local run did not:
apps/server/src/persistence/Migrations.test.tspins the migration registry withslice(-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
findIndexrather 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.yamlmoved, but only Clerk versions;effectstayed at4.0.0-beta.103andinfra/relay/package.jsondid not change. Nosync:reposrun 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
PATHfix, 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:
#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:checkcould not run: it needs macOS Icon Composer.Checklist
CI on
0a265857All 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 diffsits 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 rungreen 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 … typecheckclean 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 --checkclean on all 356 changed TS files.vp linton the 82 changed directories: no errors; only warnings that are pre-existing onmain.generate-uniwind-themes.mts --checkpasses, so the generated theme CSS matches Marcode's tokens.One thing to review deliberately
apps/server/src/provider/ModelManifest.tsis new from upstream and fetches legacy model classification fromhttps://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 atmaarco/marcodeis a one-line change if you'd rather own it. The in-repomodel-manifest.jsonis the fallback either way.Left deliberately as a draft: this sync is yours to review and mark ready.