SessionPresentationLifecycleOutput

Envelope for a finished session's presentation lifecycle records.

  • caliperSessionId
    Type: string
    required
  • notificationContractVersion
    Type: integer | null
    required

    Pinned notification contract version from insights_session; null when no session row exists.

  • presentations
    Type: array object[] · PresentationLifecycleOutput[]
    required

    Every presentation for the session, ordered by offeredAt ascending, then occurrenceNumber, then id. Unpaginated; each row carries a multi-kilobyte frozen render payload, so long sessions approach Lambda's 6 MB response ceiling.

    One finished-session popup occurrence with lifecycle timestamps, outcomes, and the frozen render payload. Does not expose sourceHorizonSnapshot. Disputed rows may carry nullable student free text on dispute.submittedText.

    • acknowledgedAt
      Type: string | null Format: date-time
      required

      the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

    • actionReceivedAt
      Type: string | null Format: date-time
      required

      the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

    • clientActedAt
      Type: string | null Format: date-time
      required

      the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

    • clientDisplayedAt
      Type: string | null Format: date-time
      required

      the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

    • displayReceivedAt
      Type: string | null Format: date-time
      required

      the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

    • dispute
      Type: object · PresentationDisputeOutcomenullable
      required

      Dispute outcome for one presentation occurrence. Carries selected-option identity (id/ordinal/label, matching SelectedDisputeOptionSnapshotV1 and disputeOptions[] on the render payload) plus nullable free-text submittedText from selectedOptionSnapshot.submittedText (Other / allowsText options). Does not read legacy signal-keyed insights_dispute.reason rows; those stay in unattributableDisputeCount only.

    • id
      Type: string Format: uuid
      required
    • incidentId
      Type: string Format: uuid
      required
    • incidentResolutionReason
      Type: string | null enum
      required
      values
      • EVIDENCE_ENDED
      • STUDENT_DISPUTED
      • ASSESSMENT_ENDED
      • SESSION_ENDED
      • TERMINAL_SUSPENSION
    • incidentStatus
      Type: string | null enum
      required
      values
      • OPEN
      • RESOLVED
      • DISPUTED
      • CANCELLED
      • TERMINATED
    • insightId
      Type: string | null Format: uuid
      required
    • occurrenceNumber
      Type: integer
      required

      Integer numbers.

    • offeredAt
      Type: string Format: date-time
      required

      the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

    • pinnedWarningBudget
      Type: integer | null
      required

      Integer numbers.

    • policyMode
      Type: string enum
      required
      values
      • NOTIFY
      • ENFORCE
    • presentationStatus
      Type: string enum
      required
      values
      • OFFERED
      • DISPLAYED
      • ACKNOWLEDGED
      • DISPUTED
      • SUSPENDED
      • SUSPENSION_ACKNOWLEDGED
      • SUPERSEDED
    • presentationVariant
      Type: string enum
      required
      values
      • INFO
      • WARNING
      • TERMINAL
    • renderPayload
      required

      Fully resolved copy for the INSIGHT surface, frozen when the presentation was offered. Clients render these strings verbatim and never author copy.

      • acknowledgementConfirmationLabel
        Type: string
        required
      • body
        Type: string | null
        required
      • bodyAddendum
        Type: string | null
        required
      • canDispute
        Type: boolean
        required
      • canSubmitFeedback
        Type: boolean
        required
      • clientEffect
        Type: string enum
        required
        values
        • NONE
        • RETURN_FULL_SCREEN_AFTER_ACTION
      • consequenceText
        Type: string | null
        required
      • contextLabel
        Type: string
        required
      • disputeActionLabel
        Type: string | null
        required
      • disputeConfirmationLabel
        Type: string | null
        required
      • disputeMaxLength
        Type: integer | null
        required

        Integer numbers.

      • disputeOptions
        Type: array object[] · DisputeOption[]
        required

        One dispute choice frozen onto the presentation. The client may submit only an id listed here, and only with text the option permits.

      • disputePlaceholder
        Type: string | null
        required
      • disputeRequiredText
        Type: string | null
        required
      • insightCoaching
        Type: string
        required
      • insightFullText
        Type: string | null
        required
      • insightMessage
        Type: string
        required
      • insightName
        Type: string
        required
      • insightTimestampEnd
        Type: string | null Format: date-time
        required

        the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

      • insightTimestampStart
        Type: string Format: date-time
        required

        the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z

      • messageVersion
        Type: integer
        required

        Integer numbers.

      • numberWarnings
        Type: integer | null
        required

        Integer numbers.

      • pillLabel
        Type: string
        required
      • primaryAction
        enum
        const:  
        ACKNOWLEDGE
        required
        values
        • ACKNOWLEDGE
      • primaryActionLabel
        Type: string
        required
      • remediationPreview
        Type: string enum
        required
        values
        • NONE
        • LIVE_WEBCAM
      • remediationPreviewAriaLabel
        Type: string | null
        required
      • remediationPreviewUnavailableText
        Type: string | null
        required
      • requestedLocale
        Type: string
        required
      • resolvedLocale
        Type: string
        required
      • ruleDisclosure
        Type: object · RuleDisclosure
        required

        Collapsed rule explanation rendered beneath the notification body.

      • schemaVersion
        Type: integer
        required

        Integer numbers.

      • surfaceKind
        enum
        const:  
        INSIGHT
        required
        values
        • INSIGHT
      • thumbsDownAriaLabel
        Type: string | null
        required
      • thumbsUpAriaLabel
        Type: string | null
        required
      • title
        Type: string
        required
      • violationTimeLabel
        Type: string | null
        required
      • warningNumber
        Type: integer | null
        required

        Integer numbers.

      • warningProgressSegments
        Type: array object[] · WarningProgressSegment[]
        required

        One segment of the warning strip. warningBudget is the terminal threshold: the strip carries warningBudget - 1 WARNING entries plus one TERMINAL (a single TERMINAL when the budget allows no nonterminal warning). WARNING ordinals are contiguous 1..n; TERMINAL ordinal is null.

    • renderPayloadSchemaVersion
      Type: integer
      required

      Integer numbers.

    • revision
      Type: integer
      required

      Integer numbers.

    • ruleSlug
      Type: string
      required
    • strikeAccrued
      Type: boolean
      required
    • strikeAccruedAt
      Type: string | null Format: date-time
      required

      Instant of the WARNING_ACCRUED enforcement event. Derived from occurred_at, a UTC-naive timestamp column; production runtimes use TZ=UTC.

    • strikeReleased
      Type: boolean
      required

      Whether a WARNING_RELEASED enforcement event exists for this presentation. Distinct from dispute.releasedStrike, which is the dispute row's own strike_released flag.

    • strikeReleasedAt
      Type: string | null Format: date-time
      required

      Instant of the WARNING_RELEASED enforcement event. Derived from occurred_at, a UTC-naive timestamp column; production runtimes use TZ=UTC.

    • surfaceKind
      Type: string enum
      required
      values
      • INSIGHT
      • TEST_SUSPENDED
    • terminal
      Type: object · PresentationTerminalOutcomenullable
      required

      Lockout and forced-end facts for a TERMINAL presentation occurrence.

  • unattributableDisputeCount
    Type: integer
    min:  
    0
    required

    Count of session disputes that have no presentation_id (legacy signal-keyed rows). These are omitted from presentations[].dispute, so dispute: null on a presentation means "no presentation-keyed dispute", not "the student never disputed anything in this session".