feat: import remaining T3Code immediate-wave improvements - #101
Conversation
📝 WalkthroughWalkthroughThe pull request adds desktop fullscreen and context-menu infrastructure, literal Git path handling, isolated Claude subscription probing, Claude Sonnet 5 metadata and compatibility gating, web accessibility and rendering improvements, macOS traffic-light inset handling, Markdown recovery, and unified status-motion behavior. ChangesDesktop runtime bridges
Server staging and provider probing
Claude Sonnet 5 model support
Web interaction and rendering
Estimated code review effort: 5 (Critical) | ~120 minutes Suggested labels: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 12
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/server/src/provider/claudeSubscriptionProbe.ts`:
- Around line 142-183: Wrap the probe construction in Effect.suspend so
dependencies.createAbortController and buildClaudeSubscriptionProbeQuery execute
only when the Effect runs, not when probeClaudeSubscription is called. Keep the
existing tryPromise, ensuring, timeout, result, and mapping behavior inside the
suspended effect so each retry receives a fresh AbortController and query setup.
In `@apps/web/src/components/BranchToolbarBranchSelector.browser.tsx`:
- Around line 238-242: Update the PageDown test around handleBranchInputKeyDown
so its closed-state assertion uses a still-connected input, such as reopening
the selector and dispatching PageDown on the fresh input while the list remains
below the virtualization threshold; otherwise remove the “and after close” claim
from the test name. Ensure the assertion exercises the !isBranchMenuOpen guard
rather than dispatching on a detached searchInput.
In `@apps/web/src/components/BranchToolbarBranchSelector.tsx`:
- Around line 763-790: Update handleBranchInputKeyDown so PageDown changes the
Base UI combobox’s highlighted item, not only highlightedBranchIndexRef, and
assert that aria-activedescendant matches the resulting target. Keep the
virtualizer viewport aligned after the combobox highlight callback runs. Replace
the fixed 28px page-size calculation with the virtualizer’s actual estimated row
sizes, including the 44px PR checkout and 48px current-branch-with-summary
variants.
In `@apps/web/src/components/chat/DiffStatLabel.logic.ts`:
- Around line 28-35: Update formatDiffStatAccessibleLabel to pluralize
“addition” and “deletion” independently based on their numeric counts, using
Intl.PluralRules with the provided locales where appropriate. Preserve
formatExactDiffCount for localized numbers and ensure singular counts produce
“addition”/“deletion” while other counts retain plural forms.
In `@apps/web/src/components/chat/DiffStatLabel.tsx`:
- Around line 16-65: The aria-label on the wrapper span in DiffStatLabel must
use a naming-capable accessibility pattern. Add role="img" to the aria-labeled
wrapper if it represents the compact diff stat as an image alternative, or move
exactLabel to a visually hidden label and mark the glyph-only wrapper
aria-hidden; preserve the existing visual rendering.
In `@apps/web/src/components/chat/MessagesTimeline.browser.tsx`:
- Around line 95-99: Replace the fixed-delay implementation of
waitForMessageActionTransition with a vi.waitFor polling loop that checks the
relevant element’s computed opacity until the CSS transition completes. Remove
the MESSAGE_ACTION_TRANSITION_MS timeout dependency and preserve the function’s
Promise<void> contract.
In `@apps/web/src/components/chat/ProviderModelPicker.tsx`:
- Around line 193-221: Extract the pure helpers formatModelTokenCount and
resolveModelCapabilityDescription from ProviderModelPicker.tsx into a colocated
.logic.ts module, preserving their current behavior and exports needed by the
component. Update ProviderModelPicker to import them, and add direct logic tests
covering formatting boundaries and non-round token counts using the repository’s
existing *.logic.test.ts pattern.
- Around line 439-475: In renderModelRadioGroup, hoist the props.providers
lookup for the fixed provider into a single variable before the model-option
loop, then pass that cached version to each resolveModelCompatibility call.
Remove the repeated props.providers?.find expression from the per-option
rendering while preserving the existing null fallback.
In `@apps/web/src/components/DiffPanel.tsx`:
- Line 937: Add a visually hidden DOM element containing the diff-stat
description, then associate it with both aria-description call sites in
apps/web/src/components/DiffPanel.tsx#937 and
apps/web/src/components/chat/MessagesTimeline.tsx#2062 using the shared or
corresponding description ID. Ensure the exact additions/deletions text is
exposed through the hidden description and remains immediately available to
assistive technology on focus.
In `@apps/web/src/markdown-list-indentation.ts`:
- Around line 132-186: Add a fixed recursion-depth cap to
attachListItemIndentationNormalizer, threading the current depth through visit
and blocksFromIndentedCode; when the cap is exceeded, stop recovery and preserve
the remaining node as literal code. In
apps/web/src/markdown-list-indentation.test.tsx lines 1-158, add a regression
test with at least 50 nested over-indented list levels that verifies parsing
terminates safely at the cap.
In `@apps/web/src/statusMotion.structure.test.tsx`:
- Around line 82-107: Replace the SHA-256 assertions in the test case “preserves
finite spinner, skeleton, shimmer, and ultrathink exclusions byte-for-byte” with
targeted structural or occurrence-based assertions for spinnerSource,
sidebarSkeleton, generatedImageShimmer, and ultrathinkMotion. Assert the
specific motion patterns and exclusions those regions must retain, following the
diagnostic regex-style checks already used elsewhere in the file, and remove the
brittle hash expectations.
In `@packages/shared/src/modelCompatibility.ts`:
- Around line 79-96: Update resolveModelCompatibility to enforce version gating
whenever getModelCapabilities returns a defined minimumProviderVersion, without
checking for the hardcoded "claude-sonnet-5" model slug. Build the rejection
reason from the resolved model’s display name or another model-specific name
supplied through the existing capabilities/input plumbing, so future models
receive accurate messages while preserving selectable behavior when versions are
missing, invalid, or sufficient.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 554460fe-8f70-4e21-ba67-b03cbae134ca
📒 Files selected for processing (59)
DESIGN.mdapps/desktop/src/contextMenuPopup.test.tsapps/desktop/src/contextMenuPopup.tsapps/desktop/src/fullscreenBridge.test.tsapps/desktop/src/fullscreenBridge.tsapps/desktop/src/fullscreenWindow.test.tsapps/desktop/src/fullscreenWindow.tsapps/desktop/src/main.tsapps/desktop/src/menuCoordinates.test.tsapps/desktop/src/menuCoordinates.tsapps/desktop/src/preload.tsapps/server/src/git/Layers/GitCore.test.tsapps/server/src/git/Layers/GitCore.tsapps/server/src/provider/Layers/ProviderHealth.tsapps/server/src/provider/claudeSubscriptionProbe.test.tsapps/server/src/provider/claudeSubscriptionProbe.tsapps/web/src/appSettings.test.tsapps/web/src/appSettings.tsapps/web/src/components/BranchToolbar.structure.test.tsapps/web/src/components/BranchToolbarBranchSelector.browser.tsxapps/web/src/components/BranchToolbarBranchSelector.tsxapps/web/src/components/ChatMarkdown.tsxapps/web/src/components/ChatView.tsxapps/web/src/components/DiffPanel.tsxapps/web/src/components/Sidebar.tsxapps/web/src/components/StatusMotion.browser.tsxapps/web/src/components/chat/ChangedFilesTree.browser.tsxapps/web/src/components/chat/DiffStatLabel.browser.tsxapps/web/src/components/chat/DiffStatLabel.consumers.test.tsapps/web/src/components/chat/DiffStatLabel.logic.test.tsapps/web/src/components/chat/DiffStatLabel.logic.tsapps/web/src/components/chat/DiffStatLabel.tsxapps/web/src/components/chat/DiffStatLabel.visual.browser.tsxapps/web/src/components/chat/MessagesTimeline.browser.tsxapps/web/src/components/chat/MessagesTimeline.tsxapps/web/src/components/chat/ProviderModelPicker.browser.tsxapps/web/src/components/chat/ProviderModelPicker.tsxapps/web/src/components/chat/TraitsPicker.browser.tsxapps/web/src/components/macTrafficLightInset.browser.tsxapps/web/src/components/terminal/TerminalActivityIndicator.tsxapps/web/src/components/ui/sidebar.tsxapps/web/src/desktopFullscreen.test.tsapps/web/src/desktopFullscreen.tsapps/web/src/index.cssapps/web/src/macTrafficLightInset.reproduction.test.tsxapps/web/src/macTrafficLightInset.structure.test.tsapps/web/src/macTrafficLightInset.test.tsapps/web/src/macTrafficLightInset.tsapps/web/src/markdown-list-indentation.test.tsxapps/web/src/markdown-list-indentation.tsapps/web/src/statusMotion.structure.test.tsxpackages/contracts/src/ipc.tspackages/contracts/src/ipc.typecheck.tspackages/contracts/src/model.test.tspackages/contracts/src/model.tspackages/shared/package.jsonpackages/shared/src/model.test.tspackages/shared/src/modelCompatibility.test.tspackages/shared/src/modelCompatibility.ts
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
packages/shared/src/modelCompatibility.ts (1)
80-97: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winMessage text still hardcodes "Claude Code" despite generic gating.
The
minimumProviderVersiongate is now provider/model-agnostic, but thereasonstring is hardcoded to"Update Claude Code to ...". A future model from a different provider (e.g.cursor,opencode) with aminimumProviderVersionwould surface a message referencing the wrong product, with no compile-time signal to catch it — mirroring the original model-name hardcoding concern that was just fixed viamodelDisplayName.Consider deriving the product/provider name the same way the model name is now resolved (e.g. an input-provided display name or a provider-name lookup) instead of the literal string.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/shared/src/modelCompatibility.ts` around lines 80 - 97, The reason message in resolveModelCompatibility still hardcodes “Claude Code” for the generic minimumProviderVersion gate. Derive the product/provider display name from input or the existing provider-name lookup, then use that resolved name in the update prompt while preserving the current version and model display-name behavior.apps/web/src/components/BranchToolbarBranchSelector.tsx (1)
767-826: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winMove Base UI’s highlighted item on
Endinstead of only scrolling.Pressing
Endonly updateshighlightedBranchIndexRefand callsscrollToIndex, but Base UI moves the combobox highlight throughArrowDownhandling. The viewport can jump to the last branch whilearia-activedescendantstill points at the previously selected item, soEntercan select the wrong branch and screen readers won’t announce the visible last item. Dispatch syntheticArrowDownkey events for the remaining distance, and prevent the default End behavior if this handler should be the final list-navigation handling. For large lists, consider batching the dispatch loop across microtasks to avoid blocking the UI.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/web/src/components/BranchToolbarBranchSelector.tsx` around lines 767 - 826, Update handleBranchInputKeyDown so End moves Base UI’s active combobox highlight to the final branch, not just highlightedBranchIndexRef and the virtualizer viewport: prevent the default End behavior and dispatch the required synthetic ArrowDown events for the remaining distance from the current active index. Preserve the existing PageUp/PageDown behavior, and consider batching large End movements across microtasks to avoid blocking the UI.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/web/src/components/chat/DiffStatLabel.logic.ts`:
- Around line 33-40: Update the pluralization in the diff-stat label logic to
use normalizedAdditions === 1 and normalizedDeletions === 1 for the English noun
labels, removing the locale-dependent Intl.PluralRules decision. Continue
passing locales only to formatExactDiffCount, and add a regression test covering
fr-FR with zero counts.
---
Outside diff comments:
In `@apps/web/src/components/BranchToolbarBranchSelector.tsx`:
- Around line 767-826: Update handleBranchInputKeyDown so End moves Base UI’s
active combobox highlight to the final branch, not just
highlightedBranchIndexRef and the virtualizer viewport: prevent the default End
behavior and dispatch the required synthetic ArrowDown events for the remaining
distance from the current active index. Preserve the existing PageUp/PageDown
behavior, and consider batching large End movements across microtasks to avoid
blocking the UI.
In `@packages/shared/src/modelCompatibility.ts`:
- Around line 80-97: The reason message in resolveModelCompatibility still
hardcodes “Claude Code” for the generic minimumProviderVersion gate. Derive the
product/provider display name from input or the existing provider-name lookup,
then use that resolved name in the update prompt while preserving the current
version and model display-name behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: a04d8074-9a21-4f19-98cf-22a847ed0094
📒 Files selected for processing (22)
apps/server/src/provider/claudeSubscriptionProbe.test.tsapps/server/src/provider/claudeSubscriptionProbe.tsapps/web/src/components/BranchToolbarBranchSelector.browser.tsxapps/web/src/components/BranchToolbarBranchSelector.tsxapps/web/src/components/DiffPanel.tsxapps/web/src/components/chat/DiffStatLabel.browser.tsxapps/web/src/components/chat/DiffStatLabel.consumers.test.tsapps/web/src/components/chat/DiffStatLabel.logic.test.tsapps/web/src/components/chat/DiffStatLabel.logic.tsapps/web/src/components/chat/DiffStatLabel.tsxapps/web/src/components/chat/DiffStatLabel.visual.browser.tsxapps/web/src/components/chat/MessagesTimeline.browser.tsxapps/web/src/components/chat/MessagesTimeline.test.tsxapps/web/src/components/chat/MessagesTimeline.tsxapps/web/src/components/chat/ProviderModelPicker.logic.test.tsapps/web/src/components/chat/ProviderModelPicker.logic.tsapps/web/src/components/chat/ProviderModelPicker.tsxapps/web/src/markdown-list-indentation.test.tsxapps/web/src/markdown-list-indentation.tsapps/web/src/statusMotion.structure.test.tsxpackages/shared/src/modelCompatibility.test.tspackages/shared/src/modelCompatibility.ts
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
apps/web/src/components/BranchToolbarBranchSelector.tsx (2)
767-825: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy liftExtract the page-size navigation math into a testable
.logic.tsmodule.
handleBranchInputKeyDownembeds a non-trivial pure algorithm (derivingcurrentIndexfrom DOM state, walkingestimateBranchItemSizeto findtargetIndexwithin a viewport budget) directly inside a componentuseCallback. Elsewhere in this PR, similarly complex logic is intentionally split into standalone*.logic.tsmodules with colocated*.logic.test.tsunit tests (e.g.ProviderModelPicker.logic.ts,DiffStatLabel.logic.ts), enabling fast, precise unit coverage instead of relying solely on the current full-browser DOM tests inBranchToolbarBranchSelector.browser.tsx.Consider extracting a pure function like
computePageTargetIndex({ currentIndex, direction, lastIndex, viewportHeight, estimateItemSize })that the component wires up, leaving only DOM/event plumbing (aria-activedescendant lookup, event dispatch) in the component.As per coding guidelines, "Keep logic testable outside React where existing
*.logic.test.tsfiles show that pattern inapps/web."🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/web/src/components/BranchToolbarBranchSelector.tsx` around lines 767 - 825, Extract the pure page-navigation calculation from handleBranchInputKeyDown into a colocated .logic.ts function, such as computePageTargetIndex, accepting the current index, direction, last index, viewport height, and item-size estimator and returning the target index. Keep DOM lookup, event prevention/dispatch, and virtualizer scrolling in the component, and add focused unit tests in the corresponding .logic.test.ts covering PageUp, PageDown, End, boundaries, and viewport limits.Source: Coding guidelines
664-673: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winRow-height constants (28/44/48/224) are duplicated across JS and Tailwind classes.
estimateBranchItemSizehardcodes28/44/48, the fallback viewport height224is repeated at Line 784 andinitialRect.height(Line 681), and the same pixel values are re-encoded as Tailwind classes (h-7/h-11/h-12) at Lines 842 and 886. These five call sites must stay manually in sync; if any single one drifts (e.g., a Tailwind class is bumped without updating the estimator), the virtualizer's scroll math and PageDown/PageUp/End targeting silently desync from the rendered rows.Extract shared named constants (e.g.
BRANCH_ROW_HEIGHT,PR_ROW_HEIGHT,BRANCH_ROW_HEIGHT_WITH_SUMMARY,DEFAULT_VIEWPORT_HEIGHT) and reuse them for both the estimator/height classes and the keyboard-nav fallback.♻️ Proposed direction
+const BRANCH_ROW_HEIGHT = 28; +const PR_ROW_HEIGHT = 44; +const BRANCH_ROW_HEIGHT_WITH_SUMMARY = 48; +const DEFAULT_BRANCH_VIEWPORT_HEIGHT = 224; + const estimateBranchItemSize = useCallback( (index: number) => { const itemValue = filteredBranchPickerItems[index]; - if (!itemValue) return 28; - if (itemValue === checkoutPullRequestItemValue) return 44; + if (!itemValue) return BRANCH_ROW_HEIGHT; + if (itemValue === checkoutPullRequestItemValue) return PR_ROW_HEIGHT; const branch = branchByName.get(itemValue); - return branch && getCurrentBranchChangeSummary(branch, branchStatusQuery.data) ? 48 : 28; + return branch && getCurrentBranchChangeSummary(branch, branchStatusQuery.data) + ? BRANCH_ROW_HEIGHT_WITH_SUMMARY + : BRANCH_ROW_HEIGHT; }, [...], );🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/web/src/components/BranchToolbarBranchSelector.tsx` around lines 664 - 673, Extract shared named constants for branch row, pull-request row, summary row, and default viewport heights, then use them in estimateBranchItemSize, initialRect, and the keyboard-navigation fallback instead of duplicated numeric literals. Update the rendered row height classes near the branch and pull-request item renderers to derive from the same constants or a shared height-to-class mapping, preserving the current 28/44/48/224 pixel behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/web/src/components/BranchToolbarBranchSelector.browser.tsx`:
- Around line 185-204: Consolidate the keyboard event helpers by introducing or
reusing a parameterized dispatch helper that accepts the input element and key
value, then remove the near-duplicate dispatchEnd, dispatchEnter,
dispatchPageDown, and dispatchPageUp implementations. Update every call site to
invoke the shared helper with the appropriate key, preserving existing event
options and behavior.
---
Outside diff comments:
In `@apps/web/src/components/BranchToolbarBranchSelector.tsx`:
- Around line 767-825: Extract the pure page-navigation calculation from
handleBranchInputKeyDown into a colocated .logic.ts function, such as
computePageTargetIndex, accepting the current index, direction, last index,
viewport height, and item-size estimator and returning the target index. Keep
DOM lookup, event prevention/dispatch, and virtualizer scrolling in the
component, and add focused unit tests in the corresponding .logic.test.ts
covering PageUp, PageDown, End, boundaries, and viewport limits.
- Around line 664-673: Extract shared named constants for branch row,
pull-request row, summary row, and default viewport heights, then use them in
estimateBranchItemSize, initialRect, and the keyboard-navigation fallback
instead of duplicated numeric literals. Update the rendered row height classes
near the branch and pull-request item renderers to derive from the same
constants or a shared height-to-class mapping, preserving the current
28/44/48/224 pixel behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 4edfe30e-9711-4a97-b705-991412bfdea0
📒 Files selected for processing (8)
apps/web/src/components/BranchToolbarBranchSelector.browser.tsxapps/web/src/components/BranchToolbarBranchSelector.tsxapps/web/src/components/chat/DiffStatLabel.logic.test.tsapps/web/src/components/chat/DiffStatLabel.logic.tsapps/web/src/components/chat/ProviderModelPicker.browser.tsxapps/web/src/components/chat/ProviderModelPicker.tsxpackages/shared/src/modelCompatibility.test.tspackages/shared/src/modelCompatibility.ts
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
apps/web/src/components/BranchToolbarBranchSelector.tsx (1)
779-832: 🚀 Performance & Scalability | 🟠 Major | 🏗️ Heavy liftSynthetic
Endjump can dispatch over 40keydownevents.At line 811,
movementCountusesMath.abs(targetIndex - currentIndex), so forEndthis becomes the remaining items from the current active index. With virtualized lists enabled at over 40 branches, pressingEndsynchronously fires hundreds of Arrow/End keydown events before the final scroll, and Base UI may emitonItemHighlightedfor each highlight step. Limit the event-dispatch loop to thePageUp/PageDowndeltas, and find a way to jumpEndwithout simulating one Arrow key per row if possible.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/web/src/components/BranchToolbarBranchSelector.tsx` around lines 779 - 832, Update handleBranchInputKeyDown so the synthetic keydown loop only dispatches events for PageUp/PageDown movement deltas; do not simulate one ArrowDown event per item for End. Handle End by directly updating the highlighted index and scrolling to the final item while preserving the existing end alignment and PageUp/PageDown behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@apps/web/src/components/BranchToolbarBranchSelector.tsx`:
- Around line 779-832: Update handleBranchInputKeyDown so the synthetic keydown
loop only dispatches events for PageUp/PageDown movement deltas; do not simulate
one ArrowDown event per item for End. Handle End by directly updating the
highlighted index and scrolling to the final item while preserving the existing
end alignment and PageUp/PageDown behavior.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 6c37f0cb-827f-4c1d-9d20-a39ef731d530
📒 Files selected for processing (4)
apps/web/src/components/BranchToolbarBranchSelector.browser.tsxapps/web/src/components/BranchToolbarBranchSelector.logic.test.tsapps/web/src/components/BranchToolbarBranchSelector.logic.tsapps/web/src/components/BranchToolbarBranchSelector.tsx
|
Follow-up on CodeRabbit review 4817427762 ( For now, JCode retains the synthetic Arrow loop so Base UI’s owned highlight, the active descendant, the virtualizer, and immediate |
Summary
Imports the remaining JCode-native improvements from the T3Code immediate-wave branch across web UX, desktop UX, server hardening, and model metadata.
The current
mainbranch was merged into this feature branch with the normal merge commitfcdaeba9fe923a52b9d8cf6f50f96da81b4974da. No rebase, amend, force push, or other history rewrite was used. The original import covered exactly 59 files; review follow-ups bring the final PR scope to exactly 64 files (5,072 additions and 170 deletions) across 19 total commits, 18 of them non-merge.Changes
Web UX
c38227e51e845373cc4c65976ba98d462bedc8029bf9ba21c1ff2527d49ebb975b7e749fee01a26c678a221bef5871f205a1a87dfec7baaeeda1935c711a1e1e00d267cc094f8ecc39d9117967285cb65d547036db060088b79176e8b14c824f2f6cbe70Desktop UX
81619805baef49f2ee7e4c3b34e33ed5fdb9b59b89e12197cee58f68744ab26a16298e98d0096bdaServer hardening
31a6a91ef4b91b03e97c272c9950fe4a0d2e65fe19cc3b6db16041dd18983f047152013ecaf4827eModel metadata
1ec18b6457f6ab54e930c25bcc4acd8c6d4f8a4cReview follow-ups
Eight linear, non-rewriting commits address all 12 original CodeRabbit themes and the subsequent review findings:
d6390f14d9191c43090b767df37197ac32e275a02ebc3848fb411c102aac538106f1bb3bb8f63d627833384814b931afb9d56579450b242e4107f8dff9bcbc82d0301f797338f91da1d640bd821a3e74539c8bbd95ee678a00684a4af2f5a1a13176273c543e26a7fa3f830fe39da42463c1560f5e12290b756b9d06707f4bad323f8dc7c1c74596f2cda7a6655ee2df58ec3c13517cd7e6618e4c385fd54068Addressed themes:
role="img"accessibility contract.aria-describedbydescriptions in both consumers.Final follow-up findings:
aria-activedescendantand an immediate Enter select the final branch.Final branch-navigation refactor:
Verification
Original import verification
Review follow-up verification
Summary by CodeRabbit
Final follow-up verification
Branch-navigation refactor verification