SPB Git forge

spb/immbot-ai

Public
1commits 1branches 0releases
1.5 MBsize
maindefault branch
19 days agolast push
TypeScript 98.3% CSS 0.9% Shell 0.7%
3.0 KB

# Tests et vérification — Immbot AI

# Tests unitaires et d'intégration (vitest)

bash
pnpm test          # 34 tests, BD SQLite en mémoire (DATABASE_PATH=:memory:)
Fichier Couvre
tests/sm2.test.ts Répétition espacée : progression 1j/6j/EF, échecs, bornes
tests/latex.test.ts Parseur beamer (numérotation PDF, sections, boîtes, tableaux, maths), detexify, découpage
tests/citations.test.ts Contrat de citations : résolution, neutralisation des balises inventées, groupes
tests/auth.test.ts bcrypt, politique de mot de passe (refus d'admin123), jetons de session hachés, révocation, limitation de débit
tests/learning.test.ts Moteur de maîtrise (montée/descente, poids des tâches, décroissance bornée, niveaux), quiz adaptatif (difficulté de départ/escalier, correction mcq/calc±1 %/mots-clés), plan d'étude (répartition, entrelacement, examens blancs), isolation des cours

# Évaluation RAG (hors-ligne, sans LLM)

bash
pnpm evaluate      # → evaluation/rag-evaluation.md

Jeux dorés evaluation/imm1003-test-set.json / imm1033-test-set.json (12 questions/cours + questions hors corpus + sonde d'isolation). Critères de réussite : rappel ≥ 80 % (mesuré : 100 %), refus corrects hors corpus, zéro fuite inter-cours.

# Vérification complète

bash
./scripts/verify.sh   # tsc --noEmit + vitest + évaluation RAG

# Tests de sécurité couverts

  • Élévation/contournement : routes admin revérifient le rôle dans chaque handler ; l'accès aux citations vérifie l'espace (instructor-private refusé aux étudiants, espaces étudiants refusés aux non-propriétaires) ; les routes cours vérifient enrollments.
  • Sessions : jeton jamais stocké en clair (test), révocation (test), rate-limit (test).
  • Uploads : type MIME vérifié par signature magique, taille bornée, chemins générés côté serveur.
  • Citations : impossibilité de citer un fragment hors du contexte servi (test).
  • SQL : uniquement des requêtes préparées (aucune interpolation).

# Parcours manuel de recette (E2E)

  1. Inscription étudiante (avec code si configuré) → sélection des cours.
  2. Connexion admin/admin123 → changement forcé → bannière disparaît après désactivation.
  3. Chat IMM1003 « Cours uniquement » : question sur la valeur marchande → citations S1… cliquables vers Séance 4 ; question hors sujet → refus honnête.
  4. Téléverser une image avec un modèle non-vision → erreur claire ; avec un modèle vision → analyse prudente.
  5. Flashcards : révision (raccourcis 1-4) → la carte revient selon SM-2.
  6. Quiz adaptatif : 2 bonnes réponses → difficulté monte ; erreur → cahier d'erreurs alimenté.
  7. Examen blanc chronométré → correction par concept → tentative comparée.
  8. Plan d'étude : génération → items cochables → recommandation « Plan du jour ».
  9. Admin : désactiver un modèle → il disparaît du sélecteur étudiant et est refusé côté serveur.