fix(web): honour browser defaults on the paths that were skipping them

Three ways the configured browser defaults were not reaching a tab:

Restore defaults skipped them entirely. They are unified settings like every
other preference on that button, so they now take part in both the dirty
labels and the reset. The viewport is a tagged union, so comparing it needs
structural equality — identity would have reported a freshly decoded copy of
the default as changed.

`browserAutoShowFloatingPreview: false` was ignored for `preview_open`.
`normalizePreviewOpenInput` filled an omitted `open` with `true` on the server,
so by the time the renderer asked "did the agent state a preference?" the
answer was always yes. The server now leaves unstated visibility unstated,
which is the only thing it can honestly say — the preference is desktop-local
and unreadable from there.

A preview opened before client settings hydrated was born at the schema
defaults and never corrected. The three imperative open paths now await
hydration, which costs nothing: they were already async.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
6489255f56Julius Marminge committed on 8/16/2026, 10:43:53 PMparentbb0492d
12 files changedLine totals unavailable