Skip to content

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

Merged
juliusmarminge merged 2 commits into
t3code/fix-offline-pending-tasksfrom
t3code/mobile-drafts-in-list
Sep 6, 2026
Merged

juliusmarminge merged 2 commits into
t3code/fix-offline-pending-tasksfrom
t3code/mobile-drafts-in-list

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Sep 6, 2026 •

Copy link
Copy Markdown
Member

Stacked on #10245.

Problem

On mobile, text typed into a project's new-task composer is only discoverable by opening that project's new-task screen again. Nothing on Home or the iPad sidebar shows that a draft exists, so unsent work is easy to lose track of. That also made the outbox's restore path (a rejected pending task gets merged back into the project draft) feel like the task vanished: it moved from the visible Pending section into an invisible draft. Web already lists drafts at the top of its sidebar.

Fix

PendingNewTask is now a union of two kinds of unsent work: pending (queued in the outbox, sends itself when the environment reconnects) and draft (the project's new-task composer content, sends only when the user submits). Only drafts with user content (text or attachments) are listed; a bare model pick is not surfaced. The pure builder lives in pending-new-tasks-model.ts.

Both list surfaces render drafts in the same slot as pending tasks:

  • v2 flat list (Home and iPad sidebar): the section divider now reads Unsent. Drafts get an amber Draft label with a pen icon; queued tasks say Sends on reconnect in the uncolored status slot, describing what happens next rather than where the item sits.
  • v1 grouped list: drafts get an amber Draft pill and pen icon. The pill has room for one word, so queued tasks keep the Pending pill and the subtitle leads with Sends on reconnect. Drafts have no timestamp since they have no creation time.

Tapping a draft opens the project's new-task composer, which already loads that draft. Long-press offers Discard (clears the draft, same reset a submit performs). Deleting a pending task is unchanged.

Drafts sort first (they are what the user is writing now), then queued tasks newest-first.

Verification

vp test run on the touched suites in apps/mobile: pending-new-tasks-model.test.ts (new), threadListV2.test.ts, homeThreadList.test.ts, homeListItems.test.ts, showcasePendingTasks.test.ts — 73 passed. vpr typecheck passes. Lint on the touched files shows only pre-existing warnings (same 23 on the base branch).

Before / after — v2 flat list (default)

Before: only the queued task appears under Pending, labelled Queued. After: the Unsent section shows the amber Draft row above a row labelled Sends on reconnect

Before / after — v1 grouped list (Legacy Thread List setting)

Before: only the Pending pill row. After: a Draft pill row with pen icon leads the group, followed by the Pending row whose subtitle reads Sends on reconnect

Tapping the draft row

The new-task composer opens on the draft's project with the draft text loaded

Captured on an iPhone 17 Pro simulator with the dev client, same seeded state (one draft, one queued task, one real thread) on both revisions, environment filter scoped to the test backend.

Surfaces

  • Entry points: Home list (v1 and v2), iPad ThreadNavigationSidebar (v1 and v2), new-task composer (open target).
  • Clients: mobile only. Web already has draft rows; the server is untouched.
  • Reverse state: Discard from the row menu, or clear the composer.

Model: Claude Fable 5 · Harness: Claude Code in T3 Code

🤖 Generated with Claude Code

@github-actions github-actions Bot added vouch:trusted Author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Sep 6, 2026
@github-actions

github-actions Bot commented Sep 6, 2026 •

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire — 13.6 KiB — 15.1 KiB ✅
Codex Thread snapshot wire — 7.0 KiB — 7.3 KiB ✅
Codex Live turn WebSocket wire — 6.6 KiB — 7.8 KiB ✅
Codex Live turn WebSocket decoded — 57.1 KiB — 66.4 KiB ✅
Codex Live turn messages — 10 — 21 ✅
Claude Total thread wire — 13.6 KiB — 15.1 KiB ✅
Claude Thread snapshot wire — 7.0 KiB — 7.3 KiB ✅
Claude Live turn WebSocket wire — 6.5 KiB — 7.8 KiB ✅
Claude Live turn WebSocket decoded — 57.8 KiB — 66.4 KiB ✅
Claude Live turn messages — 9 — 21 ✅

Baseline: unavailable · PR result: 0286e75 · 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.

@macroscopeapp

macroscopeapp Bot commented Sep 6, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This adds automatic draft discovery, navigation, and discard behavior to the mobile Home and thread lists, backed by a new production model and composer-state subscription. It also changes default list presentation and item identity across both legacy and v2 surfaces, so human review is appropriate.

No code changes detected at 0286e75. Prior analysis still applies.

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

@cursor

cursor Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

juliusmarminge and others added 2 commits September 6, 2026 12:08
…ead list

Drafts typed into a project's new-task composer were only discoverable by
opening that project's new-task screen again, so unsent work was easy to
lose track of, and anything the outbox restored into a draft vanished from
view. Web already lists drafts at the top of its sidebar.

PendingNewTask is now a union of queued ("pending") tasks and new-task
drafts with user content. Both list surfaces (v1 grouped list and v2 flat
list, on Home and the iPad sidebar) render drafts in the same slot as
pending tasks, with an amber "Draft" label and pen icon instead of the
uncolored "Pending"/"Queued" one, so the difference is legible: a pending
task sends itself when the environment reconnects, a draft waits for the
user. The v2 divider reads "Unsent" since it now covers both. Tapping a
draft opens the project's new-task composer; long-press offers Discard.

Co-Authored-By: Claude Fable 5 <[email protected]>
"Queued" and "Pending" describe the outbox, not the outcome, and read
ambiguously next to a draft. The v2 status slot now says "Sends on
reconnect"; the v1 pill has room for one word so it keeps "Pending" and
the subtitle carries "Sends on reconnect" instead.

Co-Authored-By: Claude Fable 5 <[email protected]>
@juliusmarminge
juliusmarminge force-pushed the t3code/mobile-drafts-in-list branch from 97eda07 to 0286e75 Compare September 6, 2026 19:14
@juliusmarminge
juliusmarminge merged commit c0bf354 into main Sep 6, 2026
26 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/mobile-drafts-in-list branch September 6, 2026 19:31
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 6, 2026
## What's Changed
* fix(web): show Tux icon for WSL environments by @UtkarshUsername in pingdotgg/t3code#8511
* perf(web): speed up folder menu sorting by @AksharP5 in pingdotgg/t3code#10190
* style(web): fix inconsistencies in new settings layouts by @extoci in pingdotgg/t3code#10177
* feat(threads): persist manual active thread order by @juliusmarminge in pingdotgg/t3code#9729
* feat(mobile): arrange active threads from both thread lists by @juliusmarminge in pingdotgg/t3code#9730
* feat(web): drag threads across sections with consistent motion by @juliusmarminge in pingdotgg/t3code#9731
* feat(web): simplify sidebar drag destination cues by @juliusmarminge in pingdotgg/t3code#9750
* fix(mobile): keep pending tasks queued when a send fails in flight by @juliusmarminge in pingdotgg/t3code#10245
* feat(mobile): show new-task drafts alongside pending tasks in the thread list by @juliusmarminge in pingdotgg/t3code#10260
* feat(mobile): allow several new-task drafts per project by @juliusmarminge in pingdotgg/t3code#10327
* fix(mobile): slide settled threads out before collapsing by @StiensWout in pingdotgg/t3code#10345


**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260906.1303...v0.0.39-nightly.20260906.1316

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260906.1316
BarretoDiego pushed a commit to BarretoDiego/t3code that referenced this pull request Sep 7, 2026
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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

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

Co-authored-by: Ross Cawston <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

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

Co-authored-by: Claude Fable 5 <[email protected]>

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

Co-authored-by: Claude Fable 5 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

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

Co-authored-by: Simone <[email protected]>

* 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 <[email protected]>

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

Co-authored-by: Claude Fable 5 <[email protected]>

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

Co-authored-by: Claude Fable 5 <[email protected]>

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

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

Co-authored-by: adityagarud <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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) <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

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

