PAR-191
[Epic] Search & saved views — operator filter builder, saved queries, JQL
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 (
fparam) → 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/filtersmodel + parameterisedconditionSqlapplied inlistIssues+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