Repository navigation
11 roadmap
Public : tous les profils. Les tableaux de bugs et de dette technique s'adressent aux développeurs.
La plateforme est utilisable en pilote contrôlé (10 à 50 stagiaires, 3 à 5 formateurs, contexte associatif ou ateliers numériques). Le build Vite réussit. Les corrections de sécurité et de santé applicative S3 à S9 (voir tableau ci-dessous, B0-B5 et B7) ont été appliquées le 5 juillet 2026, et les points restants de l'audit initial (B6, gap StagiaireModuleDetail/LectureController) ont été corrigés le 14 juillet 2026 (voir Audit du 14 juillet 2026) : suite de tests complète verte (268 tests).
Depuis l'audit initial, le module builder formateur a évolué vers un éditeur de plan continu :
- plan chapitres/leçons en React + Tiptap ;
- page séparée pour éditer le contenu riche d'une leçon ;
- renommage autosauvegardé, déplacement inter-chapitres et promotion d'une leçon vide en chapitre ;
- duplication de modules catalogue avec conservation des leçons SCORM/slides verrouillées côté contenu.
La segmentation interne a démarré avec app/Domains/ModulesFormateur et app/Domains/Learners : le module builder garde l'orchestration HTTP, tandis que les actions métier (noms de classes en français : CreerModule, CreerChapitre, CreerLecon, ModifierLecon, ReordonnerChapitres, ReordonnerLecons, DeplacerLecon, PromouvoirLeconEnChapitre, TeleverserImageModule, TeleverserVideoModule, TeleverserScormModule, ModifierOptionsModule, AssignerGroupesModule, DupliquerModuleCatalogue) portent la création, duplication, réordonnancement, déplacement, promotion, médias, options et assignation aux groupes. Le contrôleur stagiaire délègue désormais le calcul de progression des modules à LearnerModuleProgress.
| # | Bug | Fichier | Impact immédiat |
|---|---|---|---|
| B0 | ✅ Corrigé 5/07/2026 — /inscription appelait UserController::Register() absent |
routes/web.php |
Redirection 301 vers /inscription-formateur
|
| B1 | ✅ Corrigé 5/07/2026 — Connexion par code sans throttling |
routes/web.php, AppServiceProvider
|
Rate limiter connexion-code (10/min/IP) |
| B2 | ✅ Corrigé 5/07/2026 — LessonFeedbackController::store() redirigeait vers module.lesson, route inexistante |
app/Http/Controllers/LessonFeedbackController.php |
redirect()->back() |
| B3 | ✅ Corrigé 5/07/2026, gap comblé 14/07/2026 — Module::isVisibleTo() ne vérifiait pas l'appartenance groupe |
app/Models/Module.php |
Vérification via User::aAccesAuModule() / Group::scopeAccessibleByTrainer(). Frontend\LectureController appelait déjà isVisibleTo() depuis le 8/07 (assertCanViewLecture()) ; StagiaireController::StagiaireModuleDetail() ne l'appelait toujours pas — corrigé le 14/07/2026 |
| B4 | ✅ Corrigé 5/07/2026 — SCORMController écrit last_session_time, colonne absente de scorm_scores
|
app/Http/Controllers/SCORMController.php |
Migration ajoutant la colonne |
| B5 | ✅ Corrigé 5/07/2026 — POST /scorm/save-progress ne vérifiait pas l'appartenance à la leçon |
routes/scorm.php, SCORMController
|
aAccesAuModule() + middleware auth, même garde sur save-block-progress et evaluation-progress
|
| B6 | ✅ Corrigé 14/07/2026 — StoreModuleRequest / StoreGroupeRequest retournaient authorize() = false
|
app/Http/Requests/ |
authorize() retourne désormais true, conforme à la convention des autres FormRequests du projet (autorisation réelle déléguée au middleware de route) |
| B7 | ✅ Corrigé 5/07/2026 — Upload image builder : le test attendait path, le contrôleur retourne media_id/url
|
ModuleBuilderController, ModuleBuilderTest
|
Test aligné sur le contrat Media Library réellement utilisé par le frontend |
| Élément | Localisation | Gravité |
|---|---|---|
attempts_count SCORM jamais incrémenté |
SCORMController.php |
Moyenne |
scorm_interactions non alimenté pour les leçons |
SCORMController::saveProgress() |
Haute — métriques analytiques vides |
Group sans SoftDeletes
|
app/Models/Group.php |
Moyenne — données orphelines |
Stagiaire multi-groupe — .first() uniquement |
StagiaireController.php:244 |
Haute — modules masqués |
ModuleController 1185 lignes |
Backend/ModuleController.php |
Maintenance difficile |
StagiaireController 794 lignes |
StagiaireController.php |
Encore volumineux, mais progression module extraite |
Une comparaison du code sur main (85 contrôleurs, 61 modèles, 411 routes) avec le contenu réel du wiki a fait apparaître onze fonctionnalités déjà présentes dans le code mais absentes ou sous-documentées dans le wiki. Suivi aussi comme tâches dans le Kanban de pilotage interne (projet « Wiki — combler les trous de documentation », colonne À faire).
- Documenter les référentiels de compétences (
SkillReferential→SkillDomain→Skill, CRUD complet sous/admin/referentiels/*) — corriger au passage le glossaire, qui dit à tort « en cours d'implémentation » - Documenter le système de badges (
Badgerelié àCompetencyviabadge_competency) — préciser que le catalogue existe déjà, seule l'attribution automatique à un utilisateur manque - Documenter la messagerie formateur → stagiaire (
FormateurStagiaireController, modèleFormateurMessage, notification et/ou email) - Documenter le pilotage interne (Kanban admin :
PilotProject,PilotTask, commentaires, abonnements, notifications) - Documenter le dashboard qualité parcours formateur module 2 (
TrainerPathQualityController,TrainerPathActivityAttempt) - Documenter la participation publique anonyme aux outils live (
/oneduc/mot,/sondage,/echelle,/questions,/roue— sans compte ni connexion) et croiser avec la page Sécurité pour vérifier le throttling - Documenter le vote sur le mur de questions (
QuestionWallVote) - Documenter les questionnaires de fin de module et les activités notées du parcours formateur (
TrainerModuleQuestionnaireSubmission, mailModuleQuestionnaireSubmitted) - Documenter le système de notifications et les endpoints
notification-status(Live Quiz, Mur de questions, Tableau blanc côté stagiaire) - Documenter le formulaire de contact (
ContactController, mailsContactConfirmation/ContactMessage) - Documenter les pages publiques/marketing (
/association,/le-projet-oneduc-fr,/chartegraphique,/formations,/adhesion,Frontend/MFormationsController)
Objectif : rendre la plateforme sûre et stable pour un pilote.
État : partiellement réalisée.
- Déplacer
reset-progressiondansroutes/admin.phpavec middleware complet - Supprimer ou retirer la route debug admin non authentifiée
- Mettre à jour
UserFactory: formateurs avecadhesion_status = activepar défaut en test - Remettre la suite de tests au vert lors de l'audit initial (
102 tests passés) - Livrer l'éditeur de plan continu du module builder formateur
- Extraire la logique métier du module builder dans
app/Domains/ModulesFormateur(classes en français) - Extraire le calcul de progression des modules stagiaire dans
app/Domains/Learners - Corriger
/inscriptionou rediriger explicitement vers/inscription-formateur - Stabiliser le contrat d'upload image du builder et remettre
ModuleBuilderTestau vert - Corriger
Module::isVisibleTo()pour vérifier l'appartenance au groupe, y compris ses deux points d'accès restés sans garde (StagiaireModuleDetail(),Frontend\LectureController— corrigés respectivement les 14/07 et 8/07/2026, voir Sécurité & RGPD) ; policies complètes toujours reportées en Phase 2 - Corriger
LessonFeedbackController::store()avec la bonne route de redirection selon le rôle/contexte - Ajouter
throttle:10,1ou rate limiter dédié sur la route de connexion par code d'accès - Ajouter la colonne
last_session_timeàscorm_scoresou modifier le cumul de temps SCORM - Refaire le socle d'administration avec un tableau de bord dense, une gestion unifiée des formateurs et stagiaires et un CRUD groupes fiabilisé (14 juillet 2026)
- Supprimer l'import mort
ScormInteractionControllerdansroutes/scorm.php(fait le 5 juillet 2026 avec le correctif S7, non coché à tort jusqu'ici) - Corriger
StoreModuleRequest::authorize()etStoreGroupeRequest::authorize()(14 juillet 2026) - Incrémenter correctement
attempts_countSCORM
Objectif : crédibiliser les données analytiques et l'expérience utilisateur.
Durée estimée : 2 à 4 mois après Phase 1.
- Brancher les interactions SCORM 1.2 dans
SCORMController::saveProgress()(parsercmi.interactions.*) - Unifier et rendre configurables les seuils de réussite SCORM (50% leçons / 75% évaluations → champ
passing_scorepar leçon) - Corriger le multi-groupe stagiaire dans
StagiaireModules()(agréger tous les groupes actifs) - Ajouter les exports CSV/PDF de progression par groupe
- Créer des Laravel Policies (
ModulePolicy,GroupPolicy,LecturePolicy) pour centraliser les autorisations - Découper
ModuleController: extraireModuleNavigationService,ModuleCompletionService,StudentLectureAccessService - Continuer la segmentation en domaines internes : Groupes, Progression/Analytics, SCORM/Quiz, Outils d'animation
- Ajouter
SoftDeletessurGroupavec migrationdeleted_at - Valider l'unicité de l'email dans
AdminController::AdminProfilStore() - Séparer la désactivation, l'archivage réversible et la purge définitive des comptes formateur et stagiaire
- Ajouter la vérification d'appartenance à la leçon dans
POST /scorm/save-progress(etsave-block-progress,evaluation-progress) - Découper
StagiaireController: dashboard, modules, résultats, outils - Mettre en place une arborescence d'objectifs (objectif pédagogique général au niveau de la formation → objectifs opérationnels au niveau de chaque leçon,
LectureObjective), construite soit au moment de la génération par IA, soit au moment de la création manuelle par le formateur
Objectif : transformer la plateforme en LMS pédagogiquement complet.
Durée estimée : 4 à 8 mois après Phase 1.
- Implémenter la génération de certificats PDF à la fin d'un module (ex. via
barryvdh/laravel-dompdf) - Relier les
LectureObjectiveaux référentiels de compétences (Competency,SkillDomain) - Afficher les compétences acquises et non acquises côté stagiaire
- Ajouter des règles d'acquisition de badges automatiques
- Implémenter un moteur de prérequis minimal (accès conditionnel entre modules)
- Audit d'accessibilité WCAG 2.1 niveau AA et corrections (contrastes, ARIA, navigation clavier)
- Documentation utilisateur : guide stagiaire, guide formateur (PDF + vidéo)
- Nettoyer les vues de template génériques (
resources/views/content/apps/*) - Appliquer dans les menus la convention du glossaire : "Ma formation" côté stagiaire, "Catalogue" / "Créations" / "Parcours" côté formateur (2026, voir 12-glossaire.md)
Objectif : rendre la plateforme commercialisable à des organismes institutionnels.
Durée estimée : 8 à 18 mois après Phase 1.
- Multi-organisation (organismes, coordinateurs, conventions de formation)
- Rôle coordinateur/financeur avec périmètre de données restreint
- Reporting institutionnel (export PDF certifié, archivage des preuves d'apprentissage)
- Gestion de sessions de formation avec présences et émargements
- Mode très simplifié stagiaire (un bouton "Continuer ma formation", affichage minimal)
- Conformité RGPD documentée et testée (durée de conservation, base légale, export individuel)
- Supervision et monitoring production (alertes, logs centralisés, sauvegardes automatisées)
Voir docs/idees-outils-formateurs.md pour le détail des 8 pistes identifiées :
| ID | Outil | Priorité |
|---|---|---|
| OF-001 | Cockpit de séance formateur | Haute |
| OF-002 | Ticket de sortie | Haute |
| OF-003 | Mur de questions anonyme | Haute |
| OF-004 | Émargement QR code | Moyenne |
| OF-005 | Générateur d'activités IA | Moyenne |
| OF-006 | Groupes intelligents | Moyenne |
| OF-007 | Débrief / rétrospective | Moyenne |
| OF-008 | Analytics pédagogiques avancées | Moyenne |
| OF-009 | Import de cours par IA (PowerPoint, PDF) | Moyenne |
| OF-010 | Clic sur zones d'image | Moyenne |
| OF-011 | File d'attente de parole | Moyenne |
| OF-012 | Vrai / Faux express | Moyenne |
| OF-013 | Roue aléatoire (améliorée) | Moyenne |
Le bloc SCORM (juillet 2026, voir docs/wiki/05-modules-scorm-quiz.md) a établi le pattern pour ajouter un nouveau type de bloc dans l'éditeur de leçon : composant JS dans resources/js/formateur-module-builder-editor.jsx, validation dans NettoyeurBlocsModule::sanitizeBlocks(), rendu lecture dans resources/views/shared/lecture_blocks.blade.php. Les blocs suivants, inspirés des blocs interactifs d'Articulate Rise, sont identifiés comme prochaines pistes :
| ID | Bloc | Description | Priorité |
|---|---|---|---|
| BC-001 | Carrousel / Processus | Suite d'étapes numérotées navigables (précédent/suivant), chaque étape avec titre + texte + image optionnelle. Utile pour une chronologie, un processus ou les étapes d'une procédure | Moyenne |
| BC-002 | Flashcards | Cartes recto/verso (question/réponse ou terme/définition) que le stagiaire retourne au clic. Simple à créer pour du vocabulaire ou de la mémorisation | Moyenne |
| BC-003 | Tri (sorting) | Cartes à glisser-déposer dans 2 catégories nommées par le formateur (ex. Vrai/Faux, Avant/Après, Bonne pratique/Mauvaise pratique) | Moyenne |
| BC-004 | Bouton "Continuer" en fin de leçon | Bouton qui se débloque une fois la leçon parcourue en entier (scroll jusqu'en bas et/ou blocs interactifs complétés), pour marquer explicitement la progression avant de passer à la suite | Moyenne |
BC-001 — Carrousel / Processus : nouveau type de bloc carousel avec une liste d'étapes ({title, text, image_id}) ; contenu passif, pas de suivi de progression nécessaire.
BC-002 — Flashcards : bloc flashcard avec une liste de cartes ({front, back}) et un retournement visuel au clic/tap ; peut être décliné en grille ou en défilement une carte à la fois.
BC-003 — Tri (sorting) : bloc sorting avec deux catégories nommées et une liste d'éléments à classer ({label, category}). Peut réutiliser le pattern de drag-and-drop déjà en place pour réordonner les leçons dans le plan du module (resources/js/outline-editor/lesson-item-node.js), plus une validation visuelle bonne/mauvaise réponse après dépôt.
BC-004 — Bouton "Continuer" en fin de leçon : aujourd'hui, seuls le SCORM (afficherBoutonSuivantDepuisIframe() dans public/scorm_core/js/API.js) et les quiz pilotent la navigation vers la leçon suivante. Une leçon en blocs (texte/image/vidéo/carrousel/flashcards/tri) n'a aucun mécanisme de progression explicite : ce bouton se déclenche en bas de la page de leçon, cohérent avec le comportement SCORM existant, et pourrait aussi servir de brique pour le mode stagiaire très simplifié envisagé en Phase 4 (bouton "Continuer ma formation").
| Axe | État actuel | Cible proche |
|---|---|---|
| Maturité technique | Build au vert, tests verts (268), FormRequests corrigées, architecture encore concentrée dans gros contrôleurs | Policies, contrôleurs découpés |
| Maturité pédagogique | Modules, quiz, SCORM, outils live et parcours déjà exploitables | Certificats, exports, prérequis et preuves SCORM complètes |
| Expérience utilisateur | Espaces par rôle complets, accès stagiaire simplifié, menus alignés sur "Ma formation" / "Catalogue" / "Créations" / "Parcours" | Multi-groupe stagiaire corrigé |
| Publication GitHub | Base légale/documentaire en place, checklist sécurité S3-S9 résolue (5 juillet 2026), gap isVisibleTo() traité (14 juillet 2026) |
Historique Git vérifié, crawl public vert |