Add shortcut to settle the open thread - #4277

Closed
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding
Closed

Add shortcut to settle the open thread#4277
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • add thread.settle as a configurable keybinding command with Mod+Shift+X as the default
  • show a confirmation dialog for the open thread before settling
  • focus the primary action so Enter confirms, while Escape cancels
  • preserve Sidebar V2's existing move-to-next-thread behavior after a successful settle
  • document the command and cover default/resolution behavior with tests

Why

Settling the thread currently requires targeting a hover-only sidebar action. A global shortcut makes this frequent lifecycle action available without leaving the keyboard, while the focused confirmation prevents accidental settles and makes the confirmation keystroke explicit.

UI Changes

The shortcut opens an in-app alert dialog naming the thread and explaining that it moves out of active work. The Settle thread button is the initial focus target and displays an Enter key hint; Escape cancels.

Exact-head browser verification completed in an isolated environment against a disposable thread; the focused confirmation state is shown below.

Checklist

  • vp check
  • vp run typecheck
  • vp test apps/web/src/keybindings.test.ts apps/server/src/keybindings.test.ts
  • vp run --filter @t3tools/web build

Exact-head evidence

Revalidated at 2d4990a: focused tests, vp check, and vp run typecheck passed. Integrated browser verification confirmed Mod+Shift+X opens the settle dialog from the focused composer while preserving draft text, and Mod+Shift+Enter no longer triggers settlement. The capture uses only disposable local projects.

Settle-thread confirmation with focused primary action


Note

Medium Risk
Touches thread lifecycle navigation and keyboard handling in both sidebars; mistakes could mis-route after settle or settle ineligible threads, though confirmation and extensive unit tests mitigate this.

Overview
Adds thread.settle (Mod+Shift+X, !terminalFocus) to contracts, shared defaults, server bootstrap tests, and user keybinding docs.

resolveThreadSidebarShortcutAction centralizes thread shortcut handling for both sidebars: navigate, open settle confirmation, consume (ineligible route, in-flight settle, or modal open), or ignore. While a settle dialog is open, other thread shortcuts are consumed so the route does not change behind it.

Legacy and V2 sidebars wire the shortcut to an AlertDialog (Enter on the focused “Settle thread” action, Escape cancels). On confirm they call settleThread and, if you are still on that thread, advance via resolveNextActiveThreadIdAfterSettle (visible order first, full unarchived list as fallback), skipping effectively settled and snoozed threads—or start a new thread when none remain. Shortcut handling is skipped when the command palette or model picker is open.

Supporting changes in Sidebar.logic: PR/change-request state for hidden or collapsed rows (git cwd resolution, worktree-only git queries, pending-state publish rules), shared effective settled/snooze helpers, and confirmation dismiss rules. Visible rows report PR state upward for auto-settle classification.

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

Note

Add thread.settle keyboard shortcut (Mod+Shift+X) to settle the open thread from the sidebar

  • Adds thread.settle to the keybinding system, bound to Mod+Shift+X with !terminalFocus, in both shared keybindings and contracts.
  • Introduces resolveThreadSidebarShortcutAction in keybindings.ts to classify thread shortcuts into none, consume, navigate, or confirm-settle outcomes, replacing direct traversal/jump index logic.
  • Both Sidebar.tsx and SidebarV2.tsx now show an AlertDialog confirmation before settling; on confirm, the thread is settled and the sidebar navigates to the next active thread or opens a new one.
  • Adds hidden SidebarHiddenThreadChangeRequestStateReporter components to track per-thread PR/change-request state for threads not currently visible in the sidebar, used to determine effective settlement state.
  • Keyboard shortcut handling is suppressed when the command palette or model picker is open.

Macroscope summarized 0b21321.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 38e4f40b-f610-4e24-ac88-91c13c002385

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Jul 22, 2026
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadpackages/shared/src/keybindings.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding a keyboard shortcut to settle threads, with confirmation dialog and post-settle navigation logic across both sidebar implementations. New user-facing capabilities warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 4ac33ed to a3cb697CompareJuly 22, 2026 14:52
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.logic.ts
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch 2 times, most recently from 7e1eb9e to e6e9e4aCompareJuly 22, 2026 16:10
Comment threadapps/web/src/components/Sidebar.tsx
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e6e9e4a to f065547CompareJuly 22, 2026 16:16
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 2d4990a to a6d2a79CompareJuly 22, 2026 23:43
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 60ff41d to f2cc119CompareJuly 23, 2026 16:15
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e7fdf0f to 0b21321CompareJuly 28, 2026 02:50
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 11, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 18, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing in favor of merged #8089. It adds the configurable thread.settle shortcut and uses the same shortcut to settle or restore the active thread. Your work is credited in #8089.

@t3dotggt3dotgg closed this Aug 25, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ 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

@colonelpanic8@t3dotgg
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 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

Add shortcut to settle the open thread - #4277

Closed
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding
Closed

