Skip to content

Save and reuse named Jira JQL filters on the execution host - #28600

Merged
nwparker merged 8 commits into
mainfrom
nwparker/jira-saved-views
Oct 14, 2026
Merged

nwparker merged 8 commits into
mainfrom
nwparker/jira-saved-views

Conversation

@nwparker

@nwparker nwparker commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor
Files Added Deleted Net
Test 9 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​736 0 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​736
Prod 26 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​1020 $\color{#cf222e}{\Huge{\mathbf{−}}}$​8 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​1012

ELI5

Save several Jira searches under names such as “My active work,” then pick one to run it again. Rename, edit, update, and delete them from the same menu. Orca remembers both the filters and your selection after restart.

What Changed

The Jira header now has a searchable Saved filters menu and an explicit edit form. Before, only one unnamed query was remembered. Saved queries now run as exact JQL through the existing search path and selected site; invalid JQL surfaces the existing Jira error without changing the saved text. Editing the search box leaves the stored filter unchanged until an explicit update.

Filters live in the Jira execution host’s persisted UI state. Reads and mutations take an explicit transport target from the selected source context, or the page’s captured account host when no context is selected. Unresolved owners never fall back to this computer, and an action retained from a previous host cannot write to the new host. Separate capability-gated read/mutation methods avoid adding keys to the strict taskResumeState schema. Mutations run against current host state, so two clients adding different filters do not erase each other. Failed saves retain the draft; late replies from a host that was left cannot replace the current selection. A committed owner lifetime also rejects an action retained across A → B → A host changes, uncommitted renders, and unmounts. Apply reports success only after the selected query was applied on that lifetime, so linked-workspace mode stays selected while application is pending, skipped, stale, or fails, and switches to the saved query only after successful application.

Why

This adapts the focused named-filter workflow from #11151, by jiwonan / no-support, credited in the commit trailer. I also reviewed #13395, by Eugenio Valeiras. Its warning about older hosts rejecting unknown resume fields is valid, but device-local storage would not meet the requested remote persistence. Negotiated host UI methods preserve both requirements. Importing filters already saved on Jira itself remains separate from this issue’s named Orca-filter request.

Linked Issue

Fixes #11114
Refs #17686

The built-in Cloud query prerequisite #28579 is merged. This PR now targets main and contains only saved-filter work, including its composition with the landed linked-workspace controls from #28590. The existing-code clock correction tracked by #28593 is present in the refreshed main base.

Visual Proof

Synthetic Jira data, production filter controls and state hook, rendered through Playwright CDP in an Electron window created with show: false. The window remained hidden and unfocused. The fixture persistence boundary is labeled; actual profile persistence is separately tested.

Before:
Before: one unnamed Jira query

After saving, explicitly renaming/updating, selecting, and reloading:
After: named Jira query and active selection restored

Testing

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

The refreshed branch is based on landed main 0c05e6d3, preserving CLI, Cloud, linked-workspace, authentication, and summary capabilities. Its remaining commits contain saved-filter work only. On macOS with background launch enabled and at most two workers, all 70 focused tests across ten files pass. A new regression fails against the prior source because an action retained across A → B → A still sends a mutation. Tests also cover suspended owner changes that never commit, unmount during apply, stale successes/errors, immediate duplicate-write refusal, checked apply results, strict request bounds, exact JQL, persistence, and older-host refusal.

The linked-workspace consumer now exits that view only after a checked apply returns true. A new actual-header regression fails before that correction; pending, false/skipped/stale, and rejected applications keep the linked view. Existing linked reads retain their error and source fencing.

The complete changed-code gate passes for 29 source files with zero findings. The dedicated CI React Doctor runner passes with zero errors after moving lifetime activation into layout effects; its three nonblocking warnings cover existing component complexity, restoring an externally persisted selection, and a deliberate serialization test. Formatting, lint, anti-slop, focus-read, RPC catalog, runtime-English catalog, and localization extraction checks pass.

Earlier hidden Electron proof exercised save, explicit rename/update, apply, reload restoration, and delete; the screenshots above are preserved. Earlier actual-profile tests cover persistence after restart. The latest correction was verified with hook and contract tests. Standalone compiler validation is coordinated separately; exact-head CI is pending. No full/release build, real Jira, Linux, Windows, phone, or SSH server was exercised for this correction.

AI Disclosure

Review

Self-reviewed bounded input, duplicate-name refusal, host ownership, exact-query error handling, preserved preset flow, acknowledged remote writes, and stale-response fencing.

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

Merge risk: Low for the scoped change after the coordinated standalone compiler check; the fresh CI result is recorded separately and is not claimed green. This adds a new UI workflow and a persisted host-state field across IPC/RPC. Capability checks refuse unsupported hosts without touching their strict resume state; existing wire fields and stream frames are unchanged. Filters are bounded to 50 entries and 8 KiB UTF-8 JQL per entry. No credentials, command execution, Git provider behavior, shortcuts, or platform-specific paths changed. Folder workspaces and SSH use the existing row-less Jira source routing. Mobile routing is covered by contract tests; no real phone, Linux, Windows, or SSH server was exercised locally.

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 (focused checks above; full suite and packaging left to CI)

@nwparker
nwparker force-pushed the nwparker/jira-cloud-filters branch from 39669fc to 883d0ff Compare October 14, 2026 09:43
@nwparker
nwparker force-pushed the nwparker/jira-saved-views branch from 787356d to 46c6cff Compare October 14, 2026 10:02
@nwparker
nwparker force-pushed the nwparker/jira-cloud-filters branch from 44face1 to ab347f9 Compare October 14, 2026 10:11
@nwparker
nwparker force-pushed the nwparker/jira-saved-views branch 2 times, most recently from 0749a04 to 84411c8 Compare October 14, 2026 10:29
@nwparker
nwparker changed the base branch from nwparker/jira-cloud-filters to main October 14, 2026 10:29
@coderabbitai

coderabbitai Bot commented Oct 14, 2026

Copy link
Copy Markdown
Contributor

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: 804d4052-27ee-4f36-9210-8f69723dc296
📥 Commits

Reviewing files that changed from the base of the PR and between 0c05e6d and 84411c8.

⛔ Files ignored due to path filters: 1
  • src/shared/rpc-contract/rpc-params-catalog.generated.ts is excluded by !**/*.generated.*
📒 Files selected for processing: 34
  • src/main/ipc/ui.ts
  • src/main/persistence-jira-saved-filters.test.ts
  • src/main/runtime/rpc/methods/client-ui.ts
  • src/main/runtime/rpc/methods/jira-saved-filter-state.test.ts
  • src/main/runtime/rpc/methods/ui-state-schema-parity-checks.ts
  • src/main/runtime/runtime-rpc/runtime-rpc-mobile-method-routing.ts
  • src/preload/api/ui-bridge-state-and-menu-commands.ts
  • src/preload/api/ui-command-event-api.ts
  • src/renderer/src/components/TaskPageJiraSavedFilters.test.tsx
  • src/renderer/src/components/TaskPageJiraSavedFilters.tsx
  • src/renderer/src/components/task-page-jira-saved-filter-application.test.tsx
  • src/renderer/src/components/task-page-jira-search.test.ts
  • src/renderer/src/components/task-page-jira-search.ts
  • src/renderer/src/components/task-page/jira/Filters.tsx
  • src/renderer/src/components/use-task-page-jira-list-effects.test.ts
  • src/renderer/src/components/use-task-page-jira-list-effects.ts
  • src/renderer/src/components/use-task-page-jira-list-state.ts
  • src/renderer/src/components/use-task-page-jira-saved-filters.test.tsx
  • src/renderer/src/components/use-task-page-jira-saved-filters.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/fr.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json
  • src/renderer/src/runtime/runtime-jira-saved-filter-state.test.ts
  • src/renderer/src/runtime/runtime-jira-saved-filter-state.ts
  • src/shared/jira-saved-filter-capability.ts
  • src/shared/jira-saved-filters.test.ts
  • src/shared/jira-saved-filters.ts
  • src/shared/persisted-ui-state-types.ts
  • src/shared/protocol-version.ts
  • src/shared/rpc-contract/jira-saved-filter-params.ts
  • src/shared/wsl-move/wsl-move-ui-dispositions.ts
  • 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-saved-views branch from 84411c8 to bba51a7 Compare October 14, 2026 10:34
@nwparker
nwparker merged commit d7315af into main Oct 14, 2026
5 checks passed
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]: Save and reuse named Jira JQL filters

1 participant