chore(upstream): sync marcode through cd096b9ad5a4 - #37
Conversation
Co-authored-by: t3-code[bot] <219304759+t3-code[bot]@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com> Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>
…otgg#4844) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com>
…isting, update branch, reactions, in-place editing, smarter diffs (pingdotgg#6039) Co-authored-by: Julius Marminge <julius0216@outlook.com>
…ingdotgg#6330) Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
…6393) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tgg#6423) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
…ngdotgg#6495) Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: t3-code[bot] <236186684+t3-code[bot]@users.noreply.github.com> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
…ingdotgg#6520) Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>
…gdotgg#5989) Co-authored-by: Julius Marminge <julius0216@outlook.com> Co-authored-by: codex <codex@users.noreply.github.com>
…7081) Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: maria <maria@kuuro.net>
pingdotgg#7132) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#6392) Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
…ingdotgg#7082) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…g#7083) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
163 upstream commits (merge base b73232b). 47 conflicted paths resolved by hand; every hunk combines upstream's intent with Marcode's, and no file was taken wholesale from either side. Conflict decisions ------------------ Retired surfaces (floating editor owns file editing; no right-panel file surface) - apps/web/src/components/files/File{Browser,Preview}Panel.tsx: accepted upstream's edits as deletions; Marcode retired both surfaces. - ChatMarkdown.tsx: kept upstream's workspace-index lookup for bare filename references (pingdotgg#6297) but retargeted it from useRightPanelStore.openFile to openFileInFloatingEditor. Upstream's plumbing (onOpenInPanel) is kept so the seam stays narrow; the store method does not exist on Marcode. - diffFileActions.ts: took upstream's resolveDiffPathForWorkspace (nested-project fix pingdotgg#6174) and fed its rebased path to the floating editor. diffFileActions.test.ts and RightPanelTabs.test.tsx retargeted off the right-panel store / dropped the pendingSurfaceIds, onCopyFilePath, onAddFiles, filesAvailable props Marcode removed. - ChatView.tsx: dropped activeFileSurface; took upstream's surface-keyed handlePullRequestTabStatusChange (pingdotgg#6490) and the workspace file-drop feature (pingdotgg#6636) on top of Marcode's hero background. - RightPanelTabs.tsx: threaded upstream's desktopByTabId (browser-tab favicons, pingdotgg#5644) but not `theme`, which only tints PierreEntryIcon for the retired file surface. Shell and navigation (FloatingPillNav owns brand/nav/settings) - AppSidebarLayout.tsx, sidebar/SidebarChrome.tsx: kept Marcode's no-trigger / no-brand shape; upstream's SidebarBrand + footer actions stay out. The removal is pinned by threadSidebarWidth.test.ts, whose upstream wordmark assertion was dropped in favour of Marcode's existing "brand stays out of the sidebar header" test. - chat/ChatHeader.tsx: kept Marcode's title-only header (no thread action menu or inline rename) and added upstream's remote-open imports. - ChatView.tsx titlebar controls: took upstream's shared-inset fix (pingdotgg#6592). Their refactor replaced the .workspace-titlebar-controls utility with inline positioning plus a data-workspace-titlebar-controls attribute, and the old utility is gone from index.css, so the class could not be kept. - ChatView.tsx composer inset: .chat-composer-horizontal-inset was removed by upstream's global-styling refactor (pingdotgg#6381); their inline safe-area classes are the same 0.75rem/1.25rem pair, with Marcode's hero centering kept on top. - PullRequestCodeTab.tsx: chat-composer-glass -> surface-glass for the same reason. Design system (index.css) - Adopted upstream's Tailwind v4 restructure: @variant dark nesting inside :root, top-level @Utility blocks, and @layer base before @layer components. Marcode's --workspace-titlebar-content-left, Mentiko monochrome .stage-blueprint, topbar and scroll-fade utilities, floating chrome, ultrathink and composer-chip rules all move into the new structure unchanged. - Kept Marcode's Mentiko near-black dark palette over upstream's restored palette (pingdotgg#6663): Marcode's token set is a strict superset there, so no upstream token is lost. Upstream's zinc [data-app-sidebar] overrides stay out, as the existing comment already records. - Took upstream's new theme-id stage-art aliases, which the tokens their @layer base adds depend on. Terminal (Marcode keeps xterm for its search addon; upstream runs Ghostty) - ThreadTerminalDrawer.tsx: kept the xterm surface and ported upstream's right-click paste flow (pingdotgg#5240) and Ctrl+C copy behaviour (pingdotgg#5638) onto it: their pure helpers taken verbatim, pasteFromClipboard reimplemented against terminal.paste with the supersede check made explicit, and the context menu bound to a DOM contextmenu listener because xterm has no onContextMenu option. shouldHandleTerminalExit now backs the previously inline exit condition. Skipped terminalSelectionLineRange, which reads Ghostty's selection shape. Added focused tests for the ported helpers. Product identity (Marcode for user-visible copy, upstream-shaped internals) - ConnectionsSettings.tsx: kept "Marcode Connect" and took upstream's window.desktopBridge guard (pingdotgg#5068) so the web app no longer offers the toggle. - clerk/MobileClientsUserProfilePage.tsx: adopted upstream's ClerkUserProfilePage / Row / RefreshButton refactor, keeping Marcode wording. - _chat.pull-requests.tsx: "Update your Marcode servers ..." keeps upstream's all-server phrasing with Marcode's name. - BitbucketSourceControlProvider.ts: MARCODE_BITBUCKET_* env names plus upstream's added "user read" scope (pingdotgg#6291). - desktopUpdate.logic.ts: followed upstream in deleting the Windows install warning and the platform parameter (pingdotgg#7208) - it was upstream's own feature, and all three call sites merged without it - while keeping Marcode's product name. - CodexSessionRuntime.test.ts: upstream's codexDefaultModeDeveloperInstructions(true) call with Marcode's /Marcode/ branding assertion. - electron-launcher.mjs: Marcode bundle ids and schemes, upstream's LAUNCHER_VERSION bump and assets/<brand> icon sources, and the now-unused resources/icon.icns path dropped with upstream's deletion of that file. Upstream test cleanups that were pinning Marcode behavior - infra/relay/scripts/deploy.test.ts and scripts/mobile-showcase.test.ts: kept the blocks pingdotgg#6267 removed. They are the only assertions pinning the MARCODE_ relay env keys and the marcode:// deep-link scheme; both producers are still exported. Their imports were restored and a comment explains why they stay. - threadSettled.ts: composed upstream's autoSettleOnMerge switch (pingdotgg#5880) with Marcode's warm-window rule - upstream decides whether the change-request state settles at all, Marcode then gates it on an hour of idleness. Upstream's new test asserted a close settles a still-warm thread, which contradicts Marcode's two existing warm-window tests, so it now proves the switch is merge-only against an idle shell and warm-hold against a recent one. Additive - packages/shared/package.json: kept ./fractional-rank, added ./themePalettes and ./themePreview. commandInvariants.test.ts, OpenInPicker.tsx, PullRequestTimelineTab.tsx, build-desktop-artifact.ts: both sides' imports kept. - oxlint-plugin-marcode: upstream's no-native-title-tooltip rule registered under the marcode plugin namespace in vite.config.ts and its test harness id. - AGENTS.md / README.md / docs/internals/scripts.md: kept Marcode's structure and ported the genuinely new upstream content (PR-babysitting rule, Windows Vite+ install, DMG channel-chrome notes). Fork-boundary breaks that merged cleanly and produced no conflict - .agents/skills/test-t3-mobile/scripts/pair-client.sh (new upstream file): read T3CODE_PORT, defaulted to the t3code-dev scheme and targeted com.t3tools.t3code.dev. Repointed at MARCODE_PORT, marcode-dev and com.t3tools.marcode.dev, and the stale t3code-dev references elsewhere in that skill aligned with app.config.ts. - apps/desktop/src/wsl/DesktopWslServerTree.test.ts (new upstream test): seeded T3CODE_HOME / T3CODE_MODE, which DesktopConfig ignores; now MARCODE_*. - scripts/build-desktop-artifact.test.ts (new upstream assertion): expected the DMG title "T3 Code (Alpha) 1.2.3 Installer"; Marcode's build produces "Marcode 1.2.3 Installer". The neighbouring Linux protocol assertion deliberately keeps the upstream-shaped t3code schemes that OAuth deep links rely on. - clerk/T3ConnectUserProfilePage.tsx (new upstream page): user-visible copy rebranded to Marcode Connect; the component and file names stay T3Connect*. - desktopUpdate.logic.test.ts (rewritten upstream test): asserted the exact "T3 Code" confirmation string. - .github/workflows/release.yml: upstream's new publish_aur job would publish the t3code-bin and t3code-nightly-bin AUR packages from Marcode's repository, and needs an AUR secret Marcode has no reason to hold. The job and packaging/aur are carried unchanged but gated behind a PUBLISH_AUR repository variable so a Marcode release neither pushes to upstream's AUR repositories nor fails on a missing secret. Adopting upstream's no-native-title-tooltip rule as an error meant migrating the 25 native title attributes in Marcode-owned surfaces (git-panel, file-tree, floating-code-pill, tab-bar, stash-selector, FloatingTerminalShell, branch-selector, editor-pane, GitActionsControl, OpenInPicker, Sidebar, DraftHeroHeadline) to Tooltip/TooltipTrigger/TooltipPopup. Menu rows that are disabled when unavailable drop the attribute instead: a disabled button does not reliably fire the hover, and the row already renders its label beside an aria-label. Coupled vendored subtrees: neither pnpm-workspace.yaml nor infra/relay/package.json changed, so no .repos/ sync is required. pnpm-lock.yaml was regenerated with pnpm rather than hand-merged.
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. |
Upstream added an `isPublicFaviconHost` guard to `faviconUrlForOrigin`, so it no longer sends private, loopback, or reserved-TLD hostnames to Google's s2 favicon endpoint. That guard is a privacy fix and is kept. Marcode's unified workspace tree resolves URL shortcut icons through the same helper, and its capability-flag test asserted a favicon for a `http://localhost:3000` shortcut — exactly the case upstream now refuses. Repointed that assertion at a public host and added a test pinning the new behavior, since a leaked hostname is invisible in the UI: the sidebar renders its globe fallback either way.
|
All four required checks are green on The one real CI failure, and what it was
Upstream added an Kept upstream's guard (it is a privacy fix), repointed the assertion at a public host, and added a test pinning the new behaviour for both a loopback and an intranet host. That one needs asserting because the leak is invisible in the UI — the sidebar renders its globe fallback either way. I had missed it because my focused run covered
|
Merges
pingdotgg/t3code@cd096b9ad5a4156ffeab85de617cbb219057007f(2026-08-17) intomain. 163 upstream commits, merge baseb73232bdd31e. 693 files changed.This supersedes the four stacked draft syncs — #29 (
9e201941), #31 (184d8ef3), #33 (ad117235), #35 (bab4b6f0) — all of which are ancestors of this SHA. It also resolves the blocked-sync issue #36. Merging this one and closing the other four is the intended outcome.47 conflicted paths were resolved by hand. No file was taken wholesale from either side, and no
reset/restore/checkout --ours|--theirs/stash/clean/ force push was used.MERGE_HEADstayed atcd096b9ad5a4for the whole resolution.Hotspot decisions, by owner
editor-runtime — the floating editor is the only file-editing surface
components/files/File{Browser,Preview}Panel.tsx— accepted upstream's edits as deletions; Marcode retired both surfaces.ChatMarkdown.tsx— kept upstream's fix: a bare filename reference now resolves through the workspace index instead of assuming the workspace root (fix(web): open the file a bare filename reference names pingdotgg/t3code#6297). Retargeted fromuseRightPanelStore.openFile(which does not exist on Marcode) toopenFileInFloatingEditor. Upstream'sonOpenInPanelprop shape is kept so the seam stays one line wide.diffFileActions.ts— kept upstream's fix:resolveDiffPathForWorkspacerebases a repository-relative diff path onto the workspace root so diffs in nested projects open the right file (fix(web): open diff files from nested projects pingdotgg/t3code#6174). Its result feeds the floating editor. Note the file could not compile without it — the merged fallback already referencedworkspaceFilePath.RightPanelTabs.tsx— threaded upstream'sdesktopByTabId(captured browser-tab favicons, feat(desktop): add favicons to the Browser panel pingdotgg/t3code#5644) but nottheme, which only tintsPierreEntryIconfor the retiredfilesurface.web-navigation / web-shell — FloatingPillNav owns brand, nav and settings
AppSidebarLayout.tsx,sidebar/SidebarChrome.tsx— kept Marcode's no-trigger / no-brand shape. Upstream'sSidebarBrand,T3Wordmarkand footer actions stay out; taking their block would also have referenced symbols this file does not import.threadSidebarWidth.test.ts— kept Marcode's "brand stays out of the sidebar header" removal pin and dropped upstream's opposing wordmark assertion.chat/ChatHeader.tsx— kept the title-only header (no thread action menu, no inline rename; thread actions already live on the sidebar row's context menu) and added upstream's remote-open imports.ChatView.tsxtitlebar controls — took upstream's shared-inset fix (fix(web): align every titlebar control cluster on one shared inset pingdotgg/t3code#6592). Their refactor deleted the.workspace-titlebar-controlsutility in favour of inline positioning plus adata-workspace-titlebar-controlsattribute, and that utility is gone from the mergedindex.css, so Marcode's class could not be kept.ChatView.tsxcomposer inset —.chat-composer-horizontal-insetwas removed by upstream's global-styling refactor (refactor(web): simplify global styling pingdotgg/t3code#6381). Their inline classes are the same 0.75rem / 1.25rem safe-area pair; Marcode's hero centering is kept on top.design-system —
apps/web/src/index.cssAdopted upstream's Tailwind v4 restructure —
@variant darknested inside:root, top-level@utilityblocks,@layer baseahead of@layer components— and moved every Marcode rule into the new structure unchanged (--workspace-titlebar-content-left, Mentiko monochrome.stage-blueprint, topbar and scroll-fade utilities, floating chrome, ultrathink, composer chips).[data-app-sidebar]overrides stay out, as the existing in-file comment already records.--stage-art-celeste-*/--stage-night-glow-*tokens their@layer baseintroduces are unset for the built-in themes without them.Terminal — Marcode keeps xterm for its search addon; upstream now runs Ghostty
ThreadTerminalDrawer.tsxwas the hardest file: upstream's version of it drivesGhosttyTerminalSurface, Marcode's drives xterm, and parts of upstream's new code had already merged cleanly into Marcode's effect (leavingselectionActionMenuOpenRefundefined andopenSelectionMenuRequestIdRefdeclared but unused).Kept the xterm surface and ported upstream's two behaviour fixes onto it:
Their pure helpers (
terminalContextMenuItems,terminalSelectionMenuItems,shouldClearTerminalSelectionAction,shouldHandleTerminalExit) are taken verbatim;shouldHandleTerminalExitnow backs what was an inline condition.pasteFromClipboardis reimplemented againstterminal.pastewith the supersede check made explicit, since xterm has nopasteFromClipboard(read, isCurrent)hook, and the context menu binds a DOMcontextmenulistener because xterm has noonContextMenuoption. SkippedterminalSelectionLineRange, which reads Ghostty's selection-position shape.Added focused tests for the ported helpers so the next sync fails loudly instead of reverting them.
product-identity / release-branding
ConnectionsSettings.tsx— kept "Marcode Connect" and took upstream'swindow.desktopBridgeguard (fix(web): hide T3 Connect toggle in web app settings pingdotgg/t3code#5068), so the web app no longer offers a desktop-only toggle.clerk/MobileClientsUserProfilePage.tsx— adopted upstream'sClerkUserProfilePage/Row/RefreshButtonextraction, keeping Marcode wording. The surrounding merged code had already moved to the new closing tags, so their refactor was the only coherent resolution._chat.pull-requests.tsx— "Update your Marcode servers…" keeps upstream's all-server phrasing (feat(web): pull request surfaces — filters & qualifiers, all-server listing, update branch, reactions, in-place editing, smarter diffs pingdotgg/t3code#6039) with Marcode's name.BitbucketSourceControlProvider.ts—MARCODE_BITBUCKET_*names plus upstream's added "user read" scope (docs: mention Bitbucket user read scope needed by auth probe pingdotgg/t3code#6291).desktopUpdate.logic.ts— followed upstream in deleting the Windows install warning and theplatformparameter (fix(web): align Windows update confirmation copy pingdotgg/t3code#7208). That warning was upstream's own feature that Marcode had only rebranded, and all three call sites merged without the argument, so keeping it would have left dead code behind a compile error.CodexSessionRuntime.test.ts— upstream'scodexDefaultModeDeveloperInstructions(true)call with Marcode's/Marcode/branding assertion.electron-launcher.mjs— Marcode bundle ids and schemes, upstream'sLAUNCHER_VERSIONbump andassets/<brand>icon sources; the now-unusedresources/icon.icnspath dropped alongside upstream's deletion of that file. Marcode'sassets/already carries its own artwork under upstream-shaped filenames, so their new lookup works unchanged.Upstream test cleanups that were pinning Marcode behavior
infra/relay/scripts/deploy.test.ts,scripts/mobile-showcase.test.ts— kept the blocks test: remove redundant and stale tests pingdotgg/t3code#6267 deleted as "redundant". They are the only assertions pinning theMARCODE_-prefixed relay env keys and themarcode://production deep-link scheme, and both producers are still exported. Imports restored, and a comment explains why they stay.threadSettled.ts— a genuine behavioural collision. Composed upstream'sautoSettleOnMergeswitch (feat: allow disabling auto-settle on merge pingdotgg/t3code#5880) with Marcode's warm window: upstream decides whether the change-request state settles at all, Marcode then gates it on an hour of idleness. Upstream's new test asserted that a close settles a still-warm thread, contradicting Marcode's two existing warm-window tests, so it now proves the switch is merge-only (against an idle shell) and warm-hold (against a recent one).Breaks that merged cleanly and produced no conflict
These are the dangerous ones and the reason a green auto-merge would have been wrong:
.agents/skills/test-t3-mobile/scripts/pair-client.sh(new upstream file)T3CODE_PORT, defaults to thet3code-devscheme, targetscom.t3tools.t3code.devMARCODE_PORT,marcode-dev,com.t3tools.marcode.dev; also aligned the stalet3code-devreferences elsewhere in that skill withapp.config.tsapps/desktop/src/wsl/DesktopWslServerTree.test.ts(new upstream test)T3CODE_HOME/T3CODE_MODE, whichDesktopConfigignores → state dir resolves away from the temp dirMARCODE_HOME/MARCODE_MODEscripts/build-desktop-artifact.test.ts(new upstream assertion)T3 Code (Alpha) 1.2.3 InstallerMarcode 1.2.3 Installer. The neighbouring Linux protocol assertion deliberately keeps the upstream-shapedt3codeschemes that OAuth deep links depend onclerk/T3ConnectUserProfilePage.tsx(new upstream page)T3Connect*desktopUpdate.logic.test.ts(rewritten upstream test)T3 Codeconfirmation string.github/workflows/release.ymlpublish_aurjob would publish thet3code-bin/t3code-nightly-binAUR packages from Marcode's repo, and needs anAUR_SSH_PRIVATE_KEYMarcode has no reason to holdpackaging/aurand the reusable workflow are carried unchanged but the job is gated behind aPUBLISH_AURrepository variable, so a release neither pushes to upstream's AUR repositories nor fails on a missing secret👉 The AUR one is a policy call, not a mechanical fix — flagging it explicitly. Default is off. If Marcode should never publish Arch packages, deleting
packaging/aurandpublish-aur.ymloutright is cleaner; if it should publish its own, the packages need renaming first. I noted the current state in the README.The renamed-identity sweep (
T3CODE_HOME,t3code.service,WORKTREE_BRANCH_PREFIX,t3code:*storage keys,~/.t3paths, boot-service naming) turned up no other regressions.WORKTREE_BRANCH_PREFIXis still referenced symbolically everywhere, so the previous sync's fix held. Compatibility identifiers left deliberately upstream-shaped:@t3tools/*, thet3package/CLI name,t3code:*storage keys,t3code/t3code-devdesktop protocol schemes,T3_BOOT_SERVICE_UNIT,T3_SERVICE_LAUNCHER_CONTEXT, and the mobile app's "T3 Code" display name.New lint rule required migrating Marcode's own call sites
Upstream added
no-native-title-tooltipand registered it as an error (pingdotgg#7209). Upstream migrated their call sites in the same commit; Marcode has 25 of its own that upstream never had. Rather than weaken the rule, all 25 are migrated toTooltip/TooltipTrigger/TooltipPopup:git-panel(8),file-tree(5),floating-code-pill(4 — one is a sharedSidebarIconhelper that covers ten call sites),tab-bar(3),GitActionsControl(3),stash-selector(2), plusFloatingTerminalShell,branch-selector,editor-pane,OpenInPicker,SidebarandDraftHeroHeadline.Two judgement calls there:
OpenInPicker,GitActionsControl). A disabled button does not reliably fire the hover that would show it, and each row already renders its label as visible text beside anaria-label. The one thing lost is the "no working directory yet" / action-disabled explanation on hover — say the word if you want it back as a popover footer.branch-selector's current-branch dot wasaria-hiddenwith atitle, so the hint was never reachable by assistive tech; it is now purely decorative.tooltip.tsxkeeps Marcode'sFLOATING_SURFACE_Z.portalOverlayTooltipinline style instead of upstream'sz-[140]— Marcode already encodes exactly that "tooltips above dropdowns" ordering (pingdotgg#6241), applied inline so it outranks any strayz-*class.Verification
Focused, per the repo's rules — no repo-wide suite.
@t3tools/web,@t3tools/client-runtime,@t3tools/shared,@t3tools/contracts,t3(server),@t3tools/desktop,@t3tools/scripts.vp fmt --checkclean on all 658 changed files.apps/web/src,apps/server/src,apps/desktop/src,packages,scripts,oxlint-plugin-marcode,infra.Three test failures are pre-existing and environmental, not merge-caused:
packages/shared/src/Net.test.ts > findAvailablePort returns preferred when it is free— proven by running the same file from a disposable detached worktree at1af3478a, where it fails identically. The merge's only change toNet.tsis an additivehasListenerOnHost;findAvailablePortand its test are untouched.scripts/update-release-package-versions.test.ts > preserves manifest write context…—chmod 0o400then expects the write to fail, but this container runs as uid 0. The documented root exemption. File untouched by the merge..github/scripts/thread-transfer-report.test.cjs— "no test suite found" under this runner invocation. File untouched by the merge.Separately, five suites could not load at first because
@aliimam/icons@1.1.3declaresmain: dist/index.cjsand its published tarball ships no such file — a pre-existing defect in a Marcode-only dependency, at the identical version in both lockfiles. I added a local-only CJS shim insidenode_modules(not committed) so those suites could actually run; they pass. Worth fixing separately — it will bite anyone whose bundler resolvesmain.pnpm-lock.yamlwas regenerated withpnpm install --lockfile-only, not hand-merged. Neitherpnpm-workspace.yamlnorinfra/relay/package.jsonchanged, so no.repos/vendored-subtree sync is required.Not verified
index.cssrestructure and 25 tooltip migrations across the floating editor, the review checklist's runtime pass at 390px and 820px is the main outstanding gate — along withvp run icons:check, sinceapps/desktop/resources/**andassets/**are in the diff.Intentionally left as a draft, and not marked ready.
Generated by Claude Code