Portail d'enseignement

E Suong
E Suong

Explorer les ressources

Accueil

Documentation technique

Espace élève

Fiche de référence du code : fonctionnement, formats et limites. La disponibilité publique dépend de la version publiée.

Sommaire de la fiche

Ajustements vague 7 — en revue locale

Un QR de devoir valide ajoute directement la tâche, qu’il soit lu par le scanner intégré, collé ou ouvert par lien. Le format reste validé avant écriture ; un doublon conserve la copie personnelle, même éditée. Un devoir déjà supprimé exige encore une confirmation de nouvel ajout. Une erreur d’enregistrement laisse une action de réessai, sans annoncer un succès. La légende utilise les tracés SVG exacts des boutons existants ; ces boutons sont inchangés.

Les bilans conservent leur note sur 20, le coefficient, les compétences, les commentaires et les détails par exercice/question. La ligne globale « Total / brut » est retirée de l’affichage, sans supprimer de données ni changer les calculs. Les descriptions historiques d’aperçu/confirmation systématique ci-dessous sont remplacées par ce parcours. Voir livraison vague 7 C (../ESPACE_ELEVE_VAGUE7_C_LIVRAISON.md) pour les validations réellement exécutées et les réserves. Aucun déploiement de ce lot par C.

Vague 5 publiée sur la bêta le 28 octobre à 20 h 40 (Paris) : code 97cdc1a, 415 tests Linux réussis, recettes consolidées et contrôles après publication réussis. Voir livraison et limites (../ESPACE_ELEVE_VAGUE5_DEPLOIEMENT.md). Les mentions de préparation des lots ci-dessous sont historiques.

Correction demandée — accueil initial

Le 28 octobre 2026, l’utilisateur remplace le choix précédent : Accueil devient la page initiale de /eleve/ et de l’application installée (son adresse de lancement reste /eleve/). Les liens directs vers une rubrique ou un import conservent leur destination. Aucun changement des données locales.

Accueil publié sur la bêta le 28 octobre à 18 h 31 (Paris) : bouton maison, installation, modes d’emploi et gestion des données ; démarrage Devoirs conservé. Code 1bbbdeb. Livraison et vérifications (../ESPACE_ELEVE_ACCUEIL_LIVRAISON.md). Les mentions de préparation ci-dessous sont historiques.

Accueil de l’espace élève — 28 octobre 2026

Implémenté : bouton maison accessible « Accueil » avant les trois rubriques, lien direct /eleve/#accueil, installation et aide regroupées, quatre modes d’emploi, inventaire des données locales, demande de persistance et démonstration séparée. Les suppressions restent dans leurs rubriques. Devoirs demeure l’écran de démarrage. Aucun changement de format ou de stockage ; les brouillons sont conservés et bloquent le changement de base.

Vérifié : compilation bêta, recette navigateur C complète incluant accueil à 320 px et préservation du brouillon, recette installation (événements et appareils simulés). Installation native et appareils physiques restent à tester. Déploiement bêta autorisé par l’utilisateur, en préparation ; voir ESPACE_ELEVE_ACCUEIL_LIVRAISON.md pour le résultat final.

Correction locale du 28 octobre : les cartes et les activités sont dans les catégories Exerciseurs/QCM. L’espace élève conserve le suivi, sans liste de succès/trophées ni panneau de régularité. Voir Questionnaires.

Extension locale du 28 octobre 2026 : deux questionnaires d’addition, sauvegarde/reprise par le socle 1.0, succès unique et trophée cumulable. Les mentions historiques de non-raccordement ci-dessous ne décrivent pas cette extension. Aucun déploiement de ce lot.

Publication bêta effective — 28 octobre 2026 à 12 h 39 (Paris) : retours A à E publiés au commit 4f5a396, 341 tests Linux réussis, contrôles HTTP et porte bêta réussis. Une carte Espace élève remplace les trois liens ; production inchangée. Livraison, sauvegarde, données et limites (../ESPACE_ELEVE_RETOURS_DEPLOIEMENT.md). Les états locaux/non publiés ci-dessous relatent les étapes antérieures.

État au 28 octobre 2026 — retours bêta assemblés

