🤖 feat: immersive keyboard-first code review mode#2448
🤖 feat: immersive keyboard-first code review mode#2448ibetitsmike wants to merge 45 commits intomainfrom
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5a91db7631
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
src/browser/components/RightSidebar/CodeReview/ImmersiveReviewView.tsx
Outdated
Show resolved
Hide resolved
5a91db7 to
cf6e7d9
Compare
|
@codex review Addressed both unresolved review threads:
Please take another look. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 205e01d084
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
src/browser/components/RightSidebar/CodeReview/ImmersiveReviewView.tsx
Outdated
Show resolved
Hide resolved
|
@codex review Addressed both latest comments:
Please re-review. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fe46eb0182
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
src/browser/components/RightSidebar/CodeReview/ImmersiveReviewView.tsx
Outdated
Show resolved
Hide resolved
|
@codex review Addressed latest feedback:
Please review again. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ca76bb1d52
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
src/browser/components/RightSidebar/CodeReview/ImmersiveReviewView.tsx
Outdated
Show resolved
Hide resolved
|
@codex review Addressed latest issue by resolving notes->hunk targeting against the unfiltered hunk set ( Please review again. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 012686220e
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
@codex review Addressed latest feedback by treating collapsed sidebar as no mounted review panel when deciding whether immersive mode can stay enabled. Please re-review. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 34782b7821
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
src/browser/components/RightSidebar/CodeReview/ImmersiveReviewView.tsx
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 34782b7821
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
@codex review Addressed latest P1s:
Please review again. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9241a37c30
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
src/browser/components/RightSidebar/CodeReview/ImmersiveReviewView.tsx
Outdated
Show resolved
Hide resolved
|
@codex review Addressed latest threads:
Please re-review. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c11dacf72c
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
@codex review Addressed latest focus/interaction issue by applying/removing Please review again. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c741a9aec5
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c741a9aec5
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
@codex review Addressed latest inert mount-path issue by rerunning inert synchronization when the shell transitions out of placeholder/loading state. Please re-review. |
|
Codex Review: Didn't find any major issues. Hooray! ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback". |
|
@codex review Addressed the workspace-switch case by rerunning inert synchronization on workspace changes, so newly mounted pane wrappers receive inert when immersive is already active. Please review again. |
|
Codex Review: Didn't find any major issues. Another round soon, please! ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback". |
The Tooltip's open prop was toggling between false (controlled) and
undefined (uncontrolled), triggering a React warning on every diff line
render (~206 warnings). Use conditional spread so the prop is either
{ open: false } or absent entirely.
…ctedHunk When the user arrow-keys into a different hunk and presses Shift+C, the openComposer callback was using the previously-selected hunk (set via j/k navigation) instead of the hunk at the actual cursor position. This caused isSelectionInsideRange to fail and the composer to default to selectedHunkRange.startIndex (often line 0 = top of file). Fix: openComposer now uses overlayData.lineHunkIds to resolve the hunk containing the cursor, updates selectedHunkId via onSelectHunk to keep state in sync, and uses the resolved range for offset calculation.
Strip CR/LF from per-line highlighted HTML fragments before rendering. Some highlighter outputs can include hard line breaks in a single line fragment, which causes each diff row to render with an extra blank line when using whitespace-pre in the code cell. Also keep diff code-cell classes aligned with pre-regression behavior in both DiffRenderer and SelectableDiffRenderer.
Normalize full-file content line splitting with CRLF-aware parsing before building immersive overlays. Trailing carriage returns in per-line content can render as extra breaks inside whitespace-preserving diff cells, which made every row appear to have extra spacing. This keeps immersive row height consistent with baseline rendering.
…neHeight override Chromatic regressions across Diff stories indicated shared row layout drift. Restore DiffRenderer to the known-good baseline from perf tooltip removal phase and drop the immersive-only lineHeight override. This keeps the tooltip performance win while removing recent global row height/normalization experiments that altered visual snapshots.
… inflation Storybook/Chromatic debugging showed selectable diff rows rendering at ~27px instead of ~15px because the per-line comment button could participate in layout in the story runtime, inflating each grid row. Set inline style with absolute positioning and inset=0 on the comment button (while keeping utility classes) so overlay positioning is unambiguous across runtimes. Also set type=button for explicit semantics. Verified in Storybook via DevTools: row heights return to single-line (~15.39px) and the comment button computes to absolute positioning.
3784854 to
452fc7f
Compare
|
@codex review Pushed the latest immersive review follow-ups, including row-height stabilization and a new mixed highlight-vs-plain Storybook verification story. Local |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 763bd8be89
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
@codex review Addressed the Shift+I stale-closure toggle issue in Local |
|
Codex Review: Didn't find any major issues. Bravo. ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback". |
|
@codex review Added two immersive review UX updates:
Local |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b5c5a88792
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
@codex review Addressed two follow-up immersive regressions:
Also retained the new Local |
|
@codex review Addressed the latest feedback: immersive Also includes the prior follow-up fixes:
Local |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4c57dd1baa
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| const renderSelection: LineSelection | null = externalSelectionRequest | ||
| ? { | ||
| startIndex: externalSelectionRequest.selection.startIndex, | ||
| endIndex: externalSelectionRequest.selection.endIndex, | ||
| } |
There was a problem hiding this comment.
Clear external composer request after initial sync
When immersive mode opens the inline composer via Shift+C/Shift+L/Shift+D, this branch keeps renderSelection permanently tied to externalSelectionRequest as long as the parent prop stays non-null. Because canceling the composer only clears internal selection state, Esc/cancel cannot actually close the composer, and subsequent local selection changes are ignored until some unrelated state (like hunk change) clears the external request. This makes keyboard quick-comment flows effectively sticky and hard to exit.
Useful? React with 👍 / 👎.
Summary
Introduces immersive, keyboard-first code review and hardens it through iterative UX/performance/layout fixes:
Shift+Lcomment,Shift+Ddislike)Eshortcut to jump to selected note and start editing immediatelyEsc) and bottom-of-viewport comment targetingBackground
Immersive mode started as a full-screen overlay for fast keyboard review. Follow-up feedback required coherent whole-file context, better line-level composition, robust note navigation under filters, and smoother behavior on large files. Codex review then surfaced several edge cases in fallback rendering, overlay state, and focus isolation. Recent UX feedback required tightening keyboard-event isolation and line/hunk sync so inline edits and bottom-of-screen comment actions reliably target the intended rows.
Implementation
Immersive review UX
Shift+Iopens/toggles immersive mode globally viaRightSidebar.n/pnavigate files,k/jnavigate hunks, arrow keys move/extend line selection.Inline composition + notes workflow
Ekey flow: with a selected note, it navigates to the note and opens that inline review note directly in edit mode.Sentiment icon consistency
Shift+Dquick notes retain thumbs-down behavior.Shift+Lquick notes now render a thumbs-up icon in the immersive notes list.Regression hardening (latest)
Esccancels local editing without triggering higher-level immersive shortcuts.Tabpanel switching now ignores editable targets, so typing/editing in inline note textareas keeps focus stable.Performance and correctness
Accessibility + layout stability
WorkspaceShell).Debug/verification story
Validation
make static-checkmake typecheckmake lintbun test src/browser/utils/review/navigation.test.ts src/browser/utils/review/quickReviewNotes.test.tsbun run eslint src/browser/components/RightSidebar/CodeReview/ImmersiveReviewView.tsx src/browser/components/shared/DiffRenderer.tsx src/browser/components/shared/InlineReviewNote.tsxReviewTabImmersiveHighlightVsPlainHeightconfirms highlighted and plain rows both render at~15.391px.Risks
inertsupport is broad in modern browsers/Electron, but still an integration-sensitive behavior around focus in complex nested interactive trees.Generated with
mux• Model:openai:gpt-5.3-codex• Thinking:xhigh• Cost:$25.18