Add shortcut to settle the open thread#4277
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • add thread.settle as a configurable keybinding command with Mod+Shift+X as the default
  • show a confirmation dialog for the open thread before settling
  • focus the primary action so Enter confirms, while Escape cancels
  • preserve Sidebar V2's existing move-to-next-thread behavior after a successful settle
  • document the command and cover default/resolution behavior with tests

Why

Settling the thread currently requires targeting a hover-only sidebar action. A global shortcut makes this frequent lifecycle action available without leaving the keyboard, while the focused confirmation prevents accidental settles and makes the confirmation keystroke explicit.

UI Changes

The shortcut opens an in-app alert dialog naming the thread and explaining that it moves out of active work. The Settle thread button is the initial focus target and displays an Enter key hint; Escape cancels.

Exact-head browser verification completed in an isolated environment against a disposable thread; the focused confirmation state is shown below.

Checklist

  • vp check
  • vp run typecheck
  • vp test apps/web/src/keybindings.test.ts apps/server/src/keybindings.test.ts
  • vp run --filter @t3tools/web build

Exact-head evidence

Revalidated at 2d4990a: focused tests, vp check, and vp run typecheck passed. Integrated browser verification confirmed Mod+Shift+X opens the settle dialog from the focused composer while preserving draft text, and Mod+Shift+Enter no longer triggers settlement. The capture uses only disposable local projects.

Settle-thread confirmation with focused primary action


Note

Medium Risk
Touches thread lifecycle navigation and keyboard handling in both sidebars; mistakes could mis-route after settle or settle ineligible threads, though confirmation and extensive unit tests mitigate this.

Overview
Adds thread.settle (Mod+Shift+X, !terminalFocus) to contracts, shared defaults, server bootstrap tests, and user keybinding docs.

resolveThreadSidebarShortcutAction centralizes thread shortcut handling for both sidebars: navigate, open settle confirmation, consume (ineligible route, in-flight settle, or modal open), or ignore. While a settle dialog is open, other thread shortcuts are consumed so the route does not change behind it.

Legacy and V2 sidebars wire the shortcut to an AlertDialog (Enter on the focused “Settle thread” action, Escape cancels). On confirm they call settleThread and, if you are still on that thread, advance via resolveNextActiveThreadIdAfterSettle (visible order first, full unarchived list as fallback), skipping effectively settled and snoozed threads—or start a new thread when none remain. Shortcut handling is skipped when the command palette or model picker is open.

Supporting changes in Sidebar.logic: PR/change-request state for hidden or collapsed rows (git cwd resolution, worktree-only git queries, pending-state publish rules), shared effective settled/snooze helpers, and confirmation dismiss rules. Visible rows report PR state upward for auto-settle classification.

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

Note

Add thread.settle keyboard shortcut (Mod+Shift+X) to settle the open thread from the sidebar

  • Adds thread.settle to the keybinding system, bound to Mod+Shift+X with !terminalFocus, in both shared keybindings and contracts.
  • Introduces resolveThreadSidebarShortcutAction in keybindings.ts to classify thread shortcuts into none, consume, navigate, or confirm-settle outcomes, replacing direct traversal/jump index logic.
  • Both Sidebar.tsx and SidebarV2.tsx now show an AlertDialog confirmation before settling; on confirm, the thread is settled and the sidebar navigates to the next active thread or opens a new one.
  • Adds hidden SidebarHiddenThreadChangeRequestStateReporter components to track per-thread PR/change-request state for threads not currently visible in the sidebar, used to determine effective settlement state.
  • Keyboard shortcut handling is suppressed when the command palette or model picker is open.

Macroscope summarized 0b21321.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 38e4f40b-f610-4e24-ac88-91c13c002385

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Jul 22, 2026
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadpackages/shared/src/keybindings.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding a keyboard shortcut to settle threads, with confirmation dialog and post-settle navigation logic across both sidebar implementations. New user-facing capabilities warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 4ac33ed to a3cb697CompareJuly 22, 2026 14:52
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.logic.ts
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch 2 times, most recently from 7e1eb9e to e6e9e4aCompareJuly 22, 2026 16:10
Comment threadapps/web/src/components/Sidebar.tsx
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e6e9e4a to f065547CompareJuly 22, 2026 16:16
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 2d4990a to a6d2a79CompareJuly 22, 2026 23:43
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 60ff41d to f2cc119CompareJuly 23, 2026 16:15
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e7fdf0f to 0b21321CompareJuly 28, 2026 02:50
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 11, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 18, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing in favor of merged #8089. It adds the configurable thread.settle shortcut and uses the same shortcut to settle or restore the active thread. Your work is credited in #8089.

@t3dotggt3dotgg closed this Aug 25, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ 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

@colonelpanic8@t3dotgg
, '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

Add shortcut to settle the open thread - #4277

Closed
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding
Closed

Add shortcut to settle the open thread#4277
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • add thread.settle as a configurable keybinding command with Mod+Shift+X as the default
  • show a confirmation dialog for the open thread before settling
  • focus the primary action so Enter confirms, while Escape cancels
  • preserve Sidebar V2's existing move-to-next-thread behavior after a successful settle
  • document the command and cover default/resolution behavior with tests

Why

Settling the thread currently requires targeting a hover-only sidebar action. A global shortcut makes this frequent lifecycle action available without leaving the keyboard, while the focused confirmation prevents accidental settles and makes the confirmation keystroke explicit.

UI Changes

The shortcut opens an in-app alert dialog naming the thread and explaining that it moves out of active work. The Settle thread button is the initial focus target and displays an Enter key hint; Escape cancels.

Exact-head browser verification completed in an isolated environment against a disposable thread; the focused confirmation state is shown below.

Checklist

  • vp check
  • vp run typecheck
  • vp test apps/web/src/keybindings.test.ts apps/server/src/keybindings.test.ts
  • vp run --filter @t3tools/web build

Exact-head evidence

Revalidated at 2d4990a: focused tests, vp check, and vp run typecheck passed. Integrated browser verification confirmed Mod+Shift+X opens the settle dialog from the focused composer while preserving draft text, and Mod+Shift+Enter no longer triggers settlement. The capture uses only disposable local projects.

Settle-thread confirmation with focused primary action


Note

Medium Risk
Touches thread lifecycle navigation and keyboard handling in both sidebars; mistakes could mis-route after settle or settle ineligible threads, though confirmation and extensive unit tests mitigate this.

Overview
Adds thread.settle (Mod+Shift+X, !terminalFocus) to contracts, shared defaults, server bootstrap tests, and user keybinding docs.

resolveThreadSidebarShortcutAction centralizes thread shortcut handling for both sidebars: navigate, open settle confirmation, consume (ineligible route, in-flight settle, or modal open), or ignore. While a settle dialog is open, other thread shortcuts are consumed so the route does not change behind it.

Legacy and V2 sidebars wire the shortcut to an AlertDialog (Enter on the focused “Settle thread” action, Escape cancels). On confirm they call settleThread and, if you are still on that thread, advance via resolveNextActiveThreadIdAfterSettle (visible order first, full unarchived list as fallback), skipping effectively settled and snoozed threads—or start a new thread when none remain. Shortcut handling is skipped when the command palette or model picker is open.

Supporting changes in Sidebar.logic: PR/change-request state for hidden or collapsed rows (git cwd resolution, worktree-only git queries, pending-state publish rules), shared effective settled/snooze helpers, and confirmation dismiss rules. Visible rows report PR state upward for auto-settle classification.

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

Note

Add thread.settle keyboard shortcut (Mod+Shift+X) to settle the open thread from the sidebar

  • Adds thread.settle to the keybinding system, bound to Mod+Shift+X with !terminalFocus, in both shared keybindings and contracts.
  • Introduces resolveThreadSidebarShortcutAction in keybindings.ts to classify thread shortcuts into none, consume, navigate, or confirm-settle outcomes, replacing direct traversal/jump index logic.
  • Both Sidebar.tsx and SidebarV2.tsx now show an AlertDialog confirmation before settling; on confirm, the thread is settled and the sidebar navigates to the next active thread or opens a new one.
  • Adds hidden SidebarHiddenThreadChangeRequestStateReporter components to track per-thread PR/change-request state for threads not currently visible in the sidebar, used to determine effective settlement state.
  • Keyboard shortcut handling is suppressed when the command palette or model picker is open.

Macroscope summarized 0b21321.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 38e4f40b-f610-4e24-ac88-91c13c002385

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Jul 22, 2026
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadpackages/shared/src/keybindings.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding a keyboard shortcut to settle threads, with confirmation dialog and post-settle navigation logic across both sidebar implementations. New user-facing capabilities warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 4ac33ed to a3cb697CompareJuly 22, 2026 14:52
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.logic.ts
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch 2 times, most recently from 7e1eb9e to e6e9e4aCompareJuly 22, 2026 16:10
Comment threadapps/web/src/components/Sidebar.tsx
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e6e9e4a to f065547CompareJuly 22, 2026 16:16
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 2d4990a to a6d2a79CompareJuly 22, 2026 23:43
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 60ff41d to f2cc119CompareJuly 23, 2026 16:15
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e7fdf0f to 0b21321CompareJuly 28, 2026 02:50
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 11, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 18, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing in favor of merged #8089. It adds the configurable thread.settle shortcut and uses the same shortcut to settle or restore the active thread. Your work is credited in #8089.

@t3dotggt3dotgg closed this Aug 25, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ 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

@colonelpanic8@t3dotgg
, '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 > 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

Add shortcut to settle the open thread - #4277

Closed
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding
Closed

Add shortcut to settle the open thread#4277
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • add thread.settle as a configurable keybinding command with Mod+Shift+X as the default
  • show a confirmation dialog for the open thread before settling
  • focus the primary action so Enter confirms, while Escape cancels
  • preserve Sidebar V2's existing move-to-next-thread behavior after a successful settle
  • document the command and cover default/resolution behavior with tests

Why

