[REF] claude: trim the always-loaded guidance, and fix what it got wrong

Every session paid ~4 000 tokens for CLAUDE.md and .claude/rules/, and part of
that content no longer described this repository:

  CLAUDE.md and 05-environments.md gave .venv.odoo18/bin/python — a path that
  does not exist. The real one carries BOTH versions,
  .venv.odoo18.0_python3.12.10. 02-project-structure.md announced addons/ and
  odoo12.0/, absent from the checkout.

That is the reason for the cuts, more than the token count: the files drifted
from the repository, while « ls » cannot. What a session can rebuild by
reading the code is now left to the code.

  02-project-structure.md   deleted — a tree that ls gives, and gives right
  05-environments.md        deleted — a venv list that was simply false
  04-code-conventions.md    reduced to a pointer at .flake8, .editorconfig and
                            pyproject.toml, which already hold every value it
                            repeated, plus the Git conventions, which they
                            do not
  01-versions.md            table dropped for the pointer at
                            conf/supported_version_erplibre.json, whose keys
                            already pair Odoo with Python

Two blocks move to lazy loading — their body costs nothing until invoked:

  03-commands.md      -> skill erplibre-commands (kept whole: there is no
                         « make help » target, and the per-module test recipes
                         carry flags nobody would guess)
  07-documentation.md -> skill erplibre-doc-i18n for the how-to, while the
                         prohibition « never edit a generated .md » STAYS in
                         the rules: a rule that must hold at all times cannot
                         live in a file loaded on demand

Resident guidance: ~3 997 -> ~1 939 est. tokens per session.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Mathieu Benoit 2026-08-02 03:16:36 -04:00
parent 32d25b5344
commit f2da91b0fe
8 changed files with 102 additions and 153 deletions

View file

@ -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`.

View file

@ -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é)
```

View file

@ -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)

View file

@ -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`

View file

@ -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 : `<!-- [en] -->`, `<!-- [fr] -->`, `<!-- [common] -->` (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 `<!-- [common] -->`, le texte dans `<!-- [en] -->` et `<!-- [fr] -->`
- En-tête obligatoire dans chaque `.base.md` :
```
<!---------------------------->
<!-- multilingual suffix: en, fr -->
<!-- no suffix: en -->
<!---------------------------->
```
## 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`.

View file

@ -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

View file

@ -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 : `<!-- [en] -->`, `<!-- [fr] -->`, `<!-- [common] -->` (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 `<!-- [common] -->`, le texte dans `<!-- [en] -->` et `<!-- [fr] -->`
- En-tête obligatoire dans chaque `.base.md` :
```
<!---------------------------->
<!-- multilingual suffix: en, fr -->
<!-- no suffix: en -->
<!---------------------------->
```
> 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.

View file

@ -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é.