Patch Changes
-
1d5bab1: Keep the chat and prompt composer visible while assistant-ui recovers from a transient render error.
-
1d5bab1: Stop cold-started processes from replaying the entire durable action-marker
history.seedVersionFromDbrewound the marker watermark to0so a marker
written just before boot still reached the first poll, but the replay filter is
updated_at > watermarkand the__action_change__table is one never-pruned
row per identity that has ever run a mutating action — so every boot re-emitted
all of it. On one production app that was 2,188 rows replayed ~32 times a
minute: 1,169 sync events/sec against ~1.7/sec of real traffic, and a 47 GB
sync_eventstable. The rewind is now bounded to a 60-second replay window,
which preserves its purpose, and the marker read is bounded by the same
watermark instead of selecting the whole table.Also enables
deterministicEventIdsfor the default sync state so concurrent
processes detecting the same external write collapse viaON CONFLICT (id) DO NOTHING, and keys the action-marker dedupe on each row's ownupdated_at
rather than the table-wide maximum. That mechanism defaulted off and was never
set anywhere, so everydedupeKeyin the poll path had been inert.manage-agent-enginenow classifiestestandget-app-defaultas reads
alongsidelist, so those calls no longer announce a change. -
1d5bab1: Fix MCP integration logos so every catalog entry uses a real mark and dark marks stay legible.
-
1d5bab1: Accept OAuth client metadata documents that advertise additional extension grant types, including Claude's JWT bearer grant, while preserving the server's authorization-code flow.
-
1d5bab1: Stop the chat client from durably aborting background runs that are still
working.The kill verdict was rendered against a
/runs/activesnapshot fetched
before the SSE attach that had just blocked for its whole duration, so any
progress that landed during the attach was invisible to the decision. Fleet
data: 23 of 24 client-watchdog kills hit runs that had made server-authoritative
progress within the previous 90 seconds. The client now takes a second reading
after the attach, and only on the path that would otherwise condemn the run —
the healthy path pays nothing.A failed or unparseable
/runs/activepoll no longer counts as "no active run".
Unreadable and absent were the same value, and the absent branch reached the
durable abort without consulting progress at all, so one flaky tick could end a
live turn.A model-stream retry the user waited through is now narrated instead of silently
wiping the transcript. Three 90-second retries used to blank the screen at 92s,
182s, and 272s with no explanation — the shape people report as "the chat froze".
Fast provider blips stay silent. -
1d5bab1: Add an opt-in database-pressure reading to
/_agent-native/health?pressure=1.
The route reports the threepg_stat_activitysignals that preceded the
2026-08-06 analytics outage — idle-in-transaction pileup, slow trivial queries,
and one query stampeding — so a scheduled fleet audit can watch them without
holding any production database credential of its own. A dialect or connection
that cannot answer reportsmeasured: falsewith a reason rather than a clean
zero, and pressure never changesreadyor the response status. -
1d5bab1: Preserve incomplete provider-corpus coverage when a paginated search stops at a page cap.
-
1d5bab1: Preserve OAuth authentication for legacy MCP endpoint configurations.
-
1d5bab1: Keep the magic-link onboarding form as the default view when outbound email is ready, while preserving explicit password sign-in fallbacks.
-
1d5bab1: Keep inline help affordances visually subordinate to the text they explain.
-
1d5bab1: Paginate long organization member lists in settings.
-
1d5bab1: Add shared production configuration diagnostics, deploy guidance, and an
in-app warning chip with a copyable AI remediation prompt. Agent-Native app
configuration now supports deep-merged runtime requirements and typed
agent-native.tsaliases alongsideagent-native.json. -
1d5bab1: Fix the
sync_eventsretention prune, which planned as a sequential scan of
the entire table. It now deletes by the already-indexedversioncolumn
(monotonic epoch milliseconds) in bounded batches, oldest first, and reports a
failure instead of swallowing it. On one production app the old statement was
scanning a 47 GB table roughly 60 times concurrently, and a prune that never
succeeded was indistinguishable from one with nothing to do. -
1d5bab1: Polish streaming tool-call motion so new calls fade in, retained rows slide with
the stack, and older calls visibly settle into the collapsed tool summary. -
1d5bab1: Add a keyboard-accessible 75% chat drawer while keeping the app layout stable.