Settling the thread currently requires targeting a hover-only sidebar action. A global shortcut makes this frequent lifecycle action available without leaving the keyboard, while the focused confirmation prevents accidental settles and makes the confirmation keystroke explicit.

UI Changes

The shortcut opens an in-app alert dialog naming the thread and explaining that it moves out of active work. The Settle thread button is the initial focus target and displays an Enter key hint; Escape cancels.

Exact-head browser verification completed in an isolated environment against a disposable thread; the focused confirmation state is shown below.

Checklist

  • vp check
  • vp run typecheck
  • vp test apps/web/src/keybindings.test.ts apps/server/src/keybindings.test.ts
  • vp run --filter @t3tools/web build

Exact-head evidence

Revalidated at 2d4990a: focused tests, vp check, and vp run typecheck passed. Integrated browser verification confirmed Mod+Shift+X opens the settle dialog from the focused composer while preserving draft text, and Mod+Shift+Enter no longer triggers settlement. The capture uses only disposable local projects.

Settle-thread confirmation with focused primary action


Note

Medium Risk
Touches thread lifecycle navigation and keyboard handling in both sidebars; mistakes could mis-route after settle or settle ineligible threads, though confirmation and extensive unit tests mitigate this.

Overview
Adds thread.settle (Mod+Shift+X, !terminalFocus) to contracts, shared defaults, server bootstrap tests, and user keybinding docs.

resolveThreadSidebarShortcutAction centralizes thread shortcut handling for both sidebars: navigate, open settle confirmation, consume (ineligible route, in-flight settle, or modal open), or ignore. While a settle dialog is open, other thread shortcuts are consumed so the route does not change behind it.

Legacy and V2 sidebars wire the shortcut to an AlertDialog (Enter on the focused “Settle thread” action, Escape cancels). On confirm they call settleThread and, if you are still on that thread, advance via resolveNextActiveThreadIdAfterSettle (visible order first, full unarchived list as fallback), skipping effectively settled and snoozed threads—or start a new thread when none remain. Shortcut handling is skipped when the command palette or model picker is open.

Supporting changes in Sidebar.logic: PR/change-request state for hidden or collapsed rows (git cwd resolution, worktree-only git queries, pending-state publish rules), shared effective settled/snooze helpers, and confirmation dismiss rules. Visible rows report PR state upward for auto-settle classification.

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

Note

Add thread.settle keyboard shortcut (Mod+Shift+X) to settle the open thread from the sidebar

  • Adds thread.settle to the keybinding system, bound to Mod+Shift+X with !terminalFocus, in both shared keybindings and contracts.
  • Introduces resolveThreadSidebarShortcutAction in keybindings.ts to classify thread shortcuts into none, consume, navigate, or confirm-settle outcomes, replacing direct traversal/jump index logic.
  • Both Sidebar.tsx and SidebarV2.tsx now show an AlertDialog confirmation before settling; on confirm, the thread is settled and the sidebar navigates to the next active thread or opens a new one.
  • Adds hidden SidebarHiddenThreadChangeRequestStateReporter components to track per-thread PR/change-request state for threads not currently visible in the sidebar, used to determine effective settlement state.
  • Keyboard shortcut handling is suppressed when the command palette or model picker is open.

Macroscope summarized 0b21321.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 38e4f40b-f610-4e24-ac88-91c13c002385

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Jul 22, 2026
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadpackages/shared/src/keybindings.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding a keyboard shortcut to settle threads, with confirmation dialog and post-settle navigation logic across both sidebar implementations. New user-facing capabilities warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 4ac33ed to a3cb697CompareJuly 22, 2026 14:52
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.logic.ts
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch 2 times, most recently from 7e1eb9e to e6e9e4aCompareJuly 22, 2026 16:10
Comment threadapps/web/src/components/Sidebar.tsx
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e6e9e4a to f065547CompareJuly 22, 2026 16:16
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 2d4990a to a6d2a79CompareJuly 22, 2026 23:43
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 60ff41d to f2cc119CompareJuly 23, 2026 16:15
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e7fdf0f to 0b21321CompareJuly 28, 2026 02:50
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 11, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 18, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing in favor of merged #8089. It adds the configurable thread.settle shortcut and uses the same shortcut to settle or restore the active thread. Your work is credited in #8089.

@t3dotggt3dotgg closed this Aug 25, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ 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

@colonelpanic8@t3dotgg
, '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

Add shortcut to settle the open thread - #4277

Closed
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding
Closed

Add shortcut to settle the open thread#4277
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • add thread.settle as a configurable keybinding command with Mod+Shift+X as the default
  • show a confirmation dialog for the open thread before settling
  • focus the primary action so Enter confirms, while Escape cancels
  • preserve Sidebar V2's existing move-to-next-thread behavior after a successful settle
  • document the command and cover default/resolution behavior with tests

Why

Settling the thread currently requires targeting a hover-only sidebar action. A global shortcut makes this frequent lifecycle action available without leaving the keyboard, while the focused confirmation prevents accidental settles and makes the confirmation keystroke explicit.

UI Changes

The shortcut opens an in-app alert dialog naming the thread and explaining that it moves out of active work. The Settle thread button is the initial focus target and displays an Enter key hint; Escape cancels.

Exact-head browser verification completed in an isolated environment against a disposable thread; the focused confirmation state is shown below.

Checklist

  • vp check
  • vp run typecheck
  • vp test apps/web/src/keybindings.test.ts apps/server/src/keybindings.test.ts
  • vp run --filter @t3tools/web build

Exact-head evidence

Revalidated at 2d4990a: focused tests, vp check, and vp run typecheck passed. Integrated browser verification confirmed Mod+Shift+X opens the settle dialog from the focused composer while preserving draft text, and Mod+Shift+Enter no longer triggers settlement. The capture uses only disposable local projects.

Settle-thread confirmation with focused primary action


Note

Medium Risk
Touches thread lifecycle navigation and keyboard handling in both sidebars; mistakes could mis-route after settle or settle ineligible threads, though confirmation and extensive unit tests mitigate this.

Overview
Adds thread.settle (Mod+Shift+X, !terminalFocus) to contracts, shared defaults, server bootstrap tests, and user keybinding docs.

resolveThreadSidebarShortcutAction centralizes thread shortcut handling for both sidebars: navigate, open settle confirmation, consume (ineligible route, in-flight settle, or modal open), or ignore. While a settle dialog is open, other thread shortcuts are consumed so the route does not change behind it.

Legacy and V2 sidebars wire the shortcut to an AlertDialog (Enter on the focused “Settle thread” action, Escape cancels). On confirm they call settleThread and, if you are still on that thread, advance via resolveNextActiveThreadIdAfterSettle (visible order first, full unarchived list as fallback), skipping effectively settled and snoozed threads—or start a new thread when none remain. Shortcut handling is skipped when the command palette or model picker is open.

Supporting changes in Sidebar.logic: PR/change-request state for hidden or collapsed rows (git cwd resolution, worktree-only git queries, pending-state publish rules), shared effective settled/snooze helpers, and confirmation dismiss rules. Visible rows report PR state upward for auto-settle classification.

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

Note

Add thread.settle keyboard shortcut (Mod+Shift+X) to settle the open thread from the sidebar

  • Adds thread.settle to the keybinding system, bound to Mod+Shift+X with !terminalFocus, in both shared keybindings and contracts.
  • Introduces resolveThreadSidebarShortcutAction in keybindings.ts to classify thread shortcuts into none, consume, navigate, or confirm-settle outcomes, replacing direct traversal/jump index logic.
  • Both Sidebar.tsx and SidebarV2.tsx now show an AlertDialog confirmation before settling; on confirm, the thread is settled and the sidebar navigates to the next active thread or opens a new one.
  • Adds hidden SidebarHiddenThreadChangeRequestStateReporter components to track per-thread PR/change-request state for threads not currently visible in the sidebar, used to determine effective settlement state.
  • Keyboard shortcut handling is suppressed when the command palette or model picker is open.

Macroscope summarized 0b21321.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 38e4f40b-f610-4e24-ac88-91c13c002385

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Jul 22, 2026
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadpackages/shared/src/keybindings.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding a keyboard shortcut to settle threads, with confirmation dialog and post-settle navigation logic across both sidebar implementations. New user-facing capabilities warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 4ac33ed to a3cb697CompareJuly 22, 2026 14:52
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.logic.ts
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch 2 times, most recently from 7e1eb9e to e6e9e4aCompareJuly 22, 2026 16:10
Comment threadapps/web/src/components/Sidebar.tsx
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e6e9e4a to f065547CompareJuly 22, 2026 16:16
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 2d4990a to a6d2a79CompareJuly 22, 2026 23:43
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 60ff41d to f2cc119CompareJuly 23, 2026 16:15
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e7fdf0f to 0b21321CompareJuly 28, 2026 02:50
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 11, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 18, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing in favor of merged #8089. It adds the configurable thread.settle shortcut and uses the same shortcut to settle or restore the active thread. Your work is credited in #8089.

@t3dotggt3dotgg closed this Aug 25, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ 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

@colonelpanic8@t3dotgg
, '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

Add shortcut to settle the open thread - #4277

Closed
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding
Closed

Add shortcut to settle the open thread#4277
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • add thread.settle as a configurable keybinding command with Mod+Shift+X as the default
  • show a confirmation dialog for the open thread before settling
  • focus the primary action so Enter confirms, while Escape cancels
  • preserve Sidebar V2's existing move-to-next-thread behavior after a successful settle
  • document the command and cover default/resolution behavior with tests

Why

Settling the thread currently requires targeting a hover-only sidebar action. A global shortcut makes this frequent lifecycle action available without leaving the keyboard, while the focused confirmation prevents accidental settles and makes the confirmation keystroke explicit.

UI Changes

The shortcut opens an in-app alert dialog naming the thread and explaining that it moves out of active work. The Settle thread button is the initial focus target and displays an Enter key hint; Escape cancels.

