fix(web): prevent loading ssh environments from overriding navigation - #9168

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap
Sep 3, 2026
Merged

fix(web): prevent loading ssh environments from overriding navigation#9168
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap

Conversation

@flamboh

@flambohflamboh commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Basically, the navigation jumps around once the remote environment lazily loads. This fixes it!

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Starting a new draft can pause before navigation finishes. For SSH projects, resolving the draft's default environment mode can wait on the remote t3.json read.

If the user navigates to another page or thread during that wait, the delayed draft handler still redirects them when the read finishes.

Fix

Capture the route when a new-thread request starts. After a delayed project-default read finishes, stop the request if the user has navigated elsewhere.

The regression test covers both a new draft and a reusable empty draft while the user navigates elsewhere.

UI changes

Before

Cap.2026-09-01.at.22.01.32.mp4

After

Cap.2026-09-01.at.21.47.43.mp4

Verification

  • vp test run apps/web/src/hooks/useHandleNewThread.test.ts, 2 tests passed
  • vp lint apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts --report-unused-disable-directives
  • vp fmt --check apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts
  • vp run --filter @t3tools/web typecheck
  • git diff --check origin/main...HEAD

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix useNewThreadHandler to abort on navigation during async default read

  • Captures the router URL when each new-thread request starts and returns null after the async default environment-mode read if the URL changed, preventing stale navigation or draft remapping.
  • Covers both the existing-draft workspace-context path and the new-draft creation path in useHandleNewThread.ts.
  • Adds a parameterized regression test in useHandleNewThread.test.ts that simulates navigation during the pending read and asserts no navigation or draft assignment occurs.

Macroscope summarized 6c6d881.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 2, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6c6d881

Macroscope's review found this PR approvable — The PR makes a focused fix to cancel delayed draft creation when the user navigates away, preventing the asynchronous SSH environment lookup from pulling the UI back to a draft. It adds targeted coverage for fresh and reusable drafts without changing schemas, defaults, deployment, or sensitive code.

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

@flambohflamboh changed the title fix(web): keep usage open while SSH environments loadfix(web): prevent delayed drafts from overriding navigationSep 2, 2026
@flambohflamboh changed the title fix(web): prevent delayed drafts from overriding navigationfix(web): prevent loading ssh environments from overriding navigationSep 2, 2026
@juliusmarminge
juliusmarminge merged commit 57626eb into pingdotgg:mainSep 3, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* fix(web): send cited messages with Cmd+Enter by @extoci in pingdotgg/t3code#9307
* fix(web): preserve explicit preview navigation URLs by @nateEc in pingdotgg/t3code#8902
* fix(web): prevent loading ssh environments from overriding navigation by @flamboh in pingdotgg/t3code#9168
* fix(mobile): skip unsupported shared settings targets by @Lucenx9 in pingdotgg/t3code#9381
* fix(web): avoid duplicate Antigravity install status by @RakshithBhat03 in pingdotgg/t3code#9419
* fix(composer): mute fast icon when collapsed by @maria-rcks in pingdotgg/t3code#9451
* fix(web): unify skeleton loading animations on one pulse by @maria-rcks in pingdotgg/t3code#9448
* fix(web): prioritize authored pull requests by @maria-rcks in pingdotgg/t3code#9453
* fix(web): make project icons the default by @maria-rcks in pingdotgg/t3code#9457
* fix(server): reuse pr state when settling threads by @maria-rcks in pingdotgg/t3code#9459
* fix(web): keep agent images collapsed by @maria-rcks in pingdotgg/t3code#9460
* fix(web): banner buttons no longer expand the resting composer by @juliusmarminge in pingdotgg/t3code#9452
* fix(web): stop clipping the traits chevron on long Codex effort labels by @zortos293 in pingdotgg/t3code#9433
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260903.1270...v0.0.39-nightly.20260903.1272
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1272
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(web): prevent loading ssh environments from overriding navigation - #9168

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap
Sep 3, 2026
Merged

