* fix(user-tasks): include tags in EF and VNext safe search
Safe search must cover tags per the persistence contract. InMemory already
matched tags; EF inspected only title/summary/reference/task type, and VNext
had the same gap. Search TagsJson with a bounded contains so tag-only hits
are visible without a new table.
Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
* fix(user-tasks): make EF tag search case-insensitive and tag-scoped
SQLite Contains on TagsJson is case-sensitive and can match JSON array
syntax between tags. Lowercase the payload for tag contains, and skip
tag matching when the query itself contains JSON punctuation, matching
InMemory/VNext individual-tag semantics.
Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
* fix(user-tasks): keep tag punctuation searchable on EF
The previous JSON-structure guard skipped all tag matching when the
query contained brackets or quotes, so a tag like review[urgent] was
invisible on EF while InMemory and VNext found it. Only skip the tag
path when the query spans the serialized tag delimiter.
Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
* fix(user-tasks): match EF tags per element, not JSON text
Map Tags as a primitive collection on the existing TagsJson column so
safe search uses Any(tag.Contains) with ToLower. That is the same
per-tag, case-insensitive semantics as InMemory/VNext: punctuation
inside a tag stays searchable, and text that only spans JSON array
syntax cannot match.
Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>