Skip to content

fix(web): stop the bar under the composer popping in after threads load - #10727

Merged
t3dotgg merged 1 commit into
mainfrom
t3code/fix-composer-bottom-bar-flicker
Sep 8, 2026
Merged

t3dotgg merged 1 commit into
mainfrom
t3code/fix-composer-bottom-bar-flicker

Conversation

@t3dotgg

@t3dotgg t3dotgg commented Sep 8, 2026

Copy link
Copy Markdown
Member

Opening a thread whose messages were not cached painted the composer first, then the strip under it (env mode, branch, model and mode controls while resting) mounted a beat later and pushed the composer up. Subtle layout shift on most thread switches.

The strip read the thread through useThread, which stays null until the full thread detail (messages, activities) arrives. Every field it uses is on the thread shell, which the sidebar already renders from, so it is present before the route mounts. The strip, the branch selector, and the header git control now read the shell. The merge helper already treats the shell as the authoritative source for branch, worktree, and project, so this is the same data the detail path resolved to.

Created with Claude Fable 5.1 in Claude Code.

Summary by CodeRabbit

  • Bug Fixes
    • Improved thread state loading in branch selection and Git actions.
    • Reduced delays when accessing server thread information, including scenarios involving draft sessions.
    • Preserved branch synchronization and live update behavior while making thread data available more directly.

The strip under the composer (env mode, branch, resting controls) read the
thread through useThread, which returns null until the full thread detail
arrives. On a thread whose detail was not cached, the composer painted
first and the strip mounted a moment later, pushing the composer up.

Read the thread shell instead. Every field the strip and the header git
control use lives on the shell, which is present before the route renders,
and the merge helper already treats the shell as authoritative for branch,
worktree, and project.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Sep 8, 2026
@macroscopeapp

macroscopeapp Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 386cbef

Macroscope's review found this PR approvable — This is a narrowly scoped UI timing fix that makes existing composer and Git controls use already-available thread-shell metadata, eliminating a layout shift while preserving the existing detail-driven thread views. The affected fields and downstream behavior are straightforward to account for, with no schema, default, infrastructure, or sensitive-data changes.

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

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.6 KiB 13.6 KiB −19 B (−0.1%) 15.1 KiB
Codex Thread snapshot wire 7.0 KiB 7.0 KiB +1 B (+0.0%) 7.3 KiB
Codex Live turn WebSocket wire 6.6 KiB 6.6 KiB −20 B (−0.3%) 7.8 KiB
Codex Live turn WebSocket decoded 57.1 KiB 57.1 KiB 0 B (0.0%) 66.4 KiB
Codex Live turn messages 10 10 0 (0.0%) 21
Claude Total thread wire 13.6 KiB 13.6 KiB −29 B (−0.2%) 15.1 KiB
Claude Thread snapshot wire 7.0 KiB 7.0 KiB −3 B (−0.0%) 7.3 KiB
Claude Live turn WebSocket wire 6.5 KiB 6.5 KiB −26 B (−0.4%) 7.8 KiB
Claude Live turn WebSocket decoded 57.8 KiB 57.8 KiB −44 B (−0.1%) 66.4 KiB
Claude Live turn messages 9 8 −1 (−11.1%) 21

Baseline: b5d8903 · PR result: 386cbef · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 113.9 KiB
  • Claude decoded thread snapshot: 114.6 KiB

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

@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 2a449b79-6a94-48f5-ad74-4abd76d8b0a1

📥 Commits

Reviewing files that changed from the base of the PR and between b5d8903 and 386cbef.

📒 Files selected for processing (3)
  • apps/web/src/components/BranchToolbar.tsx
  • apps/web/src/components/BranchToolbarBranchSelector.tsx
  • apps/web/src/components/GitActionsControl.tsx

Included review availability: Your plan provides up to 10 included reviews per hour; 1 remains after this review.


📝 Walkthrough

Walkthrough

Three web components now use useThreadShell for thread lookup. The changes remove draft-thread-dependent waitForShell options while preserving downstream server-thread consumers.

Changes

Thread shell lookup migration

Layer / File(s) Summary
Update component thread lookups
apps/web/src/components/BranchToolbar.tsx, apps/web/src/components/BranchToolbarBranchSelector.tsx, apps/web/src/components/GitActionsControl.tsx
The components import and call useThreadShell instead of useThread. Draft-thread-dependent waitForShell configuration is removed. Existing downstream consumers remain unchanged.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Merge Risk: ⚪ Minimal · up to 386cb

The composer context strip and git controls now read available thread-shell data rather than waiting for full thread details, preventing the reported layout shift. No concrete current-head merge-blocking risk remains.

Suggested reviewers: juliusmarminge, maria-rcks, extoci

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description explains what changed and why, but it does not follow the required template structure. It omits the UI Changes section and checklist, despite describing a visible UI change. Add the required "## What Changed", "## Why", "## UI Changes", and "## Checklist" sections. Include before/after screenshots for the UI change and a short video if the interaction or layout shift requires motion evidence. Complete the check…
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 3 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the web layout-shift bug and the affected composer area. It is concise and related to the main change.
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.
Full details: Description check

Resolution

Add the required "## What Changed", "## Why", "## UI Changes", and "## Checklist" sections. Include before/after screenshots for the UI change and a short video if the interaction or layout shift requires motion evidence. Complete the checklist items or explain why any item does not apply.

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch t3code/fix-composer-bottom-bar-flicker

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

@t3dotgg
t3dotgg merged commit de545c4 into main Sep 8, 2026
22 checks passed
@t3dotgg
t3dotgg deleted the t3code/fix-composer-bottom-bar-flicker branch September 8, 2026 21:40
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 9, 2026
## What's Changed
* fix(web): honor terminal link browser overrides by @UtkarshUsername in pingdotgg/t3code#10060
* fix(desktop): neutral artwork for stable macOS installer by @t3-code[bot] in pingdotgg/t3code#10820
* fix(web): restore text-only draft project title by @juliusmarminge in pingdotgg/t3code#10821
* refactor(web): consolidate setup wizards into shared components by @juliusmarminge in pingdotgg/t3code#10832
* fix(web): stop the bar under the composer popping in after threads load by @t3dotgg in pingdotgg/t3code#10727
* fix(web): keep the composer footer still while thread data loads by @t3dotgg in pingdotgg/t3code#10768
* fix(desktop): defer keyring loading until macOS cookie import by @simplythatguy in pingdotgg/t3code#10667
* fix(relay): share notification policy and prioritize waiting agents by @juliusmarminge in pingdotgg/t3code#10848
* fix(relay): recheck queued iOS alerts and retain fast completions by @juliusmarminge in pingdotgg/t3code#10849
* fix(mobile): respect notification permission when tokens rotate by @juliusmarminge in pingdotgg/t3code#10850
* fix(mobile): tolerate native Headers without getSetCookie by @juliusmarminge in pingdotgg/t3code#10851

## New Contributors
* @simplythatguy made their first contribution in pingdotgg/t3code#10667

**Full Changelog**: pingdotgg/t3code@v0.0.41-nightly.20260908.1414...v0.0.41-nightly.20260909.1426

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.41-nightly.20260909.1426
pseudoseed added a commit to pseudoseed/t3code_dev that referenced this pull request Sep 9, 2026
…27)

