Skip to content

feat(frontend): plan board by release#67

Merged
JustAGhosT merged 2 commits into
mainfrom
feat/release-board-planning
Jul 12, 2026
Merged

feat(frontend): plan board by release#67
JustAGhosT merged 2 commits into
mainfrom
feat/release-board-planning

Conversation

@JustAGhosT

@JustAGhosT JustAGhosT commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • default the board grouping to release planning
  • render release swimlanes with nested collapsible priority groups
  • label release buckets as "Release 12", "Release 13", etc.
  • fit the three status columns horizontally by default and add drag handles for column resizing
  • parse numeric-string estimates before summing/formatting so column totals do not render NaN

Validation

  • C:\Users\smitj\repos\baton\frontend\node_modules.bin\tsc.CMD
  • C:\Users\smitj\repos\baton\frontend\node_modules.bin\vite.CMD build

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

    • Added resizable Kanban columns with saved width preferences.
    • Release-grouped boards now organize work into collapsible priority sections.
    • Improved release bucketing for planned, future, backlog, and unplanned work.
  • Improvements

    • Release is now the default board grouping for new or unconfigured views.
    • Estimate values entered as numbers or text are handled more reliably.

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@JustAGhosT, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 36 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 118582a7-a9a2-4173-82cd-93739856dd14

📥 Commits

Reviewing files that changed from the base of the PR and between 6d4465b and 1bf3357.

📒 Files selected for processing (2)
  • frontend/src/components/KanbanBoard.tsx
  • frontend/src/hooks/useTasks.ts
📝 Walkthrough

Walkthrough

The 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.

Changes

Kanban board updates

Layer / File(s) Summary
Estimate normalization
frontend/src/utils.ts, frontend/src/components/KanbanBoard.tsx
Adds finite numeric coercion for estimate values and applies it to formatting, triage checks, exclusions, totals, and task counts.
Planning and priority grouping
frontend/src/components/KanbanBoard.tsx
Classifies tasks into release planning buckets and renders release buckets through collapsible Critical, High, Medium, and Low priority sections.
Board default and column resizing
frontend/src/App.tsx, frontend/src/components/KanbanBoard.tsx
Sets release grouping as the persisted default and adds persisted, bounded pointer-based column resizing with a grid layout.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

  • phoenixvc/baton#32: Introduced persisted numeric task estimates related to the new estimate normalization.
  • phoenixvc/baton#55: Added related Kanban board release grouping and rollup behavior.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly captures the main change: shifting the frontend board to release-based planning.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/release-board-planning

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 win

Drive the board grid from columnWidths
grid-cols-3 keeps the tracks equal, so the per-column width here 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 gridTemplateColumns from columnWidths and remove the per-item width/max-w-none override.

🤖 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 win

Current 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 single CURRENT_RELEASE constant 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 win

Resize handle isn't keyboard-accessible.

The separator only responds to pointer events — no tabIndex, onKeyDown, or aria-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

📥 Commits

Reviewing files that changed from the base of the PR and between 1526d5a and 6d4465b.

📒 Files selected for processing (3)
  • frontend/src/App.tsx
  • frontend/src/components/KanbanBoard.tsx
  • frontend/src/utils.ts

Comment thread frontend/src/components/KanbanBoard.tsx
Comment thread frontend/src/utils.ts
@JustAGhosT JustAGhosT merged commit 2c6bb08 into main Jul 12, 2026
3 checks passed
@JustAGhosT JustAGhosT deleted the feat/release-board-planning branch July 12, 2026 13:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant