Problem
Saved assets (query result snapshots, dashboards, shared analyses) have titles + descriptions + tags. The portal's asset library today is browse-and-filter on owner, kind, tag, date. Finding "the cohort retention analysis someone did last quarter" requires knowing the title or scrolling.
Proposal
Embed title + description + tag set for every portal asset. Add a search box to the portal asset library that ranks by similarity to the typed query. Expose the same ranking via `GET /api/v1/portal/assets?q=...` for programmatic consumers.
Depends on
#438 (indexing-job framework). Asset writes go through the portal handler; the indexer's Source watches `portal_assets` on insert / update.
Acceptance criteria
- Asset descriptions indexed on insert / update.
- Portal asset library page renders a search input that ranks results by similarity.
- Asset list API accepts `?q=` for the same ranking.
- Share visibility scoping still applies: users cannot find assets they cannot view.
Out of scope
- Indexing the underlying query results themselves. Title + description + tags are the source of truth; the content is too volatile.
Problem
Saved assets (query result snapshots, dashboards, shared analyses) have titles + descriptions + tags. The portal's asset library today is browse-and-filter on owner, kind, tag, date. Finding "the cohort retention analysis someone did last quarter" requires knowing the title or scrolling.
Proposal
Embed title + description + tag set for every portal asset. Add a search box to the portal asset library that ranks by similarity to the typed query. Expose the same ranking via `GET /api/v1/portal/assets?q=...` for programmatic consumers.
Depends on
#438 (indexing-job framework). Asset writes go through the portal handler; the indexer's Source watches `portal_assets` on insert / update.
Acceptance criteria
Out of scope