A validated, canonical user intent sent by the editor hook.
Intents describe user actions, not accepted state changes. The parent LiveView remains responsible for authorization, domain validation, and producing the next authoritative scene revision.
@type t() :: %PhoenixDnd.Intent{ base_revision: non_neg_integer(), client_id: String.t(), gesture_id: String.t() | nil, intent_id: String.t(), payload: map(), phase: String.t(), type: String.t(), version: 1 }
@spec parse(map()) :: {:ok, t()} | {:error, String.t()}
@spec parse!(map()) :: t()