Skip to content

fix(web): Dark+ and Light+ themes import instead of colliding with built-in ids - #14499

Merged
juliusmarminge merged 2 commits into
pingdotgg:mainfrom
flamboh:t3code/theme-import-reserved-ids
Oct 1, 2026
Merged

juliusmarminge merged 2 commits into
pingdotgg:mainfrom
flamboh:t3code/theme-import-reserved-ids

Conversation

@flamboh

@flamboh flamboh commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Note

🤖 Claude Opus 5.5 on behalf of Oliver

Importing a VS Code theme whose name slugs to a reserved theme id fails. Dark+ and Light+ slug to dark and light, so parseThemeFile throws The theme id "dark" is reserved. and the import is rejected.

The VS Code importer now checks the id it would generate from the theme name. If that id is reserved, it passes an explicit <id>-vscode id instead (Dark+ becomes dark-vscode). The label stays as the theme's own name, and non-reserved names are unchanged.

Once Dark+ and Light+ can import, selecting both would pair them. Stripping the appearance words leaves only +, which would produce a dual-mode theme named + with the id custom-theme. Pairing now requires the stripped name to keep at least one letter or digit, so these two stay as separate themes.

Split from #9477. The color-role and visibility fixes from that PR go in a separate PR.

Verification

  • Added a Dark+ test. It fails on main with the reserved-id error and passes with this change.
  • Added a Dark+ / Light+ pairing test. It fails without the pairing guard.
  • vp test run apps/web/src/vscodeThemeImport.test.ts (18 passed)
  • vp lint and vp fmt --check on the changed files
  • vp run --filter @t3tools/web typecheck

Made with Claude Opus 5.5 in Claude Code (T3 Code).

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Oct 1, 2026
Comment thread apps/web/src/vscodeThemeImport.ts
@coderabbitai

coderabbitai Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: pingdotgg/t3code/.coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: b0d2d8dd-c73c-42ca-9434-4280f9f307e6

📥 Commits

Reviewing files that changed from the base of the PR and between ea00d60 and f035003.

📒 Files selected for processing (2)
  • apps/web/src/vscodeThemeImport.test.ts
  • apps/web/src/vscodeThemeImport.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 6 remain after this review.


📝 Walkthrough

Walkthrough

VS Code theme parsing now assigns a -vscode suffix when a generated ID is reserved. Pairing now leaves themes unpaired when their names contain no alphanumeric characters after removing “light” or “dark”. Tests cover reserved IDs and separate handling of “Light+” and “Dark+”.

Changes

VS Code theme import handling

Layer / File(s) Summary
Generate and verify VS Code theme IDs
apps/web/src/vscodeThemeImport.ts, apps/web/src/vscodeThemeImport.test.ts
parseVsCodeThemeFile derives an ID from the resolved name and appends -vscode when the generated ID is reserved. The test checks that “Dark+” retains its label and receives dark-vscode.
Restrict theme pairing to alphanumeric names
apps/web/src/vscodeThemeImport.ts, apps/web/src/vscodeThemeImport.test.ts
Pairing leaves a theme unpaired when removing “light” or “dark” leaves no alphanumeric character. The test checks that “Light+” and “Dark+” remain separate themes.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to f0350

Reserved-name themes can be imported without changing their labels, and punctuation-only Light+/Dark+ themes remain separate. No concrete merge-blocking issue is established; the change appears ready subject to normal checks.

Architecture Summary

Architecture risk: 🔵 Low · up to f0350

The change affects 1 system.

Changed systems: apps/web

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — apps/web (ui) was modified; 2 changed files map to changed impact.

