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:
PostgresTaskSystem.searchTasks).Pairs with the configurability substrate (saved views are a per-user/workspace setting).
Verified — partially delivered (~60%), keeping open.
Shipped & live:
is/isNot) and 7 facets (status/assignee/project/team/label/priority/sprint) — tesks-ui/components/Filters/Filters.tsx, lib/filters.ts.lib/sql/issues.ts conditionSql (NULL-aware "is not").user_pref.prefs.savedViews[] (lib/actions/views.ts).Remaining core scope → tracked in the new child issue:
Set to In Progress — the v1 is live; the remainder is the child + PAR-201.
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).
Core shipped to develop (tesks-ui
97496ca):fparam) → shareable; active conditions render as removable chips next to the existing quick dropdowns.user_pref(PAR-189 substrate): save the current query as a named view, click to apply, × to delete.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.