Skip to content

feat(jira): choose planning columns in the issue list - #28615

Merged
nwparker merged 6 commits into
mainfrom
nwparker/jira-list-columns
Oct 14, 2026
Merged

nwparker merged 6 commits into
mainfrom
nwparker/jira-list-columns

Conversation

@nwparker

@nwparker nwparker commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor
Files Added Deleted Net
Test 16 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​1139 $\color{#cf222e}{\Huge{\mathbf{−}}}$​8 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​1131
Prod 18 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​786 $\color{#cf222e}{\Huge{\mathbf{−}}}$​130 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​656

ELI5

Choose which Jira planning details appear in the issue list, so sprint planning needs fewer trips to Jira.

What Changed

The fixed Jira list now has a checkbox Columns menu. It keeps Key and Issue visible and adds optional Parent, Sprint, Points, Estimate, and Remaining columns. Choices are saved on this device. Selected columns can be sorted; hiding the sorted column selects Updated, or Key if Updated is hidden.

Priority sorting reads each site's scheme from the Jira source that owns the list, using its explicit source host or the page's captured account host. Switching the focused server cannot redirect those reads; responses from a previous owner are discarded, and an already loaded scheme is hidden immediately when the owner or account changes. The existing priority API remains available for older callers.

Rows and headings use one column registry and scroll horizontally together when the selected fields exceed the panel width. Titles retain at least 180px. Standard priorities use theme tokens for red, yellow, and blue. Sprint and points field IDs are discovered per site and credentials, shared by concurrent reads, and refreshed after ten minutes. They are requested in both list and detail reads. A failed or slow catalog request leaves the rest of the issue usable.

Adapted from #20994 by Dagan (@idan-dagan-imagenai), with original author credit in the commit trailer. The current Tasks components and state differ from that source branch, so the registry, picker, and mapping were adapted to the current APIs.

Why

The existing list hides the information needed to plan a sprint. A device-local menu follows the nearby Linear display preference pattern and keeps the default columns familiar. Discovering IDs avoids assuming every Jira site uses the same custom fields. Sharing discovery outside each search's queue slot avoids exhausting the request pool. Estimates use hours and minutes because Jira sites configure different working days and weeks.

Linked Issue

Fixes #20882.

This PR targets main after #28583 landed. The production clock fix is already on main.

Visual Proof

Hidden Electron renderer running the actual Tasks list components with synthetic Jira issues; both captures use a 1400px panel. The wider selected layout exposes a horizontal scrollbar instead of collapsing the issue title.

Before, default columns:

Default Jira columns

After, planning columns selected:

Selected Jira planning columns

Testing

  • I manually tested these changes locally
  • Automated tests added/updated, or explained why not below

77 focused tests across eight suites passed. Coverage includes field discovery, cancellation, a hung catalog deadline, credential isolation, Server catalog paths and sprint values, numeric zero, detail hydration, more sites than queue slots, column persistence, malformed preferences, sorting, and the shared grid. Changed-code quality, focused oxlint, and dead-class checks pass. Hidden CDP checks exercise the actual list components and production state hook with synthetic data in both themes: Points changes row order, hiding it restores Updated sorting, and choices survive reload. At 780px the title is 180px and the identical row/header grids overflow to 1274px instead of collapsing it.

The routing follow-up passes 50 focused tests across five suites, including eight owner regressions that all fail against the unchanged hook. These cover captured accounts, explicit sources, local/direct-SSH IPC routes, unresolved owners, late results, and compatibility wrappers. Focused lint and changed-code quality pass with zero findings across the complete PR's 27 source/test files. The full focus-read gate passes at 1,116 reads after pruning only decreases. The priority transport retains its existing method, site argument, and 30-second timeout. No additional application or broad compiler run was launched for this follow-up.

tc:web, localization catalogs, and a fresh focused quality gate passed. The panel-width base (#28583) passed its hidden full-app regression. The follow-up full build and pnpm tc were interrupted under the coordinator's resource policy when machine load reached 264 and RAM reached 127 GiB; the expanded two-test full-app regression is not yet run. CI and serialized broad validation must finish before merge.

The final review corrections pass 58 tests across eight suites and all seven changed-quality scans with zero findings. New regressions fail against the preceding production source: stale completed priority maps, punctuation sprint names, repeated discovery failures, and the optional read deadline. A hidden styled Electron fixture exercised three production list rows, ascending and descending Points sorting, hiding the sort column, and a workspace action on an older-host issue with missing planning fields. Both zero and missing values remained distinct. Localization catalogs, extraction and coverage were checked. Source and host account tests use fixtures; live Jira and platform desktop proof remain outside this evidence.

Review

Low product risk after the review corrections; current-head compiler checks still required. Optional catalog discovery now owns at most 500ms of request time, with a one-minute failure cooldown and ten-minute success expiry. Server sprint names retain commas and brackets. Source-qualified priority snapshots prevent a previous account's completed scheme from sorting the next account's issues. The shared row/header template and minimum width reserve 104px for combined actions. Existing issue readers keep working with missing optional values.

Agent skill upstream boundary

  • Not applicable, or this change copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.

Notes

Validated on macOS with hidden windows. Linux, Windows, SSH, and live Jira credentials were not exercised. Issue fields are additive and optional for mixed client/server versions; an older server produces blank planning values. There are no new RPC methods, Git commands, database changes, or platform-specific paths. The Parent value uses Jira's REST parent field. Server epic relationships exposed only through a separate Epic Link field are not represented; the UI does not promise that field. Unsupported or unavailable planning fields remain blank. Compact panels below 768px retain their existing row summary.

Checklist

  • This PR is small and focused
  • I explained what changed and why (ELI5, the user-facing before/after, the mechanism, and why over the alternatives)
  • Before/after screenshots or videos attached for UI changes, or N/A with reason
  • Self-reviewed for correctness, security, and performance
  • Cross-platform, SSH/remote, and path/shortcut impact considered (or N/A)
  • pnpm lint, pnpm typecheck, pnpm test, and pnpm build pass (or CI will cover; local preferred)

@nwparker
nwparker force-pushed the nwparker/jira-list-columns branch from 574fc9b to ba8787c Compare October 14, 2026 10:02
@nwparker
nwparker changed the base branch from nwparker/jira-panel-layout to main October 14, 2026 10:02
@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 2 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 10 included reviews currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f931d7c6-f60c-4deb-b05f-79c5be0f2daa
📥 Commits

Reviewing files that changed from the base of the PR and between ed65c61 and 68a5de8.

📒 Files selected for processing: 34
  • config/focus-setting-read-baseline.txt
  • src/main/jira/issues.test.ts
  • src/main/jira/jira-agent-read.test.ts
  • src/main/jira/jira-agile-field-search.test.ts
  • src/main/jira/jira-agile-fields.test.ts
  • src/main/jira/jira-agile-fields.ts
  • src/main/jira/jira-cloud-planning-composition.test.ts
  • src/main/jira/jira-issue-mapping.ts
  • src/main/jira/jira-issue-read.ts
  • src/main/jira/jira-issue-search.ts
  • src/main/jira/jira-preset-filters.test.ts
  • src/main/jira/jira-search-abort.test.ts
  • src/renderer/src/assets/main.css
  • src/renderer/src/components/jira-issue-sorter.ts
  • src/renderer/src/components/jira-list-columns-menu.tsx
  • src/renderer/src/components/jira-list-columns.test.ts
  • src/renderer/src/components/jira-list-columns.ts
  • src/renderer/src/components/task-page-jira-grouping.test.ts
  • src/renderer/src/components/task-page-jira-issue-cells.tsx
  • src/renderer/src/components/task-page-jira-issue-list.tsx
  • src/renderer/src/components/task-page-jira-quick-copy.test.tsx
  • src/renderer/src/components/task-page-jira-sort-controls.test.tsx
  • src/renderer/src/components/task-page-jira-sort-controls.tsx
  • src/renderer/src/components/task-page-jira-sorting.test.ts
  • src/renderer/src/components/task-page-jira-status-tone.ts
  • src/renderer/src/components/task-page-jira-workspace-actions.test.tsx
  • src/renderer/src/components/task-page/jira/Content.tsx
  • src/renderer/src/components/use-task-page-jira-list-state.owner.test.tsx
  • src/renderer/src/components/use-task-page-jira-list-state.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/runtime/runtime-jira-client.ts
  • src/renderer/src/runtime/runtime-jira-priority-client.test.ts
  • src/shared/jira-types.ts
  • tests/e2e/jira-panel-layout.spec.ts
📝 Walkthrough

Jira issue reads and searches now discover site-specific sprint and story-point fields and map parent, sprint, story-point, and estimate data. The Jira issue list now supports configurable columns, saved visibility preferences, and sorting across planning fields. Priority loading uses a resolved runtime target. Tests cover discovery, mapping, column state, rendering, sorting, and panel behavior.

Priority: ➖ Normal

Merge Risk: 🟡 Moderate · up to ed65c

The new Jira column end-to-end test cannot complete. Correct its menu label before merging.

Pre-merge checks: Passed 3 · Failed 2

Failed Failed checks: 2 warnings

Check name Status Explanation Resolution
Linked Issues check Warning The PR implements the column picker, device-local persistence, hidden optional columns, per-site Sprint and story-point discovery, estimate mapping, and Jira-style priority tones for #20882. The issue… Add Epic Link support to the Parent/Epic column mapping for the Jira field representation used by supported sites. Preserve the current REST parent mapping, define the fallback behavior when both values exist, and add automated tests for Ep…
Docstring Coverage Warning Docstring coverage is 9.62% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 52 functions across 27 files. (3 skipped: … Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 3 passed
Check name Status Explanation
Out of Scope Changes check Passed The owner-routed priority reads, stale-response protection, optional field-read limits, shared column grid, and related tests support the Jira list behavior in #20882. The changes do not show a demons…
Title check Passed The title clearly and concisely describes the primary change: allowing users to choose planning columns in the Jira issue list.
Description check Passed The description follows the required structure, explains the user-facing changes and rationale, links issue #20882, includes visual proof, documents testing and limitations, and addresses compatibilit…
Full details: Linked Issues check

Explanation

The PR implements the column picker, device-local persistence, hidden optional columns, per-site Sprint and story-point discovery, estimate mapping, and Jira-style priority tones for #20882. The issue requests an Epic / Parent value. mapJiraIssue maps only Jira REST fields.parent; it does not map a separate Epic Link field. The Epic requirement is therefore incomplete.

Resolution

Add Epic Link support to the Parent/Epic column mapping for the Jira field representation used by supported sites. Preserve the current REST parent mapping, define the fallback behavior when both values exist, and add automated tests for Epic Link mapping and missing-field behavior.

Full details: Docstring Coverage

Explanation

Docstring coverage is 9.62% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 52 functions across 27 files. (3 skipped: 3 unsupported.)

✨ Finishing Touches: 💡 1
📝 Generate docstrings: 💡
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@nwparker
nwparker force-pushed the nwparker/jira-list-columns branch from ba8787c to ed65c61 Compare October 14, 2026 10:07

@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


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 59d39a3f-d581-4c7d-b5f8-5bb435e9c3a5
📥 Commits

Reviewing files that changed from the base of the PR and between 64538a6 and ed65c61.

📒 Files selected for processing: 30
  • config/focus-setting-read-baseline.txt
  • src/main/jira/issues.test.ts
  • src/main/jira/jira-agile-field-search.test.ts
  • src/main/jira/jira-agile-fields.test.ts
  • src/main/jira/jira-agile-fields.ts
  • src/main/jira/jira-issue-mapping.ts
  • src/main/jira/jira-issue-read.ts
  • src/main/jira/jira-issue-search.ts
  • src/main/jira/jira-search-abort.test.ts
  • src/renderer/src/assets/main.css
  • src/renderer/src/components/jira-issue-sorter.ts
  • src/renderer/src/components/jira-list-columns-menu.tsx
  • src/renderer/src/components/jira-list-columns.test.ts
  • src/renderer/src/components/jira-list-columns.ts
  • src/renderer/src/components/task-page-jira-grouping.test.ts
  • src/renderer/src/components/task-page-jira-issue-cells.tsx
  • src/renderer/src/components/task-page-jira-issue-list.tsx
  • src/renderer/src/components/task-page-jira-sort-controls.test.tsx
  • src/renderer/src/components/task-page-jira-sort-controls.tsx
  • src/renderer/src/components/task-page-jira-sorting.test.ts
  • src/renderer/src/components/task-page-jira-status-tone.ts
  • src/renderer/src/components/task-page/jira/Content.tsx
  • src/renderer/src/components/use-task-page-jira-list-state.owner.test.tsx
  • src/renderer/src/components/use-task-page-jira-list-state.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/runtime/runtime-jira-client.ts
  • src/renderer/src/runtime/runtime-jira-priority-client.test.ts
  • src/renderer/src/runtime/runtime-jira-priority-client.ts
  • src/shared/jira-types.ts
  • tests/e2e/jira-panel-layout.spec.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.

Comment thread tests/e2e/jira-panel-layout.spec.ts Resolved
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.

[Feature]: Choose Jira issue list columns, including epic, sprint, story points and estimates

1 participant