extraire_svg_graphique_by_3d annote « -> Optional[str] » mais le module
n'importait pas Optional -> « NameError: name 'Optional' is not defined »
au chargement. Ajout de « from typing import Optional ».
--- EN ---
extraire_svg_graphique_by_3d is annotated « -> Optional[str] » but the module
never imported Optional -> « NameError: name 'Optional' is not defined » at
import time. Added « from typing import Optional ».
Assisted-by: Claude Opus 4.8
webdriver.Firefox échouait : « InvalidArgumentException: Argument
--remote-allow-system-access can't be set via capabilities ». Cet argument
(ajouté pour le Firefox snap d'Ubuntu) est désormais REFUSÉ via les
capabilities par les geckodriver récents, qui gèrent seuls l'accès système
du snap. Il cassait donc TOUS les setups sur geckodriver récent (ici Arch
sans snap). On ne le passe plus.
--- EN ---
webdriver.Firefox was failing with « InvalidArgumentException: Argument
--remote-allow-system-access can't be set via capabilities ». That argument,
added for Ubuntu's snap Firefox, is now REFUSED through capabilities by
recent geckodriver versions, which handle the snap's system access on their
own. It therefore broke EVERY setup running a recent geckodriver — here Arch,
with no snap at all. It is no longer passed.
Assisted-by: Claude Opus 4.8
Installation was very noisy: poetry ran "install -vvv" and repo sync /
git daemon ran with -v/--verbose. They are now quiet by default
(poetry -q, repo sync -q, no git daemon --verbose) and the detailed
logs come back only when EL_VERBOSE=1.
Applied to install_locally.sh (poetry) and every manifest script (repo
sync + git daemon). env_var.sh documents EL_VERBOSE and respects a value
already set in the environment, so "EL_VERBOSE=1 make install_odoo_18"
works.
--- FR ---
L'installation était très bavarde : poetry tournait en « install -vvv », et
repo sync comme git daemon en -v/--verbose. Ils sont désormais silencieux par
défaut — poetry -q, repo sync -q, plus de git daemon --verbose — et les
journaux détaillés ne reviennent qu'avec EL_VERBOSE=1.
Appliqué à install_locally.sh (poetry) et à tous les scripts de manifest
(repo sync et git daemon). env_var.sh documente EL_VERBOSE et respecte une
valeur déjà passée dans l'environnement, si bien que « EL_VERBOSE=1 make
install_odoo_18 » fonctionne.
Assisted-by: Claude Opus 4.8
Choosing « remote » as the migration source raised AttributeError: the method
had moved to DatabaseManager, and todo_upgrade still called it on the TODO
object. The remote path was therefore unusable — the only way to start a
migration from a production backup rather than a local zip.
--- FR ---
Choisir « remote » comme source de migration levait une AttributeError : la
méthode avait été déplacée vers DatabaseManager, et todo_upgrade l'appelait
toujours sur l'objet TODO. Le chemin distant était donc inutilisable — le seul
moyen de démarrer une migration depuis une sauvegarde de production plutôt que
depuis un zip local.
Assisted-by: Claude Opus 5
@capacitor/cli v8.x requires Node.js >=22.0.0. The install script
was pinning NODE_MAJOR=20, causing a fatal error when installing
the mobile app via todo.py.
--- FR ---
@capacitor/cli v8.x exige Node.js >= 22.0.0. Le script d'installation
figeait NODE_MAJOR=20, d'où une erreur fatale à l'installation de
l'application mobile depuis todo.py.
Assisted-by: Claude Sonnet 4.6
The path was listed for every version, but git_manifest_odoo18.0.xml does not
declare that repository — only 12.0 to 17.0 and the extra 18.0 manifest do. On
Odoo 18 without the extra modules, repo never syncs the directory, so Odoo was
handed an addons path entry that does not exist.
--- FR ---
Le chemin était listé pour toutes les versions, alors que
git_manifest_odoo18.0.xml ne déclare pas ce dépôt — seuls les manifestes de
12.0 à 17.0 et le manifeste extra de 18.0 le font. Sur Odoo 18 sans les modules
extra, repo ne synchronise jamais ce répertoire : on donnait donc à Odoo une
entrée de chemin d'addons qui n'existe pas.
Assisted-by: Claude Opus 5
Poetry install and git-repo sync are independent (different write
paths). Running them sequentially wastes time. Split install_locally.sh
into EL_PHASE=setup|poetry|all phases so install_locally_dev.sh can
background the repo sync while poetry runs in the foreground, reducing
total install time by up to 50% on slow connections.
Set EL_PARALLEL_INSTALL=0 to restore sequential behavior for debugging.
--- FR ---
L'installation poetry et la synchronisation git-repo sont indépendantes —
elles écrivent à des endroits différents — et les enchaîner fait perdre du
temps. install_locally.sh est découpé en phases EL_PHASE=setup|poetry|all
pour qu'install_locally_dev.sh puisse lancer la synchronisation des dépôts
en arrière-plan pendant que poetry tourne au premier plan, réduisant la
durée totale jusqu'à 50 % sur une connexion lente.
EL_PARALLEL_INSTALL=0 rétablit le comportement séquentiel pour le débogage.
Assisted-by: Claude Sonnet 4.6
CybroOdoo repos are large and slow to clone, making them unsuitable
for default installation. Moves them to opt-in per-version extra
manifests, introduces .erplibre-state.json to track installation
options per Odoo version, and surfaces the choice in the TODO CLI
sub-menu. Switch auto-detects extra from state and warns when no
state is recorded.
--- FR ---
Les dépôts CybroOdoo sont volumineux et lents à cloner, ce qui les rend
inadaptés à une installation par défaut. Ils passent dans des manifestes
extra par version, activés à la demande ; .erplibre-state.json est
introduit pour suivre les options d'installation de chaque version d'Odoo,
et le choix apparaît dans le sous-menu du CLI TODO. Le changement de
version détecte l'option extra depuis cet état et avertit quand aucun état
n'est enregistré.
Assisted-by: Claude Sonnet 4.6
make version had no visibility into whether the mobile project was
active. Add detection via presence of mobile/erplibre_home_mobile
directory (cloned by repo sync --with_mobile) and display its status
alongside the existing Odoo/Python/Poetry version info.
--- FR ---
make version n'avait aucune visibilité sur l'activité du projet mobile.
Ajoute une détection par la présence du répertoire
mobile/erplibre_home_mobile, cloné par repo sync --with_mobile, et affiche
son état à côté des versions Odoo, Python et Poetry déjà présentes.
Assisted-by: Claude Sonnet 4.6
The template wrote « Generated by Claude Code », the form AI_POLICY.md
replaces with the Assisted-by trailer. Three defects rode along: the model
came from ~/.claude/settings.json, which has no model key here, so it
declared the sonnet default rather than the truth; --author alone failed on
the committer, this checkout having no git identity; and [UPD] was missing
from the tag table while being the most used tag, 134 of the last 400.
The model now comes from the session transcript, the only source that
follows a /model switch — checked, it prints Claude Opus 5. The timezone is
left to the system so contributors keep their own, and the menu substitutes
name and email separately, the placeholders no longer being adjacent.
--- FR ---
Le gabarit écrivait « Generated by Claude Code », la forme que AI_POLICY.md
remplace par le trailer Assisted-by. Trois défauts l'accompagnaient : le
modèle venait de ~/.claude/settings.json, sans clé model ici, si bien qu'il
déclarait le défaut sonnet plutôt que la vérité ; --author seul échouait sur
le committer, ce checkout n'ayant aucune identité git ; et [UPD] manquait au
tableau des tags alors qu'il est le plus utilisé, 134 des 400 derniers.
Le modèle vient désormais de la transcription de session, seule source qui
suive un changement par /model — vérifié, elle rend Claude Opus 5. Le fuseau
est laissé au système, pour que chaque contributeur garde le sien, et le
menu substitue nom et courriel séparément, les jetons n'étant plus accolés.
Assisted-by: Claude Opus 5
Add interactive sshfs mount setup to the system configuration
menu. Users can enter SSH host details manually or select from
~/.ssh/config, then configure a persistent mount with fstab.
Includes i18n strings for all new UI text.
Generated by Claude Code 2.1.81 model claude-sonnet-4-6
Allow users to deploy ERPLibre to a local directory
via git clone from the TODO interactive menu, making
onboarding simpler for new developers.
Generated by Claude Code 2.1.74 model claude-opus-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
Replace snake_case i18n keys with their English
translation so developers can read the code without
cross-referencing the translations dictionary.
Remove 5 obsolete duplicate entries.
Generated by Claude Code 2.1.74 model claude-opus-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
Refactor single commit setup into a generic deployment
mechanism for Claude commands, allowing easy addition of
new commands. Add todo_add_command template and an option
to list installed custom commands with their dates.
Generated by Claude Code 2.1.74 model claude-opus-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
Add git remote add command with default name "localhost",
git editor vim configuration via todo.json, and a Claude
automation tool to dynamically add commands to todo.json.
Support new bash_command key in execute_from_configuration.
Generated by Claude Code 2.1.74 model claude-opus-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
Integrate RTK (Rust Token Killer) into the interactive CLI
to let users install, configure, and monitor token savings
directly from the ERPLibre todo interface.
Generated by Claude Code 2.1.74 model claude-sonnet-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
Reflect the current year in all TechnoLibre
license headers across script/, test/, and docker/.
Generated by Claude Code 2.1.74 model claude-sonnet-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
Menu items were in arbitrary order making it hard to
find specific tools as the list grew to 14 entries.
Generated by Claude Code 2.1.72 model claude-sonnet-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
The erplibre root repo was appended last and hard to
find among 141 entries. Sort the list so repos are
easy to locate by name.
Generated by Claude Code 2.1.72 model claude-sonnet-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
The root repo clone command showed "." as target path
which was confusing and easy to miss in the list.
Display "erplibre" instead for clarity.
Generated by Claude Code 2.1.72 model claude-sonnet-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
Repos like odoo and OpenUpgrade blocked for 5+ minutes
trying to unshallow from GitHub (~3GB). Push shallow
by default with receive.shallowUpdate on bare repos.
Add --unshallow flag to opt into full history fetch.
Generated by Claude Code 2.1.72 model claude-sonnet-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
Sequential processing of 100+ repos was slow. Use
asyncio with semaphore-bounded concurrency to run
init, remote and push actions in parallel. New -j flag
controls max parallel jobs (default: 8).
Generated by Claude Code 2.1.72 model claude-sonnet-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
The root repo (erplibre/erplibre) was missing from the
local git server because it is not in the Google Repo
manifest. Include it so a full clone of the platform
is possible from the local server across all 4 actions.
Generated by Claude Code 2.1.72 model claude-sonnet-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
Replace raw subprocess.Popen and manual signal handling
with Execute.exec_command_live for consistency with
other refactored scripts.
Generated by Claude Code 2.1.72 model claude-sonnet-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
Remove Hungarian notation prefixes (lst_, dct_) from variable
names in git_repo_manifest, git_repo_update_group, and their
tests for better readability and consistency with the codebase
refactoring effort.
Generated by Claude Code 2.1.72 model claude-sonnet-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
Replace Hungarian notation prefixes (lst_, dct_) with
descriptive English names for better readability across
git and todo modules.
Generated by Claude Code 2.1.72 model claude-sonnet-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>
Reduce GitTool class size by moving URL transformation
and GitHub API logic into dedicated repo_url and
github_api modules for better separation of concerns.
Generated by Claude Code 2.1.72 model claude-sonnet-4-6
Co-Authored-By: Mathieu Benoit <mathben@technolibre.ca>