The curation base for a per-person gated `memory` collection of FREE-TEXT notes
(kind: note), distinct from ClaimsReviewQueue's subject·predicate·value triples.
Groups proposed (specialist-noted, awaiting confirmation) vs remembered (active),
with confirm/forget callbacks, source attribution, and tags — matching the KB UI
house style. Collection-agnostic (props in, callbacks out): the same base powers
the KB `memory` collection and a consumer's /memory page.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A kb.list row can arrive without a sensitivity (a claim/note, or older data);
SENSITIVITY[level] was then undefined and reading .tone crashed the whole
object list. Fall back to a neutral badge — never defaulting an unknown value
to "Open", which would misstate exposure. (Surfaced building the standalone
webapp against a real corpus.)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Both consumers (embedded + the coming standalone) need the same search UI and
paginated lists; keep them from diverging by owning both here.
- KnowledgeSearch (components-search.tsx): the search input + paginated results
panel, over an injected onSearch. Owns query/results/loading/error/clear and a
"Load more" for search results; renders the caller's `browse` content when
there is no active search. Replaces each app hand-rolling hit rendering.
- CollectionList: onLoadMore/hasMore/loadingMore (mirrors ObjectList), so a
paginated corpus list gets a load-more affordance.
Stacked on fix/kb-ui-p0 (ObjectList already gained load-more there). tsc clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- TextReader: monotonic request guard (stale slice can't clobber current) +
catch with a retry surface instead of a blank panel / unhandled rejection;
Read-more guarded and shows loading.
- OutlineNav: an explicit section selection now wins over the initial citation
highlight, so clicking sections works on ?start=&end= views (was inert).
- ObjectViewer: reset section + image on object switch (no bleed across
citation navigation); catch the blob resolve.
- ObjectList: optional onLoadMore/hasMore/loadingMore (paginated corpuses).
- ClaimsReviewQueue: catch-all "Awaiting review" bucket so a claim the queue
returned is never silently dropped (e.g. an open-conflict singleton whose
counterpart is not in the payload).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>