chore(upstream): sync marcode through 1a003e383ac6 - #19

Merged
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h
Aug 9, 2026
Merged

chore(upstream): sync marcode through 1a003e383ac6#19
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h

Conversation

@maarco

@maarcomaarco commented Aug 9, 2026

Copy link
Copy Markdown
Owner

What Changed

Daily upstream sync. Merges pingdotgg/t3code@1a003e383ac6b10258b8100c2617d938c4f06c69 into main with git merge --no-ff.

Two upstream commits:

SHASubject
963ebf5bci: label-gated hosted-web preview deploys (pingdotgg#5465)
1a003e38Add cross-platform mobile usage dashboard (pingdotgg#5743)

18 files: 890 insertions, 6 deletions. apps/web/src/usage/{usageFormat,usageMerge,usageMerge.test}.ts move to packages/shared/src/ so web and mobile share them; a new apps/mobile/src/features/usage/ screen consumes them; .github/workflows/web-preview.yml is new.

Why

Conflicts: none. The merge applied cleanly with zero conflicted paths — no --ours/--theirs, no reset, restore, stash, clean, or force push was used at any point. Because a clean merge is not automatically a safe merge, the sync was audited for fork-boundary breaks that produce no conflict marker.

Fork-boundary audit

CheckResult
apps/web/src/usage/**packages/shared/src/** rename left dangling importersNo. Every importer resolves to @t3tools/shared/usageMerge / @t3tools/shared/usageFormat; no stale apps/web/src/usage reference anywhere in the tree, including docs and skills.
Marcode customizations lost in the moved filesNo. Byte-diffing Marcode's df91c6c4:apps/web/src/usage/* against HEAD:packages/shared/src/* shows only upstream's own additions (one @effect-diagnostics pragma, one .ts import specifier). Marcode had no local edits in those files.
Marcode mobile branding preserved in merged hotspot filesYes. SettingsRouteScreen.tsx keeps "Marcode Connect", "Marcode Account", and "Marcode works locally without signing in"; Stack.tsx keeps "Set up Marcode Connect". Upstream's new SettingsUsage route and settings row merged in alongside them.
New upstream mobile files carry unbranded "T3" user-visible copyNo. apps/mobile/src/features/usage/** and apps/mobile/src/state/usage.ts contain no product-name strings.
Upstream identity Marcode renames (T3CODE_HOME, t3code.service, ~/.t3, t3code:* storage keys, boot-service naming) introduced by the mergeNone. The merged content reads no env vars, no storage keys, and no URLs. Tree-wide re-check confirms MARCODE_HOME (no T3CODE_HOME exists), marcode.service as the unit file, and WORKTREE_BRANCH_PREFIX = "marcode".
Compatibility identifiers kept upstream-shapedYes, deliberately: T3_BOOT_SERVICE_UNIT, T3_SERVICE_LAUNCHER_CONTEXT, @t3tools/* package names, and the t3 CLI name (which web-preview.yml references as t3 pair --tailscale).
Design tokens the new mobile screen depends onfont-t3-medium / font-t3-bold exist in apps/mobile/global.css; IconChartBar and the chart.bar.xaxis SF-symbol mapping were added by the same upstream commit.
Upstream deleted or rewrote a test pinning Marcode behaviorNo. The only test change is usageMerge.test.ts moving with its module; no replacement pin was needed.
Coupled vendored subtrees (pnpm-workspace.yaml.repos/effect-smol, infra/relay/package.json.repos/alchemy-effect)Neither source moved, so no sync:repos companion change is required.

Hotspot decisions

  • apps/mobile/** (owner: mobile) — combined, not chosen. Upstream's usage dashboard is taken in full; Marcode's branding strings in SettingsRouteScreen.tsx and Stack.tsx are retained on top.
  • packages/shared/package.json — combined. Upstream's two new subpath exports sit alongside Marcode's ./fractional-rank export. Stays barrel-free per AGENTS.md.
  • No other hotspot path in .github/upstream-sync.yml was touched: nothing in the unified workspace tree, floating editor, sidebar, right panel, branding, provider runtime, or persistence migrations.

One thing to know about .github/workflows/web-preview.yml

Taken from upstream unchanged, on the "take their refactor" principle — rewriting it would only manufacture conflicts in future syncs. It is inert for Marcode: it runs only on same-repo PRs explicitly labelled preview:web, it is not one of the four required checks, and without VERCEL_TOKEN / VERCEL_ORG_ID / VERCEL_PROJECT_ID it exits with an explicit "missing secrets" error rather than deploying anything. Its Deploy web preview job already reported skipped on this PR, which is the expected behaviour. If Marcode never wants hosted-web previews, deleting the file is a one-line follow-up; leaving it costs nothing until someone applies the label.

UI Changes

A new mobile Usage screen (Settings → Usage) with a daily provider-stacked chart — native Swift Charts on iOS, a View-based fallback elsewhere. Not captured live: this sync ran headless in a Linux container with no iOS Simulator or Android Emulator, so the screen is verified by typecheck and static analysis only. Per docs/operations/upstream-sync.md, drive the real mobile surface before taking this out of draft.

Verification

Local checks were scoped to what the merge touched, per AGENTS.md — the full workspace suite was not run locally.

CommandResult
npx vp test run packages/shared/src/usageMerge.test.ts9/9 pass
npx vp test run apps/web/src/components/usage/UsageProviderChart.test.ts9/9 pass
npx vp test run apps/mobile/src/lib/adaptive-navigation.test.ts7/7 pass
npx vp run --filter @t3tools/shared typecheckexit 0
npx vp run --filter @t3tools/web typecheckexit 0
npx vp run --filter @t3tools/mobile typecheckexit 0
npx vp fmt --check on all 18 changed filesall correctly formatted
npx vp lint on apps/mobile/src/features/usage, apps/mobile/src/state, apps/mobile/src/features/settings, apps/web/src/components/usage, apps/web/src/state, packages/shared/srcexit 0
node scripts/mobile-native-static-check.tsexit 0

Post-merge audit: zero unmerged paths, zero conflict markers, no .bak artifacts, clean worktree.

CI

All four required checks are green on 123fe314, in run 31320792146, attempt 2:

JobResult
Check✅ success
Test✅ success
Mobile Native Static Analysis✅ success
Release Smoke✅ success

Attempt 1 shows as cancelled and should be ignored. Its Test job ran the suite in 7m25s — matching the 8m baseline on main — but the check-runs API kept reporting in_progress long after the job had settled, so it was cancelled and re-run on the assumption the runner had hung. Nothing about the diff was involved, and attempt 2 is the clean record.

Not verified: live mobile runtime (no simulator/emulator in the sync container). swiftlint / ktlint / detekt were skipped locally as not installed, but CI's Mobile Native Static Analysis job ran them and passed.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — mobile UI could not be driven in this headless container; see UI Changes
  • I included a video for animation/interaction changes — same reason

@maarcomaarco added the upstream-sync Upstream T3 Code sync label Aug 9, 2026 — with Claude
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL labels Aug 9, 2026
@github-actions

github-actionsBot commented Aug 9, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire11.3 KiB11.3 KiB−28 B (−0.2%)15.1 KiB
CodexThread snapshot wire5.5 KiB5.5 KiB+1 B (+0.0%)7.3 KiB
CodexLive turn WebSocket wire5.9 KiB5.9 KiB−29 B (−0.5%)7.8 KiB
CodexLive turn WebSocket decoded49.7 KiB49.7 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire11.3 KiB11.3 KiB+12 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire5.5 KiB5.5 KiB+11 B (+0.2%)7.3 KiB
ClaudeLive turn WebSocket wire5.8 KiB5.8 KiB+1 B (+0.0%)7.8 KiB
ClaudeLive turn WebSocket decoded50.6 KiB50.6 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: df91c6c · PR result: 123fe31 · 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: 94.6 KiB
  • Claude decoded thread snapshot: 95.4 KiB

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

@maarco
maarco marked this pull request as ready for review August 9, 2026 19:54
@maarco
maarco merged commit 8a6745f into mainAug 9, 2026
20 of 21 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XLupstream-syncUpstream T3 Code syncvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@maarco@t3dotgg@juliusmarminge@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 1a003e383ac6 - #19

Merged
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h
Aug 9, 2026
Merged

chore(upstream): sync marcode through 1a003e383ac6#19
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h

Conversation

@maarco

@maarcomaarco commented Aug 9, 2026

Copy link
Copy Markdown
Owner

What Changed

Daily upstream sync. Merges pingdotgg/t3code@1a003e383ac6b10258b8100c2617d938c4f06c69 into main with git merge --no-ff.

Two upstream commits:

SHASubject
963ebf5bci: label-gated hosted-web preview deploys (pingdotgg#5465)
1a003e38Add cross-platform mobile usage dashboard (pingdotgg#5743)

18 files: 890 insertions, 6 deletions. apps/web/src/usage/{usageFormat,usageMerge,usageMerge.test}.ts move to packages/shared/src/ so web and mobile share them; a new apps/mobile/src/features/usage/ screen consumes them; .github/workflows/web-preview.yml is new.

Why

Conflicts: none. The merge applied cleanly with zero conflicted paths — no --ours/--theirs, no reset, restore, stash, clean, or force push was used at any point. Because a clean merge is not automatically a safe merge, the sync was audited for fork-boundary breaks that produce no conflict marker.

Fork-boundary audit

CheckResult
apps/web/src/usage/**packages/shared/src/** rename left dangling importersNo. Every importer resolves to @t3tools/shared/usageMerge / @t3tools/shared/usageFormat; no stale apps/web/src/usage reference anywhere in the tree, including docs and skills.
Marcode customizations lost in the moved filesNo. Byte-diffing Marcode's df91c6c4:apps/web/src/usage/* against HEAD:packages/shared/src/* shows only upstream's own additions (one @effect-diagnostics pragma, one .ts import specifier). Marcode had no local edits in those files.
Marcode mobile branding preserved in merged hotspot filesYes. SettingsRouteScreen.tsx keeps "Marcode Connect", "Marcode Account", and "Marcode works locally without signing in"; Stack.tsx keeps "Set up Marcode Connect". Upstream's new SettingsUsage route and settings row merged in alongside them.
New upstream mobile files carry unbranded "T3" user-visible copyNo. apps/mobile/src/features/usage/** and apps/mobile/src/state/usage.ts contain no product-name strings.
Upstream identity Marcode renames (T3CODE_HOME, t3code.service, ~/.t3, t3code:* storage keys, boot-service naming) introduced by the mergeNone. The merged content reads no env vars, no storage keys, and no URLs. Tree-wide re-check confirms MARCODE_HOME (no T3CODE_HOME exists), marcode.service as the unit file, and WORKTREE_BRANCH_PREFIX = "marcode".
Compatibility identifiers kept upstream-shapedYes, deliberately: T3_BOOT_SERVICE_UNIT, T3_SERVICE_LAUNCHER_CONTEXT, @t3tools/* package names, and the t3 CLI name (which web-preview.yml references as t3 pair --tailscale).
Design tokens the new mobile screen depends onfont-t3-medium / font-t3-bold exist in apps/mobile/global.css; IconChartBar and the chart.bar.xaxis SF-symbol mapping were added by the same upstream commit.
Upstream deleted or rewrote a test pinning Marcode behaviorNo. The only test change is usageMerge.test.ts moving with its module; no replacement pin was needed.
Coupled vendored subtrees (pnpm-workspace.yaml.repos/effect-smol, infra/relay/package.json.repos/alchemy-effect)Neither source moved, so no sync:repos companion change is required.

Hotspot decisions

  • apps/mobile/** (owner: mobile) — combined, not chosen. Upstream's usage dashboard is taken in full; Marcode's branding strings in SettingsRouteScreen.tsx and Stack.tsx are retained on top.
  • packages/shared/package.json — combined. Upstream's two new subpath exports sit alongside Marcode's ./fractional-rank export. Stays barrel-free per AGENTS.md.
  • No other hotspot path in .github/upstream-sync.yml was touched: nothing in the unified workspace tree, floating editor, sidebar, right panel, branding, provider runtime, or persistence migrations.

One thing to know about .github/workflows/web-preview.yml

Taken from upstream unchanged, on the "take their refactor" principle — rewriting it would only manufacture conflicts in future syncs. It is inert for Marcode: it runs only on same-repo PRs explicitly labelled preview:web, it is not one of the four required checks, and without VERCEL_TOKEN / VERCEL_ORG_ID / VERCEL_PROJECT_ID it exits with an explicit "missing secrets" error rather than deploying anything. Its Deploy web preview job already reported skipped on this PR, which is the expected behaviour. If Marcode never wants hosted-web previews, deleting the file is a one-line follow-up; leaving it costs nothing until someone applies the label.

UI Changes

A new mobile Usage screen (Settings → Usage) with a daily provider-stacked chart — native Swift Charts on iOS, a View-based fallback elsewhere. Not captured live: this sync ran headless in a Linux container with no iOS Simulator or Android Emulator, so the screen is verified by typecheck and static analysis only. Per docs/operations/upstream-sync.md, drive the real mobile surface before taking this out of draft.

Verification

Local checks were scoped to what the merge touched, per AGENTS.md — the full workspace suite was not run locally.

CommandResult
npx vp test run packages/shared/src/usageMerge.test.ts9/9 pass
npx vp test run apps/web/src/components/usage/UsageProviderChart.test.ts9/9 pass
npx vp test run apps/mobile/src/lib/adaptive-navigation.test.ts7/7 pass
npx vp run --filter @t3tools/shared typecheckexit 0
npx vp run --filter @t3tools/web typecheckexit 0
npx vp run --filter @t3tools/mobile typecheckexit 0
npx vp fmt --check on all 18 changed filesall correctly formatted
npx vp lint on apps/mobile/src/features/usage, apps/mobile/src/state, apps/mobile/src/features/settings, apps/web/src/components/usage, apps/web/src/state, packages/shared/srcexit 0
node scripts/mobile-native-static-check.tsexit 0

Post-merge audit: zero unmerged paths, zero conflict markers, no .bak artifacts, clean worktree.

CI

All four required checks are green on 123fe314, in run 31320792146, attempt 2:

JobResult
Check✅ success
Test✅ success
Mobile Native Static Analysis✅ success
Release Smoke✅ success

Attempt 1 shows as cancelled and should be ignored. Its Test job ran the suite in 7m25s — matching the 8m baseline on main — but the check-runs API kept reporting in_progress long after the job had settled, so it was cancelled and re-run on the assumption the runner had hung. Nothing about the diff was involved, and attempt 2 is the clean record.

Not verified: live mobile runtime (no simulator/emulator in the sync container). swiftlint / ktlint / detekt were skipped locally as not installed, but CI's Mobile Native Static Analysis job ran them and passed.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — mobile UI could not be driven in this headless container; see UI Changes
  • I included a video for animation/interaction changes — same reason

@maarcomaarco added the upstream-sync Upstream T3 Code sync label Aug 9, 2026 — with Claude
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL labels Aug 9, 2026
@github-actions

github-actionsBot commented Aug 9, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire11.3 KiB11.3 KiB−28 B (−0.2%)15.1 KiB
CodexThread snapshot wire5.5 KiB5.5 KiB+1 B (+0.0%)7.3 KiB
CodexLive turn WebSocket wire5.9 KiB5.9 KiB−29 B (−0.5%)7.8 KiB
CodexLive turn WebSocket decoded49.7 KiB49.7 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire11.3 KiB11.3 KiB+12 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire5.5 KiB5.5 KiB+11 B (+0.2%)7.3 KiB
ClaudeLive turn WebSocket wire5.8 KiB5.8 KiB+1 B (+0.0%)7.8 KiB
ClaudeLive turn WebSocket decoded50.6 KiB50.6 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: df91c6c · PR result: 123fe31 · 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: 94.6 KiB
  • Claude decoded thread snapshot: 95.4 KiB

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

@maarco
maarco marked this pull request as ready for review August 9, 2026 19:54
@maarco
maarco merged commit 8a6745f into mainAug 9, 2026
20 of 21 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XLupstream-syncUpstream T3 Code syncvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@maarco@t3dotgg@juliusmarminge@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 1a003e383ac6 - #19

Merged
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h
Aug 9, 2026
Merged

chore(upstream): sync marcode through 1a003e383ac6#19
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h

Conversation

@maarco

@maarcomaarco commented Aug 9, 2026

Copy link
Copy Markdown
Owner

What Changed

Daily upstream sync. Merges pingdotgg/t3code@1a003e383ac6b10258b8100c2617d938c4f06c69 into main with git merge --no-ff.

Two upstream commits:

SHASubject
963ebf5bci: label-gated hosted-web preview deploys (pingdotgg#5465)
1a003e38Add cross-platform mobile usage dashboard (pingdotgg#5743)

18 files: 890 insertions, 6 deletions. apps/web/src/usage/{usageFormat,usageMerge,usageMerge.test}.ts move to packages/shared/src/ so web and mobile share them; a new apps/mobile/src/features/usage/ screen consumes them; .github/workflows/web-preview.yml is new.

Why

Conflicts: none. The merge applied cleanly with zero conflicted paths — no --ours/--theirs, no reset, restore, stash, clean, or force push was used at any point. Because a clean merge is not automatically a safe merge, the sync was audited for fork-boundary breaks that produce no conflict marker.

Fork-boundary audit

CheckResult
apps/web/src/usage/**packages/shared/src/** rename left dangling importersNo. Every importer resolves to @t3tools/shared/usageMerge / @t3tools/shared/usageFormat; no stale apps/web/src/usage reference anywhere in the tree, including docs and skills.
Marcode customizations lost in the moved filesNo. Byte-diffing Marcode's df91c6c4:apps/web/src/usage/* against HEAD:packages/shared/src/* shows only upstream's own additions (one @effect-diagnostics pragma, one .ts import specifier). Marcode had no local edits in those files.
Marcode mobile branding preserved in merged hotspot filesYes. SettingsRouteScreen.tsx keeps "Marcode Connect", "Marcode Account", and "Marcode works locally without signing in"; Stack.tsx keeps "Set up Marcode Connect". Upstream's new SettingsUsage route and settings row merged in alongside them.
New upstream mobile files carry unbranded "T3" user-visible copyNo. apps/mobile/src/features/usage/** and apps/mobile/src/state/usage.ts contain no product-name strings.
Upstream identity Marcode renames (T3CODE_HOME, t3code.service, ~/.t3, t3code:* storage keys, boot-service naming) introduced by the mergeNone. The merged content reads no env vars, no storage keys, and no URLs. Tree-wide re-check confirms MARCODE_HOME (no T3CODE_HOME exists), marcode.service as the unit file, and WORKTREE_BRANCH_PREFIX = "marcode".
Compatibility identifiers kept upstream-shapedYes, deliberately: T3_BOOT_SERVICE_UNIT, T3_SERVICE_LAUNCHER_CONTEXT, @t3tools/* package names, and the t3 CLI name (which web-preview.yml references as t3 pair --tailscale).
Design tokens the new mobile screen depends onfont-t3-medium / font-t3-bold exist in apps/mobile/global.css; IconChartBar and the chart.bar.xaxis SF-symbol mapping were added by the same upstream commit.
Upstream deleted or rewrote a test pinning Marcode behaviorNo. The only test change is usageMerge.test.ts moving with its module; no replacement pin was needed.
Coupled vendored subtrees (pnpm-workspace.yaml.repos/effect-smol, infra/relay/package.json.repos/alchemy-effect)Neither source moved, so no sync:repos companion change is required.

Hotspot decisions

  • apps/mobile/** (owner: mobile) — combined, not chosen. Upstream's usage dashboard is taken in full; Marcode's branding strings in SettingsRouteScreen.tsx and Stack.tsx are retained on top.
  • packages/shared/package.json — combined. Upstream's two new subpath exports sit alongside Marcode's ./fractional-rank export. Stays barrel-free per AGENTS.md.
  • No other hotspot path in .github/upstream-sync.yml was touched: nothing in the unified workspace tree, floating editor, sidebar, right panel, branding, provider runtime, or persistence migrations.

One thing to know about .github/workflows/web-preview.yml

Taken from upstream unchanged, on the "take their refactor" principle — rewriting it would only manufacture conflicts in future syncs. It is inert for Marcode: it runs only on same-repo PRs explicitly labelled preview:web, it is not one of the four required checks, and without VERCEL_TOKEN / VERCEL_ORG_ID / VERCEL_PROJECT_ID it exits with an explicit "missing secrets" error rather than deploying anything. Its Deploy web preview job already reported skipped on this PR, which is the expected behaviour. If Marcode never wants hosted-web previews, deleting the file is a one-line follow-up; leaving it costs nothing until someone applies the label.

UI Changes

A new mobile Usage screen (Settings → Usage) with a daily provider-stacked chart — native Swift Charts on iOS, a View-based fallback elsewhere. Not captured live: this sync ran headless in a Linux container with no iOS Simulator or Android Emulator, so the screen is verified by typecheck and static analysis only. Per docs/operations/upstream-sync.md, drive the real mobile surface before taking this out of draft.

Verification

Local checks were scoped to what the merge touched, per AGENTS.md — the full workspace suite was not run locally.

CommandResult
npx vp test run packages/shared/src/usageMerge.test.ts9/9 pass
npx vp test run apps/web/src/components/usage/UsageProviderChart.test.ts9/9 pass
npx vp test run apps/mobile/src/lib/adaptive-navigation.test.ts7/7 pass
npx vp run --filter @t3tools/shared typecheckexit 0
npx vp run --filter @t3tools/web typecheckexit 0
npx vp run --filter @t3tools/mobile typecheckexit 0
npx vp fmt --check on all 18 changed filesall correctly formatted
npx vp lint on apps/mobile/src/features/usage, apps/mobile/src/state, apps/mobile/src/features/settings, apps/web/src/components/usage, apps/web/src/state, packages/shared/srcexit 0
node scripts/mobile-native-static-check.tsexit 0

Post-merge audit: zero unmerged paths, zero conflict markers, no .bak artifacts, clean worktree.

CI

All four required checks are green on 123fe314, in run 31320792146, attempt 2:

JobResult
Check✅ success
Test✅ success
Mobile Native Static Analysis✅ success
Release Smoke✅ success

Attempt 1 shows as cancelled and should be ignored. Its Test job ran the suite in 7m25s — matching the 8m baseline on main — but the check-runs API kept reporting in_progress long after the job had settled, so it was cancelled and re-run on the assumption the runner had hung. Nothing about the diff was involved, and attempt 2 is the clean record.

Not verified: live mobile runtime (no simulator/emulator in the sync container). swiftlint / ktlint / detekt were skipped locally as not installed, but CI's Mobile Native Static Analysis job ran them and passed.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — mobile UI could not be driven in this headless container; see UI Changes
  • I included a video for animation/interaction changes — same reason

@maarcomaarco added the upstream-sync Upstream T3 Code sync label Aug 9, 2026 — with Claude
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL labels Aug 9, 2026
@github-actions

github-actionsBot commented Aug 9, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire11.3 KiB11.3 KiB−28 B (−0.2%)15.1 KiB
CodexThread snapshot wire5.5 KiB5.5 KiB+1 B (+0.0%)7.3 KiB
CodexLive turn WebSocket wire5.9 KiB5.9 KiB−29 B (−0.5%)7.8 KiB
CodexLive turn WebSocket decoded49.7 KiB49.7 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire11.3 KiB11.3 KiB+12 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire5.5 KiB5.5 KiB+11 B (+0.2%)7.3 KiB
ClaudeLive turn WebSocket wire5.8 KiB5.8 KiB+1 B (+0.0%)7.8 KiB
ClaudeLive turn WebSocket decoded50.6 KiB50.6 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: df91c6c · PR result: 123fe31 · 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: 94.6 KiB
  • Claude decoded thread snapshot: 95.4 KiB

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

@maarco
maarco marked this pull request as ready for review August 9, 2026 19:54
@maarco
maarco merged commit 8a6745f into mainAug 9, 2026
20 of 21 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XLupstream-syncUpstream T3 Code syncvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@maarco@t3dotgg@juliusmarminge@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 1a003e383ac6 - #19

Merged
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h
Aug 9, 2026
Merged

chore(upstream): sync marcode through 1a003e383ac6#19
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h

Conversation

@maarco

@maarcomaarco commented Aug 9, 2026

Copy link
Copy Markdown
Owner

What Changed

Daily upstream sync. Merges pingdotgg/t3code@1a003e383ac6b10258b8100c2617d938c4f06c69 into main with git merge --no-ff.

Two upstream commits:

SHASubject
963ebf5bci: label-gated hosted-web preview deploys (pingdotgg#5465)
1a003e38Add cross-platform mobile usage dashboard (pingdotgg#5743)

18 files: 890 insertions, 6 deletions. apps/web/src/usage/{usageFormat,usageMerge,usageMerge.test}.ts move to packages/shared/src/ so web and mobile share them; a new apps/mobile/src/features/usage/ screen consumes them; .github/workflows/web-preview.yml is new.

Why

Conflicts: none. The merge applied cleanly with zero conflicted paths — no --ours/--theirs, no reset, restore, stash, clean, or force push was used at any point. Because a clean merge is not automatically a safe merge, the sync was audited for fork-boundary breaks that produce no conflict marker.

Fork-boundary audit

CheckResult
apps/web/src/usage/**packages/shared/src/** rename left dangling importersNo. Every importer resolves to @t3tools/shared/usageMerge / @t3tools/shared/usageFormat; no stale apps/web/src/usage reference anywhere in the tree, including docs and skills.
Marcode customizations lost in the moved filesNo. Byte-diffing Marcode's df91c6c4:apps/web/src/usage/* against HEAD:packages/shared/src/* shows only upstream's own additions (one @effect-diagnostics pragma, one .ts import specifier). Marcode had no local edits in those files.
Marcode mobile branding preserved in merged hotspot filesYes. SettingsRouteScreen.tsx keeps "Marcode Connect", "Marcode Account", and "Marcode works locally without signing in"; Stack.tsx keeps "Set up Marcode Connect". Upstream's new SettingsUsage route and settings row merged in alongside them.
New upstream mobile files carry unbranded "T3" user-visible copyNo. apps/mobile/src/features/usage/** and apps/mobile/src/state/usage.ts contain no product-name strings.
Upstream identity Marcode renames (T3CODE_HOME, t3code.service, ~/.t3, t3code:* storage keys, boot-service naming) introduced by the mergeNone. The merged content reads no env vars, no storage keys, and no URLs. Tree-wide re-check confirms MARCODE_HOME (no T3CODE_HOME exists), marcode.service as the unit file, and WORKTREE_BRANCH_PREFIX = "marcode".
Compatibility identifiers kept upstream-shapedYes, deliberately: T3_BOOT_SERVICE_UNIT, T3_SERVICE_LAUNCHER_CONTEXT, @t3tools/* package names, and the t3 CLI name (which web-preview.yml references as t3 pair --tailscale).
Design tokens the new mobile screen depends onfont-t3-medium / font-t3-bold exist in apps/mobile/global.css; IconChartBar and the chart.bar.xaxis SF-symbol mapping were added by the same upstream commit.
Upstream deleted or rewrote a test pinning Marcode behaviorNo. The only test change is usageMerge.test.ts moving with its module; no replacement pin was needed.
Coupled vendored subtrees (pnpm-workspace.yaml.repos/effect-smol, infra/relay/package.json.repos/alchemy-effect)Neither source moved, so no sync:repos companion change is required.

Hotspot decisions

  • apps/mobile/** (owner: mobile) — combined, not chosen. Upstream's usage dashboard is taken in full; Marcode's branding strings in SettingsRouteScreen.tsx and Stack.tsx are retained on top.
  • packages/shared/package.json — combined. Upstream's two new subpath exports sit alongside Marcode's ./fractional-rank export. Stays barrel-free per AGENTS.md.
  • No other hotspot path in .github/upstream-sync.yml was touched: nothing in the unified workspace tree, floating editor, sidebar, right panel, branding, provider runtime, or persistence migrations.

One thing to know about .github/workflows/web-preview.yml

Taken from upstream unchanged, on the "take their refactor" principle — rewriting it would only manufacture conflicts in future syncs. It is inert for Marcode: it runs only on same-repo PRs explicitly labelled preview:web, it is not one of the four required checks, and without VERCEL_TOKEN / VERCEL_ORG_ID / VERCEL_PROJECT_ID it exits with an explicit "missing secrets" error rather than deploying anything. Its Deploy web preview job already reported skipped on this PR, which is the expected behaviour. If Marcode never wants hosted-web previews, deleting the file is a one-line follow-up; leaving it costs nothing until someone applies the label.

UI Changes

A new mobile Usage screen (Settings → Usage) with a daily provider-stacked chart — native Swift Charts on iOS, a View-based fallback elsewhere. Not captured live: this sync ran headless in a Linux container with no iOS Simulator or Android Emulator, so the screen is verified by typecheck and static analysis only. Per docs/operations/upstream-sync.md, drive the real mobile surface before taking this out of draft.

Verification

Local checks were scoped to what the merge touched, per AGENTS.md — the full workspace suite was not run locally.

CommandResult
npx vp test run packages/shared/src/usageMerge.test.ts9/9 pass
npx vp test run apps/web/src/components/usage/UsageProviderChart.test.ts9/9 pass
npx vp test run apps/mobile/src/lib/adaptive-navigation.test.ts7/7 pass
npx vp run --filter @t3tools/shared typecheckexit 0
npx vp run --filter @t3tools/web typecheckexit 0
npx vp run --filter @t3tools/mobile typecheckexit 0
npx vp fmt --check on all 18 changed filesall correctly formatted
npx vp lint on apps/mobile/src/features/usage, apps/mobile/src/state, apps/mobile/src/features/settings, apps/web/src/components/usage, apps/web/src/state, packages/shared/srcexit 0
node scripts/mobile-native-static-check.tsexit 0

Post-merge audit: zero unmerged paths, zero conflict markers, no .bak artifacts, clean worktree.

CI

All four required checks are green on 123fe314, in run 31320792146, attempt 2:

JobResult
Check✅ success
Test✅ success
Mobile Native Static Analysis✅ success
Release Smoke✅ success

Attempt 1 shows as cancelled and should be ignored. Its Test job ran the suite in 7m25s — matching the 8m baseline on main — but the check-runs API kept reporting in_progress long after the job had settled, so it was cancelled and re-run on the assumption the runner had hung. Nothing about the diff was involved, and attempt 2 is the clean record.

Not verified: live mobile runtime (no simulator/emulator in the sync container). swiftlint / ktlint / detekt were skipped locally as not installed, but CI's Mobile Native Static Analysis job ran them and passed.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — mobile UI could not be driven in this headless container; see UI Changes
  • I included a video for animation/interaction changes — same reason

@maarcomaarco added the upstream-sync Upstream T3 Code sync label Aug 9, 2026 — with Claude
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL labels Aug 9, 2026
@github-actions

github-actionsBot commented Aug 9, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire11.3 KiB11.3 KiB−28 B (−0.2%)15.1 KiB
CodexThread snapshot wire5.5 KiB5.5 KiB+1 B (+0.0%)7.3 KiB
CodexLive turn WebSocket wire5.9 KiB5.9 KiB−29 B (−0.5%)7.8 KiB
CodexLive turn WebSocket decoded49.7 KiB49.7 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire11.3 KiB11.3 KiB+12 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire5.5 KiB5.5 KiB+11 B (+0.2%)7.3 KiB
ClaudeLive turn WebSocket wire5.8 KiB5.8 KiB+1 B (+0.0%)7.8 KiB
ClaudeLive turn WebSocket decoded50.6 KiB50.6 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: df91c6c · PR result: 123fe31 · 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: 94.6 KiB
  • Claude decoded thread snapshot: 95.4 KiB

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

@maarco
maarco marked this pull request as ready for review August 9, 2026 19:54
@maarco
maarco merged commit 8a6745f into mainAug 9, 2026
20 of 21 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XLupstream-syncUpstream T3 Code syncvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@maarco@t3dotgg@juliusmarminge@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 1a003e383ac6 - #19

Merged
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h
Aug 9, 2026
Merged

chore(upstream): sync marcode through 1a003e383ac6#19
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h

Conversation

@maarco

@maarcomaarco commented Aug 9, 2026

Copy link
Copy Markdown
Owner

What Changed

Daily upstream sync. Merges pingdotgg/t3code@1a003e383ac6b10258b8100c2617d938c4f06c69 into main with git merge --no-ff.

Two upstream commits:

SHASubject
963ebf5bci: label-gated hosted-web preview deploys (pingdotgg#5465)
1a003e38Add cross-platform mobile usage dashboard (pingdotgg#5743)

18 files: 890 insertions, 6 deletions. apps/web/src/usage/{usageFormat,usageMerge,usageMerge.test}.ts move to packages/shared/src/ so web and mobile share them; a new apps/mobile/src/features/usage/ screen consumes them; .github/workflows/web-preview.yml is new.

Why

Conflicts: none. The merge applied cleanly with zero conflicted paths — no --ours/--theirs, no reset, restore, stash, clean, or force push was used at any point. Because a clean merge is not automatically a safe merge, the sync was audited for fork-boundary breaks that produce no conflict marker.

Fork-boundary audit

CheckResult
apps/web/src/usage/**packages/shared/src/** rename left dangling importersNo. Every importer resolves to @t3tools/shared/usageMerge / @t3tools/shared/usageFormat; no stale apps/web/src/usage reference anywhere in the tree, including docs and skills.
Marcode customizations lost in the moved filesNo. Byte-diffing Marcode's df91c6c4:apps/web/src/usage/* against HEAD:packages/shared/src/* shows only upstream's own additions (one @effect-diagnostics pragma, one .ts import specifier). Marcode had no local edits in those files.
Marcode mobile branding preserved in merged hotspot filesYes. SettingsRouteScreen.tsx keeps "Marcode Connect", "Marcode Account", and "Marcode works locally without signing in"; Stack.tsx keeps "Set up Marcode Connect". Upstream's new SettingsUsage route and settings row merged in alongside them.
New upstream mobile files carry unbranded "T3" user-visible copyNo. apps/mobile/src/features/usage/** and apps/mobile/src/state/usage.ts contain no product-name strings.
Upstream identity Marcode renames (T3CODE_HOME, t3code.service, ~/.t3, t3code:* storage keys, boot-service naming) introduced by the mergeNone. The merged content reads no env vars, no storage keys, and no URLs. Tree-wide re-check confirms MARCODE_HOME (no T3CODE_HOME exists), marcode.service as the unit file, and WORKTREE_BRANCH_PREFIX = "marcode".
Compatibility identifiers kept upstream-shapedYes, deliberately: T3_BOOT_SERVICE_UNIT, T3_SERVICE_LAUNCHER_CONTEXT, @t3tools/* package names, and the t3 CLI name (which web-preview.yml references as t3 pair --tailscale).
Design tokens the new mobile screen depends onfont-t3-medium / font-t3-bold exist in apps/mobile/global.css; IconChartBar and the chart.bar.xaxis SF-symbol mapping were added by the same upstream commit.
Upstream deleted or rewrote a test pinning Marcode behaviorNo. The only test change is usageMerge.test.ts moving with its module; no replacement pin was needed.
Coupled vendored subtrees (pnpm-workspace.yaml.repos/effect-smol, infra/relay/package.json.repos/alchemy-effect)Neither source moved, so no sync:repos companion change is required.

Hotspot decisions

  • apps/mobile/** (owner: mobile) — combined, not chosen. Upstream's usage dashboard is taken in full; Marcode's branding strings in SettingsRouteScreen.tsx and Stack.tsx are retained on top.
  • packages/shared/package.json — combined. Upstream's two new subpath exports sit alongside Marcode's ./fractional-rank export. Stays barrel-free per AGENTS.md.
  • No other hotspot path in .github/upstream-sync.yml was touched: nothing in the unified workspace tree, floating editor, sidebar, right panel, branding, provider runtime, or persistence migrations.

One thing to know about .github/workflows/web-preview.yml

Taken from upstream unchanged, on the "take their refactor" principle — rewriting it would only manufacture conflicts in future syncs. It is inert for Marcode: it runs only on same-repo PRs explicitly labelled preview:web, it is not one of the four required checks, and without VERCEL_TOKEN / VERCEL_ORG_ID / VERCEL_PROJECT_ID it exits with an explicit "missing secrets" error rather than deploying anything. Its Deploy web preview job already reported skipped on this PR, which is the expected behaviour. If Marcode never wants hosted-web previews, deleting the file is a one-line follow-up; leaving it costs nothing until someone applies the label.

UI Changes

A new mobile Usage screen (Settings → Usage) with a daily provider-stacked chart — native Swift Charts on iOS, a View-based fallback elsewhere. Not captured live: this sync ran headless in a Linux container with no iOS Simulator or Android Emulator, so the screen is verified by typecheck and static analysis only. Per docs/operations/upstream-sync.md, drive the real mobile surface before taking this out of draft.

Verification

Local checks were scoped to what the merge touched, per AGENTS.md — the full workspace suite was not run locally.

CommandResult
npx vp test run packages/shared/src/usageMerge.test.ts9/9 pass
npx vp test run apps/web/src/components/usage/UsageProviderChart.test.ts9/9 pass
npx vp test run apps/mobile/src/lib/adaptive-navigation.test.ts7/7 pass
npx vp run --filter @t3tools/shared typecheckexit 0
npx vp run --filter @t3tools/web typecheckexit 0
npx vp run --filter @t3tools/mobile typecheckexit 0
npx vp fmt --check on all 18 changed filesall correctly formatted
npx vp lint on apps/mobile/src/features/usage, apps/mobile/src/state, apps/mobile/src/features/settings, apps/web/src/components/usage, apps/web/src/state, packages/shared/srcexit 0
node scripts/mobile-native-static-check.tsexit 0

Post-merge audit: zero unmerged paths, zero conflict markers, no .bak artifacts, clean worktree.

CI

All four required checks are green on 123fe314, in run 31320792146, attempt 2:

JobResult
Check✅ success
Test✅ success
Mobile Native Static Analysis✅ success
Release Smoke✅ success

Attempt 1 shows as cancelled and should be ignored. Its Test job ran the suite in 7m25s — matching the 8m baseline on main — but the check-runs API kept reporting in_progress long after the job had settled, so it was cancelled and re-run on the assumption the runner had hung. Nothing about the diff was involved, and attempt 2 is the clean record.

Not verified: live mobile runtime (no simulator/emulator in the sync container). swiftlint / ktlint / detekt were skipped locally as not installed, but CI's Mobile Native Static Analysis job ran them and passed.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — mobile UI could not be driven in this headless container; see UI Changes
  • I included a video for animation/interaction changes — same reason

@maarcomaarco added the upstream-sync Upstream T3 Code sync label Aug 9, 2026 — with Claude
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL labels Aug 9, 2026
@github-actions

github-actionsBot commented Aug 9, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire11.3 KiB11.3 KiB−28 B (−0.2%)15.1 KiB
CodexThread snapshot wire5.5 KiB5.5 KiB+1 B (+0.0%)7.3 KiB
CodexLive turn WebSocket wire5.9 KiB5.9 KiB−29 B (−0.5%)7.8 KiB
CodexLive turn WebSocket decoded49.7 KiB49.7 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire11.3 KiB11.3 KiB+12 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire5.5 KiB5.5 KiB+11 B (+0.2%)7.3 KiB
ClaudeLive turn WebSocket wire5.8 KiB5.8 KiB+1 B (+0.0%)7.8 KiB
ClaudeLive turn WebSocket decoded50.6 KiB50.6 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: df91c6c · PR result: 123fe31 · 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: 94.6 KiB
  • Claude decoded thread snapshot: 95.4 KiB

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

@maarco
maarco marked this pull request as ready for review August 9, 2026 19:54
@maarco
maarco merged commit 8a6745f into mainAug 9, 2026
20 of 21 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XLupstream-syncUpstream T3 Code syncvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@maarco@t3dotgg@juliusmarminge@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 1a003e383ac6 - #19

Merged
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h
Aug 9, 2026
Merged

chore(upstream): sync marcode through 1a003e383ac6#19
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h

Conversation

@maarco

@maarcomaarco commented Aug 9, 2026

Copy link
Copy Markdown
Owner

What Changed

Daily upstream sync. Merges pingdotgg/t3code@1a003e383ac6b10258b8100c2617d938c4f06c69 into main with git merge --no-ff.

Two upstream commits:

SHASubject
963ebf5bci: label-gated hosted-web preview deploys (pingdotgg#5465)
1a003e38Add cross-platform mobile usage dashboard (pingdotgg#5743)

18 files: 890 insertions, 6 deletions. apps/web/src/usage/{usageFormat,usageMerge,usageMerge.test}.ts move to packages/shared/src/ so web and mobile share them; a new apps/mobile/src/features/usage/ screen consumes them; .github/workflows/web-preview.yml is new.

Why

Conflicts: none. The merge applied cleanly with zero conflicted paths — no --ours/--theirs, no reset, restore, stash, clean, or force push was used at any point. Because a clean merge is not automatically a safe merge, the sync was audited for fork-boundary breaks that produce no conflict marker.

Fork-boundary audit

CheckResult
apps/web/src/usage/**packages/shared/src/** rename left dangling importersNo. Every importer resolves to @t3tools/shared/usageMerge / @t3tools/shared/usageFormat; no stale apps/web/src/usage reference anywhere in the tree, including docs and skills.
Marcode customizations lost in the moved filesNo. Byte-diffing Marcode's df91c6c4:apps/web/src/usage/* against HEAD:packages/shared/src/* shows only upstream's own additions (one @effect-diagnostics pragma, one .ts import specifier). Marcode had no local edits in those files.
Marcode mobile branding preserved in merged hotspot filesYes. SettingsRouteScreen.tsx keeps "Marcode Connect", "Marcode Account", and "Marcode works locally without signing in"; Stack.tsx keeps "Set up Marcode Connect". Upstream's new SettingsUsage route and settings row merged in alongside them.
New upstream mobile files carry unbranded "T3" user-visible copyNo. apps/mobile/src/features/usage/** and apps/mobile/src/state/usage.ts contain no product-name strings.
Upstream identity Marcode renames (T3CODE_HOME, t3code.service, ~/.t3, t3code:* storage keys, boot-service naming) introduced by the mergeNone. The merged content reads no env vars, no storage keys, and no URLs. Tree-wide re-check confirms MARCODE_HOME (no T3CODE_HOME exists), marcode.service as the unit file, and WORKTREE_BRANCH_PREFIX = "marcode".
Compatibility identifiers kept upstream-shapedYes, deliberately: T3_BOOT_SERVICE_UNIT, T3_SERVICE_LAUNCHER_CONTEXT, @t3tools/* package names, and the t3 CLI name (which web-preview.yml references as t3 pair --tailscale).
Design tokens the new mobile screen depends onfont-t3-medium / font-t3-bold exist in apps/mobile/global.css; IconChartBar and the chart.bar.xaxis SF-symbol mapping were added by the same upstream commit.
Upstream deleted or rewrote a test pinning Marcode behaviorNo. The only test change is usageMerge.test.ts moving with its module; no replacement pin was needed.
Coupled vendored subtrees (pnpm-workspace.yaml.repos/effect-smol, infra/relay/package.json.repos/alchemy-effect)Neither source moved, so no sync:repos companion change is required.

Hotspot decisions

  • apps/mobile/** (owner: mobile) — combined, not chosen. Upstream's usage dashboard is taken in full; Marcode's branding strings in SettingsRouteScreen.tsx and Stack.tsx are retained on top.
  • packages/shared/package.json — combined. Upstream's two new subpath exports sit alongside Marcode's ./fractional-rank export. Stays barrel-free per AGENTS.md.
  • No other hotspot path in .github/upstream-sync.yml was touched: nothing in the unified workspace tree, floating editor, sidebar, right panel, branding, provider runtime, or persistence migrations.

One thing to know about .github/workflows/web-preview.yml

Taken from upstream unchanged, on the "take their refactor" principle — rewriting it would only manufacture conflicts in future syncs. It is inert for Marcode: it runs only on same-repo PRs explicitly labelled preview:web, it is not one of the four required checks, and without VERCEL_TOKEN / VERCEL_ORG_ID / VERCEL_PROJECT_ID it exits with an explicit "missing secrets" error rather than deploying anything. Its Deploy web preview job already reported skipped on this PR, which is the expected behaviour. If Marcode never wants hosted-web previews, deleting the file is a one-line follow-up; leaving it costs nothing until someone applies the label.

UI Changes

A new mobile Usage screen (Settings → Usage) with a daily provider-stacked chart — native Swift Charts on iOS, a View-based fallback elsewhere. Not captured live: this sync ran headless in a Linux container with no iOS Simulator or Android Emulator, so the screen is verified by typecheck and static analysis only. Per docs/operations/upstream-sync.md, drive the real mobile surface before taking this out of draft.

Verification

Local checks were scoped to what the merge touched, per AGENTS.md — the full workspace suite was not run locally.

CommandResult
npx vp test run packages/shared/src/usageMerge.test.ts9/9 pass
npx vp test run apps/web/src/components/usage/UsageProviderChart.test.ts9/9 pass
npx vp test run apps/mobile/src/lib/adaptive-navigation.test.ts7/7 pass
npx vp run --filter @t3tools/shared typecheckexit 0
npx vp run --filter @t3tools/web typecheckexit 0
npx vp run --filter @t3tools/mobile typecheckexit 0
npx vp fmt --check on all 18 changed filesall correctly formatted
npx vp lint on apps/mobile/src/features/usage, apps/mobile/src/state, apps/mobile/src/features/settings, apps/web/src/components/usage, apps/web/src/state, packages/shared/srcexit 0
node scripts/mobile-native-static-check.tsexit 0

Post-merge audit: zero unmerged paths, zero conflict markers, no .bak artifacts, clean worktree.

CI

All four required checks are green on 123fe314, in run 31320792146, attempt 2:

JobResult
Check✅ success
Test✅ success
Mobile Native Static Analysis✅ success
Release Smoke✅ success

Attempt 1 shows as cancelled and should be ignored. Its Test job ran the suite in 7m25s — matching the 8m baseline on main — but the check-runs API kept reporting in_progress long after the job had settled, so it was cancelled and re-run on the assumption the runner had hung. Nothing about the diff was involved, and attempt 2 is the clean record.

Not verified: live mobile runtime (no simulator/emulator in the sync container). swiftlint / ktlint / detekt were skipped locally as not installed, but CI's Mobile Native Static Analysis job ran them and passed.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — mobile UI could not be driven in this headless container; see UI Changes
  • I included a video for animation/interaction changes — same reason

@maarcomaarco added the upstream-sync Upstream T3 Code sync label Aug 9, 2026 — with Claude
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL labels Aug 9, 2026
@github-actions

github-actionsBot commented Aug 9, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire11.3 KiB11.3 KiB−28 B (−0.2%)15.1 KiB
CodexThread snapshot wire5.5 KiB5.5 KiB+1 B (+0.0%)7.3 KiB
CodexLive turn WebSocket wire5.9 KiB5.9 KiB−29 B (−0.5%)7.8 KiB
CodexLive turn WebSocket decoded49.7 KiB49.7 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire11.3 KiB11.3 KiB+12 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire5.5 KiB5.5 KiB+11 B (+0.2%)7.3 KiB
ClaudeLive turn WebSocket wire5.8 KiB5.8 KiB+1 B (+0.0%)7.8 KiB
ClaudeLive turn WebSocket decoded50.6 KiB50.6 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: df91c6c · PR result: 123fe31 · 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: 94.6 KiB
  • Claude decoded thread snapshot: 95.4 KiB

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

@maarco
maarco marked this pull request as ready for review August 9, 2026 19:54
@maarco
maarco merged commit 8a6745f into mainAug 9, 2026
20 of 21 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XLupstream-syncUpstream T3 Code syncvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@maarco@t3dotgg@juliusmarminge@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 1a003e383ac6 - #19

Merged
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h
Aug 9, 2026
Merged

chore(upstream): sync marcode through 1a003e383ac6#19
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h

Conversation

@maarco

@maarcomaarco commented Aug 9, 2026

Copy link
Copy Markdown
Owner

What Changed

Daily upstream sync. Merges pingdotgg/t3code@1a003e383ac6b10258b8100c2617d938c4f06c69 into main with git merge --no-ff.

Two upstream commits:

SHASubject
963ebf5bci: label-gated hosted-web preview deploys (pingdotgg#5465)
1a003e38Add cross-platform mobile usage dashboard (pingdotgg#5743)

18 files: 890 insertions, 6 deletions. apps/web/src/usage/{usageFormat,usageMerge,usageMerge.test}.ts move to packages/shared/src/ so web and mobile share them; a new apps/mobile/src/features/usage/ screen consumes them; .github/workflows/web-preview.yml is new.

Why

Conflicts: none. The merge applied cleanly with zero conflicted paths — no --ours/--theirs, no reset, restore, stash, clean, or force push was used at any point. Because a clean merge is not automatically a safe merge, the sync was audited for fork-boundary breaks that produce no conflict marker.

Fork-boundary audit

CheckResult
apps/web/src/usage/**packages/shared/src/** rename left dangling importersNo. Every importer resolves to @t3tools/shared/usageMerge / @t3tools/shared/usageFormat; no stale apps/web/src/usage reference anywhere in the tree, including docs and skills.
Marcode customizations lost in the moved filesNo. Byte-diffing Marcode's df91c6c4:apps/web/src/usage/* against HEAD:packages/shared/src/* shows only upstream's own additions (one @effect-diagnostics pragma, one .ts import specifier). Marcode had no local edits in those files.
Marcode mobile branding preserved in merged hotspot filesYes. SettingsRouteScreen.tsx keeps "Marcode Connect", "Marcode Account", and "Marcode works locally without signing in"; Stack.tsx keeps "Set up Marcode Connect". Upstream's new SettingsUsage route and settings row merged in alongside them.
New upstream mobile files carry unbranded "T3" user-visible copyNo. apps/mobile/src/features/usage/** and apps/mobile/src/state/usage.ts contain no product-name strings.
Upstream identity Marcode renames (T3CODE_HOME, t3code.service, ~/.t3, t3code:* storage keys, boot-service naming) introduced by the mergeNone. The merged content reads no env vars, no storage keys, and no URLs. Tree-wide re-check confirms MARCODE_HOME (no T3CODE_HOME exists), marcode.service as the unit file, and WORKTREE_BRANCH_PREFIX = "marcode".
Compatibility identifiers kept upstream-shapedYes, deliberately: T3_BOOT_SERVICE_UNIT, T3_SERVICE_LAUNCHER_CONTEXT, @t3tools/* package names, and the t3 CLI name (which web-preview.yml references as t3 pair --tailscale).
Design tokens the new mobile screen depends onfont-t3-medium / font-t3-bold exist in apps/mobile/global.css; IconChartBar and the chart.bar.xaxis SF-symbol mapping were added by the same upstream commit.
Upstream deleted or rewrote a test pinning Marcode behaviorNo. The only test change is usageMerge.test.ts moving with its module; no replacement pin was needed.
Coupled vendored subtrees (pnpm-workspace.yaml.repos/effect-smol, infra/relay/package.json.repos/alchemy-effect)Neither source moved, so no sync:repos companion change is required.

Hotspot decisions

  • apps/mobile/** (owner: mobile) — combined, not chosen. Upstream's usage dashboard is taken in full; Marcode's branding strings in SettingsRouteScreen.tsx and Stack.tsx are retained on top.
  • packages/shared/package.json — combined. Upstream's two new subpath exports sit alongside Marcode's ./fractional-rank export. Stays barrel-free per AGENTS.md.
  • No other hotspot path in .github/upstream-sync.yml was touched: nothing in the unified workspace tree, floating editor, sidebar, right panel, branding, provider runtime, or persistence migrations.

One thing to know about .github/workflows/web-preview.yml

Taken from upstream unchanged, on the "take their refactor" principle — rewriting it would only manufacture conflicts in future syncs. It is inert for Marcode: it runs only on same-repo PRs explicitly labelled preview:web, it is not one of the four required checks, and without VERCEL_TOKEN / VERCEL_ORG_ID / VERCEL_PROJECT_ID it exits with an explicit "missing secrets" error rather than deploying anything. Its Deploy web preview job already reported skipped on this PR, which is the expected behaviour. If Marcode never wants hosted-web previews, deleting the file is a one-line follow-up; leaving it costs nothing until someone applies the label.

UI Changes

A new mobile Usage screen (Settings → Usage) with a daily provider-stacked chart — native Swift Charts on iOS, a View-based fallback elsewhere. Not captured live: this sync ran headless in a Linux container with no iOS Simulator or Android Emulator, so the screen is verified by typecheck and static analysis only. Per docs/operations/upstream-sync.md, drive the real mobile surface before taking this out of draft.

Verification

Local checks were scoped to what the merge touched, per AGENTS.md — the full workspace suite was not run locally.

CommandResult
npx vp test run packages/shared/src/usageMerge.test.ts9/9 pass
npx vp test run apps/web/src/components/usage/UsageProviderChart.test.ts9/9 pass
npx vp test run apps/mobile/src/lib/adaptive-navigation.test.ts7/7 pass
npx vp run --filter @t3tools/shared typecheckexit 0
npx vp run --filter @t3tools/web typecheckexit 0
npx vp run --filter @t3tools/mobile typecheckexit 0
npx vp fmt --check on all 18 changed filesall correctly formatted
npx vp lint on apps/mobile/src/features/usage, apps/mobile/src/state, apps/mobile/src/features/settings, apps/web/src/components/usage, apps/web/src/state, packages/shared/srcexit 0
node scripts/mobile-native-static-check.tsexit 0

Post-merge audit: zero unmerged paths, zero conflict markers, no .bak artifacts, clean worktree.

CI

All four required checks are green on 123fe314, in run 31320792146, attempt 2:

JobResult
Check✅ success
Test✅ success
Mobile Native Static Analysis✅ success
Release Smoke✅ success

Attempt 1 shows as cancelled and should be ignored. Its Test job ran the suite in 7m25s — matching the 8m baseline on main — but the check-runs API kept reporting in_progress long after the job had settled, so it was cancelled and re-run on the assumption the runner had hung. Nothing about the diff was involved, and attempt 2 is the clean record.

Not verified: live mobile runtime (no simulator/emulator in the sync container). swiftlint / ktlint / detekt were skipped locally as not installed, but CI's Mobile Native Static Analysis job ran them and passed.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — mobile UI could not be driven in this headless container; see UI Changes
  • I included a video for animation/interaction changes — same reason

@maarcomaarco added the upstream-sync Upstream T3 Code sync label Aug 9, 2026 — with Claude
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL labels Aug 9, 2026
@github-actions

github-actionsBot commented Aug 9, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire11.3 KiB11.3 KiB−28 B (−0.2%)15.1 KiB
CodexThread snapshot wire5.5 KiB5.5 KiB+1 B (+0.0%)7.3 KiB
CodexLive turn WebSocket wire5.9 KiB5.9 KiB−29 B (−0.5%)7.8 KiB
CodexLive turn WebSocket decoded49.7 KiB49.7 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire11.3 KiB11.3 KiB+12 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire5.5 KiB5.5 KiB+11 B (+0.2%)7.3 KiB
ClaudeLive turn WebSocket wire5.8 KiB5.8 KiB+1 B (+0.0%)7.8 KiB
ClaudeLive turn WebSocket decoded50.6 KiB50.6 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: df91c6c · PR result: 123fe31 · 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: 94.6 KiB
  • Claude decoded thread snapshot: 95.4 KiB

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

@maarco
maarco marked this pull request as ready for review August 9, 2026 19:54
@maarco
maarco merged commit 8a6745f into mainAug 9, 2026
20 of 21 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XLupstream-syncUpstream T3 Code syncvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@maarco@t3dotgg@juliusmarminge@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 1a003e383ac6 - #19

Merged
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h
Aug 9, 2026
Merged

chore(upstream): sync marcode through 1a003e383ac6#19
maarco merged 3 commits into
mainfrom
claude/gracious-bohr-58dc7h

Conversation

@maarco

@maarcomaarco commented Aug 9, 2026

Copy link
Copy Markdown
Owner

What Changed

Daily upstream sync. Merges pingdotgg/t3code@1a003e383ac6b10258b8100c2617d938c4f06c69 into main with git merge --no-ff.

Two upstream commits:

SHASubject
963ebf5bci: label-gated hosted-web preview deploys (pingdotgg#5465)
1a003e38Add cross-platform mobile usage dashboard (pingdotgg#5743)

18 files: 890 insertions, 6 deletions. apps/web/src/usage/{usageFormat,usageMerge,usageMerge.test}.ts move to packages/shared/src/ so web and mobile share them; a new apps/mobile/src/features/usage/ screen consumes them; .github/workflows/web-preview.yml is new.

Why

Conflicts: none. The merge applied cleanly with zero conflicted paths — no --ours/--theirs, no reset, restore, stash, clean, or force push was used at any point. Because a clean merge is not automatically a safe merge, the sync was audited for fork-boundary breaks that produce no conflict marker.

Fork-boundary audit

CheckResult
apps/web/src/usage/**packages/shared/src/** rename left dangling importersNo. Every importer resolves to @t3tools/shared/usageMerge / @t3tools/shared/usageFormat; no stale apps/web/src/usage reference anywhere in the tree, including docs and skills.
Marcode customizations lost in the moved filesNo. Byte-diffing Marcode's df91c6c4:apps/web/src/usage/* against HEAD:packages/shared/src/* shows only upstream's own additions (one @effect-diagnostics pragma, one .ts import specifier). Marcode had no local edits in those files.
Marcode mobile branding preserved in merged hotspot filesYes. SettingsRouteScreen.tsx keeps "Marcode Connect", "Marcode Account", and "Marcode works locally without signing in"; Stack.tsx keeps "Set up Marcode Connect". Upstream's new SettingsUsage route and settings row merged in alongside them.
New upstream mobile files carry unbranded "T3" user-visible copyNo. apps/mobile/src/features/usage/** and apps/mobile/src/state/usage.ts contain no product-name strings.
Upstream identity Marcode renames (T3CODE_HOME, t3code.service, ~/.t3, t3code:* storage keys, boot-service naming) introduced by the mergeNone. The merged content reads no env vars, no storage keys, and no URLs. Tree-wide re-check confirms MARCODE_HOME (no T3CODE_HOME exists), marcode.service as the unit file, and WORKTREE_BRANCH_PREFIX = "marcode".
Compatibility identifiers kept upstream-shapedYes, deliberately: T3_BOOT_SERVICE_UNIT, T3_SERVICE_LAUNCHER_CONTEXT, @t3tools/* package names, and the t3 CLI name (which web-preview.yml references as t3 pair --tailscale).
Design tokens the new mobile screen depends onfont-t3-medium / font-t3-bold exist in apps/mobile/global.css; IconChartBar and the chart.bar.xaxis SF-symbol mapping were added by the same upstream commit.
Upstream deleted or rewrote a test pinning Marcode behaviorNo. The only test change is usageMerge.test.ts moving with its module; no replacement pin was needed.
Coupled vendored subtrees (pnpm-workspace.yaml.repos/effect-smol, infra/relay/package.json.repos/alchemy-effect)Neither source moved, so no sync:repos companion change is required.

Hotspot decisions

  • apps/mobile/** (owner: mobile) — combined, not chosen. Upstream's usage dashboard is taken in full; Marcode's branding strings in SettingsRouteScreen.tsx and Stack.tsx are retained on top.
  • packages/shared/package.json — combined. Upstream's two new subpath exports sit alongside Marcode's ./fractional-rank export. Stays barrel-free per AGENTS.md.
  • No other hotspot path in .github/upstream-sync.yml was touched: nothing in the unified workspace tree, floating editor, sidebar, right panel, branding, provider runtime, or persistence migrations.

One thing to know about .github/workflows/web-preview.yml

Taken from upstream unchanged, on the "take their refactor" principle — rewriting it would only manufacture conflicts in future syncs. It is inert for Marcode: it runs only on same-repo PRs explicitly labelled preview:web, it is not one of the four required checks, and without VERCEL_TOKEN / VERCEL_ORG_ID / VERCEL_PROJECT_ID it exits with an explicit "missing secrets" error rather than deploying anything. Its Deploy web preview job already reported skipped on this PR, which is the expected behaviour. If Marcode never wants hosted-web previews, deleting the file is a one-line follow-up; leaving it costs nothing until someone applies the label.

UI Changes

A new mobile Usage screen (Settings → Usage) with a daily provider-stacked chart — native Swift Charts on iOS, a View-based fallback elsewhere. Not captured live: this sync ran headless in a Linux container with no iOS Simulator or Android Emulator, so the screen is verified by typecheck and static analysis only. Per docs/operations/upstream-sync.md, drive the real mobile surface before taking this out of draft.

Verification

Local checks were scoped to what the merge touched, per AGENTS.md — the full workspace suite was not run locally.

CommandResult
npx vp test run packages/shared/src/usageMerge.test.ts9/9 pass
npx vp test run apps/web/src/components/usage/UsageProviderChart.test.ts9/9 pass
npx vp test run apps/mobile/src/lib/adaptive-navigation.test.ts7/7 pass
npx vp run --filter @t3tools/shared typecheckexit 0
npx vp run --filter @t3tools/web typecheckexit 0
npx vp run --filter @t3tools/mobile typecheckexit 0
npx vp fmt --check on all 18 changed filesall correctly formatted
npx vp lint on apps/mobile/src/features/usage, apps/mobile/src/state, apps/mobile/src/features/settings, apps/web/src/components/usage, apps/web/src/state, packages/shared/srcexit 0
node scripts/mobile-native-static-check.tsexit 0

Post-merge audit: zero unmerged paths, zero conflict markers, no .bak artifacts, clean worktree.

CI

All four required checks are green on 123fe314, in run 31320792146, attempt 2:

JobResult
Check✅ success
Test✅ success
Mobile Native Static Analysis✅ success
Release Smoke✅ success

Attempt 1 shows as cancelled and should be ignored. Its Test job ran the suite in 7m25s — matching the 8m baseline on main — but the check-runs API kept reporting in_progress long after the job had settled, so it was cancelled and re-run on the assumption the runner had hung. Nothing about the diff was involved, and attempt 2 is the clean record.

Not verified: live mobile runtime (no simulator/emulator in the sync container). swiftlint / ktlint / detekt were skipped locally as not installed, but CI's Mobile Native Static Analysis job ran them and passed.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes — mobile UI could not be driven in this headless container; see UI Changes
  • I included a video for animation/interaction changes — same reason

@maarcomaarco added the upstream-sync Upstream T3 Code sync label Aug 9, 2026 — with Claude
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XL labels Aug 9, 2026
@github-actions

github-actionsBot commented Aug 9, 2026

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire11.3 KiB11.3 KiB−28 B (−0.2%)15.1 KiB
CodexThread snapshot wire5.5 KiB5.5 KiB+1 B (+0.0%)7.3 KiB
CodexLive turn WebSocket wire5.9 KiB5.9 KiB−29 B (−0.5%)7.8 KiB
CodexLive turn WebSocket decoded49.7 KiB49.7 KiB0 B (0.0%)66.4 KiB
CodexLive turn messages16160 (0.0%)21
ClaudeTotal thread wire11.3 KiB11.3 KiB+12 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire5.5 KiB5.5 KiB+11 B (+0.2%)7.3 KiB
ClaudeLive turn WebSocket wire5.8 KiB5.8 KiB+1 B (+0.0%)7.8 KiB
ClaudeLive turn WebSocket decoded50.6 KiB50.6 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages16160 (0.0%)21

Baseline: df91c6c · PR result: 123fe31 · 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: 94.6 KiB
  • Claude decoded thread snapshot: 95.4 KiB

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

@maarco
maarco marked this pull request as ready for review August 9, 2026 19:54
@maarco
maarco merged commit 8a6745f into mainAug 9, 2026
20 of 21 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XLupstream-syncUpstream T3 Code syncvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@maarco@t3dotgg@juliusmarminge@claude