sépare la vitrine de l'application : vraie coquille, barre par rôle, chat
Une fois connecté, plus aucun lien vitrine : nouvelle layouts/app (barre
du haut avec menu avatar, barre latérale par rôle, bulle de chat
Messenger, barre d'onglets mobile). Les 10 entrées de navigation
demandées sont construites en vrai plutôt qu'en renvoi "bientôt
disponible" : Ma classe, Emploi du temps, Mes devoirs, Mes cours, Mes
notes côté élève ; Mes classes, Emploi du temps, Séances en direct,
Bibliothèque, Résultats (avec Observations, la dernière fonction
fictive du tableau de bord démo) côté prof.
Chat élève <-> prof de sa classe, jamais entre élèves. Mon profil,
Paramètres (thème, taille du texte), Signaler un problème, Mes
raccourcis. /eleve vidée des faux contenus ("À faire", "Ma progression",
"Mes QCM") restés avant le chantier "vrai cockpit".
Bug trouvé en testant en réel sur le serveur (pas en local) : le
compteur de messages non lus du chat ne redescendait jamais à zéro
(FilConversation sans lu_par_prof_a/lu_par_eleve_a dans son fillable) —
corrigé avec un test de non-régression.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
a41951d4e6
commit
592cba9c4c
89 changed files with 2890 additions and 138 deletions
|
|
@ -31,3 +31,8 @@ retirer la ligne (et le noter dans le journal) quand c'est fait.
|
|||
| Self-healing : ne couvre que les VM (pas le serveur, déjà en dette, ni les conteneurs/services, déjà `Restart=always`) | Documenté dans `docs/runbooks/self-healing.md`, pas une lacune à corriger — rappel pour ne pas le redemander. | — | 2026-10-12 |
|
||||
| Banque de quiz : un quiz partagé disparaît si la classe d'origine est archivée puis purgée (RGPD, 90 jours) | La banque n'a pas de propriétaire indépendant d'une classe (pas de `user_id` ni de `classe_id` nullable sur `quizzes`, pour rester simple). À corriger si des profs partagent des quiz qu'ils veulent garder au-delà de la durée de vie d'une classe. N'affecte pas les quiz officiels (voir ligne suivante). | Si ça gêne en usage réel | 2026-10-13 |
|
||||
| Banque de quiz officielle : établissement, prof et classe techniques invisibles (« Bibliothèque Paillasse » / « Banque officielle », `App\Services\Quiz\BanqueOfficielle`) | Simple propriétaire stable pour les quiz synchronisés depuis `paillasse-contenus/`, jamais archivé donc jamais purgé — mais apparaîtrait comme un établissement et un prof fictifs dans toute future liste d'administration globale. À filtrer explicitement si un tel écran est ajouté. | Si un écran d'admin globale est ajouté | 2026-10-13 |
|
||||
| Thème sombre : pages migrées avant la coquille (quiz, devoirs, mes-classes…) gardent leurs couleurs fixes de la vitrine, pas les jetons `--sy-*` | Elles restent lisibles en clair ; en thème sombre, certains blocs à fond blanc ne basculent pas. Seules les pages écrites pour la coquille (Ma classe, Emploi du temps, Mes devoirs…) suivent le thème. Reprendre une par une si le thème sombre doit être parfait partout. | Si ça gêne en usage réel | 2026-10-14 |
|
||||
| Pages immersives (console, visio) gardent la barre latérale de la coquille | Visio et console auraient pu passer en plein écran sans chrome ; laissées avec la barre latérale par simplicité, au lieu d'une troisième variante de layout. | Si ça gêne en usage réel | 2026-10-14 |
|
||||
| Chat : pas de notification sonore ni de notification navigateur, sondage toutes les 3 s (ouvert) / 15 s (badge) | Suffisant pour un usage en classe ; à revoir si le besoin d'alerte immédiate apparaît. | Si ça gêne en usage réel | 2026-10-14 |
|
||||
| « Mes cours » : un seul lab (08) a un vrai cours.md | Les séquences 01 à 07 n'ont pas de cours rédigé (Adam écrit ce contenu lui-même, voir la banque de quiz). La page reste honnête : vide pour un élève qui n'a pratiqué que ces labs, jamais de contenu inventé pour combler. | Quand Adam rédige les cours | 2026-10-14 |
|
||||
| « Mes notes » : pas de notion de compétence pour les devoirs maison (seulement pour les labs, via `labs.competences`) | Un devoir maison n'est lié à aucune compétence du référentiel ; ses notes sortent sous « Sans compétence associée ». Ajouter un champ compétence(s) sur `Devoir` si besoin. | Si ça gêne en usage réel | 2026-10-14 |
|
||||
|
|
|
|||
|
|
@ -977,3 +977,32 @@ Le choix qui évite le plus de dette ici : ne pas réutiliser le mécanisme « p
|
|||
**Suite**
|
||||
|
||||
Reprendre le chantier « vrai cockpit » : Observations.
|
||||
|
||||
## 2026-10-13/14 — Séparer la vitrine de l'application
|
||||
|
||||
Demande d'Adam : une fois connecté (élève ou prof), on gardait le header vitrine (Fonctionnalités, Cours, Tarifs) — ça n'a pas de sens, comme sur Facebook il faut basculer dans une vraie interface d'application. Avant de coder, j'ai montré la liste des 10 entrées de navigation demandées (5 élève, 5 prof) : la plupart n'avaient pas de page réelle derrière (seulement `/mes-classes` et la banque de quiz existaient). Adam a choisi de construire une vraie version minimale de chaque page manquante plutôt qu'un simple renvoi « bientôt disponible ».
|
||||
|
||||
**Fait**
|
||||
|
||||
- `layouts/app` : barre du haut (logo, menu avatar — Mon profil, Paramètres, Aide, Signaler un problème, Se déconnecter), barre latérale (5 entrées par rôle + Mes raccourcis), zone centrale, bulle de chat Messenger. Mobile : barre d'onglets en bas (4 + Plus), chat plein écran. Thème clair/sombre et taille du texte réglables, appliqués via des attributs `data-theme`/`data-taille` sur `<html>`.
|
||||
- Nouvelles pages réelles, aucune donnée inventée :
|
||||
- Élève : **Ma classe** (annonces du prof, camarades en prénom + initiale, qui est en ligne dans les 3 dernières minutes, lien ENT si connu) ; **Emploi du temps** (séances + échéances de devoirs réunies, pas d'examens tant qu'aucun modèle n'existe) ; **Mes devoirs** (devoirs maison, TP disponibles via une séance ouverte, quiz en cours — avec badge) ; **Mes cours** (uniquement les cours.md réels des labs déjà pratiqués par la classe — un seul existe aujourd'hui) ; **Mes notes** (devoirs notés et corrections de labs, groupées par compétence du lab.yaml, jamais lue jusqu'ici).
|
||||
- Prof : **Emploi du temps** et **Séances en direct** (vue transverse à toutes les classes, plus besoin d'ouvrir chaque classe) ; **Bibliothèque** (labs + banque de quiz réels, distincte de la vitrine `/bibliotheque`) ; **Résultats** (corrections et nouvelles **Observations** — notes rapides sur un élève pour le conseil de classe, dernière fonction fictive du tableau de bord démo, jamais montrées à l'élève). Annonces et Observations se gèrent depuis le cockpit de la classe (`/mes-classes/{classe}`).
|
||||
- Chat Messenger élève ↔ prof de sa classe, jamais entre élèves (structurellement impossible : aucune route élève-élève n'existe) ; le prof peut couper le chat de sa classe ; historique conservé, purgé avec la classe (RGPD).
|
||||
- Mon profil, Paramètres, Signaler un problème (stocké, relu par Adam), Mes raccourcis (pages épinglées).
|
||||
- `/eleve` vidée des faux contenus (« À faire », « Ma progression », « Mes QCM » — des données inventées qui restaient depuis avant le chantier « vrai cockpit ») : ne reste que le quiz flash réel et des liens vers les 5 nouvelles pages.
|
||||
- Nouvelles tables : `annonces`, `observations`, `raccourcis`, `signalements`, `fils_conversation`, `messages_chat`, `cours` ; colonnes ajoutées à `users`/`eleves` (préférences, dernière activité), `labs` (compétences, enfin lues du lab.yaml), `classes` (chat_actif), `etablissements` (url_ent).
|
||||
- `cours:synchroniser` (même esprit que `labs:synchroniser` et `quiz:synchroniser-banque`) : lit les `cours.md` de `paillasse-contenus/`.
|
||||
- 9 nouveaux tests Pest (93 au total) : étanchéité des barres par rôle, impossibilité pour un élève d'atteindre les routes de chat du prof, deux élèves de classes différentes ne partagent jamais de fil, JavaScript valide des nouvelles pages, toutes les nouvelles pages se chargent sans erreur.
|
||||
|
||||
**Bug trouvé et corrigé en vérifiant en réel** (pas en local) : le compteur de messages non lus du chat ne redescendait jamais à zéro — `FilConversation` n'avait pas `lu_par_prof_a`/`lu_par_eleve_a` dans son `$fillable`, donc `update()` les ignorait silencieusement, sans erreur. Trouvé en testant un vrai aller-retour élève ↔ prof sur le serveur, pas par les tests locaux (qui ne vérifiaient pas la valeur du compteur). Corrigé, et le test de non-régression ajouté aurait aussi révélé un second problème plus subtil : marquer « lu » au moment d'envoyer son propre message n'a pas de sens (le filtre par expéditeur l'exclut déjà) et créait un risque d'égalité de seconde avec un message suivant — retiré des deux côtés.
|
||||
|
||||
**Vérifié sur le serveur réel** (un prof et un élève jetables, classe supprimée ensuite) : navigation cloisonnée par rôle (l'élève ne voit jamais les entrées prof et réciproquement), vitrine toujours accessible et intacte sans connexion, chat élève → prof → élève avec compteurs corrects après le correctif, coupure du chat par le prof effective immédiatement, annonce publiée visible dans Ma classe, observation ajoutée visible dans Résultats. La banque officielle et le quiz réel d'Adam n'ont pas bougé.
|
||||
|
||||
**Comprendre**
|
||||
|
||||
La leçon technique : les données injectées par un `View::composer` sur un layout ne sont visibles que dans le corps du layout lui-même (barre latérale, barre du haut) — pas dans le contenu de la page qui l'étend (`@section('contenu')`), parce que ce contenu est déjà rendu, en chaîne de caractères, avant que le composeur du layout ne s'exécute. Deux pages (`eleve.blade.php`, `aide-app.blade.php`) utilisaient à tort une variable du composeur dans leur propre contenu ; passées explicitement par leur contrôleur à la place.
|
||||
|
||||
**Suite**
|
||||
|
||||
Reprendre le chantier « vrai cockpit » : Observations étant maintenant construites, il ne reste que Surveillance d'examen — à cadrer avec Adam avant de coder (RGPD, mineurs).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue