Skip to content

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

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
saphid:fix/thread-links-wait-for-live-shell
Oct 11, 2026
Merged

maria-rcks merged 1 commit into
pingdotgg:mainfrom
saphid:fix/thread-links-wait-for-live-shell

Conversation

@saphid

@saphid saphid commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Opening a link to a thread created since the web client's last visit (from another device, the CLI, or an agent) lands on an unrelated New thread. It stays there even after the thread appears in the sidebar. The route treated any shell snapshot as authoritative, including the cache saved from the last visit, so the thread read as missing and the route replaced the URL with / (#14689). Desktop uses the same route.

Change

ThreadRouteView now decides a thread is missing only once the environment shell's status is live, instead of as soon as any snapshot exists. resolveThreadRouteRenderState reports ready when thread detail or a local draft has already loaded, before it checks whether the shell is live. So:

  • While the shell is cached or synchronizing, the link stays on /<environmentId>/<threadId>. Already-loaded content is shown; otherwise the existing loading state remains.
  • Once the shell is live, a thread that is still missing or marked deleted leaves the route through the existing redirect.
  • A sync error leaves the shell non-live, so it no longer redirects to a stale-cache thread.

The shell synchronization in packages/client-runtime is unchanged. Mobile already waits for hydration and isn't affected.

Scope and approval

Fixes #14689, the triaged bug, labelled bug and via-triage. The maintainer triage set the intended behavior this follows. It replaces #10604, which addressed the same web behavior but was closed for missing verification; GitHub didn't allow reopening it. This version is narrower: it drops #10604's change to legacy shell resubscription, which this fix doesn't need.

Behavior left as it is on main: a missing link in an environment with no threads still doesn't redirect once the shell is live, and a local draft still takes precedence over a confirmed deletion.

Verification

Focused tests: apps/web vp test run src/threadRoutes.test.ts, 16 passed. The new cases:

  • cached and synchronizing shells aren't authoritative;
  • loaded detail or a draft renders while the shell is cached or synchronizing;
  • a deleted thread waits for the live shell before redirecting.

Targeted lint, format, and the @t3tools/web typecheck passed.

