A referenced ReadSession walked backward through the whole transcript and scanned it from the start, which starved the sidebar poll into a flashing load-failure banner. Bound that read and keep a failed list refresh off the sidebar.
The provider editor dropped the session model from a value whose inferred type had no index signature, and the trace detail stopped reading the session revision it still stored.
Startup metadata could recreate the source placeholder after the CLI had written the conversation into its worktree. Open and update the file that already contains the conversation.
A Chinese @ query scanned the whole session table twice and then ran a body search, so every other request queued behind it. Cap that scan, skip the body lookup once the budget is spent, and stream session clears and trims instead of holding the transcript in memory.
The sidebar's "using standard history" notice flickered because a busy
passive checkpoint marked the index degraded, and the next reconciliation
cleared it again, bouncing the session list between the index and a full
JSONL scan. Incremental reconciliation now keeps serving a snapshot that
already has committed rows, and a transient SQLITE_BUSY no longer changes
the public state.
A zero timeout let a session poll WaitSessions in a tight loop. Short requests now wait the 10s minimum and report the clamp, while a newer revision still returns immediately.
The add-model editor was spreading the whole managed settings file, so the model picker's selected default (model / modelContext) showed up as if it belonged to the provider being added and was written back on save.
The bounded history window stitched pages behind the scrollbar and dropped
rows from the far end, which made big sessions flicker and lag. Load the
transcript in one byte-bounded response, keep it as a single mounted array,
and remember disclosure choices across virtualized row remounts.
A preset used to lock its protocol, so a dual-protocol endpoint could not be pointed at the other format. Keep the preset URL and warn when the chosen protocol no longer matches it.
Drop the collapsible collaboration panel and show cross-session deliveries as ordinary user bubbles with a source label, while created sessions carry titles immediately.
Grok 4.7 shipped with a faster variant (grok-4.7-build-fast), and the
gateway's /v1/models feed no longer advertises grok-composer-2.5-fast.
Resolving reasoning effort against the bundled catalog alone gave a model
newer than this build no effort at all, and the request transform reads
that as a model which rejects the parameter and strips the whole reasoning
block. Selecting xhigh on 4.7 therefore ran at the upstream default, while
the picker and the server-side validation both accepted the choice. Effort
now resolves against the live catalog first, and a model neither catalog
describes keeps the requested effort instead of losing it.
The runtime catalog pointer moves into the dependency-free catalog module
so the request transform can read it without an import cycle back through
fetch.ts.
Both bundled catalogs gain 4.7 and its fast variant and default to
grok-4.7, and the retired composer model migrates pinned sessions to that
default rather than sending an ID the gateway no longer serves.
The SubAgent and Team member run header carried no model, and the launch
parameters cannot supply one: the Agent tool input records an explicit
`model` override only and is empty when the run inherits, while the
runtime discards the model it resolved for an inheriting run.
Assistant messages do carry whatever the provider actually served, so the
header reads the newest transcript turn that reported one and renders it
next to the status badge. A run that has not answered yet shows no badge
rather than guessing the parent's model.