Before / after behavior

  • observed — Modified behavior in apps/web/src/vscodeThemeImport.test.ts: Added a test asserting that parsing Dark+ preserves its label while assigning ID dark-vscode instead of reserved ID dark.
  • observed — Modified behavior in apps/web/src/vscodeThemeImport.test.ts: Added a pairing test asserting that Light+ and Dark+ produce separate themes with IDs light-vscode and dark-vscode and retain their labels.
  • observed — Modified behavior in apps/web/src/vscodeThemeImport.ts: The import list adds isReservedThemeId and themeIdFromName, used to validate the generated ID for an imported theme.
  • observed — Modified behavior in apps/web/src/vscodeThemeImport.ts: parseVsCodeThemeFile resolves the theme name once, generates an ID from it, and supplies a -vscode-suffixed ID when that generated ID is reserved; previously it passed the resolved name directly without setting an ID.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 2 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main fix: preventing Dark+ and Light+ theme imports from colliding with reserved built-in IDs.
Description check ✅ Passed The description explains the problem, the implementation, and focused verification results. It does not use the required Problem, Change, or Scope and approval headings, and it does not provide explic…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


Comment @coderabbitai help to get the list of available commands.

@macroscopeapp

macroscopeapp Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at f035003

Macroscope's review found this PR approvable — This is a small, tested importer fix that assigns reserved VS Code theme names safe IDs and avoids merging themes when the stripped name is only punctuation. Normal theme IDs and pairing behavior remain unchanged, with no product-default or static-analysis configuration impact.

You can add or adjust custom eligibility rules. Learn more.

@github-actions github-actions Bot added size:S 10-29 changed lines (additions + deletions). and removed size:XS 0-9 changed lines (additions + deletions). labels Oct 1, 2026
@juliusmarminge juliusmarminge added the macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews label Oct 1, 2026 — with ChatGPT Codex Connector
@juliusmarminge
juliusmarminge merged commit 1905846 into pingdotgg:main Oct 1, 2026
25 of 26 checks passed
Laurin-Notemann pushed a commit to otterware-app/otter-code that referenced this pull request Oct 1, 2026
Merges origin/main (1905846) into t3code/codex-turn-mapping (f3eb99e).
Brings in pingdotgg#14375, pingdotgg#10963, pingdotgg#14351, pingdotgg#14462 (vite-plus 1.0), pingdotgg#14479, pingdotgg#14480,
pingdotgg#14485, pingdotgg#14486, pingdotgg#14490, pingdotgg#13612 (threads without a project), pingdotgg#14497 and
pingdotgg#14499. No new migrations on main.

V1 files V2 deleted (kept deleted):
- provider/Layers/ClaudeAdapter(.test).ts: pingdotgg#14497 ignores a result that
  answers a different Claude turn (an echoed user_message_uuid(s) that is not
  the active turn's, or a non-human origin), so a /compact queued behind a
  Claude-initiated turn gets its own result. V2 covers part of this.
  ClaudeAdapterV2.ts:5913 drops the zero-turn task-notification result that
  pingdotgg#14497's test sends, and :6178 sends a positive-turn task-notification wake
  to a continuation run once the process echoes early. Two cases are not
  covered: a positive-turn task-notification wake before the process's first
  early echo is accepted as the prompt's result (:6161, :5945), and V2 checks
  only origin "task-notification" (:2289), not other non-human origins. Both
  are left for a separate fix in ClaudeAdapterV2, not ported here.
- server.test.ts: pingdotgg#13612's tests for the V1 WebSocket dispatch path. The
  stacked ScratchWorkspace service PR adds service tests instead.

Content conflicts:
- relay/AgentAwarenessRelay.test.ts: V2's tests with pingdotgg#14462's vite-plus 1.0
  API (describe.sequential -> describe(name, { concurrent: false }, ...)).
  V2 has no signRelayAgentActivityPublishProof block, so only startup
  catch-up changes.
- web performance.bench.ts and client-runtime remotePerformance.bench.ts:
  V2's benchmarks (V2 projection fixtures, message updates) in pingdotgg#14462's
  test(name, ({ bench }) => bench(...).run(options)) form.
- KeybindingsSettings.logic.test.ts: V2's order (usage.open ranked first,
  checked against both binding orders). Main's compareCommands and
  chat.newWithoutProject merged cleanly into the logic and defaults.
