diff --git a/.claude/rules/01-versions.md b/.claude/rules/01-versions.md index 5201eed..93d9db0 100644 --- a/.claude/rules/01-versions.md +++ b/.claude/rules/01-versions.md @@ -1,14 +1,10 @@ # Versions supportées -| Odoo | Python | Poetry | Statut | -|-------|----------|--------|------------| -| 18.0 | 3.12.10 | 2.1.3 | **Défaut** | -| 17.0 | 3.10.18 | 1.8.3 | Actif | -| 16.0 | 3.10.18 | 1.8.3 | Actif | -| 15.0 | 3.8.20 | 1.8.3 | Déprécié | -| 14.0 | 3.8.20 | 1.5.0 | Déprécié | -| 13.0 | 3.7.17 | 1.5.0 | Déprécié | -| 12.0 | 3.7.17 | 1.5.0 | Déprécié | +Odoo 12.0 à 18.0, **18.0 par défaut**. Les 12 à 15 sont dépréciées. -Configuration dans `conf/supported_version_erplibre.json`. -Fichiers de version : `.odoo-version`, `.erplibre-version`, `.poetry-version`, `.python-odoo-version`. +La correspondance Odoo ↔ Python ↔ Poetry fait autorité dans +`conf/supported_version_erplibre.json` (ses clés portent déjà le couple, ex. +`odoo18.0_python3.12.10`) — la lire plutôt que de mémoriser un tableau. + +Version active du checkout : `.odoo-version`, `.erplibre-version`, +`.poetry-version`, `.python-odoo-version`. diff --git a/.claude/rules/02-project-structure.md b/.claude/rules/02-project-structure.md deleted file mode 100644 index dffc4c0..0000000 --- a/.claude/rules/02-project-structure.md +++ /dev/null @@ -1,45 +0,0 @@ -# Structure du projet - -``` -erplibre/ -├── Makefile # Orchestrateur principal (inclut conf/make.*.Makefile) -├── run.sh / odoo_bin.sh # Lanceurs Odoo (venv + PYTHONPATH) -├── env_var.sh # Variables d'environnement globales -├── conf/ # Configuration : Makefiles modulaires, versions, manifests CSV -│ ├── make.installation.Makefile -│ ├── make.test.Makefile -│ ├── make.database.Makefile -│ ├── make.docker.Makefile -│ ├── make.code_generator.Makefile -│ ├── make.installation.poetry.Makefile -│ └── supported_version_erplibre.json -├── manifest/ # Manifests Google Repo (XML) par version Odoo -│ └── git_manifest_odoo{12..18}.0.xml -├── requirement/ # Dépendances par version -│ ├── pyproject.odooXX.0_pythonY.Z.toml -│ ├── poetry.odooXX.0_pythonY.Z.lock -│ └── requirements.odooXX.0_pythonY.Z.txt -├── script/ # Scripts utilitaires (32+ catégories) -│ ├── todo/ # CLI interactif principal (todo.py) -│ ├── database/ # Opérations DB (restore, migrate, image_db) -│ ├── addons/ # Gestion des modules (install, update, uninstall) -│ ├── code_generator/ # Génération de modules Odoo -│ ├── version/ # Changement de version -│ ├── git/ # Opérations Git et Google Repo -│ ├── maintenance/ # Formatage (black, isort, prettier) -│ ├── test/ # Tests parallèles + coverage -│ ├── docker/ # Build/run Docker -│ ├── poetry/ # Gestion Poetry -│ ├── deployment/ # Déploiement production -│ └── selenium/ # Tests web automatisés -├── docker/ # Dockerfiles + docker-compose par version -├── addons/ # Répertoire des addons (géré par Google Repo) -│ ├── OCA_*/ # Modules OCA -│ ├── ERPLibre_*/ # Modules ERPLibre -│ ├── TechnoLibre_*/ # Code generator + templates -│ └── MathBenTech_*/ # Modules spécialisés -├── odoo{12..18}.0/ # Sources Odoo par version -├── doc/ # Documentation (DEVELOPMENT, PRODUCTION, MIGRATION, etc.) -├── test/ # Framework de test -└── private/ # Fichiers privés (non versionné) -``` diff --git a/.claude/rules/04-code-conventions.md b/.claude/rules/04-code-conventions.md index 7238f5d..70b4204 100644 --- a/.claude/rules/04-code-conventions.md +++ b/.claude/rules/04-code-conventions.md @@ -1,21 +1,12 @@ # Conventions de code -## Python -- Formateur : **Black** (profil par défaut, ligne max 79 pour les modules Odoo) -- Imports : **isort** avec profil `black`, longueur de ligne 79 -- Linting : **Flake8** avec bugbear, max-line-length 80, max-complexity 16 -- Ignorer : E203, E501, W503 (compatibilité Black) +Le formatage et le lint sont entièrement décrits par les fichiers de +configuration du dépôt — les lire plutôt que de supposer : `.flake8`, +`.editorconfig`, et les sections `[tool.black]` / `[tool.isort]` de +`pyproject.toml`. `make format` applique l'ensemble. -## XML / JSON / YAML -- Formateur : **Prettier** (via npm) -- Indentation : 4 espaces (XML/CSS/JS), 2 espaces (JSON/YAML) - -## Fichiers -- Encodage : UTF-8 -- Fins de ligne : LF (Unix) -- Indentation : 4 espaces (Python, XML, CSS, JS), 2 espaces (JSON, YAML, RST, MD) -- Retour à la ligne final : oui -- Espaces en fin de ligne : supprimés +Prettier (via npm) formate XML/JSON/YAML ; `.editorconfig` donne les +indentations par type de fichier. ## Git - Branches : `develop` (développement), `master` (production) diff --git a/.claude/rules/05-environments.md b/.claude/rules/05-environments.md deleted file mode 100644 index cb8998a..0000000 --- a/.claude/rules/05-environments.md +++ /dev/null @@ -1,22 +0,0 @@ -# Architecture des environnements virtuels - -``` -.venv.erplibre/ # Venv ERPLibre (outils : repo, poetry, coverage) -.venv.odoo18/ # Venv Odoo 18 (Python 3.12) -.venv.odoo17/ # Venv Odoo 17 (Python 3.10) -.venv.odoo16/ # Venv Odoo 16 (Python 3.10) -.venv.odoo14/ # Venv Odoo 14 (Python 3.8) -.venv.odoo12/ # Venv Odoo 12 (Python 3.7) -``` - -Géré via **pyenv** pour les multiples versions de Python. - -## Système de dépendances - -Chaque version Odoo a son propre ensemble dans `requirement/` : -- `pyproject.odooXX.0_pythonY.Z.toml` — Configuration Poetry -- `poetry.odooXX.0_pythonY.Z.lock` — Lock file Poetry -- `requirements.odooXX.0_pythonY.Z.txt` — Requirements pip (fallback) -- `ignore_requirements.odooXX.0.txt` — Paquets à ignorer - -Mise à jour : `./script/poetry/poetry_update.py` diff --git a/.claude/rules/07-documentation.md b/.claude/rules/07-documentation.md index ded55b5..6e77eaf 100644 --- a/.claude/rules/07-documentation.md +++ b/.claude/rules/07-documentation.md @@ -1,55 +1,11 @@ # Documentation multilingue -La documentation est bilingue (anglais/français) via **mmg** (Multilingual Markdown Generator). +La documentation est bilingue via **mmg** : les sources sont les `.base.md`, +qui génèrent `FICHIER.md` (anglais) et `FICHIER.fr.md` (français). -## Fonctionnement -- Les fichiers sources sont les `.base.md` (contiennent les deux langues) -- `mmg` génère : `FICHIER.md` (anglais) et `FICHIER.fr.md` (français) -- Marqueurs : ``, ``, `` (blocs de code partagés) +- **Ne jamais modifier directement** un `.md` ou `.fr.md` généré : la + modification est perdue au prochain `make doc_markdown`. Éditer le + `.base.md` correspondant. -## Commandes -```bash -make doc_markdown # Regénérer toute la doc multilingue -``` - -## Convention -- **Ne jamais modifier directement** les fichiers `.md` ou `.fr.md` générés -- Toujours modifier le fichier `.base.md` correspondant, puis exécuter `make doc_markdown` -- Les blocs de code vont dans ``, le texte dans `` et `` -- En-tête obligatoire dans chaque `.base.md` : -``` - - - - -``` - -## Fichiers concernés (30 fichiers) -- Racine : `README`, `CHANGELOG`, `TODO` -- `doc/` : DEVELOPMENT, PRODUCTION, DISCOVER, RUN, MIGRATION, WINDOWS_INSTALLATION, FAQ, GIT_REPO, POETRY, RELEASE, UPDATE, CONTRIBUTION, HOWTO, TODO, CODE_GENERATOR -- `docker/` : README -- `script/*/` : database, deployment, fork_github_repo, nginx, restful, selenium (2), todo, odoo/migration -- `.github/ISSUE_TEMPLATE/` : bug_report, feature_request - -## Internationalisation du CLI TODO (i18n) - -Le CLI interactif `script/todo/todo.py` supporte le français et l'anglais. - -### Architecture -- **`script/todo/todo_i18n.py`** — Module de traduction (dictionnaire `TRANSLATIONS`, fonctions `t()`, `get_lang()`, `set_lang()`) -- Les chaînes traduisibles utilisent `t("clé")` au lieu de texte en dur -- Les entrées de `todo.json` peuvent avoir un champ `prompt_description_key` résolu via `t()` (fallback sur `prompt_description`) - -### Résolution de la langue (priorité) -1. Variable d'environnement `EL_LANG` (définie dans `env_var.sh`, défaut `"fr"`) -2. Défaut : `"fr"` - -### Comportement -- Première exécution : prompt bilingue demande à l'utilisateur de choisir sa langue -- Le choix est persisté dans `env_var.sh` -- Changement de langue possible via le menu Execute > Langue/Language - -### Ajouter une traduction -1. Ajouter la clé dans `TRANSLATIONS` de `todo_i18n.py` avec les valeurs `"fr"` et `"en"` -2. Remplacer la chaîne en dur par `t("ma_clé")` dans `todo.py` -3. Pour les entrées JSON : ajouter `"prompt_description_key": "ma_clé"` dans `todo.json` +Le mode d'emploi complet (marqueurs, en-tête obligatoire, i18n du CLI TODO) +est dans la skill `erplibre-doc-i18n`. diff --git a/.claude/rules/03-commands.md b/.claude/skills/erplibre-commands/SKILL.md similarity index 90% rename from .claude/rules/03-commands.md rename to .claude/skills/erplibre-commands/SKILL.md index d6c2d24..1287bb7 100644 --- a/.claude/rules/03-commands.md +++ b/.claude/skills/erplibre-commands/SKILL.md @@ -1,4 +1,8 @@ -# Commandes essentielles +--- +name: erplibre-commands +description: Commandes ERPLibre — changer de version Odoo, lancer/tester une instance, opérations base de données, tester un module précis avec couverture, formatage, Docker, Google Repo, installation. À charger dès qu'une commande make ou un script du dépôt est nécessaire. +--- + ## Changement de version Odoo ```bash diff --git a/.claude/skills/erplibre-doc-i18n/SKILL.md b/.claude/skills/erplibre-doc-i18n/SKILL.md new file mode 100644 index 0000000..9eceef6 --- /dev/null +++ b/.claude/skills/erplibre-doc-i18n/SKILL.md @@ -0,0 +1,60 @@ +--- +name: erplibre-doc-i18n +description: Documentation bilingue ERPLibre (mmg, fichiers .base.md) et internationalisation du CLI TODO (todo_i18n.py, clés TRANSLATIONS). À charger pour rédiger ou régénérer de la documentation, ou pour ajouter une chaîne traduisible au CLI. +--- + +# Documentation multilingue + +La documentation est bilingue (anglais/français) via **mmg** (Multilingual +Markdown Generator). + +## Fonctionnement +- Les fichiers sources sont les `.base.md` (contiennent les deux langues) +- `mmg` génère : `FICHIER.md` (anglais) et `FICHIER.fr.md` (français) +- Marqueurs : ``, ``, `` (blocs de code partagés) + +## Commandes +```bash +make doc_markdown # Regénérer toute la doc multilingue +``` + +## Convention +- Toujours modifier le fichier `.base.md` correspondant, puis exécuter `make doc_markdown` +- Les blocs de code vont dans ``, le texte dans `` et `` +- En-tête obligatoire dans chaque `.base.md` : +``` + + + + +``` + +> Les fichiers concernés se listent par `find . -name '*.base.md'`. + +## Internationalisation du CLI TODO (i18n) + +Le CLI interactif `script/todo/todo.py` supporte le français et l'anglais. + +### Architecture +- **`script/todo/todo_i18n.py`** — Module de traduction (dictionnaire `TRANSLATIONS`, fonctions `t()`, `get_lang()`, `set_lang()`) +- Les chaînes traduisibles utilisent `t("clé")` au lieu de texte en dur +- Les entrées de `todo.json` peuvent avoir un champ `prompt_description_key` résolu via `t()` (fallback sur `prompt_description`) + +### Résolution de la langue (priorité) +1. `EL_LANG` dans `env_var.sh` (lu en premier, défaut `"fr"`) +2. Variable d'environnement `EL_LANG` +3. Défaut : `"fr"` + +### Comportement +- Première exécution : prompt bilingue demande à l'utilisateur de choisir sa langue +- Le choix est persisté dans `env_var.sh` +- Changement de langue possible via TODO > Configuration > Langue + +### Ajouter une traduction +1. Ajouter la clé dans `TRANSLATIONS` de `todo_i18n.py` avec les valeurs `"fr"` et `"en"` +2. Remplacer la chaîne en dur par `t("ma_clé")` dans `todo.py` +3. Pour les entrées JSON : ajouter `"prompt_description_key": "ma_clé"` dans `todo.json` + +> La clé EST la chaîne anglaise. Vérifier l'absence de doublon dans +> `TRANSLATIONS` avant d'ajouter : une clé en double écrase silencieusement +> la précédente. diff --git a/CLAUDE.md b/CLAUDE.md index deb450d..6a995d3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -14,9 +14,11 @@ Version Odoo par défaut : **18.0** (support officiel ERPLibre 1.6.0) - Toujours vérifier la version Odoo active avant de modifier du code (`cat .odoo-version`) - Les addons sont dans `addons/` et gérés par Google Repo — ne pas modifier la structure des dépôts -- Utiliser le venv approprié : `.venv.odoo{XX}/bin/python` pour le code Odoo +- Utiliser le venv approprié pour le code Odoo. Son nom porte les DEUX versions + (`.venv.odoo18.0_python3.12.10/bin/python`) : le retrouver par + `ls -d .venv.odoo*` plutôt que de le composer de tête - Les scripts ERPLibre utilisent `.venv.erplibre/bin/python` -- Le Makefile principal inclut 12 fragments depuis `conf/make.*.Makefile` +- Le Makefile principal inclut des fragments depuis `conf/make.*.Makefile` - Les fichiers privés vont dans `private/` (non versionné) - La DB PostgreSQL par défaut est sur le port 5432, mot de passe admin : `admin` - Port Odoo par défaut : 8069, longpolling : 8072 @@ -36,12 +38,19 @@ Les instructions détaillées sont dans `.claude/rules/` : | Fichier | Contenu | |---------|---------| -| `01-versions.md` | Versions Odoo/Python/Poetry supportées | -| `02-project-structure.md` | Arborescence du projet | -| `03-commands.md` | Commandes essentielles (make, scripts) | -| `04-code-conventions.md` | Conventions Python, XML, fichiers, Git | -| `05-environments.md` | Venvs, pyenv, système de dépendances | +| `01-versions.md` | Versions Odoo supportées, où lit-on la correspondance | +| `04-code-conventions.md` | Où sont les configs de format, conventions Git | | `06-code-generator.md` | Génération de modules Odoo | -| `07-documentation.md` | Documentation multilingue (mmg) + i18n CLI | +| `07-documentation.md` | Interdit : ne pas éditer les `.md` générés | | `08-deployment.md` | Docker, systemd, nginx, SSL, DNS | | `09-workflow.md` | Workflow orchestration + task management | + +Chargées à la demande (`.claude/skills/`) : + +| Skill | Contenu | +|-------|---------| +| `erplibre-commands` | Commandes make et scripts : versions, run, tests, DB, Docker, repo | +| `erplibre-doc-i18n` | Mode d'emploi mmg (`.base.md`) et i18n du CLI TODO | + +L'arborescence et la liste des venvs ne sont plus documentées : `ls` et +`ls -d .venv.*` en donnent l'état réel, la doc dérivait de la réalité.