fix(web): banner buttons no longer expand the resting composer - #9452

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click
Sep 3, 2026
Merged

fix(web): banner buttons no longer expand the resting composer#9452
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Sep 3, 2026

Copy link
Copy Markdown
Member

Problem

With the composer resting (blurred, desktop) and a banner docked above it, clicking a button on the banner — "Un-settle", "Wake now", "Restore branch", dismiss, etc. — expanded the composer instead of running the button. The banner stack renders inside the composer <form>, so the button taking focus fired the form's onFocusCapture, which treated it as a request to expand. The surface grew under the pointer and the click never landed on the button.

Fix

The data-chat-composer-collapsed-controls scope was already exempt from that focus capture, but only when the composer was collapsed on mobile. isInsideCollapsedComposerControls in composerEventScope.ts now applies that exemption on every viewport, and the form's onPointerDownCapture skips the same scope so pressing a banner does not steal focus into the editor either. Banners, the approval row, pending-input panel, and the tasks badge all already carry the marker.

Web/desktop only; mobile has its own composer.

Demo

Resting composer on a settled thread, real pointer click on Un-settle.

Before — the composer expands and the thread stays settled:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7ee41ed34918b89/before-banner-click-expands-composer.mp4

After — the thread un-settles, the banner leaves, the composer stays at rest:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a719c16f1d047dc/after-banner-click-unsettles.mp4

Verification

  • vp test run apps/web/src/components/chat/composerEventScope.test.ts
  • lint on the touched files, vpr typecheck in apps/web
  • Browser pass against a snapshot of real data, recorded above

Claude Fable 5 via Claude Code.

🤖 Generated with Claude Code


Note

Low Risk
Localized composer event-guard change with tests; no auth, data, or API impact.

Overview
Fixes a desktop bug where clicking banner actions (e.g. Un-settle, Wake now) on a resting composer expanded the input instead of running the control, because those elements sit inside the composer <form> and triggered expand-on-focus/pointer handlers.

Adds shared isInsideCollapsedComposerControls in composerEventScope.ts for targets under data-chat-composer-collapsed-controls (banners, approval row, pending-input chrome, tasks badge). ChatComposer now skips scroll-collapse and resting expansion on pointer down and focus capture for that scope on all viewports, replacing the previous mobile-collapsed-only focus check. Unit tests cover the helper.

Reviewed by Cursor Bugbot for commit bfe1108. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix banner buttons expanding the resting ChatComposer

  • Adds isInsideCollapsedComposerControls helper in composerEventScope.ts to detect event targets inside elements marked with the collapsed-controls data attribute
  • Updates pointer-down and focus capture handlers in ChatComposer.tsx to ignore events from that scope so the composer no longer expands or clears scroll-collapse state
  • Adds test coverage for the new helper in composerEventScope.test.ts

Macroscope summarized bfe1108.

Pressing a button on a banner docked above a resting composer moved focus
into the form, which the composer's focus capture treated as a request to
expand. The surface grew under the pointer and the click never reached the
button. The collapsed-controls scope was already exempt on mobile; apply it
on every viewport and skip pointer handling for it too.
Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Sep 3, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.6 KiB13.4 KiB−157 B (−1.1%)15.1 KiB
CodexThread snapshot wire7.0 KiB7.0 KiB+4 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.6 KiB6.4 KiB−161 B (−2.4%)7.8 KiB
CodexLive turn WebSocket decoded57.1 KiB56.2 KiB−910 B (−1.6%)66.4 KiB
CodexLive turn messages108−2 (−20.0%)21
ClaudeTotal thread wire13.5 KiB13.5 KiB+7 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire7.0 KiB7.0 KiB+1 B (+0.0%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.5 KiB+6 B (+0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded57.8 KiB57.8 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages880 (0.0%)21

Baseline: 2120fbc · PR result: bfe1108 · Source CI: success

Scenario and decoded snapshot size

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

  • Codex decoded thread snapshot: 113.8 KiB
  • Claude decoded thread snapshot: 114.5 KiB

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

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at bfe1108

Macroscope's review found this PR approvable — This is a localized web bug fix that adds a tested event guard for existing banner and drawer controls, preventing unintended composer expansion without affecting unrelated paths. It changes no product defaults, schemas, sensitive code, deployment configuration, or static-analysis directives.

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

@juliusmarminge
juliusmarminge merged commit 126afb5 into mainSep 3, 2026
23 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/fix-banner-button-click branch September 3, 2026 18:09
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:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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): banner buttons no longer expand the resting composer - #9452

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click
Sep 3, 2026
Merged

fix(web): banner buttons no longer expand the resting composer#9452
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Sep 3, 2026

Copy link
Copy Markdown
Member

Problem

With the composer resting (blurred, desktop) and a banner docked above it, clicking a button on the banner — "Un-settle", "Wake now", "Restore branch", dismiss, etc. — expanded the composer instead of running the button. The banner stack renders inside the composer <form>, so the button taking focus fired the form's onFocusCapture, which treated it as a request to expand. The surface grew under the pointer and the click never landed on the button.

Fix

The data-chat-composer-collapsed-controls scope was already exempt from that focus capture, but only when the composer was collapsed on mobile. isInsideCollapsedComposerControls in composerEventScope.ts now applies that exemption on every viewport, and the form's onPointerDownCapture skips the same scope so pressing a banner does not steal focus into the editor either. Banners, the approval row, pending-input panel, and the tasks badge all already carry the marker.

Web/desktop only; mobile has its own composer.

Demo

Resting composer on a settled thread, real pointer click on Un-settle.

Before — the composer expands and the thread stays settled:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7ee41ed34918b89/before-banner-click-expands-composer.mp4

After — the thread un-settles, the banner leaves, the composer stays at rest:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a719c16f1d047dc/after-banner-click-unsettles.mp4

Verification

  • vp test run apps/web/src/components/chat/composerEventScope.test.ts
  • lint on the touched files, vpr typecheck in apps/web
  • Browser pass against a snapshot of real data, recorded above

Claude Fable 5 via Claude Code.

🤖 Generated with Claude Code


Note

Low Risk
Localized composer event-guard change with tests; no auth, data, or API impact.

Overview
Fixes a desktop bug where clicking banner actions (e.g. Un-settle, Wake now) on a resting composer expanded the input instead of running the control, because those elements sit inside the composer <form> and triggered expand-on-focus/pointer handlers.

Adds shared isInsideCollapsedComposerControls in composerEventScope.ts for targets under data-chat-composer-collapsed-controls (banners, approval row, pending-input chrome, tasks badge). ChatComposer now skips scroll-collapse and resting expansion on pointer down and focus capture for that scope on all viewports, replacing the previous mobile-collapsed-only focus check. Unit tests cover the helper.

Reviewed by Cursor Bugbot for commit bfe1108. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix banner buttons expanding the resting ChatComposer

  • Adds isInsideCollapsedComposerControls helper in composerEventScope.ts to detect event targets inside elements marked with the collapsed-controls data attribute
  • Updates pointer-down and focus capture handlers in ChatComposer.tsx to ignore events from that scope so the composer no longer expands or clears scroll-collapse state
  • Adds test coverage for the new helper in composerEventScope.test.ts

Macroscope summarized bfe1108.

Pressing a button on a banner docked above a resting composer moved focus
into the form, which the composer's focus capture treated as a request to
expand. The surface grew under the pointer and the click never reached the
button. The collapsed-controls scope was already exempt on mobile; apply it
on every viewport and skip pointer handling for it too.
Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Sep 3, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.6 KiB13.4 KiB−157 B (−1.1%)15.1 KiB
CodexThread snapshot wire7.0 KiB7.0 KiB+4 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.6 KiB6.4 KiB−161 B (−2.4%)7.8 KiB
CodexLive turn WebSocket decoded57.1 KiB56.2 KiB−910 B (−1.6%)66.4 KiB
CodexLive turn messages108−2 (−20.0%)21
ClaudeTotal thread wire13.5 KiB13.5 KiB+7 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire7.0 KiB7.0 KiB+1 B (+0.0%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.5 KiB+6 B (+0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded57.8 KiB57.8 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages880 (0.0%)21

Baseline: 2120fbc · PR result: bfe1108 · Source CI: success

Scenario and decoded snapshot size

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

  • Codex decoded thread snapshot: 113.8 KiB
  • Claude decoded thread snapshot: 114.5 KiB

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

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at bfe1108

Macroscope's review found this PR approvable — This is a localized web bug fix that adds a tested event guard for existing banner and drawer controls, preventing unintended composer expansion without affecting unrelated paths. It changes no product defaults, schemas, sensitive code, deployment configuration, or static-analysis directives.

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

@juliusmarminge
juliusmarminge merged commit 126afb5 into mainSep 3, 2026
23 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/fix-banner-button-click branch September 3, 2026 18:09
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:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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): banner buttons no longer expand the resting composer - #9452

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click
Sep 3, 2026
Merged

fix(web): banner buttons no longer expand the resting composer#9452
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Sep 3, 2026

Copy link
Copy Markdown
Member

Problem

With the composer resting (blurred, desktop) and a banner docked above it, clicking a button on the banner — "Un-settle", "Wake now", "Restore branch", dismiss, etc. — expanded the composer instead of running the button. The banner stack renders inside the composer <form>, so the button taking focus fired the form's onFocusCapture, which treated it as a request to expand. The surface grew under the pointer and the click never landed on the button.

Fix

The data-chat-composer-collapsed-controls scope was already exempt from that focus capture, but only when the composer was collapsed on mobile. isInsideCollapsedComposerControls in composerEventScope.ts now applies that exemption on every viewport, and the form's onPointerDownCapture skips the same scope so pressing a banner does not steal focus into the editor either. Banners, the approval row, pending-input panel, and the tasks badge all already carry the marker.

Web/desktop only; mobile has its own composer.

Demo

Resting composer on a settled thread, real pointer click on Un-settle.

Before — the composer expands and the thread stays settled:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7ee41ed34918b89/before-banner-click-expands-composer.mp4

After — the thread un-settles, the banner leaves, the composer stays at rest:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a719c16f1d047dc/after-banner-click-unsettles.mp4

Verification

  • vp test run apps/web/src/components/chat/composerEventScope.test.ts
  • lint on the touched files, vpr typecheck in apps/web
  • Browser pass against a snapshot of real data, recorded above

Claude Fable 5 via Claude Code.

🤖 Generated with Claude Code


Note

Low Risk
Localized composer event-guard change with tests; no auth, data, or API impact.

Overview
Fixes a desktop bug where clicking banner actions (e.g. Un-settle, Wake now) on a resting composer expanded the input instead of running the control, because those elements sit inside the composer <form> and triggered expand-on-focus/pointer handlers.

Adds shared isInsideCollapsedComposerControls in composerEventScope.ts for targets under data-chat-composer-collapsed-controls (banners, approval row, pending-input chrome, tasks badge). ChatComposer now skips scroll-collapse and resting expansion on pointer down and focus capture for that scope on all viewports, replacing the previous mobile-collapsed-only focus check. Unit tests cover the helper.

Reviewed by Cursor Bugbot for commit bfe1108. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix banner buttons expanding the resting ChatComposer

  • Adds isInsideCollapsedComposerControls helper in composerEventScope.ts to detect event targets inside elements marked with the collapsed-controls data attribute
  • Updates pointer-down and focus capture handlers in ChatComposer.tsx to ignore events from that scope so the composer no longer expands or clears scroll-collapse state
  • Adds test coverage for the new helper in composerEventScope.test.ts

Macroscope summarized bfe1108.

Pressing a button on a banner docked above a resting composer moved focus
into the form, which the composer's focus capture treated as a request to
expand. The surface grew under the pointer and the click never reached the
button. The collapsed-controls scope was already exempt on mobile; apply it
on every viewport and skip pointer handling for it too.
Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Sep 3, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.6 KiB13.4 KiB−157 B (−1.1%)15.1 KiB
CodexThread snapshot wire7.0 KiB7.0 KiB+4 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.6 KiB6.4 KiB−161 B (−2.4%)7.8 KiB
CodexLive turn WebSocket decoded57.1 KiB56.2 KiB−910 B (−1.6%)66.4 KiB
CodexLive turn messages108−2 (−20.0%)21
ClaudeTotal thread wire13.5 KiB13.5 KiB+7 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire7.0 KiB7.0 KiB+1 B (+0.0%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.5 KiB+6 B (+0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded57.8 KiB57.8 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages880 (0.0%)21

Baseline: 2120fbc · PR result: bfe1108 · Source CI: success

Scenario and decoded snapshot size

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

  • Codex decoded thread snapshot: 113.8 KiB
  • Claude decoded thread snapshot: 114.5 KiB

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

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at bfe1108

Macroscope's review found this PR approvable — This is a localized web bug fix that adds a tested event guard for existing banner and drawer controls, preventing unintended composer expansion without affecting unrelated paths. It changes no product defaults, schemas, sensitive code, deployment configuration, or static-analysis directives.

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

@juliusmarminge
juliusmarminge merged commit 126afb5 into mainSep 3, 2026
23 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/fix-banner-button-click branch September 3, 2026 18:09
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:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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): banner buttons no longer expand the resting composer - #9452

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click
Sep 3, 2026
Merged

fix(web): banner buttons no longer expand the resting composer#9452
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Sep 3, 2026

Copy link
Copy Markdown
Member

Problem

With the composer resting (blurred, desktop) and a banner docked above it, clicking a button on the banner — "Un-settle", "Wake now", "Restore branch", dismiss, etc. — expanded the composer instead of running the button. The banner stack renders inside the composer <form>, so the button taking focus fired the form's onFocusCapture, which treated it as a request to expand. The surface grew under the pointer and the click never landed on the button.

Fix

The data-chat-composer-collapsed-controls scope was already exempt from that focus capture, but only when the composer was collapsed on mobile. isInsideCollapsedComposerControls in composerEventScope.ts now applies that exemption on every viewport, and the form's onPointerDownCapture skips the same scope so pressing a banner does not steal focus into the editor either. Banners, the approval row, pending-input panel, and the tasks badge all already carry the marker.

Web/desktop only; mobile has its own composer.

Demo

Resting composer on a settled thread, real pointer click on Un-settle.

Before — the composer expands and the thread stays settled:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7ee41ed34918b89/before-banner-click-expands-composer.mp4

After — the thread un-settles, the banner leaves, the composer stays at rest:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a719c16f1d047dc/after-banner-click-unsettles.mp4

Verification

  • vp test run apps/web/src/components/chat/composerEventScope.test.ts
  • lint on the touched files, vpr typecheck in apps/web
  • Browser pass against a snapshot of real data, recorded above

Claude Fable 5 via Claude Code.

🤖 Generated with Claude Code


Note

Low Risk
Localized composer event-guard change with tests; no auth, data, or API impact.

Overview
Fixes a desktop bug where clicking banner actions (e.g. Un-settle, Wake now) on a resting composer expanded the input instead of running the control, because those elements sit inside the composer <form> and triggered expand-on-focus/pointer handlers.

Adds shared isInsideCollapsedComposerControls in composerEventScope.ts for targets under data-chat-composer-collapsed-controls (banners, approval row, pending-input chrome, tasks badge). ChatComposer now skips scroll-collapse and resting expansion on pointer down and focus capture for that scope on all viewports, replacing the previous mobile-collapsed-only focus check. Unit tests cover the helper.

Reviewed by Cursor Bugbot for commit bfe1108. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix banner buttons expanding the resting ChatComposer

  • Adds isInsideCollapsedComposerControls helper in composerEventScope.ts to detect event targets inside elements marked with the collapsed-controls data attribute
  • Updates pointer-down and focus capture handlers in ChatComposer.tsx to ignore events from that scope so the composer no longer expands or clears scroll-collapse state
  • Adds test coverage for the new helper in composerEventScope.test.ts

Macroscope summarized bfe1108.

Pressing a button on a banner docked above a resting composer moved focus
into the form, which the composer's focus capture treated as a request to
expand. The surface grew under the pointer and the click never reached the
button. The collapsed-controls scope was already exempt on mobile; apply it
on every viewport and skip pointer handling for it too.
Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Sep 3, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.6 KiB13.4 KiB−157 B (−1.1%)15.1 KiB
CodexThread snapshot wire7.0 KiB7.0 KiB+4 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.6 KiB6.4 KiB−161 B (−2.4%)7.8 KiB
CodexLive turn WebSocket decoded57.1 KiB56.2 KiB−910 B (−1.6%)66.4 KiB
CodexLive turn messages108−2 (−20.0%)21
ClaudeTotal thread wire13.5 KiB13.5 KiB+7 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire7.0 KiB7.0 KiB+1 B (+0.0%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.5 KiB+6 B (+0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded57.8 KiB57.8 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages880 (0.0%)21

Baseline: 2120fbc · PR result: bfe1108 · Source CI: success

Scenario and decoded snapshot size

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

  • Codex decoded thread snapshot: 113.8 KiB
  • Claude decoded thread snapshot: 114.5 KiB

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

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at bfe1108

Macroscope's review found this PR approvable — This is a localized web bug fix that adds a tested event guard for existing banner and drawer controls, preventing unintended composer expansion without affecting unrelated paths. It changes no product defaults, schemas, sensitive code, deployment configuration, or static-analysis directives.

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

@juliusmarminge
juliusmarminge merged commit 126afb5 into mainSep 3, 2026
23 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/fix-banner-button-click branch September 3, 2026 18:09
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:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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): banner buttons no longer expand the resting composer - #9452

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click
Sep 3, 2026
Merged

fix(web): banner buttons no longer expand the resting composer#9452
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Sep 3, 2026

Copy link
Copy Markdown
Member

Problem

With the composer resting (blurred, desktop) and a banner docked above it, clicking a button on the banner — "Un-settle", "Wake now", "Restore branch", dismiss, etc. — expanded the composer instead of running the button. The banner stack renders inside the composer <form>, so the button taking focus fired the form's onFocusCapture, which treated it as a request to expand. The surface grew under the pointer and the click never landed on the button.

Fix

The data-chat-composer-collapsed-controls scope was already exempt from that focus capture, but only when the composer was collapsed on mobile. isInsideCollapsedComposerControls in composerEventScope.ts now applies that exemption on every viewport, and the form's onPointerDownCapture skips the same scope so pressing a banner does not steal focus into the editor either. Banners, the approval row, pending-input panel, and the tasks badge all already carry the marker.

Web/desktop only; mobile has its own composer.

Demo

Resting composer on a settled thread, real pointer click on Un-settle.

Before — the composer expands and the thread stays settled:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7ee41ed34918b89/before-banner-click-expands-composer.mp4

After — the thread un-settles, the banner leaves, the composer stays at rest:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a719c16f1d047dc/after-banner-click-unsettles.mp4

Verification

  • vp test run apps/web/src/components/chat/composerEventScope.test.ts
  • lint on the touched files, vpr typecheck in apps/web
  • Browser pass against a snapshot of real data, recorded above

Claude Fable 5 via Claude Code.

🤖 Generated with Claude Code


Note

Low Risk
Localized composer event-guard change with tests; no auth, data, or API impact.

Overview
Fixes a desktop bug where clicking banner actions (e.g. Un-settle, Wake now) on a resting composer expanded the input instead of running the control, because those elements sit inside the composer <form> and triggered expand-on-focus/pointer handlers.

Adds shared isInsideCollapsedComposerControls in composerEventScope.ts for targets under data-chat-composer-collapsed-controls (banners, approval row, pending-input chrome, tasks badge). ChatComposer now skips scroll-collapse and resting expansion on pointer down and focus capture for that scope on all viewports, replacing the previous mobile-collapsed-only focus check. Unit tests cover the helper.

Reviewed by Cursor Bugbot for commit bfe1108. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix banner buttons expanding the resting ChatComposer

  • Adds isInsideCollapsedComposerControls helper in composerEventScope.ts to detect event targets inside elements marked with the collapsed-controls data attribute
  • Updates pointer-down and focus capture handlers in ChatComposer.tsx to ignore events from that scope so the composer no longer expands or clears scroll-collapse state
  • Adds test coverage for the new helper in composerEventScope.test.ts

Macroscope summarized bfe1108.

Pressing a button on a banner docked above a resting composer moved focus
into the form, which the composer's focus capture treated as a request to
expand. The surface grew under the pointer and the click never reached the
button. The collapsed-controls scope was already exempt on mobile; apply it
on every viewport and skip pointer handling for it too.
Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Sep 3, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.6 KiB13.4 KiB−157 B (−1.1%)15.1 KiB
CodexThread snapshot wire7.0 KiB7.0 KiB+4 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.6 KiB6.4 KiB−161 B (−2.4%)7.8 KiB
CodexLive turn WebSocket decoded57.1 KiB56.2 KiB−910 B (−1.6%)66.4 KiB
CodexLive turn messages108−2 (−20.0%)21
ClaudeTotal thread wire13.5 KiB13.5 KiB+7 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire7.0 KiB7.0 KiB+1 B (+0.0%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.5 KiB+6 B (+0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded57.8 KiB57.8 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages880 (0.0%)21

Baseline: 2120fbc · PR result: bfe1108 · Source CI: success

Scenario and decoded snapshot size

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

  • Codex decoded thread snapshot: 113.8 KiB
  • Claude decoded thread snapshot: 114.5 KiB

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

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at bfe1108

Macroscope's review found this PR approvable — This is a localized web bug fix that adds a tested event guard for existing banner and drawer controls, preventing unintended composer expansion without affecting unrelated paths. It changes no product defaults, schemas, sensitive code, deployment configuration, or static-analysis directives.

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

@juliusmarminge
juliusmarminge merged commit 126afb5 into mainSep 3, 2026
23 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/fix-banner-button-click branch September 3, 2026 18:09
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:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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): banner buttons no longer expand the resting composer - #9452

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click
Sep 3, 2026
Merged

fix(web): banner buttons no longer expand the resting composer#9452
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Sep 3, 2026

Copy link
Copy Markdown
Member

Problem

With the composer resting (blurred, desktop) and a banner docked above it, clicking a button on the banner — "Un-settle", "Wake now", "Restore branch", dismiss, etc. — expanded the composer instead of running the button. The banner stack renders inside the composer <form>, so the button taking focus fired the form's onFocusCapture, which treated it as a request to expand. The surface grew under the pointer and the click never landed on the button.

Fix

The data-chat-composer-collapsed-controls scope was already exempt from that focus capture, but only when the composer was collapsed on mobile. isInsideCollapsedComposerControls in composerEventScope.ts now applies that exemption on every viewport, and the form's onPointerDownCapture skips the same scope so pressing a banner does not steal focus into the editor either. Banners, the approval row, pending-input panel, and the tasks badge all already carry the marker.

Web/desktop only; mobile has its own composer.

Demo

Resting composer on a settled thread, real pointer click on Un-settle.

Before — the composer expands and the thread stays settled:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7ee41ed34918b89/before-banner-click-expands-composer.mp4

After — the thread un-settles, the banner leaves, the composer stays at rest:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a719c16f1d047dc/after-banner-click-unsettles.mp4

Verification

  • vp test run apps/web/src/components/chat/composerEventScope.test.ts
  • lint on the touched files, vpr typecheck in apps/web
  • Browser pass against a snapshot of real data, recorded above

Claude Fable 5 via Claude Code.

🤖 Generated with Claude Code


Note

Low Risk
Localized composer event-guard change with tests; no auth, data, or API impact.

Overview
Fixes a desktop bug where clicking banner actions (e.g. Un-settle, Wake now) on a resting composer expanded the input instead of running the control, because those elements sit inside the composer <form> and triggered expand-on-focus/pointer handlers.

Adds shared isInsideCollapsedComposerControls in composerEventScope.ts for targets under data-chat-composer-collapsed-controls (banners, approval row, pending-input chrome, tasks badge). ChatComposer now skips scroll-collapse and resting expansion on pointer down and focus capture for that scope on all viewports, replacing the previous mobile-collapsed-only focus check. Unit tests cover the helper.

Reviewed by Cursor Bugbot for commit bfe1108. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix banner buttons expanding the resting ChatComposer

  • Adds isInsideCollapsedComposerControls helper in composerEventScope.ts to detect event targets inside elements marked with the collapsed-controls data attribute
  • Updates pointer-down and focus capture handlers in ChatComposer.tsx to ignore events from that scope so the composer no longer expands or clears scroll-collapse state
  • Adds test coverage for the new helper in composerEventScope.test.ts

Macroscope summarized bfe1108.

Pressing a button on a banner docked above a resting composer moved focus
into the form, which the composer's focus capture treated as a request to
expand. The surface grew under the pointer and the click never reached the
button. The collapsed-controls scope was already exempt on mobile; apply it
on every viewport and skip pointer handling for it too.
Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Sep 3, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.6 KiB13.4 KiB−157 B (−1.1%)15.1 KiB
CodexThread snapshot wire7.0 KiB7.0 KiB+4 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.6 KiB6.4 KiB−161 B (−2.4%)7.8 KiB
CodexLive turn WebSocket decoded57.1 KiB56.2 KiB−910 B (−1.6%)66.4 KiB
CodexLive turn messages108−2 (−20.0%)21
ClaudeTotal thread wire13.5 KiB13.5 KiB+7 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire7.0 KiB7.0 KiB+1 B (+0.0%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.5 KiB+6 B (+0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded57.8 KiB57.8 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages880 (0.0%)21

Baseline: 2120fbc · PR result: bfe1108 · Source CI: success

Scenario and decoded snapshot size

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

  • Codex decoded thread snapshot: 113.8 KiB
  • Claude decoded thread snapshot: 114.5 KiB

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

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at bfe1108

Macroscope's review found this PR approvable — This is a localized web bug fix that adds a tested event guard for existing banner and drawer controls, preventing unintended composer expansion without affecting unrelated paths. It changes no product defaults, schemas, sensitive code, deployment configuration, or static-analysis directives.

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

@juliusmarminge
juliusmarminge merged commit 126afb5 into mainSep 3, 2026
23 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/fix-banner-button-click branch September 3, 2026 18:09
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:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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): banner buttons no longer expand the resting composer - #9452

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click
Sep 3, 2026
Merged

fix(web): banner buttons no longer expand the resting composer#9452
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Sep 3, 2026

Copy link
Copy Markdown
Member

Problem

With the composer resting (blurred, desktop) and a banner docked above it, clicking a button on the banner — "Un-settle", "Wake now", "Restore branch", dismiss, etc. — expanded the composer instead of running the button. The banner stack renders inside the composer <form>, so the button taking focus fired the form's onFocusCapture, which treated it as a request to expand. The surface grew under the pointer and the click never landed on the button.

Fix

The data-chat-composer-collapsed-controls scope was already exempt from that focus capture, but only when the composer was collapsed on mobile. isInsideCollapsedComposerControls in composerEventScope.ts now applies that exemption on every viewport, and the form's onPointerDownCapture skips the same scope so pressing a banner does not steal focus into the editor either. Banners, the approval row, pending-input panel, and the tasks badge all already carry the marker.

Web/desktop only; mobile has its own composer.

Demo

Resting composer on a settled thread, real pointer click on Un-settle.

Before — the composer expands and the thread stays settled:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7ee41ed34918b89/before-banner-click-expands-composer.mp4

After — the thread un-settles, the banner leaves, the composer stays at rest:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a719c16f1d047dc/after-banner-click-unsettles.mp4

Verification

  • vp test run apps/web/src/components/chat/composerEventScope.test.ts
  • lint on the touched files, vpr typecheck in apps/web
  • Browser pass against a snapshot of real data, recorded above

Claude Fable 5 via Claude Code.

🤖 Generated with Claude Code


Note

Low Risk
Localized composer event-guard change with tests; no auth, data, or API impact.

Overview
Fixes a desktop bug where clicking banner actions (e.g. Un-settle, Wake now) on a resting composer expanded the input instead of running the control, because those elements sit inside the composer <form> and triggered expand-on-focus/pointer handlers.

Adds shared isInsideCollapsedComposerControls in composerEventScope.ts for targets under data-chat-composer-collapsed-controls (banners, approval row, pending-input chrome, tasks badge). ChatComposer now skips scroll-collapse and resting expansion on pointer down and focus capture for that scope on all viewports, replacing the previous mobile-collapsed-only focus check. Unit tests cover the helper.

Reviewed by Cursor Bugbot for commit bfe1108. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix banner buttons expanding the resting ChatComposer

  • Adds isInsideCollapsedComposerControls helper in composerEventScope.ts to detect event targets inside elements marked with the collapsed-controls data attribute
  • Updates pointer-down and focus capture handlers in ChatComposer.tsx to ignore events from that scope so the composer no longer expands or clears scroll-collapse state
  • Adds test coverage for the new helper in composerEventScope.test.ts

Macroscope summarized bfe1108.

Pressing a button on a banner docked above a resting composer moved focus
into the form, which the composer's focus capture treated as a request to
expand. The surface grew under the pointer and the click never reached the
button. The collapsed-controls scope was already exempt on mobile; apply it
on every viewport and skip pointer handling for it too.
Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Sep 3, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.6 KiB13.4 KiB−157 B (−1.1%)15.1 KiB
CodexThread snapshot wire7.0 KiB7.0 KiB+4 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.6 KiB6.4 KiB−161 B (−2.4%)7.8 KiB
CodexLive turn WebSocket decoded57.1 KiB56.2 KiB−910 B (−1.6%)66.4 KiB
CodexLive turn messages108−2 (−20.0%)21
ClaudeTotal thread wire13.5 KiB13.5 KiB+7 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire7.0 KiB7.0 KiB+1 B (+0.0%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.5 KiB+6 B (+0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded57.8 KiB57.8 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages880 (0.0%)21

Baseline: 2120fbc · PR result: bfe1108 · Source CI: success

Scenario and decoded snapshot size

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

  • Codex decoded thread snapshot: 113.8 KiB
  • Claude decoded thread snapshot: 114.5 KiB

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

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at bfe1108

Macroscope's review found this PR approvable — This is a localized web bug fix that adds a tested event guard for existing banner and drawer controls, preventing unintended composer expansion without affecting unrelated paths. It changes no product defaults, schemas, sensitive code, deployment configuration, or static-analysis directives.

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

@juliusmarminge
juliusmarminge merged commit 126afb5 into mainSep 3, 2026
23 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/fix-banner-button-click branch September 3, 2026 18:09
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:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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): banner buttons no longer expand the resting composer - #9452

Merged
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click
Sep 3, 2026
Merged

fix(web): banner buttons no longer expand the resting composer#9452
juliusmarminge merged 1 commit into
mainfrom
t3code/fix-banner-button-click

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Sep 3, 2026

Copy link
Copy Markdown
Member

Problem

With the composer resting (blurred, desktop) and a banner docked above it, clicking a button on the banner — "Un-settle", "Wake now", "Restore branch", dismiss, etc. — expanded the composer instead of running the button. The banner stack renders inside the composer <form>, so the button taking focus fired the form's onFocusCapture, which treated it as a request to expand. The surface grew under the pointer and the click never landed on the button.

Fix

The data-chat-composer-collapsed-controls scope was already exempt from that focus capture, but only when the composer was collapsed on mobile. isInsideCollapsedComposerControls in composerEventScope.ts now applies that exemption on every viewport, and the form's onPointerDownCapture skips the same scope so pressing a banner does not steal focus into the editor either. Banners, the approval row, pending-input panel, and the tasks badge all already carry the marker.

Web/desktop only; mobile has its own composer.

Demo

Resting composer on a settled thread, real pointer click on Un-settle.

Before — the composer expands and the thread stays settled:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7ee41ed34918b89/before-banner-click-expands-composer.mp4

After — the thread un-settles, the banner leaves, the composer stays at rest:

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a719c16f1d047dc/after-banner-click-unsettles.mp4

Verification

  • vp test run apps/web/src/components/chat/composerEventScope.test.ts
  • lint on the touched files, vpr typecheck in apps/web
  • Browser pass against a snapshot of real data, recorded above

Claude Fable 5 via Claude Code.

🤖 Generated with Claude Code


Note

Low Risk
Localized composer event-guard change with tests; no auth, data, or API impact.

Overview
Fixes a desktop bug where clicking banner actions (e.g. Un-settle, Wake now) on a resting composer expanded the input instead of running the control, because those elements sit inside the composer <form> and triggered expand-on-focus/pointer handlers.

Adds shared isInsideCollapsedComposerControls in composerEventScope.ts for targets under data-chat-composer-collapsed-controls (banners, approval row, pending-input chrome, tasks badge). ChatComposer now skips scroll-collapse and resting expansion on pointer down and focus capture for that scope on all viewports, replacing the previous mobile-collapsed-only focus check. Unit tests cover the helper.

Reviewed by Cursor Bugbot for commit bfe1108. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fix banner buttons expanding the resting ChatComposer

  • Adds isInsideCollapsedComposerControls helper in composerEventScope.ts to detect event targets inside elements marked with the collapsed-controls data attribute
  • Updates pointer-down and focus capture handlers in ChatComposer.tsx to ignore events from that scope so the composer no longer expands or clears scroll-collapse state
  • Adds test coverage for the new helper in composerEventScope.test.ts

Macroscope summarized bfe1108.

Pressing a button on a banner docked above a resting composer moved focus
into the form, which the composer's focus capture treated as a request to
expand. The surface grew under the pointer and the click never reached the
button. The collapsed-controls scope was already exempt on mobile; apply it
on every viewport and skip pointer handling for it too.
Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Sep 3, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ProviderMetricMain baselineThis PRImpactPR ceiling
CodexTotal thread wire13.6 KiB13.4 KiB−157 B (−1.1%)15.1 KiB
CodexThread snapshot wire7.0 KiB7.0 KiB+4 B (+0.1%)7.3 KiB
CodexLive turn WebSocket wire6.6 KiB6.4 KiB−161 B (−2.4%)7.8 KiB
CodexLive turn WebSocket decoded57.1 KiB56.2 KiB−910 B (−1.6%)66.4 KiB
CodexLive turn messages108−2 (−20.0%)21
ClaudeTotal thread wire13.5 KiB13.5 KiB+7 B (+0.1%)15.1 KiB
ClaudeThread snapshot wire7.0 KiB7.0 KiB+1 B (+0.0%)7.3 KiB
ClaudeLive turn WebSocket wire6.5 KiB6.5 KiB+6 B (+0.1%)7.8 KiB
ClaudeLive turn WebSocket decoded57.8 KiB57.8 KiB0 B (0.0%)66.4 KiB
ClaudeLive turn messages880 (0.0%)21

Baseline: 2120fbc · PR result: bfe1108 · Source CI: success

Scenario and decoded snapshot size

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

  • Codex decoded thread snapshot: 113.8 KiB
  • Claude decoded thread snapshot: 114.5 KiB

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

@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at bfe1108

Macroscope's review found this PR approvable — This is a localized web bug fix that adds a tested event guard for existing banner and drawer controls, preventing unintended composer expansion without affecting unrelated paths. It changes no product defaults, schemas, sensitive code, deployment configuration, or static-analysis directives.

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

@juliusmarminge
juliusmarminge merged commit 126afb5 into mainSep 3, 2026
23 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/fix-banner-button-click branch September 3, 2026 18:09
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:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@juliusmarminge