# Chalit 4.0 — moteur séparé, leçons JSON, modules autonomes

Version livrée : **4.0.0**. Base examinée : `Chalit_3_1006_records_v1.html` fourni par SNo. L’ancien fichier n’a pas été modifié.

## Démarrer maintenant

**Pour ton hébergement :** décompresse l’archive, puis dépose **tout le dossier `chalit`** sur ton serveur, sans aplatir ses sous-dossiers. Ouvre son `index.html` depuis le navigateur de la tablette. Garde cette adresse stable.

**Pour essayer directement depuis Téléchargements :** utilise `Chalit_4_0_portable.html`, livré séparément. C’est le même programme, compilé avec les JSON et l’audio de l’alphabet. Le `index.html` modulaire, lui, nécessite ses fichiers voisins et un serveur HTTP(S).

Le portable inclut un instantané des contenus : ses leçons peuvent toujours être importées en JSON, mais pour modifier ses bibliothèques de modules intégrées il faut le reconstruire. Pour des contenus de modules mis à jour par simple dépôt JSON, utilise la version hébergée.

L est fournie comme leçon de départ, dans `data/lessons/L.json`. L’exemple M est un **brouillon technique invisible sur l’accueil enfant** ; il démontre que le moteur n’impose plus L. Il ne remplace pas la séance actuelle.

## Avant de quitter la V3

Les résultats sont dans le navigateur utilisé par Charlotte, **pas dans le HTML transmis ici**. Ce paquet ne contient donc pas ses scores personnels.

Garde l’ancien fichier et exporte ses leçons et ses records. Si la V3 était hébergée sur la même origine — même protocole, domaine et port — la V4 tente une reprise locale au premier démarrage. Les anciennes clés ne sont pas supprimées. Les données brutes sont également conservées dans la sauvegarde V4.

`tools/migration.html` permet d’exporter les anciennes clés sur cette même origine. Il ne transmet rien au serveur, ne supprime rien et exclut les secrets. Importer ce fichier dans Chalit 4 reprend les leçons et les anciens records. Si l’ancien Chalit était ouvert depuis `content://` ou Téléchargements, **ne présume pas qu’une nouvelle page partage son stockage** : préfère les exports de l’ancienne application.

Les leçons V3 arrivent en **brouillons** : leurs mots n’avaient pas d’annotations phonétiques fiables. Vérifie leurs contenus et leurs acquis avant de les rendre disponibles. Les anciens records restent consultables sous **Historique V3** ; ils ne sont pas comparés aux nouvelles séries V4, dont les règles et les banques peuvent différer.

## Usage parent

Appui long **0,7 seconde sur ⚙️**. Un appui court ne fait rien. Aucun énoncé vocal dans les paramètres.

**Préparer la leçon du jour** ouvre l’éditeur. Le bas de la fenêtre reste séparé de la partie qui défile : boutons Démarrer, Session, Enregistrer et Retour. Import et export sont regroupés dans l’éditeur et les paramètres, pas sur l’accueil enfant.

- **Démarrer** essaie la configuration affichée.
- **Session** la rend prioritaire dans l’onglet, sans publication ni remplacement de la bibliothèque.
- **Enregistrer** sauvegarde une version locale et conserve les précédentes.
- **Exporter daily.json** enregistre la version à publier et produit le fichier destiné au serveur.

Les listes que tu choisis sont respectées. Une liste explicitement vide reste vide. Modifier les lots ne remplit pas silencieusement les champs : **Appliquer les lots** est une action explicite de remplacement.

## Leçons disponibles, versions et archives

Une leçon possède un identifiant stable, des versions numérotées et un état **brouillon / disponible / archivée**. Seules les disponibles sont proposées à Charlotte. « Du jour » désigne une version ; ce n’est pas une copie supplémentaire créée chaque matin.

Une modification enregistrée crée une nouvelle version si nécessaire. Les séances conservent le contenu exact utilisé. Une archive reste consultable et réutilisable côté parent. Aucun archivage ni effacement automatique selon l’âge ou le score.

Les lectures libres, la construction et le tracé sont enregistrés comme **consultations**, pas comme réussite pédagogique automatique. Le sommaire affiche les exercices parcourus, pas un pourcentage de maîtrise.

## Contenu et niveau pédagogique

La banque L complète se trouve dans son JSON, pas dans les fonctions du programme. `knownSkills` indique les acquis supposés connus. Chaque mot peut porter ses acquis requis (`skills`), les sons effectivement présents (`sounds`), une prononciation (`speech`), une image et une note.

**Strict** : aucun acquis nouveau pour un mot annoté. **+1** : un acquis nouveau au plus. **Découverte** : mots non annotés ou plus éloignés autorisés, sous réserve de la longueur maximale choisie. Les compteurs parent reflètent la sélection réelle.

Le programme ne devine plus les sons par recherche de lettres. Par exemple, la présence de `u` dans « loup » ne suffit pas à y déclarer le son « u ». Les mots sans annotation restent accessibles en découverte, mais ne sont pas annoncés comme décodables. Une annotation est une description pédagogique à vérifier, pas une certification de niveau ni une évaluation de Charlotte.

La petite sélection L fournie contient des annotations explicites. Les bibliothèques historiques beaucoup plus larges sont conservées séparément et **ne sont pas automatiquement déclarées faciles ni réinjectées dans la séance**.

