Skip to content

chore(upstream): sync marcode through d29c56a5 - #82

Draft
maarco wants to merge 151 commits into
mainfrom
claude/gracious-bohr-pjil82
Draft

chore(upstream): sync marcode through d29c56a5#82
maarco wants to merge 151 commits into
mainfrom
claude/gracious-bohr-pjil82

Conversation

@maarco

@maarco maarco commented Sep 10, 2026

Copy link
Copy Markdown
Owner

What Changed

Merges pingdotgg/t3code@d29c56a5c404cb0f58d3b2ac41762fa0d0ac28d4 into Marcode.

This supersedes the open sync drafts #76, #78 and #80. Those three stacked up because none was merged; this branch is built on #80's head (claude/gracious-bohr-a02fbt, upstream through 6c583620) and adds the remaining 17 upstream commits, so it contains everything all three carried. Merging this one closes the whole backlog — the other three can be closed unmerged.

Upstream delta on top of 6c583620 (17 commits), headlined by:

Conflict decisions (10 files)

Path Decision
packages/contracts/src/environment.ts Additive. Keep Marcode's workspaceLayoutMutations, take upstream's threadPullRequests / pullRequestStackActions and its reworded threadPullRequestLinking doc.
apps/server/src/environment/ServerEnvironment.ts + .test.ts Same: all three capabilities advertised and asserted.
apps/server/src/persistence/Migrations.ts Upstream's 050_ProjectionThreadPullRequests lands as Marcode 051, one past the Marcode-offset tail, so no applied id moves. Migration and its test renamed; the test's toMigrationInclusive bounds shifted by the same offset.
apps/server/src/provider/RuntimeInstructions.ts Keep Marcode's product name, take upstream's PULL_REQUEST_LINKING_INSTRUCTIONS. The t3-code MCP server id inside it stays upstream-shaped on purpose.
apps/server/src/provider/Layers/ClaudeAdapter.test.ts Take upstream's refactor to buildRuntimeInstructions() over Marcode's inlined literal — it now derives the Marcode branding automatically.
apps/web/src/rightPanelStore.ts Keep Marcode's RIGHT_PANEL_KINDS export; take upstream's pull-requests singleton, leave files out.
apps/web/src/marcodeRightPanelPolicy.ts Adopt upstream's new thread-linked pull-requests surface (see below).
apps/web/src/components/RightPanelTabs.tsx Resolved to Marcode's side, which delegates launcher/add-menu chrome to marcodeRightPanelChrome.tsx; upstream's "Linked pull requests" entries ported into that module rather than re-inlining their copy.
apps/web/src/components/ChatView.tsx Take upstream's addPullRequestsSurface; drop openFileSurface — files open in the floating Code editor here, not the right panel.
apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx Take upstream's Tooltip/MenuTrigger nesting, keep Marcode's side="bottom".

The one judgement call worth a look

Upstream's new pull-requests right-panel surface (the thread's own linked PRs, stacks included) reuses the same kind id as the repo-wide PR list panel Marcode retired in right-panel storage v11. I adopted it rather than retiring it again, because:

  • it is different content — the thread's linked PRs, not the repo's list, which Marcode still shows as a full page;
  • the auto-merge already gave RightPanelTabsProps upstream's onAddPullRequests / pullRequestsAvailable, and ChatView already renders ThreadPullRequestsPanel for that kind, so retiring it would have left the feature half-wired;
  • Marcode's retired-kind sweep (file/files/plan) is untouched and still pinned.

If you'd rather keep it out, that's a one-line revert in marcodeRightPanelPolicy.ts plus the ChatView opener.

Fork-boundary breaks that merged with no conflict

