ENGLISH·COURSE API
    Preparing search index...
    • Returns true when the saved positionSeconds is meaningful enough to resume from (not noise, not "basically finished"). Both bounds must hold.

      Parameters

      • positionSeconds: number | null

        The stored position, or null when nothing is saved

      • durationSeconds: number

        The lesson's length; <= 0 is treated as unknown and never resumable

      Returns positionSeconds is number

      Whether the resume dialog should be offered for this position

      This is a presentation policy, not a domain invariant: it decides when it is worth offering a resume, and deliberately lives outside the hexagon. Range and finiteness of a persisted position are the PlaybackPosition value object's job.

      It lives apart from any component so the player can gate on it without importing modal code — see openspec/changes/resume-dialog-shadcn-primitive/design.md §D4.

      isPositionResumable(180, 600); // true  — three minutes into a ten-minute lesson
      isPositionResumable(5, 600); // false — barely started
      isPositionResumable(595, 600); // false — effectively finished