[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
|
|
|
# © 2026 TechnoLibre (http://www.technolibre.ca)
|
|
|
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
|
|
|
|
|
#
|
|
|
|
|
# Cibles du projet. Chacune délègue à un script qui porte la logique et se
|
|
|
|
|
# lance aussi sans make : ./run.sh, ./install.sh, ./install_dev.sh, et sous
|
|
|
|
|
# Windows run.cmd, install.cmd, install_dev.cmd. npm, npx et node passent par
|
|
|
|
|
# avec_node, qui pose le Node du projet en tête du PATH après avoir vérifié
|
|
|
|
|
# l'installation.
|
|
|
|
|
#
|
|
|
|
|
# make lance l'application, comme ./run.sh
|
|
|
|
|
# make help la liste des cibles
|
|
|
|
|
|
|
|
|
|
ifeq ($(OS),Windows_NT)
|
|
|
|
|
PS := powershell.exe -NoProfile -ExecutionPolicy Bypass
|
|
|
|
|
LANCER := $(PS) -File scripts/windows/lancer.ps1
|
|
|
|
|
INSTALLER := $(PS) -File scripts/windows/installer.ps1
|
|
|
|
|
INSTALLER_DEV := $(PS) -File scripts/windows/installer.ps1 -Dev
|
|
|
|
|
AVEC_NODE := $(PS) -File scripts/windows/avec_node.ps1
|
|
|
|
|
else
|
|
|
|
|
# bash, où qu'il soit : /bin/bash n'existe pas sous NixOS, et make s'y
|
|
|
|
|
# arrêterait avant la première recette.
|
|
|
|
|
SHELL := $(shell command -v bash 2>/dev/null || echo /bin/bash)
|
|
|
|
|
LANCER := ./run.sh
|
|
|
|
|
INSTALLER := ./install.sh
|
|
|
|
|
INSTALLER_DEV := ./install_dev.sh
|
|
|
|
|
AVEC_NODE := scripts/installation/avec_node.sh
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
.DEFAULT_GOAL := run
|
|
|
|
|
|
|
|
|
|
.PHONY: run
|
|
|
|
|
run: ## Lance l'application : Electron sur une session graphique, sinon le serveur de Vite
|
|
|
|
|
$(LANCER)
|
|
|
|
|
|
|
|
|
|
.PHONY: web
|
|
|
|
|
web: ## Sert l'application à un navigateur, http://localhost:5173
|
|
|
|
|
$(LANCER) --web
|
|
|
|
|
|
|
|
|
|
.PHONY: electron
|
|
|
|
|
electron: ## Lance la coquille Electron
|
|
|
|
|
$(LANCER) --electron
|
|
|
|
|
|
|
|
|
|
.PHONY: install
|
|
|
|
|
install: ## Installe de quoi lancer l'application et jouer les épreuves sous node
|
|
|
|
|
$(INSTALLER)
|
|
|
|
|
|
|
|
|
|
.PHONY: install_dev
|
|
|
|
|
install_dev: ## Installe aussi Chromium, des polices et podman
|
|
|
|
|
$(INSTALLER_DEV)
|
|
|
|
|
|
|
|
|
|
.PHONY: test
|
|
|
|
|
test: ## Joue la série surveillée, sous node (§ 14.4)
|
|
|
|
|
$(AVEC_NODE) npm test
|
|
|
|
|
|
|
|
|
|
.PHONY: test_long
|
|
|
|
|
test_long: ## Joue la série longue, sous node
|
|
|
|
|
$(AVEC_NODE) npm run test:long
|
|
|
|
|
|
|
|
|
|
.PHONY: test_navigateur
|
|
|
|
|
test_navigateur: ## Joue les épreuves du navigateur, sous Chromium
|
|
|
|
|
$(AVEC_NODE) npm run test:navigateur
|
|
|
|
|
|
|
|
|
|
.PHONY: test_tout
|
|
|
|
|
test_tout: ## Joue les trois séries
|
|
|
|
|
$(AVEC_NODE) npm run test:tout
|
|
|
|
|
|
[ADD] tests: per-module coverage, 100 % branch floors, layer guards
make couverture runs the node series under V8 instrumentation and prints one
row per module, full ones included, plus a line-by-line HTML report. Four
modules hold a hard 100 % branch floor — indicateurs.js, plafond.js,
depot.js, journal.js — and the command fails below it; there is no global
threshold, which covering the easy modules would satisfy. The tree guard
refuses a lowered or global floor, a floor on a file the measure never loads,
and a command that does not measure. It extends determinism and layer
boundaries to src/stockage, src/csv and src/application (§ 13.4), and no
longer takes a string literal for DOM access.
Checked: 1266 node tests; the four floors at 100 %.
--- FR ---
[ADD] épreuves : couverture par module, seuils durs, gardes des couches
make couverture joue la série node sous l'instrumentation de V8 et imprime une
ligne par module, pleins compris, et un rapport HTML ligne à ligne. Quatre
modules tiennent un seuil dur de 100 % des branches — indicateurs.js,
plafond.js, depot.js, journal.js — et la commande échoue en deçà ; aucun seuil
global, qu'on satisferait en couvrant les modules faciles. La garde de
l'arborescence refuse un seuil abaissé ou global, un seuil sur un fichier que
la mesure ne charge pas, et une commande qui ne mesure pas. Elle étend le
déterminisme et les frontières des couches à src/stockage, src/csv et
src/application (§ 13.4), et ne prend plus une chaîne littérale pour le DOM.
Vérifié : 1266 épreuves node ; les quatre seuils à 100 %.
Assisted-by: Claude Opus 5.5
Claude-Session: https://claude.ai/code/session_01EUXSGcwCLSC69FWEdCtWSb
2026-10-06 20:41:23 -04:00
|
|
|
.PHONY: couverture
|
|
|
|
|
couverture: ## Mesure la couverture de la série node, module par module ; seuils durs du § 14.13
|
|
|
|
|
$(AVEC_NODE) npm run couverture
|
|
|
|
|
|
[ADD] mutation: engine audit command and its versioned written report
Spec 14.13 asks for an audit that shows which engine mutants the tests
kill, written where a reviewer can read it. npm run mutation and make
mutation run the baseline, a coverage pass that stops early when nothing is
measured, then every mutant; survivors are replayed against the long
series. The report holds version, scope, source fingerprint and Node
version only, no duration, host or date, and refuses any other field.
Declared equivalent mutants live in a separate list of key and reason.
Checked: red first; 3612 node tests green from the index alone.
--- FR ---
[ADD] mutation : commande d'audit du moteur, rapport écrit et versionné
Le § 14.13 demande un audit qui montre quels mutants du moteur les épreuves
tuent, écrit là où un relecteur le lit. npm run mutation et make mutation
jouent la ligne de base, une passe de couverture qui s'arrête tôt si rien
n'est mesuré, puis chaque mutant ; les survivants se rejouent contre la
série longue. Le rapport ne porte que version, périmètre, empreinte du
source et version de Node, ni durée, ni hôte, ni date, et refuse tout autre
champ. Les mutants déclarés équivalents vivent dans une liste à part.
Vérifié : rouge d'abord ; 3612 node verts depuis l'index seul.
Assisted-by: Claude Opus 5.5
2026-10-09 15:29:08 -04:00
|
|
|
.PHONY: mutation
|
|
|
|
|
mutation: ## Audit par mutation du moteur, avant une livraison (§ 14.13)
|
|
|
|
|
$(AVEC_NODE) npm run mutation
|
|
|
|
|
|
[ADD] bench: headless Chromium harness, statistics and make banc entry
Rendering thresholds must be measured in a real browser, apart from the
test series that guard behaviour. A separate Vitest project runs
scripts/banc/**/*.banc.js in headless Chromium at 1366 x 700, scale 1,
without frame-rate limit, CPU throttling set per run; the statistics module
gives medians and spreads over repeated samples. Outputs go to an ignored
folder. make banc and npm run banc name the entry; its orchestrator comes
with the bench measures.
Checked: red first; 3410 node tests green from the index; the bench project
runs its harness.
--- FR ---
[ADD] banc : harnais Chromium sans tête, statistiques, entrée make banc
Les seuils de rendu se mesurent dans un vrai navigateur, à part des séries
qui gardent le comportement. Un projet Vitest distinct joue
scripts/banc/**/*.banc.js dans Chromium sans tête à 1366 × 700, facteur 1,
sans limite d'images, le ralentissement du processeur réglé par lancement ;
le module de statistiques rend médianes et dispersions sur des mesures
répétées. Les sorties vont dans un dossier ignoré. make banc et npm run banc
nomment l'entrée ; son orchestrateur vient avec les mesures du banc.
Vérifié : rouge d'abord ; 3410 node verts depuis l'index ; le projet du
banc joue son harnais.
Assisted-by: Claude Opus 5.5
2026-10-09 13:03:37 -04:00
|
|
|
.PHONY: banc
|
|
|
|
|
banc: ## Relève les constantes du banc de mesure (§ 19.10), avant une livraison
|
|
|
|
|
$(AVEC_NODE) npm run banc
|
|
|
|
|
|
[ADD] docs: photographed walkthrough publishes doc/captures
The screenshots must come from the tested walkthrough, not from a separate
script that can drift. The browser walkthrough runs on the simulated file
system with a driven clock and the direct executor, light theme, 1366 x
700 at scale 1, transitions off, and photographs each step once its
condition holds. make captures writes the images and the manifest; the
plain test run compares them instead. Eighteen captures are published, the
later ones named as postponed. The forged-names scan skips the manifest,
which records the demo names shown on screen.
Checked: red first; 3620 node, 681 browser and 101 long tests green from
the index alone.
--- FR ---
[ADD] docs : parcours photographié, publication de doc/captures
Les captures doivent venir du parcours éprouvé, non d'un script à part qui
dérive. Le parcours navigateur joue sur le système de fichiers simulé,
l'horloge pilotée et l'exécuteur direct, thème clair, 1366 × 700 au facteur
1, transitions coupées, et photographie chaque étape quand sa condition
tient. make captures écrit les images et le manifeste ; la série ordinaire
les compare au lieu de les écrire. Dix-huit captures sont publiées, les
suivantes nommées reportées. Le balayage des noms forgés saute le
manifeste, qui relève les noms de démonstration affichés.
Vérifié : rouge d'abord ; 3620 node, 681 navigateur et 101 longues vertes
depuis l'index seul.
Assisted-by: Claude Opus 5.5
2026-10-09 15:33:59 -04:00
|
|
|
# GTT_CAPTURES, exportée pour la seule recette, se pose de la même façon sous
|
|
|
|
|
# Windows : le projet navigateur publie doc/captures au lieu de le comparer.
|
|
|
|
|
.PHONY: captures
|
|
|
|
|
captures: export GTT_CAPTURES := ecrire
|
|
|
|
|
captures: ## Photographie le parcours et publie doc/captures (§ 19.5)
|
|
|
|
|
$(AVEC_NODE) npx vitest run --project navigateur src/interface/parcours.navigateur.test.js
|
|
|
|
|
|
[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
|
|
|
.PHONY: build
|
|
|
|
|
build: ## Construit la page dans www/
|
|
|
|
|
$(AVEC_NODE) npm run build
|
|
|
|
|
|
|
|
|
|
.PHONY: verifier
|
|
|
|
|
verifier: ## Contrôle la version, le nom du livrable et le changelog (§ 18.5)
|
|
|
|
|
$(AVEC_NODE) node scripts/version.js controler
|
|
|
|
|
|
|
|
|
|
.PHONY: essai_demarrage
|
[ADD] build: no remote load in the bundle, portable startup trial
The delivery build is scanned for test modules, runner traces, the Vite
client and any loading http(s) URL, the worker bundle included and quote
entities decoded. The startup trial runs the real shell in portable mode
from separate exe, home and temp folders: it creates an event, loads the
small demonstration, generates in the worker, closes, and checks that the
files sit under exe/data and no lock is left. It runs only when launched
as itself, symlinks resolved, so it never exits green without running.
Checked: 2699 node, 62 long tests, make essai_demarrage conforme.
--- FR ---
[ADD] construction : rien de distant, essai de démarrage portable
La construction de livraison est balayée : ni module d'épreuve, ni trace du
lanceur, ni client de Vite, ni URL http(s) qui charge, paquet du travailleur
compris et entités de guillemets décodées. L'essai lance la vraie coquille
en mode portable, depuis des dossiers exe, home et temp distincts : il crée
un événement, charge la petite démonstration, génère dans le travailleur,
ferme, et vérifie les fichiers sous exe/data et aucun verrou restant. Il ne
part que lancé lui-même, liens résolus : jamais un vert sans essai.
Vérifié : 2699 node, 62 longues, make essai_demarrage conforme.
Assisted-by: Claude Opus 5.5
2026-10-07 16:08:15 -04:00
|
|
|
essai_demarrage: ## Construit la page et joue une séance par gestes dans Electron, en mode portable
|
[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
|
|
|
$(AVEC_NODE) node scripts/essai_demarrage.js
|
|
|
|
|
|
|
|
|
|
ifeq ($(OS),Windows_NT)
|
|
|
|
|
.PHONY: windows
|
|
|
|
|
windows: ##W Construit l'exécutable Windows portable (sous Linux seulement, § 16)
|
|
|
|
|
@echo La construction de l'executable se fait sous Linux, en conteneur : make windows.
|
|
|
|
|
@exit 1
|
|
|
|
|
|
|
|
|
|
.PHONY: clean
|
|
|
|
|
clean: ##W Retire la page construite, www/
|
|
|
|
|
$(PS) -Command "Remove-Item -Recurse -Force -ErrorAction SilentlyContinue www"
|
|
|
|
|
|
|
|
|
|
.PHONY: help
|
|
|
|
|
help: ##W Affiche cette liste
|
|
|
|
|
@findstr /R /C:"^[a-z_]*:.*## " /C:"^[a-z_]*:.*##W " Makefile
|
|
|
|
|
else
|
|
|
|
|
.PHONY: windows
|
|
|
|
|
windows: ##U Construit l'exécutable Windows portable, sous podman (§ 16)
|
|
|
|
|
$(AVEC_NODE) scripts/construire_windows.sh
|
|
|
|
|
|
|
|
|
|
.PHONY: verifier_systemes
|
|
|
|
|
verifier_systemes: ##U Installe et éprouve sur chaque système du catalogue, en conteneurs
|
|
|
|
|
scripts/verifier_systemes.sh
|
|
|
|
|
|
|
|
|
|
.PHONY: clean
|
|
|
|
|
clean: ##U Retire la page construite, www/
|
|
|
|
|
rm -rf www
|
|
|
|
|
|
|
|
|
|
.PHONY: help
|
|
|
|
|
help: ##U Affiche cette liste
|
|
|
|
|
@awk 'BEGIN { FS = ":.*##U? " } /^[a-z_]+:.*##U? / { printf " make %-18s %s\n", $$1, $$2 }' $(MAKEFILE_LIST)
|
|
|
|
|
endif
|