fix(kb-ui): P0 correctness — TextReader race/errors, outline nav, claims drop, object load-more #1

Merged
jules merged 3 commits from fix/kb-ui-p0 into main 2026-07-09 12:16:12 +00:00
Owner

P0 fixes from the deferred review (arcadia-knowledge-ui-review-2026-07-07.md), lib side. Pairs with arcadia-personal-cloud-web PR #11 (they are coupled — pc-web consumes these components).

  • TextReader (P0-3): monotonic request guard so a slow earlier read cannot clobber the current one; catch + Retry surface instead of a blank panel / unhandled rejection; Read-more guarded and shows loading.
  • OutlineNav (P0-4): an explicit section selection now wins over the initial citation highlight, so clicking sections works on ?start=&end= views (was inert).
  • ObjectViewer: resets section + image on object switch (no bleed across citation navigation); catches the blob resolve.
  • ObjectList (P0-2, lib side): optional onLoadMore/hasMore/loadingMore for paginated corpuses.
  • ClaimsReviewQueue (P0-5): 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).

tsc -p tsconfig.check.json clean.

🤖 Generated with Claude Code

P0 fixes from the deferred review (`arcadia-knowledge-ui-review-2026-07-07.md`), lib side. Pairs with arcadia-personal-cloud-web PR #11 (they are coupled — pc-web consumes these components). - **TextReader (P0-3):** monotonic request guard so a slow earlier read cannot clobber the current one; catch + Retry surface instead of a blank panel / unhandled rejection; Read-more guarded and shows loading. - **OutlineNav (P0-4):** an explicit section selection now wins over the initial citation highlight, so clicking sections works on `?start=&end=` views (was inert). - **ObjectViewer:** resets section + image on object switch (no bleed across citation navigation); catches the blob resolve. - **ObjectList (P0-2, lib side):** optional `onLoadMore`/`hasMore`/`loadingMore` for paginated corpuses. - **ClaimsReviewQueue (P0-5):** 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). `tsc -p tsconfig.check.json` clean. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jules added 1 commit 2026-07-07 22:23:18 +00:00
- 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>
jules added 2 commits 2026-07-09 12:15:36 +00:00
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>
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>
jules merged commit 03443590a2 into main 2026-07-09 12:16:12 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: CremaUIStudio/lib-knowledge-ui#1
No description provided.