Ask the host to bring the user to region — the reveal-class method of
UI_AS_APPS_SPEC §4.1's focus model (R3-243). On mobile that is the column
transition (the panel's carousel advances to the main pane); on desktop a focus
move. Use it when a tap in your panel produces something to look at in another
column, right after the postToRegion that sends it there:
onClick={() => { // a REAL user gesture voidpostToRegion('stage.conversation', { type:'select-conversation', id }); voidrevealRegion('stage.conversation'); }}
Call it synchronously inside a user-gesture handler. The host reads its own
transient user activation and refuses without one — an app flipping columns on a
timer is the attention-steal primitive §4.1 is written against. It reaches only
regions you already have a two-sided IPC edge to, and only within the active
activity, so it can neither jump the user into an unrelated surface nor pull
focus back to the caller's own column.
Resolves once the host has considered the request — deliberately NOT reporting
whether focus actually moved. Whether the user is moved is the host's call
(activation, rate limit, already-there), and an app that could observe the
refusal would be tempted to retry, which is the behaviour the gate exists to
stop. Rejects only on a genuine authorization failure (forbidden): no ipc
capability, or no declared edge to region.
Ask the host to bring the user to
region— thereveal-class method of UI_AS_APPS_SPEC §4.1's focus model (R3-243). On mobile that is the column transition (the panel's carousel advances to the main pane); on desktop a focus move. Use it when a tap in your panel produces something to look at in another column, right after thepostToRegionthat sends it there:Call it synchronously inside a user-gesture handler. The host reads its own transient user activation and refuses without one — an app flipping columns on a timer is the attention-steal primitive §4.1 is written against. It reaches only regions you already have a two-sided IPC edge to, and only within the active activity, so it can neither jump the user into an unrelated surface nor pull focus back to the caller's own column.
Resolves once the host has considered the request — deliberately NOT reporting whether focus actually moved. Whether the user is moved is the host's call (activation, rate limit, already-there), and an app that could observe the refusal would be tempted to retry, which is the behaviour the gate exists to stop. Rejects only on a genuine authorization failure (
forbidden): noipccapability, or no declared edge toregion.