Les lots A à E de la vague de retours sont intégrés localement : 341 tests réussis, compilation bêta et recettes HTTP réussies, recette navigateur C rejouée. Aucun déploiement de cette vague. Voir la revue consolidée (../ESPACE_ELEVE_RETOURS_REVUE.md) pour les commits, règles, preuves et limites. Les mentions antérieures de conception/non-implémentation ci-dessous sont historiques ; la première version est déjà sur la bêta, les améliorations restent locales.

La suppression utilise désormais un dialogue modal ; l’édition défile vers le formulaire. Les matières ont un registre IndexedDB personnel séparé réel/démo, couleur blanche par défaut ; NFKC, espaces et casse normalisés, accents conservés. Une matière QR valide apparaît dès la prévisualisation, le devoir exige toujours confirmation. Une panne des préférences ne doit pas empêcher la sauvegarde des tâches.

Extension lot E, 27 octobre 2026 : le transfert ponctuel d’une session est raccordé à Entraînement, avec aperçu, confirmation, réservation, reprise et accusé après écriture. Voir la livraison E (../ESPACE_ELEVE_E_LIVRAISON.md) pour les routes propres, limites, base technique, preuves et réserves mobiles. Le contrat 1.0 et les lecteurs restent inchangés ; la source est conservée. Les mentions de raccordement futur dans la description historique C ne décrivent pas cette extension.

Prototype local du 27 octobre 2026, depuis f28cc16 de integration/espace-eleve. Contrat accepté dans ESPACE_ELEVE_REVUE_A.md ; formats et modules du socle inchangés. Aucun déploiement.

Accès et navigation

  • /eleve/ : enveloppe publique statique, sans catalogue personnalisé, cookies ou données d’élèves dans le HTML. L’application ouvre Devoirs ; les fragments #devoirs, #entrainement, #evaluation ouvrent les trois vues. Le navigateur ordinaire garde l’accueil existant du portail.
  • /outils/qr-devoirs : contrôle serveur du niveau Professeur minimum, puis des droits et de la disponibilité de sa fiche de catalogue si elle existe. Aucune publication de devoir sur le serveur.
  • Une navigation entre les trois vues conserve la saisie manuelle en mémoire. Fermer/recharger avant Enregistrer peut la perdre. Aucun exerciseur complet ou activité en cours n’est implémenté par ce lot.
  • Les liens vers le portail quittent l’enveloppe locale : ils nécessitent le réseau et conservent leurs contrôles d’accès. L’interface locale publique n’autorise aucun document protégé.

Devoirs

Matière, échéance obligatoire (contrat actuel), contenu textuel. Ajout manuel et édition via saveTask, conservation des identités et contrôle expectedUpdatedAt. Les timestamps d’édition sont strictement croissants, même pour deux actions dans la même milliseconde. Important est indépendant de Terminé. L’historique terminé est replié à l’ouverture, peut être réouvert et n’est jamais purgé automatiquement.

Tri au choix : échéance puis matière, ou matière puis échéance ; identifiant stable pour départager. Important ne modifie pas le tri. Seule la préférence utilise localStorage (esuong-student-sort-v1). Les tâches utilisent exclusivement le socle IndexedDB. Un retard est comparé au jour civil Europe/Paris.

Le scan ou lien affiche un aperçu puis demande l’ajout explicite. Un nouveau scan ne remplace aucune copie personnelle ; après suppression, il demande un second choix explicite de nouvel ajout. La suppression locale d’un devoir ou bilan exige une confirmation dans la page. Les contenus sont échappés, y compris HTML et liens : ils restent du texte inerte.

QR et caméra

Lien de transport : même origine, chemin exact /eleve/, fragment #devoir=<JSON UTF-8 encodé base64url>, sans paramètres de requête. Le JSON est exactement l’enveloppe homework du contrat commun ; aucun nouveau champ métier. Le fragment ne part pas dans la requête HTTP. Il est retiré de l’adresse courante après lecture, avant confirmation ; cela n’efface pas une copie antérieure du lien ni l’historique d’un autre contexte.

Le générateur utilise qrcode existant, mode byte, correction M, quatre modules blancs de marge. Il mesure réellement le résultat de l’encodeur et refuse au-delà de la version 20, ou en cas de dépassement de capacité. Aucun contenu n’est tronqué. Chaque génération crée une identité nouvelle : conserver le même QR/lien pour distribuer plusieurs fois le même devoir. L’édition des champs invalide le QR affiché.

