UI API extension assistant 1.5.0 adds POST /qqq/v1/assistant/client-errors
(AssistantClientErrorReportV1 in, AssistantClientErrorResponseV1 out, 202).
Any signed-in user may report; scope and message are required (400
otherwise, also for a non-object body). Every field is bounded, message and
stacks are scrubbed (AiRedactor secrets, e-mails, digit runs over 6, mixed
tokens, query strings), the route keeps only its path, and conversation /
message / turn ids are kept only when they are the user's own. Over
clientErrorsPerUserPerMinute (default 30) the report is acknowledged with
accepted:false and dropped, never a 429.
Rows go to the new owner-locked assistant_client_error table (Assistant app
nav, record screens, bundle help, channel wall by pattern, SET NULL foreign
keys in the reference DDL) and are deleted by retention after
toolResultRetentionDays. The assistant.client-errors health check is
DEGRADED at clientErrorWarnPerHour (default 20) reports in the last hour, so
the Assistant health card shows it too. The deprecated AssistantErrorV1
description again says "since 1.3.0".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- toolCallTimeoutSeconds (default 60): each tool call is bounded from when
it gets a permit, and never outlives the turn's deadline; a timed-out call
gets an ERROR is_error result.
- Tool exceptions (also Errors and toolbox failures) become an ERROR tool
part plus an error notice; the details go only to the log.
- The engine checks renders and presentations (RenderShapes) before it
emits or stores them; an undisplayable one is replaced by an error notice.
- Terminal events are emitted independently, so message.end and the
terminal turn row are always written.
- Conversation detail repairs messages left STREAMING (reaping orphaned
runs), and retention finalizes runs abandoned past the hard stream limit.
The recovery writes are shared in AbandonedTurns.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
RenderShapes now checks all render types (records, record, count, widget,
history, pending_action, bulk_load_dry_run) and presentation blocks (table,
chart, metrics, filterLinks, recordLinks, actions): required lists are always
present, non-object entries are dropped and required strings get safe
defaults. A render that cannot be repaired is dropped and replaced by an
error notice ("This result could not be displayed."); unknown part and
render types pass through. Stored parts and replayed events are normalized
on read, so older rows are repaired too. Problems are logged with the type
and a fixed problem code only.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>