Uh oh!
There was an error while loading. Please reload this page.
fix(ui): align project rail focus order - #3167
Conversation
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Included review availability: Your plan includes up to 3 reviews per rolling hour; 1 remains after this review. 📝 WalkthroughWhat this PR solvesThe project rail now follows the visual keyboard order:
Source of truth and solution sizeThe PR extends the existing The solution is the smallest coherent change. It adds one sibling slot and updates the project row to use it. The added complexity preserves DOM order, visual geometry, and existing interaction feedback. No code or tests are clear deletion candidates. The raw-markup and parsed-DOM checks provide complementary protection against nested-button regressions. Validation and risks
Complexity delta
Total maintenance complexity stays justified. The public slot and focused tests directly support the required keyboard behavior. Review-relevant risksThe diff changes user-visible keyboard focus order in the project rail. Independent human review is required for this behavior under repository policy. The diff adds the public No security, licensing, release, or governance effect was identified in the current diff. The person performing the merge must review the final diff. A maintainer makes the final determination. WalkthroughThe project action menu now uses ChangesProject action layout
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk:⚪ Minimal · up to The project rail now follows the intended keyboard order while preserving the existing layout and interaction behavior; no actionable merge-blocking risk remains after normal checks and review. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
jackwener
commented
Aug 17, 2026
@ARE404 I confirmed the bug on current main: the project action precedes the project navigation control in DOM/Tab order even though it is visually trailing. CSS-only reordering would not fix keyboard order, and nesting the action in |
Generated-by: Codex
9db517f to
8dc8029CompareRebased onto Visual evidence below, as requested. Both columns come from one Playwright ![]() Geometry is byte-identical across the three pairs; only the focus ring moves. |
PR Summary by QodoAlign project rail keyboard focus with visual order
AI Description
Diagram
High-Level Assessment
Files changed (6) |
Code Review by Qodo🐞 Bugs (0)📘 Rule violations (0)📎 Requirement gaps (0)Great, no issues found!Qodo reviewed your code and found no material issues that require reviewTip of the day💡 Did you know, you can keep summaries lean with Finding overflow, which tucks the rest behind 'View more' |
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 978ec180-a799-4281-b95d-aeea5c011e23
📒 Files selected for processing (6)
apps/desktop/e2e/sidebar-project-row.spec.tsapps/desktop/src/renderer/styles/sidebar.csspackages/ui/src/__tests__/session-history-row-actions.test.tsxpackages/ui/src/session-history-list.tsxpatches/@astryxdesign+core+0.4.0.patchpatches/README.md
Included review availability: Your plan includes up to 3 reviews per rolling hour; 2 remain after this review.
Uh oh!
There was an error while loading. Please reload this page.
Astro-Han
left a comment
There was a problem hiding this comment.
Reviewed at 8dc802964cbe493a6fff6c317657e18960186ffe.
This is a focused fix for keyboard focus order in the expanded project rail. The new trailingAction seam keeps the visual and DOM order aligned without duplicating navigation state, avoids nested interactive controls, and is exercised at the current product call site. The collapsed-rail concern raised during adversarial review is not reachable from that call site, so I do not see a concrete issue to block this change.
All current checks, including workspace tests, E2E, Storybook, package validation, Windows coverage, and CodeRabbit, are green.
AI-assisted review disclosure: Codex coordinated the review and verified the final diff, current call sites, DOM/focus ordering, test coverage, and live CI at this head. Two independent reviewer-agent passes and an OpenCode Go DeepSeek V4 Flash (high) pass were used as adversarial inputs; their claims were independently adjudicated against the code.
中文复核
已在 8dc802964cbe493a6fff6c317657e18960186ffe 复核。该改动通过最接近的现有组件扩展点调整展开态项目栏的 DOM 与键盘焦点顺序,没有复制导航状态,也没有引入嵌套交互控件。对抗审查提出的折叠态问题在当前唯一产品调用路径中不可达,因此不构成阻塞。当前所有检查均已通过。
本次为 AI 辅助审查:Codex 负责统筹并复核最终 diff、调用路径、焦点顺序、测试与实时 CI;另使用两次独立 reviewer 审查及一次 OpenCode Go DeepSeek V4 Flash(high)对抗审查,相关结论均已回到代码中独立核验。
parseHTML auto-closes a <button> that opens directly inside another, so the structural assertion alone cannot see that shape. Count start and end tags on the raw markup as well; a single-token match keeps it linear. Generated-by: Claude Code
Uh oh!
There was an error while loading. Please reload this page.

Summary
SideNavItem.trailingActionseam so the menu stays a sibling control instead of moving before the whole project item or nesting inside its buttonThe rail looked left-to-right like a project row followed by its
⋯action, but the DOM put the action first.SideNavItemowns both the project control and its nested task group: an external sibling can only sit before both or after both, whileendContentrenders inside the project button and cannot hold another button. The new slot is rendered after the primary control and before children, which gives the rail the intended order without custom Tab handling or invalid nested controls.There is no visual geometry change. The menu keeps the same reserved trailing position and hover/pressed feedback.
Refs #2984
Verification
npm --workspace @maka/desktop run build:workspace-deps— passnpm --workspace @maka/desktop run typecheck— passnpm run format:check— passnpm run lint— passnode --test packages/ui/dist/__tests__/session-history-row-actions.test.js— 2 passednpx playwright test --config e2e/playwright.config.ts e2e/sidebar-project-row.spec.ts— focus-order and grouping cases passed; the unchanged pointer case hit one Electron first-window startup timeoutnpx playwright test --config e2e/playwright.config.ts e2e/sidebar-project-row.spec.ts -g 'task row action menu accepts pointer selection'— retry passedProduct/Sidebar Session List / Project Groups— verified unchanged geometry, zero nested buttons, and the actual Tab sequence project → actions → first taskReview focus
trailingActionextends the existing local Astryx patch rather than recreating SideNav collapse behavior in product code or intercepting Tab. It is deliberately a sibling-only render seam with no styling or focus policy of its own; remove the hunk when Astryx publishes an equivalent slot.AI use
Tool(s) and scope: Codex audited the rail in Storybook, implemented the component seam and product integration, updated and ran the focused tests, and drafted this PR description. The human contributor owns review and submission.
Checklist
Does this PR entail a change in behavior?