La dimension indicative correspond à (modules + 8) × 0,6 mm, arrondie au millimètre supérieur. Ce n’est pas une garantie de lecture imprimée. Les 8 Kio du validateur ne sont pas la capacité du QR ; un devoir peut être valide et trop dense pour ce prototype. Aucun engagement de lisibilité à 2 cm.

Scanner intégré : getUserMedia en contexte sécurisé (HTTPS ou localhost), caméra arrière préférée, décodage local avec jsqr 1.4.0, image limitée à 960 pixels de large, tentative toutes les 180 ms environ. Aucune image envoyée. Arrêt des pistes lors d’un résultat, fermeture du scanner, sortie de page ou mise en arrière-plan ; une permission arrivant après annulation ferme immédiatement le flux. En cas de refus ou d’indisponibilité, collage du lien utilisable dans le même contexte de stockage. La caméra système peut ouvrir un autre navigateur : aucun partage automatique promis avec une PWA installée.

Lecteurs

Entraînement : résumés par matière, état, date originale, erreurs et questions avec convention explicite ; relecture des énoncés/réponses/corrections figés. text est échappé ; math utilise KaTeX local avec trust:false, taille/expansions bornées. Aucun HTML ou image importé. Historique par thème sous forme de tableau chronologique, sans mélanger les activités/conventions. Séries et trophées utilisent le moteur du socle ; aucun seuil pédagogique de succès inventé.

Évaluation : séparation par matière et ordre chronologique décroissant, titre/date/type/coefficient (zéro conservé), commentaire, note et échelle, détails par exercice/colonne, compétences/bonus/ajustements. Zéro, non renseigné et absent restent distingués. Aucun coefficient appliqué à la note, aucune moyenne entre évaluations. Les sous-totaux sont ceux du contrat barème, pas un calcul du lecteur.

Import JSON individuel local : validation bornée, aperçu et confirmation ; remplacement d’un bilan seulement selon la révision attendue et le reportId du socle. Une session peut être conservée explicitement en résumé seul. Pas d’export/import complet du profil. Ces entrées préparent les raccordements D/E sans implémenter leur transfert ni leurs API.

Le mode Démonstration utilise esuong-student-demo-c-v1, distinct de esuong-student-v1. Le chargement des deux exemples fictifs du contrat est explicite ; il ne crée pas d’entraînement en ouvrant la page. Au rechargement, l’application revient au contexte personnel ; les exemples restent disponibles en rouvrant la démonstration.

Conservation et avertissements

pruneDetails est appelé à l’ouverture, au retour visible et à la reprise de page, ainsi qu’à la demande après avertissement. Les limites restent 100 détails / 20 Mio, résumés et registre conservés par le socle. Un détail absent est signalé dans la relecture. retentionWarning indique qu’une écriture a déjà réussi : la page propose de reprendre l’entretien, sans présenter l’import comme perdu ni réclamer une retransmission.

Le quota réel et les règles d’effacement dépendent du navigateur. La demande de stockage persistant est une action explicite ; son refus n’est pas affiché comme un succès. Les données restent propres à l’origine, au navigateur/profil et à l’appareil ; pas de compte, synchronisation, sauvegarde générale ou récupération après effacement.

PWA et compilation

npm run build lance aussi postbuild (scripts/build-student-pwa.mjs). Ne pas remplacer cette commande par astro build seul pour une livraison PWA. Le script suit avec es-module-lexer 3.0.4 les imports de la seule page statique élève, ses styles et polices, puis génère dist/client/eleve/sw.js. Il refuse les dépendances externes, chemins hors périmètre et imports dynamiques non littéraux. Icônes PNG 192/512 et SVG locales, manifeste avec start_url/scope /eleve/.

Le service worker ne s’enregistre qu’en compilation de production. Portée /eleve/, liste finie des assets compilés, aucun cache réseau générique. Aucune réponse d’API, de /documents/, de page professeur ou protégée n’est conservée. Les requêtes non GET, autres origines et variantes avec query sont exclues. Les fragments sont retirés de la clé de cache pour permettre les liens directs hors connexion. Le cache ne contient que l’interface publique et les fixtures fictives intégrées au code ; les données personnelles restent dans IndexedDB.

Installation atomique de la liste, sans activation forcée immédiate. Le nom du cache dépend des assets et du code du worker. Une mise à jour attend un bouton explicite ; ce bouton est désactivé durant saisie/import. L’activation ne nettoie que les anciens caches esuong-student-shell-*, jamais les bases personnelles ou les autres caches. Pour retirer ultérieurement la PWA, prévoir un worker de désinstallation ciblé ; supprimer seulement son fichier serveur ne supprime pas une installation existante. Un retour arrière de code doit conserver le contrat IndexedDB v1.

Migration catalogue

node scripts/migrate-student-space.mjs simule ; --apply ajoute quatre descripteurs de liens et prend le verrou catalogue. Relancer ensuite npm run catalogue:refresh selon la procédure d’intégration. Les parents sont recherchés par identifiants existants, jamais recréés :

  • Élèves : f46cea4a-d0b7-4dcb-a104-2f46d6548eb7.
  • Enseignants : 6606c501-1587-40ca-9739-7d09e9e500e4.

Nouveaux ids : espace-eleve-devoirs, espace-eleve-entrainement, espace-eleve-evaluation, enseignants-qr-devoirs. Les trois liens élèves sont publics ; générateur au niveau 2. Les identifiants dupliqués, chemins symboliques, parents absents, emplacements occupés ou fiches incompatibles bloquent avant écriture. Une seconde exécution ne touche pas les champs éditoriaux, tags, droits renforcés, dates ou champs supplémentaires. Une interruption partielle est relançable. Appliquer pendant une fenêtre sans écritures administratives, puis actualiser ; aucune copie globale de Ressources.

Retour arrière catalogue : examiner le plan et les quatre fiches ; retirer uniquement celles effectivement créées par la migration, après sauvegarde et vérification qu’elles n’ont pas reçu de modifications à préserver. Ne supprimer ni parents, ni documents, ni données locales. La migration n’a été exécutée que sur fixtures temporaires pendant ce lot.

Validation

Correction C-01 : le lecteur affiche « Évaluation sans note chiffrée » lorsque l’élève est présent et grade=null (bilan de compétences valide). Détail des compétences, commentaire et suppression locale restent disponibles. Un absent reste indiqué « Absent ». Un bilan numérique à maximum nul affiche « Note sur 20 non calculable : maximum nul. » et ses totaux bruts. Le contrat commun est inchangé.

Non-régression : node --test tests/student-report-reader.test.mjs tests/student-ui.test.mjs tests/student.test.mjs compile et rend notamment le composant réel de note avec quatre bilans validés par le contrat. Recette C-01 : après npm run build, choisir une origine locale neuve avec $env:STUDENT_PWA_TEST_PORT='4350' sous PowerShell, lancer node tests/student-pwa-harness/server.mjs, ouvrir http://127.0.0.1:4350/recipe/?reports=1. La recette utilise le véritable champ de fichier JSON et la confirmation d’import, puis recharge l’iframe et vérifie les quatre états, commentaires et détails. Elle supprime le bilan de compétences, vérifie les trois autres, le réimporte et recharge encore. Attendre « PASS C-01 ». Elle écrit seulement des bilans fictifs dans la base personnelle de cette origine de test ; changer de port pour la rejouer sans écraser une base existante. La largeur de 390 px est une recette responsive sur ordinateur, pas un essai sur téléphone physique.

Voir docs/ESPACE_ELEVE_C_LIVRAISON.md pour résultats et limites. Tests purs : node --test tests/student-ui.test.mjs tests/student.test.mjs. Recette serveur isolée : node tests/student-http-smoke.mjs après compilation (port 4345, configuration privée fictive propre à .work). Recette navigateur reproductible : node tests/student-pwa-harness/server.mjs, puis /recipe/?run=1 sur http://127.0.0.1:4346. Elle écrit uniquement des données fictives sur cette origine de recette. Au message READY_OFFLINE, arrêter uniquement ce serveur ; l’iframe poursuit la recette avec le cache et IndexedDB. /recipe/?update=1 vérifie une mise à jour après reconstruction d’une version différente.

Avant publication : iPhone/Safari et Android/Chrome réels, installation depuis le navigateur, lancement depuis l’icône, caméra acceptée/refusée, QR papier à taille mesurée, passage caméra système ↔ PWA, mode avion après fermeture complète, quota physique, interruption pendant mise à jour. La largeur de 390 px sur ordinateur ne valide pas ces scénarios.

Propositions d’index au coordinateur (fichiers communs volontairement inchangés) : ajouter cette fiche dans docs/OUTILS.md, docs/README.md, et référencer les bases élève/personnelle et démonstration dans docs/DONNEES.md.

← Retour à la documentation