## Modules autonomes

Les paramètres permettent de les activer et de choisir s’ils sont accessibles librement dans **Découvrir**, ou seulement ouverts par le parent.

| Module | Contenu repris | Réglages |
|---|---|---|
| Alphabet | Lettres, ancien enregistrement et repères de synchronisation | Sélection des lettres, mélange, répétitions, lecture vocale ou enregistrement |
| Imagier | 439 entrées originales | Sélection, ordre, mots visibles ou masqués |
| Histoires et poésies | Deux poésies et livre de huit pages | Textes accessibles ; lecture continue, ligne ou mot touché |
| Répétition orale | 24 mots et leurs phrases | Sélection, répétitions, bouton microphone autorisé ou non |

L’audio de l’alphabet est extrait une seule fois dans `media/alphabet.mp3` ; ses repères sont dans le JSON. En mode enregistrement complet, il conserve son introduction sonore et son chronométrage d’origine.

**Les images `page1.png` à `page8.png` du livre n’étaient pas fournies.** Le lecteur fonctionne avec le texte et indique l’absence d’illustration au lieu de produire des images fictives. Pour en ajouter, utiliser un champ `image` dans la page, avec un chemin tel que `media/livre/page1.png`.

La répétition orale ne transforme pas une transcription en score de prononciation. Le microphone ne démarre que sur action explicite. Son fonctionnement dépend des possibilités et autorisations du navigateur, et peut utiliser un service distant.

## Publier sans GitHub

Workflow : **Préparer → Exporter daily.json → remplacer ce fichier sur ton serveur**. L’URL par défaut est `daily.json` à côté du `index.html`. Une autre URL peut être réglée dans les paramètres.

L’export peut aussi inclure les autres leçons disponibles et les activations/réglages des modules. Une publication peut ainsi retirer de l’accueil des leçons précédemment gérées par ce même flux sans supprimer leurs versions et séances. Les leçons locales indépendantes ne sont pas archivées par cette opération.

La tablette consulte le flux au lancement, au retour dans l’application et au retour de la connexion, avec limitation de fréquence. Ce n’est **pas une notification “push” quand l’application est fermée**. Une nouvelle publication reçue pendant un exercice attend le retour à l’accueil ; une leçon de session reste prioritaire.

Le fichier comporte une version de publication, distincte de celle de chaque leçon. L’éditeur s’occupe des deux. Lors d’une modification manuelle, augmente la version de la leçon modifiée **et** celle de la publication. Une même version avec un contenu différent est refusée.

Si l’hébergement est public, ses JSON de leçons sont lisibles par les personnes qui connaissent leur adresse. Il n’y a pas de compte serveur ou d’authentification ajoutée.

Un échec réseau ou un JSON invalide conserve la dernière leçon reçue. Le fichier distant contient des contenus, pas le programme, les tokens ou les résultats. Ne dépose pas de **sauvegarde complète** dans un répertoire public.

## Hors ligne et mises à jour du programme

La version portable inclut les modules, les JSON et l’audio de l’alphabet. Une ressource externe ajoutée par URL reste dépendante de sa disponibilité ; une voix française locale doit être présente pour une lecture vocale hors réseau.

Pour le site, un service worker (cache local du programme) est fourni sans obligation d’installer une PWA ni de gérer un manifeste. Il nécessite un contexte sécurisé, généralement **HTTPS**, ou localhost pour les essais. Une première ouverture connectée est nécessaire. Dans les paramètres : **Programme et hors-ligne → Préparer les modules pour le hors-ligne**, puis attendre la confirmation avant un essai en mode avion.

Les modules et le gros enregistrement ne sont pas téléchargés au lancement ordinaire. Ils sont chargés à l’ouverture ou par cette préparation explicite.

Une mise à jour du programme reste un nouveau dépôt des fichiers de code. Le cache versionné attend le retour à l’accueil pour appliquer une nouvelle version dans la page qui l’a demandée. Cette livraison n’a pas été installée sur ton serveur ni sur la tablette : le premier essai HTTPS, puis mode avion, reste à faire sur place.

En cas de stockage plein ou indisponible, l’application le signale et continue en mémoire. Exporte alors une sauvegarde avant de fermer. Un cache de navigateur ne remplace pas une sauvegarde externe.

## Ce qui change encore le code

Un nouveau son, mot, lot, texte, une nouvelle leçon ou un autre niveau : **JSON**, avec les exercices existants. Un nouveau type d’exercice ou une évolution du moteur : **code**. L n’a plus d’exception dans le programme.

Les modules autonomes sont activables séparément ; leur insertion comme étapes d’une leçon mixte n’est pas fournie dans cette version. La remontée automatique des résultats tablette → parent reste également distincte : les résultats sont locaux, exportables/importables dans la sauvegarde.

## Références et contrôle

`docs/FORMAT_JSON.md` décrit les contrats ; `schemas/` fournit leurs schémas. `docs/EXTRACTION.md` détaille la provenance et les limites. `tests/report.json`, `tests/hosted-report.json` et `docs/VALIDATION.md` indiquent les vérifications réellement faites.

Références navigateur : MDN, *Service Worker API / Using Service Workers*, *Window.localStorage* et *Same-origin policy*, consultées le 7 septembre 2026. Le stockage est lié à l’origine ; le comportement des fichiers locaux n’est pas un mécanisme de transfert garanti entre applications.
