Skip to content

feat(ui): GitHub Issues list pilot on the shared design system (U5 B1)#435

Open
OBenner wants to merge 3 commits into
developfrom
claude/ui-b1-github-issues
Open

feat(ui): GitHub Issues list pilot on the shared design system (U5 B1)#435
OBenner wants to merge 3 commits into
developfrom
claude/ui-b1-github-issues

Conversation

@OBenner

@OBenner OBenner commented Jul 21, 2026

Copy link
Copy Markdown
Owner

Summary

Third screen of the B1 "Code & review" batch, ported from desktop-github-issues.html.

libs/ui (shared design system)

  • IssueList: search + filter-chip toolbar (active chip count turns blue per the mockup), two-column body — issue rows (22px circular state pill open/closed/draft with an accessible label, mono repo slug, label pills in six semantic tones, assignee stack, comment count) beside an optional 320px right meta rail on the shared UiMetaSection card family; loading/error/empty states; the rail drops below the list at 1180px.
  • New shared types: UiIssue / UiIssueState / UiIssueLabel / UiIssueLabelTone / UiIssueAssignee.
  • Deliberately not carried over from PullRequestList: the summary stat row, CI checks, branch chips and per-row badge/time column — the Issues mockup has none of them.

Electron

  • Pure github-issues-ui mappers: label-name → semantic tone inference, GitHubIssue → row shape (reusing the PR pilot's initialsOf/relativeAge), client-side filtering — 6 tests.
  • GitHubIssuesPilotView over the existing getGitHubIssues IPC paired with checkGitHubConnection (same reachable-error pattern as the PRs pilot); the Open/Closed/All chips drive the server-side state param. 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:

  1. Search ignored the author although both locales' search label (and the helper's own doc comment) promised it → UiIssue.author added, filled by the adapter, matched by filterIssues, pinned by a test.
  2. Meta rail showed GitHubSyncStatus.issueCount, which the connection handler derives from a per_page=1 probe — 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

  • 6/6 mapper tests; 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

    • Added a pilot GitHub Issues view accessible from the sidebar.
    • Browse issues with open, closed, and all-state filters.
    • Search issues by number, title, repository, author, labels, or assignee.
    • View issue status, labels, assignees, comments, repository details, and sync information.
    • Added loading, empty, error, and retry states with English and French translations.
  • Tests

    • Added coverage for issue display mapping, label styling, and search filtering.

OBenner and others added 2 commits July 20, 2026 20:10
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>
@cursor

cursor Bot commented Jul 21, 2026

Copy link
Copy Markdown

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.

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

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

Next review available in: 47 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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: e3f228cf-5667-446d-b69c-10fcd6b7670b

📥 Commits

Reviewing files that changed from the base of the PR and between 9ac3a71 and d53e9d1.

📒 Files selected for processing (1)
  • apps/frontend/src/renderer/lib/github-issues-ui.ts
📝 Walkthrough

Walkthrough

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

Changes

GitHub Issues pilot

Layer / File(s) Summary
Issue list contract and rendering
libs/ui/src/client/types.ts, libs/ui/src/screens/IssueList.tsx, libs/ui/src/index.ts
Defines shared issue-row types and exports IssueList, which renders search, filters, loading/error/empty states, issue rows, selection behavior, and an optional metadata rail.
Issue list styling and stories
libs/ui/src/screens/IssueList.css, libs/ui/src/screens/IssueList.stories.tsx
Adds responsive issue-list styling and Storybook variants for interactive, no-rail, loading, error, and empty states.
GitHub issue mapping and filtering
apps/frontend/src/renderer/lib/github-issues-ui.ts, apps/frontend/src/renderer/__tests__/github-issues-ui.test.ts
Maps GitHub issues to UI rows, assigns label tones, formats assignees, filters searchable fields, and tests the mapping helpers.
Pilot view integration and localization
apps/frontend/src/renderer/components/GitHubIssuesPilotView.tsx, apps/frontend/src/renderer/App.tsx, apps/frontend/src/renderer/components/Sidebar.tsx, apps/frontend/src/shared/i18n/locales/{en,fr}/*.json
Loads issues through IPC, provides localized states and metadata, and exposes the pilot view through application routing and GitHub navigation.
Estimated code review effort: 3 (Moderate) | ~25 minutes

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
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: a GitHub Issues list pilot added to the shared design system.
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 claude/ui-b1-github-issues

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
Contributor

Choose a reason for hiding this comment

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

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

📥 Commits

Reviewing files that changed from the base of the PR and between 9557605 and 9ac3a71.

📒 Files selected for processing (14)
  • apps/frontend/src/renderer/App.tsx
  • apps/frontend/src/renderer/__tests__/github-issues-ui.test.ts
  • apps/frontend/src/renderer/components/GitHubIssuesPilotView.tsx
  • apps/frontend/src/renderer/components/Sidebar.tsx
  • apps/frontend/src/renderer/lib/github-issues-ui.ts
  • apps/frontend/src/shared/i18n/locales/en/github.json
  • apps/frontend/src/shared/i18n/locales/en/navigation.json
  • apps/frontend/src/shared/i18n/locales/fr/github.json
  • apps/frontend/src/shared/i18n/locales/fr/navigation.json
  • libs/ui/src/client/types.ts
  • libs/ui/src/index.ts
  • libs/ui/src/screens/IssueList.css
  • libs/ui/src/screens/IssueList.stories.tsx
  • libs/ui/src/screens/IssueList.tsx

Comment thread apps/frontend/src/renderer/lib/github-issues-ui.ts Outdated
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>
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant