Where: Course → "Turn editing on" → "+ Add a resource" → File
Do: Upload a PDF from your course materials.
Expect: After ~30 seconds the file is indexed into the retrieval store. No UI confirmation by design — verify by asking S240 a question only answered in that PDF (next step).
S240Tutor (the Socratic one)
Where: Floating Lao Shi button, bottom-right of any course page
Do: Ask a course question. Then ask "give me the answer to question 3" to test the impartiality wall.
Expect: A Socratic prompt back at you, a page-cited follow-up, a polite refusal on the homework question with refused_to_answer_directly=true in the audit log.
Where: Invisible — called internally by S240/S242/S244/S246/S247
Do: No direct test. Verified indirectly.
Expect: Every S240/S242 reply cites a specific PDF + page. No citation → S241 is not finding anything → re-check S243 indexing.
Where: Same Lao Shi chat button — short-form mode
Do: Ask "what does this term mean?" or "give me one example".
Expect: Shorter reply than S240, still cites the originating PDF + page. No drift to the general internet.
S244Design Guidance (teacher copilot)
Where: Course in editing mode → AI helper drawer at top of page (Moodle 4.5 courseassist placement)
Do: "Plan a 2-hour session on Topic Y."
Expect: Draft outline + rubric + sequencing, all cited from the course corpus. Teacher-in-the-loop: drafts only — nothing publishes without your sign-off.
Where: Live on the FastAPI backend; Moodle UI surface on the next-quarter roadmap
Do: POST recent activity + target role to the skills_coach endpoint on the XueDao API bridge.
Expect: One next-best-skill recommendation + Bloom level + effort hours + cited catalogue passages.
Where: Open a student short-answer submission → AI sparkles button in the editor (Moodle 4.5 editor placement)
Do: Select the response → "Grade against rubric".
Expect: score / band / Bloom level demonstrated / strengths / improvements / human_review_required. Try a deliberately borderline answer — the flag should flip to true.
Where: Course in editing mode → courseassist drawer → "Generate quiz" / "Draft lesson"
Do: "10-item Bloom-spread quiz on Topic Z, ~2 hours, advanced undergrad."
Expect: Lesson plan + 10 quiz items each cited to a source passage. If the corpus is thin, gap_flags fires honestly. Instructor-in-the-loop: drafts only.
Verify in two places: ai_manager → Statistics on the Moodle side, and app.clairvas.com → Audit log on the ClairVAS side. Both should show your calls; the audit log carries the policy flags (refused, human-review, gap).