Exact-head browser verification completed in an isolated environment against a disposable thread; the focused confirmation state is shown below.

Checklist

  • vp check
  • vp run typecheck
  • vp test apps/web/src/keybindings.test.ts apps/server/src/keybindings.test.ts
  • vp run --filter @t3tools/web build

Exact-head evidence

Revalidated at 2d4990a: focused tests, vp check, and vp run typecheck passed. Integrated browser verification confirmed Mod+Shift+X opens the settle dialog from the focused composer while preserving draft text, and Mod+Shift+Enter no longer triggers settlement. The capture uses only disposable local projects.

Settle-thread confirmation with focused primary action


Note

Medium Risk
Touches thread lifecycle navigation and keyboard handling in both sidebars; mistakes could mis-route after settle or settle ineligible threads, though confirmation and extensive unit tests mitigate this.

Overview
Adds thread.settle (Mod+Shift+X, !terminalFocus) to contracts, shared defaults, server bootstrap tests, and user keybinding docs.

resolveThreadSidebarShortcutAction centralizes thread shortcut handling for both sidebars: navigate, open settle confirmation, consume (ineligible route, in-flight settle, or modal open), or ignore. While a settle dialog is open, other thread shortcuts are consumed so the route does not change behind it.

Legacy and V2 sidebars wire the shortcut to an AlertDialog (Enter on the focused “Settle thread” action, Escape cancels). On confirm they call settleThread and, if you are still on that thread, advance via resolveNextActiveThreadIdAfterSettle (visible order first, full unarchived list as fallback), skipping effectively settled and snoozed threads—or start a new thread when none remain. Shortcut handling is skipped when the command palette or model picker is open.

Supporting changes in Sidebar.logic: PR/change-request state for hidden or collapsed rows (git cwd resolution, worktree-only git queries, pending-state publish rules), shared effective settled/snooze helpers, and confirmation dismiss rules. Visible rows report PR state upward for auto-settle classification.

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

Note

Add thread.settle keyboard shortcut (Mod+Shift+X) to settle the open thread from the sidebar

  • Adds thread.settle to the keybinding system, bound to Mod+Shift+X with !terminalFocus, in both shared keybindings and contracts.
  • Introduces resolveThreadSidebarShortcutAction in keybindings.ts to classify thread shortcuts into none, consume, navigate, or confirm-settle outcomes, replacing direct traversal/jump index logic.
  • Both Sidebar.tsx and SidebarV2.tsx now show an AlertDialog confirmation before settling; on confirm, the thread is settled and the sidebar navigates to the next active thread or opens a new one.
  • Adds hidden SidebarHiddenThreadChangeRequestStateReporter components to track per-thread PR/change-request state for threads not currently visible in the sidebar, used to determine effective settlement state.
  • Keyboard shortcut handling is suppressed when the command palette or model picker is open.

Macroscope summarized 0b21321.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 38e4f40b-f610-4e24-ac88-91c13c002385

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Jul 22, 2026
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadpackages/shared/src/keybindings.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding a keyboard shortcut to settle threads, with confirmation dialog and post-settle navigation logic across both sidebar implementations. New user-facing capabilities warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 4ac33ed to a3cb697CompareJuly 22, 2026 14:52
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.logic.ts
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch 2 times, most recently from 7e1eb9e to e6e9e4aCompareJuly 22, 2026 16:10
Comment threadapps/web/src/components/Sidebar.tsx
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e6e9e4a to f065547CompareJuly 22, 2026 16:16
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 2d4990a to a6d2a79CompareJuly 22, 2026 23:43
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 60ff41d to f2cc119CompareJuly 23, 2026 16:15
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e7fdf0f to 0b21321CompareJuly 28, 2026 02:50
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 11, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 18, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing in favor of merged #8089. It adds the configurable thread.settle shortcut and uses the same shortcut to settle or restore the active thread. Your work is credited in #8089.

@t3dotggt3dotgg closed this Aug 25, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ 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

@colonelpanic8@t3dotgg
, '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

Add shortcut to settle the open thread - #4277

Closed
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding
Closed

Add shortcut to settle the open thread#4277
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • add thread.settle as a configurable keybinding command with Mod+Shift+X as the default
  • show a confirmation dialog for the open thread before settling
  • focus the primary action so Enter confirms, while Escape cancels
  • preserve Sidebar V2's existing move-to-next-thread behavior after a successful settle
  • document the command and cover default/resolution behavior with tests

Why

Settling the thread currently requires targeting a hover-only sidebar action. A global shortcut makes this frequent lifecycle action available without leaving the keyboard, while the focused confirmation prevents accidental settles and makes the confirmation keystroke explicit.

UI Changes

The shortcut opens an in-app alert dialog naming the thread and explaining that it moves out of active work. The Settle thread button is the initial focus target and displays an Enter key hint; Escape cancels.

Exact-head browser verification completed in an isolated environment against a disposable thread; the focused confirmation state is shown below.

