erplibre/script/todo
Mathieu Benoit b0c26caa6a [IMP] todo: icons on the TUI form and classic questions choices
The interface chooser of the QEMU deployment and of the Odoo migration,
and the matching preferences in Configuration, read as two plain lines.
The TUI form now carries a clipboard icon and the line by line questions
a speech balloon, in both languages. Both are single code point emoji,
without the variation selector that shifts alignment on some terminals.
Checked: both labels render with their icon in French and English, and
test_todo_i18n passes.

--- FR ---

[IMP] todo : icônes sur les choix formulaire TUI et questions classiques

Le choix d'interface du déploiement QEMU et de la migration Odoo, et les
préférences correspondantes de Configuration, se lisaient comme deux
lignes nues. Le formulaire TUI porte désormais un presse-papiers et les
questions ligne par ligne une bulle, dans les deux langues. Ce sont des
emoji d'un seul point de code, sans le sélecteur de variante qui décale
l'alignement sur certains terminaux.
Vérifié : les deux libellés s'affichent avec leur icône en français et
en anglais, et test_todo_i18n passe.

Assisted-by: Claude Opus 5.5
2026-09-25 05:37:03 -04:00
..
assistant [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
mail [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
assistant_menu.py [FIX] outillage : désimbriquer les f-strings que seul 3.12 sait lire 2026-09-24 13:56:57 -04:00
auto_ask.py [UPD] invites : 15 secondes pour décider, et le fichier nomme la base 2026-08-29 02:11:04 -04:00
database_manager.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
deploy_form_extras.py [IMP] qemu deploy : pré-configurer la VM, et dire ce qui s'y installe 2026-09-04 02:03:52 -04:00
deploy_form_lib.py [ADD] cache qemu : miroir des téléchargements des VM, hors ligne compris 2026-09-14 16:46:15 -04:00
deploy_form_plan.py [IMP] qemu deploy : pré-configurer la VM, et dire ce qui s'y installe 2026-09-04 02:03:52 -04:00
dev_tools.py [FIX] qemu install : poser mise, pyenv et starship, verdict par outil 2026-09-14 16:46:15 -04:00
kdbx_manager.py [ADD] vpn openconnect : groupe d'URL, SSO délégué, mot de passe borné 2026-09-04 06:26:34 -04:00
logo_ascii.txt [IMP] bot assistant TODO 2025-04-27 02:40:20 -04:00
longtest_menu.py [ADD] long_test : ERPLibre installé sur NixOS, de bout en bout 2026-09-16 21:31:03 -04:00
migration_form.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
migration_stats.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
migration_status.py [FIX] verdicts de migration : distinguer trouvaille et échec d'outil 2026-08-29 02:11:04 -04:00
migration_status_tui.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
proxmox_deploy_form.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
proxmox_menu.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
qemu_access.py [ADD] long_test : ERPLibre installé sur NixOS, de bout en bout 2026-09-16 21:31:03 -04:00
qemu_cache_menu.py [FIX] qemu images : vérifier les sommes publiées, partout et par défaut 2026-09-16 21:32:03 -04:00
qemu_deploy.py [REM] qemu : abandonner Debian 11 2026-09-24 13:56:57 -04:00
qemu_deploy_form.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
qemu_hardware.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
qemu_install.py [FIX] outillage : désimbriquer les f-strings que seul 3.12 sait lire 2026-09-24 13:56:57 -04:00
qemu_install_monitor.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
qemu_manage.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
qemu_menu.py [REM] qemu : abandonner Debian 11 2026-09-24 13:56:57 -04:00
qemu_network.py [ADD] qemu réseau : voir et recréer le sous-réseau des VM 2026-09-04 03:31:22 -04:00
qemu_privilege.py [ADD] qemu diagnostic : un relevé à transmettre, Gérer scindé en trois 2026-09-03 05:00:55 -04:00
qemu_recover.py [ADD] qemu diagnostic : un relevé à transmettre, Gérer scindé en trois 2026-09-03 05:00:55 -04:00
README.base.md [ADD] proxmox : un écran pour déployer sur un hôte distant 2026-08-25 03:17:13 -04:00
README.fr.md [ADD] proxmox : un écran pour déployer sur un hôte distant 2026-08-25 03:17:13 -04:00
README.md [ADD] proxmox : un écran pour déployer sur un hôte distant 2026-08-25 03:17:13 -04:00
source_todo.sh [UPD] install : le venv d'outillage passe en Python 3.14.7 2026-09-24 13:56:57 -04:00
ssh_config.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
textual_setup.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
todo.json [ADD] menu vpn : créer un profil, déposer les secrets, monter le tunnel 2026-09-04 03:43:02 +00:00
todo.py [IMP] todo menus: language only in Configuration, Fork moved there 2026-09-25 01:41:48 -04:00
todo_example.json [ADD] menu vpn : créer un profil, déposer les secrets, monter le tunnel 2026-09-04 03:43:02 +00:00
todo_file_browser.py [FIX] todo: test menu, file browser and KeePass refusals 2026-08-16 03:56:34 -04:00
todo_i18n.py [IMP] todo: icons on the TUI form and classic questions choices 2026-09-25 05:37:03 -04:00
todo_install.py [ADD] long_test : ERPLibre installé sur NixOS, de bout en bout 2026-09-16 21:31:03 -04:00
todo_prefs.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
todo_telemetry.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
todo_upgrade.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
transform_form.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
transform_menu.py [REF] format : passer l'outillage et les tests sous ruff 2026-09-24 14:40:38 -04:00
transform_setup.py [FIX] requirement erplibre : déclarer openpyxl, sauter sans lui 2026-09-16 05:36:13 -04:00
version_manager.py [IMP] script: update copyright year to 2026 2026-03-11 23:16:05 -04:00
vpn_menu.py [FIX] vpn : ne plus demander la route par défaut à qui ne la pose pas 2026-09-08 09:41:17 -04:00

TODO is an assistant robot to use ERPLibre Execute it with ./script/todo/todo.py or make todo.

For a new project, copy todo_example.json to private/todo/todo_override.json | private/todo/todo_override_private.json and edit it.

The mail/ package is the mail client reachable from Assistant > Mail: several IMAP/SMTP accounts, a local cache, and a Textual TUI. See ../../doc/EMAIL.md.

Where the code lives

todo.py carries the menus and the general helpers. Everything around a single subject sits in its own file, and the whole thing is assembled by mixins on the TODO class — one file, one subject, its header states its boundary.

File What it owns
todo.py the menus, the configuration, the general helpers
qemu_menu.py the QEMU/KVM menu, the image catalogue, the statistics
qemu_deploy.py deciding then running a deployment
qemu_install.py the recipes run inside a VM
qemu_manage.py lifecycle, disks, hardware, cleanup, addresses
qemu_access.py SSH, tunnels, consoles, Android emulator
proxmox_menu.py the same, on a REMOTE Proxmox VE host

The two deployment forms — libvirt here, Proxmox over there — ask the same questions, so they share a foundation rather than each holding a copy:

File What it owns
deploy_form_lib.py pure logic (sizes, plan, totals, spec), the shared CSS, the resource-row factory, the progress view
deploy_form_plan.py the plan's gestures: overrides, locks, copies, renaming, free values
qemu_deploy_form.py what QEMU/KVM adds: desktops, tools, branches, install profiles
proxmox_deploy_form.py what Proxmox adds: host, storage, bridge, VMID, address

A form inherits PlanMixin and provides three hooks: which presets each resource offers, the name a VM would fall back to, and what a lock freezes. test_todo_deploy_form_lib.py fails if a form redefines a gesture the foundation already carries — that is what keeps the architecture from drifting back into two copies.