ADR 005 — meta.profile = null assumé (pas d'injection manuelle)¶
Status¶
Acté — Lot 3 (2026-06-02).
Context¶
Le LRC charge à la demande trois profils sémantiques DASES depuis les dépôts
gaia-x-dases/xapi-{lms,assessment,forum}. Chaque profil expose un ensemble de
templates (verb + activity type + règles de présence) qui décrivent des situations
pédagogiques canoniques.
Quand un statement xAPI matche un template, le LRC enrichit la sortie avec
meta.profile: "<group>.<template>" (par exemple assessment.completed).
Inspection des templates disponibles au SHA pinné :
- assessment (5 templates) :
started,terminated,initialized,completed,answered-question. Verbes attendus :start,terminated,initialized,completed,answered. - lms (≥ 5 templates) :
accessed-page,accessed-file,registered-course, etc. Verbes :accessed,registered,uploaded,downloaded...
Notre dataset comporte trois familles de ressources : exercices, quiz et leçons. Il faut les traiter séparément :
- Quiz et exercices notés sont sémantiquement des assessments (objet évalué, score,
verdict). Ils sont mappables sur
assessment.completed: il suffit de poserobject.definition.type = "http://adlnet.gov/expapi/activities/assessment"et d'émettreverb = completedavecresult.success(booléen) +result.score. C'est la voie sémantiquement propre prévue par DASES. - Les leçons ne sont pas des assessments. Aucun template DASES ne les couvre proprement à ce SHA.
Pour les quiz/exercices, deux raisons distinctes ferment la voie assessment.completed
dans notre démo — ce sont des choix et un obstacle, pas une impossibilité
sémantique :
- Choix de modélisation : on émet directement les verbes ADL
passed/failedplutôt quecompleted. Pour un verdict d'exercice, c'est plus expressif (le verbe porte le résultat ; pas besoin de lireresult.success) et c'est la pratique xAPI courante. Conséquence : aucun templateassessmentne matche, puisque ses verbes sontstart/terminated/completed/answered. - Obstacle technique : la voie
assessment.completedpropre exigeresult.success: true/false. Or le LRC à ce SHA mal-interprètevalue: true/falsedans unswitchdu mapping (cf. ADR 006) — on a dû retirer la règleresult.successdu mapping pour que la conversion passe. Tant que ce bug n'est pas corrigé, la voie propre n'est pas opérationnellement disponible côté/convert_custom.
Pour les leçons, le constat reste : pas de template DASES dédié à ce SHA.
Tentation : injecter un profile: dans le mapping pour forcer le match sur les
quiz/exercices, malgré le mismatch verbe. Rejetée : ce serait étiqueter un statement
comme conforme à un template qu'il ne respecte pas — le consommateur en aval (autre
provider, LRS) serait trompé.
Decision¶
On n'injecte pas de profile: dans le mapping YAML. meta.profile reste null
dans la sortie LRC pour toutes nos traces.
Ce null n'est pas une impossibilité sémantique : pour les quiz/exercices, la voie
assessment.completed est techniquement légitime — elle est juste fermée par notre
choix de modélisation passed/failed (plus expressif) et par le bug LRC sur
result.success (ADR 006). Pour les leçons,
DASES n'a effectivement pas de template adapté — c'est une remontée utile pour
l'écosystème Prometheus-X.
Cet état est documenté dans la vitrine ("limite assumée"), dans le runbook LRC
(docs/lrc_runbook.md), et ici.
Consequences¶
Positives¶
- Honnêteté sémantique : on ne prétend pas qu'un statement est conforme à un template DASES quand il ne l'est pas. Un consommateur (autre provider, LRS, IA en aval) ne sera pas trompé.
- Cohérence avec l'esprit DASES : la valeur d'un profil sémantique vient précisément de sa garantie de structure. Injecter à la main ferait perdre cette garantie.
- Observation pédagogiquement intéressante : le DASES n'a pas de templates pour le scénario "exercice scolaire avec verdict passed/failed". C'est un retour utile pour l'écosystème Prometheus-X.
Compromis¶
- L'évaluateur voit
meta.profile: nulldans la sortie LRC de la démo. Atténué par la doc qui anticipe et explique pourquoi. - L'enrichissement automatique du LRC (
Profiler.enrich_trace) n'est pas exercé. Ce n'est pas grave pour notre démo (on enrichit nous-mêmes avec nos compétences ESCO), mais c'est une feature LRC non démontrée.
Limites assumées¶
- À revisiter sur deux fronts indépendants :
- Si on re-modélise les quiz/exercices en
assessment.completed(object.type = assessment,verb = completed,result.success+result.score) ET que le bug LRC surresult.successest corrigé en amont, on pourra alors injecterprofile: assessment.completeddans le mapping YAML, etmeta.profilene sera plusnullpour cette famille. - Si DASES propose un jour un template dédié au verdict
exercise-passed/exercise-failed(qui correspondrait mieux à notre choix de modélisation actuel), on pourra mapper directement sans renoncer àpassed/failed.
- Si on re-modélise les quiz/exercices en
- Pas testé avec le profil
forum: le scénario maths primaire ne génère pas d'événements sociaux.