Co-authored-by: Claude Fable 5 <[email protected]>
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 <[email protected]>

* 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 <[email protected]>

* 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) <[email protected]>

* 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 <[email protected]>

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

Co-authored-by: Claude Code <[email protected]>

* 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 <[email protected]>

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

Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>

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

Co-authored-by: Cursor Agent <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

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

Co-authored-by: Dara Adedeji <[email protected]>
Co-authored-by: Dara Adedeji <[email protected]>
Co-authored-by: Wout Stiens <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Claude Fable 5.1 <[email protected]>

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

Co-authored-by: maria-rcks <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

* 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 <[email protected]>

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

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

Co-authored-by: Pixel Perfect <[email protected]>

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

Co-authored-by: Pixel Perfect <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

* 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 <[email protected]>

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

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

Co-authored-by: Julius Marminge <[email protected]>

* 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 <[email protected]>

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

Co-authored-by: Claude Fable 5.1 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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) <[email protected]>

* 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) <[email protected]>

* 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) <[email protected]>

* 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) <[email protected]>

* 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) <[email protected]>

* 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) <[email protected]>

* 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) <[email protected]>

* 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) <[email protected]>

* 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) <[email protected]>

---------

Co-authored-by: Wout Stiens <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: maria <[email protected]>
Co-authored-by: Claude Code <[email protected]>
Co-authored-by: Simone <[email protected]>
Co-authored-by: oliver <[email protected]>
Co-authored-by: Exotic <[email protected]>
Co-authored-by: shivam <[email protected]>
Co-authored-by: Theo Browne <[email protected]>
Co-authored-by: Alex Southwell <[email protected]>
Co-authored-by: Hwanseo Choi <[email protected]>
Co-authored-by: maria-rcks <[email protected]>
Co-authored-by: Guilherme Vieira <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Ross Cawston <[email protected]>
Co-authored-by: Utkarsh Patil <[email protected]>
Co-authored-by: Akshar Patel <[email protected]>
Co-authored-by: Simone <[email protected]>
Co-authored-by: Aditya Garud <[email protected]>
Co-authored-by: Maxwell Young <[email protected]>
Co-authored-by: Neel Patel <[email protected]>
Co-authored-by: Yash Singh <[email protected]>
Co-authored-by: Guillermo Casanova <[email protected]>
Co-authored-by: Vitaly Iegorov <[email protected]>
Co-authored-by: Bakari Mustafa <[email protected]>
Co-authored-by: adityagarud <[email protected]>
Co-authored-by: Dara Adedeji <[email protected]>
Co-authored-by: Jono Kemball <[email protected]>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Lars Nieuwenhuis <[email protected]>
Co-authored-by: James <[email protected]>
Co-authored-by: berna <[email protected]>
Co-authored-by: Baptiste Arnaud <[email protected]>
Co-authored-by: codex <[email protected]>
Co-authored-by: Dominic Roy <[email protected]>
Co-authored-by: Sameer Rangwala <[email protected]>
Co-authored-by: Vedank Purohit <[email protected]>
Co-authored-by: Julius Marminge <[email protected]>
Co-authored-by: Arav Jain <[email protected]>
Co-authored-by: Cursor Agent <[email protected]>
Co-authored-by: Jake Leventhal <[email protected]>
Co-authored-by: Adamulek123 <[email protected]>
Co-authored-by: Bilal Bakr <[email protected]>
Co-authored-by: Dara Adedeji <[email protected]>
Co-authored-by: Shadman Taqi <[email protected]>
Co-authored-by: Pixel Perfect <[email protected]>
Co-authored-by: Gianmarco <[email protected]>
Co-authored-by: Abdel Abdelwaly <[email protected]>
Co-authored-by: Ryan Hughes <[email protected]>
henrik092 pushed a commit to henrik092/t3code that referenced this pull request Nov 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted 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