- contracts/rpc.ts: both V2's projects.mutate and pingdotgg#13612's
  projects.ensureScratch (main's contract shape), with both import sets.
- ws.ts: V2's side everywhere. pingdotgg#13612's V1 dispatch additions are not
  brought back. projects.ensureScratch is a stub that fails with "Threads
  without a project are not available yet.", and the config answer omits
  scratchWorkspaceRoot, so web and mobile do not offer the feature. The
  stacked ScratchWorkspace service PR implements both.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
adampeterhiggins added a commit to adampeterhiggins/t3code that referenced this pull request Oct 1, 2026
* fix(web): name the step that registers a mobile client (pingdotgg#10963)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* test(desktop): Keep WSL busy-runtime fixtures visible when sh is bash (pingdotgg#14351)

* chore: bump vite-plus to 1.0 (pingdotgg#14462)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(web): show double bolts for Codex Ultrafast (pingdotgg#14479)

* docs: define contribution triage policy (pingdotgg#14480)

* docs: use explicit contribution triage exemptions (pingdotgg#14485)

* fix(server): Grok CLIs older than 1.0.13 are marked broken (pingdotgg#14486)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(clients): hide disconnected environments when adding projects (pingdotgg#14490)

* feat: start threads without a project (pingdotgg#13612)

Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(server): Claude /compact no longer ends early and leaves the thread busy (pingdotgg#14497)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(web): Dark+ and Light+ themes import instead of colliding with built-in ids (pingdotgg#14499)

* fix(web): make composer suggestions usable with screen readers (pingdotgg#10154)

Co-authored-by: Khai Shern, Toh <khaishern8235@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* perf(release): build and publish npm platform packages concurrently (pingdotgg#14028)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(ci): run PR checks side by side and balance server shards (pingdotgg#14025)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(release): trim Windows packaging setup (pingdotgg#14037)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(release): start Windows builds without waiting for the Linux job (pingdotgg#14027)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(release): build Vercel deployments early and go live after publish (pingdotgg#14029)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(server): Claude subagents with their own model no longer show the parent's model (pingdotgg#14540)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* feat(web): restart the agent session from cmd+k to load new skills and plugins (pingdotgg#14542)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(web): hotkey settings record plain keys and Tab (pingdotgg#14548)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(release): Windows CLI smoke test no longer fails on temp dir cleanup (pingdotgg#14553)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* feat: start a new project from just a name (pingdotgg#14527)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Seth <sethmr21@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Mike Olson <mwolson@member.fsf.org>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Co-authored-by: Andrew Johnson <andrew@johnson5.net>
Co-authored-by: Khai Shern, Toh <khaishern8235@gmail.com>
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 2, 2026
## What's Changed
* fix(shared): merge OpenCode Go limits by credential by @Yash-Singh1 in pingdotgg/t3code#14209
* feat(codex): regenerate protocol bindings for Codex 0.159 by @juliusmarminge in pingdotgg/t3code#14311
* test(server): stop pinning codex install advisory to a release range by @maria-rcks in pingdotgg/t3code#14323
* chore: stop CodeRabbit from editing PR descriptions by @t3dotgg in pingdotgg/t3code#14307
* fix(web): unresolved pull request links use the compact link tooltip by @flamboh in pingdotgg/t3code#14243
* fix(client-runtime): keep model ids in inline code from becoming file chips by @otavio in pingdotgg/t3code#13909
* fix(web): show the agent's question on user-input timeline rows by @saphid in pingdotgg/t3code#12900
* fix(web): open workspace root links in the file explorer by @saphid in pingdotgg/t3code#12449
* fix(grok): recover from crashed provider sessions by @saphid in pingdotgg/t3code#10607
* fix(web): let command menu descriptions use the full row width by @jakaskerjanc in pingdotgg/t3code#8865
* fix(web): multi-PR badges open the linked pull requests panel by @flamboh in pingdotgg/t3code#13211
* fix(web): stop clipping the bottoms of diff file names by @shivamhwp in pingdotgg/t3code#14375
* fix(web): name the step that registers a mobile client by @Sethmr in pingdotgg/t3code#10963
* test(desktop): Keep WSL busy-runtime fixtures visible when sh is bash by @mwolson in pingdotgg/t3code#14351
* chore: bump vite-plus to 1.0 by @juliusmarminge in pingdotgg/t3code#14462
* fix(web): show double bolts for Codex Ultrafast by @t3dotgg in pingdotgg/t3code#14479
* docs: define contribution triage policy by @juliusmarminge in pingdotgg/t3code#14480
* docs: use explicit contribution triage exemptions by @juliusmarminge in pingdotgg/t3code#14485
* fix(server): Grok CLIs older than 1.0.13 are marked broken by @juliusmarminge in pingdotgg/t3code#14486
* fix(clients): hide disconnected environments when adding projects by @juliusmarminge in pingdotgg/t3code#14490
* feat: start threads without a project by @t3dotgg in pingdotgg/t3code#13612
* fix(server): Claude /compact no longer ends early and leaves the thread busy by @t3dotgg in pingdotgg/t3code#14497
* fix(web): Dark+ and Light+ themes import instead of colliding with built-in ids by @flamboh in pingdotgg/t3code#14499
* fix(web): make composer suggestions usable with screen readers by @akj in pingdotgg/t3code#10154
* perf(release): build and publish npm platform packages concurrently by @t3dotgg in pingdotgg/t3code#14028
* perf(ci): run PR checks side by side and balance server shards by @t3dotgg in pingdotgg/t3code#14025
* perf(release): trim Windows packaging setup by @t3dotgg in pingdotgg/t3code#14037
* perf(release): start Windows builds without waiting for the Linux job by @t3dotgg in pingdotgg/t3code#14027
* perf(release): build Vercel deployments early and go live after publish by @t3dotgg in pingdotgg/t3code#14029
* fix(server): Claude subagents with their own model no longer show the parent's model by @t3dotgg in pingdotgg/t3code#14540
* feat(web): restart the agent session from cmd+k to load new skills and plugins by @t3dotgg in pingdotgg/t3code#14542
* fix(web): hotkey settings record plain keys and Tab by @t3dotgg in pingdotgg/t3code#14548
* fix(release): Windows CLI smoke test no longer fails on temp dir cleanup by @t3dotgg in pingdotgg/t3code#14553
* feat: start a new project from just a name by @t3dotgg in pingdotgg/t3code#14527
* fix(desktop): agent clicks in the browser no longer pop Save dialogs by @t3dotgg in pingdotgg/t3code#14573
* chore(mobile): upgrade to Expo SDK 58 and React Native 0.88 RC by @juliusmarminge in pingdotgg/t3code#12045
* feat(mobile): render the Android subscription widget with expo-widgets by @juliusmarminge in pingdotgg/t3code#12046
* feat(mobile): degrade the agent Live Activity once its content goes stale by @juliusmarminge in pingdotgg/t3code#12047
* feat(notifications): stack agent alerts by thread on both platforms by @juliusmarminge in pingdotgg/t3code#12048
* chore(mobile): drive dev-menu suppression from the dev-client launch URL by @juliusmarminge in pingdotgg/t3code#12049
* fix(mobile): read display scale and width from the view's scene, not UIScreen.main by @juliusmarminge in pingdotgg/t3code#12050
* refactor(mobile): adopt Expo Modules 2.0 for function-only native members by @juliusmarminge in pingdotgg/t3code#12051
* feat(mobile): suppress only the on-screen thread's alert on Android by @juliusmarminge in pingdotgg/t3code#12052
* feat(marketing): replace the screenshot crop with a designed social card by @flamboh in pingdotgg/t3code#13487
* docs: update user count in AGENTS.md by @Kamkmgamer in pingdotgg/t3code#11413
* test(web): remove duplicate sidebar ordering tests by @t3-code[bot] in pingdotgg/t3code#14558
* fix: cloned projects show their favicon instead of a monogram by @t3dotgg in pingdotgg/t3code#14635
* docs: server features are services, and handlers stay thin by @juliusmarminge in pingdotgg/t3code#14613
* fix(ci): pin eas-cli so mobile PR previews deploy again by @juliusmarminge in pingdotgg/t3code#14659
* fix(server): background GitHub polling uses ~74% fewer calls with batched GraphQL by @t3dotgg in pingdotgg/t3code#14673
* fix(web): show the Docker icon on dockerfile code blocks by @chrisdeeming in pingdotgg/t3code#14675
* feat(web): update providers on every machine with one click by @t3dotgg in pingdotgg/t3code#14678
* feat(web): beta Working section hides busy threads until they need you by @t3dotgg in pingdotgg/t3code#13926
* fix(web): PR checks status collapses to its icon instead of wrapping by @flamboh in pingdotgg/t3code#14700
* fix: remove outdated restart setting update advice by @t3-code[bot] in pingdotgg/t3code#14710
* fix(web): keep the terminal toggle clear of the last header action by @Mnigos in pingdotgg/t3code#13426
* fix(web): group composer undo the way the Lexical composer did by @chrisdeeming in pingdotgg/t3code#14674
* fix(desktop): markdown pages no longer render invisible in the dark-mode browser by @shivamhwp in pingdotgg/t3code#14601
* fix(mobile): one No project row at the top of the project picker by @juliusmarminge in pingdotgg/t3code#14532
* Remove unused isCloudDebugEnabled and isTerminalDebugEnabled by @kridaydave in pingdotgg/t3code#14367
* fix(mobile): update Expo 58 to restore widgets and Live Activities by @juliusmarminge in pingdotgg/t3code#14734
* fix(mobile): project picker cards match the settings card color by @juliusmarminge in pingdotgg/t3code#14756
* fix(markdown): keep Windows paths intact in link and image destinations by @SunkenInTime in pingdotgg/t3code#12615

## New Contributors
* @jakaskerjanc made their first contribution in pingdotgg/t3code#8865
* @Sethmr made their first contribution in pingdotgg/t3code#10963
* @Kamkmgamer made their first contribution in pingdotgg/t3code#11413

**Full Changelog**: pingdotgg/t3code@v0.0.44...v0.0.45

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.45
IanWorley added a commit to IanWorley/t3code that referenced this pull request Oct 3, 2026
* fix(web): stop clipping the bottoms of diff file names (pingdotgg#14375)

* fix(web): name the step that registers a mobile client (pingdotgg#10963)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* test(desktop): Keep WSL busy-runtime fixtures visible when sh is bash (pingdotgg#14351)

* chore: bump vite-plus to 1.0 (pingdotgg#14462)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(web): show double bolts for Codex Ultrafast (pingdotgg#14479)

* docs: define contribution triage policy (pingdotgg#14480)

* docs: use explicit contribution triage exemptions (pingdotgg#14485)

* fix(server): Grok CLIs older than 1.0.13 are marked broken (pingdotgg#14486)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(clients): hide disconnected environments when adding projects (pingdotgg#14490)

* feat: start threads without a project (pingdotgg#13612)

Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(server): Claude /compact no longer ends early and leaves the thread busy (pingdotgg#14497)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(web): Dark+ and Light+ themes import instead of colliding with built-in ids (pingdotgg#14499)

* fix(web): make composer suggestions usable with screen readers (pingdotgg#10154)

Co-authored-by: Khai Shern, Toh <khaishern8235@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* perf(release): build and publish npm platform packages concurrently (pingdotgg#14028)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(ci): run PR checks side by side and balance server shards (pingdotgg#14025)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(release): trim Windows packaging setup (pingdotgg#14037)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(release): start Windows builds without waiting for the Linux job (pingdotgg#14027)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(release): build Vercel deployments early and go live after publish (pingdotgg#14029)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(server): Claude subagents with their own model no longer show the parent's model (pingdotgg#14540)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* feat(web): restart the agent session from cmd+k to load new skills and plugins (pingdotgg#14542)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(web): hotkey settings record plain keys and Tab (pingdotgg#14548)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(release): Windows CLI smoke test no longer fails on temp dir cleanup (pingdotgg#14553)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* feat: start a new project from just a name (pingdotgg#14527)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(desktop): agent clicks in the browser no longer pop Save dialogs (pingdotgg#14573)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* chore(mobile): upgrade to Expo SDK 58 and React Native 0.88 RC (pingdotgg#12045)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(mobile): render the Android subscription widget with expo-widgets (pingdotgg#12046)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(mobile): degrade the agent Live Activity once its content goes stale (pingdotgg#12047)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(notifications): stack agent alerts by thread on both platforms (pingdotgg#12048)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* chore(mobile): drive dev-menu suppression from the dev-client launch URL (pingdotgg#12049)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): read display scale and width from the view's scene, not UIScreen.main (pingdotgg#12050)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* refactor(mobile): adopt Expo Modules 2.0 for function-only native members (pingdotgg#12051)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(mobile): suppress only the on-screen thread's alert on Android (pingdotgg#12052)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(marketing): replace the screenshot crop with a designed social card (pingdotgg#13487)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* docs: update user count in AGENTS.md (pingdotgg#11413)

* test(web): remove duplicate sidebar ordering tests (pingdotgg#14558)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* Update marketing stats for GitHub stars and users

* fix: cloned projects show their favicon instead of a monogram (pingdotgg#14635)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* docs: server features are services, and handlers stay thin (pingdotgg#14613)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(ci): pin eas-cli so mobile PR previews deploy again (pingdotgg#14659)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(server): background GitHub polling uses ~74% fewer calls with batched GraphQL (pingdotgg#14673)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(web): show the Docker icon on dockerfile code blocks (pingdotgg#14675)

* feat(web): update providers on every machine with one click (pingdotgg#14678)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* feat(web): beta Working section hides busy threads until they need you (pingdotgg#13926)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(web): PR checks status collapses to its icon instead of wrapping (pingdotgg#14700)

* fix: remove outdated restart setting update advice (pingdotgg#14710)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(web): keep the terminal toggle clear of the last header action (pingdotgg#13426)

* fix(web): group composer undo the way the Lexical composer did (pingdotgg#14674)

* fix(desktop): markdown pages no longer render invisible in the dark-mode browser (pingdotgg#14601)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(mobile): one No project row at the top of the project picker (pingdotgg#14532)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Remove unused isCloudDebugEnabled and isTerminalDebugEnabled (pingdotgg#14367)

* fix(mobile): update Expo 58 to restore widgets and Live Activities (pingdotgg#14734)

* fix(mobile): project picker cards match the settings card color (pingdotgg#14756)

* chore(mobile): bump app version to 1.4.0

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(markdown): keep Windows paths intact in link and image destinations (pingdotgg#12615)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(mobile): opening a thread no longer crashes Android release builds (pingdotgg#14850)

* chore(release): prepare v0.0.45

* fix(server): stop a second server from resending Claude turns (pingdotgg#13295)

* docs(triage): leave protected PRs open (pingdotgg#14852)

* feat(orchestrator): introduce new orchestrator (pingdotgg#2829)

Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Vitalii Yehorov <vitalyiegorov@gmail.com>
Co-authored-by: Jake Leventhal <jakeleventhal@me.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Alex Southwell <saphid@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Nicholas Wasmiller <derped@mineperial.com>
Co-authored-by: PB <poilmb@gmail.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Gabriel De Andrade <30420087+gabrielelpidio@users.noreply.github.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: scratchyone <scratchywon@gmail.com>
Co-authored-by: Dominic Roy <dominic@sdko.org>
Co-authored-by: chukfinley <chuk@chuk.dev>
Co-authored-by: Primož Ajdišek <bigpod@bigpod.si>
Co-authored-by: benthecarman <benthecarman@live.com>
Co-authored-by: NaveDanan <nave0712@gmail.com>
Co-authored-by: aaditagrawal <103925638+aaditagrawal@users.noreply.github.com>
Co-authored-by: Aditya Garud <153842990+yashranaway@users.noreply.github.com>
Co-authored-by: Nick Anisimov <n.anisimov.23@gmail.com>
Co-authored-by: MacKinley Smith <smithmackinley@gmail.com>
Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: AKolenda <akole779@mtroyal.ca>
Co-authored-by: Guillermo Casanova <75276669+Gigioxx@users.noreply.github.com>
Co-authored-by: Otavio Salvador <otavio@ossystems.com.br>
Co-authored-by: Shirish Pothi <183252392+shirishpothi@users.noreply.github.com>
Co-authored-by: Ishaan Kothari <ishaanko.mail@gmail.com>
Co-authored-by: Bob Fowler <bob@rjf.ca>
Co-authored-by: Anton Bezdenezhnykh <gamer392@yandex.ru>
Co-authored-by: ValeraZSD <48602572+ValeraZSD@users.noreply.github.com>
Co-authored-by: Ephraim <ephraim39hr14m@gmail.com>
Co-authored-by: Ryan Ilano <ryanilano@users.noreply.github.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: maco <gosarmarcel7@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Tristan Knight <admin@snappeh.com>
Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Co-authored-by: kamkm <99585688+Kamkmgamer@users.noreply.github.com>
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>

* chore(mobile): bump app version to 2.0.0

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(server): Claude MCP tools show their names and icons (pingdotgg#14860)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(server): released builds keep the OpenCode policy for their own version (pingdotgg#14863)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(server): idle shells stop reloading every project once a minute (pingdotgg#14893)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(server): Claude model changes no longer kill running background agents (pingdotgg#14726)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(server): API-key Codex installs no longer warn on every start (pingdotgg#14903)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>

* fix(server): steers keep the newest next-turn selection (pingdotgg#14725)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(settings): Pi and ACP Registry no longer show an Early Access badge (pingdotgg#14915)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(server): Codex auth tokens are an omitted key, never undefined (pingdotgg#14908)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>

* chore(lint): forbid declaring tests inside for loops (pingdotgg#14921)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(desktop): markdown no longer loads invisible in new dark-mode browser tabs (pingdotgg#14727)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* refactor(pi): remove legacy ACP connection

* fix(providers): preserve Kiro and VibeProxy behavior

---------

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Seth <sethmr21@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Mike Olson <mwolson@member.fsf.org>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Co-authored-by: Andrew Johnson <andrew@johnson5.net>
Co-authored-by: Khai Shern, Toh <khaishern8235@gmail.com>
Co-authored-by: kamkm <99585688+Kamkmgamer@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Chris Deeming <chris@xenforo.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Igor Makowski <56691628+Mnigos@users.noreply.github.com>
Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Kriday Dave <technocratix902@gmail.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: Aaron Queen <bompus@users.noreply.github.com>
Co-authored-by: Cestercian <yashafaid@gmail.com>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Vitalii Yehorov <vitalyiegorov@gmail.com>
Co-authored-by: Jake Leventhal <jakeleventhal@me.com>
Co-authored-by: Alex Southwell <saphid@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Nicholas Wasmiller <derped@mineperial.com>
Co-authored-by: PB <poilmb@gmail.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Gabriel De Andrade <30420087+gabrielelpidio@users.noreply.github.com>
Co-authored-by: scratchyone <scratchywon@gmail.com>
Co-authored-by: Dominic Roy <dominic@sdko.org>
Co-authored-by: chukfinley <chuk@chuk.dev>
Co-authored-by: Primož Ajdišek <bigpod@bigpod.si>
Co-authored-by: benthecarman <benthecarman@live.com>
Co-authored-by: NaveDanan <nave0712@gmail.com>
Co-authored-by: aaditagrawal <103925638+aaditagrawal@users.noreply.github.com>
Co-authored-by: Aditya Garud <153842990+yashranaway@users.noreply.github.com>
Co-authored-by: Nick Anisimov <n.anisimov.23@gmail.com>
Co-authored-by: MacKinley Smith <smithmackinley@gmail.com>
Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: AKolenda <akole779@mtroyal.ca>
Co-authored-by: Guillermo Casanova <75276669+Gigioxx@users.noreply.github.com>
Co-authored-by: Otavio Salvador <otavio@ossystems.com.br>
Co-authored-by: Shirish Pothi <183252392+shirishpothi@users.noreply.github.com>
Co-authored-by: Ishaan Kothari <ishaanko.mail@gmail.com>
Co-authored-by: Bob Fowler <bob@rjf.ca>
Co-authored-by: Anton Bezdenezhnykh <gamer392@yandex.ru>
Co-authored-by: ValeraZSD <48602572+ValeraZSD@users.noreply.github.com>
Co-authored-by: Ephraim <ephraim39hr14m@gmail.com>
Co-authored-by: Ryan Ilano <ryanilano@users.noreply.github.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: maco <gosarmarcel7@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Tristan Knight <admin@snappeh.com>
aorwall added a commit to aorwall/t3code that referenced this pull request Oct 3, 2026
Merges `pingdotgg/t3code` `0cf482b08` (13 commits, base `0fcd5f906`)
into the fork. Branches from `main`; no other merge PR is open.

## Merge
- Landed 65 files, the same 65 the upstream range changed. Fork delta:
756 files.
- One conflict, `apps/web/src/components/chat/DraftHeroHeadline.tsx`
(converged): took upstream's pingdotgg#13612 picker rewrite, and its
now-conditional separator and the New project item stay behind
`FEATURES.projectManagement`.
- `pnpm-lock.yaml` auto-merged without conflict but was re-derived
anyway, from upstream's copy plus `install.mjs`.
- `projects.ensureScratch` now declares `UnsupportedMethodError` (the
ADD bucket from `unsupported-methods.mjs`).
- Owned-concern sweep: no hits. No new upstream workflows.
- Verification: the full `verify.mjs` passed all ten checks. Package
`t3` failed in the parallel test run and passed when run alone (machine
load, not the merge).

## Usable as-is
- Screen-reader-usable composer suggestions (pingdotgg#10154)
- VS Code Dark+ / Light+ theme import no longer collides with built-in
ids (pingdotgg#14499)
- Disconnected environments hidden when adding projects (pingdotgg#14490)
- Double bolts for Codex Ultrafast (pingdotgg#14479); diff file names no longer
clipped (pingdotgg#14375); mobile registration step named (pingdotgg#10963)
- vite-plus 1.0 (pingdotgg#14462), contribution triage docs and skill (pingdotgg#14480,
pingdotgg#14485), WSL test fixture fix (pingdotgg#14351)

## Unsupported in Moatless / needs implementation
- **Threads without a project** (pingdotgg#13612): new `projects.ensureScratch`
RPC plus `ServerConfig.scratchWorkspaceRoot`. The draft hero, command
palette, empty-state hero and the `chat.newWithoutProject` shortcut all
check `scratchWorkspaceRoot`, which Moatless never sends, so none of
them appear and no fork gate was needed. Implementing it would mean
Moatless starting a thread with no repository, reporting a scratch root,
and dispatching `projects.ensureScratch`; then drop the union entry.
Recorded in `docs/fork/gaps.md` under *Methods the backend does not
dispatch*.

## Backend behavior to consider reproducing in Moatless
- **Claude `/compact` leaving a thread busy** (pingdotgg#14497,
`apps/server/src/provider/Layers/ClaudeAdapter.ts`): ignore an SDK
result whose `user_message_uuids` do not echo the active turn id, or
whose `origin` is non-human, so a result from a turn Claude started
itself does not end the user's turn. Recorded under *Runtime fixes
upstream made to its own server*.
- Grok CLIs older than 1.0.13 marked broken in the model manifest
(pingdotgg#14486). Moatless runs no Grok, so no gap entry was added.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---
Moatless task:
https://moatless.soaplabstest.com/tasks/88ac435e-a947-40b6-b2d2-452fc11f7aee
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews size:S 10-29 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants