Skip to content

fix(web): the Usage page sends a signed-out browser to pairing - #17938

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
AdEx-Partners-DE:fix/usage-page-auth-guard
Oct 11, 2026
Merged

maria-rcks merged 1 commit into
pingdotgg:mainfrom
AdEx-Partners-DE:fix/usage-page-auth-guard

Conversation

@AdEx-Partners-DE

Copy link
Copy Markdown
Contributor

Problem

/usage is the one app route without the auth guard that the chat and settings routes have. When a browser's session ends while a tab is on the Usage page, the tab keeps showing its last snapshot instead of going to pairing: no sidebar, no sidebar toggle, no Back, and stale limits. The same situation on a thread or settings route redirects to /pair. The only way out is the browser's Back button, which lands on the pairing screen.

Reproduction on current main (9afde1c6d), web dev server on Windows 11:

  1. Pair a browser and open /usage.
  2. End that session, for example t3 auth session revoke <id>.
  3. Restart the server so the socket reconnects.
  4. The tab stays on /usage with the old numbers. Checking the DOM: the sidebar element, the "Toggle main sidebar" button and the "Back" entry are all gone.

Repeating steps 1 to 3 on a thread route ends on /pair, as expected.

Change

usage.tsx gets the same beforeLoad check as _chat.tsx and settings.tsx: unless the auth gate state is authenticated or hosted-static, redirect to /pair.

Scope and approval

A very small, focused fix for an obvious bug, with no prior issue: one route is missing a guard its sibling routes already have, and the fix is that guard, nine lines in one file. It adds no behavior that does not already exist on the other routes.

Verification

  • Reproduced the stuck page as described above, then applied the change: the same tab now ends on /pair (location.pathname === "/pair", pairing form shown).
  • A paired browser still opens /usage normally and shows the limits.
  • tsc --noEmit for apps/web is clean; lint and format are clean for the file.

Not checked: the packaged desktop app, mobile, and the hosted static app. The guard lets hosted-static through exactly as the chat and settings routes do. No screenshots, since the change is a redirect rather than a visual change; I can add a recording if that helps.

There is no route-level test for the existing guards to extend, so this adds none.

Claude Opus 5.5 in Claude Code, via T3 Code.

🤖 Generated with Claude Code

/usage was the one app route without the auth guard that the chat and settings
routes have. When a browser's session ended (revoked, or the server's auth
state was reset) and the socket reconnected, a tab on /usage kept showing its
last snapshot with no sidebar and no way back, while any other route redirected
to /pair.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Oct 10, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 10, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — The change is a small and consistent route-guard fix, leaving authenticated and hosted-static Usage behavior unchanged. Because it modifies authentication-gated access to an existing production route, it warrants human review.

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

@coderabbitai

coderabbitai Bot commented Oct 10, 2026

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: a26ab2fa-07be-4dcf-a778-3cb36f7fb612

📥 Commits

Reviewing files that changed from the base of the PR and between 9afde1c and 7eb8354.


📒 Files selected for processing (1)
  • apps/web/src/routes/usage.tsx

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



📝 Walkthrough

Walkthrough

The /usage route now checks authentication state before rendering UsagePage. It redirects states other than "authenticated" and "hosted-static" to /pair with replacement.

Changes

Usage Route Access

Layer / File(s) Summary
Guard usage route
apps/web/src/routes/usage.tsx
The route allows "authenticated" and "hosted-static" states. It redirects other states to /pair with replacement.

Priority: ➖ Normal

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

Change: Bug fix


Merge Risk | ⚪ Minimal · up to 7eb83

Merge Risk: ⚪ Minimal · up to 7eb83

/usage remains available to authenticated and hosted-static browsers, while unauthenticated sessions are routed into the pairing flow. No material merge risk is established.

Security Architecture Review

Security architecture risk: 🔵 Low · up to 7eb83

The change narrows access to one browser route and reuses existing pairing behavior. No expanded privileges or new authentication bypass was identified. Redirecting an already-open tab after session revocation still depends on existing authentication-refresh behavior that was not fully established.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The directly changed security surface is admission to one browser page. The added allowlist reduces route reachability for disallowed auth states; the full diff introduces no new server operation, credential authority, or cross-service dependency.

Trust Boundaries and Controls

  • observed — The route decision trusts the root-produced auth state. The hosted-static exception already originates in the root's application-mode checks; this PR does not add a new state producer or credential exchange path.

Resilience and Maintainability Implications

  • observed — The existing pairing recovery path reports failed credential submission without invoking its authenticated callback. Successful submission waits for an authenticated session, then replaces history and reloads the application to recreate the primary connection with the new cookie.

Pre-merge checks | Passed 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check Passed The title clearly and concisely describes the main change: redirecting signed-out browsers from the Usage page to pairing.
Description check Passed The description covers the problem, reproduction steps, implementation, scope rationale, verification results, untested environments, and agent details. It is focused and complete for this small redir…
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.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@maria-rcks
maria-rcks merged commit b4542c5 into pingdotgg:main Oct 11, 2026
30 checks passed
@AdEx-Partners-DE
AdEx-Partners-DE deleted the fix/usage-page-auth-guard branch October 11, 2026 05:12
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 11, 2026
## What's Changed
* perf(server): drive shell last-error lookup from thread bindings by @only21mil in pingdotgg/t3code#17842
* perf(server): skip parsing plain terminal history output by @StiensWout in pingdotgg/t3code#17179
* perf(server): batch terminal history writes every 250 ms by @StiensWout in pingdotgg/t3code#17183
* perf(server): storage cleanup no longer runs a full status or size walk for worktrees it keeps by @tris203 in pingdotgg/t3code#17911
* perf(usage): usage scans skip OpenCode legacy messages older than the window by @tris203 in pingdotgg/t3code#17254
* perf(usage): OpenCode legacy walk stats entries before checking for symlinks by @tris203 in pingdotgg/t3code#17638
* fix(web): MCP app permission prompts no longer overflow the screen by @juliusmarminge in pingdotgg/t3code#17962
* feat(provider-antigravity): support subscription quota and usage limits by @Maseeek in pingdotgg/t3code#17530
* fix(desktop): keep generated annotation styles in sync by @t3-code[bot] in pingdotgg/t3code#17838
* fix(web): Resume continues on the model picked in the composer by @akbarakma in pingdotgg/t3code#17867
* fix(devices): bump agent-device to 0.21.24 for native Windows hosts by @TanJeeSchuan in pingdotgg/t3code#17706
* fix(web): keybinding group headings no longer touch the group above by @fixfon in pingdotgg/t3code#17766
* feat(web): configure OpenTelemetry exports in diagnostics by @MatthewFeroz in pingdotgg/t3code#12538
* docs: update user count to 500k by @Kamkmgamer in pingdotgg/t3code#17783
* fix(mobile): working pill no longer bulges on its right end by @id0Sch in pingdotgg/t3code#16143
* perf(opencode): stop retaining every message of a loaded OpenCode thread by @tris203 in pingdotgg/t3code#17784
* fix(web): switch thumbs stay in their track while scrolling by @raphaelpra in pingdotgg/t3code#15240
* fix(keybindings): thread jumps no longer overlap model picker jumps by @Fluffy-Bunny-23 in pingdotgg/t3code#14475
* fix(mobile): restore QR scanning in iPad pairing sheet by @arhammahajan in pingdotgg/t3code#16019
* fix(server): delegated Muse tasks no longer ask approval for every command by @t3dotgg in pingdotgg/t3code#18065
* fix(codex): prevent unsupported agent history in ChatGPT sharing by @connwalk in pingdotgg/t3code#17499
* fix(server): disabled providers stop checking for CLI updates by @yordis in pingdotgg/t3code#16772
* fix(mobile): round Android queued message sheet corners by @PixPMusic in pingdotgg/t3code#14934
* fix(ssh): record the archive lock owner's real PID by @Gigioxx in pingdotgg/t3code#14598
* fix(desktop): keep annotation comment direction independent of host page by @abdelrhmanehab10 in pingdotgg/t3code#11005
* fix(ssh): qualify runner script builders in tunnel test by @juliusmarminge in pingdotgg/t3code#18078
* fix(web): keep thread links open until the shell is live by @saphid in pingdotgg/t3code#14697
* fix(web): scope PR title collapse to tab scrollers by @Adamulek123 in pingdotgg/t3code#14644
* fix(server): detect fork PRs for branches without upstreams by @Adamulek123 in pingdotgg/t3code#13894
* fix(search): find threads by their branch PR number by @tris203 in pingdotgg/t3code#14658
* feat(web): show Claude workflow phases and members in Lineage by @Bil0000 in pingdotgg/t3code#12598
* fix(mobile): round Android Agents sheet corners by @PixPMusic in pingdotgg/t3code#14925
* fix(web): the Usage page sends a signed-out browser to pairing by @AdEx-Partners-DE in pingdotgg/t3code#17938
* fix(server): OpenCode 2 continuations end after a reconnect took a Stop's end by @juliusmarminge in pingdotgg/t3code#14744
* fix(server): OpenCode 2 continuations replay only their own background reply by @juliusmarminge in pingdotgg/t3code#14752
* fix(server): ACP reapplies a model after a switch away from it failed partway by @juliusmarminge in pingdotgg/t3code#14723
* fix(web): focus settings search with command-f by @extoci in pingdotgg/t3code#17859
* fix(mobile): keep Android project paths on one line by @wellorbetter in pingdotgg/t3code#14178
* fix(web): unpin preview dragging on narrow chat canvases by @MatthewFeroz in pingdotgg/t3code#15556
* fix(web): thread details toggle no longer covers the thread title on Windows desktop by @freddy-d in pingdotgg/t3code#16869
* fix(server): a directory no longer resolves as the resource monitor binary by @Furox-Art in pingdotgg/t3code#16838
* fix(server): a Claude usage limit no longer resets the context meter to 0% by @Vantrongs in pingdotgg/t3code#16394
* fix(server): GitLab merge requests can expand unchanged lines by @ScottN-PV in pingdotgg/t3code#17528
* fix(provider-cursor): a skill tree deeper than the scan limit no longer hides every skill by @ScottN-PV in pingdotgg/t3code#17389
* fix(web): pass hex theme colors to HTML renders by @RustedAperture in pingdotgg/t3code#16325
* fix(web): align the API estimate info icon by @RakshithBhat03 in pingdotgg/t3code#15655
* test(server): ACP teardown tests pass on Windows hosts by @sheehanmunim in pingdotgg/t3code#17080
* fix(server): sync device tool license versions with installer pins by @Yash-Singh1 in pingdotgg/t3code#18121
* fix: sync model favorites and visibility across clients by @jakeleventhal in pingdotgg/t3code#16816
* chore(deps-dev): bump compression from 1.8.1 to 1.8.2 in the npm_and_yarn group across 1 directory by @dependabot[bot] in pingdotgg/t3code#16309
* fix(server): update fff to stop runaway watcher rescans by @realhasanshoaib in pingdotgg/t3code#14543
* fix(mobile): license generation works with filtered installs by @Yash-Singh1 in pingdotgg/t3code#18127
* fix(mobile): image-only messages ask the agent to respond, like desktop by @whoisaldo in pingdotgg/t3code#16480

## New Contributors
* @Maseeek made their first contribution in pingdotgg/t3code#17530
* @TanJeeSchuan made their first contribution in pingdotgg/t3code#17706
* @fixfon made their first contribution in pingdotgg/t3code#17766
* @id0Sch made their first contribution in pingdotgg/t3code#16143
* @raphaelpra made their first contribution in pingdotgg/t3code#15240
* @Fluffy-Bunny-23 made their first contribution in pingdotgg/t3code#14475
* @arhammahajan made their first contribution in pingdotgg/t3code#16019
* @connwalk made their first contribution in pingdotgg/t3code#17499
* @abdelrhmanehab10 made their first contribution in pingdotgg/t3code#11005
* @AdEx-Partners-DE made their first contribution in pingdotgg/t3code#17938
* @wellorbetter made their first contribution in pingdotgg/t3code#14178
* @freddy-d made their first contribution in pingdotgg/t3code#16869
* @Furox-Art made their first contribution in pingdotgg/t3code#16838
* @RustedAperture made their first contribution in pingdotgg/t3code#16325
* @sheehanmunim made their first contribution in pingdotgg/t3code#17080
* @realhasanshoaib made their first contribution in pingdotgg/t3code#14543
* @whoisaldo made their first contribution in pingdotgg/t3code#16480

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261011.2955...v0.0.46-nightly.20261011.2967

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261011.2967
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 11, 2026
## What's Changed
* perf(server): drive shell last-error lookup from thread bindings by @only21mil in pingdotgg/t3code#17842
* perf(server): skip parsing plain terminal history output by @StiensWout in pingdotgg/t3code#17179
* perf(server): batch terminal history writes every 250 ms by @StiensWout in pingdotgg/t3code#17183
* perf(server): storage cleanup no longer runs a full status or size walk for worktrees it keeps by @tris203 in pingdotgg/t3code#17911
* perf(usage): usage scans skip OpenCode legacy messages older than the window by @tris203 in pingdotgg/t3code#17254
* perf(usage): OpenCode legacy walk stats entries before checking for symlinks by @tris203 in pingdotgg/t3code#17638
* fix(web): MCP app permission prompts no longer overflow the screen by @juliusmarminge in pingdotgg/t3code#17962
* feat(provider-antigravity): support subscription quota and usage limits by @Maseeek in pingdotgg/t3code#17530
* fix(desktop): keep generated annotation styles in sync by @t3-code[bot] in pingdotgg/t3code#17838
* fix(web): Resume continues on the model picked in the composer by @akbarakma in pingdotgg/t3code#17867
* fix(devices): bump agent-device to 0.21.24 for native Windows hosts by @TanJeeSchuan in pingdotgg/t3code#17706
* fix(web): keybinding group headings no longer touch the group above by @fixfon in pingdotgg/t3code#17766
* feat(web): configure OpenTelemetry exports in diagnostics by @MatthewFeroz in pingdotgg/t3code#12538
* docs: update user count to 500k by @Kamkmgamer in pingdotgg/t3code#17783
* fix(mobile): working pill no longer bulges on its right end by @id0Sch in pingdotgg/t3code#16143
* perf(opencode): stop retaining every message of a loaded OpenCode thread by @tris203 in pingdotgg/t3code#17784
* fix(web): switch thumbs stay in their track while scrolling by @raphaelpra in pingdotgg/t3code#15240
* fix(keybindings): thread jumps no longer overlap model picker jumps by @Fluffy-Bunny-23 in pingdotgg/t3code#14475
* fix(mobile): restore QR scanning in iPad pairing sheet by @arhammahajan in pingdotgg/t3code#16019
* fix(server): delegated Muse tasks no longer ask approval for every command by @t3dotgg in pingdotgg/t3code#18065
* fix(codex): prevent unsupported agent history in ChatGPT sharing by @connwalk in pingdotgg/t3code#17499
* fix(server): disabled providers stop checking for CLI updates by @yordis in pingdotgg/t3code#16772
* fix(mobile): round Android queued message sheet corners by @PixPMusic in pingdotgg/t3code#14934
* fix(ssh): record the archive lock owner's real PID by @Gigioxx in pingdotgg/t3code#14598
* fix(desktop): keep annotation comment direction independent of host page by @abdelrhmanehab10 in pingdotgg/t3code#11005
* fix(ssh): qualify runner script builders in tunnel test by @juliusmarminge in pingdotgg/t3code#18078
* fix(web): keep thread links open until the shell is live by @saphid in pingdotgg/t3code#14697
* fix(web): scope PR title collapse to tab scrollers by @Adamulek123 in pingdotgg/t3code#14644
* fix(server): detect fork PRs for branches without upstreams by @Adamulek123 in pingdotgg/t3code#13894
* fix(search): find threads by their branch PR number by @tris203 in pingdotgg/t3code#14658
* feat(web): show Claude workflow phases and members in Lineage by @Bil0000 in pingdotgg/t3code#12598
* fix(mobile): round Android Agents sheet corners by @PixPMusic in pingdotgg/t3code#14925
* fix(web): the Usage page sends a signed-out browser to pairing by @AdEx-Partners-DE in pingdotgg/t3code#17938
* fix(server): OpenCode 2 continuations end after a reconnect took a Stop's end by @juliusmarminge in pingdotgg/t3code#14744
* fix(server): OpenCode 2 continuations replay only their own background reply by @juliusmarminge in pingdotgg/t3code#14752
* fix(server): ACP reapplies a model after a switch away from it failed partway by @juliusmarminge in pingdotgg/t3code#14723
* fix(web): focus settings search with command-f by @extoci in pingdotgg/t3code#17859
* fix(mobile): keep Android project paths on one line by @wellorbetter in pingdotgg/t3code#14178
* fix(web): unpin preview dragging on narrow chat canvases by @MatthewFeroz in pingdotgg/t3code#15556
* fix(web): thread details toggle no longer covers the thread title on Windows desktop by @freddy-d in pingdotgg/t3code#16869
* fix(server): a directory no longer resolves as the resource monitor binary by @Furox-Art in pingdotgg/t3code#16838
* fix(server): a Claude usage limit no longer resets the context meter to 0% by @Vantrongs in pingdotgg/t3code#16394
* fix(server): GitLab merge requests can expand unchanged lines by @ScottN-PV in pingdotgg/t3code#17528
* fix(provider-cursor): a skill tree deeper than the scan limit no longer hides every skill by @ScottN-PV in pingdotgg/t3code#17389
* fix(web): pass hex theme colors to HTML renders by @RustedAperture in pingdotgg/t3code#16325
* fix(web): align the API estimate info icon by @RakshithBhat03 in pingdotgg/t3code#15655
* test(server): ACP teardown tests pass on Windows hosts by @sheehanmunim in pingdotgg/t3code#17080
* fix(server): sync device tool license versions with installer pins by @Yash-Singh1 in pingdotgg/t3code#18121
* fix: sync model favorites and visibility across clients by @jakeleventhal in pingdotgg/t3code#16816
* chore(deps-dev): bump compression from 1.8.1 to 1.8.2 in the npm_and_yarn group across 1 directory by @dependabot[bot] in pingdotgg/t3code#16309
* fix(server): update fff to stop runaway watcher rescans by @realhasanshoaib in pingdotgg/t3code#14543
* fix(mobile): license generation works with filtered installs by @Yash-Singh1 in pingdotgg/t3code#18127
* fix(mobile): image-only messages ask the agent to respond, like desktop by @whoisaldo in pingdotgg/t3code#16480

