- Streaming: SSE consumer hits /ask_smart with stream=true, tokens
fill the answer incrementally; spinner clears as soon as first
token arrives
- Multi-turn: last 5 successful Q→A pairs sent as `history` so the
model can resolve "and the third one?" / pronoun references
- View source modal: clicking a source chip opens a drawer with the
full markdown of the doc (rendered via react-markdown with the
same atelier styles)
- Doc-scoped: pinnedDocId on conversation; pinning an entry from the
Documents page opens a new scoped conversation, follow-ups go to
/ask (retrieval bypass). Composer shows a removable "📌 scoped"
chip and adapts its placeholder
- Inline citations: [1] [2] markers in the answer become clickable
badges that open the source drawer
- Reject UX: in `rejected_low_similarity` the source list is
re-labelled "Closest matches · all below similarity X" and
collapsed by default
- Layout: AppShell locked to viewport (h-screen + overflow-hidden +
min-h-0), Th…