feat(coach): full-history search + pagination; document the labs watchdog

Coach conversation history was capped at the rail's first ~20 threads and
searched only that loaded page. The rail and the standalone conversations
page now walk the caller's entire history via cursor pagination
(useInfiniteQuery + a scroll sentinel), and search runs server-side against
the conversation title (GET /api/insights/chat?q=) instead of filtering an
already-truncated client array.

Also extends the "automatic screening" info line in the metric catalog to
name the labs "what changed since your last panel" card alongside the
rhythm/breathing/health-status watchdogs it already covered — it un-mounts
the same way when there's nothing to flag and was missing from the copy.
This commit is contained in:
Marc-André Bombeck committed 2026-07-18 05:06:24 +02:00
1 parent 8dd04e0170
commit 1a642f1173
20 files changed
+691 -61

No files matched your search

+12 -2
View File
@@ -5068,8 +5068,10 @@ paths:
description: v1.18.0 — cursor-paginated list of the caller's Coach conversations for the history rail, most-recent
activity first. Metadata only (id, title, timestamps, message count); message bodies are not decrypted here.
`limit` defaults to 20, capped at 50; pass the returned `nextCursor` back as `cursor` for the next page (null at
the end). Coach-gated (`requireAssistantSurface("coach")`); a disabled surface 403s. Auth via cookie or Bearer;
the owner is narrowed from the session.
the end). v1.30.2 — optional `q` narrows the page to conversations whose TITLE contains the text
(case-insensitive substring, capped at 200 chars); message bodies are encrypted at rest and are not searched.
Coach-gated (`requireAssistantSurface("coach")`); a disabled surface 403s. Auth via cookie or Bearer; the owner
is narrowed from the session.
parameters:
- name: cursor
in: query
@@ -5086,6 +5088,14 @@ paths:
maximum: 50
default: 20
description: Page size. Defaults to 20, capped at 50.
- name: q
in: query
required: false
schema:
type: string
maxLength: 200
description: v1.30.2 — case-insensitive substring filter over the conversation TITLE only (message bodies are encrypted
and not searched). Omit for the unfiltered list.
responses:
"200":
description: A page of the caller's conversations.