Scope
All AI-powered features: Aristotle course tutor, AI auto-grading for exercises/exams, voice exercises, and video exercises. These require an OpenAI API key with credits in .env.local.
Prerequisites
OPENAI_API_KEY set and funded in .env.local
- Course with
course_ai_tutors row: enabled = true
- Course must have lessons, exercises, exams
Personas
| Persona |
Email |
Role |
| Student |
student@e2etest.com |
student (Default School) |
| Teacher |
owner@e2etest.com |
admin/teacher (Default School) |
AI Components
Aristotle Tutor (/dashboard/student/courses/[courseId]/lessons/[lessonId])
AI Exercise Grading (/dashboard/student/courses/[courseId]/exercises/[exerciseId])
Exercise types that use AI grading:
Voice Exercises (plan-gated: pro+)
Video Exercises (new feature — VideoExercise component)
AI Exam Grading (/dashboard/teacher/courses/[courseId]/exams/[examId]/submissions/[submissionId])
Known Issues (pre-confirmed fixed)
exams.passing_score column does not exist — all pass logic uses hardcoded 70% threshold
lesson_completions has no tenant_id — removed from Aristotle route query
exercise_completions has no tenant_id — removed from Aristotle route query
Definition of Done
- Aristotle streams responses with correct course context
- AI grading returns score + feedback for all exercise types
- XP awarded on completion
- Teacher override saves and reflects to student
- All AI calls use model from
AI_MODELS config (not hardcoded)
Scope
All AI-powered features: Aristotle course tutor, AI auto-grading for exercises/exams, voice exercises, and video exercises. These require an OpenAI API key with credits in
.env.local.Prerequisites
OPENAI_API_KEYset and funded in.env.localcourse_ai_tutorsrow:enabled = truePersonas
student@e2etest.comowner@e2etest.comAI Components
Aristotle Tutor (
/dashboard/student/courses/[courseId]/lessons/[lessonId])course_ai_tutors.enabled = truepassing_scorecolumn — that doesn't exist)aristotle_sessionstablearistotle_messagestable (both user + assistant)course_ai_tutors.enabled = falseAI Exercise Grading (
/dashboard/student/courses/[courseId]/exercises/[exerciseId])Exercise types that use AI grading:
free_text— open-ended text answervoice— audio transcription + evaluationvideo— camera recording + evaluationSubmit free-text answer → AI evaluates, returns score + feedback
Feedback rendered as markdown in results view
Score saved to
exercise_completionstableXP awarded after submission (check
xp_transactionsrow created)Resubmission: new
exercise_completionsrow created (not overwrite)Teacher can view AI feedback in teacher submissions view
Voice Exercises (plan-gated:
pro+)free/starterplanpro+ plan: microphone permission requestedVideo Exercises (new feature — VideoExercise component)
pro+)AI Exam Grading (
/dashboard/teacher/courses/[courseId]/exams/[examId]/submissions/[submissionId])exam_submissionsrecordKnown Issues (pre-confirmed fixed)
exams.passing_scorecolumn does not exist — all pass logic uses hardcoded 70% thresholdlesson_completionshas notenant_id— removed from Aristotle route queryexercise_completionshas notenant_id— removed from Aristotle route queryDefinition of Done
AI_MODELSconfig (not hardcoded)