Checklist

  • vp check
  • vp run typecheck
  • vp test apps/web/src/keybindings.test.ts apps/server/src/keybindings.test.ts
  • vp run --filter @t3tools/web build

Exact-head evidence

Revalidated at 2d4990a: focused tests, vp check, and vp run typecheck passed. Integrated browser verification confirmed Mod+Shift+X opens the settle dialog from the focused composer while preserving draft text, and Mod+Shift+Enter no longer triggers settlement. The capture uses only disposable local projects.

Settle-thread confirmation with focused primary action


Note

Medium Risk
Touches thread lifecycle navigation and keyboard handling in both sidebars; mistakes could mis-route after settle or settle ineligible threads, though confirmation and extensive unit tests mitigate this.

Overview
Adds thread.settle (Mod+Shift+X, !terminalFocus) to contracts, shared defaults, server bootstrap tests, and user keybinding docs.

resolveThreadSidebarShortcutAction centralizes thread shortcut handling for both sidebars: navigate, open settle confirmation, consume (ineligible route, in-flight settle, or modal open), or ignore. While a settle dialog is open, other thread shortcuts are consumed so the route does not change behind it.

Legacy and V2 sidebars wire the shortcut to an AlertDialog (Enter on the focused “Settle thread” action, Escape cancels). On confirm they call settleThread and, if you are still on that thread, advance via resolveNextActiveThreadIdAfterSettle (visible order first, full unarchived list as fallback), skipping effectively settled and snoozed threads—or start a new thread when none remain. Shortcut handling is skipped when the command palette or model picker is open.

Supporting changes in Sidebar.logic: PR/change-request state for hidden or collapsed rows (git cwd resolution, worktree-only git queries, pending-state publish rules), shared effective settled/snooze helpers, and confirmation dismiss rules. Visible rows report PR state upward for auto-settle classification.

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

Note

Add thread.settle keyboard shortcut (Mod+Shift+X) to settle the open thread from the sidebar

  • Adds thread.settle to the keybinding system, bound to Mod+Shift+X with !terminalFocus, in both shared keybindings and contracts.
  • Introduces resolveThreadSidebarShortcutAction in keybindings.ts to classify thread shortcuts into none, consume, navigate, or confirm-settle outcomes, replacing direct traversal/jump index logic.
  • Both Sidebar.tsx and SidebarV2.tsx now show an AlertDialog confirmation before settling; on confirm, the thread is settled and the sidebar navigates to the next active thread or opens a new one.
  • Adds hidden SidebarHiddenThreadChangeRequestStateReporter components to track per-thread PR/change-request state for threads not currently visible in the sidebar, used to determine effective settlement state.
  • Keyboard shortcut handling is suppressed when the command palette or model picker is open.

Macroscope summarized 0b21321.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 38e4f40b-f610-4e24-ac88-91c13c002385

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Jul 22, 2026
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadpackages/shared/src/keybindings.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding a keyboard shortcut to settle threads, with confirmation dialog and post-settle navigation logic across both sidebar implementations. New user-facing capabilities warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 4ac33ed to a3cb697CompareJuly 22, 2026 14:52
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.logic.ts
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch 2 times, most recently from 7e1eb9e to e6e9e4aCompareJuly 22, 2026 16:10
Comment threadapps/web/src/components/Sidebar.tsx
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e6e9e4a to f065547CompareJuly 22, 2026 16:16
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 2d4990a to a6d2a79CompareJuly 22, 2026 23:43
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 60ff41d to f2cc119CompareJuly 23, 2026 16:15
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e7fdf0f to 0b21321CompareJuly 28, 2026 02:50
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 11, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 18, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing in favor of merged #8089. It adds the configurable thread.settle shortcut and uses the same shortcut to settle or restore the active thread. Your work is credited in #8089.

@t3dotggt3dotgg closed this Aug 25, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ 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

@colonelpanic8@t3dotgg
, '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

Add shortcut to settle the open thread - #4277

Closed
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding
Closed

Add shortcut to settle the open thread#4277
colonelpanic8 wants to merge 27 commits into
pingdotgg:mainfrom
colonelpanic8:feat/settle-thread-keybinding

Conversation

@colonelpanic8

@colonelpanic8colonelpanic8 commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

What Changed

  • add thread.settle as a configurable keybinding command with Mod+Shift+X as the default
  • show a confirmation dialog for the open thread before settling
  • focus the primary action so Enter confirms, while Escape cancels
  • preserve Sidebar V2's existing move-to-next-thread behavior after a successful settle
  • document the command and cover default/resolution behavior with tests

Why

Settling the thread currently requires targeting a hover-only sidebar action. A global shortcut makes this frequent lifecycle action available without leaving the keyboard, while the focused confirmation prevents accidental settles and makes the confirmation keystroke explicit.

UI Changes

The shortcut opens an in-app alert dialog naming the thread and explaining that it moves out of active work. The Settle thread button is the initial focus target and displays an Enter key hint; Escape cancels.

