Outil pour les rencontres réseautage de type d'événement table tournante. Gestion de l'attribution de siège avec plusieurs tours par table.
Find a file
Mathieu Benoit c69c0f320b [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
audit [ADD] audit: first engine mutation audit, survivors killed in tests 2026-10-09 17:12:23 -04:00
doc/captures [ADD] captures: badge control page and first sheet, rasterised from PDF 2026-10-10 14:36:21 -04:00
electron [ADD] platform: print bridge, atomic byte writes, badge sheet file name 2026-10-09 15:26:13 -04:00
exemples [ADD] demo: delivered event files, example CSVs, payload fingerprint 2026-10-06 17:03:15 -04:00
public [ADD] outputs: pdf-lib, Noto Sans, paper sizes, badge imposition 2026-10-09 04:49:18 -04:00
scripts [ADD] bench: make banc orchestrator, first reading and constants table 2026-10-10 15:31:25 -04:00
src [ADD] captures: badge control page and first sheet, rasterised from PDF 2026-10-10 14:36:21 -04:00
test [ADD] bench: make banc orchestrator, first reading and constants table 2026-10-10 15:31:25 -04:00
.gitattributes [ADD] demo: delivered event files, example CSVs, payload fingerprint 2026-10-06 17:03:15 -04:00
.gitignore [ADD] docs: photographed walkthrough publishes doc/captures 2026-10-09 15:33:59 -04:00
.node-version [ADD] install: Node 26 and system packages, per family and under Nix 2026-10-06 05:52:05 -04:00
capacitor.config.json [ADD] skeleton: Capacitor web app that shows its dated version 2026-10-05 13:13:13 -04:00
CHANGELOG.md [ADD] skeleton: Capacitor web app that shows its dated version 2026-10-05 13:13:13 -04:00
electron-builder.config.cjs [ADD] electron: own shell, portable Windows exe built under podman 2026-10-05 13:13:32 -04:00
GUIDE-USAGE.md [ADD] captures: badge control page and first sheet, rasterised from PDF 2026-10-10 14:36:21 -04:00
GUIDE-WINDOWS.md [ADD] docs: usage and Windows guides, with how the search works 2026-10-09 17:14:56 -04:00
index.html [ADD] interface: application shell — banner, sections, theme, about 2026-10-07 07:22:05 -04:00
install.cmd [ADD] scripts: Windows install and run through PowerShell 5.1 2026-10-06 05:51:31 -04:00
install.sh [ADD] install: Node 26 and system packages, per family and under Nix 2026-10-06 05:52:05 -04:00
install_dev.cmd [ADD] scripts: Windows install and run through PowerShell 5.1 2026-10-06 05:51:31 -04:00
install_dev.sh [ADD] install: Node 26 and system packages, per family and under Nix 2026-10-06 05:52:05 -04:00
LICENSE [ADD] license: GNU AGPL v3 text, TechnoLibre copyright 2026-10-05 07:12:53 -04:00
Makefile [ADD] docs: photographed walkthrough publishes doc/captures 2026-10-09 15:33:59 -04:00
package-lock.json [ADD] outputs: pdf-lib, Noto Sans, paper sizes, badge imposition 2026-10-09 04:49:18 -04:00
package.json [ADD] docs: usage and Windows guides, with how the search works 2026-10-09 17:14:56 -04:00
README.md [ADD] bench: make banc orchestrator, first reading and constants table 2026-10-10 15:31:25 -04:00
run.cmd [ADD] scripts: Windows install and run through PowerShell 5.1 2026-10-06 05:51:31 -04:00
run.sh [ADD] run: make and ./run.sh, Electron start check, container matrix 2026-10-06 05:52:17 -04:00
spec.md [IMP] home: list shown at once, computed columns loaded per event 2026-10-08 17:07:31 -04:00
version.json [ADD] skeleton: Capacitor web app that shows its dated version 2026-10-05 13:13:13 -04:00
vite.config.js [ADD] outputs: pdf-lib, Noto Sans, paper sizes, badge imposition 2026-10-09 04:49:18 -04:00
vitest.banc.config.js [ADD] bench: headless Chromium harness, statistics and make banc entry 2026-10-09 13:03:37 -04:00
vitest.config.js [ADD] captures: badge control page and first sheet, rasterised from PDF 2026-10-10 14:36:21 -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.

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.

Commandes

commande effet
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.

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.

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.

Jeton Rôle Seuil Thème clair Capture Thème sombre Capture
--couleur-bandeau-fond texte 4,5 14,26 01-premier-ecran 12,84 01-premier-ecran
--couleur-bandeau-texte texte 4,5 13,44 19-ajustement 12,84 01-premier-ecran
--couleur-cadre-ecriture marque 3 4,78 02-import-apercu 9,10 02-import-apercu
--couleur-cadre-lecture marque 3 5,29 01b-passer-en-ecriture 7,34 01b-passer-en-ecriture
--couleur-chaise-pleine marque 3 15,38 07a-cibles-sieges 14,94 07a-cibles-sieges
--couleur-chaise-trait marque 3 7,58 07-plan-tables 8,13 22-plan-brouillon
--couleur-conflit-appartenance marque 3 8,92 20-mode-lecture 6,81 20-mode-lecture
--couleur-contour-fort marque 3 12,54 20-mode-lecture 11,62 20-mode-lecture
--couleur-echelle marque 3 15,10 07-plan-tables 14,62 07-plan-tables
--couleur-fantome marque 3 4,34 19-ajustement 4,10 19-ajustement
--couleur-filigrane marque 3 5,10 22-plan-brouillon 5,10 22-plan-brouillon
--couleur-hachure marque 3 16,48 08-animateurs-designes 15,21 08-animateurs-designes
--couleur-marque marque 3 3,63 07a-cibles-sieges 3,50 07a-cibles-sieges
--couleur-page-texte texte 4,5 15,10 01-premier-ecran 11,39 19-ajustement
--couleur-page-texte-secondaire texte 4,5 7,05 10-diagnostic 7,98 10-diagnostic
--couleur-papier texte 4,5 — — 5,33 09-refus-sur-place
--couleur-pastille-fond marque 3 13,44 19-ajustement 11,62 19-ajustement
--couleur-pastille-texte texte 4,5 — — 14,51 19-ajustement
--couleur-poignee marque 3 7,58 07-plan-tables 11,32 07-plan-tables
--couleur-refus texte 4,5 8,76 01b-passer-en-ecriture 9,24 01b-passer-en-ecriture
--couleur-selection marque 3 4,66 08-animateurs-designes 4,18 08-animateurs-designes
--couleur-table-trait marque 3 7,58 07-plan-tables 5,59 07-plan-tables
rgb(0, 0, 0) texte 4,5 18,26 09-refus-sur-place — —
rgb(28, 33, 40) texte 4,5 — — 16,18 22-plan-brouillon

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é.

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
SEUIL_SIEGES_LISIBLES plus grand nombre de places d'une table dont la liste de noms reste lisible 16 places défaut de travail 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 ; é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
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
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,01 rapport défaut de travail 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 ; é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
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,79 × 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

Licence

© 2026 TechnoLibre. GNU Affero General Public License, version 3 ou ultérieure ; texte complet dans LICENSE.

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/.