# Ma communication — outil de CAA (règles du projet)

Application de **Communication Alternative et Augmentée**, libre (AGPL-3.0),
**100 % locale / hors-ligne / RGPD**. Site statique HTML + JavaScript, **sans framework
ni étape de compilation**. Guide humain complet : voir `POUR-MODIFIER.md`.

## Règles NON négociables (à respecter à chaque changement)
- **Jamais moins de 49 cases** (≥ 7 colonnes). On adapte la PERCEPTION (zoom, contraste,
  espacement), jamais le NOMBRE de mots. Réduire le langage = interdit.
- **Aucune case sans pictogramme** : picto partout ; à défaut, bulle de parole originale.
  JAMAIS une carte-texte, JAMAIS un emoji dans la grille.
- **Ressources libres ET rediffusables uniquement** : Mulberry Symbols (CC BY-SA, avec
  attribution) + pictos originaux. **JAMAIS ARASAAC** (clause non-commerciale).
- **100 % local / hors-ligne / RGPD** : aucune donnée ne quitte l'appareil. Ne PAS assouplir
  la CSP (`connect-src 'self'` dans `index.html`). Aucun traceur, aucun appel réseau.
- **La personne décide** : toute option reste activable (oral/écrit, ancres, survol…),
  jamais imposée. L'outil ne choisit pas à la place de l'utilisateur.
- Respect du français, anti-validisme, pro-diversité, pro-LGBTQ+.

## Fichiers
- `index.html` (coquille + CSP + `?v=`), `app.js` (état, grille, réglages, accès),
  `grammar.js` (conjugaison à règles + accords), `sentence.js` (élision, contractions,
  négation, infinitif), `custom.js` (éditeur, scènes, pop-ups, ancres), `piper.js` (voix locale),
  `service-worker.js` (hors-ligne), `styles.css`, `vocab.default.json`, `dictionary.json`, `assets/`.
- `tests/run.html` = tests du moteur de français (garder VERTS).
- `build/build_vocab.py` (régénère le vocabulaire/pictos), `build/bump_version.py` (incrémente la version).

## Boucle de travail (TOUJOURS dans cet ordre)
1. Modifier le(s) fichier(s).
2. Si les DONNÉES ont changé : `python build/build_vocab.py` (sinon éditer `vocab.default.json`).
3. `python build/bump_version.py` (indispensable : sinon l'ancien cache reste).
4. Servir en local (`python -m http.server 8765`) → http://localhost:8765, vérifier **0 erreur console**.
5. Ouvrir `tests/run.html` → tout doit rester **vert**. Si tu touches au français : ajouter d'abord
   un contrat de test dans `tests/`, PUIS coder.

## Moteur de français
Conjugaison **à règles** (morphologie + irréguliers), pas une liste de formes. Toute évolution
du moteur se **verrouille par un test** (cas attendu dans `tests/`) pour éviter les régressions.