fix(web): prevent loading ssh environments from overriding navigation#9168
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap

Conversation

@flamboh

@flambohflamboh commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Basically, the navigation jumps around once the remote environment lazily loads. This fixes it!

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Starting a new draft can pause before navigation finishes. For SSH projects, resolving the draft's default environment mode can wait on the remote t3.json read.

If the user navigates to another page or thread during that wait, the delayed draft handler still redirects them when the read finishes.

Fix

Capture the route when a new-thread request starts. After a delayed project-default read finishes, stop the request if the user has navigated elsewhere.

The regression test covers both a new draft and a reusable empty draft while the user navigates elsewhere.

UI changes

Before

Cap.2026-09-01.at.22.01.32.mp4

After

Cap.2026-09-01.at.21.47.43.mp4

Verification

  • vp test run apps/web/src/hooks/useHandleNewThread.test.ts, 2 tests passed
  • vp lint apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts --report-unused-disable-directives
  • vp fmt --check apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts
  • vp run --filter @t3tools/web typecheck
  • git diff --check origin/main...HEAD

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix useNewThreadHandler to abort on navigation during async default read

  • Captures the router URL when each new-thread request starts and returns null after the async default environment-mode read if the URL changed, preventing stale navigation or draft remapping.
  • Covers both the existing-draft workspace-context path and the new-draft creation path in useHandleNewThread.ts.
  • Adds a parameterized regression test in useHandleNewThread.test.ts that simulates navigation during the pending read and asserts no navigation or draft assignment occurs.

Macroscope summarized 6c6d881.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 2, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6c6d881

Macroscope's review found this PR approvable — The PR makes a focused fix to cancel delayed draft creation when the user navigates away, preventing the asynchronous SSH environment lookup from pulling the UI back to a draft. It adds targeted coverage for fresh and reusable drafts without changing schemas, defaults, deployment, or sensitive code.

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

@flambohflamboh changed the title fix(web): keep usage open while SSH environments loadfix(web): prevent delayed drafts from overriding navigationSep 2, 2026
@flambohflamboh changed the title fix(web): prevent delayed drafts from overriding navigationfix(web): prevent loading ssh environments from overriding navigationSep 2, 2026
@juliusmarminge
juliusmarminge merged commit 57626eb into pingdotgg:mainSep 3, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* fix(web): send cited messages with Cmd+Enter by @extoci in pingdotgg/t3code#9307
* fix(web): preserve explicit preview navigation URLs by @nateEc in pingdotgg/t3code#8902
* fix(web): prevent loading ssh environments from overriding navigation by @flamboh in pingdotgg/t3code#9168
* fix(mobile): skip unsupported shared settings targets by @Lucenx9 in pingdotgg/t3code#9381
* fix(web): avoid duplicate Antigravity install status by @RakshithBhat03 in pingdotgg/t3code#9419
* fix(composer): mute fast icon when collapsed by @maria-rcks in pingdotgg/t3code#9451
* fix(web): unify skeleton loading animations on one pulse by @maria-rcks in pingdotgg/t3code#9448
* fix(web): prioritize authored pull requests by @maria-rcks in pingdotgg/t3code#9453
* fix(web): make project icons the default by @maria-rcks in pingdotgg/t3code#9457
* fix(server): reuse pr state when settling threads by @maria-rcks in pingdotgg/t3code#9459
* fix(web): keep agent images collapsed by @maria-rcks in pingdotgg/t3code#9460
* fix(web): banner buttons no longer expand the resting composer by @juliusmarminge in pingdotgg/t3code#9452
* fix(web): stop clipping the traits chevron on long Codex effort labels by @zortos293 in pingdotgg/t3code#9433
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260903.1270...v0.0.39-nightly.20260903.1272
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1272
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): prevent loading ssh environments from overriding navigation - #9168

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap
Sep 3, 2026
Merged

