Dashboard search + sort (Orama) (Agents Dashboard)

**Note** from Bead: Agents Dashboard · [canonical source](https://redfish.acequia.io/guerin/.agents/45761f53-0f16-4bba-87db-d7edb3a25d0c/2026-06-11/notes/00-search-sort-orama.md) · session 2026-06-11 · discussion: Talk: Agents Dashboard

Added to `dashboard.html` (v0.1.0 → **v0.2.0**):

## Sort by date - `parseAbout` now extracts the bead's **`Opened:` date** (`**Opened:** YYYY-MM-DD`); `dateOf(b)` falls back to `ticks.last` if no Opened. - Header `<select id="sort">`: **relevance · newest · oldest · name A–Z** (default newest). Cards show the Opened date next to the GUID.

## Advanced search (Orama) - **Engine: Orama** — chosen per the vector-DB survey in bead [`43685e36`](https://redfish.acequia.io/guerin/.agents/43685e36-80bb-44dc-94be-89ea1c2fa205/about.md) (`2026-06-10-browser-node-vector-rag-search`): Orama = 100% JS full-text **+ vector** engine, runs in Node / browser / Web Worker / Service Worker; lighter than DuckDB-WASM (OLAP, single-writer lock, HNSW-in-RAM) for the agent-markdown workflow. - Loaded lazily via `import('https://esm.sh/@orama/orama@3')`. Index schema `{guid,name,desc,body}`; `body` = stripped, capped (4 kB) about.md text. - Search = `O.search(db,{ term, properties:['name','desc','body'], boost:{name:5,desc:2} })` → hits in relevance order (mapped back to bead cards by `document.guid`). - **Graceful fallback:** if the CDN is unreachable, `orama=null` and search degrades to a substring filter over name+desc+body (the badge shows `search: substring` vs `search: Orama`). CDP-smoke-verified the Orama path (esm.sh import + create/insert/search + `hit.document.guid` shape; "vector search" ranked catalog > agents-dashboard). - Plus a **live-only** checkbox; flow is **search → filter → sort**, re-rendered on every control change (debounced input).

## Next: semantic / vector search (the second layer) Orama also does **vector** search. The upgrade path (per bead 43685e36): generate embeddings with **Transformers.js** (`Xenova/bge-small-en-v1.5` / `all-MiniLM-L6-v2`) in a Web Worker over each bead's about.md, store the vector in the Orama doc (`embedding: vector[384]`), and add a `mode:'hybrid'` search. That turns "advanced search" from lexical → semantic ("find beads *about* X"). Deferred — full-text + sort ships now.

## Note on testing The full dashboard needs **ambient auth** (same-origin session cookie to PROPFIND `.agents/`), so it can't be CDP-tested headlessly — verify in an authenticated browser. Only the Orama dependency was isolatable + smoke-tested.

## References (bead cross-links) - Bead: Browser + Node Vector & RAG Search · [canonical](https://redfish.acequia.io/guerin/.agents/43685e36-80bb-44dc-94be-89ea1c2fa205/)