* fix(ui): unify loading and refresh feedback across clients (pingdotgg#9561)

Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* fix(client-runtime): report terminated thread loads (pingdotgg#10216)

* fix(server): settle threads using actual pull request terminal timestamps (pingdotgg#9934)

* fix(clients): persist project icons across reloads and reconnects (pingdotgg#10138)

* fix(mobile): use selected theme across input forms and controls (pingdotgg#10239)

* fix(mobile): keep the new-task draft when switching environment (pingdotgg#10247)

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

* fix(web): keep timestamp tooltip dates in English (pingdotgg#10256)

* fix(web): let authorized clients scrolling reach settings (pingdotgg#10080)

* fix(web): remember usage page selection (pingdotgg#10189)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* fix(server): keep the Antigravity Google sign-in across server restarts (pingdotgg#10244)

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

* fix(antigravity): load user skills from ~/.gemini for every project (pingdotgg#10257)

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

* fix(web): respect reduced motion in shared disclosures (pingdotgg#10258)

* feat(marketing): add a Windows 95 landing page (pingdotgg#10286)

* refactor(web): remove unused runtime wrappers and exports (pingdotgg#10225)

* refactor(web): keep feature component helpers private (pingdotgg#10226)

* refactor(web): keep app utilities private and remove dead helpers (pingdotgg#10227)

* ci: enforce unused runtime exports in the web app (pingdotgg#10228)

* test(desktop): cover Clerk setup through the service (pingdotgg#10284)

* test(desktop): cover WSL hashes through runtime resolution (pingdotgg#10285)

* test(desktop): cover password store through startup (pingdotgg#10287)

* test(desktop): cover WSL paths through public behavior (pingdotgg#10289)

* test(desktop): exercise WSL cache safety through public scripts (pingdotgg#10301)

* test(web): cover file classification through diff ordering (pingdotgg#10304)

* test(web): focus command palette tests on search behavior (pingdotgg#10302)

* fix(web): add project settings to legacy sidebar project menu (pingdotgg#10021)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* test(web): keep Markdown gutter styling private (pingdotgg#10306)

* feat(settings): add shared project defaults and scoped overrides (pingdotgg#9754)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(connections): balance new threads across connected machines (pingdotgg#9895)

* test(web): keep settings viewport comparison private (pingdotgg#10307)

* fix(web): prevent file tree search focus ring clipping (pingdotgg#10175)

* fix(mobile): stop the work log flickering during subagent runs and failing calls (pingdotgg#10273)

* fix(mobile): save linked media from chat (pingdotgg#10271)

* feat(markdown): show the GitHub mark for github.com links (pingdotgg#10324)

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

* fix(marketing): show a real preview card when t3.codes is shared (pingdotgg#10305)

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

* feat(usage): pool subscription limits per provider across accounts and environments (pingdotgg#10300)

* chore(web): remove usage limits demo fixtures (pingdotgg#10330)

* fix(web): expose error disclosure state (pingdotgg#10125)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(web): name the editor picker accurately (pingdotgg#10124)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(web): make task row states readable (pingdotgg#10128)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(web): explain hosted connection prerequisites (pingdotgg#10129)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(web): name combobox chip removal targets (pingdotgg#10127)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(marketing): present the Git workflow as an illustration (pingdotgg#10130)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* feat(mobile): pool usage limits across selected environments (pingdotgg#10334)

* fix(release): space automatic nightlies at least six hours apart (pingdotgg#10272)

* refactor(web): share bulk thread deletion between sidebars (pingdotgg#10106)

* refactor(client): share tool outcome rules (pingdotgg#10122)

* refactor(server): share Claude result status and error mapping (pingdotgg#10296)

* fix(server): settle inactive threads without a PR lookup (pingdotgg#10103)

* fix(ssh): report remote stop failures without losing ownership (pingdotgg#10105)

* perf(server): stop scanning old OpenCode parts (pingdotgg#10116)

* perf(server): avoid full thread reads on turn start (pingdotgg#10108)

* perf(web): skip checkpoint map rebuilds while streaming (pingdotgg#10118)

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

* perf(server): skip plan bodies in thread summaries (pingdotgg#10341)

* fix(server): skip disabled provider instances for text generation fallback (pingdotgg#10346)

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

* fix(server): capture checkpoints before refreshing PR status (pingdotgg#10347)

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

* fix(web): keep manual panel choices during a turn (pingdotgg#10113)

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

* fix(threads): keep completed requests closed across clients (pingdotgg#10123)

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

* perf(server): finish runtime messages without full thread reads (pingdotgg#10120)

Co-authored-by: Ross Cawston <rcawston@users.noreply.github.com>

* refactor(server): let adapters declare context compaction (pingdotgg#10112)

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

* fix(server): link thread PRs without an open client (pingdotgg#10101)

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

* fix(web): show Tux icon for WSL environments (pingdotgg#8511)

* perf(web): speed up folder menu sorting (pingdotgg#10190)

* style(web): fix inconsistencies in new settings layouts (pingdotgg#10177)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* feat(threads): persist manual active thread order (pingdotgg#9729)

* feat(mobile): arrange active threads from both thread lists (pingdotgg#9730)

* feat(web): drag threads across sections with consistent motion (pingdotgg#9731)

* feat(web): simplify sidebar drag destination cues (pingdotgg#9750)

* fix(mobile): keep pending tasks queued when a send fails in flight (pingdotgg#10245)

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

* feat(mobile): show new-task drafts alongside pending tasks in the thread list (pingdotgg#10260)

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

* feat(mobile): allow several new-task drafts per project (pingdotgg#10327)

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

* fix(mobile): slide settled threads out before collapsing (pingdotgg#10345)

* fix(clients): show feedback results in composer banners (pingdotgg#10398)

* fix(server): stop Windows terminal polling from spiking CPU (pingdotgg#9476)

* fix(web): onboarding installs agents without needing Node or npm (pingdotgg#10402)

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

* fix(server): allow settling threads with unanswered async questions (pingdotgg#10400)

* feat(ci): ship stable releases from the latest nightly commit (pingdotgg#10410)

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

* feat(marketing): add a nightly channel to the download page (pingdotgg#10408)

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

* fix(web): keep settings inputs focused during IME composition (pingdotgg#10262)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(server): preserve Codex reset credits during usage updates (pingdotgg#10308)

* docs: link the repository security reporting policy (pingdotgg#10303)

* fix(web): only show auto balance errors after failed checks (pingdotgg#10407)

* fix(web): improve preview recording frame delivery (pingdotgg#10403)

* Modify model and budget settings in ui-consistency.md

Updated model version and adjusted budget limits for PRs and runs.

* Update model and effort in effect-service-conventions

* Fix duplicate maxBudgetPerRun entry in UI consistency

* fix(server): preserve inline provider secrets on redacted saves (pingdotgg#10054)

* Fix formatting of maxBudgetPerPR in conventions file

* fix(web, mobile): replace Apple desktop machine labels (pingdotgg#10396)

* fix(web): hide browser when the right panel starts closing (pingdotgg#10385)

* fix(web): keep settings section headings description-free (pingdotgg#10415)

* fix(usage): read and redeem hub reset credits through CLIProxyAPI (pingdotgg#10395)

* fix(web): deduplicate expanded tool labels and keep errors expandable (pingdotgg#10420)

* fix(server): skip git status scans while the index is locked (pingdotgg#9845)

* fix(mcp): allow text-only preview snapshots (pingdotgg#10232)

* fix(claude): name the expired login or usage limit instead of a generic API error (pingdotgg#10321)

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

* feat(mobile): queue a message while its attachment is still uploading (pingdotgg#10404)

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

* feat(mobile): show when an existing thread has a message waiting in the outbox (pingdotgg#10405)

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

* fix(codex): accept misalignment policy errors on thread resume (pingdotgg#10373)

* fix(server): skip disabled settlement lookups (pingdotgg#10424)

Co-authored-by: adityagarud <garudaditya079@gmail.com>

* fix(server): run OpenCode CLI commands sequentially (pingdotgg#10427)

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

* feat(web): name the drop action while dragging sidebar threads (pingdotgg#10378)

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* perf(web): keep the sidebar responsive during bulk thread updates (pingdotgg#10413)

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

* fix(web): onboarding wizard now supports light mode (pingdotgg#10432)

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

* feat(threads): dismiss async questions without replying (pingdotgg#10431)

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

* fix(web): stop collapsing the composer when it loses focus (pingdotgg#10437)

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

* fix(server): keep interrupted threads resumable after restarts (pingdotgg#10421)

* fix(web): show load balancing note for a single machine (pingdotgg#10433)

* fix(server): follow placeholder branches after checkout updates (pingdotgg#10441)

* fix(mobile): expand single-line tool details in work logs (pingdotgg#10442)

* fix(server): import transcripts with oversized tool records (pingdotgg#10430)

* fix(marketing): deploy site with nightly releases (pingdotgg#10443)

* fix(web): preserve multiline composer drafts during timeline scrolling (pingdotgg#10444)

* fix(server): handle JSON-wrapped titles and verbose Claude output (pingdotgg#10446)

* fix(marketing): restore continuous endorsement scrolling (pingdotgg#10450)

* Revert "fix(marketing): restore continuous endorsement scrolling" (pingdotgg#10454)

* fix(marketing): bring back the endorsement marquee (pingdotgg#10455)

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

* chore: enable CodeRabbit automatic reviews (pingdotgg#10457)

* fix(codex): keep Spark limits from replacing the main allowance (pingdotgg#10458)

* fix(marketing): send 95 nightly downloads to the downloads page (pingdotgg#10460)

* fix(web): composer regains focus when you tab back into T3 Code (pingdotgg#10463)

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

* fix(web): keep sidebar drag dividers clear and gestures smooth (pingdotgg#10453)

* fix(server): mark Cursor transport error answers as failed (pingdotgg#10337)

* fix(web): clear stuck panel resize cursor (pingdotgg#10461)

* fix(web): clarify sidebar drag dividers and empty targets (pingdotgg#10464)

* fix(web): make onboarding a shared multi-computer wizard (pingdotgg#10465)

* fix(shared): redeem reset credits through the hub when it holds the account (pingdotgg#10462)

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

* fix(mobile): keep pending messages in the chat timeline (pingdotgg#10449)

* fix(mobile): show connection status in the floating pill instead of a second one (pingdotgg#10440)

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

* fix: use Pierre icons consistently for attachments (pingdotgg#10475)

* chore(release): prepare v0.0.39

* feat(mobile): open the thread screen as soon as a new task is submitted (pingdotgg#10435)

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

* fix(devcontainer): make repository setup work (pingdotgg#7875)

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

* fix(projects): prevent invalid script IDs from crashing threads (pingdotgg#10019)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(mobile): hide changed-files navigator and restore refresh in raw diff fallback (pingdotgg#9828)

Co-authored-by: James <jamescollard2005@gmail.com>

* fix(ios): scroll short source files from blank space (pingdotgg#10178)

* feat(mobile): start a new thread on an existing branch (pingdotgg#10359)

* fix(mobile): improve font-size slider performance and prevent maximum update depth errors (pingdotgg#7138)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): keep composer toolbar controls anchored during transitions (pingdotgg#10478)

* fix(web): resize the floating preview from any edge (pingdotgg#10467)

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

* fix(mobile): prevent chat from disappearing when scrolling (pingdotgg#10479)

* fix(mobile): smooth composer status pill resizing (pingdotgg#10484)

* fix(mobile): release initial scroll target after dragging (pingdotgg#10483)

* fix(mobile): animate thread lifecycle transitions consistently (pingdotgg#10487)

* fix(mobile): restore assistant message bottom padding (pingdotgg#10491)

* fix(mobile): preserve chat rows when toggling commands (pingdotgg#10492)

* feat(web): group onboarding project import by repository (pingdotgg#10493)

Onboarding listed every directory Claude Code or Codex had ever run in as one flat list of paths, with everything from the last 30 days preselected. On my machine that was 270 rows and 80 preselected. Most of them were Codex scratch folders, worktrees, and one-off questions. I wanted two or three projects and had no fast way to get there.
The scanner now reads each candidate's `.git/config` directly, so the client can group clones by origin and show the GitHub `owner/name`. Linked worktrees, Codex scratch directories under `~/Documents/Codex`, `~/Downloads`, and temp roots are no longer offered. Folders that are not git repositories collapse under "Other folders". The default selection requires a git repository with at least three threads. Select all and Select none sit above the list, and each row shows the source icons, thread count, and last activity.
On the same machine this drops the list to 162 rows and the default selection to 16.
Mobile has no project import step, so there is no mobile change.
Created with Claude Fable 5.1 in Claude Code.

* fix(web): remove inserted citations on cancel (pingdotgg#10518)

* fix(mobile): match Working status color to desktop

* fix(mobile): wait for native thread scroll before reveal (pingdotgg#10486)

* chore(mobile): bump app version to 1.1.0

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

* fix(web): tolerate servers that predate git identity in project import (pingdotgg#10547)

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

* fix(web): restore settled PR colors on hover (pingdotgg#10023)

* fix(web): keep popup triggers steady when pressed (pingdotgg#10468)

* fix(web): keep project favicon shape consistent across sizes (pingdotgg#10502)

* fix(claude): report usage limits on retried turns (pingdotgg#10549)

* refactor(desktop): classify backend exports (pingdotgg#10265)

* refactor(desktop): classify electron exports (pingdotgg#10266)

* refactor(desktop): classify app exports (pingdotgg#10267)

* refactor(desktop): classify preview exports (pingdotgg#10268)

* ci(knip): enforce desktop exports (pingdotgg#10269)

* fix(web): remove excess sidebar thread spacing (pingdotgg#10569)

* fix(web): make settings project scopes searchable and scrollable (pingdotgg#10570)

* fix(web): use `tabular-nums` with the ui font for sidebar timer (pingdotgg#10592)

* fix(web): correct pending question attachment message (pingdotgg#10599)

* fix(mobile): restore brand artwork in the Android adaptive icon (pingdotgg#10598)

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

* fix(mobile): configure iOS Keychain access group (pingdotgg#3665)

Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): remember Composer Fast mode across new chats (pingdotgg#2981)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* fix(server): disable executable capabilities in Claude metadata generation (pingdotgg#4169)

* Add stop thread keybinding command (pingdotgg#4308)

* fix(mobile): show the provider account badge on thread rows (pingdotgg#9899)

* fix(codex): name the usage limit and its reset instead of relaying "out of credits" (pingdotgg#10473)

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

* fix(web): copy selected pull request link from PR page (pingdotgg#10615)

* fix(web): keep ref picker steady when opening (pingdotgg#9472)

* fix(web): play pull request videos inline (pingdotgg#10617)

* chore(release): prepare v0.0.40

* fix(desktop): preserve browser editing shortcuts (pingdotgg#10621)

* fix(web): open pull request markdown links in the panel (pingdotgg#10623)

* fix(mobile): fit the Android splash icon to its circular mask (pingdotgg#10620)

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

* feat(desktop): add cross-platform window capture (pingdotgg#8103)

Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>

* fix(web): open proactive panels when entering threads (pingdotgg#10610)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(native): wait for the KDE feedback test listener (pingdotgg#10645)

* fix(desktop): resolve local media linked from remote threads (pingdotgg#10619)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): add bottom padding to project actions header (pingdotgg#10634)

* fix(web): update machines together in auto balance (pingdotgg#10596)

* fix(preview): transfer recordings to the agent environment (pingdotgg#10572)

* Add 'macroscope-review' label to conventions

* Add 'macroscope-review' label to UI consistency

* fix(web): navigate markdown images as galleries (pingdotgg#10625)

* chore: upgrade to TypeScript 7.0.2 (pingdotgg#10663)

* fix: hide email-bearing account labels in usage limits (pingdotgg#10668)

* fix(web): keep scroll-to-end button close to composer (pingdotgg#10543)

* chore(deps): upgrade Effect to rc.112 and Alchemy to beta.76 (pingdotgg#10652)

* chore(refs): sync Effect reference to rc.112 (pingdotgg#10653)

* chore(refs): sync Alchemy reference to beta.76 (pingdotgg#10654)

* fix: generate thread titles with the selected model across connections (pingdotgg#10526)

Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* fix(desktop): enable context menus in the browser (pingdotgg#10670)

* fix(desktop): stop generating declarations during bundling (pingdotgg#10679)

* fix(desktop): restore layout control hit targets (pingdotgg#10673)

* feat(chat): attach files to question answers (pingdotgg#9871)

* feat(desktop): refresh macOS installer with aurora artwork (pingdotgg#10632)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix(server): give completed turns a full session idle window (pingdotgg#10689)

* feat(web): add pull request merge defaults (pingdotgg#8088)

* fix(usage): keep account columns aligned across limit rows (pingdotgg#10690)

* fix(web): chat text no longer shows through a 1px gap under composer banners (pingdotgg#10635)

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

* refactor(server): classify runtime exports (pingdotgg#10274)

* refactor(server): classify orchestration exports (pingdotgg#10275)

* refactor(server): classify service exports (pingdotgg#10276)

* refactor(server): classify telemetry exports (pingdotgg#10277)

* refactor(server): classify provider exports (pingdotgg#10278)

* refactor(server): classify source control exports (pingdotgg#10279)

* refactor(server): classify source control registry API (pingdotgg#10280)

* refactor(server): classify preview toolkit exports (pingdotgg#10281)

* chore(mobile): bump app version to 1.1.1

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

* ci(knip): enforce server exports (pingdotgg#10282)

* feat(web): add previous/next turn navigation in minimap (pingdotgg#8531)

* fix(web): stop the settings sidebar shifting when switching pages (pingdotgg#10705)

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

* fix(web): copy terminal selection with Ctrl+Insert (pingdotgg#8541)

* fix(web): show the same project icon in the command palette as everywhere else (pingdotgg#10712)

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

* fix(web): stop sidebar rows flashing and shifting on click (pingdotgg#10713)

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

* refactor(web): pass the project record to ProjectFavicon so icons cannot drift (pingdotgg#10714)

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

* feat(web): accept file drops into sidebar threads (pingdotgg#7892)

* feat(web): accept file drops into sidebar threads (pingdotgg#7892)

* fix(mcp): keep preview snapshots usable by the agent and let it save them (pingdotgg#10501)

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

* fix(server): stop Windows terminal processes when closing (pingdotgg#10771)

* feat(mobile): use Android wallpaper colors (pingdotgg#10691)

Co-authored-by: Pixel Perfect <me@pixp.cc>

* feat(mobile): add optional Material You layout (pingdotgg#10692)

Co-authored-by: Pixel Perfect <me@pixp.cc>

* feat(web): show project favicon in new-thread project picker (pingdotgg#10790)

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

* fix(desktop): use official logo in macOS installer (pingdotgg#10819)

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

* fix(web): honor terminal link browser overrides (pingdotgg#10060)

* fix(desktop): neutral artwork for stable macOS installer (pingdotgg#10820)

Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* fix(web): restore text-only draft project title (pingdotgg#10821)

* refactor(web): consolidate setup wizards into shared components (pingdotgg#10832)

* fix(web): stop the bar under the composer popping in after threads load (pingdotgg#10727)

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

* fix(web): keep the composer footer still while thread data loads (pingdotgg#10768)

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

* fix(desktop): defer keyring loading until macOS cookie import (pingdotgg#10667)

* fix(relay): share notification policy and prioritize waiting agents (pingdotgg#10848)

Co-authored-by: Ryan Hughes <ryan@heyoodle.com>

* fix(relay): recheck queued iOS alerts and retain fast completions (pingdotgg#10849)

* fix(mobile): respect notification permission when tokens rotate (pingdotgg#10850)

* fix(mobile): tolerate native Headers without getSetCookie (pingdotgg#10851)

Co-authored-by: Ryan Hughes <ryan@heyoodle.com>

* fix(sync): repair merge fallout and migrate to Effect rc.112

Typecheck after the merge found three classes of problem:

- Syntax broken by resolving several conflicts as blind unions, in
  ProviderService, OpenCodeAdapter, routeTree.gen, the composer draft
  and sidebar logic tests, and the client-runtime thread commands.
- Schema.TaggedErrorClass renamed to Schema.TaggedError in rc.112,
  across ten fork-only files.
- Upstream dead-export cleanup unexported buildEnvironmentAuthHeaders,
  withEnvironmentCredentials and providerLimitsLabel, which the fork's
  direct Apple push and usage UI still use.

The usage UI takes upstream's UsageLimits and UsageLimitsSection
wholesale rather than a union; the fork's contribution there is the
aiusage source kind on the server, which is unaffected.

prepareMcpSession keeps issuing a credential when browser access is
off, with previewEnabled false, because the same credential carries the
fork's mailbox and issue tools. Upstream's browser-access suite is
updated to assert the capability rather than the absence of a
credential.

Claude Opus 5 (1M context) via T3 Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(sync): clear typecheck fallout from the upstream merge

Working through the 179 errors the first typecheck reported. Roughly
twenty roots, most of them shortcuts taken while resolving conflicts.

Cascades cleared:

- ProviderService, ws.ts and ProviderCommandReactor each carried a
  duplicated or orphaned statement from a union-style resolution, which
  degraded the CLI's requirements channel to unknown and produced 62
  downstream errors across the CLI test files.
- ThreadNavigationSidebar carried a duplicated render switch after an
  unconditional return, so the item union never narrowed. That alone
  accounted for 51 mobile errors.

Genuine upstream changes adapted rather than reverted:

- moveThread supersedes the fork's movePinnedThread and covers pinned
  and active sections both, so the sidebar uses it.
- PendingNewTask became a queued/draft union with environmentId,
  projectId, projectTitle and branch on the base, so reads no longer go
  through message or creation.
- Reset-credit redemption names the credit being spent, threaded through
  the mobile and web usage screens.
- getThreadRuntimeContext gains modelSelection so token pricing still
  charges against the thread's current model without a second query.
- runInEnvironment, resetMillis, formatLoopbackAuthorizationPrompt and
  constrainPrimarySidebarWidth are exported again for fork callers.

Claude Opus 5 (1M context) via T3 Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(sync): finish the typecheck pass across every client

Web, mobile and desktop typecheck clean; the server is down to its last
few test-layer wirings.

The fork's change-request status cache came back with it: upstream
removed threadChangeRequestSnapshotsAtom and the displayed-PR resolvers
from ThreadStatusIndicators, which would have taken the sidebar's
Forgejo and GitHub PR badges with them. The store, the three resolvers
and the row's parent-held snapshot are restored.

Adapted to upstream's renames rather than reverting them: canMoveUp and
canMoveDown replace the pin-specific move props, SettingsSection no
longer takes a description, and the terminal drawer drops the cursor,
trimmed and epoch fields the chunked output model supersedes.

launchStartupHeartbeat is exported again so startup does not block on
projection counts.

Claude Opus 5 (1M context) via T3 Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* test(sync): follow upstream's draft persistence and theme variable set

The composer draft round-trip test drove partialize then merge directly.
Upstream moved that projection into the storage serializer, so the test
runs partializeComposerDraftStoreState the same way storage does. The
fork's per-thread subagent model survives the round trip; only the test's
route through it had gone stale.

The mobile theme now emits 80 variables, upstream's set plus the fork's.

Claude Opus 5 (1M context) via T3 Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* test(sync): assert the fork's product name in runtime instructions

RuntimeInstructions is shared by every adapter now, so the Claude
adapter's expectation follows the fork's branding.

Claude Opus 5 (1M context) via T3 Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* test(desktop): expect the fork's name in the Linux desktop entry

Claude Opus 5 (1M context) via T3 Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* test(server): scope reconcile assertions to session commands

Activation also runs the mailbox recovery scan, so the dispatch log
carries thread.mailbox commands alongside the session transitions these
tests are about. They filter for session commands instead of asserting
the whole log.

Claude Opus 5 (1M context) via T3 Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* chore(sync): satisfy upstream's new knip checks

knip.jsonc arrived with the sync and had never seen the fork's code.

The voice model manifest script is regenerated by hand rather than by a
build step, so it is declared as an entry instead of reading as dead.

The other 47 findings were exports nothing imported by name, mostly in
the fork's Forgejo, issue, push and provider sign-in modules where a
helper was exported but only used inside its own file. Those lose the
export keyword; four unused re-exports leave the voice-input barrel.

Typecheck is clean and the client-runtime and mobile suites still pass.

Claude Opus 5 (1M context) via T3 Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* chore(sync): format merged files and drop a dead layout helper

vp check flagged formatting in the eleven files where conflict
resolution left the merged text off-style.

constrainPrimarySidebarWidth goes with it. I restored it earlier only
because the layout test imported it, but the test never called it and
no screen ever did, in the fork or upstream. The import goes too.

Claude Opus 5 (1M context) via T3 Code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria <maria@kuuro.net>
Co-authored-by: Claude Code <noreply@anthropic.com>
Co-authored-by: Simone <lucenz@proton.me>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Alex Southwell <saphid@gmail.com>
Co-authored-by: Hwanseo Choi <electricvoxel@gmail.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Guilherme Vieira <46866023+GuilhermeVieiraDev@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Ross Cawston <rcawston@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Akshar Patel <123344143+AksharP5@users.noreply.github.com>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Aditya Garud <153842990+yashranaway@users.noreply.github.com>
Co-authored-by: Maxwell Young <maxtheyoung@gmail.com>
Co-authored-by: Neel Patel <neelpatel805804@gmail.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Guillermo Casanova <75276669+Gigioxx@users.noreply.github.com>
Co-authored-by: Vitaly Iegorov <vitalyiegorov@gmail.com>
Co-authored-by: Bakari Mustafa <bakarimussa06@gmail.com>
Co-authored-by: adityagarud <garudaditya079@gmail.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: Jono Kemball <Noojuno@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: James <jamescollard2005@gmail.com>
Co-authored-by: berna <47331045+bbernag@users.noreply.github.com>
Co-authored-by: Baptiste Arnaud <baptiste@typebot.io>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Dominic Roy <dominic@sdko.org>
Co-authored-by: Sameer Rangwala <145998568+sameerr03@users.noreply.github.com>
Co-authored-by: Vedank Purohit <VedankPurohit2@gmail.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: Arav Jain <aravhawk@gmail.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Jake Leventhal <jakeleventhal@me.com>
Co-authored-by: Adamulek123 <adam.bogucki2018@gmail.com>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Shadman Taqi <61359614+iamshadmantaqi@users.noreply.github.com>
Co-authored-by: Pixel Perfect <me@pixp.cc>
Co-authored-by: Gianmarco <gianmarcosimone89@gmail.com>
Co-authored-by: Abdel Abdelwaly <aabdelwaly7@gmail.com>
Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
aorwall added a commit to aorwall/t3code that referenced this pull request Sep 9, 2026
Merges `pingdotgg/t3code` into the fork: upstream `2a3035353` from base
`a37c66406`, 53 commits. Landed as a merge commit, not a cherry-pick.

Tracker entry: `docs/fork/upstream-merge-log.md`. Gaps this merge opened
or
extended: `docs/fork/gaps.md`.

## Usable as-is

Fork can expose these with no Moatless backend or deployment work.

- **Project icons everywhere they belong** — favicon in the new-thread
project
picker (pingdotgg#10790), the project record passed to `ProjectFavicon` so icons
cannot
  drift (pingdotgg#10714), and the same icon in the command palette (pingdotgg#10712).
  `apps/web/src/components/ProjectFavicon.tsx`, `DraftHeroHeadline.tsx`.
- **Composer and sidebar layout settling** — footer held still while
thread data
loads (pingdotgg#10768), the bar under the composer no longer pops in (pingdotgg#10727),
chat
text no longer shows through a 1px gap under composer banners (pingdotgg#10635),
scroll-to-end button kept close to the composer (pingdotgg#10543), sidebar rows
no
longer flash and shift on click (pingdotgg#10713), settings sidebar no longer
shifts
  when switching pages (pingdotgg#10705).
- **Minimap turn navigation** (pingdotgg#8531) — previous/next turn controls,
  `apps/web/src/components/chat/` minimap surface. Pure client state.
- **Terminal** — copy selection with Ctrl+Insert (pingdotgg#8541), honor terminal
link
  browser overrides (pingdotgg#10060).
- **Usage panel** — account columns aligned across limit rows (pingdotgg#10690),
  email-bearing account labels hidden (pingdotgg#10668).
- **Setup wizards consolidated into shared components** (pingdotgg#10832).
- **File drops onto sidebar threads** (pingdotgg#7892) — rides the attachment
upload path
the fork already has; `useSidebarPendingFileDropStore` threaded through
  `ChatView.tsx` and `_chat.$environmentId.$threadId.tsx`.
- **Mobile** — drag handles to arrange threads (pingdotgg#10496), Android
wallpaper
colors (pingdotgg#10691), optional Material You layout (pingdotgg#10692), tolerate native
`Headers` without `getSetCookie` (pingdotgg#10851), respect notification
permission
  when tokens rotate (pingdotgg#10850).
- **Desktop** — macOS installer artwork (pingdotgg#10632, pingdotgg#10819, pingdotgg#10820), layout
control
hit targets (pingdotgg#10673), context menus in the browser (pingdotgg#10670), no
declarations
during bundling (pingdotgg#10679), keyring loading deferred until macOS cookie
import
(pingdotgg#10667). `electron-desktop` is kept in tree and is not a compliance
target.
- **Dependency and hygiene** — Effect `rc.112` and Alchemy `beta.76`
(pingdotgg#10652)
with reference syncs (pingdotgg#10653, pingdotgg#10654), and the knip export
classification
  sweep across server modules (pingdotgg#10274pingdotgg#10282).

## Unsupported in Moatless / needs implementation

- **Attach files to question answers** (#7220dfe2c, pingdotgg#9871). Upstream
added the
  wire capability `questionAttachments` in
  `packages/contracts/src/environment.ts` and threads
`supportsQuestionAttachments` through `ChatView.tsx` →
`ChatComposer.tsx`.
The fork takes upstream's plumbing verbatim; the capability is simply
absent
  from what Moatless reports, so the composer correctly offers nothing.
**To implement:** accept attachments on the answer-submission path and
report
  `capabilities.questionAttachments: true`. The sibling
  `ServerProvider.reportsContextWindow` flag lands in the same shape.
  Recorded in `gaps.md`.
- **Pull request merge defaults** (#7d9aaf6a7, pingdotgg#8088). Adds
`pullRequestMergeMethodOverrides` to
`packages/contracts/src/settings.ts` —
  a per-project merge method plus a last-used default, surfaced in
`ProjectSettingsPanel.tsx` and `PullRequestDetailPanel.tsx`. **To
implement:**
Moatless must persist these settings fields, and the panel that consumes
them
needs `pullRequests.detail`, which Moatless does not dispatch (it serves
only
  `pullRequests.summary`). Recorded in `gaps.md` under Pull requests.
- **Relay push-notification routing** (pingdotgg#10859, pingdotgg#10849, pingdotgg#10848) — current
APNs
registration routing for queued jobs, requeue checks for queued iOS
alerts,
  shared notification policy prioritizing waiting agents. These land in
`infra/relay/`, which belongs to the `cloud-relay-connect` concern the
fork has
decided out. No fork app code imports them; taken as upstream and left
inert.

## Backend behavior to consider reproducing in Moatless

Upstream server behavior the fork cannot use directly — `apps/server` is
not
what Moatless runs — but that would improve Moatless.

- **Give completed turns a full session idle window** (#430fbd1ff,
pingdotgg#10689).
Upstream's `ProviderSessionReaper` was measuring idle time from a point
that
cut a completed turn's window short, so provider sessions were reaped
earlier
than intended and the next turn paid a cold start. Worth checking
whatever
  Moatless uses to retire provider sessions against the same case.
- **Release consumed event replay pages** (#08463e2c4, pingdotgg#10777).
`OrchestrationEventStore` held every page it had produced while
replaying,
  so a long thread's replay grew without bound. Upstream moved it to
`Stream.paginate`. If Moatless replays orchestration events to
reconnecting
  clients, it has the same shape of exposure.
- **Stop Windows terminal processes when closing** (#47eed9fac, pingdotgg#10771)
—
terminal child processes outlived their session on Windows. Relevant to
  Moatless only if it hosts terminals on Windows runners.
- **Generate thread titles with the selected model across connections**
(#bc4b00666, pingdotgg#10526) — title generation was falling back to a default
model
  rather than the connection's selected one.
- **Keep preview snapshots usable by the agent and let it save them**
(#061543e9e, pingdotgg#10501) — adds a `save` argument to the MCP
`preview_snapshot`
  tool so the agent can persist a snapshot rather than only view it.
  Recorded in `gaps.md` under Preview automation.

## Conflicts

7 files. Full reasoning is in the tracker entry; the two worth reading
here:

- **`SettingsSidebarNav.tsx`** — upstream deleted the settings
sub-section nav
wholesale (`settingsSectionVisibility.ts` no longer exists upstream),
which
collided with the fork's admin/personal split. Kept upstream's removal
and
rebuilt the split on top of it, extracting `renderNavItem` so both nav
groups
  render identical rows.
- **`ChatComposer.tsx`** — both hunks resolved to upstream. The fork
comment
there documented `maxFileAttachmentBytes`, which upstream now owns
itself.

`pnpm-lock.yaml` was `theirs` then re-derived with `vp i`.
`apps/server/src/cli/pair.ts` is the one file in the upstream range that
did not
land — the fork deletes that surface deliberately, and the tripwire
confirms it
is still deleted.

## A rename that no conflict marked

Upstream's Effect bump renamed `Schema.TaggedErrorClass` to
`Schema.TaggedError`. Upstream renamed its own two occurrences, so those
merged
clean — but the fork's three (`UnsupportedMethodError` in
`packages/contracts/src/auth.ts`, `SandboxNotRunningError` in
`packages/contracts/src/sandbox.ts`, and one in
`apps/web/src/environments/primary/auth.ts`) have no upstream
counterpart, so
git carried them through untouched. Typecheck failed with one `TS2551`
and about
forty cascading `TS2740`s in `rpc.ts` behind it. All three renamed.

## Verification

`verify.mjs` is green on seven checks: duplicate-adds, tripwires,
resolution-check, unsupported-methods, `fmt:check`, lint, typecheck.

`test` is red on **`@t3tools/desktop` only**, and it is the machine
rather than
this merge: `scripts/browser-secret-native.test.mjs` shells out to
`pkg-config --cflags --libs libsecret-1`, which the sandbox image does
not
carry. The file is byte-identical to upstream and fails the same way on
a clean
tree; the standing entry is in `gaps.md`. 1289 tests pass, 1 suite fails
to
compile. Four packages did not finish under parallel load and all four
pass
alone — `@t3tools/web` 383 files, `t3` 293, `@t3tools/mobile` 155,
`t3code-relay` 28.

Unsupported methods: 1 ADD, 0 DROP, 2 KEEP, 4 known exceptions. The ADD
is
`sandbox.detail` and it is **pre-existing drift, not merge-introduced**
—
confirmed by re-running the derivation against `HEAD^1`. Applied anyway,
with
the union entry documenting that Moatless dispatches
`sandbox.subscribeDetail`
and not its one-shot sibling.

`duplicate-adds.mjs` reported `target="_blank"` in
`MessagesTimeline.tsx`. Both
parents have it once, on two unrelated anchors — the fork's
`MessageOriginIcon`
and upstream's new question-attachment link. The script now skips a bare
JSX
attribute on its own line, for the same reason it already skips
punctuation.

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

---
Moatless task:
https://moatless.soaplabstest.com/tasks/ff7d0df5-d989-4ec6-95c6-4e730cf3fd6f
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 16, 2026
## What's Changed
* fix(mobile): show the provider account badge on thread rows by @vitalyiegorov in pingdotgg/t3code#9899
* fix(codex): name the usage limit and its reset instead of relaying "out of credits" by @vitalyiegorov in pingdotgg/t3code#10473
* fix(web): copy selected pull request link from PR page by @maria-rcks in pingdotgg/t3code#10615
* fix(web): keep ref picker steady when opening by @Adamulek123 in pingdotgg/t3code#9472
* fix(web): play pull request videos inline by @maria-rcks in pingdotgg/t3code#10617
* fix(desktop): preserve browser editing shortcuts by @juliusmarminge in pingdotgg/t3code#10621
* fix(web): open pull request markdown links in the panel by @juliusmarminge in pingdotgg/t3code#10623
* fix(mobile): fit the Android splash icon to its circular mask by @juliusmarminge in pingdotgg/t3code#10620
* feat(desktop): add cross-platform window capture by @Bil0000 in pingdotgg/t3code#8103
* fix(web): open proactive panels when entering threads by @maria-rcks in pingdotgg/t3code#10610
* fix(native): wait for the KDE feedback test listener by @juliusmarminge in pingdotgg/t3code#10645
* fix(desktop): resolve local media linked from remote threads by @maria-rcks in pingdotgg/t3code#10619
* fix(web): add bottom padding to project actions header by @flamboh in pingdotgg/t3code#10634
* fix(web): update machines together in auto balance by @maria-rcks in pingdotgg/t3code#10596
* fix(preview): transfer recordings to the agent environment by @maria-rcks in pingdotgg/t3code#10572
* fix(web): navigate markdown images as galleries by @maria-rcks in pingdotgg/t3code#10625
* chore: upgrade to TypeScript 7.0.2 by @juliusmarminge in pingdotgg/t3code#10663
* fix: hide email-bearing account labels in usage limits by @juliusmarminge in pingdotgg/t3code#10668
* fix(web): keep scroll-to-end button close to composer by @Bil0000 in pingdotgg/t3code#10543
* chore(deps): upgrade Effect to rc.112 and Alchemy to beta.76 by @juliusmarminge in pingdotgg/t3code#10652
* chore(refs): sync Effect reference to rc.112 by @juliusmarminge in pingdotgg/t3code#10653
* chore(refs): sync Alchemy reference to beta.76 by @juliusmarminge in pingdotgg/t3code#10654
* fix: generate thread titles with the selected model across connections by @Bil0000 in pingdotgg/t3code#10526
* fix(desktop): enable context menus in the browser by @juliusmarminge in pingdotgg/t3code#10670
* fix(desktop): stop generating declarations during bundling by @juliusmarminge in pingdotgg/t3code#10679
* fix(desktop): restore layout control hit targets by @juliusmarminge in pingdotgg/t3code#10673
* feat(chat): attach files to question answers by @shivamhwp in pingdotgg/t3code#9871
* feat(desktop): refresh macOS installer with aurora artwork by @saphid in pingdotgg/t3code#10632
* fix(server): give completed turns a full session idle window by @StiensWout in pingdotgg/t3code#10689
* feat(web): add pull request merge defaults by @Bil0000 in pingdotgg/t3code#8088
* fix(usage): keep account columns aligned across limit rows by @juliusmarminge in pingdotgg/t3code#10690
* fix(web): chat text no longer shows through a 1px gap under composer banners by @vitalyiegorov in pingdotgg/t3code#10635
* refactor(server): classify runtime exports by @juliusmarminge in pingdotgg/t3code#10274
* refactor(server): classify orchestration exports by @juliusmarminge in pingdotgg/t3code#10275
* refactor(server): classify service exports by @juliusmarminge in pingdotgg/t3code#10276
* refactor(server): classify telemetry exports by @juliusmarminge in pingdotgg/t3code#10277
* refactor(server): classify provider exports by @juliusmarminge in pingdotgg/t3code#10278
* refactor(server): classify source control exports by @juliusmarminge in pingdotgg/t3code#10279
* refactor(server): classify source control registry API by @juliusmarminge in pingdotgg/t3code#10280
* refactor(server): classify preview toolkit exports by @juliusmarminge in pingdotgg/t3code#10281
* ci(knip): enforce server exports by @juliusmarminge in pingdotgg/t3code#10282
* feat(web): add previous/next turn navigation in minimap by @UtkarshUsername in pingdotgg/t3code#8531
* fix(web): stop the settings sidebar shifting when switching pages by @t3dotgg in pingdotgg/t3code#10705
* fix(web): copy terminal selection with Ctrl+Insert by @iamshadmantaqi in pingdotgg/t3code#8541
* fix(web): show the same project icon in the command palette as everywhere else by @t3dotgg in pingdotgg/t3code#10712
* fix(web): stop sidebar rows flashing and shifting on click by @t3dotgg in pingdotgg/t3code#10713
* refactor(web): pass the project record to ProjectFavicon so icons cannot drift by @t3dotgg in pingdotgg/t3code#10714
* feat(web): accept file drops into sidebar threads by @UtkarshUsername in pingdotgg/t3code#7892
* fix(mcp): keep preview snapshots usable by the agent and let it save them by @t3dotgg in pingdotgg/t3code#10501
* fix(server): stop Windows terminal processes when closing by @SunkenInTime in pingdotgg/t3code#10771
* feat(mobile): use Android wallpaper colors by @juliusmarminge in pingdotgg/t3code#10691
* feat(mobile): add optional Material You layout by @juliusmarminge in pingdotgg/t3code#10692
* feat(web): show project favicon in new-thread project picker by @gsimone in pingdotgg/t3code#10790
* fix(desktop): use official logo in macOS installer by @t3-code[bot] in pingdotgg/t3code#10819
* fix(web): honor terminal link browser overrides by @UtkarshUsername in pingdotgg/t3code#10060
* fix(desktop): neutral artwork for stable macOS installer by @t3-code[bot] in pingdotgg/t3code#10820
* fix(web): restore text-only draft project title by @juliusmarminge in pingdotgg/t3code#10821
* refactor(web): consolidate setup wizards into shared components by @juliusmarminge in pingdotgg/t3code#10832
* fix(web): stop the bar under the composer popping in after threads load by @t3dotgg in pingdotgg/t3code#10727
* fix(web): keep the composer footer still while thread data loads by @t3dotgg in pingdotgg/t3code#10768
* fix(desktop): defer keyring loading until macOS cookie import by @simplythatguy in pingdotgg/t3code#10667
* fix(relay): share notification policy and prioritize waiting agents by @juliusmarminge in pingdotgg/t3code#10848
* fix(relay): recheck queued iOS alerts and retain fast completions by @juliusmarminge in pingdotgg/t3code#10849
* fix(mobile): respect notification permission when tokens rotate by @juliusmarminge in pingdotgg/t3code#10850
* fix(mobile): tolerate native Headers without getSetCookie by @juliusmarminge in pingdotgg/t3code#10851
* fix(relay): use current APNs registration routing for queued jobs by @juliusmarminge in pingdotgg/t3code#10859
* fix(server): release consumed event replay pages by @Gigioxx in pingdotgg/t3code#10777
* feat(mobile): arrange threads with drag handles by @juliusmarminge in pingdotgg/t3code#10496
* feat(mobile): add Android agent notifications and ongoing activity by @ryanrhughes in pingdotgg/t3code#10416
* fix(mobile): blur glass fallbacks to prevent background text bleed by @juliusmarminge in pingdotgg/t3code#10964
* feat(web): add provider model bulk toggle by @UtkarshUsername in pingdotgg/t3code#10947
* fix(web): allow expanding duplicate tool call commands by @Yash-Singh1 in pingdotgg/t3code#10981
* fix(mobile): prevent Android chat rows overlapping during sync by @SunkenInTime in pingdotgg/t3code#10983
* fix(mobile): prevent text leaking through Android glass by @juliusmarminge in pingdotgg/t3code#10998
* feat(pull-requests): link multiple pull requests to threads by @juliusmarminge in pingdotgg/t3code#10839
* feat(search): find threads by linked pull request by @juliusmarminge in pingdotgg/t3code#10870
* feat(prs): navigate, merge and rebase GitHub stacks by @juliusmarminge in pingdotgg/t3code#10875
* fix(server): preserve recent PR reads across server restarts by @juliusmarminge in pingdotgg/t3code#11007
* feat(web): zoom and pan expanded images by @maria-rcks in pingdotgg/t3code#10869
* fix(ui): use available space for composer model names by @juliusmarminge in pingdotgg/t3code#11002
* fix(web): restore pr list diff counts to the top right by @maria-rcks in pingdotgg/t3code#10609
* fix(web): show message copy buttons on touch devices by @maria-rcks in pingdotgg/t3code#11020
* fix(web): middle-click pastes in the terminal on Linux by @maria-rcks in pingdotgg/t3code#11018
* fix(editors): open remote projects in Zed by @maria-rcks in pingdotgg/t3code#11022
* feat: add blue and orange diff color palette by @maria-rcks in pingdotgg/t3code#10671
* fix(server): resolve project identity before legacy pr relinks by @t3-code[bot] in pingdotgg/t3code#11045
* fix(mobile): keep Android markdown icons aligned with text by @SunkenInTime in pingdotgg/t3code#11079
* Revert "fix(mobile): keep Android markdown icons aligned with text" by @juliusmarminge in pingdotgg/t3code#11098
* fix(ui): simplify multiple linked pull request badges by @maria-rcks in pingdotgg/t3code#11104
* fix(preview): return to pip when closing the right panel by @maria-rcks in pingdotgg/t3code#11102
* fix: quiet settled threads and simplify PR badges by @juliusmarminge in pingdotgg/t3code#11101
* fix(web): emphasize primary pull request actions by @juliusmarminge in pingdotgg/t3code#11105
* fix(web): prevent seams in the topbar scroll fade by @caezium in pingdotgg/t3code#10914
* fix(web): fit provider update text inside sidebar notices by @MatthewFeroz in pingdotgg/t3code#11034
* fix(web): align floating browser preview corners by @caezium in pingdotgg/t3code#10915
* fix(web): save PR body edits with Cmd/Ctrl+Enter by @flamboh in pingdotgg/t3code#10660
* fix(web): collapse a tool call by clicking its expanded label by @maria-rcks in pingdotgg/t3code#11017
* feat(devices): add simulator and emulator support by @juliusmarminge in pingdotgg/t3code#10677
* feat(devices): scope targets and sessions to their hosts by @juliusmarminge in pingdotgg/t3code#10854
* feat(devices): target concurrent agent sessions across hosts by @juliusmarminge in pingdotgg/t3code#10855
* feat(devices): connect simulator hosts over SSH by @juliusmarminge in pingdotgg/t3code#10856
* feat(web): use a compact right-panel surface menu by @maria-rcks in pingdotgg/t3code#11111
* fix(mobile): keep Android markdown icons aligned by @none23 in pingdotgg/t3code#11118
* fix(mobile): add close controls to tablet files and terminal by @juliusmarminge in pingdotgg/t3code#11115
* fix(mobile): preserve the final composer animation frame by @juliusmarminge in pingdotgg/t3code#11114
* fix(mobile): keep composer transitions aligned by @juliusmarminge in pingdotgg/t3code#11127
* refactor(mobile): name shared markdown renderer without iOS suffixes by @SunkenInTime in pingdotgg/t3code#11128
* fix(media): preserve playback during fullscreen transitions by @maria-rcks in pingdotgg/t3code#11113
* fix(marketing): redirect /app to app.t3.codes by @t3-code[bot] in pingdotgg/t3code#11145
* chore(marketing): update to 300k users and 22k stars by @t3-code[bot] in pingdotgg/t3code#11146
* feat(command-palette): show environments in search results by @Cyberlane in pingdotgg/t3code#10722
* fix(pr): update labels and reviewers without redundant reloads by @maria-rcks in pingdotgg/t3code#11117
* fix(chat): fold question answers into tool activity by @maria-rcks in pingdotgg/t3code#11014
* fix(usage): flag unpriced model activity instead of showing $0.00 by @maria-rcks in pingdotgg/t3code#11021
* fix(server): let Claude launch args override the derived permission mode by @maria-rcks in pingdotgg/t3code#11026
* fix(editors): accept root paths and Windows servers in Zed remote links by @maria-rcks in pingdotgg/t3code#11044
* fix(web): center pull request unavailable states by @maria-rcks in pingdotgg/t3code#11110
* fix(web): remove sidebar pull request link icon by @maria-rcks in pingdotgg/t3code#11179
* fix(ui): color linked pr counts by aggregate status by @maria-rcks in pingdotgg/t3code#11180
* fix(preview): render website favicons for browser tool activity by @maria-rcks in pingdotgg/t3code#11032
* fix(web): simplify pull request summary sections by @maria-rcks in pingdotgg/t3code#10612
* fix(web): preserve drafts when compacting context by @maria-rcks in pingdotgg/t3code#11103
* fix(server): queue messages during context compaction by @maria-rcks in pingdotgg/t3code#11107
* perf(web): format minimap previews only when opened by @juliusmarminge in pingdotgg/t3code#11181
* perf(web): reuse completed Markdown prefixes while streaming by @juliusmarminge in pingdotgg/t3code#11193
* perf(web): resume syntax highlighting from completed lines by @juliusmarminge in pingdotgg/t3code#11196
* perf(web): preserve completed code-line DOM while streaming by @juliusmarminge in pingdotgg/t3code#11198
* perf(web): huge-thread switch no longer blanks the chat pane by @juliusmarminge in pingdotgg/t3code#11169
* fix(web): show platform file manager icons in Open menu by @Bil0000 in pingdotgg/t3code#11228
* fix(server): detect file renames in review diffs by @jakeleventhal in pingdotgg/t3code#8086
* fix(cli): pin shared Effect dependency for npm installs by @jakeleventhal in pingdotgg/t3code#11240
* fix(mobile): prevent Hermes crashes when opening threads by @jakeleventhal in pingdotgg/t3code#11233
* feat(web): open Usage on the Limits tab by default by @juliusmarminge in pingdotgg/t3code#11261
* perf(web): avoid scanning chat history for sidebar backgrounds by @juliusmarminge in pingdotgg/t3code#11206
* perf(mobile): reuse completed code lines while streaming by @juliusmarminge in pingdotgg/t3code#11211
* perf(client): reduce remote request and message sync overhead by @Bil0000 in pingdotgg/t3code#11029
* fix(web): refresh usage limit countdowns without switching tabs by @t3-code[bot] in pingdotgg/t3code#11187
* fix(client-runtime): typecheck device hub ticket request on main by @juliusmarminge in pingdotgg/t3code#11304
* feat(settings): add per-project overrides for scopable server settings by @juliusmarminge in pingdotgg/t3code#11176
* feat(web): pick settings environment and project as two selects by @juliusmarminge in pingdotgg/t3code#10636
* feat(settings): edit any scopable setting as a project override by @juliusmarminge in pingdotgg/t3code#10639
* feat(web): float device streams over chat by @juliusmarminge in pingdotgg/t3code#11285
* fix(web): floating preview can use the margins beside the composer by @juliusmarminge in pingdotgg/t3code#11290
* perf(client-runtime): speed up message sync on desktop and mobile by @Bil0000 in pingdotgg/t3code#11302
* fix(web): use the configured panel shortcut on the PR page by @Bil0000 in pingdotgg/t3code#11292
* feat(web): add PR page selections to new draft threads by @Bil0000 in pingdotgg/t3code#11296
* feat(web): show recording status on floating previews by @maria-rcks in pingdotgg/t3code#11312
* fix(desktop): hold-to-quit no longer strands the quit by @maria-rcks in pingdotgg/t3code#11016
* feat(web): mark projects on another machine in project pickers by @maria-rcks in pingdotgg/t3code#11323
* fix(web): show pointer cursors on pull request controls by @shivamhwp in pingdotgg/t3code#11283
* fix(web): themed panel toggles show their disabled state by @flamboh in pingdotgg/t3code#11188
* fix(web): use branch wording in commit dialogs by @shivamhwp in pingdotgg/t3code#11281
* fix(mobile): keep Android file icons on the line with wrapped filenames by @SunkenInTime in pingdotgg/t3code#11234
* fix(codex): preserve qualified model ids in selection and generation by @maria-rcks in pingdotgg/t3code#9921
* feat(desktop): share macOS permission onboarding by @juliusmarminge in pingdotgg/t3code#11289
* fix(test): drain worker broadcasts before restoring browser globals by @maria-rcks in pingdotgg/t3code#11349
* fix(web): disable linked pull requests when none are linked by @maria-rcks in pingdotgg/t3code#11348
* fix(models): default to astra medium and fable 5.1 medium by @maria-rcks in pingdotgg/t3code#11347
* fix(web): align provider settings with shared settings rows by @maria-rcks in pingdotgg/t3code#10571
* feat(settings): configure default permissions for new threads by @maria-rcks in pingdotgg/t3code#11346
* fix: restore provider history and prompts when rewinding by @maria-rcks in pingdotgg/t3code#11338
* fix(web): keep comment actions visible when pr comments are folded by @maria-rcks in pingdotgg/t3code#11357
* feat: rewind conversations while keeping file changes by @maria-rcks in pingdotgg/t3code#11358
* fix(web): keep sidebar scroll position when pinning threads by @saphid in pingdotgg/t3code#10757
* fix(web): remove pr description reactions by @maria-rcks in pingdotgg/t3code#11361
* fix(desktop): keep preview keystrokes out of the composer by @maria-rcks in pingdotgg/t3code#11354
* feat(settings): add open source license notices by @juliusmarminge in pingdotgg/t3code#8962
* perf(client): reduce repeated sorting and date formatting by @Bil0000 in pingdotgg/t3code#11019
* feat: add inline file previews and attachment chips across surfaces by @chrisdeeming in pingdotgg/t3code#11265
* fix(desktop): preserve long offscreen text in SnapShots by @Bil0000 in pingdotgg/t3code#11250
* perf(server): avoid workspace scans when loading pull requests by @Bil0000 in pingdotgg/t3code#11299
* feat(sidebar): fold the project scope into the search row by @maria-rcks in pingdotgg/t3code#11315
* fix(mobile): pin expo-audio so the release smoke patch stays in use by @ipanasenko in pingdotgg/t3code#11426
* fix(web): preserve snapshot preview size in sent messages by @Bil0000 in pingdotgg/t3code#11429
* fix(mobile): render photo library picks to a bounded JPEG off the JS thread by @Nelglor in pingdotgg/t3code#11440
* fix(desktop): keep the native preview User-Agent so Turnstile passes by @akriaueno in pingdotgg/t3code#7110
* fix(chat): keep user input outside collapsed work by @maria-rcks in pingdotgg/t3code#11363
* fix(web): preserve preview focus on window return by @Lucenx9 in pingdotgg/t3code#11444
* fix(web): complete thread status icons and keep input threads prominent by @maria-rcks in pingdotgg/t3code#11461
* feat(web): tint image chips with their average color by @maria-rcks in pingdotgg/t3code#11468
* fix(web): move viewer controls outside media and restore arrow navigation by @maria-rcks in pingdotgg/t3code#11470
* fix(web): tighten sidebar search and footer spacing by @maria-rcks in pingdotgg/t3code#11466
* feat(web): subagent spawns render as an expandable work row by @maria-rcks in pingdotgg/t3code#11433
* fix(web): keep subagent rows visible under folded turns by @maria-rcks in pingdotgg/t3code#11474
* fix(usage): make unavailable account limits more visible by @dominic-r in pingdotgg/t3code#10601
* fix(desktop): bound backend shutdown wait during quit by @ishaanko in pingdotgg/t3code#7599
* feat(web): choose the default diff file state by @maria-rcks in pingdotgg/t3code#11484
* feat(composer): fold large pastes into text attachments by @chrisdeeming in pingdotgg/t3code#11442
* feat(web): expose each chat message as a heading for screen readers by @Leos-Khai in pingdotgg/t3code#11199
* fix(usage): respect provider account homes by @maria-rcks in pingdotgg/t3code#11485
* feat(web): switch saved environments off instead of removing them by @t3dotgg in pingdotgg/t3code#11478
* fix(mobile): stop crashing on launch when a thread has a PR stack by @juliusmarminge in pingdotgg/t3code#11486
* fix(mobile): stop alerting that shared content vanished after sending it by @juliusmarminge in pingdotgg/t3code#11487
* feat(web): add opt-in thread notifications and sounds by @maria-rcks in pingdotgg/t3code#11481
* fix(server): open Cursor links in classic IDE mode by @Yash-Singh1 in pingdotgg/t3code#11498
* feat(source-control): support Forgejo and Gitea with fj and tea by @maria-rcks in pingdotgg/t3code#11436
* fix(web): match draft row heights to thread rows by @Yash-Singh1 in pingdotgg/t3code#11512
* fix(grok): emit task lifecycle for monitors and background shells by @Svyk in pingdotgg/t3code#9139
* fix(web): unify panel resizing and retain final drag width by @maria-rcks in pingdotgg/t3code#11529
* fix(web): hide back button for single linked pull requests by @maria-rcks in pingdotgg/t3code#11520
* fix(files): browse ignored files and load folders on demand by @maria-rcks in pingdotgg/t3code#11527
* feat(web): float the pull request comment composer by @maria-rcks in pingdotgg/t3code#11531
* fix(mobile): stop crashing on launch before the shell snapshot arrives by @juliusmarminge in pingdotgg/t3code#11537
* feat(github): route pull request operations across matching accounts by @maria-rcks in pingdotgg/t3code#11367
* chore(mobile): enable noUncheckedIndexedAccess and noImplicitOverride by @juliusmarminge in pingdotgg/t3code#11538
* feat(mobile): show startup crashes in Settings → Diagnostics by @juliusmarminge in pingdotgg/t3code#11540
* feat(mobile): add pooled subscription usage widgets by @MatthewFeroz in pingdotgg/t3code#11506
* feat(web): add provider selector to pull request toolbar by @maria-rcks in pingdotgg/t3code#11524
* fix(web): offer recovery from missing pages by @shivamhwp in pingdotgg/t3code#11314
* fix(web): retry startup after the server recovers by @shivamhwp in pingdotgg/t3code#11291
* feat(web): add optional compact sidebar rail by @maria-rcks in pingdotgg/t3code#11525
* feat(web): add opt-in in-app thread notifications by @Bil0000 in pingdotgg/t3code#11570
* feat(web): organize connections by environment by @maria-rcks in pingdotgg/t3code#11542
* fix(web): keep sparse sidebar shelves at the bottom by @maria-rcks in pingdotgg/t3code#11595
* fix(cursor): preserve internal agent errors without transport labels by @shivamhwp in pingdotgg/t3code#11365
* fix(server): fall back when new worktrees are unavailable by @tris203 in pingdotgg/t3code#6208
* feat: badge background thread notifications on desktop and web by @Bil0000 in pingdotgg/t3code#11569
* feat(web): add compact thread list mode by @saphid in pingdotgg/t3code#9417
* feat(web): refine compact thread row badges by @maria-rcks in pingdotgg/t3code#11644
* feat(web): show the linked pull request in the compact sidebar rail by @maria-rcks in pingdotgg/t3code#11652
* fix(mobile): adopt system glass for Live Activities by @juliusmarminge in pingdotgg/t3code#11604
* fix(web): separate expanded tool output from adjacent hover highlights by @dominic-r in pingdotgg/t3code#11658
* fix(web): apply device settings to selected environments by @juliusmarminge in pingdotgg/t3code#11541
* feat(server): show finished paragraphs and code blocks while the response streams by @t3dotgg in pingdotgg/t3code#11062
* fix(web): disconnect offline servers from threads by @t3dotgg in pingdotgg/t3code#11671
* feat(web): flatten the connections page into one environments list by @t3dotgg in pingdotgg/t3code#11672
* fix(mobile): keep usage widget rows consistently sized by @juliusmarminge in pingdotgg/t3code#11669
* feat(server): add reusable auth token for dev worktrees by @t3dotgg in pingdotgg/t3code#8606
* feat(settings): choose how responses stream, with a warning on legacy token mode by @t3dotgg in pingdotgg/t3code#11678
* revert(web): remove the compact sidebar by @maria-rcks in pingdotgg/t3code#11685
* build(desktop): bundle the main process and stage only its native externals by @juliusmarminge in pingdotgg/t3code#11410
* build(server): make the CLI bundle loadable as a Node single-executable by @juliusmarminge in pingdotgg/t3code#11316
* ci(release): build, sign, and publish self-contained CLI archives by @juliusmarminge in pingdotgg/t3code#11317
* feat(server): install preview runtimes from release archives by @juliusmarminge in pingdotgg/t3code#11318
* feat(ssh): run preview builds on remotes from the release archive by @juliusmarminge in pingdotgg/t3code#11319
* feat(cli): add t3 update for self-contained installs by @juliusmarminge in pingdotgg/t3code#11451
* feat(server): manage runtimes as release archives only, never from npm by @juliusmarminge in pingdotgg/t3code#11510
* feat(desktop): run the WSL backend from the Linux CLI archive by @juliusmarminge in pingdotgg/t3code#11511
* ci(release): build CLI archives for five targets, each on its own architecture by @juliusmarminge in pingdotgg/t3code#11605
* ci(release): build the JS bundle once and run every platform and architecture in parallel by @juliusmarminge in pingdotgg/t3code#11606
* feat(release): publish npx t3 as a launcher over per-platform executable packages by @juliusmarminge in pingdotgg/t3code#11607
* feat(cli): add t3 uninstall for self-contained installs by @juliusmarminge in pingdotgg/t3code#11659
* feat(web): show each worktree setup step and let users cancel it by @t3dotgg in pingdotgg/t3code#11372
* fix(server): skip device hosts that resolve to the local machine by @juliusmarminge in pingdotgg/t3code#11698
* fix(web): test device hosts across selected environments by @juliusmarminge in pingdotgg/t3code#11699
* feat(desktop): allow disabling the local environment by @juliusmarminge in pingdotgg/t3code#9194
* feat(cli): add t3 service restart and make t3 update repoint the service eagerly by @juliusmarminge in pingdotgg/t3code#11702
* docs(claude): clarify OpenRouter model selection by @shivamhwp in pingdotgg/t3code#11369
* fix(web): keep large image previews from stalling composer typing by @shivamhwp in pingdotgg/t3code#11324
* fix(server): avoid extra round trips for terminal output by @Bil0000 in pingdotgg/t3code#11407
* fix(web): remember panel width for each thread by @shivamhwp in pingdotgg/t3code#11310
* fix(release): preserve updates from npm-based services by @t3dotgg in pingdotgg/t3code#11732
* fix(desktop): restore Node discovery for WSL providers by @akj in pingdotgg/t3code#11741
* fix(release): stop npm from pruning the platform packages' shipped node_modules by @juliusmarminge in pingdotgg/t3code#11750
* fix(server): parse CLI versions with a "v" prefix by @NikodemNowak in pingdotgg/t3code#11738
* fix(desktop): keep preview releases out of the nightly update changelog by @juliusmarminge in pingdotgg/t3code#11753
* fix(web): open video attachment thumbnails in the viewer by @chrisdeeming in pingdotgg/t3code#11734
* Allow setting T3CODE_OTLP_HEADERS by @bahlo in pingdotgg/t3code#11218
* fix(web): use consistent PR section toggles by @Bil0000 in pingdotgg/t3code#11763
* Add T3CODE_OTLP_PROTOCOL to allow protobuf protocol by @bahlo in pingdotgg/t3code#11224
* feat(web): add composer and PR number shortcuts by @Bil0000 in pingdotgg/t3code#11615
* chore(server): keep the legacy service entry point to the npm package only by @juliusmarminge in pingdotgg/t3code#11770
* fix(web): use project monograms for automatic icon fallbacks by @ShpetimA in pingdotgg/t3code#11572
* feat(web): clone repositories in the background instead of holding the palette open by @juliusmarminge in pingdotgg/t3code#11762
* feat(mobile): clone repositories in the background and gate the draft on the clone by @juliusmarminge in pingdotgg/t3code#11774
* fix(mobile): scale inline pills with Dynamic Type by @juliusmarminge in pingdotgg/t3code#11792
* chore(deps): bump the Clerk stack to current releases by @juliusmarminge in pingdotgg/t3code#11764
* feat(mobile): add a T3 Connect page to the Clerk profile by @juliusmarminge in pingdotgg/t3code#11765
* feat(server): use Clerk's device authorization grant for headless connect login by @juliusmarminge in pingdotgg/t3code#11794
* fix(server): stop refreshing providers on every config subscription by @juliusmarminge in pingdotgg/t3code#11811
* fix(web): align monogram project icons in menus by @juliusmarminge in pingdotgg/t3code#11806
* ci(desktop): sign fork PR macOS previews without exposing signing secrets by @juliusmarminge in pingdotgg/t3code#11760
* fix(web): make copy PR link discoverable in keybindings by @Bil0000 in pingdotgg/t3code#11826
* feat: add custom snooze dates and durations by @juliusmarminge in pingdotgg/t3code#11800
* feat(mobile): redesign the Android agent activity card by @SunkenInTime in pingdotgg/t3code#11645
* feat(web): inline worktree setup rows and async setup scripts by @juliusmarminge in pingdotgg/t3code#11832
* fix(server): stream tight list items one at a time in paragraph mode by @juliusmarminge in pingdotgg/t3code#11833
* fix(server): keep thread titles tied to user intent by @t3dotgg in pingdotgg/t3code#10720
* refactor(server): resolve title links through source control providers by @juliusmarminge in pingdotgg/t3code#11844
* refactor(server): align title generation with Effect conventions by @juliusmarminge in pingdotgg/t3code#11847
* fix(server): disable color probes in worktree setup by @juliusmarminge in pingdotgg/t3code#11843
* fix: keep worktree setup visible after leaving and reopening the thread by @t3dotgg in pingdotgg/t3code#11836
* fix(desktop): prevent startup from running twice by @juliusmarminge in pingdotgg/t3code#11857
* feat(mobile): add iPad keyboard shortcuts and command palette by @bmdavis419 in pingdotgg/t3code#11679
* feat(server): persist the worktree setup send and progress on the thread by @juliusmarminge in pingdotgg/t3code#11852
* feat(web): queue messages sent client-side while the agent is working by @t3dotgg in pingdotgg/t3code#11673
* fix(server): bound Git process bursts to keep connections responsive by @Bil0000 in pingdotgg/t3code#11405
* perf(server): speed up worktree fetch and checkout by @Bil0000 in pingdotgg/t3code#11633
* fix(client): show thread state changes before remote replies by @Bil0000 in pingdotgg/t3code#11408
* fix(mobile): restrict row highlighting to pointer input by @juliusmarminge in pingdotgg/t3code#11863
* fix(mobile): ensure a compatible native client before verification by @juliusmarminge in pingdotgg/t3code#11862
* fix(web): restore composer focus after closing option menus by @Bil0000 in pingdotgg/t3code#11884
* fix(web): center refresh devices in the empty state by @shivamhwp in pingdotgg/t3code#11808
* fix(mobile): match command palette colors to sheets by @juliusmarminge in pingdotgg/t3code#11861
* fix(web): keep the composer ready during background worktree setup by @Bil0000 in pingdotgg/t3code#11883
* fix(desktop): keep the sidebar brand and window buttons aligned by @shivamhwp in pingdotgg/t3code#11906
* fix(web): drop the filled well behind the sidebar header buttons by @flamboh in pingdotgg/t3code#11660
* fix(server): explain how to configure a missing Codex executable by @shivamhwp in pingdotgg/t3code#11345
* fix(mobile): add missing thread rename action by @Michel-Liao in pingdotgg/t3code#11503
* fix(mobile): wait for thread deep link hydration by @Michel-Liao in pingdotgg/t3code#11502
* fix(mobile): keep iOS chat rows aligned after measurement by @dominic-r in pingdotgg/t3code#11813
* feat: add customizable soft-tint project monograms by @eimexdev in pingdotgg/t3code#11845
* fix: multiple UI and server bug fixes by @kridaydave in pingdotgg/t3code#11593
* fix(server): release preview hosts after unanswered requests by @yashranaway in pingdotgg/t3code#11381
* Preserve diff tree order and collapsed folders by @juliusmarminge in pingdotgg/t3code#11931
* fix(client-runtime): preserve cached turns and older-page loading by @lnieuwenhuis in pingdotgg/t3code#8309
* chore(deps): bump Clerk stack to latest stable versions by @juliusmarminge in pingdotgg/t3code#11956
* fix(mobile): update Reanimated and Worklets by @juliusmarminge in pingdotgg/t3code#11957
* fix(desktop): paste as text no longer doubles the pasted text by @TonybynMp4 in pingdotgg/t3code#11958
* feat(web): choose queue or steer for follow-up messages by @Bil0000 in pingdotgg/t3code#11964

## New Contributors
* @iamshadmantaqi made their first contribution in pingdotgg/t3code#8541
* @simplythatguy made their first contribution in pingdotgg/t3code#10667
* @Cyberlane made their first contribution in pingdotgg/t3code#10722
* @Nelglor made their first contribution in pingdotgg/t3code#11440
* @akriaueno made their first contribution in pingdotgg/t3code#7110
* @Leos-Khai made their first contribution in pingdotgg/t3code#11199
* @Svyk made their first contribution in pingdotgg/t3code#9139
* @NikodemNowak made their first contribution in pingdotgg/t3code#11738
* @bahlo made their first contribution in pingdotgg/t3code#11218
* @TonybynMp4 made their first contribution in pingdotgg/t3code#11958

**Full Changelog**: pingdotgg/t3code@v0.0.40...v0.0.42

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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.

1 participant