An abandoned cold resume left the composer holding a manual model with an
empty provider in localStorage: the preview paint persisted both values,
and only a completed session.resume repaired them. Every new chat then
shipped the model alone, the gateway paired it with the profile provider,
and the coherence gate rejected the pair - the chat died on arrival and
the poisoned row survived restarts.
Paint the preview with the transient setters (the session.info heartbeat
path already does), and reseed a manual pick whose provider is empty from
the profile default so installs already carrying the stranded row recover
on the next launch.