Paradaux

PAR-191

0

[Epic] Search & saved views — operator filter builder, saved queries, JQL

DoneNormalUnassignedTesksFeature

Biggest day-to-day power-user gap. Current filtering (tesks-ui/components/Filters/Filters.tsx) is free-text + four equals-only dropdowns (Team/Status/Assignee/Project) — no operators (not even "is not"), no saved views, no query language.

Scope:

  • Chained filter builder: field / operator / value rows (e.g. "Assignee is not Rían"), AND/OR, more facets (label, priority, due date, sprint, votes). Backend query support for operators + negation (search lives in PostgresTaskSystem.searchTasks).
  • Saved views / saved queries: per-user and shareable; persisted (DB), not the current status-order cookie.
  • JQL-like text query as the power-user layer over the same predicate model.

Pairs with the configurability substrate (saved views are a per-user/workspace setting).

Comments

tesks · Jun 16, 2026, 9:12 AM

Core shipped to develop (tesks-ui 97496ca):

  • Operator filter builder — field / operator / value rows with is / is not across status, assignee, project, team, label, priority, sprint; negation includes NULLs ("assignee is not X" also returns unassigned). Conditions are URL-encoded (f param) → shareable; active conditions render as removable chips next to the existing quick dropdowns.
  • Saved views — per-user-per-workspace, stored in user_pref (PAR-189 substrate): save the current query as a named view, click to apply, × to delete.
  • DAL: new lib/filters model + parameterised conditionSql applied in listIssues + countIssues.

Filtering is mirror-side (Kysely), so no Java backend change. typecheck + vitest + next build green.

JQL split to PAR-201 (the third layer; a parser over the same model + range operators). Marking the core Pending Release.

tesks · Jun 17, 2026, 4:11 AM

Verified — partially delivered (~60%), keeping open.

Shipped & live:

  • Operator filter builder with negation (is/isNot) and 7 facets (status/assignee/project/team/label/priority/sprint) — tesks-ui/components/Filters/Filters.tsx, lib/filters.ts.
  • Full SQL operator/negation support — lib/sql/issues.ts conditionSql (NULL-aware "is not").
  • Per-user saved views, DB-persisted in user_pref.prefs.savedViews[] (lib/actions/views.ts).

Remaining core scope → tracked in the new child issue:

  • Comparator operators (date/number) — needed to add the missing due-date and votes facets.
  • AND/OR combinator (today only implicit AND).
  • Shareable / workspace-level saved views (today per-user only).
  • JQL text query → already split as PAR-201 (Backlog).

Set to In Progress — the v1 is live; the remainder is the child + PAR-201.

tesks · Jun 17, 2026, 9:58 AM

Closing the epic — the substantive deliverables shipped under PAR-211 (Done): operator filter builder with negation, comparator operators + due-date/votes facets, AND/OR combinator, and shareable workspace saved views. The remaining JQL-style text query continues as its own standalone Backlog item PAR-201 (Low priority).

Activity

  • tesks changed status to Status → Done
  • tesks commented
  • tesks changed status to Status → In Progress
  • tesks commented
  • tesks changed status to Status → Pending Release
  • tesks commented
  • tesks changed status to Status → In Progress
  • tesks created the issue