Function
The stored position, or null when nothing is saved
The lesson's length; <= 0 is treated as unknown
and never resumable
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.
Returns true when the saved
positionSecondsis meaningful enough to resume from (not noise, not "basically finished"). Both bounds must hold.