Exact-head browser verification completed in an isolated environment against a disposable thread; the focused confirmation state is shown below.

Checklist

  • vp check
  • vp run typecheck
  • vp test apps/web/src/keybindings.test.ts apps/server/src/keybindings.test.ts
  • vp run --filter @t3tools/web build

Exact-head evidence

Revalidated at 2d4990a: focused tests, vp check, and vp run typecheck passed. Integrated browser verification confirmed Mod+Shift+X opens the settle dialog from the focused composer while preserving draft text, and Mod+Shift+Enter no longer triggers settlement. The capture uses only disposable local projects.

Settle-thread confirmation with focused primary action


Note

Medium Risk
Touches thread lifecycle navigation and keyboard handling in both sidebars; mistakes could mis-route after settle or settle ineligible threads, though confirmation and extensive unit tests mitigate this.

Overview
Adds thread.settle (Mod+Shift+X, !terminalFocus) to contracts, shared defaults, server bootstrap tests, and user keybinding docs.

resolveThreadSidebarShortcutAction centralizes thread shortcut handling for both sidebars: navigate, open settle confirmation, consume (ineligible route, in-flight settle, or modal open), or ignore. While a settle dialog is open, other thread shortcuts are consumed so the route does not change behind it.

Legacy and V2 sidebars wire the shortcut to an AlertDialog (Enter on the focused “Settle thread” action, Escape cancels). On confirm they call settleThread and, if you are still on that thread, advance via resolveNextActiveThreadIdAfterSettle (visible order first, full unarchived list as fallback), skipping effectively settled and snoozed threads—or start a new thread when none remain. Shortcut handling is skipped when the command palette or model picker is open.

Supporting changes in Sidebar.logic: PR/change-request state for hidden or collapsed rows (git cwd resolution, worktree-only git queries, pending-state publish rules), shared effective settled/snooze helpers, and confirmation dismiss rules. Visible rows report PR state upward for auto-settle classification.

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

Note

Add thread.settle keyboard shortcut (Mod+Shift+X) to settle the open thread from the sidebar

  • Adds thread.settle to the keybinding system, bound to Mod+Shift+X with !terminalFocus, in both shared keybindings and contracts.
  • Introduces resolveThreadSidebarShortcutAction in keybindings.ts to classify thread shortcuts into none, consume, navigate, or confirm-settle outcomes, replacing direct traversal/jump index logic.
  • Both Sidebar.tsx and SidebarV2.tsx now show an AlertDialog confirmation before settling; on confirm, the thread is settled and the sidebar navigates to the next active thread or opens a new one.
  • Adds hidden SidebarHiddenThreadChangeRequestStateReporter components to track per-thread PR/change-request state for threads not currently visible in the sidebar, used to determine effective settlement state.
  • Keyboard shortcut handling is suppressed when the command palette or model picker is open.

Macroscope summarized 0b21321.

@coderabbitai

coderabbitaiBot commented Jul 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 38e4f40b-f610-4e24-ac88-91c13c002385

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added size:M 30-99 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Jul 22, 2026
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadpackages/shared/src/keybindings.ts Outdated
@macroscopeapp

macroscopeappBot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

New feature adding a keyboard shortcut to settle threads, with confirmation dialog and post-settle navigation logic across both sidebar implementations. New user-facing capabilities warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 4ac33ed to a3cb697CompareJuly 22, 2026 14:52
@github-actionsgithub-actionsBot added size:L 100-499 changed lines (additions + deletions). and removed size:M 30-99 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.logic.ts
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch 2 times, most recently from 7e1eb9e to e6e9e4aCompareJuly 22, 2026 16:10
Comment threadapps/web/src/components/Sidebar.tsx
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e6e9e4a to f065547CompareJuly 22, 2026 16:16
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@github-actionsgithub-actionsBot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Jul 22, 2026
Comment threadapps/web/src/components/Sidebar.tsx
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
Comment threadapps/web/src/components/Sidebar.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 2d4990a to a6d2a79CompareJuly 22, 2026 23:43
Comment threadapps/web/src/components/SidebarV2.tsx
Comment threadapps/web/src/components/SidebarV2.tsx Outdated
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from 60ff41d to f2cc119CompareJuly 23, 2026 16:15
@colonelpanic8
colonelpanic8force-pushed the feat/settle-thread-keybinding branch from e7fdf0f to 0b21321CompareJuly 28, 2026 02:50
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Jul 28, 2026
# Conflicts:
#	apps/web/src/components/SidebarV2.tsx
#	apps/web/src/keybindings.test.ts
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 10, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 11, 2026
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 18, 2026
@t3dotgg

Copy link
Copy Markdown
Member

Note

🤖 GPT-5.6 Sol responding on behalf of Theo

Closing in favor of merged #8089. It adds the configurable thread.settle shortcut and uses the same shortcut to settle or restore the active thread. Your work is credited in #8089.

@t3dotggt3dotgg closed this Aug 25, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL1,000+ 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

@colonelpanic8@t3dotgg