• Dispatch a chat-card action — either a button click or an edit-action link click — to the given logic. Reads btn.dataset.action, builds an sohl.entity.action.SohlActionContext, then dispatches through logic.actions (by name, executor id, or title) before falling back to a direct method call on the logic. Warns via sohl.log.warn when no handler is found.

    Pure dispatch path — callers are responsible for the ownership check before calling this function.

    An action card (see sohl.document.chat.buildActionCard) marks its buttons with data-skip-dialog="true": because the card already carries the action's parameters in data-scope, the click runs the action with sohl.entity.action.SohlActionContext.skipDialog set, so the action proceeds without prompting. A human invoking the same action from a sheet (no data-skip-dialog) gets its dialog instead — the card and the sheet call the same self-sufficient action.

    Parameters

    • logic: SohlLogic

      The logic instance that should handle the action.

    • btn: HTMLElement

      The clicked element (button or anchor); dataset.action names the action to dispatch.

    Returns Promise<void>