[ADD] electron: own shell, portable Windows exe built under podman
The deliverable is a single-file portable executable whose Electron the
project updates itself. The shell keeps context isolation on, Node
integration off and the page sandboxed; one IPC channel returns the
folder the portable launcher publishes. The build runs in a no-Wine image
pinned by digest, relays no host variable, refuses to overwrite a built
number, removes what a failed build leaves, and accepts only the name
version.json gives. The spec stops claiming the portable target needs
Wine.
Checked: exe built in 86 s, resource FileVersion 2026.1005.1.0 and
© 2026 TechnoLibre; 109 node tests pass; two end-of-build mutations fail.
--- FR ---
[ADD] electron : coquille propre, exécutable portable construit sous podman
Le livrable est un exécutable portable à fichier unique, dont le projet
met lui-même Electron à jour. La coquille garde l'isolation de contexte,
coupe l'intégration de Node et isole la page ; un seul canal IPC rend le
dossier que publie le lanceur portable. La construction s'exécute dans
une image sans Wine épinglée par empreinte, ne relaie aucune variable de
l'hôte, refuse d'écraser un numéro construit, retire ce qu'un échec
laisse, et n'accepte que le nom que donne version.json. Le spec cesse
d'affirmer que la cible portable exige Wine.
Vérifié : exécutable construit en 86 s, ressource FileVersion
2026.1005.1.0 et © 2026 TechnoLibre ; 109 épreuves node passent ; deux
mutations du contrôle de fin échouent.
Assisted-by: Claude Opus 5.5
2026-10-05 13:13:32 -04:00
# Gestion table tournante Libre
Logiciel hors ligne qui place les personnes d'un événement autour de tables et
les fait tourner sur plusieurs tours, pour que chacune rencontre le plus de
monde possible.
[ADD] run: make and ./run.sh, Electron start check, container matrix
make with no target does what ./run.sh does: Electron on a graphical
session, Vite's server without one or where Electron is not published
(s390x, ppc64le). Every npm, npx and node recipe goes through the
project's Node. make essai_demarrage starts the real Electron through
Playwright and reads its window title, on Chromium's headless Ozone
platform when there is no display: no X server is needed.
scripts/verifier_systemes.sh replays install and tests in podman over
the QEMU catalogue of TODO, and stops only its own containers.
Checked: 17 Linux images and Nix pass all six steps; pwsh parses.
--- FR ---
[ADD] lancement : make et ./run.sh, essai d'Electron, matrice
make sans cible fait ce que fait ./run.sh : Electron sur une session
graphique, le serveur de Vite sans elle ou là où Electron n'est pas
publié (s390x, ppc64le). Chaque recette npm, npx ou node passe par le
Node du projet. make essai_demarrage lance la vraie coquille Electron
par Playwright et lit le titre de sa fenêtre, sur la plateforme Ozone
headless de Chromium sans écran : aucun serveur X n'est requis.
scripts/verifier_systemes.sh rejoue installation et épreuves sous
podman sur le catalogue QEMU de TODO, et n'arrête que ses conteneurs.
Vérifié : 17 images Linux et Nix passent les six étapes ; pwsh analyse.
Assisted-by: Claude Opus 5.5
Claude-Session: https://claude.ai/code/session_01EUXSGcwCLSC69FWEdCtWSb
2026-10-06 05:52:17 -04:00
## Installer et lancer
| système | installer | lancer |
|---|---|---|
| Linux, macOS | `./install.sh` | `./run.sh` , ou `make` |
| Windows | `install.cmd` | `run.cmd` |
| NixOS | `./install.sh` | `./run.sh` ; `make` dans `nix-shell scripts/installation/shell.nix` |
`./install_dev.sh` (sous Windows `install_dev.cmd` ) installe en plus le Chromium
des épreuves du navigateur, des polices et, sur amd64, `podman` , sous lequel se
construit l'exécutable Windows.
L'installation pose les paquets du système qui manquent — apt, dnf, zypper ou
pacman, par `sudo` —, puis Node de la majeure écrite dans `.node-version` ,
téléchargé de nodejs.org et vérifié contre sa somme, hors du dépôt :
`~/.local/share/gestion_table_tournante_libre` , sous Windows
`%LOCALAPPDATA%\gestion_table_tournante_libre` . Node n'exige donc aucun droit
d'administration. Sous NixOS, `scripts/installation/shell.nix` déclare Node,
Electron et Chromium, d'un nixpkgs épinglé.
Systèmes éprouvés, en conteneurs, par `make verifier_systemes` : Ubuntu 24.04,
25.10 et 26.04, Debian 12 et 13 (Proxmox VE 9 en dérive), Fedora 41 à 44,
AlmaLinux et Rocky Linux 9 et 10, openSUSE Leap 16.0 et Tumbleweed, Arch Linux,
et Nix ; les scripts Windows sous `pwsh` .
`./run.sh` lance la coquille Electron sur une session graphique ; sans écran,
ou là où Electron n'est pas publié (s390x, ppc64le), il sert l'application à un
navigateur sur http://localhost:5173. `./run.sh --web` et `./run.sh --electron`
forcent l'un ou l'autre.
[ADD] electron: own shell, portable Windows exe built under podman
The deliverable is a single-file portable executable whose Electron the
project updates itself. The shell keeps context isolation on, Node
integration off and the page sandboxed; one IPC channel returns the
folder the portable launcher publishes. The build runs in a no-Wine image
pinned by digest, relays no host variable, refuses to overwrite a built
number, removes what a failed build leaves, and accepts only the name
version.json gives. The spec stops claiming the portable target needs
Wine.
Checked: exe built in 86 s, resource FileVersion 2026.1005.1.0 and
© 2026 TechnoLibre; 109 node tests pass; two end-of-build mutations fail.
--- FR ---
[ADD] electron : coquille propre, exécutable portable construit sous podman
Le livrable est un exécutable portable à fichier unique, dont le projet
met lui-même Electron à jour. La coquille garde l'isolation de contexte,
coupe l'intégration de Node et isole la page ; un seul canal IPC rend le
dossier que publie le lanceur portable. La construction s'exécute dans
une image sans Wine épinglée par empreinte, ne relaie aucune variable de
l'hôte, refuse d'écraser un numéro construit, retire ce qu'un échec
laisse, et n'accepte que le nom que donne version.json. Le spec cesse
d'affirmer que la cible portable exige Wine.
Vérifié : exécutable construit en 86 s, ressource FileVersion
2026.1005.1.0 et © 2026 TechnoLibre ; 109 épreuves node passent ; deux
mutations du contrôle de fin échouent.
Assisted-by: Claude Opus 5.5
2026-10-05 13:13:32 -04:00
## Commandes
| commande | effet |
|---|---|
[ADD] run: make and ./run.sh, Electron start check, container matrix
make with no target does what ./run.sh does: Electron on a graphical
session, Vite's server without one or where Electron is not published
(s390x, ppc64le). Every npm, npx and node recipe goes through the
project's Node. make essai_demarrage starts the real Electron through
Playwright and reads its window title, on Chromium's headless Ozone
platform when there is no display: no X server is needed.
scripts/verifier_systemes.sh replays install and tests in podman over
the QEMU catalogue of TODO, and stops only its own containers.
Checked: 17 Linux images and Nix pass all six steps; pwsh parses.
--- FR ---
[ADD] lancement : make et ./run.sh, essai d'Electron, matrice
make sans cible fait ce que fait ./run.sh : Electron sur une session
graphique, le serveur de Vite sans elle ou là où Electron n'est pas
publié (s390x, ppc64le). Chaque recette npm, npx ou node passe par le
Node du projet. make essai_demarrage lance la vraie coquille Electron
par Playwright et lit le titre de sa fenêtre, sur la plateforme Ozone
headless de Chromium sans écran : aucun serveur X n'est requis.
scripts/verifier_systemes.sh rejoue installation et épreuves sous
podman sur le catalogue QEMU de TODO, et n'arrête que ses conteneurs.
Vérifié : 17 images Linux et Nix passent les six étapes ; pwsh analyse.
Assisted-by: Claude Opus 5.5
Claude-Session: https://claude.ai/code/session_01EUXSGcwCLSC69FWEdCtWSb
2026-10-06 05:52:17 -04:00
| `make` | lance l'application, comme `./run.sh` |
| `make test` | série `node` : les fonctions pures, à chaque modification |
| `make test_long` | épreuves lourdes, avant un commit |
| `make test_navigateur` | épreuves de rendu dans Chromium, avant une livraison |
| `make build` | construit la page dans `www/` |
| `make windows` | construit l'exécutable Windows portable, sous `podman` , depuis Linux |
| `make essai_demarrage` | lance la vraie coquille Electron, lit son titre et ferme |
| `make help` | toutes les cibles |
Chaque cible passe par le Node du projet. Les commandes npm d'origine restent
valables avec un Node de la bonne majeure dans le `PATH` : `npm test` ,
`npm run dev` , `npm run build` .
[ADD] electron: own shell, portable Windows exe built under podman
The deliverable is a single-file portable executable whose Electron the
project updates itself. The shell keeps context isolation on, Node
integration off and the page sandboxed; one IPC channel returns the
folder the portable launcher publishes. The build runs in a no-Wine image
pinned by digest, relays no host variable, refuses to overwrite a built
number, removes what a failed build leaves, and accepts only the name
version.json gives. The spec stops claiming the portable target needs
Wine.
Checked: exe built in 86 s, resource FileVersion 2026.1005.1.0 and
© 2026 TechnoLibre; 109 node tests pass; two end-of-build mutations fail.
--- FR ---
[ADD] electron : coquille propre, exécutable portable construit sous podman
Le livrable est un exécutable portable à fichier unique, dont le projet
met lui-même Electron à jour. La coquille garde l'isolation de contexte,
coupe l'intégration de Node et isole la page ; un seul canal IPC rend le
dossier que publie le lanceur portable. La construction s'exécute dans
une image sans Wine épinglée par empreinte, ne relaie aucune variable de
l'hôte, refuse d'écraser un numéro construit, retire ce qu'un échec
laisse, et n'accepte que le nom que donne version.json. Le spec cesse
d'affirmer que la cible portable exige Wine.
Vérifié : exécutable construit en 86 s, ressource FileVersion
2026.1005.1.0 et © 2026 TechnoLibre ; 109 épreuves node passent ; deux
mutations du contrôle de fin échouent.
Assisted-by: Claude Opus 5.5
2026-10-05 13:13:32 -04:00
L'exécutable porte la version datée du logiciel dans son nom, selon le gabarit
`gestion_table_tournante_libre_v<AAAA>_<MM>_<JJ>_<NN>.exe` .
2026-10-09 17:14:56 -04:00
## Documentation
| document | pour qui, pour quoi |
|---|---|
| `GUIDE-USAGE.md` | l'opérateur : le parcours d'une soirée, de la liste des participants à l'impression, écran par écran ; ce que fait la recherche, et ce que relancer peut ou ne peut pas ; en annexe, les réglages, les colonnes du CSV, les commandes, les raccourcis et les démonstrations |
| `GUIDE-WINDOWS.md` | l'opérateur sous Windows : obtenir et lancer l'exécutable, où vont les fichiers, sauvegarder, l'antivirus, la version, signaler un problème |
| `CHANGELOG.md` | ce qui change d'une version à l'autre, et ce qu'il faut faire en remplaçant l'exécutable |
Les images du guide d'usage sont dans `doc/captures/` , avec leur manifeste.
Les tableaux qui suivent, comme les annexes du guide, sont engendrés : on ne
les corrige pas à la main. `node scripts/documentation.js engendrer` les
réécrit depuis leur source ; `node scripts/documentation.js verifier` échoue
dès qu'un tableau diffère de ce que sa source produirait, et la construction
de livraison le lance.
## Contrastes
Le plus petit rapport de contraste relevé pour chaque couleur de l'interface,
dans le rôle où elle sert, sur les captures du guide, en thème clair puis
sombre ; à côté, le seuil que ce rôle exige et la capture où le plus petit
rapport se relève. Un tiret : le thème ne montre pas cette couleur dans ce rôle
sur les captures.
<!-- engendre:debut contrastes -->
| Jeton | Rôle | Seuil | Thème clair | Capture | Thème sombre | Capture |
|---|---|---|---|---|---|---|
[ADD] quality page: walkthrough captures, edge cases, contrast guards
The quality page is now photographed and guarded like the other
screens. The walkthrough captures each view and the seven edge cases
where a sentence replaces a chart; the transversal guards measure the
page's marks, keyboard access and tooltips, a dotted reference line
against the chart background and a run point against what its trace
covers. Proved and remaining shares differ by outline, not colour
alone; tooltips keep clear of the sticky banner; rank axes print whole
numbers. The two bench thresholds of the page are measured.
Checked: node 5096, navigateur 1137, node-long 128; captures published.
--- FR ---
[ADD] page de qualité : parcours, cas limites, gardes du contraste
La page de qualité est désormais photographiée et gardée comme les autres
écrans. Le parcours photographie chaque vue et les sept cas limites où une
phrase remplace un graphique ; les gardes transversales mesurent ses
marques, son clavier et ses infobulles, un repère pointillé contre le fond
du graphique, un point de relevé contre ce que son tracé recouvre. Prouvé
et reste se distinguent par le contour, pas par la seule couleur ; les
infobulles évitent le bandeau collant ; les rangs s'écrivent en entiers.
Les deux seuils de la page sont mesurés au banc.
Vérifié : node 5096, navigateur 1137, longues 128 ; captures publiées.
Assisted-by: Claude Opus 5.5
2026-10-12 16:38:04 -04:00
| `--couleur-action-encre` | texte | 4,5 | 8,29 | 14-qualite-paires | 9,62 | 14-qualite-paires |
[UPD] captures: redesigned screens, walkthrough checks a warning action
The walkthrough images and their manifest show the redesigned screens,
and the README regenerates from them. Before step 04 is captured, the
walkthrough now checks that the warning zone does not scroll and that
« Ouvrir les tables » sits inside it: a capture only refreshes when the
step's text changes, so a layout regression could hide behind an old
image. Print captures are unchanged.
Checked: node 4012, browser 872, long 105, walkthrough 34/34.
--- FR ---
[UPD] captures : écrans refondus, le parcours vérifie l'action d'un avis
Les images du parcours et leur manifeste montrent les écrans refondus,
et le README s'en régénère. Avant la capture de l'étape 04, le parcours
vérifie que la zone des avis ne défile pas et que « Ouvrir les tables »
y tient : une capture ne se renouvelle que si le texte de l'étape
change, une régression de mise en page pourrait se cacher derrière une
image ancienne. Les captures imprimées ne changent pas.
Vérifié : node 4012, navigateur 872, long 105, parcours 34/34.
Assisted-by: Claude Opus 5.5
2026-10-11 02:14:08 -04:00
| `--couleur-action-texte` | texte | 4,5 | — | — | 8,45 | 01-premier-ecran |
| `--couleur-avis` | texte | 4,5 | 6,58 | 03-import-rapport | 8,93 | 03-import-rapport |
| `--couleur-bandeau-fond` | texte | 4,5 | 15,94 | 01-premier-ecran | 12,84 | 01-premier-ecran |
[ADD] quality page: walkthrough captures, edge cases, contrast guards
The quality page is now photographed and guarded like the other
screens. The walkthrough captures each view and the seven edge cases
where a sentence replaces a chart; the transversal guards measure the
page's marks, keyboard access and tooltips, a dotted reference line
against the chart background and a run point against what its trace
covers. Proved and remaining shares differ by outline, not colour
alone; tooltips keep clear of the sticky banner; rank axes print whole
numbers. The two bench thresholds of the page are measured.
Checked: node 5096, navigateur 1137, node-long 128; captures published.
--- FR ---
[ADD] page de qualité : parcours, cas limites, gardes du contraste
La page de qualité est désormais photographiée et gardée comme les autres
écrans. Le parcours photographie chaque vue et les sept cas limites où une
phrase remplace un graphique ; les gardes transversales mesurent ses
marques, son clavier et ses infobulles, un repère pointillé contre le fond
du graphique, un point de relevé contre ce que son tracé recouvre. Prouvé
et reste se distinguent par le contour, pas par la seule couleur ; les
infobulles évitent le bandeau collant ; les rangs s'écrivent en entiers.
Les deux seuils de la page sont mesurés au banc.
Vérifié : node 5096, navigateur 1137, longues 128 ; captures publiées.
Assisted-by: Claude Opus 5.5
2026-10-12 16:38:04 -04:00
| `--couleur-bandeau-texte` | texte | 4,5 | 5,85 | 13a-qualite-tables | 12,84 | 01-premier-ecran |
[UPD] captures: redesigned screens, walkthrough checks a warning action
The walkthrough images and their manifest show the redesigned screens,
and the README regenerates from them. Before step 04 is captured, the
walkthrough now checks that the warning zone does not scroll and that
« Ouvrir les tables » sits inside it: a capture only refreshes when the
step's text changes, so a layout regression could hide behind an old
image. Print captures are unchanged.
Checked: node 4012, browser 872, long 105, walkthrough 34/34.
--- FR ---
[UPD] captures : écrans refondus, le parcours vérifie l'action d'un avis
Les images du parcours et leur manifeste montrent les écrans refondus,
et le README s'en régénère. Avant la capture de l'étape 04, le parcours
vérifie que la zone des avis ne défile pas et que « Ouvrir les tables »
y tient : une capture ne se renouvelle que si le texte de l'étape
change, une régression de mise en page pourrait se cacher derrière une
image ancienne. Les captures imprimées ne changent pas.
Vérifié : node 4012, navigateur 872, long 105, parcours 34/34.
Assisted-by: Claude Opus 5.5
2026-10-11 02:14:08 -04:00
| `--couleur-bandeau-texte-secondaire` | texte | 4,5 | 9,05 | 01-premier-ecran | 7,60 | 01-premier-ecran |
| `--couleur-chaise-pleine` | marque | 3 | 15,09 | 07a-cibles-sieges | 14,94 | 07a-cibles-sieges |
| `--couleur-chaise-trait` | marque | 3 | 7,44 | 07-plan-tables | 8,13 | 22-plan-brouillon |
2026-10-10 13:37:50 -04:00
| `--couleur-conflit-appartenance` | marque | 3 | 8,92 | 20-mode-lecture | 6,81 | 20-mode-lecture |
[UPD] captures: redesigned screens, walkthrough checks a warning action
The walkthrough images and their manifest show the redesigned screens,
and the README regenerates from them. Before step 04 is captured, the
walkthrough now checks that the warning zone does not scroll and that
« Ouvrir les tables » sits inside it: a capture only refreshes when the
step's text changes, so a layout regression could hide behind an old
image. Print captures are unchanged.
Checked: node 4012, browser 872, long 105, walkthrough 34/34.
--- FR ---
[UPD] captures : écrans refondus, le parcours vérifie l'action d'un avis
Les images du parcours et leur manifeste montrent les écrans refondus,
et le README s'en régénère. Avant la capture de l'étape 04, le parcours
vérifie que la zone des avis ne défile pas et que « Ouvrir les tables »
y tient : une capture ne se renouvelle que si le texte de l'étape
change, une régression de mise en page pourrait se cacher derrière une
image ancienne. Les captures imprimées ne changent pas.
Vérifié : node 4012, navigateur 872, long 105, parcours 34/34.
Assisted-by: Claude Opus 5.5
2026-10-11 02:14:08 -04:00
| `--couleur-contour-fort` | marque | 3 | 12,30 | 20-mode-lecture | 11,62 | 20-mode-lecture |
| `--couleur-echelle` | marque | 3 | 14,82 | 07-plan-tables | 14,62 | 07-plan-tables |
2026-10-09 17:14:56 -04:00
| `--couleur-fantome` | marque | 3 | 4,34 | 19-ajustement | 4,10 | 19-ajustement |
2026-10-10 13:37:50 -04:00
| `--couleur-filigrane` | marque | 3 | 5,10 | 22-plan-brouillon | 5,10 | 22-plan-brouillon |
[ADD] quality page: walkthrough captures, edge cases, contrast guards
The quality page is now photographed and guarded like the other
screens. The walkthrough captures each view and the seven edge cases
where a sentence replaces a chart; the transversal guards measure the
page's marks, keyboard access and tooltips, a dotted reference line
against the chart background and a run point against what its trace
covers. Proved and remaining shares differ by outline, not colour
alone; tooltips keep clear of the sticky banner; rank axes print whole
numbers. The two bench thresholds of the page are measured.
Checked: node 5096, navigateur 1137, node-long 128; captures published.
--- FR ---
[ADD] page de qualité : parcours, cas limites, gardes du contraste
La page de qualité est désormais photographiée et gardée comme les autres
écrans. Le parcours photographie chaque vue et les sept cas limites où une
phrase remplace un graphique ; les gardes transversales mesurent ses
marques, son clavier et ses infobulles, un repère pointillé contre le fond
du graphique, un point de relevé contre ce que son tracé recouvre. Prouvé
et reste se distinguent par le contour, pas par la seule couleur ; les
infobulles évitent le bandeau collant ; les rangs s'écrivent en entiers.
Les deux seuils de la page sont mesurés au banc.
Vérifié : node 5096, navigateur 1137, longues 128 ; captures publiées.
Assisted-by: Claude Opus 5.5
2026-10-12 16:38:04 -04:00
| `--couleur-graphique-axe` | marque | 3 | 5,64 | 12-qualite-profil | 5,38 | 12-qualite-profil |
| `--couleur-graphique-bordure-case` | marque | 3 | 4,78 | 12c-qualite-un-tour | 5,38 | 12c-qualite-un-tour |
| `--couleur-graphique-borne` | marque | 3 | 3,93 | 12g-qualite-plafond-nul | 4,96 | 12g-qualite-plafond-nul |
| `--couleur-graphique-encre-claire` | texte | 4,5 | — | — | 6,03 | 13a-qualite-tables |
| `--couleur-graphique-encre-foncee` | texte | 4,5 | 5,43 | 12c-qualite-un-tour | — | — |
| `--couleur-graphique-marque` | marque | 3 | 9,67 | 12-qualite-profil | 10,64 | 12-qualite-profil |
| `--couleur-graphique-niveau-1` | marque | 3 | 3,46 | 12c-qualite-un-tour | 3,31 | 12c-qualite-un-tour |
| `--couleur-graphique-niveau-2` | marque | 3 | 5,85 | 13a-qualite-tables | 5,35 | 13a-qualite-tables |
| `--couleur-graphique-prouve` | marque | 3 | 4,23 | 13-qualite-collisions | 5,12 | 13-qualite-collisions |
| `--couleur-graphique-repere` | marque | 3 | 6,15 | 12-qualite-profil | 7,01 | 12-qualite-profil |
| `--couleur-graphique-reste` | marque | 3 | 5,10 | 13-qualite-collisions | 6,89 | 13-qualite-collisions |
| `--couleur-graphique-serie-1` | marque | 3 | 5,10 | 12-qualite-profil | 6,89 | 12-qualite-profil |
| `--couleur-graphique-serie-2` | marque | 3 | 4,53 | 12g-qualite-plafond-nul | 6,29 | 12g-qualite-plafond-nul |
2026-10-09 17:14:56 -04:00
| `--couleur-hachure` | marque | 3 | 16,48 | 08-animateurs-designes | 15,21 | 08-animateurs-designes |
[UPD] captures: redesigned screens, walkthrough checks a warning action
The walkthrough images and their manifest show the redesigned screens,
and the README regenerates from them. Before step 04 is captured, the
walkthrough now checks that the warning zone does not scroll and that
« Ouvrir les tables » sits inside it: a capture only refreshes when the
step's text changes, so a layout regression could hide behind an old
image. Print captures are unchanged.
Checked: node 4012, browser 872, long 105, walkthrough 34/34.
--- FR ---
[UPD] captures : écrans refondus, le parcours vérifie l'action d'un avis
Les images du parcours et leur manifeste montrent les écrans refondus,
et le README s'en régénère. Avant la capture de l'étape 04, le parcours
vérifie que la zone des avis ne défile pas et que « Ouvrir les tables »
y tient : une capture ne se renouvelle que si le texte de l'étape
change, une régression de mise en page pourrait se cacher derrière une
image ancienne. Les captures imprimées ne changent pas.
Vérifié : node 4012, navigateur 872, long 105, parcours 34/34.
Assisted-by: Claude Opus 5.5
2026-10-11 02:14:08 -04:00
| `--couleur-liste-texte` | texte | 4,5 | 14,82 | 07-plan-tables | — | — |
2026-10-09 17:14:56 -04:00
| `--couleur-marque` | marque | 3 | 3,63 | 07a-cibles-sieges | 3,50 | 07a-cibles-sieges |
[UPD] captures: redesigned screens, walkthrough checks a warning action
The walkthrough images and their manifest show the redesigned screens,
and the README regenerates from them. Before step 04 is captured, the
walkthrough now checks that the warning zone does not scroll and that
« Ouvrir les tables » sits inside it: a capture only refreshes when the
step's text changes, so a layout regression could hide behind an old
image. Print captures are unchanged.
Checked: node 4012, browser 872, long 105, walkthrough 34/34.
--- FR ---
[UPD] captures : écrans refondus, le parcours vérifie l'action d'un avis
Les images du parcours et leur manifeste montrent les écrans refondus,
et le README s'en régénère. Avant la capture de l'étape 04, le parcours
vérifie que la zone des avis ne défile pas et que « Ouvrir les tables »
y tient : une capture ne se renouvelle que si le texte de l'étape
change, une régression de mise en page pourrait se cacher derrière une
image ancienne. Les captures imprimées ne changent pas.
Vérifié : node 4012, navigateur 872, long 105, parcours 34/34.
Assisted-by: Claude Opus 5.5
2026-10-11 02:14:08 -04:00
| `--couleur-page-texte` | texte | 4,5 | 13,78 | 01b-passer-en-ecriture | 11,02 | 11-propositions |
| `--couleur-page-texte-secondaire` | texte | 4,5 | 5,57 | 01-premier-ecran | 6,72 | 01b-passer-en-ecriture |
[ADD] quality page: walkthrough captures, edge cases, contrast guards
The quality page is now photographed and guarded like the other
screens. The walkthrough captures each view and the seven edge cases
where a sentence replaces a chart; the transversal guards measure the
page's marks, keyboard access and tooltips, a dotted reference line
against the chart background and a run point against what its trace
covers. Proved and remaining shares differ by outline, not colour
alone; tooltips keep clear of the sticky banner; rank axes print whole
numbers. The two bench thresholds of the page are measured.
Checked: node 5096, navigateur 1137, node-long 128; captures published.
--- FR ---
[ADD] page de qualité : parcours, cas limites, gardes du contraste
La page de qualité est désormais photographiée et gardée comme les autres
écrans. Le parcours photographie chaque vue et les sept cas limites où une
phrase remplace un graphique ; les gardes transversales mesurent ses
marques, son clavier et ses infobulles, un repère pointillé contre le fond
du graphique, un point de relevé contre ce que son tracé recouvre. Prouvé
et reste se distinguent par le contour, pas par la seule couleur ; les
infobulles évitent le bandeau collant ; les rangs s'écrivent en entiers.
Les deux seuils de la page sont mesurés au banc.
Vérifié : node 5096, navigateur 1137, longues 128 ; captures publiées.
Assisted-by: Claude Opus 5.5
2026-10-12 16:38:04 -04:00
| `--couleur-papier` | texte | 4,5 | — | — | 5,00 | 12c-qualite-un-tour |
2026-10-09 17:14:56 -04:00
| `--couleur-pastille-fond` | marque | 3 | 13,44 | 19-ajustement | 11,62 | 19-ajustement |
| `--couleur-pastille-texte` | texte | 4,5 | — | — | 14,51 | 19-ajustement |
[UPD] captures: redesigned screens, walkthrough checks a warning action
The walkthrough images and their manifest show the redesigned screens,
and the README regenerates from them. Before step 04 is captured, the
walkthrough now checks that the warning zone does not scroll and that
« Ouvrir les tables » sits inside it: a capture only refreshes when the
step's text changes, so a layout regression could hide behind an old
image. Print captures are unchanged.
Checked: node 4012, browser 872, long 105, walkthrough 34/34.
--- FR ---
[UPD] captures : écrans refondus, le parcours vérifie l'action d'un avis
Les images du parcours et leur manifeste montrent les écrans refondus,
et le README s'en régénère. Avant la capture de l'étape 04, le parcours
vérifie que la zone des avis ne défile pas et que « Ouvrir les tables »
y tient : une capture ne se renouvelle que si le texte de l'étape
change, une régression de mise en page pourrait se cacher derrière une
image ancienne. Les captures imprimées ne changent pas.
Vérifié : node 4012, navigateur 872, long 105, parcours 34/34.
Assisted-by: Claude Opus 5.5
2026-10-11 02:14:08 -04:00
| `--couleur-poignee` | marque | 3 | 7,44 | 07-plan-tables | 11,32 | 07-plan-tables |
| `--couleur-refus` | texte | 4,5 | 8,34 | 01b-passer-en-ecriture | 8,14 | 01b-passer-en-ecriture |
[IMP] card and priority editor: red circled cross, number weight field
A tag's « Retirer » text button read like plain text, and the weight of
a criterion took a whole column for a number from 1 to 100. The card
now removes a tag with a red circled cross, shown in write mode only,
named « Retirer « tag » » for screen readers, with a 24 px target; the
red has its own token, exempted from the conflict-hue rule and limited
to card surfaces. The weight is a narrow number field, still read and
refused as before.
Checked: node 4597, navigateur 965; captures 04a and 10a republished.
--- FR ---
[IMP] fiche et priorités : croix rouge cerclée, poids en champ nombre
Le bouton texte « Retirer » d'une étiquette se lisait comme du texte, et
le poids d'un critère prenait toute une colonne pour un nombre de 1 à
100. La fiche retire désormais une étiquette par une croix rouge cerclée,
en mode écriture seulement, nommée « Retirer « étiquette » » pour les
lecteurs d'écran, sur une cible de 24 px ; le rouge a son jeton, exempté
de la règle des teintes de conflit et borné aux surfaces de la fiche. Le
poids est un champ nombre étroit, lu et refusé comme avant.
Vérifié : node 4597, navigateur 965 ; captures 04a et 10a republiées.
Assisted-by: Claude Opus 5.5
2026-10-11 23:34:28 -04:00
| `--couleur-retrait` | marque | 3 | 5,62 | 04a-etiquettes | 5,96 | 04a-etiquettes |
[UPD] captures: redesigned screens, walkthrough checks a warning action
The walkthrough images and their manifest show the redesigned screens,
and the README regenerates from them. Before step 04 is captured, the
walkthrough now checks that the warning zone does not scroll and that
« Ouvrir les tables » sits inside it: a capture only refreshes when the
step's text changes, so a layout regression could hide behind an old
image. Print captures are unchanged.
Checked: node 4012, browser 872, long 105, walkthrough 34/34.
--- FR ---
[UPD] captures : écrans refondus, le parcours vérifie l'action d'un avis
Les images du parcours et leur manifeste montrent les écrans refondus,
et le README s'en régénère. Avant la capture de l'étape 04, le parcours
vérifie que la zone des avis ne défile pas et que « Ouvrir les tables »
y tient : une capture ne se renouvelle que si le texte de l'étape
change, une régression de mise en page pourrait se cacher derrière une
image ancienne. Les captures imprimées ne changent pas.
Vérifié : node 4012, navigateur 872, long 105, parcours 34/34.
Assisted-by: Claude Opus 5.5
2026-10-11 02:14:08 -04:00
| `--couleur-selection` | marque | 3 | 4,57 | 08-animateurs-designes | 4,18 | 08-animateurs-designes |
| `--couleur-table-trait` | marque | 3 | 7,44 | 07-plan-tables | 5,59 | 07-plan-tables |
| `rgb(24, 33, 47)` | texte | 4,5 | — | — | 16,19 | 22-plan-brouillon |
2026-10-10 13:37:50 -04:00
| `rgb(28, 33, 40)` | texte | 4,5 | — | — | 16,18 | 22-plan-brouillon |
2026-10-09 17:14:56 -04:00
<!-- engendre:fin contrastes -->
## Constantes
Les seuils et les durées dont le logiciel dépend, chacun avec son unité, celui
qui en fixe la valeur — le banc de mesure, un contrôle à la main, ou
l'exécution elle-même —, son statut et la façon de le relever. Une valeur au
« défaut de travail » attend encore son relevé.
<!-- engendre:debut constantes -->
[ADD] bench: make banc orchestrator, first reading and constants table
`make banc` runs the node and browser measures, assembles releve.json in
the registry's order and fails when a measure is missing, a harness
check falls, a text measure is not in Noto Sans, or the time per image
is not held. It prints values to adopt and never edits constantes.js; ρ
is reported but stays at its working default on the reference machine.
Each bench constant cites the CPU slowdown of its own measure. The
reading names the machine class only: identifying keys, accented or
camelCase, and account paths are refused.
Checked: node 3836, browser 758, node-long 101; make banc exits 0.
--- FR ---
[ADD] banc : orchestrateur make banc, premier relevé, constantes
`make banc` lance les mesures node et navigateur, assemble releve.json
dans l'ordre du registre et échoue sur une mesure manquante, un contrôle
du harnais tombé, une mesure de texte hors Noto Sans ou un temps par
image non tenu. Il imprime les valeurs à adopter sans toucher
constantes.js ; ρ est relevé mais reste à son défaut de travail. Chaque
constante du banc cite le ralentissement de sa propre mesure. Le relevé
ne nomme que la classe de machine : clés identifiantes, accentuées ou
camelCase, et chemins de compte sont refusés.
Vérifié : node 3836, navigateur 758, longues 101 ; make banc sort en 0.
Assisted-by: Claude Opus 5.5
2026-10-10 15:31:25 -04:00
| Constante | Ce qu’ elle mesure | Valeur | Statut | Propriétaire | Protocole | Valeur proposée par le banc | Configuration du relevé |
| --- | --- | --- | --- | --- | --- | --- | --- |
| `SEUIL_GLISSER_PX` | déplacement du pointeur, entre pointerdown et pointerup, au-delà duquel un appui devient un glissement | 4 px | défaut de travail | manuel | vingt clics délibérés au pavé tactile de la machine de référence ; le plus grand déplacement entre pointerdown et pointerup, × 1,5, écrit dans ce registre | — | pavé tactile de la machine de référence |
| `DUREE_PRESSION_LONGUE_MS` | durée d'un appui immobile au-delà de laquelle il ouvre le menu d'une personne | 500 ms | défaut de travail | manuel | à l'écran tactile de la machine de référence, la plus courte durée qu'aucun appui bref ne déclenche, sur dix essais, écrite dans ce registre | — | écran tactile de la machine de référence |
[FIX] print: continue overlong rows across pages, adopt bench values
A row taller than a page, on the table sheet or the welcome list, was
clipped by its page's content zone. It now continues piece by piece on
the next sheets under the repeated header, each cell's text once and in
order. SEUIL_SIEGES_LISIBLES (18 places) and TOLERANCE_CHAINE_TEMOIN
(0.011) move from working default to measured, matching the committed
bench reading. The walkthrough checks that leaving the read-only mode
writes only the badge PDF and the local paper setting.
Checked: 3853 node, 761 browser, 101 long tests, from the index alone.
--- FR ---
[FIX] impression : lignes trop hautes continuées, banc adopté
Une ligne plus haute qu'une page, sur la feuille par table ou la liste
d'accueil, était rognée par la zone de contenu. Elle se continue
désormais par morceaux sur les feuilles suivantes, sous l'en-tête
répété, chaque texte une fois et dans l'ordre. SEUIL_SIEGES_LISIBLES
(18 places) et TOLERANCE_CHAINE_TEMOIN (0,011) passent de défaut de
travail à mesurées, d'accord avec le relevé commis. Le parcours vérifie
que sortir de la lecture seule n'écrit que le PDF et le papier local.
Vérifié : 3853 node, 761 navigateur, 101 longues, depuis l'index seul.
Assisted-by: Claude Opus 5.5
2026-10-10 17:21:55 -04:00
| `SEUIL_SIEGES_LISIBLES` | plus grand nombre de places d'une table dont la liste de noms reste lisible | 18 places | mesurée | banc | banc de mesure, cadre de 1 366 × 700 px : le plus grand nombre de places dont la liste, à la hauteur de ligne mesurée, tient dans la hauteur du cadre au zoom ajusté d'une table seule, ronde puis carrée, par dichotomie ; le plus petit des deux seuils, écrit dans ce registre | 18 places | cadre de 1 366 × 700 px, facteur 1, Chromium 153.0.8010.12, Node v26.10.0, 16 processeurs logiques, processeur non ralenti, police Noto Sans |
[ADD] bench: make banc orchestrator, first reading and constants table
`make banc` runs the node and browser measures, assembles releve.json in
the registry's order and fails when a measure is missing, a harness
check falls, a text measure is not in Noto Sans, or the time per image
is not held. It prints values to adopt and never edits constantes.js; ρ
is reported but stays at its working default on the reference machine.
Each bench constant cites the CPU slowdown of its own measure. The
reading names the machine class only: identifying keys, accented or
camelCase, and account paths are refused.
Checked: node 3836, browser 758, node-long 101; make banc exits 0.
--- FR ---
[ADD] banc : orchestrateur make banc, premier relevé, constantes
`make banc` lance les mesures node et navigateur, assemble releve.json
dans l'ordre du registre et échoue sur une mesure manquante, un contrôle
du harnais tombé, une mesure de texte hors Noto Sans ou un temps par
image non tenu. Il imprime les valeurs à adopter sans toucher
constantes.js ; ρ est relevé mais reste à son défaut de travail. Chaque
constante du banc cite le ralentissement de sa propre mesure. Le relevé
ne nomme que la classe de machine : clés identifiantes, accentuées ou
camelCase, et chemins de compte sont refusés.
Vérifié : node 3836, navigateur 758, longues 101 ; make banc sort en 0.
Assisted-by: Claude Opus 5.5
2026-10-10 15:31:25 -04:00
| `K_LISTES` | échelle sous laquelle le plan retire les listes de noms | 0,3 px/cm | défaut de travail | manuel | une personne qui n'a pas écrit le logiciel lit les listes de la grande démonstration sur la machine de référence à k décroissant ; le plus petit k où elle les lit sans erreur, écrit dans ce registre | — | grande démonstration, 33 tables avec listes, machine de référence, cadre de 1 366 × 700 px |
| `LARGEUR_BLOC_NOMS_CM` | largeur, dans le dessin, du bloc de noms d'une table, où un nom trop long s'abrège | 500 cm | défaut de travail | manuel | relecture de la grande démonstration au zoom par défaut par une personne qui n'a pas écrit le logiciel (§ 19.11) ; la largeur retenue, écrite dans ce registre | — | grande démonstration au zoom par défaut |
| `HAUTEUR_LIGNE` | hauteur d'une ligne d'une liste de noms, dans le dessin | relevée à l’ exécution | mesurée | exécution | mesurée à chaque montage du plan : measureText du gabarit « Ôjgq Æ W » sur la police calculée des listes ; aucune valeur n'est écrite dans ce registre | — | police calculée des listes, relevée à chaque montage du plan |
| `ZONE_SILENCE_MM` | distance en deçà de laquelle aucun texte ni aucune marque ne s'approche d'un bord de badge | 8 mm | défaut de travail | manuel | sur chaque imprimante visée : une planche de filets imprimée, son décalage mesuré à la règle, plus l'erreur de dix coupes ; puis sa marge non imprimable et le biais d'entraînement sur dix feuilles. La plus grande des deux bornes, arrondie au millimètre supérieur, écrite dans ce registre | — | imprimantes visées, chaque papier des sorties, massicot et ciseaux |
| `HAUTEUR_CAPITALE_NOM_MAX_MM` | hauteur de capitale du nom sur le badge, au plus grand corps que la mise en page lui donne | 9 mm | défaut de travail | manuel | impression réelle d'une planche ; lecture à un mètre par une personne qui n'a pas écrit le logiciel ; la hauteur retenue, écrite dans ce registre | — | badge A6 imprimé, police embarquée, lecture à un mètre |
| `HAUTEUR_CAPITALE_NOM_PLANCHER_MM` | hauteur de capitale du nom sous laquelle la mise en page ne descend pas : un nom plus long replie | 4 mm | défaut de travail | manuel | impression réelle d'une planche à hauteurs décroissantes ; lecture à un mètre par une personne qui n'a pas écrit le logiciel ; la plus petite lue sans erreur, écrite dans ce registre | — | badge A6 imprimé, police embarquée, lecture à un mètre |
| `CORPS_TOURS_PT` | corps des lignes de tour du badge | 14 pt | défaut de travail | manuel | impression réelle d'une planche ; lecture en main par une personne qui n'a pas écrit le logiciel ; le corps retenu, écrit dans ce registre | — | badge A6 imprimé, police embarquée, lecture en main |
| `CORPS_TOURS_PLANCHER_PT` | corps sous lequel les lignes de tour ne descendent pas | 10 pt | défaut de travail | manuel | impression réelle d'une planche à corps décroissants ; lecture en main par une personne qui n'a pas écrit le logiciel ; le plus petit corps lu sans erreur, écrit dans ce registre | — | badge A6 imprimé, police embarquée, lecture en main |
| `CORPS_APPARTENANCE_PT` | corps de la ligne d'appartenance du badge | 12 pt | défaut de travail | manuel | impression réelle d'une planche ; lecture en main par une personne qui n'a pas écrit le logiciel ; le corps retenu, écrit dans ce registre | — | badge A6 imprimé, police embarquée, lecture en main |
| `CORPS_PIED_PT` | corps du pied du badge : nom et date de l'événement, horodatage du placement | 8 pt | défaut de travail | manuel | impression réelle d'une planche ; lecture en main par une personne qui n'a pas écrit le logiciel ; le corps retenu, écrit dans ce registre | — | badge A6 imprimé, police embarquée, lecture en main |
| `CORPS_MIN_IMPRESSION_MM` | hauteur de caractère du plan imprimé en deçà de laquelle le plan se découpe en pages | 2,5 mm | défaut de travail | manuel | page d'essai à corps décroissants imprimée sur l'imprimante visée, lue à bout de bras ; le plus petit corps lu sans erreur, écrit dans ce registre | — | imprimante visée, chaque papier des sorties, lecture à bout de bras |
| `MARGE_PAGE_MM` | marge de chaque bord d'une page imprimée par l'aperçu | 10 mm | défaut de travail | manuel | marge non imprimable mesurée sur chaque imprimante visée (une page de filets à 1 mm d'écart, lue à la règle) ; la plus grande, écrite dans ce registre | — | imprimantes visées, chaque papier des sorties |
| `HAUTEUR_BANDE_IMPRESSION` | hauteur de ce que porte une feuille imprimée hors de sa zone de contenu : pied, mentions, barre, cartouche | relevée à l’ exécution | mesurée | exécution | mesurée à l'ouverture de l'aperçu : tout ce qu'une feuille porte hors de [data-contenu] ; aucune valeur n'est écrite dans ce registre | — | rendu de l'aperçu, relevé à chaque ouverture |
[FIX] print: continue overlong rows across pages, adopt bench values
A row taller than a page, on the table sheet or the welcome list, was
clipped by its page's content zone. It now continues piece by piece on
the next sheets under the repeated header, each cell's text once and in
order. SEUIL_SIEGES_LISIBLES (18 places) and TOLERANCE_CHAINE_TEMOIN
(0.011) move from working default to measured, matching the committed
bench reading. The walkthrough checks that leaving the read-only mode
writes only the badge PDF and the local paper setting.
Checked: 3853 node, 761 browser, 101 long tests, from the index alone.
--- FR ---
[FIX] impression : lignes trop hautes continuées, banc adopté
Une ligne plus haute qu'une page, sur la feuille par table ou la liste
d'accueil, était rognée par la zone de contenu. Elle se continue
désormais par morceaux sur les feuilles suivantes, sous l'en-tête
répété, chaque texte une fois et dans l'ordre. SEUIL_SIEGES_LISIBLES
(18 places) et TOLERANCE_CHAINE_TEMOIN (0,011) passent de défaut de
travail à mesurées, d'accord avec le relevé commis. Le parcours vérifie
que sortir de la lecture seule n'écrit que le PDF et le papier local.
Vérifié : 3853 node, 761 navigateur, 101 longues, depuis l'index seul.
Assisted-by: Claude Opus 5.5
2026-10-10 17:21:55 -04:00
| `TOLERANCE_CHAINE_TEMOIN` | écart relatif admis entre la longueur rendue de la chaîne témoin et celle que donnent les avances de la police | 0,011 rapport | mesurée | banc | banc de mesure : le quart de l'écart relatif entre la police embarquée et une famille de repli forcée, et au moins trois fois la gigue de dix mesures, chaîne témoin à 16 px, crénage et ligatures coupés ; arrondi par excès à deux chiffres significatifs, écrit dans ce registre | 0,011 rapport | cadre de 1 366 × 700 px, facteur 1, Chromium 153.0.8010.12, Node v26.10.0, 16 processeurs logiques, processeur non ralenti, police Noto Sans |
[ADD] quality page: walkthrough captures, edge cases, contrast guards
The quality page is now photographed and guarded like the other
screens. The walkthrough captures each view and the seven edge cases
where a sentence replaces a chart; the transversal guards measure the
page's marks, keyboard access and tooltips, a dotted reference line
against the chart background and a run point against what its trace
covers. Proved and remaining shares differ by outline, not colour
alone; tooltips keep clear of the sticky banner; rank axes print whole
numbers. The two bench thresholds of the page are measured.
Checked: node 5096, navigateur 1137, node-long 128; captures published.
--- FR ---
[ADD] page de qualité : parcours, cas limites, gardes du contraste
La page de qualité est désormais photographiée et gardée comme les autres
écrans. Le parcours photographie chaque vue et les sept cas limites où une
phrase remplace un graphique ; les gardes transversales mesurent ses
marques, son clavier et ses infobulles, un repère pointillé contre le fond
du graphique, un point de relevé contre ce que son tracé recouvre. Prouvé
et reste se distinguent par le contour, pas par la seule couleur ; les
infobulles évitent le bandeau collant ; les rangs s'écrivent en entiers.
Les deux seuils de la page sont mesurés au banc.
Vérifié : node 5096, navigateur 1137, longues 128 ; captures publiées.
Assisted-by: Claude Opus 5.5
2026-10-12 16:38:04 -04:00
| `RALENTISSEMENT_PLEINE_CHARGE` | ralentissement d'une génération quand tous les processeurs logiques travaillent, t(L) / t(1) | 2 × | défaut de travail | banc | banc de mesure : durée d'une même génération sur un travailleur, puis sur L travailleurs ; le rapport ρ des médianes, écrit dans ce registre | 2,98 × | cadre de 1 366 × 700 px, facteur 1, Chromium 153.0.8010.12, Node v26.10.0, 16 processeurs logiques, processeur non ralenti, police Noto Sans |
[IMP] quality page: tile floors, measured thresholds, spec integrated
A tile now writes the floor the diagnostic proves under its number, and says
when the measure reaches it, so an operator stops relaunching toward a value
no placement can beat; no floor is written outside the floors' domain. A
proved bar segment keeps its 6 px outline without pushing the bar past its
value. The matrix and label thresholds adopt their measured values (44
people, 168 px). The spec and the changelog describe the quality page as
the code builds it.
Checked: node 5130, browser 1146, long 128; captures stable on two passes.
--- FR ---
[IMP] page qualité : planchers des tuiles, seuils mesurés, spec intégrée
Une tuile écrit sous son chiffre le plancher que prouve le diagnostic, et dit
quand la mesure l'atteint : l'opérateur cesse de relancer vers une valeur
qu'aucun placement ne bat ; hors du domaine des planchers, rien ne s'écrit.
Un segment prouvé garde son contour de 6 px sans pousser la barre au-delà de
sa valeur. Les seuils de la matrice et des libellés prennent leurs valeurs
mesurées (44 personnes, 168 px). La spec et le journal des versions
décrivent la page de qualité telle que le code la construit.
Vérifié : node 5130, navigateur 1146, longues 128 ; captures stables, 2 passes.
Assisted-by: Claude Opus 5.5
2026-10-13 01:48:10 -04:00
| `SEUIL_MATRICE_PARTICIPANTS` | nombre de participants au-delà duquel une case de la matrice « qui a rencontré qui » tombe sous la cible de 24 px dans la largeur de la carte, au cadre fixé | 44 participants | mesurée | banc | banc de mesure, cadre de 1 366 × 700 px : le plus grand nombre de participants dont la case de la matrice tient 24 px dans la largeur de la carte de la vue, noms en tête compris, relevé sur le rendu ; la valeur proposée, adoptée à la main dans ce registre | 44 participants | cadre de 1 366 × 700 px, facteur 1, Chromium 153.0.8010.12, Node v26.10.0, 16 processeurs logiques, processeur non ralenti, police Noto Sans |
| `LARGEUR_TRONCATURE_NOM_PX` | largeur à laquelle un nom se tronque dans une étiquette de graphique | 168 px | mesurée | banc | banc de mesure, police Noto Sans : la largeur rendue d'un nom de 14 caractères, chacun le glyphe le plus large de l'alphabet visé, au corps des étiquettes de graphique, dans la marge gauche d'une vue à barres — jamais un nom de démonstration ; arrondie au pixel supérieur, adoptée à la main dans ce registre | 168 px | cadre de 1 366 × 700 px, facteur 1, Chromium 153.0.8010.12, Node v26.10.0, 16 processeurs logiques, processeur non ralenti, police Noto Sans |
2026-10-09 17:14:56 -04:00
<!-- engendre:fin constantes -->
[ADD] electron: own shell, portable Windows exe built under podman
The deliverable is a single-file portable executable whose Electron the
project updates itself. The shell keeps context isolation on, Node
integration off and the page sandboxed; one IPC channel returns the
folder the portable launcher publishes. The build runs in a no-Wine image
pinned by digest, relays no host variable, refuses to overwrite a built
number, removes what a failed build leaves, and accepts only the name
version.json gives. The spec stops claiming the portable target needs
Wine.
Checked: exe built in 86 s, resource FileVersion 2026.1005.1.0 and
© 2026 TechnoLibre; 109 node tests pass; two end-of-build mutations fail.
--- FR ---
[ADD] electron : coquille propre, exécutable portable construit sous podman
Le livrable est un exécutable portable à fichier unique, dont le projet
met lui-même Electron à jour. La coquille garde l'isolation de contexte,
coupe l'intégration de Node et isole la page ; un seul canal IPC rend le
dossier que publie le lanceur portable. La construction s'exécute dans
une image sans Wine épinglée par empreinte, ne relaie aucune variable de
l'hôte, refuse d'écraser un numéro construit, retire ce qu'un échec
laisse, et n'accepte que le nom que donne version.json. Le spec cesse
d'affirmer que la cible portable exige Wine.
Vérifié : exécutable construit en 86 s, ressource FileVersion
2026.1005.1.0 et © 2026 TechnoLibre ; 109 épreuves node passent ; deux
mutations du contrôle de fin échouent.
Assisted-by: Claude Opus 5.5
2026-10-05 13:13:32 -04:00
## Licence
© 2026 TechnoLibre. GNU Affero General Public License, version 3 ou ultérieure ;
texte complet dans `LICENSE` .
[ADD] outputs: pdf-lib, Noto Sans, paper sizes, badge imposition
Badges and printed views need a PDF writer, an embedded font whose metrics
the tests can measure, and the paper the machine prints on. pdf-lib with
fontkit writes the sheet; Noto Sans (OFL) ships with its provenance and
SHA-256, and travels into www/ with every third-party notice that the
minified bundle drops. The paper is kept per machine in reglages_locaux.json.
A4 and Letter derive the A6 grid from their dimensions; the PDF libraries
load in two deferred chunks, each under the 1000 kB threshold.
Checked: 3048 node, 639 browser and 67 long tests green from the index.
--- FR ---
[ADD] sorties : pdf-lib, Noto Sans, formats de papier, imposition
Les badges et les vues imprimables exigent un producteur de PDF, une police
embarquée que les épreuves mesurent, et le papier de la machine. pdf-lib et
fontkit écrivent la planche ; Noto Sans (OFL) arrive avec sa provenance et
son SHA-256, et voyage dans www/ avec chaque avis de tiers que le paquet
minifié retire. Le papier se garde par machine dans reglages_locaux.json.
A4 et Lettre dérivent la grille A6 de leurs dimensions ; les bibliothèques
PDF se chargent en deux morceaux différés, chacun sous le seuil de 1000 ko.
Vérifié : 3048 node, 639 navigateur et 67 longues vertes depuis l'index.
Assisted-by: Claude Opus 5.5
2026-10-09 04:49:18 -04:00
L'application embarque la police **Noto Sans** (Regular et Bold), sous la
**SIL Open Font License 1.1**, sans nom de police réservé : elle sert à la
planche de badges et à l'interface. Son texte est dans
`public/licences/NotoSans-OFL.txt` , sa provenance dans `src/polices/PROVENANCE` .
Les avis des paquets que la page incorpore — Svelte, pdf-lib, fontkit et ce
qu'ils tirent — sont dans `public/licences/TIERS.txt` . Les deux fichiers
voyagent avec la page, dans `www/licences/` .