fix(web): prevent loading ssh environments from overriding navigation#9168
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap

Conversation

@flamboh

@flambohflamboh commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Basically, the navigation jumps around once the remote environment lazily loads. This fixes it!

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Starting a new draft can pause before navigation finishes. For SSH projects, resolving the draft's default environment mode can wait on the remote t3.json read.

If the user navigates to another page or thread during that wait, the delayed draft handler still redirects them when the read finishes.

Fix

Capture the route when a new-thread request starts. After a delayed project-default read finishes, stop the request if the user has navigated elsewhere.

The regression test covers both a new draft and a reusable empty draft while the user navigates elsewhere.

UI changes

Before

Cap.2026-09-01.at.22.01.32.mp4

After

Cap.2026-09-01.at.21.47.43.mp4

Verification

  • vp test run apps/web/src/hooks/useHandleNewThread.test.ts, 2 tests passed
  • vp lint apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts --report-unused-disable-directives
  • vp fmt --check apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts
  • vp run --filter @t3tools/web typecheck
  • git diff --check origin/main...HEAD

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix useNewThreadHandler to abort on navigation during async default read

  • Captures the router URL when each new-thread request starts and returns null after the async default environment-mode read if the URL changed, preventing stale navigation or draft remapping.
  • Covers both the existing-draft workspace-context path and the new-draft creation path in useHandleNewThread.ts.
  • Adds a parameterized regression test in useHandleNewThread.test.ts that simulates navigation during the pending read and asserts no navigation or draft assignment occurs.

Macroscope summarized 6c6d881.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 2, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6c6d881

Macroscope's review found this PR approvable — The PR makes a focused fix to cancel delayed draft creation when the user navigates away, preventing the asynchronous SSH environment lookup from pulling the UI back to a draft. It adds targeted coverage for fresh and reusable drafts without changing schemas, defaults, deployment, or sensitive code.

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

@flambohflamboh changed the title fix(web): keep usage open while SSH environments loadfix(web): prevent delayed drafts from overriding navigationSep 2, 2026
@flambohflamboh changed the title fix(web): prevent delayed drafts from overriding navigationfix(web): prevent loading ssh environments from overriding navigationSep 2, 2026
@juliusmarminge
juliusmarminge merged commit 57626eb into pingdotgg:mainSep 3, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* fix(web): send cited messages with Cmd+Enter by @extoci in pingdotgg/t3code#9307
* fix(web): preserve explicit preview navigation URLs by @nateEc in pingdotgg/t3code#8902
* fix(web): prevent loading ssh environments from overriding navigation by @flamboh in pingdotgg/t3code#9168
* fix(mobile): skip unsupported shared settings targets by @Lucenx9 in pingdotgg/t3code#9381
* fix(web): avoid duplicate Antigravity install status by @RakshithBhat03 in pingdotgg/t3code#9419
* fix(composer): mute fast icon when collapsed by @maria-rcks in pingdotgg/t3code#9451
* fix(web): unify skeleton loading animations on one pulse by @maria-rcks in pingdotgg/t3code#9448
* fix(web): prioritize authored pull requests by @maria-rcks in pingdotgg/t3code#9453
* fix(web): make project icons the default by @maria-rcks in pingdotgg/t3code#9457
* fix(server): reuse pr state when settling threads by @maria-rcks in pingdotgg/t3code#9459
* fix(web): keep agent images collapsed by @maria-rcks in pingdotgg/t3code#9460
* fix(web): banner buttons no longer expand the resting composer by @juliusmarminge in pingdotgg/t3code#9452
* fix(web): stop clipping the traits chevron on long Codex effort labels by @zortos293 in pingdotgg/t3code#9433
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260903.1270...v0.0.39-nightly.20260903.1272
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1272
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): prevent loading ssh environments from overriding navigation - #9168

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap
Sep 3, 2026
Merged

fix(web): prevent loading ssh environments from overriding navigation#9168
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap

Conversation

@flamboh

@flambohflamboh commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Basically, the navigation jumps around once the remote environment lazily loads. This fixes it!

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Starting a new draft can pause before navigation finishes. For SSH projects, resolving the draft's default environment mode can wait on the remote t3.json read.

If the user navigates to another page or thread during that wait, the delayed draft handler still redirects them when the read finishes.

Fix

Capture the route when a new-thread request starts. After a delayed project-default read finishes, stop the request if the user has navigated elsewhere.

The regression test covers both a new draft and a reusable empty draft while the user navigates elsewhere.

UI changes

Before

Cap.2026-09-01.at.22.01.32.mp4

After

Cap.2026-09-01.at.21.47.43.mp4

Verification

  • vp test run apps/web/src/hooks/useHandleNewThread.test.ts, 2 tests passed
  • vp lint apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts --report-unused-disable-directives
  • vp fmt --check apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts
  • vp run --filter @t3tools/web typecheck
  • git diff --check origin/main...HEAD

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix useNewThreadHandler to abort on navigation during async default read

  • Captures the router URL when each new-thread request starts and returns null after the async default environment-mode read if the URL changed, preventing stale navigation or draft remapping.
  • Covers both the existing-draft workspace-context path and the new-draft creation path in useHandleNewThread.ts.
  • Adds a parameterized regression test in useHandleNewThread.test.ts that simulates navigation during the pending read and asserts no navigation or draft assignment occurs.

Macroscope summarized 6c6d881.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 2, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6c6d881

Macroscope's review found this PR approvable — The PR makes a focused fix to cancel delayed draft creation when the user navigates away, preventing the asynchronous SSH environment lookup from pulling the UI back to a draft. It adds targeted coverage for fresh and reusable drafts without changing schemas, defaults, deployment, or sensitive code.

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

@flambohflamboh changed the title fix(web): keep usage open while SSH environments loadfix(web): prevent delayed drafts from overriding navigationSep 2, 2026
@flambohflamboh changed the title fix(web): prevent delayed drafts from overriding navigationfix(web): prevent loading ssh environments from overriding navigationSep 2, 2026
@juliusmarminge
juliusmarminge merged commit 57626eb into pingdotgg:mainSep 3, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* fix(web): send cited messages with Cmd+Enter by @extoci in pingdotgg/t3code#9307
* fix(web): preserve explicit preview navigation URLs by @nateEc in pingdotgg/t3code#8902
* fix(web): prevent loading ssh environments from overriding navigation by @flamboh in pingdotgg/t3code#9168
* fix(mobile): skip unsupported shared settings targets by @Lucenx9 in pingdotgg/t3code#9381
* fix(web): avoid duplicate Antigravity install status by @RakshithBhat03 in pingdotgg/t3code#9419
* fix(composer): mute fast icon when collapsed by @maria-rcks in pingdotgg/t3code#9451
* fix(web): unify skeleton loading animations on one pulse by @maria-rcks in pingdotgg/t3code#9448
* fix(web): prioritize authored pull requests by @maria-rcks in pingdotgg/t3code#9453
* fix(web): make project icons the default by @maria-rcks in pingdotgg/t3code#9457
* fix(server): reuse pr state when settling threads by @maria-rcks in pingdotgg/t3code#9459
* fix(web): keep agent images collapsed by @maria-rcks in pingdotgg/t3code#9460
* fix(web): banner buttons no longer expand the resting composer by @juliusmarminge in pingdotgg/t3code#9452
* fix(web): stop clipping the traits chevron on long Codex effort labels by @zortos293 in pingdotgg/t3code#9433
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260903.1270...v0.0.39-nightly.20260903.1272
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1272
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(web): prevent loading ssh environments from overriding navigation - #9168

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap
Sep 3, 2026
Merged

fix(web): prevent loading ssh environments from overriding navigation#9168
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap

Conversation

@flamboh

