erplibre/CLAUDE.md

61 lines
2.9 KiB
Markdown
Raw Normal View History

2026-03-17 04:00:55 -04:00
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## ERPLibre Multi-Version Odoo Platform
2026-02-15 13:58:08 -05:00
## Projet
ERPLibre est un fork communautaire d'Odoo Community Edition (OCE) supportant les versions 12 à 18.
Version actuelle : **1.6.0** | Licence : **AGPL-3.0+**
Version Odoo par défaut : **18.0** (support officiel ERPLibre 1.6.0)
## Points d'attention pour Claude
- 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
[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. --- FR --- Chaque session payait environ 4 000 jetons pour CLAUDE.md et .claude/rules/, et une partie de ce contenu ne décrivait plus ce dépôt : CLAUDE.md et 05-environments.md donnaient .venv.odoo18/bin/python — un chemin qui n'existe pas. Le vrai porte les DEUX versions, .venv.odoo18.0_python3.12.10. 02-project-structure.md annonçait addons/ et odoo12.0/, absents du checkout. C'est la raison des coupes, plus encore que le nombre de jetons : les fichiers avaient dérivé par rapport au dépôt, ce que « ls » ne peut pas faire. Ce qu'une session peut reconstruire en lisant le code est désormais laissé au code. 02-project-structure.md supprimé — une arborescence que ls donne, et donne juste 05-environments.md supprimé — une liste de venvs simplement fausse 04-code-conventions.md réduit à un renvoi vers .flake8, .editorconfig et pyproject.toml, qui portent déjà toutes les valeurs qu'il répétait, plus les conventions Git, qu'ils ne portent pas 01-versions.md tableau abandonné au profit du renvoi vers conf/supported_version_erplibre.json, dont les clés apparient déjà Odoo et Python Deux blocs passent en chargement paresseux — leur corps ne coûte rien tant qu'il n'est pas invoqué : 03-commands.md -> skill erplibre-commands, conservée entière : il n'existe pas de cible « make help », et les recettes de test par module portent des drapeaux que personne ne devinerait 07-documentation.md -> skill erplibre-doc-i18n pour le mode d'emploi, tandis que l'interdiction « ne jamais éditer un .md généré » RESTE dans les règles : une règle qui doit tenir en permanence ne peut pas vivre dans un fichier chargé à la demande Consignes résidentes : environ 3 997 -> 1 939 jetons estimés par session. Assisted-by: Claude Opus 4.8
2026-08-02 03:16:36 -04:00
- 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
2026-02-15 13:58:08 -05:00
- Les scripts ERPLibre utilisent `.venv.erplibre/bin/python`
[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. --- FR --- Chaque session payait environ 4 000 jetons pour CLAUDE.md et .claude/rules/, et une partie de ce contenu ne décrivait plus ce dépôt : CLAUDE.md et 05-environments.md donnaient .venv.odoo18/bin/python — un chemin qui n'existe pas. Le vrai porte les DEUX versions, .venv.odoo18.0_python3.12.10. 02-project-structure.md annonçait addons/ et odoo12.0/, absents du checkout. C'est la raison des coupes, plus encore que le nombre de jetons : les fichiers avaient dérivé par rapport au dépôt, ce que « ls » ne peut pas faire. Ce qu'une session peut reconstruire en lisant le code est désormais laissé au code. 02-project-structure.md supprimé — une arborescence que ls donne, et donne juste 05-environments.md supprimé — une liste de venvs simplement fausse 04-code-conventions.md réduit à un renvoi vers .flake8, .editorconfig et pyproject.toml, qui portent déjà toutes les valeurs qu'il répétait, plus les conventions Git, qu'ils ne portent pas 01-versions.md tableau abandonné au profit du renvoi vers conf/supported_version_erplibre.json, dont les clés apparient déjà Odoo et Python Deux blocs passent en chargement paresseux — leur corps ne coûte rien tant qu'il n'est pas invoqué : 03-commands.md -> skill erplibre-commands, conservée entière : il n'existe pas de cible « make help », et les recettes de test par module portent des drapeaux que personne ne devinerait 07-documentation.md -> skill erplibre-doc-i18n pour le mode d'emploi, tandis que l'interdiction « ne jamais éditer un .md généré » RESTE dans les règles : une règle qui doit tenir en permanence ne peut pas vivre dans un fichier chargé à la demande Consignes résidentes : environ 3 997 -> 1 939 jetons estimés par session. Assisted-by: Claude Opus 4.8
2026-08-02 03:16:36 -04:00
- Le Makefile principal inclut des fragments depuis `conf/make.*.Makefile`
2026-02-15 13:58:08 -05:00
- 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
- Pour les commits : suivre le format `[TYPE] description` (ex: `[FIX]`, `[UPD]`, `[ADD]`, `[REM]`)
- Pour la documentation : modifier les `.base.md`, jamais les `.md` ou `.fr.md` directement
- Outil mmg disponible via `source .venv.erplibre/bin/activate && mmg`
[FIX] deep_qemu : listes apt, sous-réseau par étage, étape muette Trois défauts trouvés en une heure par le premier lancement réel — c'est ce qu'un test d'intégration doit produire. 1. « --setup-host » a échoué en ZÉRO seconde sur « Unable to locate package qemu-system-x86 », alors que le paquet existe : la VM venait de démarrer et ses listes ne portaient que bookworm-security. Le message envoyait chercher des paquets, pas des listes. Même parade qu'install_proxmox.sh — arrêter apt-daily, puis réessayer. 2. Le réseau « default » de libvirt sert 192.168.122.0/24 à TOUS les étages. L'étage 2, dont l'adresse VENAIT de ce réseau, voyait son propre net-start refusé : « Network is already in use by interface enp1s0 ». Un invité qui vit dans un réseau ne peut pas servir le même. Chaque étage prend le sien, déduit de sa profondeur absolue, et le REDÉFINIT avant de le démarrer. 3. Le mien : l'extraction du moteur avait coupé preparer_systeme sur le « return False » de sa boucle, sans son « return True ». La fonction rendait None, donc l'étape échouait SANS RIEN DIRE, et les deux piles étaient cassées. L'essai à blanc ne pouvait pas le voir — il sort avant. Un test d'AST interdit désormais qu'une étape retombe sur None. long_test/ était introuvable hors du menu : une ligne dans CLAUDE.md, trois entrées au CHANGELOG, deux sections au README. --- EN --- Three defects found in one hour by the first real run — which is what an integration test is for. 1. "--setup-host" failed in ZERO seconds on "Unable to locate package qemu-system-x86" though the package exists: the VM had just booted and its lists carried only bookworm-security. The message sent us looking for packages, not for lists. Same remedy as install_proxmox.sh — stop apt-daily, then retry. 2. libvirt's "default" network serves 192.168.122.0/24 at EVERY level. Level 2, whose own address CAME from that network, had its net-start refused: "Network is already in use by interface enp1s0". A guest living inside a network cannot serve the same one. Each level takes its own, derived from its absolute depth, and REDEFINES it before starting it. 3. Mine: extracting the engine had cut preparer_systeme at its loop's "return False", without the final "return True". The function returned None, so the step failed SAYING NOTHING, and both stacks were broken. The dry run could not see it — it exits earlier. An AST test now forbids a step from falling through to None. long_test/ was undiscoverable outside the menu: one line in CLAUDE.md, three CHANGELOG entries, two README sections. Assisted-by: claude-opus-5 (cherry picked from commit e46bad408143f7511a04ffdc6a20efdb785f4b5e)
2026-08-28 03:52:21 -04:00
- Les tests qui créent de VRAIES machines vivent dans `long_test/` et non dans
`test/` : le lanceur unitaire balaie `test/test_*.py` et doit rester lançable
en quelques secondes, même sans virtualisation. Ils durent des heures et se
défont par `--detruire` — voir `long_test/README.md`
2026-03-07 02:30:59 -05:00
## Core Principles
- **Simplicity First**: Make every change as simple as possible. Impact minimal code.
- **No Laziness**: Find root causes. No temporary fixes. Senior developer standards.
- **Minimal Impact**: Changes should only touch what's necessary. Avoid introducing bugs.
## Règles détaillées
Les instructions détaillées sont dans `.claude/rules/` :
| Fichier | Contenu |
|---------|---------|
[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. --- FR --- Chaque session payait environ 4 000 jetons pour CLAUDE.md et .claude/rules/, et une partie de ce contenu ne décrivait plus ce dépôt : CLAUDE.md et 05-environments.md donnaient .venv.odoo18/bin/python — un chemin qui n'existe pas. Le vrai porte les DEUX versions, .venv.odoo18.0_python3.12.10. 02-project-structure.md annonçait addons/ et odoo12.0/, absents du checkout. C'est la raison des coupes, plus encore que le nombre de jetons : les fichiers avaient dérivé par rapport au dépôt, ce que « ls » ne peut pas faire. Ce qu'une session peut reconstruire en lisant le code est désormais laissé au code. 02-project-structure.md supprimé — une arborescence que ls donne, et donne juste 05-environments.md supprimé — une liste de venvs simplement fausse 04-code-conventions.md réduit à un renvoi vers .flake8, .editorconfig et pyproject.toml, qui portent déjà toutes les valeurs qu'il répétait, plus les conventions Git, qu'ils ne portent pas 01-versions.md tableau abandonné au profit du renvoi vers conf/supported_version_erplibre.json, dont les clés apparient déjà Odoo et Python Deux blocs passent en chargement paresseux — leur corps ne coûte rien tant qu'il n'est pas invoqué : 03-commands.md -> skill erplibre-commands, conservée entière : il n'existe pas de cible « make help », et les recettes de test par module portent des drapeaux que personne ne devinerait 07-documentation.md -> skill erplibre-doc-i18n pour le mode d'emploi, tandis que l'interdiction « ne jamais éditer un .md généré » RESTE dans les règles : une règle qui doit tenir en permanence ne peut pas vivre dans un fichier chargé à la demande Consignes résidentes : environ 3 997 -> 1 939 jetons estimés par session. Assisted-by: Claude Opus 4.8
2026-08-02 03:16:36 -04:00
| `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 |
[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. --- FR --- Chaque session payait environ 4 000 jetons pour CLAUDE.md et .claude/rules/, et une partie de ce contenu ne décrivait plus ce dépôt : CLAUDE.md et 05-environments.md donnaient .venv.odoo18/bin/python — un chemin qui n'existe pas. Le vrai porte les DEUX versions, .venv.odoo18.0_python3.12.10. 02-project-structure.md annonçait addons/ et odoo12.0/, absents du checkout. C'est la raison des coupes, plus encore que le nombre de jetons : les fichiers avaient dérivé par rapport au dépôt, ce que « ls » ne peut pas faire. Ce qu'une session peut reconstruire en lisant le code est désormais laissé au code. 02-project-structure.md supprimé — une arborescence que ls donne, et donne juste 05-environments.md supprimé — une liste de venvs simplement fausse 04-code-conventions.md réduit à un renvoi vers .flake8, .editorconfig et pyproject.toml, qui portent déjà toutes les valeurs qu'il répétait, plus les conventions Git, qu'ils ne portent pas 01-versions.md tableau abandonné au profit du renvoi vers conf/supported_version_erplibre.json, dont les clés apparient déjà Odoo et Python Deux blocs passent en chargement paresseux — leur corps ne coûte rien tant qu'il n'est pas invoqué : 03-commands.md -> skill erplibre-commands, conservée entière : il n'existe pas de cible « make help », et les recettes de test par module portent des drapeaux que personne ne devinerait 07-documentation.md -> skill erplibre-doc-i18n pour le mode d'emploi, tandis que l'interdiction « ne jamais éditer un .md généré » RESTE dans les règles : une règle qui doit tenir en permanence ne peut pas vivre dans un fichier chargé à la demande Consignes résidentes : environ 3 997 -> 1 939 jetons estimés par session. Assisted-by: Claude Opus 4.8
2026-08-02 03:16:36 -04:00
| `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 |
[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. --- FR --- Chaque session payait environ 4 000 jetons pour CLAUDE.md et .claude/rules/, et une partie de ce contenu ne décrivait plus ce dépôt : CLAUDE.md et 05-environments.md donnaient .venv.odoo18/bin/python — un chemin qui n'existe pas. Le vrai porte les DEUX versions, .venv.odoo18.0_python3.12.10. 02-project-structure.md annonçait addons/ et odoo12.0/, absents du checkout. C'est la raison des coupes, plus encore que le nombre de jetons : les fichiers avaient dérivé par rapport au dépôt, ce que « ls » ne peut pas faire. Ce qu'une session peut reconstruire en lisant le code est désormais laissé au code. 02-project-structure.md supprimé — une arborescence que ls donne, et donne juste 05-environments.md supprimé — une liste de venvs simplement fausse 04-code-conventions.md réduit à un renvoi vers .flake8, .editorconfig et pyproject.toml, qui portent déjà toutes les valeurs qu'il répétait, plus les conventions Git, qu'ils ne portent pas 01-versions.md tableau abandonné au profit du renvoi vers conf/supported_version_erplibre.json, dont les clés apparient déjà Odoo et Python Deux blocs passent en chargement paresseux — leur corps ne coûte rien tant qu'il n'est pas invoqué : 03-commands.md -> skill erplibre-commands, conservée entière : il n'existe pas de cible « make help », et les recettes de test par module portent des drapeaux que personne ne devinerait 07-documentation.md -> skill erplibre-doc-i18n pour le mode d'emploi, tandis que l'interdiction « ne jamais éditer un .md généré » RESTE dans les règles : une règle qui doit tenir en permanence ne peut pas vivre dans un fichier chargé à la demande Consignes résidentes : environ 3 997 -> 1 939 jetons estimés par session. Assisted-by: Claude Opus 4.8
2026-08-02 03:16:36 -04:00
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é.