## New Contributors
* @Maseeek made their first contribution in pingdotgg/t3code#17530
* @TanJeeSchuan made their first contribution in pingdotgg/t3code#17706
* @fixfon made their first contribution in pingdotgg/t3code#17766
* @id0Sch made their first contribution in pingdotgg/t3code#16143
* @raphaelpra made their first contribution in pingdotgg/t3code#15240
* @Fluffy-Bunny-23 made their first contribution in pingdotgg/t3code#14475
* @arhammahajan made their first contribution in pingdotgg/t3code#16019
* @connwalk made their first contribution in pingdotgg/t3code#17499
* @abdelrhmanehab10 made their first contribution in pingdotgg/t3code#11005
* @AdEx-Partners-DE made their first contribution in pingdotgg/t3code#17938
* @wellorbetter made their first contribution in pingdotgg/t3code#14178
* @freddy-d made their first contribution in pingdotgg/t3code#16869
* @Furox-Art made their first contribution in pingdotgg/t3code#16838
* @RustedAperture made their first contribution in pingdotgg/t3code#16325
* @sheehanmunim made their first contribution in pingdotgg/t3code#17080
* @realhasanshoaib made their first contribution in pingdotgg/t3code#14543
* @whoisaldo made their first contribution in pingdotgg/t3code#16480

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261011.2955...v0.0.46-nightly.20261011.2967

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261011.2967
LadyBluenotes added a commit to LadyBluenotes/grandtheftrepo that referenced this pull request Oct 12, 2026
* feat(source-control): GitCafe lives in @t3tools/source-control-gitcafe (pingdotgg#17681)

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

* fix(web): add provider wizard no longer shifts sideways while it grows (pingdotgg#17292)

* fix(web): PR search keeps the caret where you type (pingdotgg#17675)

* fix(server): thread PR badges catch up when another environment reads the PR (pingdotgg#17729)

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

* fix(server): refuse editor paths with line breaks or quotes when the editor is a Windows command shim (pingdotgg#17749)

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

* fix(web): align compact button touch targets (pingdotgg#17748)

* fix(server): t3_thread_launch refuses a new worktree whose base ref has no commit (pingdotgg#17791)

* fix(web): omit underlines on markdown image links (pingdotgg#17728)

* fix(server): restore auto resume for wrapped Claude gateway rate limits (pingdotgg#17778)

* fix(opencode): name OpenCode 2 sessions after their thread (pingdotgg#17414)

* fix(web): find update settings from the command palette (pingdotgg#17396)

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

* fix(provider-opencode): tell OpenCode Zen and Go models apart (pingdotgg#17424)

* fix(server): a pull that fast-forwards no longer fails on large Git output (pingdotgg#17376)

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

* fix(web): cancel question auto-advance after navigation (pingdotgg#17364)

* fix(server): a bare repository name resolves to the signed-in account again (pingdotgg#17379)

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

* fix(web): a maximized right panel stays maximized when you return to its thread (pingdotgg#17327)

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

* fix(mobile): allow starting a task with only an image (pingdotgg#17409)

* fix(server): PR watch no longer reports passed while a second run of a check is still going (pingdotgg#17344)

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

* fix(server): say why a thread can't be settled (pingdotgg#17258)

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

* fix(server): prevent busy terminals from starving history persistence (pingdotgg#17181)

* feat(server): use macOS .icns app icons as project icons (pingdotgg#17149)

* fix(mobile): usage reset icon lines up with its row (pingdotgg#17175)

* fix(web): paths pasted after @ keep their underscores (pingdotgg#16619)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix(server): settle every OpenCode subagent call one report answers (pingdotgg#17134)

* perf(web): switching project keeps Diagnostics and Providers mounted (pingdotgg#17122)

* perf(web): Open Source Licenses downloads its manifest once per session (pingdotgg#17119)

* fix(server): restore OpenCode adapter test typecheck (pingdotgg#17810)

* fix(server): Claude subagents show the reasoning effort they run at (pingdotgg#17496)

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

* feat(server): stop Claude subagents without stopping their owner (pingdotgg#17826)

* fix(server): stopped native subagents no longer read as Running (pingdotgg#17223)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* perf(server): t3_thread_list reads only the listed project's threads (pingdotgg#17843)

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

* fix(server): show diffs for projects outside the server cwd (pingdotgg#17724)

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

* fix(server): check the specific scope for scripts, preview input, and full-access MCP grants (pingdotgg#17772)

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

* fix(source-control): stop Forgejo status refresh from scanning every pull request (pingdotgg#12223)

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>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Signed-off-by: Loïs Postula <lois@postu.la>

* refactor(contracts): source control provider kind is an open branded slug (pingdotgg#17739)

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

* feat(source-control): each host package ships a client definition (pingdotgg#17746)

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

* refactor(client-runtime): add project clone sources come from host definitions (pingdotgg#17756)

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

* refactor(web): host presentation and behavior come from client definitions (pingdotgg#17757)

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

* refactor(source-control): reference parsing and project matching are host resolvers (pingdotgg#17770)

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

* feat(pull-requests): quick actions follow each host's capabilities, not GitHub (pingdotgg#17774)

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

* feat(projects): new projects can be published to any ready host (pingdotgg#17860)

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

* fix(server): send Claude MCP servers over the control channel (pingdotgg#17898)

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

* fix(web): a finished reply replaced by a steer is no longer labeled partial (pingdotgg#17761)

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

* fix(client-runtime): queued runs that start after a steer show up in the thread (pingdotgg#17764)

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

* feat(mobile): choose the microphone order for voice input (pingdotgg#17896)

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

* feat(source-control): host settings live on each host's definition, with a GitCafe token (pingdotgg#17901)

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

* fix(pi): preserve tool images and structured results (pingdotgg#17851)

* fix(server): Claude 5 task lists reach the tasks drawer (pingdotgg#14964)

* fix(web): find bar and thread details panel stop covering each other (pingdotgg#17858)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix(web): use server metadata for file chip icons (pingdotgg#17923)

* fix(desktop): copy images from HTML previews (pingdotgg#17555)

* docs(pi): update installation and remote login guidance (pingdotgg#17836)

* fix(pi): preserve native abort outcomes (pingdotgg#17853)

* fix(pi): keep thinking defaults specific to each model (pingdotgg#17835)

* fix(pi): preserve shell command exit codes (pingdotgg#17834)

* fix(pi): expire and cancel extension approvals (pingdotgg#17840)

* feat(pi): include native sessions in usage reports (pingdotgg#17848)

* fix(server): route Copilot ACP subagent output into subagent threads (pingdotgg#17714)

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

* fix(web): composer banner titles truncate beside their icon instead of wrapping (pingdotgg#17699)

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

* fix(server): Muse turns no longer fail on Windows (pingdotgg#17163)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>

* fix(pi): allow known read-only T3 tools without approval (pingdotgg#17852)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix: worktree threads keep their worktree when the agent starts, and messages sent during setup queue (pingdotgg#17654)

* fix(server): keep Claude workflows alive while they report progress (pingdotgg#17715)

* fix(web): media preview centers its content and pins the close button (pingdotgg#17951)

* fix(server): threads without a project no longer need Git installed (pingdotgg#17959)

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

* fix(web): toggling tools and thinking at the bottom keeps you at the bottom (pingdotgg#17954)

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

* fix(web): Compact chip follows Claude's real prompt cache TTL (pingdotgg#17945)

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

* fix(usage): bound OpenCode history reads to prevent backend OOM (pingdotgg#17961)

* refactor: format diff line counts through one shared helper (pingdotgg#17948)

* fix: new projects start their first thread in the project folder, not a worktree (pingdotgg#17371)

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

* perf(server): drive shell last-error lookup from thread bindings (pingdotgg#17842)

Co-authored-by: Victor Vogel <263261067+only21mil@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(server): skip parsing plain terminal history output (pingdotgg#17179)

* perf(server): batch terminal history writes every 250 ms (pingdotgg#17183)

* perf(server): storage cleanup no longer runs a full status or size walk for worktrees it keeps (pingdotgg#17911)

* perf(usage): usage scans skip OpenCode legacy messages older than the window (pingdotgg#17254)

* perf(usage): OpenCode legacy walk stats entries before checking for symlinks (pingdotgg#17638)

Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): MCP app permission prompts no longer overflow the screen (pingdotgg#17962)

* feat(provider-antigravity): support subscription quota and usage limits (pingdotgg#17530)

* fix(desktop): keep generated annotation styles in sync (pingdotgg#17838)

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

* fix(web): Resume continues on the model picked in the composer (pingdotgg#17867)

* fix(devices): bump agent-device to 0.21.24 for native Windows hosts (pingdotgg#17706)

* fix(web): keybinding group headings no longer touch the group above (pingdotgg#17766)

* feat(web): configure OpenTelemetry exports in diagnostics (pingdotgg#12538)

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

* docs: update user count to 500k (pingdotgg#17783)

* fix(mobile): working pill no longer bulges on its right end (pingdotgg#16143)

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

* perf(opencode): stop retaining every message of a loaded OpenCode thread (pingdotgg#17784)

* fix(web): switch thumbs stay in their track while scrolling (pingdotgg#15240)

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

* fix(keybindings): thread jumps no longer overlap model picker jumps (pingdotgg#14475)

* fix(mobile): restore QR scanning in iPad pairing sheet (pingdotgg#16019)

* fix(server): delegated Muse tasks no longer ask approval for every command (pingdotgg#18065)

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

* fix(codex): prevent unsupported agent history in ChatGPT sharing (pingdotgg#17499)

Co-authored-by: connorwalker <connor@project-chinook.com>

* fix(server): disabled providers stop checking for CLI updates (pingdotgg#16772)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(mobile): round Android queued message sheet corners (pingdotgg#14934)

* fix(ssh): record the archive lock owner's real PID (pingdotgg#14598)

* fix(desktop): keep annotation comment direction independent of host page (pingdotgg#11005)

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

* fix(ssh): qualify runner script builders in tunnel test (pingdotgg#18078)

* fix(web): keep thread links open until the shell is live (pingdotgg#14697)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(web): scope PR title collapse to tab scrollers (pingdotgg#14644)

* fix(server): detect fork PRs for branches without upstreams (pingdotgg#13894)

Co-authored-by: maria-rcks <maria@kuuro.net>

* fix(search): find threads by their branch PR number (pingdotgg#14658)

Co-authored-by: maria-rcks <maria@kuuro.net>

* feat(web): show Claude workflow phases and members in Lineage (pingdotgg#12598)

Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: GPT-6.1-Sol (Codex) <noreply@openai.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(mobile): round Android Agents sheet corners (pingdotgg#14925)

* fix(web): the Usage page sends a signed-out browser to pairing (pingdotgg#17938)

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

* fix(server): OpenCode 2 continuations end after a reconnect took a Stop's end (pingdotgg#14744)

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

* fix(server): OpenCode 2 continuations replay only their own background reply (pingdotgg#14752)

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

* fix(server): ACP reapplies a model after a switch away from it failed partway (pingdotgg#14723)

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

* fix(web): focus settings search with command-f (pingdotgg#17859)

* fix(mobile): keep Android project paths on one line (pingdotgg#14178)

* fix(web): unpin preview dragging on narrow chat canvases (pingdotgg#15556)

* fix(web): thread details toggle no longer covers the thread title on Windows desktop (pingdotgg#16869)

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

* fix(server): a directory no longer resolves as the resource monitor binary (pingdotgg#16838)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix(server): a Claude usage limit no longer resets the context meter to 0% (pingdotgg#16394)

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

* fix(server): GitLab merge requests can expand unchanged lines (pingdotgg#17528)

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

* fix(provider-cursor): a skill tree deeper than the scan limit no longer hides every skill (pingdotgg#17389)

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

* fix(web): pass hex theme colors to HTML renders (pingdotgg#16325)

* fix(web): align the API estimate info icon (pingdotgg#15655)

* test(server): ACP teardown tests pass on Windows hosts (pingdotgg#17080)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix(server): sync device tool license versions with installer pins (pingdotgg#18121)

* fix: sync model favorites and visibility across clients (pingdotgg#16816)

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

* chore(deps-dev): bump compression from 1.8.1 to 1.8.2 in the npm_and_yarn group across 1 directory (pingdotgg#16309)

Signed-off-by: dependabot[bot] <support@github.com>

* fix(server): update fff to stop runaway watcher rescans (pingdotgg#14543)

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

* fix(mobile): license generation works with filtered installs (pingdotgg#18127)

* fix(mobile): image-only messages ask the agent to respond, like desktop (pingdotgg#16480)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* feat(pull-requests): guided reviews, a beta tour of a pull request (pingdotgg#18124)

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

* feat(mcp): agents can write and read pull request review guides (pingdotgg#18143)

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

* fix(server): Sol Ultrafast stops vanishing from the Codex model picker (pingdotgg#18200)

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

* fix(usage): say resets momentarily in the final minute (pingdotgg#17869)

* fix(server): preserve ambient Cursor MCP servers (pingdotgg#15875)

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

* fix(server): skip Windows cleanup for exited child processes (pingdotgg#16007)

* feat(settings): providers can be turned on or off per project (pingdotgg#17879)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* perf(github): resolve credentials once per GraphQL request (pingdotgg#18289)

* fix(server): refresh linked PRs without a checkout (pingdotgg#17167)

* fix(mobile): add compose to the single-column iPad list (pingdotgg#18157)

* fix(mobile): let sheet lists scroll before dismissal (pingdotgg#17177)

* fix(mobile): restore compact iPad trackpad scrolling (pingdotgg#13665)

* fix(mobile): preserve filters across layout changes (pingdotgg#13085)

* fix(mobile): separate unfolded thread list from header (pingdotgg#13088)

* fix(android): Match thread fallback layouts to the loaded pane (pingdotgg#14669)

* fix(mobile): size inline MCP apps to their content (pingdotgg#17040)

* fix(mobile): preserve iPad search chrome across layout changes (pingdotgg#13667)

* fix(client): apply host color scheme to saved MCP apps (pingdotgg#17026)

* fix(android): Use MD3 loading spinners (pingdotgg#14282)

* fix(client): merge No project filters across environments (pingdotgg#17050)

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

* fix(client): tolerate blocked cookies in MCP app sandboxes (pingdotgg#17027)

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

* feat(mobile): browse and review pull requests natively (pingdotgg#18126)

* feat(mobile): guided reviews for pull requests (pingdotgg#18267)

* fix(devices): refresh backlogged iOS video and require input admission (pingdotgg#18326)

* feat(mobile): keep pull requests available offline (pingdotgg#18351)

* fix(mobile): keep bot badges out of PR attachments (pingdotgg#18347)

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

* fix(desktop): tooltips no longer open under the Windows and Linux window controls (pingdotgg#17672)

* fix(web): revert trailing toast icons (pingdotgg#18356)

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

* fix(web): even 4px inset around rows in the PR badge tooltip (pingdotgg#18352)

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

* ci(mobile): publish nightly Android APKs to a GitHub prerelease (pingdotgg#16271)

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

---------

Signed-off-by: Loïs Postula <lois@postu.la>
Signed-off-by: id0sch <id0sch@users.noreply.github.com>
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Tristan Knight <admin@snappeh.com>
Co-authored-by: Saikrishna Ambeti <saikrisha.ambeti1@gmail.com>
Co-authored-by: Zach <tzachbonfil@gmail.com>
Co-authored-by: Nikita Koynov <43469098+nkoynov@users.noreply.github.com>
Co-authored-by: Sergiy Dybskiy <s@serg.tech>
Co-authored-by: Claude <claude@anthropic.com>
Co-authored-by: Karan Sharma <hello@mrkaran.dev>
Co-authored-by: Scott Norteman <snorteman@gmail.com>
Co-authored-by: Maxwell Young <maxtheyoung@gmail.com>
Co-authored-by: James Villarrubia <8172873+jamesvillarrubia@users.noreply.github.com>
Co-authored-by: Claudesaul <139932571+Claudesaul@users.noreply.github.com>
Co-authored-by: Dylan Corso <96969209+DylanTX@users.noreply.github.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Prathmesh Vhatkar <psv2522@gmail.com>
Co-authored-by: Afonso Ferreira <99990310+Aforno@users.noreply.github.com>
Co-authored-by: Derek Trimm <275381468+derektrimm@users.noreply.github.com>
Co-authored-by: Rakshith Bhat <88523594+RakshithBhat03@users.noreply.github.com>
Co-authored-by: Krishna Vijay <228381532+im-kvijay@users.noreply.github.com>
Co-authored-by: only21mil <thevictorvogel@gmail.com>
Co-authored-by: maria <maria@kuuro.net>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Loïs Postula <lois@postu.la>
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>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: Igor Makowski <56691628+Mnigos@users.noreply.github.com>
Co-authored-by: Matthew Feroz <136640686+MatthewFeroz@users.noreply.github.com>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Nicholas Tindle <nicktindle@outlook.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Victor Vogel <263261067+only21mil@users.noreply.github.com>
Co-authored-by: Maciek Geneja <88164545+Maseeek@users.noreply.github.com>
Co-authored-by: Mike Olson <1510193+mwolson@users.noreply.github.com>
Co-authored-by: Akbar Danial Akma <44286537+akbarakma@users.noreply.github.com>
Co-authored-by: TanJeeSchuan <89920999+TanJeeSchuan@users.noreply.github.com>
Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com>
Co-authored-by: kamkm <99585688+Kamkmgamer@users.noreply.github.com>
Co-authored-by: id0Sch <id0Sch@users.noreply.github.com>
Co-authored-by: raphaelpra <3457781+raphaelpra@users.noreply.github.com>
Co-authored-by: Fluffy-Bunny-23 <193831219+Fluffy-Bunny-23@users.noreply.github.com>
Co-authored-by: Arham Mahajan <89351952+arhammahajan@users.noreply.github.com>
Co-authored-by: Connor Walker <70173040+connwalk@users.noreply.github.com>
Co-authored-by: connorwalker <connor@project-chinook.com>
Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: Guillermo Casanova <75276669+Gigioxx@users.noreply.github.com>
Co-authored-by: Abdelrhman Ehab <105376880+abdelrhmanehab10@users.noreply.github.com>
Co-authored-by: Alex Southwell <saphid@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Adamulek123 <adam.bogucki2018@gmail.com>
Co-authored-by: GPT-6.1-Sol (Codex) <noreply@openai.com>
Co-authored-by: AdEx-Partners-DE <stark.burns@adexpartners.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: wellorbetter <1419919418@qq.com>
Co-authored-by: freddy-d <38051127+freddy-d@users.noreply.github.com>
Co-authored-by: Furox <177975472+Furox-Art@users.noreply.github.com>
Co-authored-by: Vantrongs <i.kosilov2003@gmail.com>
Co-authored-by: Cameron Varley <cam.avarley@gmail.com>
Co-authored-by: Sheehan Munim <80079528+sheehanmunim@users.noreply.github.com>
Co-authored-by: Jake Leventhal <jakeleventhal@me.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Hasan Shoaib <142208891+realhasanshoaib@users.noreply.github.com>
Co-authored-by: Ali Younes <159104116+whoisaldo@users.noreply.github.com>
Co-authored-by: Arav Jain <aravhawk@gmail.com>
Co-authored-by: Alb11747 <albertli_042@hotmail.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
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:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants