[ADD] skeleton: Capacitor web app that shows its dated version
The engine to come must be proven against oracles under node in seconds,
so the skeleton sets three test projects: node, watched; node-long; and a
real Chromium that reads computed styles in both themes. The version
lives in version.json alone; a check refuses eight divergences — technical
form, generated module, changelog head, stray version strings — and a
build guard keeps test files and fixture assets out of the bundle.
Checked: on this commit alone, 73 node tests, 7 browser tests and the
version check pass; the guard fails on a fixture joined as an asset.
--- FR ---
[ADD] squelette : application web Capacitor qui affiche sa version datée
Le moteur à venir doit s'éprouver contre des oracles sous node en
quelques secondes : le squelette pose trois projets d'épreuve — node,
sous surveillance ; node-long ; et un vrai Chromium qui lit le style
calculé dans les deux thèmes. La version vit dans version.json seul ; un
contrôle refuse huit divergences — forme technique, module engendré,
tête du changelog, chaînes de version égarées — et une garde de
construction tient fichiers et données d'épreuve hors du paquet.
Vérifié : sur ce commit seul, 73 épreuves node, 7 navigateur et le
contrôle de version passent ; la garde échoue sur une donnée jointe.
Assisted-by: Claude Opus 5.5
2026-10-05 13:13:13 -04:00
|
|
|
// © 2026 TechnoLibre (http://www.technolibre.ca)
|
|
|
|
|
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
|
|
|
|
|
|
|
|
|
|
// Un seul lanceur, trois projets (§ 14.4, § 14.8).
|
|
|
|
|
//
|
|
|
|
|
// node fonctions pures, sans DOM et sans greffon Svelte : un module qui
|
|
|
|
|
// importerait un composant échoue au chargement.
|
|
|
|
|
// node-long épreuves lourdes, hors de la série surveillée. Leur durée croît
|
|
|
|
|
// avec l'application : chacune dispose de deux minutes, là où le
|
|
|
|
|
// délai par défaut de Vitest, 5 s, la ferait échouer par
|
|
|
|
|
// dépassement et non sur un défaut. Ce délai arrête un test
|
[ADD] tests: budget reporter, one import parser, key-order guard
The time budget of § 14.14 had no enforcement: a reporter now prints the
total and the ten slowest tests, and fails a run whose node project
exceeds 30 s or node-long 60 s. Two guards parsed imports with two
patterns, one blind past an apostrophe in a comment; both now use one
parser anchored on « from ». The determinism guard refuses key-order
walks, and one test binds the application name across its three
declarations. The end-to-end generations drop to 100 000 moves.
Checked: each ceiling, the apostrophe case and a key walk are shown
failing before the guard that catches them.
--- FR ---
[ADD] épreuves : rapporteur de budget, imports, ordre des clés
Le budget de temps du § 14.14 n'avait aucune garde : un rapporteur
imprime désormais la durée totale et les dix épreuves les plus lentes,
et fait échouer une exécution dont le projet node dépasse 30 s ou
node-long 60 s. Deux gardes lisaient les imports par deux motifs, l'un
aveugle après une apostrophe en commentaire ; les deux passent par un
seul analyseur ancré sur « from ». La garde de déterminisme refuse les
parcours de clés, et une épreuve lie le nom de l'application à ses
trois déclarations. Les générations de bout en bout passent à 100 000.
Vérifié : chaque plafond, le cas de l'apostrophe et un parcours de clés
sont montrés en échec avant la garde qui les attrape.
Assisted-by: Claude Opus 5.5
2026-10-06 04:23:13 -04:00
|
|
|
// bloqué ; le plafond de la série est celui du rapporteur.
|
[ADD] skeleton: Capacitor web app that shows its dated version
The engine to come must be proven against oracles under node in seconds,
so the skeleton sets three test projects: node, watched; node-long; and a
real Chromium that reads computed styles in both themes. The version
lives in version.json alone; a check refuses eight divergences — technical
form, generated module, changelog head, stray version strings — and a
build guard keeps test files and fixture assets out of the bundle.
Checked: on this commit alone, 73 node tests, 7 browser tests and the
version check pass; the guard fails on a fixture joined as an asset.
--- FR ---
[ADD] squelette : application web Capacitor qui affiche sa version datée
Le moteur à venir doit s'éprouver contre des oracles sous node en
quelques secondes : le squelette pose trois projets d'épreuve — node,
sous surveillance ; node-long ; et un vrai Chromium qui lit le style
calculé dans les deux thèmes. La version vit dans version.json seul ; un
contrôle refuse huit divergences — forme technique, module engendré,
tête du changelog, chaînes de version égarées — et une garde de
construction tient fichiers et données d'épreuve hors du paquet.
Vérifié : sur ce commit seul, 73 épreuves node, 7 navigateur et le
contrôle de version passent ; la garde échoue sur une donnée jointe.
Assisted-by: Claude Opus 5.5
2026-10-05 13:13:13 -04:00
|
|
|
// navigateur un vrai moteur de rendu. Le projet étend vite.config.js : un
|
|
|
|
|
// module s'y résout par les mêmes greffons et réglages que dans la
|
|
|
|
|
// construction du livrable, sans seconde configuration à tenir
|
|
|
|
|
// d'accord avec la première.
|
|
|
|
|
import { defineConfig } from 'vitest/config';
|
|
|
|
|
import { playwright } from '@vitest/browser-playwright';
|
|
|
|
|
|
|
|
|
|
export default defineConfig({
|
|
|
|
|
test: {
|
[ADD] tests: budget reporter, one import parser, key-order guard
The time budget of § 14.14 had no enforcement: a reporter now prints the
total and the ten slowest tests, and fails a run whose node project
exceeds 30 s or node-long 60 s. Two guards parsed imports with two
patterns, one blind past an apostrophe in a comment; both now use one
parser anchored on « from ». The determinism guard refuses key-order
walks, and one test binds the application name across its three
declarations. The end-to-end generations drop to 100 000 moves.
Checked: each ceiling, the apostrophe case and a key walk are shown
failing before the guard that catches them.
--- FR ---
[ADD] épreuves : rapporteur de budget, imports, ordre des clés
Le budget de temps du § 14.14 n'avait aucune garde : un rapporteur
imprime désormais la durée totale et les dix épreuves les plus lentes,
et fait échouer une exécution dont le projet node dépasse 30 s ou
node-long 60 s. Deux gardes lisaient les imports par deux motifs, l'un
aveugle après une apostrophe en commentaire ; les deux passent par un
seul analyseur ancré sur « from ». La garde de déterminisme refuse les
parcours de clés, et une épreuve lie le nom de l'application à ses
trois déclarations. Les générations de bout en bout passent à 100 000.
Vérifié : chaque plafond, le cas de l'apostrophe et un parcours de clés
sont montrés en échec avant la garde qui les attrape.
Assisted-by: Claude Opus 5.5
2026-10-06 04:23:13 -04:00
|
|
|
// test/rapporteur.js imprime, après le bilan par défaut, la durée de
|
|
|
|
|
// chaque projet et les dix épreuves les plus lentes, et fait échouer
|
|
|
|
|
// l'exécution quand node ou node-long dépasse son plafond (§ 14.14). Un
|
|
|
|
|
// chemin relatif se lit depuis la racine du projet.
|
|
|
|
|
reporters: ['default', './test/rapporteur.js'],
|
[ADD] skeleton: Capacitor web app that shows its dated version
The engine to come must be proven against oracles under node in seconds,
so the skeleton sets three test projects: node, watched; node-long; and a
real Chromium that reads computed styles in both themes. The version
lives in version.json alone; a check refuses eight divergences — technical
form, generated module, changelog head, stray version strings — and a
build guard keeps test files and fixture assets out of the bundle.
Checked: on this commit alone, 73 node tests, 7 browser tests and the
version check pass; the guard fails on a fixture joined as an asset.
--- FR ---
[ADD] squelette : application web Capacitor qui affiche sa version datée
Le moteur à venir doit s'éprouver contre des oracles sous node en
quelques secondes : le squelette pose trois projets d'épreuve — node,
sous surveillance ; node-long ; et un vrai Chromium qui lit le style
calculé dans les deux thèmes. La version vit dans version.json seul ; un
contrôle refuse huit divergences — forme technique, module engendré,
tête du changelog, chaînes de version égarées — et une garde de
construction tient fichiers et données d'épreuve hors du paquet.
Vérifié : sur ce commit seul, 73 épreuves node, 7 navigateur et le
contrôle de version passent ; la garde échoue sur une donnée jointe.
Assisted-by: Claude Opus 5.5
2026-10-05 13:13:13 -04:00
|
|
|
// Sous surveillance, une épreuve se relance quand un module de son graphe
|
|
|
|
|
// d'imports change. Les fichiers des motifs se lisent hors de tout
|
|
|
|
|
// graphe : le contrôle de version (§ 18.5) lit les premiers par le
|
|
|
|
|
// système de fichiers ; la coquille s'exécute dans un processus à part,
|
|
|
|
|
// la configuration d'electron-builder se charge par un require natif et
|
|
|
|
|
// lit capacitor.config.json, et le script de construction se lance
|
|
|
|
|
// depuis une copie. Chaque motif rattache ses fichiers aux épreuves qui
|
|
|
|
|
// les lisent, et au contrôle de version quand son point 6 les balaie. Un
|
|
|
|
|
// fichier qui répond à un motif ne relance que les épreuves nommées, et
|
|
|
|
|
// plus celles qui l'importeraient : un motif ne nomme donc aucun fichier
|
|
|
|
|
// qu'une épreuve importe. L'option se lit au niveau du lanceur : posée
|
|
|
|
|
// dans un projet, elle est ignorée sans avertissement.
|
|
|
|
|
watchTriggerPatterns: [
|
|
|
|
|
{ pattern: /(^|\/)(version\.json|package-lock\.json|CHANGELOG\.md|README\.md|GUIDE-[^/]*\.md)$/,
|
|
|
|
|
testsToRun: () => 'scripts/version.test.js' },
|
|
|
|
|
{ pattern: /(^|\/)electron\/[^/]+$/,
|
|
|
|
|
testsToRun: () => ['test/coquille.test.js', 'test/livrable.test.js', 'scripts/version.test.js'] },
|
|
|
|
|
{ pattern: /(^|\/)test\/electron_factice\.js$/,
|
|
|
|
|
testsToRun: () => ['test/coquille.test.js', 'scripts/version.test.js'] },
|
|
|
|
|
{ pattern: /(^|\/)(electron-builder\.config\.cjs|capacitor\.config\.json)$/,
|
|
|
|
|
testsToRun: () => ['test/livrable.test.js', 'scripts/construire_windows.test.js', 'scripts/version.test.js'] },
|
|
|
|
|
{ pattern: /(^|\/)scripts\/construire_windows\.sh$/,
|
|
|
|
|
testsToRun: () => ['scripts/construire_windows.test.js', 'scripts/version.test.js'] },
|
|
|
|
|
],
|
|
|
|
|
projects: [
|
|
|
|
|
{ test: {
|
|
|
|
|
name: 'node', environment: 'node',
|
|
|
|
|
include: ['src/**/*.test.js', 'scripts/**/*.test.js', 'test/**/*.test.js'],
|
|
|
|
|
exclude: ['**/*.long.test.js', '**/*.navigateur.test.js', 'node_modules/**'] } },
|
|
|
|
|
{ test: {
|
|
|
|
|
name: 'node-long', environment: 'node',
|
|
|
|
|
include: ['src/**/*.long.test.js', 'test/**/*.long.test.js'],
|
|
|
|
|
testTimeout: 120_000 } },
|
|
|
|
|
{ extends: './vite.config.js',
|
|
|
|
|
test: {
|
|
|
|
|
name: 'navigateur',
|
|
|
|
|
include: ['src/**/*.navigateur.test.js'],
|
|
|
|
|
browser: { enabled: true, headless: true, provider: playwright(),
|
|
|
|
|
instances: [{ browser: 'chromium' }] } } },
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
});
|