These are the silent ones — caught by typecheck, not by git:

  1. Five upstream test fixtures build OrchestrationProjectShell literals without workspaceLayoutVersion / workspaceLayout, which Marcode requires (linkCreatedPullRequest, mcp/toolkits/pullRequests/handlers, PullRequestSyncReactor, decider.pullRequests, projector).
  2. Marcode's own decider.workspaceLayout.test.ts thread fixture predates upstream's now-required pullRequests field.
  3. The link_pull_request MCP tool description named "T3 Code" where Marcode uses its own product identity.

Identity sweep over the whole merged tree came back clean: T3CODE_HOME appears only in Marcode comments and the tests documenting the divergence, marcode.service is the unit, WORKTREE_BRANCH_PREFIX is referenced through the constant, and the right-panel storage key is Marcode's. T3_BOOT_SERVICE_UNIT, T3_SERVICE_LAUNCHER_CONTEXT, com.t3tools.t3code.service, @t3tools/*, the t3 CLI name and the t3-code MCP id are all left upstream-shaped deliberately.

Pins added

  • Migrations.test.ts offset pin extended to cover ids 50 and 51. It had stopped at 49, so the last two syncs added migrations the pin never saw — the "fails here loudly" comment was no longer true.
  • New rightPanelStore.test.ts case pinning the adopted pull-requests surface, so a future sync cannot drop the kind while ChatView still renders ThreadPullRequestsPanel for it.

Why

Daily upstream sync. Nothing here is a Marcode feature change beyond the surface decision called out above; the goal is to take upstream's correctness, protocol and dependency work while keeping Marcode's floating editor, unified workspace, branding and migration offsets intact.

No coupled-subtree work needed: neither pnpm-workspace.yaml nor infra/relay/package.json moved in this delta.

UI Changes

Not captured. This run is headless — no browser or simulator verification was possible, so the web/mobile surfaces upstream touched (the new linked-PR panel, PR stack navigation, image zoom/pan, Android glass fixes) have not been driven live. That verification is still owed before this leaves draft, per the runbook's step 5.

Checklist

  • This PR is small and focused — no, it is an upstream sync; scope is upstream's delta.
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — not possible in this environment, see above.
  • I included a video for animation/interaction changes — same.

Verification run

  • typecheck: web, server (t3), contracts, shared, client-runtime, desktop, mobile — all clean.
  • Focused tests, all passing: migrations + new 051_ProjectionThreadPullRequests, ServerEnvironment, RuntimeInstructions, ClaudeAdapter, decider.workspaceLayout, decider.pullRequests, projector, PullRequestSyncReactor, linkCreatedPullRequest, mcp/toolkits/pullRequests/handlers, rightPanelStore, RightPanelTabs, contracts/orchestration, plus the fork-identity suites (forkIdentity, git, bootService, serviceLauncher, upstream-sync-workflow).
  • vp fmt --check on the 23 changed files: clean. vp lint on the changed dirs: 0 errors, pre-existing warnings only.
  • Not run: the full workspace suite, and the live client verification noted above. CI owns the former.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LSPeSBiGm2QzZWPdsL2zuy


Generated by Claude Code

