2026-02-15 01:07:25 -05:00
2020-07-05 22:48:07 -04:00
# Changelog
2020-12-11 00:46:28 -05:00
2020-07-05 22:48:07 -04:00
All notable changes to this project will be documented in this file.
2021-09-28 02:44:49 -04:00
The format is based on [Keep a Changelog ](https://keepachangelog.com ). This project adheres
to [Semantic Versioning ](https://semver.org/spec/v2.0.0.html ).
2020-07-05 22:48:07 -04:00
2026-02-15 01:07:25 -05:00
2020-07-05 22:48:07 -04:00
## [Unreleased]
2020-12-11 00:46:28 -05:00
2025-11-11 05:53:19 -05:00
**Migration notes**
Recreating the virtual environment, use installation guide from tool `make` .
2023-12-02 14:26:16 -05:00
## Added
[UPD] changelog : les 32 commits du merge migration et de la branche
Le journal s'arrêtait à la fusion précédente : trente-deux commits n'y
figuraient pas, l'outillage de migration d'un côté, la convention d'écriture
et ses garde-fous de l'autre.
Dix-sept entrées les couvrent, en Ajouté, Modifié, Corrigé et Retiré. Le
`.base.md` est édité et mmg régénère les deux fichiers dérivés, qui ne se
modifient jamais à la main.
Vérifié : autant de puces en français qu'en anglais dans chaque section, et
aucune donnée identifiante. `[Unreleased]` porte deux sections Modifié et
deux Corrigé, défaut antérieur ; les entrées vont dans les premières.
--- EN ---
The changelog stopped at the previous merge: thirty-two commits were missing
from it, the migration tooling on one side, the writing convention and its
guard rails on the other.
Seventeen entries cover them, across Added, Changed, Fixed and Removed. The
`.base.md` is edited and mmg regenerates the two derived files, which are
never edited by hand.
Checked: as many French bullets as English ones in every section, and no
identifying data. `[Unreleased]` carries two Changed and two Fixed sections,
a pre-existing defect; the entries go into the first of each.
Assisted-by: Claude Opus 5
2026-08-30 05:27:16 -04:00
- A `pre-commit` hook lists the comments worth re-reading in the files being staged, and never blocks: over the repository's own sources, 373 files yield 463 signals, and a blocking check at that scale gets uninstalled the following week. The tool behind it, `script/analyse/check_comment_hygiene.py` , reports two families of unequal certainty — identifying data, an address, an e-mail or an account path, which is a finding; and narrative, a witness marker, an absolute date or the first person, which is a signal to RE-READ, since it cannot know whether the sentence states a durable fact. It reads comments and docstrings, `#` lines and shell trailing comments alike, skips vendored code, and falls back on a line scan when a source will not parse, an empty report otherwise declaring clean a file it never read. Exit codes follow the repository convention: 0 nothing to report, 1 findings, 2 the tool failed
- The TODO menu shows the context an assistant is given, scattered as it is over six sources: instructions, rules, skills, deployed commands, git hooks and memory. Each deployed command is compared against its repository template, ignoring the git identity lines the deployment substitutes, so a stale copy shows up where a strict equality would declare them all stale. Nothing from `private/` is reported, not even a count: naming a file whose purpose is to hold what must not go out amounts to pointing at it
- Duplicating a database and neutralising it for good: duplication goes through Odoo's `exp_duplicate_database` rather than `CREATE DATABASE … TEMPLATE` , which copies the tables and nothing else. Only Odoo drops the source's open connections — one Odoo shell left open is enough for PostgreSQL to refuse — regenerates `database.uuid` , copies the filestore, and runs the `neutralize.sql` files of the installed modules. The repository's in-house modules obtained none of the four, and one of them opened a door: deleting every `ir.mail_server` makes Odoo fall back on the configuration file's `smtp_server` , where Odoo's own placeholder server exists precisely to plug that hole. Odoo's neutralisation begins at 16; from 12 to 15 the copy falls back on the repository's long-standing `update_prod_to_dev.sh` , which sets no `is_neutralized` , disables no cron and leaves the payment keys, but does remove the mail servers and lay down a development account. The route taken is ANNOUNCED at run time, a copy whose route is unknown being unjudgeable, and a missing script fails the copy rather than letting it come out raw while announcing itself neutralised
- The migration quality screen says whether a run succeeded, where it only compared the tiers: every verdict shows, 12 through 18 — the only way to see that a failure at one tier was recovered higher up — read from the progression file and tied to the ODOO tier, not to the driver's counter, which is off by one. It names where the traces live, config.conf leaving logfile= empty and Odoo's output dying with the terminal; it shows the step-log passage around each command, keeps by tee what it launches itself and re-reads that without rerunning; and it runs six review steps from « r », asking before it switches the checkout, since replaying a test from another tier opened the database with the wrong version, which writes before it fails. A status is read the way the tools write it — 0 nothing to report, 1 findings, 2 the tool failed — so nothing is painted red where nothing failed. Output is captured through a pseudo-terminal, never a pipe: smoke_public_url requires stdin AND stdout to be terminals and, behind a pipe, silently stops offering the COW view repair; nine runs go through it, two stay out, pty.spawn being born 0× 0 where a full-screen tool would lay out on nothing
- Three checks join the migration review, each for what a tier destroys without reporting a single failure. The manifest holes: an addons repository absent from one tier's manifest does not exist on disk during that step, so Odoo declares its modules missing, the driver offers to delete them, and the feature leaves with them — only the hole counts, present before and after, absent in between, which turns 35 candidates into 19 real omissions instead of 46% noise. The tree view type, removed in Odoo 18 with no shim, is read in the SOURCES, where every other review tool reads the database and a module that never installed leaves nothing; the word is still a valid identifier, so of 465 occurrences only 80 break, and lxml and ast decide by the literal's position, never a regex. The chart drift: a bump reloads the localisation template in silence — three of the core l10n scripts call try_loading() without force_create=False, so every account the template cannot match by code is CREATED, and the groups thus added reclassify the existing chart. An absolute count says nothing there, only the GAP between two tiers of one migration can be judged, and the tool prescribes replaying the tier rather than repairing: its natural deletion key also catches accounts re-matched by code
- run.sh warms the registry over HTTP while the server starts. Odoo loads a database's registry only on the FIRST request that concerns it, and on a migrated database whoever opens the page waits tens of seconds; the probe takes that time instead and stops at the first answer, a 303, a 404 or a 500 all proving the registry is loaded. It cannot get in the way: it ALWAYS returns 0, dies with run.sh through a trap, gives up after two minutes, and takes the port from the command line, then config.conf, then the log, exact even when the requested port was taken — an empty or wildcard listen interface is probed on the loopback. `--erplibre-disable-warmup-http` turns it off and is the only flag STRIPPED before odoo_bin.sh, which Odoo rejects; `--no-http` and `--stop-after-init` turn it off too and go through, there being nothing to wake when no one listens
- A writing convention for what stays in git. A commit subject read alone, with no diff and no body, must say which part of the system changes and what is now different there — the symptom, the quoted error and the metaphor are EVIDENCE, and evidence belongs in the body. A comment has the CODE for subject, in the present of what it does, so a sentence whose subject is an incident, a machine, a date or a person goes to the unversioned `tasks/` , while the failure mode the code prevents stays. Nothing identifying outside `private/` — no customer, real database, host, address, e-mail or account path — and an example illustrating that ban is invented rather than borrowed, a test freezing forever what it holds. A measurement that establishes a durable fact stays, stripped of its date and its operator; the reading of what answered that day goes
- A `commit-msg` hook refuses the mechanical part of that writing convention and nothing more: no tag, a subject over 72 characters, a subject opening on a quotation, a body over 10 lines for one language, an IP address, an e-mail, an account path, or a term from a forbidden-names list that lives outside git since the list is what it protects — absent, that last check stays silent. It counts characters, not bytes, or a 72-character French subject would fall on its accents; it excludes the trailers and the `--cleanup=scissors` diff; and its refusal names `git commit --no-verify` , a guard rail that refuses too much getting uninstalled. Whether the subject says what the code is about stays a judgement no hook makes. The predicate telling a fleet address from an Odoo manifest version, a loopback, a mask, a network address or an RFC 5737 documentation block is shared with the comment check, two predicates for one question drifting apart. Its 40 tests weigh the acceptances — a « Merge branch », a rebase fixup — as much as the refusals
[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
- `long_test/` — tests that create real machines and take hours, kept out of `test/` so the unit runner stays runnable in seconds. `deep_proxmox.py` stacks Proxmox in Proxmox, `deep_qemu.py` stacks QEMU in QEMU, and they share one engine. Measured on 28 cores: three levels cost 34 minutes, the fourth 4 h 20 of boot plus 7 h 18 of install — everything there is 15 to 30 times slower, and that is where the vendors stop documenting nesting. The depth is a parameter and defaults to three, because three works
- deep_qemu proves KVM at every level instead of assuming it: `deploy_qemu.py` never passes `--cpu host-passthrough` and, when /dev/kvm is missing, it does not fail — it sets `--virt-type qemu` and creates a fully EMULATED VM, seven and a half minutes to boot, with no exit code to say so. Unguarded, the descent would measure stacked TCG while believing it measured nesting. Each level must show `/dev/kvm` , `nested=Y` and a child domain in `type='kvm'` ; what was not read counts as NO
- Both long tests take `--hote` to start from a machine you already own, rather than creating a head VM to host a hypervisor you have on hand — that costs five minutes AND one level of nesting. The plan is then sized on the ROOT, read over ssh; the delays count ABSOLUTE depth; and the root is never a level reached, never destroyed, and its ~/.ssh/config entry is never removed
2025-10-31 01:51:58 -04:00
- Support Odoo migration database and module with TODO
- Support multi version odoo switch on same workspace
2025-04-13 12:50:14 -04:00
- Script for hardening the installation
2025-05-05 04:43:13 -04:00
- Support Odoo versions 12.0 to 18.0
- Separate ERPLibre python installation from Odoo python with .venv.erplibre and .venv.odoo18
- Implement auto-installation with TODO.py
2025-10-31 01:51:58 -04:00
- TODO show documentation, download database, help with code formatting
2025-11-11 05:53:19 -05:00
- Performance script to mesure request per second
- Support Mainframe architecture 390x
- Deployment with Cloudflare and Nginx
- Support Apache configuration like Nginx
- Support RobotLibre code generator
- Support ERPLibre DevOps, automation procedure about DevOps
- ERPLibre Home Mobile Application, use TODO to compile, deploy it and personalize it
2025-12-20 03:15:01 -05:00
- Support Selenium grid from selenium_lib.py
2026-02-14 05:34:53 -05:00
- Add addons OnlyOffice, Cetmix, OCA automation, OCA shopfloor
[UPD] changelog: the deployment and installation cycle
The Unreleased section already covered the QEMU deployment, the graphical
VMs and the COW migration tools, but stopped at what existed a month ago.
It says nothing of the per-VM settings, of the mise and uv providers, or
of the s390x build chain -- and a reader deciding whether to upgrade has
only this file to go on.
Fourteen entries, spread over Added, Changed and Fixed. Nothing is
repeated: the platforms and tools already listed stay where they are, and
only what the entry does not already say is added. The migration work
follows on its own, at the end of the branch.
Entries are written on one line. Nothing wraps markdown here -- no
max_line_length in .editorconfig, prettier never runs on .md -- and a
sentence cut at column 80 reads worse in a diff and in a terminal. The
three entries this cycle had already folded are flattened with them.
Written in CHANGELOG.base.md, the only source; the two generated files
come from it. mmg was unavailable here, so the generation was reproduced
by a filter checked byte-for-byte against the committed output before
being trusted.
--- FR ---
La section Unreleased couvrait déjà le déploiement QEMU, les VM graphiques
et les outils de migration COW, mais s'arrêtait à l'état d'il y a un mois.
Elle ne dit rien des réglages par VM, des fournisseurs mise et uv, ni de
la chaîne de compilation s390x — et qui décide de mettre à jour n'a que ce
fichier pour se prononcer.
Quatorze entrées, réparties sur Ajouté, Modifié et Corrigé. Rien n'est
redit : les plateformes et outils déjà listés restent en place, et seul ce
que l'entrée ne dit pas encore est ajouté. Le travail de migration suit
à part, en fin de branche.
Les entrées tiennent sur une ligne. Rien n'impose de plier le markdown
ici — pas de max_line_length dans .editorconfig, prettier ne tourne
jamais sur du .md — et une phrase coupée à la colonne 80 se lit moins
bien, en diff comme au terminal. Les trois entrées déjà pliées de ce
cycle sont mises à plat avec elles.
Écrit dans CHANGELOG.base.md, seule source ; les deux fichiers générés en
découlent. mmg étant indisponible ici, la génération a été reproduite par
un filtre vérifié à l'octet près contre la sortie déjà versionnée avant
d'être employé.
Assisted-by: Claude Opus 5
2026-08-17 00:10:08 -04:00
- Deploy ERPLibre VMs with QEMU/KVM from cloud images (Ubuntu, Debian, Fedora, AlmaLinux, Rocky Linux, openSUSE Tumbleweed, Arch) on amd64, arm64 and s390x, with a menu to list, test, resize, delete and clean up
- Graphical VMs: a server / desktop choice offering GNOME or Cinnamon (the Linux Mint desktop), with remote access through xrdp — TigerVNC on Arch
[UPD] changelog: record the unreleased work
The last content update was 2026-02-14, and 145 commits landed since. The
first pass only covered what was fresh in mind and left about twenty notable
entries out: the RTK menu, the AI assistant tools, the deploy and sshfs
commands, the backup and erase commands, the Selenium work, the BRIN index
advisor, the STL support, the mobile manifests and the new dependencies.
Coverage was then checked against the 145 subjects rather than from memory,
one topic at a time.
The Security entry states its scope exactly — display and logging — because
the password still reaches the process argv, and a changelog must not promise
more than was done.
--- FR ---
La dernière mise à jour de contenu date du 2026-02-14, et 145 commits ont
suivi. La première passe n'a couvert que ce qui était frais et laissait de
côté une vingtaine d'entrées notables : le menu RTK, les outils d'assistance
IA, les commandes de déploiement et sshfs, la sauvegarde et l'effacement de
base, le travail Selenium, le conseiller d'index BRIN, le support STL, les
manifestes mobiles et les nouvelles dépendances.
La couverture a ensuite été vérifiée contre les 145 sujets, sujet par sujet,
plutôt que de mémoire.
L'entrée Sécurité énonce exactement sa portée — affichage et journalisation —
car le mot de passe atteint encore l'argv du processus, et un changelog ne
doit pas promettre plus que ce qui a été fait.
Assisted-by: Claude Opus 5
2026-08-10 03:10:50 -04:00
- Textual interfaces: install dashboard, VM deployment form, migration resume
screen; Textual is installed on demand
- Navigation telemetry for TODO, as a tree, a kanban or a list
- Migration tools for the website copy-on-write views: predict, snapshot,
diff, neutralize and reset
- Read-only analysis toolkit for an Odoo database
- SSH configuration with recursive ProxyJump, port forwarding, and
registration of the QEMU hosts in virt-manager
- NTFY self-hosted push notification server
- Generative AI policy, adopting the OCA one
- Claude Code agents and commands
- Local git server to share code between machines
- Unit tests for the configuration, the refactoring and the uncovered
components, with a bilingual test plan
- Read and send email from the TODO CLI, over IMAP and SMTP
- The database analysis reads a backup zip directly, without restoring it
- RTK management menu
- AI assistant tools menu, with the Claude Code commit command
- Deploy menu: clone ERPLibre on a remote host, configure sshfs, and make
targets for SSH deployment
- Database backup and erase commands, and a clearer restore naming
- Git patch, git remote and vim configuration from the menu
- Security check of the Python environment
- Odoo 18 reads STL files (OpenCAD)
- Mobile: whisper.cpp and sentencepiece in the manifest, a mobile test script,
and the Odoo sync API contract
- FAQ entry on wkhtmltopdf for recent distributions
- brin_advisor and brin_cluster: recommend and apply the right PostgreSQL
index for an Odoo model
[UPD] changelog: the deployment and installation cycle
The Unreleased section already covered the QEMU deployment, the graphical
VMs and the COW migration tools, but stopped at what existed a month ago.
It says nothing of the per-VM settings, of the mise and uv providers, or
of the s390x build chain -- and a reader deciding whether to upgrade has
only this file to go on.
Fourteen entries, spread over Added, Changed and Fixed. Nothing is
repeated: the platforms and tools already listed stay where they are, and
only what the entry does not already say is added. The migration work
follows on its own, at the end of the branch.
Entries are written on one line. Nothing wraps markdown here -- no
max_line_length in .editorconfig, prettier never runs on .md -- and a
sentence cut at column 80 reads worse in a diff and in a terminal. The
three entries this cycle had already folded are flattened with them.
Written in CHANGELOG.base.md, the only source; the two generated files
come from it. mmg was unavailable here, so the generation was reproduced
by a filter checked byte-for-byte against the committed output before
being trusted.
--- FR ---
La section Unreleased couvrait déjà le déploiement QEMU, les VM graphiques
et les outils de migration COW, mais s'arrêtait à l'état d'il y a un mois.
Elle ne dit rien des réglages par VM, des fournisseurs mise et uv, ni de
la chaîne de compilation s390x — et qui décide de mettre à jour n'a que ce
fichier pour se prononcer.
Quatorze entrées, réparties sur Ajouté, Modifié et Corrigé. Rien n'est
redit : les plateformes et outils déjà listés restent en place, et seul ce
que l'entrée ne dit pas encore est ajouté. Le travail de migration suit
à part, en fin de branche.
Les entrées tiennent sur une ligne. Rien n'impose de plier le markdown
ici — pas de max_line_length dans .editorconfig, prettier ne tourne
jamais sur du .md — et une phrase coupée à la colonne 80 se lit moins
bien, en diff comme au terminal. Les trois entrées déjà pliées de ce
cycle sont mises à plat avec elles.
Écrit dans CHANGELOG.base.md, seule source ; les deux fichiers générés en
découlent. mmg étant indisponible ici, la génération a été reproduite par
un filtre vérifié à l'octet près contre la sortie déjà versionnée avant
d'être employé.
Assisted-by: Claude Opus 5
2026-08-17 00:10:08 -04:00
- Per-VM settings in the deployment form: vCPU, RAM, disk, type, ERPLibre branch, Odoo version and timezone, a lock that shields a VM from the global profile, renaming, and several copies of one entry
- Python interpreter provider chosen through EL_PYTHON_PROVIDER — mise lays down a precompiled CPython, pyenv builds one — and picked per deployment
- uv places the Python packages, pip as fallback, through EL_PIP_PROVIDER
- openSUSE Leap 16.0 and Fedora 43 in the VM catalogue
- Application store of a graphical VM: .deb only, Flatpak tooling, or snap
- Remote desktop tunnel: the SSH command is composed from ~/.ssh/config, with the hypervisor console as a third route
- The install dashboard acts on a VM without leaving it: update by parts, restart Odoo, delete; architecture column and resizable columns
[UPD] changelog: the migration work of this cycle
The eleven migration commits sit at the end of the branch, apart from the
deployment work, so their changelog entries follow them rather than
announcing features the earlier commits do not carry.
Four entries: going back to a step and acting on the copy-on-write copies
at announcement time, the website copy analysis, the tools now speaking
the system language, and their executable bit.
Written in CHANGELOG.base.md, the only source; the two generated files
come from it.
--- FR ---
Les onze commits de migration sont en fin de branche, à l'écart du
travail de déploiement : leurs entrées de changelog les suivent donc,
plutôt que d'annoncer des fonctionnalités que les commits précédents ne
portent pas.
Quatre entrées : le retour à une étape et l'action sur les copies
copy-on-write dès leur annonce, l'analyse des copies de site, les outils
qui parlent désormais la langue du système, et leur bit d'exécution.
Écrit dans CHANGELOG.base.md, seule source ; les deux fichiers générés en
découlent.
Assisted-by: Claude Opus 5
2026-08-17 00:42:11 -04:00
- Migration: go back to a step from the resume screen or from a prompt, and act on the COW copies as soon as they are announced
- The website copy analysis diffs each copy against the view it shadows
[UPD] changelog: the deployment and installation cycle
The Unreleased section already covered the QEMU deployment, the graphical
VMs and the COW migration tools, but stopped at what existed a month ago.
It says nothing of the per-VM settings, of the mise and uv providers, or
of the s390x build chain -- and a reader deciding whether to upgrade has
only this file to go on.
Fourteen entries, spread over Added, Changed and Fixed. Nothing is
repeated: the platforms and tools already listed stay where they are, and
only what the entry does not already say is added. The migration work
follows on its own, at the end of the branch.
Entries are written on one line. Nothing wraps markdown here -- no
max_line_length in .editorconfig, prettier never runs on .md -- and a
sentence cut at column 80 reads worse in a diff and in a terminal. The
three entries this cycle had already folded are flattened with them.
Written in CHANGELOG.base.md, the only source; the two generated files
come from it. mmg was unavailable here, so the generation was reproduced
by a filter checked byte-for-byte against the committed output before
being trusted.
--- FR ---
La section Unreleased couvrait déjà le déploiement QEMU, les VM graphiques
et les outils de migration COW, mais s'arrêtait à l'état d'il y a un mois.
Elle ne dit rien des réglages par VM, des fournisseurs mise et uv, ni de
la chaîne de compilation s390x — et qui décide de mettre à jour n'a que ce
fichier pour se prononcer.
Quatorze entrées, réparties sur Ajouté, Modifié et Corrigé. Rien n'est
redit : les plateformes et outils déjà listés restent en place, et seul ce
que l'entrée ne dit pas encore est ajouté. Le travail de migration suit
à part, en fin de branche.
Les entrées tiennent sur une ligne. Rien n'impose de plier le markdown
ici — pas de max_line_length dans .editorconfig, prettier ne tourne
jamais sur du .md — et une phrase coupée à la colonne 80 se lit moins
bien, en diff comme au terminal. Les trois entrées déjà pliées de ce
cycle sont mises à plat avec elles.
Écrit dans CHANGELOG.base.md, seule source ; les deux fichiers générés en
découlent. mmg étant indisponible ici, la génération a été reproduite par
un filtre vérifié à l'octet près contre la sortie déjà versionnée avant
d'être employé.
Assisted-by: Claude Opus 5
2026-08-17 00:10:08 -04:00
- A test checks that what the tooling imports is declared
[UPD] changelog: the 143 commits this branch actually carries
The Unreleased section described the previous cycle. It named the COW
tools and the QEMU deployment, then stopped -- and this branch is mostly
what came after: an Odoo migration that drives itself, a state screen, a
quality report, and the repairs each bump turned out to need.
Twenty-one entries, fourteen of them Added. Read from the commits rather
than from memory, and grouped by what a reader would look for: the
migration run, its state, its quality, its repairs, its smoke tests. The
five commits that only touch documentation or tests are left out; the
ones that change what the tool does are all there.
Nothing already listed is repeated. The COW tools, the analysis toolkit
and the deployment form keep the entries they had.
--- FR ---
La section Unreleased décrivait le cycle précédent. Elle nommait les
outils COW et le déploiement QEMU, puis s'arrêtait — or cette branche est
surtout ce qui a suivi : une migration Odoo qui se conduit seule, un écran
d'état, un rapport de qualité, et les réparations que chaque palier a
révélées nécessaires.
Vingt et une entrées, dont quatorze sous Ajouté. Lues dans les commits
plutôt que de mémoire, et regroupées selon ce qu'un lecteur cherche :
l'exécution de la migration, son état, sa qualité, ses réparations, ses
tests de fumée. Les cinq commits qui ne touchent que la documentation ou
les tests sont écartés ; ceux qui changent ce que fait l'outil y sont
tous.
Rien de déjà listé n'est redit. Les outils COW, la boîte à outils
d'analyse et le formulaire de déploiement gardent leurs entrées.
Assisted-by: Claude Opus 5
2026-08-23 01:06:25 -04:00
- Automated Odoo migration: the tool drives the whole run -- repair, replay, an auto-run that takes the default after five seconds, and a countdown that names the answer it is about to take
- Migration state screen: « t » shows where a run stands, with coloured commands, elapsed time, the server log read for you, and one log file per step on disk
- Migration quality: what a run gained and lost step by step, the missing files named, Odoo's own redesigns told apart from real losses, and OpenUpgrade's declared changes laid over the real ones
- Migration repairs: the customized SCSS the next bump breaks, predicted then fixed; themes uninstalled before the first bump; DMS visibility restored; views whose stored type contradicts their parent; and the < tree > tags Odoo 18 renamed to < list >
- Smoke tests after a migration: every public URL requested, /my and every app opened as the neutralization test user, the views behind a failing URL named, and the OCA database cleanup run first
- Filestore check: whether the attachment files landed, whether the record still exists, and the cleanups offered on the spot
- Analysis: the modules a database lacks against the default package, with an offer to install those that are ready, and the attachment files that are truly unrecoverable
- Debian on s390x through debian-installer, no cloud image being published for that architecture
- A mobile development VM: PyCharm, Android Studio, GNOME extensions, an Android emulator and an adb tunnel for scrcpy, with the mobile app built and tested inside it
- Forgejo, a git forge installable from the deployment menu
- VM hardware set per machine: the host GPU, the CPU mode, the screens and the network
- virt-viewer opens a VM screen from the menu
- The install dashboard shows the host RAM, a VM's used RAM and uptime, and how long a log has been silent
- A VM greets its SSH login with the distribution's own commands
[UPD] changelog : les 67 commits qui séparent develop de master
Le journal ne disait rien de Proxmox, ni de l'anonymisation, ni de
l'éclatement de todo.py — soit l'essentiel de ce qui attend un merge dans
master. Une relecture de 67 commits ne devrait pas commencer par lire 67
commits.
Les entrées suivent les six segments du plan de merge : ce qui précède la
factorisation, la factorisation elle-même, l'écran Proxmox, les réparations
de migration, l'audit, et le choix par VM.
Une section Modifié apparaît, qui manquait à Non publié : un déplacement de
9 500 lignes n'est ni un ajout ni un correctif, et le classer ailleurs
aurait menti sur sa nature.
--- EN ---
The log said nothing of Proxmox, nor of the anonymisation, nor of todo.py
being split — that is most of what is waiting to be merged into master. A
review of 67 commits should not have to start by reading 67 commits.
The entries follow the six segments of the merge plan: what precedes the
split, the split itself, the Proxmox screen, the migration repairs, the
audit, and the per-VM choice.
A Changed section appears, which Unreleased lacked: moving 9 500 lines is
neither an addition nor a fix, and filing it elsewhere would have misstated
what it is.
Assisted-by: Claude Opus 5
2026-08-25 02:53:16 -04:00
- Proxmox VE as a deployment target: deploy a VM on a remote Proxmox host from a screen that recaps in the terminal before creating, creates the missing bridge, follows the VM and changes its state, shows its Odoo column and the web link, and deletes it from the host. Every remote VM now comes with its connection guide, which was missing from the start
- Repairs for what an Odoo bump leaves behind: website copies that no longer render — predicted BEFORE the bump rather than found as a 500 after it — the indexes Odoo 17 creates twice, and the settings no event restores
- Analyses that read a database rather than count it: which module depends on which, on screen; what is installed, in progress and applied; the state of an instance read for the use made of it; and the examination of a database that is not local
- Anonymising a copy without AI: a production copy exists to reproduce a defect, so identifiers stay consistent across tables once the names are replaced
- Per-VM statistics: writes, RAM and disk
- Choosing the database at startup without ever blocking on the choice
- The reboot is part of installing Proxmox VE: install_proxmox.sh lays down the kernel and stops, rightly so, because launched over ssh a reboot would cut its session and make the install look failed. The reboot now belongs to the launching wrapper, which runs on OUR machine and survives the VM's — install, reboot, wait for `uname -r` to carry the Proxmox kernel, then verify. The ✅ is written only after that, so it means "usable hypervisor"
## Changed
[UPD] changelog : les 32 commits du merge migration et de la branche
Le journal s'arrêtait à la fusion précédente : trente-deux commits n'y
figuraient pas, l'outillage de migration d'un côté, la convention d'écriture
et ses garde-fous de l'autre.
Dix-sept entrées les couvrent, en Ajouté, Modifié, Corrigé et Retiré. Le
`.base.md` est édité et mmg régénère les deux fichiers dérivés, qui ne se
modifient jamais à la main.
Vérifié : autant de puces en français qu'en anglais dans chaque section, et
aucune donnée identifiante. `[Unreleased]` porte deux sections Modifié et
deux Corrigé, défaut antérieur ; les entrées vont dans les premières.
--- EN ---
The changelog stopped at the previous merge: thirty-two commits were missing
from it, the migration tooling on one side, the writing convention and its
guard rails on the other.
Seventeen entries cover them, across Added, Changed, Fixed and Removed. The
`.base.md` is edited and mmg regenerates the two derived files, which are
never edited by hand.
Checked: as many French bullets as English ones in every section, and no
identifying data. `[Unreleased]` carries two Changed and two Fixed sections,
a pre-existing defect; the entries go into the first of each.
Assisted-by: Claude Opus 5
2026-08-30 05:27:16 -04:00
- Staging names the files, never `git add -A` . The sweep stages everything untracked, and this repository keeps two directories untracked ON PURPOSE: `private/` , the only place allowed to hold customer data, and `tasks/` , where the convention sends the investigation precisely because it is not versioned. It also swallows whatever else is in flight in the checkout, under a subject that does not cover it; `git add -p` stages the hunks when one file carries two subjects
- A countdown prompt gives 15 seconds to decide, where five were not enough to READ the question: the countdown exists so a run can be left unattended, not to go fast, and too short it does the opposite — the answer comes by reflex, or a default no one read is taken. A restored database is named after the backup file, which already carries a telling name, rather than « test », under which successive migrations all landed on one name. The name is sanitised, since it ends up in a createdb, and capped at 41 characters: the driver appends « _neutralize_upgrade_18 » and PostgreSQL truncates at 63, which would put two tiers on the same name. A remote download keeps the name the server gave
[UPD] changelog : les 67 commits qui séparent develop de master
Le journal ne disait rien de Proxmox, ni de l'anonymisation, ni de
l'éclatement de todo.py — soit l'essentiel de ce qui attend un merge dans
master. Une relecture de 67 commits ne devrait pas commencer par lire 67
commits.
Les entrées suivent les six segments du plan de merge : ce qui précède la
factorisation, la factorisation elle-même, l'écran Proxmox, les réparations
de migration, l'audit, et le choix par VM.
Une section Modifié apparaît, qui manquait à Non publié : un déplacement de
9 500 lignes n'est ni un ajout ni un correctif, et le classer ailleurs
aurait menti sur sa nature.
--- EN ---
The log said nothing of Proxmox, nor of the anonymisation, nor of todo.py
being split — that is most of what is waiting to be merged into master. A
review of 67 commits should not have to start by reading 67 commits.
The entries follow the six segments of the merge plan: what precedes the
split, the split itself, the Proxmox screen, the migration repairs, the
audit, and the per-VM choice.
A Changed section appears, which Unreleased lacked: moving 9 500 lines is
neither an addition nor a fix, and filing it elsewhere would have misstated
what it is.
Assisted-by: Claude Opus 5
2026-08-25 02:53:16 -04:00
- todo.py split into nine files, one per subject, with a shared base per form. It carried 9 500 lines more than a file should and every subject went through it; the deployment forms repeated the same field-and-validation machinery, so a fix in one never reached the others. No behaviour changes
- Branch, profile and type are chosen per VM. They were global, which meant switching everything to deploy a single machine differently
- One shared base describes the guest system, where each form used to describe it again
2025-10-31 01:51:58 -04:00
[FIX] mobile: the bundle check refused a real build
The checker knew only the pack layout. A real build ships one tar.gz per
repository, so it raised "<slug> : index.json absent" and, being guarded by
`|| exit 1`, stopped compile_and_run.sh before cap sync — no APK. Broken
since 2026-08-20 for anyone on the current mobile main: the parent half of
that work landed, the mobile half producing packs never did.
It now accepts both layouts, so whichever half lands next, it holds.
Two things got better on the way. The byte-for-byte comparison against the
source — the only check that proves fidelity rather than coherence — was
reporting zero comparisons, because no entry matched the shape it looked
for; it now compares twenty. And presence is no longer sampled: streaming
all 139 archives costs 6 s and accounts for every one of the 124 350
promised files, where a sample of twenty could not see a ghost it did not
draw.
The test guarding the ZIP limit demanded a `chunk` field on every file —
the pack layout, not the limit. It counts entries now: 278 against 65 535.
Its real-bundle class had been taught to skip on this very symptom rather
than fail; it runs again.
--- FR ---
Le vérificateur ne connaissait que la disposition en packs. Une compilation
réelle livre un tar.gz par dépôt : il levait « <slug> : index.json absent »
et, gardé par `|| exit 1`, arrêtait compile_and_run.sh avant cap sync — pas
d'APK. Cassé depuis le 2026-08-20 pour quiconque est sur le main mobile
actuel : la moitié parente de ce travail a atterri, la moitié mobile qui
produit les packs jamais.
Il accepte désormais les deux dispositions : quelle que soit la moitié qui
atterrit ensuite, il tient.
Deux choses se sont améliorées en chemin. La comparaison octet pour octet
contre la source — la seule qui prouve la fidélité et non la cohérence —
rapportait zéro comparaison, faute d'entrée à la forme attendue ; elle en
compare vingt. Et la présence n'est plus échantillonnée : traverser les 139
archives coûte 6 s et rend compte de chacun des 124 350 fichiers promis, là
où vingt tirages ne pouvaient pas voir un fantôme non tiré.
Le test qui gardait la limite du ZIP exigeait un champ `chunk` sur chaque
fichier — la disposition, pas la limite. Il compte les entrées désormais :
278 pour 65 535. Sa classe sur le vrai bundle avait appris à s'ignorer sur
ce symptôme même plutôt qu'à échouer ; elle tourne à nouveau.
Assisted-by: Claude Opus 5
2026-08-24 05:50:04 -04:00
## Fixed
[UPD] changelog : les 32 commits du merge migration et de la branche
Le journal s'arrêtait à la fusion précédente : trente-deux commits n'y
figuraient pas, l'outillage de migration d'un côté, la convention d'écriture
et ses garde-fous de l'autre.
Dix-sept entrées les couvrent, en Ajouté, Modifié, Corrigé et Retiré. Le
`.base.md` est édité et mmg régénère les deux fichiers dérivés, qui ne se
modifient jamais à la main.
Vérifié : autant de puces en français qu'en anglais dans chaque section, et
aucune donnée identifiante. `[Unreleased]` porte deux sections Modifié et
deux Corrigé, défaut antérieur ; les entrées vont dans les premières.
--- EN ---
The changelog stopped at the previous merge: thirty-two commits were missing
from it, the migration tooling on one side, the writing convention and its
guard rails on the other.
Seventeen entries cover them, across Added, Changed, Fixed and Removed. The
`.base.md` is edited and mmg regenerates the two derived files, which are
never edited by hand.
Checked: as many French bullets as English ones in every section, and no
identifying data. `[Unreleased]` carries two Changed and two Fixed sections,
a pre-existing defect; the entries go into the first of each.
Assisted-by: Claude Opus 5
2026-08-30 05:27:16 -04:00
- `odoo_bin.sh db --drop` failed with AccessDenied at every migration tier, and the clone then hit « database already exists »: db_restore.py reads the repository's config.conf, sees admin_passwd = admin and therefore sends no master password, while odoo_bin.sh passed no « -c », so Odoo read ~/.odoorc and its hashed one. ODOO_RC closes that seam in one place instead of twenty call sites, versions 12 to 18 reading it after « -c » and before ~/.odoorc, so an explicit choice still wins
- The account.root SQL view Odoo 17 creates is dropped before the load into 18, where the model carries _auto = False and _table_query = '0', so its name enters no query and the missing-table check skips it. The view is not merely dead but WRONG, built on the code column the 18 ORM no longer writes, and it is the sole pin holding the two legacy columns database_cleanup fails on — no DROP COLUMN, OpenUpgrade still reading them afterwards
- The migration repair created pricelists that should not exist, in two ways. It asked `env.user.has_group()` , which says yes as soon as the caller belongs to the group — and the migration adds it along the way — where the settings checkbox reads something else entirely: what `base.group_user` IMPLIES. Deciding on the caller built a pricelist in a database whose feature is off, and Odoo then warned on every opening of the settings that it would archive it. And a pricelist shared across companies, with an empty `company_id` , did not count as belonging to the company: the repair saw a company without a list and made an empty duplicate beside the existing one, on a database that had lost nothing. Both now read the group implication and the tool's own `pricelist_missing` detector, which already tells the two cases apart; the migration-residue check asked the same wrong question and was corrected with them
- The anonymisation blacklist handed its SQL to psql as a single argument, and Linux caps one argument at 131 072 bytes: the mode that covers the most tables was exactly the one that broke, on « OSError: [Errno 7] Argument list too long ». The SQL now travels through a file with `-f` , which keeps the `--single-transaction` that standard input would have silently dropped. Text columns with a declared length are truncated by `left(…, n)` , the id FIRST so a unique column stays unique, and every identifier is quoted — Odoo allows a field named user or order. Skipping every column under a CHECK constraint had left the partner name untouched: on text, only FORM constraints are out of reach, and an UPDATE that fails writes nothing
- Anonymisation respects what a value MEANS, where the SQL type says only what it IS. Odoo declares `parent_path` as `char` but stores an id path in it — 1/7/12/ — parsed straight back with `int()` , so a name written there breaks the first page load; every `_parent_store` model carries one, and `account_payment_term.days_next_month` goes to `int()` the same way. The two known names are skipped, then the content itself is probed: a column whose every value is a path is left alone, even in an in-house module, and the slashes are required, so a value of pure digits does not escape anonymisation by passing for an id. Numbers were drawn uniformly over 0 to 1000, which is wrong for every number bounded by its usage — hours, percentages, rates: a float holding an hour of day, drawn outside 0..23, makes displaying the record raise « ValueError: hour must be in 0..23 », a bound that lives in Odoo's Python where no PostgreSQL constraint declares it. The draw now respects the only bound the DATA declares, its own range, min and max measured per table; 0 to 1000 remains solely for a column that is empty or cannot be probed
- The unit runner took seven filename prefixes, « the rest needing a database », and ran 1131 tests where all 3703 in the directory pass with PostgreSQL unreachable; it globs test/test_*.py. Two shapes make a file silent without an error — unittest.main() placed mid-file, which exits before the second half is even defined (four files, 87 tests), and no __main__ block at all, which counts zero (eight files, 174 tests) — and a guard now refuses both, along with any return to a list of prefixes
[FIX] mobile: the bundle check refused a real build
The checker knew only the pack layout. A real build ships one tar.gz per
repository, so it raised "<slug> : index.json absent" and, being guarded by
`|| exit 1`, stopped compile_and_run.sh before cap sync — no APK. Broken
since 2026-08-20 for anyone on the current mobile main: the parent half of
that work landed, the mobile half producing packs never did.
It now accepts both layouts, so whichever half lands next, it holds.
Two things got better on the way. The byte-for-byte comparison against the
source — the only check that proves fidelity rather than coherence — was
reporting zero comparisons, because no entry matched the shape it looked
for; it now compares twenty. And presence is no longer sampled: streaming
all 139 archives costs 6 s and accounts for every one of the 124 350
promised files, where a sample of twenty could not see a ghost it did not
draw.
The test guarding the ZIP limit demanded a `chunk` field on every file —
the pack layout, not the limit. It counts entries now: 278 against 65 535.
Its real-bundle class had been taught to skip on this very symptom rather
than fail; it runs again.
--- FR ---
Le vérificateur ne connaissait que la disposition en packs. Une compilation
réelle livre un tar.gz par dépôt : il levait « <slug> : index.json absent »
et, gardé par `|| exit 1`, arrêtait compile_and_run.sh avant cap sync — pas
d'APK. Cassé depuis le 2026-08-20 pour quiconque est sur le main mobile
actuel : la moitié parente de ce travail a atterri, la moitié mobile qui
produit les packs jamais.
Il accepte désormais les deux dispositions : quelle que soit la moitié qui
atterrit ensuite, il tient.
Deux choses se sont améliorées en chemin. La comparaison octet pour octet
contre la source — la seule qui prouve la fidélité et non la cohérence —
rapportait zéro comparaison, faute d'entrée à la forme attendue ; elle en
compare vingt. Et la présence n'est plus échantillonnée : traverser les 139
archives coûte 6 s et rend compte de chacun des 124 350 fichiers promis, là
où vingt tirages ne pouvaient pas voir un fantôme non tiré.
Le test qui gardait la limite du ZIP exigeait un champ `chunk` sur chaque
fichier — la disposition, pas la limite. Il compte les entrées désormais :
278 pour 65 535. Sa classe sur le vrai bundle avait appris à s'ignorer sur
ce symptôme même plutôt qu'à échouer ; elle tourne à nouveau.
Assisted-by: Claude Opus 5
2026-08-24 05:50:04 -04:00
- The mobile bundle check accepted only the pack layout, when a real build ships one tar.gz per repository. It failed on `<slug> : index.json absent` and stopped `compile_and_run.sh` before the APK — since 2026-08-20, for anyone on the current mobile main. It now accepts both layouts, and proves the presence of EVERY promised file rather than a sample of twenty: streaming all 139 archives costs 6 s, and 124 350 files are accounted for
- The bundle test guarded the ZIP entry limit by demanding a `chunk` field on every file, which is the pack layout rather than the limit itself. It now counts the entries the APK will carry — 278 against a ceiling of 65 535 — so either layout passes and a return to file-per-source still fails
[UPD] changelog : les 67 commits qui séparent develop de master
Le journal ne disait rien de Proxmox, ni de l'anonymisation, ni de
l'éclatement de todo.py — soit l'essentiel de ce qui attend un merge dans
master. Une relecture de 67 commits ne devrait pas commencer par lire 67
commits.
Les entrées suivent les six segments du plan de merge : ce qui précède la
factorisation, la factorisation elle-même, l'écran Proxmox, les réparations
de migration, l'audit, et le choix par VM.
Une section Modifié apparaît, qui manquait à Non publié : un déplacement de
9 500 lignes n'est ni un ajout ni un correctif, et le classer ailleurs
aurait menti sur sa nature.
--- EN ---
The log said nothing of Proxmox, nor of the anonymisation, nor of todo.py
being split — that is most of what is waiting to be merged into master. A
review of 67 commits should not have to start by reading 67 commits.
The entries follow the six segments of the merge plan: what precedes the
split, the split itself, the Proxmox screen, the migration repairs, the
audit, and the per-VM choice.
A Changed section appears, which Unreleased lacked: moving 9 500 lines is
neither an addition nor a fix, and filing it elsewhere would have misstated
what it is.
Assisted-by: Claude Opus 5
2026-08-25 02:53:16 -04:00
- The 13-to-18 migration rested on assumptions: a percent-encoded page anchor the parser could not read, web_responsive that does not survive the bump to 18, a failed OpenUpgrade that passed for done, a rebuilt clone that kept the old one's preparation, and one faulty module taking the whole uninstall batch down
- Proxmox aimed at the wrong machine: the install went to the host instead of the VM, the disk it reported was the host's, and four screens spoke of a local machine while driving a remote one. The jump host is now the only route to a VM — aiming directly worked only while the VM had a routable address. Six further defects came from an audit rather than from use
- One name per `~/.ssh/config` entry, and the old one leaves with the convention that replaced it
- Monitoring no longer bins a VM before being sure, and deleting from a reopened monitor checks the VM's identity first
- sshfs announced a mount that had not happened
- Odoo 15 declares xlsxwriter, which report_xlsx has always needed
- The db_restore master-password probe validated nothing
- An analysis looked for the price list's external identifier rather than the list itself, and reported fields that had never held data
- The NAT bridge was written before knowing whether NAT exists. Six lines of iptables and "return code 1" came after the stanza had already gone into /etc/network/interfaces, and nothing in that noise said a reboot was needed: the host was running Debian's cloud kernel, stripped of netfilter. Our own install_proxmox.sh produces that state, so a freshly installed nested Proxmox is ALWAYS in it — the guard now sits where the consequence is, not at host confirmation
[UPD] support: drop Ubuntu 20.04/22.04, add AlmaLinux and Rocky
Ubuntu 20.04 and 22.04 leave EVERY architecture, not just s390x. pikepdf
needs qpdf 12.2, whose build requires C++20, while focal ships GCC 9 and
publishes no g++-10 for s390x at all. Python 3.8, node 10, cargo 0.67 and
OpenSSL 1.1.1 each had a workaround; the pile of them did not. 18.04
follows, already off the lists. The refusal lands before any apt, this
script also serving existing machines.
AlmaLinux 9 and 10, Rocky 9 and 10 join the catalog on all four
architectures: the twelve "latest" URLs were opened, with no index to
parse unlike Fedora. They would have booted unreachable though -- the
cloud-config forced "groups: users, sudo", but the RHEL family has no
sudo group, only wheel, and an unknown group makes useradd fail, hence no
password and no key. The very trap already known for Debian, repeated
elsewhere. Host side, EPEL and CRB are enabled: without them most -devel
packages are missing, silently.
The server / graphical choice gains Cinnamon, the Linux Mint desktop,
from the distribution's own repositories. Mint's repository is set aside:
plain HTTP, and i386/amd64 only, which would rule out arm64 and s390x.
Along the way, dnf now installs an ENVIRONMENT rather than a group --
"gnome-desktop" brings gdm and gnome-shell but not base-x, hence no X
server.
--- FR ---
Ubuntu 20.04 et 22.04 partent de TOUTES les architectures, pas seulement
de s390x. pikepdf réclame qpdf 12.2, dont la compilation exige C++20,
quand focal livre GCC 9 et ne publie même pas de g++-10 pour s390x.
Python 3.8, node 10, cargo 0.67 et OpenSSL 1.1.1 avaient chacun leur
contournement ; leur accumulation, non. 18.04 suit, déjà hors des
listes. Le refus tombe avant tout apt, ce script servant aussi les
machines existantes.
AlmaLinux 9 et 10, Rocky 9 et 10 entrent au catalogue, sur les quatre
architectures : les douze URL « latest » ont été ouvertes, aucun index à
analyser contrairement à Fedora. Elles auraient pourtant démarré
inaccessibles — le cloud-config imposait « groups: users, sudo », or la
famille RHEL n'a pas de groupe sudo mais wheel, et un groupe inconnu fait
échouer useradd, donc ni mot de passe ni clé. C'est le piège déjà connu
pour Debian, reproduit ailleurs. Côté hôte, EPEL et CRB sont activés :
sans eux la plupart des -devel manquent, en silence.
Le choix serveur / graphique gagne Cinnamon, le bureau de Linux Mint,
depuis les dépôts de la distribution. Le dépôt de Mint lui-même est
écarté : il est en HTTP nu et ne publie que i386 et amd64, ce qui
exclurait arm64 et s390x. Au passage, dnf installe désormais un
ENVIRONNEMENT et non un groupe — « gnome-desktop » apporte gdm et
gnome-shell mais pas base-x, donc pas de serveur X.
Assisted-by: Claude Opus 5
2026-08-11 18:46:11 -04:00
## Removed
[UPD] changelog : les 32 commits du merge migration et de la branche
Le journal s'arrêtait à la fusion précédente : trente-deux commits n'y
figuraient pas, l'outillage de migration d'un côté, la convention d'écriture
et ses garde-fous de l'autre.
Dix-sept entrées les couvrent, en Ajouté, Modifié, Corrigé et Retiré. Le
`.base.md` est édité et mmg régénère les deux fichiers dérivés, qui ne se
modifient jamais à la main.
Vérifié : autant de puces en français qu'en anglais dans chaque section, et
aucune donnée identifiante. `[Unreleased]` porte deux sections Modifié et
deux Corrigé, défaut antérieur ; les entrées vont dans les premières.
--- EN ---
The changelog stopped at the previous merge: thirty-two commits were missing
from it, the migration tooling on one side, the writing convention and its
guard rails on the other.
Seventeen entries cover them, across Added, Changed, Fixed and Removed. The
`.base.md` is edited and mmg regenerates the two derived files, which are
never edited by hand.
Checked: as many French bullets as English ones in every section, and no
identifying data. `[Unreleased]` carries two Changed and two Fixed sections,
a pre-existing defect; the entries go into the first of each.
Assisted-by: Claude Opus 5
2026-08-30 05:27:16 -04:00
- The residue check that called a language broken when its res_lang row has active at NULL — listed nowhere, no longer re-enablable. False in the 18 source: an ('active','=',False) domain compiles to (IS NULL OR = FALSE), the Languages menu action carries active_test: False, sorting goes through COALESCE(active, FALSE), and reading returns bool(value). Odoo writes that NULL itself, active being a Boolean with no default and res.lang.csv having no such column, which makes one NULL per language added to the catalogue — so « zero before, nonzero after » is not enough to declare a residue. A test now refuses a verdict key that nothing defines any more
[UPD] changelog: the deployment and installation cycle
The Unreleased section already covered the QEMU deployment, the graphical
VMs and the COW migration tools, but stopped at what existed a month ago.
It says nothing of the per-VM settings, of the mise and uv providers, or
of the s390x build chain -- and a reader deciding whether to upgrade has
only this file to go on.
Fourteen entries, spread over Added, Changed and Fixed. Nothing is
repeated: the platforms and tools already listed stay where they are, and
only what the entry does not already say is added. The migration work
follows on its own, at the end of the branch.
Entries are written on one line. Nothing wraps markdown here -- no
max_line_length in .editorconfig, prettier never runs on .md -- and a
sentence cut at column 80 reads worse in a diff and in a terminal. The
three entries this cycle had already folded are flattened with them.
Written in CHANGELOG.base.md, the only source; the two generated files
come from it. mmg was unavailable here, so the generation was reproduced
by a filter checked byte-for-byte against the committed output before
being trusted.
--- FR ---
La section Unreleased couvrait déjà le déploiement QEMU, les VM graphiques
et les outils de migration COW, mais s'arrêtait à l'état d'il y a un mois.
Elle ne dit rien des réglages par VM, des fournisseurs mise et uv, ni de
la chaîne de compilation s390x — et qui décide de mettre à jour n'a que ce
fichier pour se prononcer.
Quatorze entrées, réparties sur Ajouté, Modifié et Corrigé. Rien n'est
redit : les plateformes et outils déjà listés restent en place, et seul ce
que l'entrée ne dit pas encore est ajouté. Le travail de migration suit
à part, en fin de branche.
Les entrées tiennent sur une ligne. Rien n'impose de plier le markdown
ici — pas de max_line_length dans .editorconfig, prettier ne tourne
jamais sur du .md — et une phrase coupée à la colonne 80 se lit moins
bien, en diff comme au terminal. Les trois entrées déjà pliées de ce
cycle sont mises à plat avec elles.
Écrit dans CHANGELOG.base.md, seule source ; les deux fichiers générés en
découlent. mmg étant indisponible ici, la génération a été reproduite par
un filtre vérifié à l'octet près contre la sortie déjà versionnée avant
d'être employé.
Assisted-by: Claude Opus 5
2026-08-17 00:10:08 -04:00
- Ubuntu 20.04 and 22.04 support, on every architecture: pikepdf needs qpdf 12.2, whose build requires C++20, while focal ships GCC 9 and publishes no `g++-10` for s390x
[UPD] support: drop Ubuntu 20.04/22.04, add AlmaLinux and Rocky
Ubuntu 20.04 and 22.04 leave EVERY architecture, not just s390x. pikepdf
needs qpdf 12.2, whose build requires C++20, while focal ships GCC 9 and
publishes no g++-10 for s390x at all. Python 3.8, node 10, cargo 0.67 and
OpenSSL 1.1.1 each had a workaround; the pile of them did not. 18.04
follows, already off the lists. The refusal lands before any apt, this
script also serving existing machines.
AlmaLinux 9 and 10, Rocky 9 and 10 join the catalog on all four
architectures: the twelve "latest" URLs were opened, with no index to
parse unlike Fedora. They would have booted unreachable though -- the
cloud-config forced "groups: users, sudo", but the RHEL family has no
sudo group, only wheel, and an unknown group makes useradd fail, hence no
password and no key. The very trap already known for Debian, repeated
elsewhere. Host side, EPEL and CRB are enabled: without them most -devel
packages are missing, silently.
The server / graphical choice gains Cinnamon, the Linux Mint desktop,
from the distribution's own repositories. Mint's repository is set aside:
plain HTTP, and i386/amd64 only, which would rule out arm64 and s390x.
Along the way, dnf now installs an ENVIRONMENT rather than a group --
"gnome-desktop" brings gdm and gnome-shell but not base-x, hence no X
server.
--- FR ---
Ubuntu 20.04 et 22.04 partent de TOUTES les architectures, pas seulement
de s390x. pikepdf réclame qpdf 12.2, dont la compilation exige C++20,
quand focal livre GCC 9 et ne publie même pas de g++-10 pour s390x.
Python 3.8, node 10, cargo 0.67 et OpenSSL 1.1.1 avaient chacun leur
contournement ; leur accumulation, non. 18.04 suit, déjà hors des
listes. Le refus tombe avant tout apt, ce script servant aussi les
machines existantes.
AlmaLinux 9 et 10, Rocky 9 et 10 entrent au catalogue, sur les quatre
architectures : les douze URL « latest » ont été ouvertes, aucun index à
analyser contrairement à Fedora. Elles auraient pourtant démarré
inaccessibles — le cloud-config imposait « groups: users, sudo », or la
famille RHEL n'a pas de groupe sudo mais wheel, et un groupe inconnu fait
échouer useradd, donc ni mot de passe ni clé. C'est le piège déjà connu
pour Debian, reproduit ailleurs. Côté hôte, EPEL et CRB sont activés :
sans eux la plupart des -devel manquent, en silence.
Le choix serveur / graphique gagne Cinnamon, le bureau de Linux Mint,
depuis les dépôts de la distribution. Le dépôt de Mint lui-même est
écarté : il est en HTTP nu et ne publie que i386 et amd64, ce qui
exclurait arm64 et s390x. Au passage, dnf installe désormais un
ENVIRONNEMENT et non un groupe — « gnome-desktop » apporte gdm et
gnome-shell mais pas base-x, donc pas de serveur X.
Assisted-by: Claude Opus 5
2026-08-11 18:46:11 -04:00
2025-10-31 01:51:58 -04:00
## Changed
- Docker support postgresql 18
2025-11-11 05:53:19 -05:00
- Format script search diff file into each repository
2025-12-20 03:15:01 -05:00
- Support neutralize database from Odoo
[UPD] changelog: record the unreleased work
The last content update was 2026-02-14, and 145 commits landed since. The
first pass only covered what was fresh in mind and left about twenty notable
entries out: the RTK menu, the AI assistant tools, the deploy and sshfs
commands, the backup and erase commands, the Selenium work, the BRIN index
advisor, the STL support, the mobile manifests and the new dependencies.
Coverage was then checked against the 145 subjects rather than from memory,
one topic at a time.
The Security entry states its scope exactly — display and logging — because
the password still reaches the process argv, and a changelog must not promise
more than was done.
--- FR ---
La dernière mise à jour de contenu date du 2026-02-14, et 145 commits ont
suivi. La première passe n'a couvert que ce qui était frais et laissait de
côté une vingtaine d'entrées notables : le menu RTK, les outils d'assistance
IA, les commandes de déploiement et sshfs, la sauvegarde et l'effacement de
base, le travail Selenium, le conseiller d'index BRIN, le support STL, les
manifestes mobiles et les nouvelles dépendances.
La couverture a ensuite été vérifiée contre les 145 sujets, sujet par sujet,
plutôt que de mémoire.
L'entrée Sécurité énonce exactement sa portée — affichage et journalisation —
car le mot de passe atteint encore l'argv du processus, et un changelog ne
doit pas promettre plus que ce qui a été fait.
Assisted-by: Claude Opus 5
2026-08-10 03:10:50 -04:00
- Installation supports Fedora, Debian, Ubuntu and Arch Linux
- Repository sync and poetry install run in parallel, up to 50 % faster on a
slow connection
- CybroOdoo extra modules become opt-in, tracked per Odoo version
- Node.js 22, required by Capacitor 8 for the mobile application
- Poetry and repo are quiet by default; EL_VERBOSE restores the output
- TODO menus grouped into sections with icons, and English text used as the
i18n key
- Documentation is bilingual, generated from the .base.md sources
- A VM inherits the timezone of the host that creates it
- First boot no longer waits on snapd, locale generation or the guest agent
- apt picks the fastest reachable mirror before the official archive
- Selenium: download through a network hub, SVG to PNG, error detection,
multiple clicks and updated drivers
- Odoo can run on a custom database; queue_job setup and SSH forwarding
options in the menu
- Killing a process by port asks before acting, with an interactive menu
- LinuxMint 22.3 supported
- Odoo 18 dependencies: flanker, orjson, python-magic, tldextract, PyYAML
- Copyright year updated to 2026
[UPD] changelog: the deployment and installation cycle
The Unreleased section already covered the QEMU deployment, the graphical
VMs and the COW migration tools, but stopped at what existed a month ago.
It says nothing of the per-VM settings, of the mise and uv providers, or
of the s390x build chain -- and a reader deciding whether to upgrade has
only this file to go on.
Fourteen entries, spread over Added, Changed and Fixed. Nothing is
repeated: the platforms and tools already listed stay where they are, and
only what the entry does not already say is added. The migration work
follows on its own, at the end of the branch.
Entries are written on one line. Nothing wraps markdown here -- no
max_line_length in .editorconfig, prettier never runs on .md -- and a
sentence cut at column 80 reads worse in a diff and in a terminal. The
three entries this cycle had already folded are flattened with them.
Written in CHANGELOG.base.md, the only source; the two generated files
come from it. mmg was unavailable here, so the generation was reproduced
by a filter checked byte-for-byte against the committed output before
being trusted.
--- FR ---
La section Unreleased couvrait déjà le déploiement QEMU, les VM graphiques
et les outils de migration COW, mais s'arrêtait à l'état d'il y a un mois.
Elle ne dit rien des réglages par VM, des fournisseurs mise et uv, ni de
la chaîne de compilation s390x — et qui décide de mettre à jour n'a que ce
fichier pour se prononcer.
Quatorze entrées, réparties sur Ajouté, Modifié et Corrigé. Rien n'est
redit : les plateformes et outils déjà listés restent en place, et seul ce
que l'entrée ne dit pas encore est ajouté. Le travail de migration suit
à part, en fin de branche.
Les entrées tiennent sur une ligne. Rien n'impose de plier le markdown
ici — pas de max_line_length dans .editorconfig, prettier ne tourne
jamais sur du .md — et une phrase coupée à la colonne 80 se lit moins
bien, en diff comme au terminal. Les trois entrées déjà pliées de ce
cycle sont mises à plat avec elles.
Écrit dans CHANGELOG.base.md, seule source ; les deux fichiers générés en
découlent. mmg étant indisponible ici, la génération a été reproduite par
un filtre vérifié à l'octet près contre la sortie déjà versionnée avant
d'être employé.
Assisted-by: Claude Opus 5
2026-08-17 00:10:08 -04:00
- Canadian pacman mirrors placed first on Arch, the official geographic mirror measuring four times slower from Montréal
- A Poetry dependency can be declined per architecture: factur-x is pinned to 3.x on s390x, where saxonche publishes no wheel, and PyMuPDF is set aside there
[UPD] changelog: the 143 commits this branch actually carries
The Unreleased section described the previous cycle. It named the COW
tools and the QEMU deployment, then stopped -- and this branch is mostly
what came after: an Odoo migration that drives itself, a state screen, a
quality report, and the repairs each bump turned out to need.
Twenty-one entries, fourteen of them Added. Read from the commits rather
than from memory, and grouped by what a reader would look for: the
migration run, its state, its quality, its repairs, its smoke tests. The
five commits that only touch documentation or tests are left out; the
ones that change what the tool does are all there.
Nothing already listed is repeated. The COW tools, the analysis toolkit
and the deployment form keep the entries they had.
--- FR ---
La section Unreleased décrivait le cycle précédent. Elle nommait les
outils COW et le déploiement QEMU, puis s'arrêtait — or cette branche est
surtout ce qui a suivi : une migration Odoo qui se conduit seule, un écran
d'état, un rapport de qualité, et les réparations que chaque palier a
révélées nécessaires.
Vingt et une entrées, dont quatorze sous Ajouté. Lues dans les commits
plutôt que de mémoire, et regroupées selon ce qu'un lecteur cherche :
l'exécution de la migration, son état, sa qualité, ses réparations, ses
tests de fumée. Les cinq commits qui ne touchent que la documentation ou
les tests sont écartés ; ceux qui changent ce que fait l'outil y sont
tous.
Rien de déjà listé n'est redit. Les outils COW, la boîte à outils
d'analyse et le formulaire de déploiement gardent leurs entrées.
Assisted-by: Claude Opus 5
2026-08-23 01:06:25 -04:00
- Enter targets the highest supported Odoo version, the default being computed from the menu
- A make target runs the unit tests, with the mobile dependency declared
[UPD] changelog: record the unreleased work
The last content update was 2026-02-14, and 145 commits landed since. The
first pass only covered what was fresh in mind and left about twenty notable
entries out: the RTK menu, the AI assistant tools, the deploy and sshfs
commands, the backup and erase commands, the Selenium work, the BRIN index
advisor, the STL support, the mobile manifests and the new dependencies.
Coverage was then checked against the 145 subjects rather than from memory,
one topic at a time.
The Security entry states its scope exactly — display and logging — because
the password still reaches the process argv, and a changelog must not promise
more than was done.
--- FR ---
La dernière mise à jour de contenu date du 2026-02-14, et 145 commits ont
suivi. La première passe n'a couvert que ce qui était frais et laissait de
côté une vingtaine d'entrées notables : le menu RTK, les outils d'assistance
IA, les commandes de déploiement et sshfs, la sauvegarde et l'effacement de
base, le travail Selenium, le conseiller d'index BRIN, le support STL, les
manifestes mobiles et les nouvelles dépendances.
La couverture a ensuite été vérifiée contre les 145 sujets, sujet par sujet,
plutôt que de mémoire.
L'entrée Sécurité énonce exactement sa portée — affichage et journalisation —
car le mot de passe atteint encore l'argv du processus, et un changelog ne
doit pas promettre plus que ce qui a été fait.
Assisted-by: Claude Opus 5
2026-08-10 03:10:50 -04:00
## Fixed
- A failed installation is no longer reported as a success: the exit code is
propagated through the whole chain
- --with_extra now applies to an already-installed environment
- The addons path no longer points at a repository the Odoo 18 manifest never
clones
- repo init receives a branch name, so a fresh install no longer fails
- The install monitor follows a VM whose DHCP lease changes
- Installation on Debian 13, Fedora and Ubuntu 26.04: apt lock, wkhtmltopdf,
SELinux and the missing C compiler
- Documentation accents and the parallel markdown generation
[UPD] changelog: the deployment and installation cycle
The Unreleased section already covered the QEMU deployment, the graphical
VMs and the COW migration tools, but stopped at what existed a month ago.
It says nothing of the per-VM settings, of the mise and uv providers, or
of the s390x build chain -- and a reader deciding whether to upgrade has
only this file to go on.
Fourteen entries, spread over Added, Changed and Fixed. Nothing is
repeated: the platforms and tools already listed stay where they are, and
only what the entry does not already say is added. The migration work
follows on its own, at the end of the branch.
Entries are written on one line. Nothing wraps markdown here -- no
max_line_length in .editorconfig, prettier never runs on .md -- and a
sentence cut at column 80 reads worse in a diff and in a terminal. The
three entries this cycle had already folded are flattened with them.
Written in CHANGELOG.base.md, the only source; the two generated files
come from it. mmg was unavailable here, so the generation was reproduced
by a filter checked byte-for-byte against the committed output before
being trusted.
--- FR ---
La section Unreleased couvrait déjà le déploiement QEMU, les VM graphiques
et les outils de migration COW, mais s'arrêtait à l'état d'il y a un mois.
Elle ne dit rien des réglages par VM, des fournisseurs mise et uv, ni de
la chaîne de compilation s390x — et qui décide de mettre à jour n'a que ce
fichier pour se prononcer.
Quatorze entrées, réparties sur Ajouté, Modifié et Corrigé. Rien n'est
redit : les plateformes et outils déjà listés restent en place, et seul ce
que l'entrée ne dit pas encore est ajouté. Le travail de migration suit
à part, en fin de branche.
Les entrées tiennent sur une ligne. Rien n'impose de plier le markdown
ici — pas de max_line_length dans .editorconfig, prettier ne tourne
jamais sur du .md — et une phrase coupée à la colonne 80 se lit moins
bien, en diff comme au terminal. Les trois entrées déjà pliées de ce
cycle sont mises à plat avec elles.
Écrit dans CHANGELOG.base.md, seule source ; les deux fichiers générés en
découlent. mmg étant indisponible ici, la génération a été reproduite par
un filtre vérifié à l'octet près contre la sortie déjà versionnée avant
d'être employé.
Assisted-by: Claude Opus 5
2026-08-17 00:10:08 -04:00
- The s390x build chain, on Debian as on EL9, EL10, Fedora and openSUSE: missing compilers and headers, Rust for cryptography and bcrypt, qpdf for pikepdf, libclang for pymupdf, package names that change across releases, and a batch that failed on one unknown name without ever naming it
- A graphical desktop install froze for thirty minutes on a snap package that could not reach the store
- The compiler was killed for lack of memory while building CPython on a small s390x guest
- The README listed neither Fedora, openSUSE, Linux Mint nor Debian 13, all of them supported
[UPD] changelog: the migration work of this cycle
The eleven migration commits sit at the end of the branch, apart from the
deployment work, so their changelog entries follow them rather than
announcing features the earlier commits do not carry.
Four entries: going back to a step and acting on the copy-on-write copies
at announcement time, the website copy analysis, the tools now speaking
the system language, and their executable bit.
Written in CHANGELOG.base.md, the only source; the two generated files
come from it.
--- FR ---
Les onze commits de migration sont en fin de branche, à l'écart du
travail de déploiement : leurs entrées de changelog les suivent donc,
plutôt que d'annoncer des fonctionnalités que les commits précédents ne
portent pas.
Quatre entrées : le retour à une étape et l'action sur les copies
copy-on-write dès leur annonce, l'analyse des copies de site, les outils
qui parlent désormais la langue du système, et leur bit d'exécution.
Écrit dans CHANGELOG.base.md, seule source ; les deux fichiers générés en
découlent.
Assisted-by: Claude Opus 5
2026-08-17 00:42:11 -04:00
- The COW migration tools and the database upgrade speak the system language
- The analysis and migration tools are executable
[UPD] changelog: the 143 commits this branch actually carries
The Unreleased section described the previous cycle. It named the COW
tools and the QEMU deployment, then stopped -- and this branch is mostly
what came after: an Odoo migration that drives itself, a state screen, a
quality report, and the repairs each bump turned out to need.
Twenty-one entries, fourteen of them Added. Read from the commits rather
than from memory, and grouped by what a reader would look for: the
migration run, its state, its quality, its repairs, its smoke tests. The
five commits that only touch documentation or tests are left out; the
ones that change what the tool does are all there.
Nothing already listed is repeated. The COW tools, the analysis toolkit
and the deployment form keep the entries they had.
--- FR ---
La section Unreleased décrivait le cycle précédent. Elle nommait les
outils COW et le déploiement QEMU, puis s'arrêtait — or cette branche est
surtout ce qui a suivi : une migration Odoo qui se conduit seule, un écran
d'état, un rapport de qualité, et les réparations que chaque palier a
révélées nécessaires.
Vingt et une entrées, dont quatorze sous Ajouté. Lues dans les commits
plutôt que de mémoire, et regroupées selon ce qu'un lecteur cherche :
l'exécution de la migration, son état, sa qualité, ses réparations, ses
tests de fumée. Les cinq commits qui ne touchent que la documentation ou
les tests sont écartés ; ceux qui changent ce que fait l'outil y sont
tous.
Rien de déjà listé n'est redit. Les outils COW, la boîte à outils
d'analyse et le formulaire de déploiement gardent leurs entrées.
Assisted-by: Claude Opus 5
2026-08-23 01:06:25 -04:00
- The forgejo installer no longer echoes the administrator password it has just set
- The Selenium login re-sent the configured default instead of the credentials it was given, when it retried after dismissing a modal
- db_restore asks the master password again instead of dying on a typo
- pyproj needs the proj binary, not only its headers, and PROJ is built where the distribution lags behind
- run.sh is launched through bash, against systemd's 203/EXEC failures
- pykcs11 compiles with SWIG 4.3 and above
- os-release replaces lsb_release, and an IP collision is easier to see
[UPD] changelog: record the unreleased work
The last content update was 2026-02-14, and 145 commits landed since. The
first pass only covered what was fresh in mind and left about twenty notable
entries out: the RTK menu, the AI assistant tools, the deploy and sshfs
commands, the backup and erase commands, the Selenium work, the BRIN index
advisor, the STL support, the mobile manifests and the new dependencies.
Coverage was then checked against the 145 subjects rather than from memory,
one topic at a time.
The Security entry states its scope exactly — display and logging — because
the password still reaches the process argv, and a changelog must not promise
more than was done.
--- FR ---
La dernière mise à jour de contenu date du 2026-02-14, et 145 commits ont
suivi. La première passe n'a couvert que ce qui était frais et laissait de
côté une vingtaine d'entrées notables : le menu RTK, les outils d'assistance
IA, les commandes de déploiement et sshfs, la sauvegarde et l'effacement de
base, le travail Selenium, le conseiller d'index BRIN, le support STL, les
manifestes mobiles et les nouvelles dépendances.
La couverture a ensuite été vérifiée contre les 145 sujets, sujet par sujet,
plutôt que de mémoire.
L'entrée Sécurité énonce exactement sa portée — affichage et journalisation —
car le mot de passe atteint encore l'argv du processus, et un changelog ne
doit pas promettre plus que ce qui a été fait.
Assisted-by: Claude Opus 5
2026-08-10 03:10:50 -04:00
## Security
- Passwords and tokens are redacted before a command is displayed or logged
[UPD] changelog: the 143 commits this branch actually carries
The Unreleased section described the previous cycle. It named the COW
tools and the QEMU deployment, then stopped -- and this branch is mostly
what came after: an Odoo migration that drives itself, a state screen, a
quality report, and the repairs each bump turned out to need.
Twenty-one entries, fourteen of them Added. Read from the commits rather
than from memory, and grouped by what a reader would look for: the
migration run, its state, its quality, its repairs, its smoke tests. The
five commits that only touch documentation or tests are left out; the
ones that change what the tool does are all there.
Nothing already listed is repeated. The COW tools, the analysis toolkit
and the deployment form keep the entries they had.
--- FR ---
La section Unreleased décrivait le cycle précédent. Elle nommait les
outils COW et le déploiement QEMU, puis s'arrêtait — or cette branche est
surtout ce qui a suivi : une migration Odoo qui se conduit seule, un écran
d'état, un rapport de qualité, et les réparations que chaque palier a
révélées nécessaires.
Vingt et une entrées, dont quatorze sous Ajouté. Lues dans les commits
plutôt que de mémoire, et regroupées selon ce qu'un lecteur cherche :
l'exécution de la migration, son état, sa qualité, ses réparations, ses
tests de fumée. Les cinq commits qui ne touchent que la documentation ou
les tests sont écartés ; ceux qui changent ce que fait l'outil y sont
tous.
Rien de déjà listé n'est redit. Les outils COW, la boîte à outils
d'analyse et le formulaire de déploiement gardent leurs entrées.
Assisted-by: Claude Opus 5
2026-08-23 01:06:25 -04:00
- The Odoo master password no longer travels on the command line: MASTER_PWD carries it, and /proc/< pid > /environ is readable only by its owner where /proc/< pid > /cmdline is readable by every user on the machine (needs the matching commit in the odoo fork)
- The KeePass password reaches the Selenium login the same way: the command carries the NAME of an environment variable, never the value
- What a command PRINTS is redacted like the command itself: a tool that reprints its own arguments no longer puts the secret back into the terminal and into the log file
2025-04-13 12:50:14 -04:00
2026-02-15 01:07:25 -05:00
2025-04-13 12:50:14 -04:00
## [1.6.0] - 2025-04-25
## Added
2025-04-12 19:07:09 -04:00
- Support multiple Odoo versions (12.0, 14.0, 16.0) in same workspace
2025-04-13 12:50:14 -04:00
- This will help for the migration of modules
2025-04-12 19:07:09 -04:00
- Selenium script for increasing open software client interface and automating some actions.
2025-04-12 17:17:35 -04:00
- Video recording
2025-04-12 19:07:09 -04:00
- Support scrolling and word generating
2023-12-02 14:26:16 -05:00
- FAQ about kill git-daemon
2025-04-12 19:07:09 -04:00
- Supports Arch Linux, Ubuntu 23.10 to 25.04
2024-05-03 23:29:59 -04:00
- ADD repo JayVora-SerpentCS_SerpentCS_Contributions
2024-11-05 14:03:16 -05:00
- ADD repo CybroOdoo_CybroAddons
2023-12-02 14:26:16 -05:00
## Changed
2024-11-05 14:03:16 -05:00
- Refactor image_db regeneration, use configuration JSON to build image
2025-04-12 19:07:09 -04:00
- Guide for moving dev to prod
2024-11-05 14:46:31 -05:00
- Update Docker buster to bullseye
2023-12-02 14:26:16 -05:00
- Improve format script to help code-generator
- Improve PyCharm script
- Support OSX for open-terminal
2024-04-22 23:45:53 -04:00
- Remove docker-compose and replace by docker compose
2024-05-03 23:20:42 -04:00
- Update Poetry 1.3.1 to 1.5.1
- Test can be launched with a json configuration and support log/result individually
- Script to search docker compose into the system
- Script search class model can output into json format and support field information
2025-04-13 12:50:14 -04:00
- Improve Docker minimal installation docs in README for Ubuntu, test with
Debian (https://github.com/ERPLibre/ERPLibre/issues/73)
2025-04-12 19:07:09 -04:00
- Statistic script showing evolution module into ERPLibre supporting Odoo 17 and Odoo 18
2024-12-01 04:55:15 -05:00
- Latest version wkhtmltopdf 0.12.6.1-3
2023-12-02 14:26:16 -05:00
### Fixed
2025-04-13 04:08:57 -04:00
- NPM installed locally and not globally
2025-04-12 17:17:35 -04:00
- Improve python code writer efficiency
2024-11-05 14:03:16 -05:00
- Config generator supporting space into ERPLibre directory
2025-04-12 19:07:09 -04:00
- Script to update Poetry to support @ URL
2024-12-01 04:55:15 -05:00
- OSX and recent Ubuntu installation
2025-04-12 17:17:35 -04:00
- Cloudflare script integration
2023-12-02 14:26:16 -05:00
2026-02-15 01:07:25 -05:00
2023-07-07 02:35:46 -04:00
## [1.5.0] - 2023-07-07
2024-11-05 14:46:31 -05:00
**Migration notes**
2022-12-21 00:22:20 -05:00
2025-04-12 19:07:09 -04:00
Recreating the virtual environment
2022-12-29 11:42:52 -05:00
2026-02-15 01:07:25 -05:00
2022-12-29 11:42:52 -05:00
```bash
2023-01-17 16:01:49 -05:00
rm -rf ~/.poetry
rm -rf ~/.pyenv
2022-12-29 11:42:52 -05:00
rm ./get-poetry.py
2023-01-17 16:01:49 -05:00
rm -rf ./.venv
2022-12-29 11:42:52 -05:00
make install
```
2026-02-15 01:07:25 -05:00
2024-11-05 14:46:31 -05:00
Do a backup of your database and update all modules :
2022-12-29 11:42:52 -05:00
2026-02-15 01:07:25 -05:00
2022-12-29 11:42:52 -05:00
```bash
./run.sh --no-http --stop-after-init -d DATABASE -u all
```
2022-12-21 00:22:20 -05:00
2022-12-21 22:58:08 -05:00
## Added
- Support Ubuntu 22.04 with installation script
2022-12-29 11:42:52 -05:00
- Module mail_history and fetchmail_thread_default in base image DB
- Makefile can generate image DB in parallel with `image_db_create_all_parallel`
2023-01-02 20:35:06 -05:00
- Makefile can run all code_generator with `run_parallel_cg` and `run_parallel_cg_template`
- Script to generate Pycharm configuration and exclude directory
2023-07-07 02:35:46 -04:00
- Support docker alpha+beta
- Limit memory execution when install in develop
- Template nginx configuration
- Script code count statistic
- Script show OCA evolution module statistic
- Windows development support, check documentation installation
- New project (code generator to create module) support params configuration
- Module sync_external_model to synchronise Odoo models with module
2022-12-21 22:58:08 -05:00
2022-12-21 00:22:20 -05:00
## Changed
2023-07-07 02:35:46 -04:00
- Odoo 12.0 update from 22-07-2020 to 01-01-2023
2022-12-21 22:58:08 -05:00
- Update pip dependency with security update
- Pillow==9.3.0
- psycopg2==2.9.5
2023-07-07 02:35:46 -04:00
- Werkzeug==0.16.1
- check diff of file pyproject.toml for all information
2022-12-21 02:52:32 -05:00
- Update to Python==3.7.16
2022-12-21 00:22:20 -05:00
- Update poetry==1.3.1
2023-07-07 02:35:46 -04:00
- Update multilingual-markdown==1.0.3
2022-12-21 22:58:08 -05:00
- Update imagedb with all Odoo update
- Repo documentation-user from Odoo change to documentation
- Repo odooaktiv/QuotationRevision is deleted
2022-12-29 11:42:52 -05:00
- Update all repo (91) to end of 2022
2023-01-01 06:21:54 -05:00
- Rename module project_task_subtask_time_range => project_time_budget
- Rename module project_task_time_range => project_time_range
2023-01-02 20:35:06 -05:00
- Refactor script emplacement, create directory in ./script/ per subject
2023-07-07 02:35:46 -04:00
- Use command parallel in Makefile
- Update sphinx version
- Improve script location
2022-12-21 22:58:08 -05:00
### Fixed
- Debian 11 installation script
2023-07-07 02:35:46 -04:00
- Test result
- OSX installation (not finish to support)
- Poetry update support '~='
2022-12-21 00:22:20 -05:00
2022-12-21 04:54:43 -05:00
### Removed
- Ubuntu 18.04 is broken, need to install manually nodejs and npm
2022-12-29 11:42:52 -05:00
- Module contract_portal and remove signature in portal contract, need an update
2023-01-01 06:21:54 -05:00
- Downgrade module helpdesk_mgmt to remove email team and tracking field
- Module helpdesk_partner
- Module helpdesk_service_call
- Module helpdesk_supplier
- Module helpdesk_mrp
- Module helpdesk_mailing_list
- Module helpdesk_join_team
- Module project_time_management
2023-07-07 02:35:46 -04:00
- Support of vatnumber, too old
- Deprecated python dependency like pycrypto
2022-12-21 04:54:43 -05:00
2026-02-15 01:07:25 -05:00
2022-10-05 03:00:57 -04:00
## [1.4.0] - 2022-10-05
2022-03-03 22:29:51 -05:00
**Migration note**
2022-10-05 02:06:37 -04:00
- Update module `website` ,`website_form_builder`.
2022-08-03 06:32:26 -04:00
- For dev, run `poetry cache clear --all pypi`
2022-03-03 22:29:51 -05:00
### Added
- Script run_parallel_test.sh to execute all tests in parallel for better execution speed
- Documentation to use docker in production
- Add repo:
- Ajepe odoo-addons to support restful
- OmniaGIT Odoo PLM
- MathBenTech family-management
2022-05-21 04:50:10 -04:00
- erplibre-3D-printing-addons
2022-03-03 22:29:51 -05:00
- Add module:
- iohub_connector to support mqtt
2022-10-05 02:06:37 -04:00
- website_snippet_all to install all snippets, extracted from all themes
- website_blog_snippet_all to install website_snippet_all with website_blog and associated snippet
2022-05-21 04:50:10 -04:00
- sinerkia_jitsi_meet to integrate Jitsi
2022-10-05 02:06:37 -04:00
- erplibre_website_snippets_jitsi to integrate Jitsi in snippet, work in progress
2022-03-03 22:29:51 -05:00
- Add module by default:
- auto_backup
- muk_website_branding
- website_snippet_anchor
- website_anchor_smooth_scroll
- crm_team_quebec
2022-08-03 06:32:26 -04:00
- partner_no_vat
2022-03-03 22:29:51 -05:00
- Documentation Odoo dev
2022-05-21 04:50:10 -04:00
- Format command supported addons
- Install theme with Odoo command
- Script to install theme addons
- Image website with default theme
- Image erplibre demo
- Test with coverage
2022-03-03 22:29:51 -05:00
### Changed
- Downgrade sphinx to 1.6.7 to support Odoo dev documentation
2022-08-03 06:32:26 -04:00
- Update to poetry==1.1.14
2022-03-03 22:29:51 -05:00
- Update pip dependency with security update
- Pillow==9.0.1
2022-05-21 04:50:10 -04:00
- PyPDF2==1.27.8
2022-08-03 06:32:26 -04:00
- lxml==4.9.1
2022-05-21 04:50:10 -04:00
- Code generator export website with attachments and scss design file with documentation
2022-10-05 02:06:37 -04:00
- Code generator support multiple snippets
- Into repo Numigi_odoo-project-addons rename module project_template to project_template_numigi
- Into repo Numigi_odoo-product-addons rename module product_dimension to product_dimension_numigi
- Into repo Numigi_odoo-partner-addons, re-enable auto-install module
- Into repo muk-it_muk_website, re-enable auto-install module
2022-03-03 22:29:51 -05:00
### Fixed
- Poetry supports insensitive python dependency
- Code generator new project supports relative path and check duplicated paths
2022-08-03 06:32:26 -04:00
- Muk web theme table header background-color and on hover for Many2many
- Script docker-compose use lowercase name
2022-10-05 02:06:37 -04:00
- website_form_builder HTML support and allow option to align send button
- Odoo cherry-pick 2 commits bus fix
- Minor fix css color into module hr_theme from repo CybroOdoo_OpenHRMS
2022-10-06 04:18:26 -04:00
- Typo in project task when logging time
2022-10-05 02:06:37 -04:00
### Removed
- Module package erplibre from ERPLibre_erplibre_addons and use instead image creation, check Makefile
2022-03-03 22:29:51 -05:00
2026-02-15 01:07:25 -05:00
2021-09-28 02:44:49 -04:00
## [1.3.0] - 2022-01-25
**Migration note**
With new version of poetry, a bug occurs in the update. The solution is to delete the directory to let it
recreate. `rm -rf ~/.poetry`
### Added
- Code generator supports view : activity, calendar, diagram, form, graph, kanban, pivot, search, timeline and tree
- Code generator supports portal view field and form creation
- Code generator generates generic snippets for demo_portal
- Code generator generates code_generator with code_generator_code_generator
- Code generator tests mariadb migrator
- Code generator supports javascript interpretation for snippet
- Code generator supports inheritance
- Code generator new project to create the suite of generation code
- Script to test the generation of module `code_generator`
- Make test_full_fast to run all test in parallel
- Module `web_timeline` and `web_diagram_position` in base image.
- Module `odoo-formio` from novacode-nl
- Module `design_themes` from Odoo
- Format python header with isort
### Changed
- Update to Python==3.7.12
- Update to poetry==1.1.12
- Update pip dependency with security update
- Pillow==9.0.0
- lxml==4.7.1
- babel==2.9.1
- pyyaml==6.0
- reportlab==3.6.5
- Web diagram module has all color of the rainbow in option
- Refactor and simplify code of code_generator, better support of code reader
### Fixed
- Downgrade Werkzeug==0.11.15, only this version is supported by Odoo 12.0. This fixes some http request behind a proxy.
2026-02-15 01:07:25 -05:00
2021-09-27 23:29:24 -04:00
## [1.2.1] - 2021-09-28
### Added
- doc/migration.md
### Changed
- Update pip dependency with security update
2021-09-28 02:44:49 -04:00
- Jinja2==2.11.3
- lxml==4.6.3
- cryptography==3.4.8
- psutil==5.6.6
- Pillow==8.3.2
- Werkzeug==0.15.3
2021-09-27 23:29:24 -04:00
- Script separate generate_config.sh from install_locally.sh
- Improve developer documentation
- More Docker script
#### Code generator
- Improve db_servers generation code
- Improve wizard generate UI menu
### Fixed
- Mobile view menu item in Web interface from muk_web_theme
2026-02-15 01:07:25 -05:00
2021-09-27 23:29:24 -04:00
## [1.2.0] - 2021-07-21
2021-07-21 01:02:32 -04:00
2021-07-01 03:37:25 -04:00
**Migration note**
Because addons repository has change, config file need to be updated.
2021-09-28 02:44:49 -04:00
2021-07-01 03:37:25 -04:00
- When upgrading to version 1.2.0:
2021-09-28 02:44:49 -04:00
- From docker
- Clone project if only download docker-compose
- `git init`
- `git remote add origin https://github.com/erplibre/erplibre`
- `git fetch`
- `mv ./docker-compose.yml /tmp/temp_docker-compose.yml`
- `git checkout master`
- `mv /tmp/temp_docker-compose.yml ./docker-compose.yml`
- Update `./docker-compose.yml` depending of difference with git.
- Run script `make docker_exec_erplibre_gen_config`
- Restart the docker `make docker_restart_daemon`
- From vanilla
- Run script `make install_dev`
- Restart your daemon
- Regenerate master password manually
2021-07-01 03:37:25 -04:00
2021-01-13 23:09:12 -05:00
### Added
2021-06-30 19:44:11 -04:00
- Adapt script to give an execution status
- Multilingual markdown
- Guide to use Cloudflare with DDNS
- Script to check git diff and ignore date
- Repo with ERPLibre image
- Improve git repo usage, filter repo by use case
2021-07-01 03:37:25 -04:00
- ERPLibre theme website of TechnoLibre
- ERPLibre website snippet
2021-09-28 02:44:49 -04:00
- Basic HTML snippets
- Snippet card
- Snippet timelines
2021-07-01 03:37:25 -04:00
- Module contract_digitized_signature with contract_portal
- Module disable auto_backup
- Odoo cli db command to manipulate restoration db
- Odoo cli i18n command to generate i18n pot files
2021-06-30 19:44:11 -04:00
#### Makefile
2021-06-30 22:26:42 -04:00
2021-06-30 19:44:11 -04:00
- Format code
- Code generator test
- Addons installation
- OS installation
- Restore database
- Docker execution
#### Code generator
2021-06-30 22:26:42 -04:00
2021-03-09 04:28:14 -05:00
- Code generator for Odoo module, depending of ERPLibre
2021-06-30 22:26:42 -04:00
- Support map geospatial
2021-06-30 19:44:11 -04:00
- Support i18n
- Script to transform Python and XML to Python code writer script to regenerate themselves
2021-01-13 23:09:12 -05:00
2020-12-11 00:46:28 -05:00
### Changed
2021-06-30 19:44:11 -04:00
- Update Python dependency with Poetry
- Format all Python code with black
2021-07-01 03:37:25 -04:00
- Module auto_backup with sftp host key
- Module muk_website_branding use ERPLibre branding
2021-09-28 02:44:49 -04:00
- Update docs with vscode support, custom document layout, custom email template and trick to use params to share
variable
2021-06-30 19:44:11 -04:00
#### Docker
- Use buster python 3.7.7 image to remove pyenv
- Update Postgresql to support Postgis
- Support volume addons /ERPLibre/addons/addons
### Fixed
- Ubuntu installation
- Poetry installation
2021-06-30 22:26:42 -04:00
- Geospatial with postgis can be installed
2020-12-11 00:46:28 -05:00
2026-02-15 01:07:25 -05:00
2020-12-11 00:46:28 -05:00
## [1.1.1] - 2020-12-11
2020-09-25 04:32:19 -04:00
### Added
2020-12-11 00:46:28 -05:00
2020-09-25 04:32:19 -04:00
- Developer, test, migration and user documentation
2020-12-11 00:46:28 -05:00
- Branding ERPLibre with muk_branding
- Uninstall module from parameter Odoo
- Makefile to generate ERPLibre documentation WIP
- Docker support volume on /etc/odoo
- Docker support update database
2020-09-25 04:32:19 -04:00
### Changed
2020-12-11 00:46:28 -05:00
- Better documentation on how to use ERPLibre and release
- Support wkhtmltox_0.12.6-1
### Fixed
- db_backup to accept public host key on sftp
- Docker dependency
- Freeze poetry version 1.0.10
2020-09-29 19:43:42 -04:00
2026-02-15 01:07:25 -05:00
2020-09-29 19:43:42 -04:00
## [1.1.0] - 2020-09-30
2020-12-11 00:46:28 -05:00
2020-07-05 22:48:07 -04:00
### Added
2020-12-11 00:46:28 -05:00
2020-07-05 22:48:07 -04:00
- Docker
2020-09-29 19:43:42 -04:00
- Pyenv to manage python version
- Poetry to manage python dependencies
- Script poetry_update to search all dependencies in addons
- Travis CI WIP
- TODO.md
- Guide to update all repositories with community
- Update manifest
- Add missing OCA repos
- Add medical, property management and more
- Add cloud/saas repo
2020-07-05 22:48:07 -04:00
### Changed
2020-12-11 00:46:28 -05:00
2020-09-29 19:43:42 -04:00
- Update to Odoo Community 12.0 and all addons
- Rename venv to .venv
- More documentation on how to use ERPLibre
2020-07-05 22:48:07 -04:00
2026-02-15 01:07:25 -05:00
2020-07-13 01:06:56 -04:00
## [1.0.1] - 2020-07-14
2020-12-11 00:46:28 -05:00
2020-07-13 01:06:56 -04:00
### Added
2020-12-11 00:46:28 -05:00
2020-09-29 19:43:42 -04:00
- Improved documentation with development and production environment
- Improved documentation with git repo
2020-07-13 01:06:56 -04:00
- Move default.xml manifest to root, the default location
2023-01-03 06:03:02 -05:00
- Support default.staged.xml to update prod with dev
2020-09-29 19:43:42 -04:00
- Feature to show diff between manifests or between repo of different manifests
2020-07-13 01:06:56 -04:00
- Update manifest
- Muk theme in erplibre_base
- Add draft account invoice approbation in portal
- New module sale_fix_update_price_unit_when_update_qty
- New module account_invoice_approbation
- New module sale_margin_editor
2020-07-05 22:48:07 -04:00
### Fixed
2020-12-11 00:46:28 -05:00
2020-07-13 01:06:56 -04:00
- Production installation with git_repo
2020-07-05 22:48:07 -04:00
2026-02-15 01:07:25 -05:00
2020-07-05 22:48:07 -04:00
## [1.0.0] - 2020-07-04
2020-12-11 00:46:28 -05:00
2020-07-05 22:48:07 -04:00
### Added
2020-12-11 00:46:28 -05:00
2020-07-05 22:48:07 -04:00
- Environment of development, discovery and production with documentation and script.
2020-09-29 19:43:42 -04:00
- Google git-repo to support addons repository instead of using Git submodule.
2020-07-05 22:48:07 -04:00
### Removed
2020-12-11 00:46:28 -05:00
2020-07-05 22:48:07 -04:00
- Git submodule
2026-02-15 01:07:25 -05:00
2020-07-05 22:48:07 -04:00
## [0.1.1] - 2020-04-28
2020-12-11 00:46:28 -05:00
2020-07-05 22:48:07 -04:00
### Added
2020-12-11 00:46:28 -05:00
2020-07-05 22:48:07 -04:00
- Support helpdesk supplier, helper, employee and services
- Support [SanteLibre.ca ](https://santelibre.ca ) with MRP, website, hr, ecommerce
- Donation module with thermometer for website
- Script to fork project and all repos in submodule to create ERPLibre
2026-02-15 01:07:25 -05:00
2020-07-05 22:48:07 -04:00
## [0.1.0] - 2020-04-20
2020-12-11 00:46:28 -05:00
2020-07-05 22:48:07 -04:00
### Added
2020-12-11 00:46:28 -05:00
2020-07-05 22:48:07 -04:00
- Move project from https://github.com/mathbentech/InstallScript to ERPLibre.
- Support of Odoo Community 12.0 2019-11-19 94bcbc92e5e5a6fd3de7267e3c01f8c11fb045f4.
### Changed
2020-12-11 00:46:28 -05:00
2020-07-05 22:48:07 -04:00
- Support scrummer, project, sale, website, helpdesk and hr
- Support Nginx and improve installation
### Fixed
2020-12-11 00:46:28 -05:00
2020-07-05 22:48:07 -04:00
- Support only python3.6 and python3.7, python3.8 causes error in runtime.
2026-02-15 01:07:25 -05:00
2025-04-13 12:50:14 -04:00
[Unreleased]: https://github.com/ERPLibre/ERPLibre/compare/v1.6.0...HEAD
[1.6.0]: https://github.com/ERPLibre/ERPLibre/compare/v1.5.0...v1.6.0
2023-07-07 02:35:46 -04:00
[1.5.0]: https://github.com/ERPLibre/ERPLibre/compare/v1.4.0...v1.5.0
2022-10-05 03:00:57 -04:00
[1.4.0]: https://github.com/ERPLibre/ERPLibre/compare/v1.3.0...v1.4.0
2021-09-28 02:44:49 -04:00
[1.3.0]: https://github.com/ERPLibre/ERPLibre/compare/v1.2.1...v1.3.0
2021-09-27 23:29:24 -04:00
[1.2.1]: https://github.com/ERPLibre/ERPLibre/compare/v1.2.0...v1.2.1
2021-07-21 01:02:32 -04:00
[1.2.0]: https://github.com/ERPLibre/ERPLibre/compare/v1.1.1...v1.2.0
2020-12-11 00:46:28 -05:00
[1.1.1]: https://github.com/ERPLibre/ERPLibre/compare/v1.0.1...v1.1.1
[1.1.0]: https://github.com/ERPLibre/ERPLibre/compare/v1.0.1...v1.1.0
2020-11-20 23:22:28 -05:00
[1.0.1]: https://github.com/ERPLibre/ERPLibre/compare/v1.0.0...v1.0.1
2020-12-11 00:46:28 -05:00
2020-11-20 23:22:28 -05:00
[1.0.0]: https://github.com/ERPLibre/ERPLibre/compare/v0.1.1...v1.0.0
2020-12-11 00:46:28 -05:00
2020-11-20 23:22:28 -05:00
[0.1.1]: https://github.com/ERPLibre/ERPLibre/compare/v0.1.0...v0.1.1
2020-12-11 00:46:28 -05:00
2026-02-15 01:07:25 -05:00
[0.1.0]: https://github.com/ERPLibre/ERPLibre/releases/tag/v0.1.0