@flambohflamboh commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Basically, the navigation jumps around once the remote environment lazily loads. This fixes it!

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Starting a new draft can pause before navigation finishes. For SSH projects, resolving the draft's default environment mode can wait on the remote t3.json read.

If the user navigates to another page or thread during that wait, the delayed draft handler still redirects them when the read finishes.

Fix

Capture the route when a new-thread request starts. After a delayed project-default read finishes, stop the request if the user has navigated elsewhere.

The regression test covers both a new draft and a reusable empty draft while the user navigates elsewhere.

UI changes

Before

Cap.2026-09-01.at.22.01.32.mp4

After

Cap.2026-09-01.at.21.47.43.mp4

Verification

  • vp test run apps/web/src/hooks/useHandleNewThread.test.ts, 2 tests passed
  • vp lint apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts --report-unused-disable-directives
  • vp fmt --check apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts
  • vp run --filter @t3tools/web typecheck
  • git diff --check origin/main...HEAD

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix useNewThreadHandler to abort on navigation during async default read

  • Captures the router URL when each new-thread request starts and returns null after the async default environment-mode read if the URL changed, preventing stale navigation or draft remapping.
  • Covers both the existing-draft workspace-context path and the new-draft creation path in useHandleNewThread.ts.
  • Adds a parameterized regression test in useHandleNewThread.test.ts that simulates navigation during the pending read and asserts no navigation or draft assignment occurs.

Macroscope summarized 6c6d881.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 2, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6c6d881

Macroscope's review found this PR approvable — The PR makes a focused fix to cancel delayed draft creation when the user navigates away, preventing the asynchronous SSH environment lookup from pulling the UI back to a draft. It adds targeted coverage for fresh and reusable drafts without changing schemas, defaults, deployment, or sensitive code.

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

@flambohflamboh changed the title fix(web): keep usage open while SSH environments loadfix(web): prevent delayed drafts from overriding navigationSep 2, 2026
@flambohflamboh changed the title fix(web): prevent delayed drafts from overriding navigationfix(web): prevent loading ssh environments from overriding navigationSep 2, 2026
@juliusmarminge
juliusmarminge merged commit 57626eb into pingdotgg:mainSep 3, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* fix(web): send cited messages with Cmd+Enter by @extoci in pingdotgg/t3code#9307
* fix(web): preserve explicit preview navigation URLs by @nateEc in pingdotgg/t3code#8902
* fix(web): prevent loading ssh environments from overriding navigation by @flamboh in pingdotgg/t3code#9168
* fix(mobile): skip unsupported shared settings targets by @Lucenx9 in pingdotgg/t3code#9381
* fix(web): avoid duplicate Antigravity install status by @RakshithBhat03 in pingdotgg/t3code#9419
* fix(composer): mute fast icon when collapsed by @maria-rcks in pingdotgg/t3code#9451
* fix(web): unify skeleton loading animations on one pulse by @maria-rcks in pingdotgg/t3code#9448
* fix(web): prioritize authored pull requests by @maria-rcks in pingdotgg/t3code#9453
* fix(web): make project icons the default by @maria-rcks in pingdotgg/t3code#9457
* fix(server): reuse pr state when settling threads by @maria-rcks in pingdotgg/t3code#9459
* fix(web): keep agent images collapsed by @maria-rcks in pingdotgg/t3code#9460
* fix(web): banner buttons no longer expand the resting composer by @juliusmarminge in pingdotgg/t3code#9452
* fix(web): stop clipping the traits chevron on long Codex effort labels by @zortos293 in pingdotgg/t3code#9433
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260903.1270...v0.0.39-nightly.20260903.1272
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1272
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): prevent loading ssh environments from overriding navigation - #9168

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap
Sep 3, 2026
Merged

fix(web): prevent loading ssh environments from overriding navigation#9168
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap

Conversation

@flamboh

