feat(ui): GitHub Issues list pilot on the shared design system (U5 B1)#435
feat(ui): GitHub Issues list pilot on the shared design system (U5 B1)#435OBenner wants to merge 3 commits into
Conversation
Third B1 screen, ported from desktop-github-issues.html: - libs/ui: new IssueList screen — search + filter-chip toolbar (active chip count turns blue per the mockup), two-column body with issue rows (22px circular state pill open/closed/draft, mono repo slug, label pills in six semantic tones, assignee stack, comment count) beside an optional right meta rail on the shared UiMetaSection card family; loading/error/empty states; rail drops below at 1180px. New shared types: UiIssue/UiIssueState/UiIssueLabel/UiIssueLabelTone/ UiIssueAssignee. - Electron: pure github-issues-ui mappers (label-name → tone inference, GitHubIssue → row shape reusing the PR pilot's initials/ relative-age helpers, client-side filtering; 5 tests) + GitHubIssuesPilotView over the existing getGitHubIssues IPC paired with checkGitHubConnection for a reachable error state; the state chips (Open/Closed/All) drive the server-side state param. Mounted as "GitHub Issues (new UI)" beside the legacy investigation view. - i18n: github:issuesPilot.* keys (en+fr), navigation.githubIssuesNext. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Search now matches the issue author, which both locales' search label and the helper's doc comment already promised — UiIssue gains an author field the adapter fills and filterIssues checks. - Meta rail no longer renders GitHubSyncStatus.issueCount: the connection handler derives it from a per_page=1 probe, so it is always 0 or 1. Report the loaded row count and the last sync time instead (new meta.loaded / meta.lastSynced keys, en+fr). 6 mapper tests green; tsc clean in libs/ui and the Electron app. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Warning Review limit reached
Next review available in: 47 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: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughAdds a reusable GitHub Issues list UI, shared issue-row types, GitHub data mapping and filtering helpers, localized labels, Storybook states, and application/sidebar wiring for the new pilot view. ChangesGitHub Issues pilot
Sequence Diagram(s)sequenceDiagram
participant Sidebar
participant App
participant GitHubIssuesPilotView
participant ElectronIPC
participant IssueList
Sidebar->>App: select github-issues-next
App->>GitHubIssuesPilotView: mount with projectId
GitHubIssuesPilotView->>ElectronIPC: check GitHub connection and fetch issues
ElectronIPC-->>GitHubIssuesPilotView: return sync data and issues
GitHubIssuesPilotView->>IssueList: pass mapped issues, filters, and localized labels
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 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: 1
🤖 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/frontend/src/renderer/lib/github-issues-ui.ts`:
- Around line 66-77: Refactor the issue predicate in the filtering logic to
evaluate searchable fields with a helper and short-circuiting logical OR instead
of constructing the combined array, mapped label/assignee arrays, and
intermediate filter. Preserve the existing searchable values, null handling, and
case-insensitive needle matching while allowing later fields to be skipped after
a match.
🪄 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: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
Run ID: 06be36e6-a1df-43d7-9e1d-952f878d8070
📒 Files selected for processing (14)
apps/frontend/src/renderer/App.tsxapps/frontend/src/renderer/__tests__/github-issues-ui.test.tsapps/frontend/src/renderer/components/GitHubIssuesPilotView.tsxapps/frontend/src/renderer/components/Sidebar.tsxapps/frontend/src/renderer/lib/github-issues-ui.tsapps/frontend/src/shared/i18n/locales/en/github.jsonapps/frontend/src/shared/i18n/locales/en/navigation.jsonapps/frontend/src/shared/i18n/locales/fr/github.jsonapps/frontend/src/shared/i18n/locales/fr/navigation.jsonlibs/ui/src/client/types.tslibs/ui/src/index.tslibs/ui/src/screens/IssueList.csslibs/ui/src/screens/IssueList.stories.tsxlibs/ui/src/screens/IssueList.tsx
Evaluate searchable fields through a small matcher with logical OR instead of building intermediate arrays per issue per keystroke — same fields and null handling, no allocations, stops at first match. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|



Summary
Third screen of the B1 "Code & review" batch, ported from
desktop-github-issues.html.libs/ui (shared design system)
UiMetaSectioncard family; loading/error/empty states; the rail drops below the list at 1180px.UiIssue/UiIssueState/UiIssueLabel/UiIssueLabelTone/UiIssueAssignee.PullRequestList: the summary stat row, CI checks, branch chips and per-row badge/time column — the Issues mockup has none of them.Electron
github-issues-uimappers: label-name → semantic tone inference,GitHubIssue→ row shape (reusing the PR pilot'sinitialsOf/relativeAge), client-side filtering — 6 tests.GitHubIssuesPilotViewover the existinggetGitHubIssuesIPC paired withcheckGitHubConnection(same reachable-error pattern as the PRs pilot); the Open/Closed/All chips drive the server-sidestateparam. Mounted as "GitHub Issues (new UI)" beside the legacy investigation view, which stays untouched.i18n
github:issuesPilot.*(en+fr),navigation:items.githubIssuesNext.Adversarial review
The verify stage hit the subagent session limit, so both findings were checked by hand against the code and fixed:
UiIssue.authoradded, filled by the adapter, matched byfilterIssues, pinned by a test.GitHubSyncStatus.issueCount, which the connection handler derives from aper_page=1probe — always 0 or 1 → replaced with the loaded row count plus last-sync time (meta.loaded/meta.lastSynced, en+fr).I'll re-run the full find→verify workflow once the limit resets; anything it surfaces lands as a follow-up commit on this PR.
Verification
libs/ui+ Electron tsc clean; Storybook rebuilt and the OpenIssues story verified against the mockup (state pills, label tones, assignee stacks, comment counts, meta rail).Next in B1
Patterns and Context screens on the same playbook.
🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Tests