Huit puces sous « Unreleased », pour qui choisit de mettre à jour et non
pour qui relit le diff : ce que l'outil joint désormais, et ce qu'il
refusait avant. Le VPN lui-même est arrivé en 1.8.0 ; ces lignes disent
ce qui s'y ajoute.
La section « Added » n'existait pas encore sous « Unreleased » : elle est
créée dans les deux langues, au format du fichier, et les deux listes se
lisent côte à côte dans le même ordre. Régénéré par mmg. Rien
d'identifiant : ni établissement, ni passerelle réelle, ni adresse.
--- EN ---
Eight bullets under "Unreleased", written for someone choosing whether to
upgrade and not for someone reviewing the diff: what the tool now reaches,
and what it used to refuse. The VPN itself landed in 1.8.0; these lines
say what is being added to it.
The "Added" section did not exist yet under "Unreleased": it is created in
both languages, in the file's own format, and the two lists read side by
side in the same order. Regenerated by mmg. Nothing identifying: no
institution, no real gateway, no address.
Assisted-by: Claude Opus 5
Les 39 puces du non-publié décrivent du travail fini qu'aucun numéro ne
permettait de citer. La section 1.8.0 les porte, avec la note de migration que
réclament le choix de l'interpréteur Python et le retrait d'Ubuntu 20.04 et
22.04. La version déclarée suit, comme le veut doc/RELEASE.base.md : le
fichier semver que lit env_var.sh, les huit pyproject, npm, CLAUDE.md et la
note des versions supportées. La ligne de contracts/compatibility.json reste
en 1.7.0, elle atteste un appariement mobile éprouvé et non la version
courante. Le commentaire de todo.py ne nomme plus de version, celle du dépôt
étant marquée « default » dans le fichier des versions supportées.
Vérifié : ERPLIBRE_VERSION=1.8.0, parité 17/8/10/2/2, tests de version verts.
--- EN ---
The unreleased list's 39 entries describe finished work no number could cite.
The 1.8.0 section carries them, with the migration note that choosing the
Python interpreter and dropping Ubuntu 20.04 and 22.04 call for. The declared
version follows, as doc/RELEASE.base.md wants: the semver file env_var.sh
reads, the eight pyproject files, npm, CLAUDE.md and the supported-version
note. The contracts/compatibility.json row stays at 1.7.0, attesting a tested
mobile pairing and not the current version. The todo.py comment names no
version any more, the repository's own being marked « default » in the
supported-version file. Checked: ERPLIBRE_VERSION=1.8.0, 17/8/10/2/2 parity,
version tests green.
Assisted-by: Claude Opus 5
La section portait 152 puces par langue, souvent d'un paragraphe chacune :
illisible pour qui décide s'il met à jour, et un changelog se lit pour
décider, non pour relire un diff. Elle en porte 39, d'une ligne, regroupées
par sujet pour qu'aucun thème ne disparaisse — les 24 puces sur les VM QEMU
tiennent en cinq lignes, les 14 correctifs d'installation en une. Le détail
part volontairement ; il reste dans les commits. Restent la liste des
distributions, qu'un lecteur y cherche la sienne, et les chiffres qui bornent
en trois mots. Vérifié : parité 17/8/10/2/2 dans les deux langues.
--- EN ---
The section carried 152 entries per language, often a paragraph each:
unreadable for someone deciding whether to upgrade, and a changelog is read
to decide, not to review a diff. It now carries 39, one line each, grouped by
subject so no theme disappears — the 24 entries on QEMU VMs fit in five
lines, the 14 installation fixes in one. The detail goes deliberately; it
stays in the commits. What stays is the distribution list, so a reader can
look for their own, and the figures that bound a fix in three words.
Checked: 17/8/10/2/2 parity in both languages.
Assisted-by: Claude Opus 5
Le tag v1.7.0 existe depuis le 11 mars 2026 sans section : ses 209 commits
restaient au non-publié, où un lecteur qui compare une version à ses notes ne
trouvait rien. Le tri suit l'ascendance du tag et non la date d'écriture d'une
puce : le changelog AU tag en donne 19, et douze autres, écrites depuis,
décrivaient du travail antérieur — script/qemu, analyse, proxmox, vpn et
long_test n'existaient pas encore. Le non-publié portait deux sections Modifié
et deux Corrigé, fusionnées dans l'ordre canonique ; ses puces passent de 181
à 152 par langue. La liste des dépendances Odoo 18 mêlait 2024, 1.7.0 et
l'après-tag : seul flanker y reste. Vérifié : parité en/fr par section.
--- EN ---
Tag v1.7.0 has existed since 11 March 2026 with no section: its 209 commits
stayed in the unreleased list, where a reader comparing a version to its notes
found nothing. The sort follows ancestry of the tag, not the date an entry was
written: the changelog AT the tag gives 19 of them, and twelve more, written
since, described earlier work — script/qemu, analyse, proxmox, vpn and
long_test did not exist yet. The unreleased list carried two Changed and two
Fixed sections, now merged in canonical order; its entries go from 181 to 152
per language. The Odoo 18 dependency list mixed 2024, 1.7.0 and post-tag work:
only flanker stays there. Checked: en/fr parity per section.
Assisted-by: Claude Opus 5
Cinq correctifs et une icône de menu passaient d'une branche à la production
sans qu'un lecteur qui décide de mettre à jour puisse le savoir : les cinq
commits QEMU du lot étaient décrits, ceux des outils git et du menu non. Le
non-publié les porte désormais, avec le mode de défaillance retiré et le
chiffre qui le borne — une page HTML de 34 ko avalée par « sh », un lot de
plus de cent dépôts abandonné, 49 tests et une erreur d'import devenus 84.
Les six entrées suivent le même ordre dans les deux langues, la source étant
CHANGELOG.base.md, et make doc_markdown a régénéré la paire.
--- EN ---
Five fixes and one menu icon went from a branch to production with no way for
a reader deciding whether to upgrade to know it: the batch's five QEMU commits
were described, those of the git tools and of the menu were not. The unreleased
section now carries them, with the failure mode removed and the figure that
bounds it — a 34 kB HTML page swallowed by `sh`, a batch of more than a hundred
repositories abandoned, 49 tests and an import error turned into 84. The six
entries follow the same order in both languages, the source being
CHANGELOG.base.md, and make doc_markdown regenerated the pair.
Assisted-by: Claude Opus 5
Une VM prend son adresse dans le /24 de son réseau et en sort par le .1,
porté par le pont : déplacer ce /24 sous une VM allumée lui laisse un bail
qui ne mène nulle part, et abattre le réseau détache son tap, que libvirt
n'y remet pas. network_qemu.py tient les trois gestes dans l'ordre — arrêter
les VM attachées, redéfinir le réseau sur le préfixe voulu, rallumer celles
qu'il a arrêtées, elles seules. Une VM sourde au shutdown annule la
redéfinition plutôt que d'y perdre son pont ; --force-off coupe le courant.
Un préfixe qui recouvre ce que l'hôte route déjà est refusé.
Vérifié : 13 tests neufs, la numérotation du menu, une passe à blanc.
--- EN ---
A VM takes its address in its network's /24 and leaves through the .1,
carried by the bridge: moving that /24 under a live VM leaves it a lease
leading nowhere, and tearing the network down detaches its tap, which
libvirt does not put back. network_qemu.py holds the three steps in order —
shut down the attached VMs, redefine the network on the wanted prefix, start
again the ones it stopped, those only. A VM deaf to the shutdown cancels the
redefinition rather than losing its bridge; --force-off cuts the power.
A prefix overlapping what the host already routes is refused.
Checked: 13 new tests, the menu numbering, one dry run.
Assisted-by: Claude Opus 5
Un réseau libvirt démarré porte et route son /24 sur son pont, et ce pont
comptait dans « ce que l'hôte occupe déjà » : le verdict était donc
« collision » sur toute machine où le réseau tournait, quel que soit son
sous-réseau. Tout déploiement passe par cette vérification, qui abattait
alors le réseau et le déplaçait sur un /24 libre là où rien n'entrait en
conflit — les VM attachées y perdaient passerelle et pont. Le pont du réseau
examiné en est écarté, chaque adresse étant rattachée à son interface ; un
nom de pont illisible n'écarte rien. Le XML de net-define passe par un
fichier temporaire imprévisible, retiré même quand virsh échoue.
Vérifié : 31 tests, dont 10 neufs, que le retrait de l'exclusion casse.
--- EN ---
A started libvirt network carries and routes its /24 on its bridge, and that
bridge counted as « what the host already occupies »: the verdict was
therefore « collision » on every machine where the network ran, whatever
subnet it served. Every deployment goes through that check, which then tore
the network down and moved it onto a free /24 where nothing conflicted — the
attached VMs lost gateway and bridge. The bridge of the network being
examined is now excluded, each address being tied to its own interface; an
unreadable bridge name excludes nothing. The XML for net-define goes through
an unpredictable temporary file, removed even when virsh fails.
Checked: 31 tests, 10 of them new, which removing the exclusion breaks.
Assisted-by: Claude Opus 5
sudo ne dit jamais ce qu'il sert à faire : son invite tombe entre deux lignes
de journal, et l'on tape un mot de passe sans savoir s'il porte sur libvirt,
sur un paquet ou sur un fichier — d'autant qu'appartenir au groupe libvirt a
l'air de suffire. Il ne suffit pas, et libvirt n'y est pour rien : le disque
et le seed s'écrivent dans le pool par défaut, répertoire de root où le
groupe ne donne pas l'écriture. Le motif est constaté, non déduit :
l'écriture s'essaie, une ACL pouvant l'accorder là où le mode semble la
refuser. Dit une fois avant la première commande privilégiée, et en dernière
ligne du récapitulatif. Vérifié : 18 tests, root compris, à qui rien n'est dit.
--- EN ---
sudo never states what it is about to do: its prompt lands between two log
lines, and one types a password without knowing whether it covers libvirt, a
package or a file — the more so as being in the libvirt group looks like it
should be enough. It is not, and libvirt is not the reason: the disk and the
seed are written into the default pool, a root-owned directory where the
group grants no write right. The reason is checked, not deduced: writing is
tried, since an ACL can grant it where the mode seems to refuse it. Said once
before the first privileged command, and last on the review page. Checked: 18
tests, root included, which is told nothing.
Assisted-by: Claude Opus 5
Le réseau « default » de libvirt sert 192.168.122.0/24, et toute VM déployée
par ce dépôt y vit : son pont prendrait la première adresse du /24, celle de
sa passerelle. virsh refuse ce démarrage tant que la route est là ; au
démarrage, libvirtd monte ses réseaux avant le bail DHCP, et plus rien ne la
signale. L'autostart était armé même après un net-start refusé, d'où un hôte
sans réseau au redémarrage suivant. Il ne s'arme plus qu'en l'absence de
collision, le réseau est déplacé par redéfinition — ni pont ni module du
noyau — et un actif en collision est abattu. L'état, cherché en anglais quand
virsh traduit, se lisait toujours éteint : LC_ALL=C. Vérifié sur un hôte en
collision, puis 21 tests.
--- EN ---
libvirt's `default` network serves 192.168.122.0/24, and every VM this
repository deploys lives there: its bridge would take the /24's first
address, which is that machine's gateway. virsh refuses such a start while
the route is there; at boot, libvirtd raises its networks before the DHCP
lease, and nothing signals the collision. Autostart was armed even after a
refused net-start, hence a host with no network at the next boot. It is armed
only where no collision remains, the network is moved by redefinition — no
bridge, no kernel module — and an active collision is torn down. State, read
in English where virsh translates, always read as off: LC_ALL=C. Checked on a
colliding host, then 21 tests.
Assisted-by: Claude Opus 5
L'option des outils d'assistance posait trois installateurs amont, puis
laissait tout à retaper : hook global de rtk, zdiff3, hooks git du dépôt,
commandes Claude, activation du venv. Elle les pose, en deux temps parce que
hooks et gabarits VIVENT dans le dépôt ; le complément suit le clone, rend
toujours 0 — un confort ne fait pas échouer une VM — et sans clone la moitié
manquante est nommée. core.editor n'est posé qu'à défaut, l'hôte transmettant
déjà le sien. L'aide « ? » et F1 dit ce que chaque option installe, là où un
libellé de case porte trois des huit poses. Vérifié : 51 tests, les deux
écrans montés sans terminal, « bash -n » sur les fragments distants.
--- EN ---
The AI tools box posed three upstream installers, then left every setting to
retype: rtk's global hook, zdiff3, the checkout's git hooks, the Claude
commands, activating the venv. It poses them, in two phases because hooks and
templates LIVE in the checkout; the complement follows the clone, always
returns 0 — a comfort must not fail a VM — and with no clone the missing half
is named. core.editor is posed only where there is none, the host already
transmitting its own. The `?` and F1 help says what each option installs,
where a checkbox label carries three of this one's eight poses. Checked: 51
tests, both screens mounted headless, `bash -n` on the remote fragments.
Assisted-by: Claude Opus 5
La branche part de master : elle livre l'outil entier, pas des retouches.
Deux puces sous Ajouté — l'outil et son diagnostic étagé — et une sous
Corrigé pour le coffre KeePassXC, qui ne doit rien au VPN et servait déjà
ailleurs.
Ce qu'une branche corrige de son propre travail n'y figure pas : le lanceur
de tests et ses huit fichiers muets sont revenus à l'état de master, et une
puce les annonçant décrirait un aller-retour invisible du dehors.
--- EN ---
The branch forks from master: it delivers the whole tool, not touch-ups. Two
bullets under Added — the tool and its staged diagnosis — and one under Fixed
for the KeePassXC vault, which owes nothing to the VPN and already served
elsewhere.
What a branch fixes in its own work is absent: the test launcher and its
eight silent files are back to master's state, and a bullet announcing them
would describe a round trip invisible from outside.
Assisted-by: Claude Opus 5
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
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)
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
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
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
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
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
Tumbleweed is the only catalog entry whose qpdf already clears the pikepdf
threshold: 12.3.2 against 12.2 required, so the half-hour qpdf build under
s390x emulation never runs there. It is also the only family foreign to
both RHEL and Debian, and it brings zypper, absent from the repository:
wired into the install_dev.sh dispatch, a dependency script, the remote
bootstrap and the desktop block.
Four SUSE traps, all met on real machines. Global options precede the
subcommand, and misplaced ones abort the call; without
"--auto-agree-with-licenses" zypper waits for an answer nobody gives in a
detached install. A compat package that PROVIDES another under a different
name makes zypper raise a conflict and drop the whole batch, so only what
nothing already provides is requested. pkg-config no longer exists as an
RPM, only as a capability. And a single mirror, unreachable one day, sent
everyone back to Europe -- three are probed in order now.
CentOS Stream is dropped again: it served as a canary but 10 duplicates
what Alma and Rocky already cover.
--- FR ---
Tumbleweed est la seule entrée du catalogue dont qpdf franchit déjà le
seuil de pikepdf : 12.3.2 contre 12.2 exigé, si bien que la demi-heure de
compilation de qpdf sous émulation s390x ne s'y déclenche jamais. C'est
aussi la seule famille étrangère à RHEL comme à Debian, et elle apporte
zypper, absent du dépôt : câblé dans l'aiguillage d'install_dev.sh, un
script de dépendances, l'amorçage distant et le bloc bureau.
Quatre pièges SUSE, tous rencontrés sur machine réelle. Les options
globales précèdent la sous-commande, mal placées elles arrêtent l'appel ;
sans « --auto-agree-with-licenses » zypper attend une réponse que personne
ne donne dans une installation détachée. Un paquet compat qui FOURNIT un
autre sous un nom différent fait lever un conflit à zypper, qui abandonne
le lot entier : on ne demande donc que ce que rien ne fournit déjà.
pkg-config n'existe plus comme RPM, seulement comme capacité. Et un miroir
unique, injoignable un jour, renvoyait tout le monde en Europe — trois
sont désormais sondés dans l'ordre.
CentOS Stream repart : il servait de canari, mais 10 double ce qu'Alma et
Rocky couvrent déjà.
Assisted-by: Claude Opus 5
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
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
Added 30 .base.md files using the mmg (Multilingual Markdown Generator)
format to automatically generate English (.md) and French (.fr.md)
versions of all project documentation.
Updated conf/make.documentation.Makefile to process all .base.md files
via `make doc_markdown`.