@flambohflamboh commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Basically, the navigation jumps around once the remote environment lazily loads. This fixes it!

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Starting a new draft can pause before navigation finishes. For SSH projects, resolving the draft's default environment mode can wait on the remote t3.json read.

If the user navigates to another page or thread during that wait, the delayed draft handler still redirects them when the read finishes.

Fix

Capture the route when a new-thread request starts. After a delayed project-default read finishes, stop the request if the user has navigated elsewhere.

The regression test covers both a new draft and a reusable empty draft while the user navigates elsewhere.

UI changes

Before

Cap.2026-09-01.at.22.01.32.mp4

After

Cap.2026-09-01.at.21.47.43.mp4

Verification

  • vp test run apps/web/src/hooks/useHandleNewThread.test.ts, 2 tests passed
  • vp lint apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts --report-unused-disable-directives
  • vp fmt --check apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts
  • vp run --filter @t3tools/web typecheck
  • git diff --check origin/main...HEAD

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix useNewThreadHandler to abort on navigation during async default read

  • Captures the router URL when each new-thread request starts and returns null after the async default environment-mode read if the URL changed, preventing stale navigation or draft remapping.
  • Covers both the existing-draft workspace-context path and the new-draft creation path in useHandleNewThread.ts.
  • Adds a parameterized regression test in useHandleNewThread.test.ts that simulates navigation during the pending read and asserts no navigation or draft assignment occurs.

Macroscope summarized 6c6d881.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 2, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6c6d881

Macroscope's review found this PR approvable — The PR makes a focused fix to cancel delayed draft creation when the user navigates away, preventing the asynchronous SSH environment lookup from pulling the UI back to a draft. It adds targeted coverage for fresh and reusable drafts without changing schemas, defaults, deployment, or sensitive code.

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

@flambohflamboh changed the title fix(web): keep usage open while SSH environments loadfix(web): prevent delayed drafts from overriding navigationSep 2, 2026
@flambohflamboh changed the title fix(web): prevent delayed drafts from overriding navigationfix(web): prevent loading ssh environments from overriding navigationSep 2, 2026
@juliusmarminge
juliusmarminge merged commit 57626eb into pingdotgg:mainSep 3, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* fix(web): send cited messages with Cmd+Enter by @extoci in pingdotgg/t3code#9307
* fix(web): preserve explicit preview navigation URLs by @nateEc in pingdotgg/t3code#8902
* fix(web): prevent loading ssh environments from overriding navigation by @flamboh in pingdotgg/t3code#9168
* fix(mobile): skip unsupported shared settings targets by @Lucenx9 in pingdotgg/t3code#9381
* fix(web): avoid duplicate Antigravity install status by @RakshithBhat03 in pingdotgg/t3code#9419
* fix(composer): mute fast icon when collapsed by @maria-rcks in pingdotgg/t3code#9451
* fix(web): unify skeleton loading animations on one pulse by @maria-rcks in pingdotgg/t3code#9448
* fix(web): prioritize authored pull requests by @maria-rcks in pingdotgg/t3code#9453
* fix(web): make project icons the default by @maria-rcks in pingdotgg/t3code#9457
* fix(server): reuse pr state when settling threads by @maria-rcks in pingdotgg/t3code#9459
* fix(web): keep agent images collapsed by @maria-rcks in pingdotgg/t3code#9460
* fix(web): banner buttons no longer expand the resting composer by @juliusmarminge in pingdotgg/t3code#9452
* fix(web): stop clipping the traits chevron on long Codex effort labels by @zortos293 in pingdotgg/t3code#9433
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260903.1270...v0.0.39-nightly.20260903.1272
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1272
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): prevent loading ssh environments from overriding navigation - #9168

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap
Sep 3, 2026
Merged

fix(web): prevent loading ssh environments from overriding navigation#9168
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap

Conversation

@flamboh

@flambohflamboh commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Basically, the navigation jumps around once the remote environment lazily loads. This fixes it!

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Starting a new draft can pause before navigation finishes. For SSH projects, resolving the draft's default environment mode can wait on the remote t3.json read.

