ENGLISH·COURSE API
    Preparing search index...
    • Whether a lesson counts as done.

      Parameters

      • isMarkedComplete: {
            isMarkedComplete: boolean;
            positionSeconds: number | null;
            durationSeconds: number;
        }

        What the progress tracker stored for this lesson

      Returns boolean

      Whether the lesson should be shown as complete

      Completion has two producers — the Mark as complete button and playback crossing finishThresholdSeconds — and this is where they are combined. Every surface that shows completion asks this one question, which is what stops a row, an outline entry and a module card from disagreeing about the same lesson.

      Deriving from the saved position, rather than trusting the stored mark alone, is also what lights up positions saved before the finish rule existed: no migration, no backfill write.