Reproduction (the #14689 scenario), run the same way on main b33eda1 and on this branch:

  1. Open the web client and view a thread, so the browser caches the shell.
  2. Close it.
  3. Create a thread elsewhere (HTTP dispatch thread.create).
  4. Open a full-page link to the new thread.
  5. About 8 s later, drop the client's socket so it reconnects.

Environment: headless Chromium 153 (chromium-headless-shell), 1280×800, macOS arm64, Node 24.12.0. An isolated local server ran with synthetic data, started from source with node apps/server/src/bin.ts --mode web; this change doesn't touch server code. A small local proxy served each web build and passed traffic through unchanged; its only intervention was closing the sockets for step 5. T3's Browser panel was unavailable here ("No preview automation host is available"), so the capture was scripted. Recordings are real time, with no cuts or speed changes; GIFs are sampled at 10 fps. The "Codex update available" toast comes from the test server probing a local Codex CLI. The reconnect banner shows the test server's environment name.

Before (main b33eda1): the link to Created elsewhere (main) is replaced by workspace / New thread by 3.1 s. It stays there after the shell is live and after reconnecting, while the target sits at the top of the sidebar.

Before: main replaces the link to a newly created thread with an unrelated New thread

MP4 · Screenshot once the shell is live

Enlarged header once the shell is live (cropped from that screenshot):

Before, enlarged: header reads workspace / New thread

After (this branch): the link to Created elsewhere (fix) shows that thread by 3.1 s, keeps it once the shell is live (selected in the sidebar), and keeps it through the socket drop and reconnect.

After: the link stays on the newly created thread through live sync and reconnect

MP4 · Screenshot once the shell is live · Screenshot while reconnecting · Capture receipt

Enlarged header once the shell is live (cropped from that screenshot):

After, enlarged: header reads Demo project / Created elsewhere (fix)

Not checked: the desktop app (it uses the same route), sync-error and deleted-thread paths in a real client (covered by the focused tests only), and relay/tunnel connections.

Original fix (#10604): GPT-5.6 Sol and GPT-6 Astra in the Codex harness. This narrowed fix, tests and evidence: Claude Opus 5.5 in Claude Code via T3 Code; browser capture driven by GPT-6 Astra; independent review by GPT-6.1 Sol (Codex harness via T3 Code).

🤖 Generated with Claude Code

@github-actions github-actions Bot added the vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. label Oct 2, 2026
@github-actions github-actions Bot added the size:S 10-29 changed lines (additions + deletions). label Oct 2, 2026
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 2, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 4ed3c22

Macroscope's review found this PR approvable — This is a narrowly scoped, well-tested web bug fix that prevents stale or incomplete shell snapshots from redirecting valid thread links. Existing redirect behavior remains intact after the shell becomes live, with no schema, infrastructure, security, billing, or static-analysis changes.

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

@coderabbitai

coderabbitai Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: pingdotgg/t3code/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 0d3c7560-ada7-4160-9949-0354f69723ad
📥 Commits

Reviewing files that changed from the base of the PR and between 38d9384 and 4ed3c22.

📒 Files selected for processing (3)
  • apps/web/src/components/ThreadRouteView.tsx
  • apps/web/src/threadRoutes.test.ts
  • apps/web/src/threadRoutes.ts

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


📝 Walkthrough

Walkthrough

Thread route readiness now uses snapshot status to determine bootstrap completion. Available server-thread details and local drafts can render as ready while the shell snapshot is cached or synchronizing.

Changes

Thread route readiness

Layer / File(s) Summary
Snapshot authority and render state
apps/web/src/threadRoutes.ts, apps/web/src/threadRoutes.test.ts
A new helper treats only live snapshots as authoritative. The resolver returns ready when server-thread details or a local draft exist, and tests cover snapshot statuses and render states.
Route bootstrap integration
apps/web/src/components/ThreadRouteView.tsx, apps/web/src/threadRoutes.test.ts
ThreadRouteView uses snapshot authority to determine bootstrap completion. A test verifies that a deleted thread with no detail remains loading while its snapshot is cached.

Priority: ⬇️ Low

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

Change: Bug fix · Severity of issue fixed: Low

Suggested reviewers: juliusmarminge

Merge Risk: ⚪ Minimal · up to 4ed3c

Missing-thread redirects now wait for initial shell catch-up, reducing redirects caused by stale cached snapshots. No material merge risk introduced by this change remains.

Security Architecture Review

Security architecture risk: 🔵 Low · up to 4ed3c

The change preserves environment-specific thread identity and avoids redirects based on stale data. No authorization bypass was established, but cached deleted-thread behavior and file cleanup during failed synchronization remain partly unverified.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The demonstrated client-side scope is the route-selected environment/thread, its local draft state, and queued file objects. Thread identifiers remain paired with environment identifiers; inspected file consumption and removal use field-wise scoped-reference equality. Broader tenant, service, or credential exposure was not established.

Trust Boundaries and Controls

  • observed — ChatView reconstructs a scoped reference from route identifiers and independently derives thread-detail loading state. Representative actions retain loading and environment-availability gates. These controls counter an assumption that route readiness alone grants command authority, but complete enforcement for cached deleted-thread actions remains unverified.

Resilience and Maintainability Implications

  • inferred — A queued drop that lands on a target lacking usable thread state can remain unresolved while synchronization never becomes live. Failed navigation removes its individual drop, ChatView consumes matching drops when an active thread exists, and recovery to live triggers missing-target cleanup. An independent abandonment or unmount cleanup owner was not established; the supported uncertainty concerns local file-state ownership, not demonstrated cross-thread disclosure.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 4 functions across 3 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: thread links remain open until the shell is live.
Description check ✅ Passed The description covers the problem, change, scope and approval, and focused verification. It also identifies untested paths and includes UI evidence.
Linked Issues check ✅ Passed Issue #14689 asks the web route to wait until the shell can confirm whether a linked thread exists. ThreadRouteView now treats only a live shell as authoritative. resolveThreadRouteRenderState k…
Out of Scope Changes check ✅ Passed The whole-PR change summary identifies updates to ThreadRouteView.tsx, threadRoutes.ts, and threadRoutes.test.ts. The implementation and focused tests support issue #14689. No unrelated changes …
  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


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

@juliusmarminge juliusmarminge added the macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews label Oct 2, 2026 — with ChatGPT Codex Connector
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 2, 2026 05:39

Dismissing prior approval to re-evaluate 38d9384

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 2, 2026
Opening a link to a thread created since the client's last visit
redirected to an unrelated thread: the route treated any shell snapshot,
including the stale cache, as authoritative and reported the thread
missing.

Routes now decide a thread is missing only once the environment shell is
live. While it is cached or synchronizing, the link stays put, and thread
detail or a local draft that has already loaded is shown. A sync error
leaves the shell non-live, so it no longer redirects either.

Fixes pingdotgg#14689

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@saphid
saphid force-pushed the fix/thread-links-wait-for-live-shell branch from 38d9384 to 4ed3c22 Compare October 3, 2026 07:14
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 3, 2026 07:14

Dismissing prior approval to re-evaluate 4ed3c22

@saphid

saphid commented Oct 6, 2026

Copy link
Copy Markdown
Contributor Author

Review requested

Date (UTC) Reviewer Where
2026-10-06 Maria Discord DM

Logged so this PR shows when a maintainer was asked to review it.

@maria-rcks

Copy link
Copy Markdown
Collaborator

Note

Written by claude-opus-5-5 on behalf of Maria

Hi! We are cleaning up open PRs, and this one appears to have been created with an older model (gpt-5.6-sol). If this change is really important, we recommend rebuilding the PR with a newer model if possible.

@maria-rcks maria-rcks closed this Oct 11, 2026
@maria-rcks

Copy link
Copy Markdown
Collaborator

Note

Written by claude-opus-5-5 on behalf of Maria

Reopening, this was closed by mistake. Sorry for the noise!

@maria-rcks maria-rcks reopened this Oct 11, 2026
@maria-rcks
maria-rcks merged commit 6c13016 into pingdotgg:main Oct 11, 2026
62 checks passed
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Opening a link to a thread created since the web client's last visit redirects to an unrelated thread

3 participants