fix(web,desktop,mobile): QA sweep — naming, titlebar, nav, tooltips, terminal - #26
Merged
Conversation
…terminal One commit rather than several: the pre-commit hook re-stages the whole working tree, so splitting these by concern was not achievable without disabling it. Branding — "(Alpha)" dropped from the product name across desktop, web and mobile. An empty stage label now renders the bare name; mobile shows the stage as a separate badge, so there it hides the badge instead. Renaming the bundle moves Electron's userData directory, so legacyUserDataDirName becomes a list with "Marcode (Alpha)" alongside "T3 Code (Alpha)", oldest first. Candidates are probed concurrently — probing sequentially added enough filesystem latency for Electron's ready event to beat protocol.registerSchemesAsPrivileged, crashing the packaged app on launch. Mocked filesystems make sequential and concurrent probes indistinguishable, which is why the suite could not see it. Also collapses a duplicate stage-label branch in mobile's BrandMark that labelled nightly builds "Preview" while the shared helper called the same build "Nightly". Titlebar — settings and usage rendered their breadcrumb under the macOS traffic lights. Two causes: the inset class keys off a `data-sidebar-state` ancestor, and Marcode mounts no sidebar on those routes; and --workspace-titlebar-content-left was declared only on the sidebar wrapper, so it would not have resolved even if the selector matched. The variable moves to :root (`.wco` also lands there, so its override still feeds the calc) and sidebarless surfaces get an unconditional inset. Navigation — removes the /settings/beta entry, dead since upstream deleted that page when sidebar v2 became the default. Moves Pull Requests from Settings into the home category: it is a destination, not a preference, and getActiveCategory already resolved the route there, so the wrong pill highlighted. Usage stays under Settings. The pill could also run past the window edge — `no-scrollbar` was referenced in two places and defined nowhere, leaving a raw scrollbar visible, and the width cap was a flat max-w-[100vw] with no margin. The cap is now derived from the pill's own dock offset and scale, and the same unguarded overflow on the vertical dock axis is fixed alongside. Tooltips — 14 icon-only controls across the pill nav, the pull-request surfaces and the usage page had no hover description. Includes PullRequestReviewerPicker, where the disabled state carried a tooltip and the enabled one did not. Open-in picker — the popover used Base UI's default closeDelay of 0, so the pointer could not cross the trigger gap before it dismissed. Now uses the delay/closeDelay pair every sibling pill already uses. Rows gained the oversized watermark treatment from PillNavCard, via a token colour so it holds in both themes. Terminal — xterm.js was imported without its stylesheet, anywhere. The rule hiding `.xterm-char-measure-element` therefore never applied, and xterm's char-width scratchpad rendered its 32-repeat probe strings as visible text above the first prompt. That is the reported "333...MMM at terminal startup" garbage: never terminal data, which is why the PTY, sanitiser, history files and websocket frames were all clean. Separately, trimBufferToBytes was UTF-8-safe but ANSI-blind and could cut mid-sequence; it now cuts only at escape-sequence boundaries, found by scanning forward from a known-safe anchor. Typography — 10 text classes across the sidebar, chat, settings and clerk surfaces reconciled to Marcode's scale. Four trace to upstream commits that merged cleanly and were never reconciled; the rest are Marcode's own drift. Deliberately untouched: the unified workspace tree's mono register, the jump-hint badge tier, and the shadcn responsive `text-base sm:text-sm` convention. Also adds .marcode to .gitignore — the dev runner defaults worktree-local state there and only upstream's `.t3` was listed, leaving it one `git add -A` from being committed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EwikZhkf3NAa9KQkULRSre
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. |
maarco
added a commit
that referenced
this pull request
Aug 13, 2026
Brings the QA sweep (PR #26) and the sidebar thread de-duplication (PR #27) under this sync so it can land on a main that already has them. One conflict, in SidebarUpdatePill's release-notes heading. Both sides had edited the same class list from a shared base of `text-muted-foreground … font-semibold`: upstream promoted the colour to `text-foreground`, Marcode had dropped the weight to `font-medium` for the fork's type scale. Orthogonal edits, so both are kept. Verified after resolving: repo-wide typecheck clean across all 15 packages, and every suite green — web 2451, server 2465, desktop 447, client-runtime 612, mobile 657. The sync also adds four dependencies (jszip, culori, @noble/hashes, jsonc-parser) that infra/relay's new openVsxThemes/themePalette modules import; `pnpm install` is required after pulling this or that package fails to typecheck. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EwikZhkf3NAa9KQkULRSre
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
QA pass over the running desktop app. One commit rather than several: the pre-commit hook re-stages the whole working tree, so splitting by concern was not achievable without disabling it.
Branding
(Alpha)dropped from the product name across desktop, web and mobile. Renaming the bundle moves Electron's userData directory, solegacyUserDataDirNamebecomes a list (T3 Code (Alpha),Marcode (Alpha)) probed concurrently — probing sequentially added enough filesystem latency for Electron'sreadyevent to beatprotocol.registerSchemesAsPrivileged, crashing the packaged app on launch. Mocked filesystems make sequential and concurrent probes indistinguishable, which is why the suite could not see it.Titlebar
Settings and usage rendered their breadcrumb under the macOS traffic lights. Two causes: the inset class keys off a
data-sidebar-stateancestor and Marcode mounts no sidebar there; and--workspace-titlebar-content-leftwas declared only on the sidebar wrapper. Variable moves to:root, sidebarless surfaces get an unconditional inset.Navigation
/settings/betaentry (upstream deleted that page with sidebar v2).getActiveCategoryalready resolved the route there, so the wrong pill highlighted. Usage stays under Settings.no-scrollbarwas referenced twice and defined nowhere, and the cap was a flatmax-w-[100vw]. Cap now derives from the pill's own dock offset and scale, on both axes.Tooltips
14 icon-only controls across the pill nav, pull-request surfaces and usage page had no hover description.
Open-in picker
Popover used Base UI's default
closeDelayof 0, so the pointer could not cross the trigger gap. Rows gained the watermark treatment fromPillNavCard.Terminal
xterm.js was imported without its stylesheet, anywhere. The rule hiding
.xterm-char-measure-elementnever applied, so xterm's char-width scratchpad rendered its 32-repeat probe strings as visible text above the first prompt — the reported333...MMMgarbage. Never terminal data, which is why the PTY, sanitiser, history files and websocket frames were all clean. Separately,trimBufferToByteswas UTF-8-safe but ANSI-blind and could cut mid-sequence; now cuts only at escape-sequence boundaries.Typography
10 text classes reconciled to Marcode's scale. Four trace to upstream commits that merged cleanly and were never reconciled.
Also adds
.marcodeto.gitignore— only upstream's.t3was listed.🤖 Generated with Claude Code
https://claude.ai/code/session_01EwikZhkf3NAa9KQkULRSre