ENGLISH·COURSE API
    Preparing search index...

    ProgressTracker over the lesson_completion table, for one learner.

    A row is the mark; its absence is "not complete". Both writers are idempotent, as the port requires: marking ignores an existing row, and un-marking a lesson that was never marked deletes nothing.

    const progress = new TursoProgressTracker(database, session.user.id);
    await progress.markComplete(lessonId);

    Implements