If the user navigates to another page or thread during that wait, the delayed draft handler still redirects them when the read finishes.

Fix

Capture the route when a new-thread request starts. After a delayed project-default read finishes, stop the request if the user has navigated elsewhere.

The regression test covers both a new draft and a reusable empty draft while the user navigates elsewhere.

UI changes

Before

Cap.2026-09-01.at.22.01.32.mp4

After

Cap.2026-09-01.at.21.47.43.mp4

Verification

  • vp test run apps/web/src/hooks/useHandleNewThread.test.ts, 2 tests passed
  • vp lint apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts --report-unused-disable-directives
  • vp fmt --check apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts
  • vp run --filter @t3tools/web typecheck
  • git diff --check origin/main...HEAD

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix useNewThreadHandler to abort on navigation during async default read

  • Captures the router URL when each new-thread request starts and returns null after the async default environment-mode read if the URL changed, preventing stale navigation or draft remapping.
  • Covers both the existing-draft workspace-context path and the new-draft creation path in useHandleNewThread.ts.
  • Adds a parameterized regression test in useHandleNewThread.test.ts that simulates navigation during the pending read and asserts no navigation or draft assignment occurs.

Macroscope summarized 6c6d881.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 2, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6c6d881

Macroscope's review found this PR approvable — The PR makes a focused fix to cancel delayed draft creation when the user navigates away, preventing the asynchronous SSH environment lookup from pulling the UI back to a draft. It adds targeted coverage for fresh and reusable drafts without changing schemas, defaults, deployment, or sensitive code.

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

@flambohflamboh changed the title fix(web): keep usage open while SSH environments loadfix(web): prevent delayed drafts from overriding navigationSep 2, 2026
@flambohflamboh changed the title fix(web): prevent delayed drafts from overriding navigationfix(web): prevent loading ssh environments from overriding navigationSep 2, 2026
@juliusmarminge
juliusmarminge merged commit 57626eb into pingdotgg:mainSep 3, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* fix(web): send cited messages with Cmd+Enter by @extoci in pingdotgg/t3code#9307
* fix(web): preserve explicit preview navigation URLs by @nateEc in pingdotgg/t3code#8902
* fix(web): prevent loading ssh environments from overriding navigation by @flamboh in pingdotgg/t3code#9168
* fix(mobile): skip unsupported shared settings targets by @Lucenx9 in pingdotgg/t3code#9381
* fix(web): avoid duplicate Antigravity install status by @RakshithBhat03 in pingdotgg/t3code#9419
* fix(composer): mute fast icon when collapsed by @maria-rcks in pingdotgg/t3code#9451
* fix(web): unify skeleton loading animations on one pulse by @maria-rcks in pingdotgg/t3code#9448
* fix(web): prioritize authored pull requests by @maria-rcks in pingdotgg/t3code#9453
* fix(web): make project icons the default by @maria-rcks in pingdotgg/t3code#9457
* fix(server): reuse pr state when settling threads by @maria-rcks in pingdotgg/t3code#9459
* fix(web): keep agent images collapsed by @maria-rcks in pingdotgg/t3code#9460
* fix(web): banner buttons no longer expand the resting composer by @juliusmarminge in pingdotgg/t3code#9452
* fix(web): stop clipping the traits chevron on long Codex effort labels by @zortos293 in pingdotgg/t3code#9433
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260903.1270...v0.0.39-nightly.20260903.1272
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1272
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(web): prevent loading ssh environments from overriding navigation - #9168

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap
Sep 3, 2026
Merged

fix(web): prevent loading ssh environments from overriding navigation#9168
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
flamboh:t3code/fix-usage-tab-ssh-thread-swap

Conversation

@flamboh

@flambohflamboh commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Basically, the navigation jumps around once the remote environment lazily loads. This fixes it!

Note

