Discriminated union keyed by type. An optional
spec.requestId pre-seeds the requestId used for this prompt's
focus-stack entry instead of generating a fresh one — lets a caller that
needs to gate an ancillary, non-promptFor-routed element (e.g. a
passive canvas preview banner shown alongside this prompt) share the same
requestId so both participate in the same focused-prompt slot. Stripped
out of the enriched spec before dispatch/render so renderers never see it
as a real spec field.
OptionalactionId: string = null
The combat tracker action id this prompt is
being raised on behalf of, when known (swing/trigger execution always
has one; non-action prompts like compelCheck/rest don't and omit it).
Stored on the resulting pending-request/active-remote-prompt registry
entry so cancelPendingRequestForAction can later target just this
prompt for cancellation without affecting any other in-flight prompt —
see the GM "Mark Resolved" escape hatch (BodyMindSoulCombat#markActionResolved
in module/documents/combat.mjs).
Route a prompt to the user who should see it for the given actor.
Delegate (getDelegateUser(actor)) is the target when active and distinct from the lead GM. When no delegate is available, or the delegate is the lead GM, the lead GM handles the prompt.