# Native host client boundaries

Use `default-features = false, features = ["host-client"]` when a native viewer
consumes a session host but owns no listener. This tier exposes
`UiSessionIsolation` and `resolve_session_mount`, and adds URL parsing rather
than an HTTP stack, async runtime, cross-process registry or browser launcher.
The default `session` tier includes it too.

Deserialize the host's `isolation` value into `UiSessionIsolation`. Resolve
each live card's `proxy_url_secret` against the authenticated host URL with
`resolve_session_mount`. Refusal is `None`; do not substitute the original
address or open a different origin as a fallback. The result remains a
credential, so keep it out of ordinary lists, logs and diagnostics.

The shared validator checks:

- `opaque-origin`: the same host, port and scheme, with a `/s/<credential>/` path.
- `own-origin`: one `s-<credential>` label below the host, the same port/scheme,
  and the origin's root path.
- `port-origin`: the same host on a distinct explicit HTTP port and a
  `/<credential>/` path.

Only HTTP and HTTPS host URLs are accepted. All shapes refuse URL userinfo,
queries and fragments on the host and mount. Credential syntax is
checked rather than accepted as an arbitrary path. This is addressing
validation, not authentication or a replacement for attention/reopen handling.

A native viewer using `port-origin` must still create one independent
nonpersistent browser data store for each mounted session. Cookies are scoped
by host rather than port; separate ports alone cannot provide that boundary.
Opening a replacement mount creates a fresh store. Leaving the view stops its
attention and discards its painted content; it does not end the provider.

Native content zoom belongs to the browser engine's page-zoom API. Do not
rewrite provider CSS/JavaScript, scale a screenshot or alter CSP to implement
host controls. Domain actions, byte bodies and change notifications continue
through the same session runtime in every delivery shape.
