ENGLISH·COURSE API
    Preparing search index...
    PlaybackPosition: ZodObject<
        {
            lessonId: $ZodBranded<ZodUUID, "LessonId", "out">;
            seconds: ZodNumber;
        },
        $strip,
    > = ...

    The playback position for a single lesson. seconds is non-negative and finite — NaN and Infinity are rejected at the boundary so adapters never persist nonsense values.

    The port (PlaybackPositionRepository) keeps its raw-primitive signature because the adapter callsites are 1:1 with localStorage.setItem. The value object exists to make the use case signature self-documenting and to validate inputs that flow through the use case boundary.