feat(frontend): plan board by release#67
Conversation
|
Warning Review limit reached
Next review available in: 36 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThe frontend normalizes estimate values, changes the default board grouping to releases, revises release planning buckets, renders nested priority groups within releases, and adds persisted pointer-based column resizing. ChangesKanban board updates
Estimated code review effort: 4 (Complex) | ~45 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
frontend/src/components/KanbanBoard.tsx (1)
466-480: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winDrive the board grid from
columnWidths
grid-cols-3keeps the tracks equal, so the per-columnwidthhere only overflows inside each grid cell instead of resizing neighboring columns. The resize handle updates state, but the layout never uses it.Update the container’s
gridTemplateColumnsfromcolumnWidthsand remove the per-itemwidth/max-w-noneoverride.🤖 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 `@frontend/src/components/KanbanBoard.tsx` around lines 466 - 480, Update the Kanban board grid container around COLUMNS.map to set gridTemplateColumns from columnWidths so resized columns control the grid tracks. Remove the per-column style width assignment and the conditional max-w-none class from the column div, while preserving the default three-column layout when no widths are set.
🧹 Nitpick comments (2)
frontend/src/components/KanbanBoard.tsx (2)
171-181: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winCurrent release ("13") is a hardcoded magic value in multiple places.
'13'/'r13'/'Release 13'appear separately at lines 173, 178, and 200-204. Every release cycle this needs updating in each spot, risking an inconsistent bump (e.g. forgetting the label at line 201). Extracting a singleCURRENT_RELEASEconstant would centralize this.const CURRENT_RELEASE = '13'; // use: release === CURRENT_RELEASE || release === `r${CURRENT_RELEASE}` // use: label: `Release ${CURRENT_RELEASE}`Also applies to: 198-204
🤖 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 `@frontend/src/components/KanbanBoard.tsx` around lines 171 - 181, Centralize the current release value in a single CURRENT_RELEASE constant near the planning helpers, then update planningBucket and the release-label logic around the visible release-related code to derive comparisons and “Release …” labels from it. Remove the duplicated hardcoded “13”/“r13”/“Release 13” values while preserving the existing bucket and label behavior.
542-551: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winResize handle isn't keyboard-accessible.
The separator only responds to pointer events — no
tabIndex,onKeyDown, oraria-valuenow/aria-valuemin/aria-valuemax, so keyboard users can't resize columns.<div role="separator" aria-orientation="vertical" + aria-valuenow={columnWidths[status]} + aria-valuemin={240} + aria-valuemax={560} + tabIndex={0} + onKeyDown={e => { + if (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight') return; + const delta = e.key === 'ArrowLeft' ? -10 : 10; + setColumnWidths(prev => ({ + ...prev, + [status]: Math.max(240, Math.min(560, (prev[status] ?? 280) + delta)), + })); + }} title="Drag to resize column" onPointerDown={e => startColumnResize(e, status)}🤖 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 `@frontend/src/components/KanbanBoard.tsx` around lines 542 - 551, Make the column resize separator in the KanbanBoard resize-handle JSX keyboard-accessible: add focusability, keyboard handling that adjusts the column width through the existing resize logic, and separator value metadata with current, minimum, and maximum widths. Preserve the existing pointer behavior and use the surrounding column sizing state and handlers rather than introducing a separate resize path.
🤖 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 `@frontend/src/components/KanbanBoard.tsx`:
- Around line 183-231: Update releaseBuckets so otherReleases is deduplicated
using the same normalized release value used by planningBucket, excluding
reserved values after normalization. Ensure each generated bucket key, label,
and filter uses that normalized value so labels such as release:14 and v14 share
one Release 14 bucket.
In `@frontend/src/utils.ts`:
- Around line 53-57: Align Task.estimate with the backend numeric payload by
updating the fetch boundary in the API mapping to normalize the string value
with toNumber, or consistently widening the related types in
frontend/src/types.ts and frontend/src/api.ts to include strings. Ensure all
consumers receive the same declared and runtime shape.
---
Outside diff comments:
In `@frontend/src/components/KanbanBoard.tsx`:
- Around line 466-480: Update the Kanban board grid container around COLUMNS.map
to set gridTemplateColumns from columnWidths so resized columns control the grid
tracks. Remove the per-column style width assignment and the conditional
max-w-none class from the column div, while preserving the default three-column
layout when no widths are set.
---
Nitpick comments:
In `@frontend/src/components/KanbanBoard.tsx`:
- Around line 171-181: Centralize the current release value in a single
CURRENT_RELEASE constant near the planning helpers, then update planningBucket
and the release-label logic around the visible release-related code to derive
comparisons and “Release …” labels from it. Remove the duplicated hardcoded
“13”/“r13”/“Release 13” values while preserving the existing bucket and label
behavior.
- Around line 542-551: Make the column resize separator in the KanbanBoard
resize-handle JSX keyboard-accessible: add focusability, keyboard handling that
adjusts the column width through the existing resize logic, and separator value
metadata with current, minimum, and maximum widths. Preserve the existing
pointer behavior and use the surrounding column sizing state and handlers rather
than introducing a separate resize path.
🪄 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: defaults
Review profile: CHILL
Plan: Pro
Run ID: 2f8c6c2f-3bee-4894-9f39-09a99e9aea51
📒 Files selected for processing (3)
frontend/src/App.tsxfrontend/src/components/KanbanBoard.tsxfrontend/src/utils.ts
Summary
Validation
Note: pnpm run build is blocked locally by the repo's pnpm 10.33.2 guard while this shell has pnpm 11.10.0, so validation used the checked-in local binaries directly.
Summary by CodeRabbit
New Features
Improvements