t3dotgg and others added 30 commits September 6, 2026 19:04
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…dotgg#10463)

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…ccount (pingdotgg#10462)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
… second one (pingdotgg#10440)

Co-authored-by: Claude Code <noreply@anthropic.com>
…ed (pingdotgg#10435)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…dotgg#10019)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…diff fallback (pingdotgg#9828)

Co-authored-by: James <jamescollard2005@gmail.com>
… update depth errors (pingdotgg#7138)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
claude and others added 21 commits September 9, 2026 15:44
Merges 130 upstream commits (merge base 52b2bf7) into Marcode. 41 paths
conflicted; each was resolved by combining both intents, and the merge also
carried several fork-boundary breaks that produced no conflict at all.

Conflict decisions

- Migrations.ts: kept Marcode's `deployedMigrationEntries` split and frozen
  1-49 history; took upstream's un-export of `makeMigrationLoader`.
- marcode-sqlite-state.ts, codexLaunchArgs.ts, publicConfig.ts: kept Marcode's
  command/env names (MARCODE_*), took upstream's knip un-exports.
- WorkspaceFileSystem.ts, contracts/project.ts: kept Marcode's added error
  classes, adopted Effect rc.112's `Schema.TaggedError` rename.
- contracts/settings.ts + settings.test.ts: additive on both sides — kept
  Marcode's `unifiedWorkspaceSidebar` and upstream's snapShot settings.
- AgentSessionScanner.test.ts: took upstream's two new exclusion tests, kept
  Marcode's `.marcode` worktree-path test.
- electron-launcher.mjs: kept Marcode identity, took upstream LAUNCHER_VERSION
  19 and their un-exports.
- electron-launcher.test.mjs: upstream split env out into a sourced script, so
  Marcode's MARCODE_PORT/MARCODE_HOME assertions moved onto
  `makeDevelopmentEnvironmentScript`, where they now have coverage again.
- Desktop Linux identity: adopted upstream's shared
  `resolveLinuxDesktopEntryName` helper but not their reverse-DNS rename —
  the entry filename is what existing installs' xdg-mime associations point
  at. Swept the merged-clean fixtures that had silently kept
  `com.t3tools.T3Code*.desktop`, and aligned `linuxWmClass` across both
  producers.
- ElectronProtocol.ts, DesktopWindow.test.ts, git.test.ts: kept Marcode
  schemes/fixtures, took upstream's un-exports, new mocks and ssh:// case.
- devcontainer: took upstream's rewrite (base image, on-create/update-content,
  forwarded ports) with Marcode's name, MARCODE_HOME and `.marcode` state.
- mobile app.config.ts: kept Marcode's black-on-white release mark, took
  upstream's new adaptive-background and splash keys.
- mobile SettingsRouteScreen, MobileClientsUserProfilePage.logic: took
  upstream's Android-aware copy and platform logic under Marcode branding.
- ConnectOnboardingDialog, WelcomeWizard: took upstream's shared wizard
  components (WizardPopup wraps Marcode's DialogPopup, so overlay behavior is
  preserved) and re-applied Marcode's product copy.
- rightPanelStore.ts: kept Marcode's `marcodeRightPanelPolicy` ownership of the
  storage key/version and panel-key predicate; took upstream's new
  `PULL_REQUESTS_PANEL_REF`, which other merged files already consume.
- SettingsSidebarNav.tsx: took upstream's removal of the router-state read that
  caused the page-switch shift; kept Marcode's back control.
- ThreadTerminalDrawer.tsx: kept Marcode's own link provider, and ported
  upstream's pingdotgg#10060 browser-override plus its toast error handling into it.
  `forceBrowser` is required, so the merge would not have typechecked without
  it.
- ChatView.tsx: took upstream's `activeProject` record prop; kept Marcode's
  FloatingPillNav imports.
- useTheme.ts/.test.ts, index.css: kept Marcode's dark-onboarding seam and
  Mentiko chrome; combined upstream's additive rules.
- DMG backgrounds: kept Marcode artwork, pinned by build-desktop-artifact.test.
- 95.astro: kept Marcode's removal, pinned by retiredRoutes.test.
- pnpm-lock.yaml: regenerated with pnpm rather than hand-resolved.

Fork-boundary breaks that merged clean

- Effect beta.103 -> rc.112 removes `Schema.TaggedErrorClass`; migrated the
  Marcode-only files (upstream-sync tooling) that kept the old name.
- `resolveLinuxDesktopEntryName`/`linuxWmClass` had silently reverted to
  upstream identity; added a test pinning that DesktopEnvironment and
  DesktopEarlyElectronStartup agree, so the next sync fails loudly instead.
- Upstream's new CaptureShortcutConfig test disabled a `t3code/` oxlint rule;
  Marcode's plugin namespace is `marcode`, so the directive was dead and CI
  would have failed on it.
- Sidebar.tsx and CommandPalette.logic.test.ts still used the removed
  `projectCwdByKey` map and lacked Marcode's required `workspaceLayoutVersion`.
- Upstream's widened knip server-export scope (pingdotgg#10282) newly covers Marcode
  files: un-exported four module-private helpers and covered
  `defineMarcodeMigration` with a test of its reserved-id guard.

Verification: focused tests (23 files, 683 passing), typecheck across
contracts/shared/scripts/server/client-runtime/desktop/web/mobile, knip:check,
vp fmt --check and vp lint over the changed scope.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017aktzmLA2BYiyzBZUSikhq
Upstream's cross-platform window capture (pingdotgg#8103) arrived in this sync
carrying its own desktop identity, and none of it conflicted.

The functional break: the GNOME extension only answers D-Bus callers whose
well-known name is in its `CLIENT_NAMES` allowlist, and the Linux client
requests `${linuxDesktopEntryName without .desktop}.SnapShot` — `marcode`
here, not `com.t3tools.T3Code`. Every Marcode capture request would have
been refused with "Only T3 Code may request a snapshot", at runtime, on
Linux only. `gnomeCaptureClientNames.test.ts` now pins the allowlist against
the entry names Marcode ships and against both halves of the derivation;
restoring upstream's list fails it.

The collisions: a Marcode install wrote the GNOME extension under upstream's
uuid `snap-shot@t3.codes`, staged its KDE/Hyprland capture helpers and
extension backups under a shared `~/.local/share/t3code/`, and installed a
`com.t3tools.T3Code.KdeCapture.desktop` entry. Each of those would overwrite
or be overwritten by a real T3 Code install on the same machine.

Also renames the extension's own user-visible strings (GNOME Extensions app
listing, authorization and activation errors) and the macOS
`NSScreenCaptureUsageDescription`, which the OS renders in a permission
prompt beside CFBundleDisplayName "Marcode".

Deliberately left upstream-shaped: the `t3-kde-snap-shot` /
`t3-hyprland-snap-shot` binary names (built from upstream's crates), the
`X-T3Code-Capture-Helper` marker key, and the "T3 Code" strings in desktop
runtime messages — main already carries 16 such files, and AGENTS.md rules
out mass-replacing internal upstream-shaped identifiers.

Verified: capture, GNOME setup, KDE, Hyprland, shortcut-config, desktop
environment and build-artifact suites (185 passing), desktop and scripts
typecheck, knip:check, fmt and lint.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017aktzmLA2BYiyzBZUSikhq
Both CI failures on the merge commit were in infra/relay, the one package
I did not typecheck locally. Upstream's Android agent notifications (pingdotgg#10416)
brought a new FCM path whose identity is upstream's, and none of it
conflicted.

Check / `vpr typecheck` — five `effect(deterministicKeys)` errors. The
diagnostic derives a Context.Service key from the package name, and Marcode's
relay package is `marcode-relay`, so upstream's `t3code-relay/...` keys are
rejected outright:

  src/WebCrypto.ts
  src/agentActivity/FcmAssertionSigner.ts
  src/agentActivity/FcmClient.ts
  src/agentActivity/FcmDeliveries.ts
  src/agentActivity/FcmDeliveryQueueSender.ts

Every pre-existing service in the package already spells its key
`marcode-relay/...`; these five now match.

Test — `ApnsDeliveries.test.ts` "sends signed jobs to the device's APNs
environment and bundle topic" asserted `com.t3tools.marcode.preview…` against
a fixture that fed it `com.t3tools.t3code.preview`. Marcode had renamed the
bundle-id fixtures to its real mobile identity; upstream's new blocks
reintroduced theirs, and the two halves met in one assertion. Renamed the
four new occurrences plus the two in the new FCM test files, matching
apps/mobile/app.config.ts (`com.t3tools.marcode{,.dev,.preview}`).

Verified the way CI runs it, rather than by focused scope again: `vp check`
0 errors, `vpr typecheck` clean across all 14 packages, and the full relay
suite (30 files, 286 tests) green.

Two failures remain locally that CI does not have, both confirmed
environmental rather than assumed — CI's own run passes both:
- scripts/dev-runner.test.ts: this container has no IPv6, so `::1` binds
  return EAFNOSUPPORT and every probed port reads as occupied.
- scripts/update-release-package-versions.test.ts: the case chmods a file to
  0400 and expects the write to fail; this container runs as uid 0, where
  that write succeeds.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017aktzmLA2BYiyzBZUSikhq
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Brings in 17 upstream commits on top of the 6c58362 sync, headlined by
thread-linked pull requests (pingdotgg#10839), PR stack navigation (pingdotgg#10875), and
PR search (pingdotgg#10870).

Conflict decisions:

- packages/contracts/src/environment.ts, apps/server/src/environment/
  ServerEnvironment{.ts,.test.ts}: additive. Keep Marcode's
  workspaceLayoutMutations capability and take upstream's new
  threadPullRequests / pullRequestStackActions, plus upstream's reworded
  threadPullRequestLinking doc comment.

- apps/server/src/persistence/Migrations.ts: upstream's
  050_ProjectionThreadPullRequests lands as Marcode 051, one past the
  Marcode-offset tail, so no applied id moves. Renamed the migration and
  its test, shifted the test's toMigrationInclusive bounds by the same
  offset, and extended the offset pin in Migrations.test.ts to cover 50
  and 51 -- it had stopped at 49, so the last two syncs added migrations
  the pin did not see.

- apps/server/src/provider/RuntimeInstructions.ts: keep Marcode's product
  name and take upstream's PULL_REQUEST_LINKING_INSTRUCTIONS block. The
  `t3-code` MCP server id inside it stays upstream-shaped.

- apps/server/src/provider/Layers/ClaudeAdapter.test.ts: take upstream's
  refactor to buildRuntimeInstructions() instead of Marcode's inlined
  literal, which now derives the Marcode branding automatically.

- apps/web/src/rightPanelStore.ts, marcodeRightPanelPolicy.ts: adopt
  upstream's new thread-linked `pull-requests` surface (distinct from the
  repo-wide list panel Marcode retired in v11, which is a full page here).
  Upstream's `files` singleton stays out: the floating Code editor remains
  Marcode's only file-editing surface.

- apps/web/src/components/RightPanelTabs.tsx: resolved to Marcode's side,
  which delegates the launcher and add-menu chrome to
  marcodeRightPanelChrome.tsx. Ported upstream's "Linked pull requests"
  entries into that module instead of re-inlining their copy.

- apps/web/src/components/ChatView.tsx: take upstream's
  addPullRequestsSurface; drop openFileSurface, which opens files in the
  right panel upstream and in the floating editor here.

- apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx: take
  upstream's Tooltip/MenuTrigger nesting, keep Marcode's side="bottom".

Fork-boundary breaks that merged without a conflict:

- Five upstream test fixtures built OrchestrationProjectShell literals
  without workspaceLayoutVersion/workspaceLayout, which Marcode requires.
- Marcode's decider.workspaceLayout.test.ts thread fixture predates
  upstream's now-required `pullRequests` field.
- The link_pull_request MCP tool description named T3 Code where Marcode
  uses its own product identity.

Added a focused test pinning the adopted `pull-requests` surface so a
future sync cannot silently drop it while ChatView still renders
ThreadPullRequestsPanel for that kind.

Verified: typecheck for web, server, contracts, shared, client-runtime,
desktop, mobile; focused tests for migrations, environment capabilities,
provider runtime instructions, the PR orchestration paths, right-panel
state, and the fork-identity suites; fmt --check and lint on the changed
scope (0 errors, pre-existing warnings only).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LSPeSBiGm2QzZWPdsL2zuy
@github-actions github-actions Bot added the vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. label Sep 10, 2026
@maarco maarco added upstream-sync Upstream T3 Code sync and removed vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Sep 10, 2026 — with Claude

maarco commented Sep 10, 2026

Copy link
Copy Markdown
Owner Author

claude-review is red, and it is not this PR's

Standing down on this one, with the evidence.

What's failing: the claude-review job in Claude Code Review (run 34495728410), exit 1 after ~28s, before it reviews anything.

Why it isn't this diff: .github/workflows/claude-code-review.yml:37 passes claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}, and the job log shows the credential reaching the action empty (ANTHROPIC_API_KEY: with no value). It has failed identically on all ten most recent runs of that workflow — runs 90 through 99 — across five different branches, including run 90 on chore/upstream-52b2bf77a941, which is part of main today. No commit in this merge touches the workflow, the action, or anything it reads.

The fix, and why it isn't here: setting the CLAUDE_CODE_OAUTH_TOKEN repository secret. That's a repo-settings change, not a code change, so there is nothing to port into this branch — the job will keep failing on every PR until the secret exists.

On the one re-run: not spending it. The re-run allowance is for confirming a suspected not-ours failure; an empty secret visible in the log with ten identical reproductions across other branches is already stronger evidence than one more run would give, and the outcome cannot change while the secret is unset.

claude-review is not in requiredPullRequestChecks in .github/upstream-sync.yml (Check, Test, Mobile Native Static Analysis, Release Smoke), so it does not gate this PR.

Required checks on fc92084

  • Release Smoke — ✅ success
  • Check — in progress
  • Test — in progress
  • Mobile Native Static Analysis — in progress

Base main (a9836f5) is green on all four, so there's no base-branch failure in play. I'm watching these to a terminal result and will fix anything real that lands.


Generated by Claude Code

@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.4 KiB 13.5 KiB +10 B (+0.1%) 15.1 KiB
Codex Thread snapshot wire 7.0 KiB 7.0 KiB +10 B (+0.1%) 7.3 KiB
Codex Live turn WebSocket wire 6.4 KiB 6.4 KiB 0 B (0.0%) 7.8 KiB
Codex Live turn WebSocket decoded 56.2 KiB 56.2 KiB 0 B (0.0%) 66.4 KiB
Codex Live turn messages 8 8 0 (0.0%) 21
Claude Total thread wire 13.4 KiB 13.6 KiB +190 B (+1.4%) 15.1 KiB
Claude Thread snapshot wire 7.0 KiB 7.1 KiB +11 B (+0.2%) 7.3 KiB
Claude Live turn WebSocket wire 6.4 KiB 6.6 KiB +179 B (+2.7%) 7.8 KiB
Claude Live turn WebSocket decoded 57.0 KiB 57.9 KiB +928 B (+1.6%) 66.4 KiB
Claude Live turn messages 8 10 +2 (+25.0%) 21

Baseline: a9836f5 · PR result: fc92084 · 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: 113.9 KiB
  • Claude decoded thread snapshot: 114.6 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

maarco commented Sep 10, 2026

Copy link
Copy Markdown
Owner Author

All four required checks are now green on fc92084: Check ✅ · Test ✅ · Mobile Native Static Analysis ✅ · Release Smoke ✅. No review threads open, nothing still running.

claude-review remains red for the repo-secret reason above — not required, not this PR's, nothing to fix here.

Two things stand between this and merge, both yours:

  1. The live client verification the runbook asks for on UI hotspots — this run was headless, so the surfaces upstream touched haven't been driven. That's why it's still a draft.
  2. The judgement call on adopting upstream's thread-linked pull-requests surface, described in the PR body.

Leaving it in draft; I won't mark it ready or merge.


Generated by Claude Code

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

Labels

upstream-sync Upstream T3 Code sync

Projects

None yet

Development

Successfully merging this pull request may close these issues.