🤖 GPT-5.6 Sol on behalf of Oliver

Problem

Starting a new draft can pause before navigation finishes. For SSH projects, resolving the draft's default environment mode can wait on the remote t3.json read.

If the user navigates to another page or thread during that wait, the delayed draft handler still redirects them when the read finishes.

Fix

Capture the route when a new-thread request starts. After a delayed project-default read finishes, stop the request if the user has navigated elsewhere.

The regression test covers both a new draft and a reusable empty draft while the user navigates elsewhere.

UI changes

Before

Cap.2026-09-01.at.22.01.32.mp4

After

Cap.2026-09-01.at.21.47.43.mp4

Verification

  • vp test run apps/web/src/hooks/useHandleNewThread.test.ts, 2 tests passed
  • vp lint apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts --report-unused-disable-directives
  • vp fmt --check apps/web/src/hooks/useHandleNewThread.ts apps/web/src/hooks/useHandleNewThread.test.ts
  • vp run --filter @t3tools/web typecheck
  • git diff --check origin/main...HEAD

Changes prepared by GPT-5.6 Sol through Codex in T3 Code.

Note

Fix useNewThreadHandler to abort on navigation during async default read

  • Captures the router URL when each new-thread request starts and returns null after the async default environment-mode read if the URL changed, preventing stale navigation or draft remapping.
  • Covers both the existing-draft workspace-context path and the new-draft creation path in useHandleNewThread.ts.
  • Adds a parameterized regression test in useHandleNewThread.test.ts that simulates navigation during the pending read and asserts no navigation or draft assignment occurs.

Macroscope summarized 6c6d881.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Sep 2, 2026
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 6c6d881

Macroscope's review found this PR approvable — The PR makes a focused fix to cancel delayed draft creation when the user navigates away, preventing the asynchronous SSH environment lookup from pulling the UI back to a draft. It adds targeted coverage for fresh and reusable drafts without changing schemas, defaults, deployment, or sensitive code.

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

@flambohflamboh changed the title fix(web): keep usage open while SSH environments loadfix(web): prevent delayed drafts from overriding navigationSep 2, 2026
@flambohflamboh changed the title fix(web): prevent delayed drafts from overriding navigationfix(web): prevent loading ssh environments from overriding navigationSep 2, 2026
@juliusmarminge
juliusmarminge merged commit 57626eb into pingdotgg:mainSep 3, 2026
22 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Sep 3, 2026
## What's Changed
* fix(web): send cited messages with Cmd+Enter by @extoci in pingdotgg/t3code#9307
* fix(web): preserve explicit preview navigation URLs by @nateEc in pingdotgg/t3code#8902
* fix(web): prevent loading ssh environments from overriding navigation by @flamboh in pingdotgg/t3code#9168
* fix(mobile): skip unsupported shared settings targets by @Lucenx9 in pingdotgg/t3code#9381
* fix(web): avoid duplicate Antigravity install status by @RakshithBhat03 in pingdotgg/t3code#9419
* fix(composer): mute fast icon when collapsed by @maria-rcks in pingdotgg/t3code#9451
* fix(web): unify skeleton loading animations on one pulse by @maria-rcks in pingdotgg/t3code#9448
* fix(web): prioritize authored pull requests by @maria-rcks in pingdotgg/t3code#9453
* fix(web): make project icons the default by @maria-rcks in pingdotgg/t3code#9457
* fix(server): reuse pr state when settling threads by @maria-rcks in pingdotgg/t3code#9459
* fix(web): keep agent images collapsed by @maria-rcks in pingdotgg/t3code#9460
* fix(web): banner buttons no longer expand the resting composer by @juliusmarminge in pingdotgg/t3code#9452
* fix(web): stop clipping the traits chevron on long Codex effort labels by @zortos293 in pingdotgg/t3code#9433
**Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260903.1270...v0.0.39-nightly.20260903.1272
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260903.1272
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS0-9 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@flamboh@juliusmarminge