the loaded session, or null when the id is malformed, the row does not exist, or the
caller cannot read it. Failure to read the conversation yields ConversationExternalID: null,
which AuthorizeSessionAccess then treats as "no scope to match" (refused for a scoped caller).
Loads a session (and its conversation's scope id) under
contextUser's identity.Loading as the caller — rather than as a privileged user — means the entity layer's row-level security (
Widget Guest: Own Agent Sessions,UI: Own Agent Sessions) is the FIRST gate; the explicit AuthorizeSessionAccess check that follows is defence in depth.