[IMP] tests: watched series adapts to the core count, threads below 4
Below four cores the runner carried the watched series in one process,
and a relaunch after a base module took 2.5 to 3 s, over the 2 s budget
of § 14.14. The configuration now reads the cores the process may use:
from four, full processes and the whole series, as before; below, threads
on every core, and the end-to-end test moves to the long series. No test
disappears or changes behaviour. A guard refuses, in these series, what a
thread refuses and a process accepts; the reporter names the mode.
Checked: relaunch on 2 cores 1.0 to 1.3 s, was 2.5 to 3.0; on 4 cores
1.2 to 1.5 s; process.env is copied per thread, measured.
--- FR ---
[IMP] épreuves : la série surveillée suit les cœurs, threads sous 4
Sous quatre cœurs, le lanceur portait la série surveillée dans un seul
processus, et une relance après un module de base prenait 2,5 à 3 s,
au-delà du budget de 2 s du § 14.14. La configuration lit les cœurs que
le processus peut occuper : à partir de quatre, processus complets et
série entière, comme avant ; en deçà, threads sur tous les cœurs, et
l'épreuve de bout en bout passe dans la série longue. Aucune épreuve ne
disparaît ni ne change. Une garde refuse dans ces séries ce qu'un thread
refuse et qu'un processus accepte ; le rapporteur nomme le mode.
Vérifié : relance sur 2 cœurs en 1,0 à 1,3 s, contre 2,5 à 3,0 ; sur 4
cœurs en 1,2 à 1,5 s ; process.env est copié par thread, mesuré.
Assisted-by: Claude Opus 5.5
2026-10-06 04:54:01 -04:00
|
|
|
// © 2026 TechnoLibre (http://www.technolibre.ca)
|
|
|
|
|
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
|
|
|
|
|
|
|
|
|
|
// Réglages des séries node selon le nombre de cœurs de la machine (§ 14.14).
|
|
|
|
|
//
|
|
|
|
|
// Le budget de relance, deux secondes, tient avec des processus complets à
|
|
|
|
|
// partir de quatre cœurs. En deçà, le lanceur ne porte la série que dans un
|
|
|
|
|
// seul processus, et la relance qui suit un module de base — que presque
|
|
|
|
|
// toutes les épreuves importent — dépasse ce budget : de l'ordre de trois
|
|
|
|
|
// secondes sur deux cœurs. Une petite machine prend donc des threads, moins
|
|
|
|
|
// coûteux à démarrer qu'un processus, sur tous ses cœurs, et les épreuves
|
|
|
|
|
// lourdes de la série surveillée passent dans la série longue : la même
|
|
|
|
|
// relance y tient alors sous une seconde et demie.
|
|
|
|
|
//
|
|
|
|
|
// Aucune épreuve ne disparaît : elle change de série, et ce qu'elle éprouve
|
|
|
|
|
// ne dépend pas de la machine. Les threads partagent un processus : la garde
|
|
|
|
|
// de test/fils.test.js tient la série node à l'écart de l'état global du
|
|
|
|
|
// processus, sans quoi une épreuve en troublerait une autre.
|
|
|
|
|
import { availableParallelism } from 'node:os';
|
|
|
|
|
|
|
|
|
|
// Nombre de cœurs à partir duquel la série surveillée garde des processus
|
|
|
|
|
// complets et toutes ses épreuves.
|
|
|
|
|
export const SEUIL_COEURS = 4;
|
|
|
|
|
|
|
|
|
|
// Épreuves de la série surveillée qui passent dans node-long sur une petite
|
|
|
|
|
// machine. L'épreuve de bout en bout lance de vraies recherches : c'est la
|
|
|
|
|
// plus lourde de la série, et toute modification du moteur la rejoue.
|
|
|
|
|
export const LOURDES = Object.freeze(['src/moteur/integration.test.js']);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Réglages des projets node et node-long pour un nombre de cœurs.
|
|
|
|
|
*
|
[ADD] tests: guards for layers, clock, sources, colours, watch patterns
Guards scan the tree file by file and line by line, fail on an empty scan,
and are each shown red on a temporary tree. They cover the interface import
graph, the Electron bridge, one clock, refused dependencies, how tests are
written, hard-coded strings, translation keys, forbidden words, colours and
the conflict hue, markup, pruned selectors and watch patterns. Coverage
keeps the engine integration test on a small machine. Fixes: delays in
tests, the conflict hatch class; « la rend évitable » is a named exception
(§ 5.6). Checked: 2587 node, 465 browser tests, from the index alone.
--- FR ---
[ADD] épreuves : gardes des couches, horloge, sources, couleurs, motifs
Les gardes relèvent par fichier et par ligne, échouent sur un balayage vide
et sont chacune montrées rouges sur un arbre temporaire. Elles couvrent le
graphe d'imports de l'interface, le pont d'Electron, l'horloge unique, les
dépendances refusées, l'écriture des épreuves, les chaînes en dur, les clés
de traduction, les mots interdits, les couleurs et la teinte de conflit, le
balisage, les sélecteurs élagués et les motifs de surveillance. Corrigés :
délais d'épreuves, classe de la trame de conflit ; « la rend évitable » est
une exception nommée (§ 5.6). Vérifié : 2587 node, 465 navigateur.
Assisted-by: Claude Opus 5.5
2026-10-07 13:21:21 -04:00
|
|
|
* Sous la mesure de la couverture, aucune épreuve ne quitte la série node :
|
|
|
|
|
* les seuils de branches d'indicateurs.js et de plafond.js se mesurent avec
|
|
|
|
|
* l'épreuve de bout en bout, sur une petite machine comme sur une grande. La
|
|
|
|
|
* mesure ne relance rien sous surveillance ; le budget de relance n'y joue
|
|
|
|
|
* pas. Le reste des réglages ne change pas.
|
|
|
|
|
*
|
[IMP] tests: watched series adapts to the core count, threads below 4
Below four cores the runner carried the watched series in one process,
and a relaunch after a base module took 2.5 to 3 s, over the 2 s budget
of § 14.14. The configuration now reads the cores the process may use:
from four, full processes and the whole series, as before; below, threads
on every core, and the end-to-end test moves to the long series. No test
disappears or changes behaviour. A guard refuses, in these series, what a
thread refuses and a process accepts; the reporter names the mode.
Checked: relaunch on 2 cores 1.0 to 1.3 s, was 2.5 to 3.0; on 4 cores
1.2 to 1.5 s; process.env is copied per thread, measured.
--- FR ---
[IMP] épreuves : la série surveillée suit les cœurs, threads sous 4
Sous quatre cœurs, le lanceur portait la série surveillée dans un seul
processus, et une relance après un module de base prenait 2,5 à 3 s,
au-delà du budget de 2 s du § 14.14. La configuration lit les cœurs que
le processus peut occuper : à partir de quatre, processus complets et
série entière, comme avant ; en deçà, threads sur tous les cœurs, et
l'épreuve de bout en bout passe dans la série longue. Aucune épreuve ne
disparaît ni ne change. Une garde refuse dans ces séries ce qu'un thread
refuse et qu'un processus accepte ; le rapporteur nomme le mode.
Vérifié : relance sur 2 cœurs en 1,0 à 1,3 s, contre 2,5 à 3,0 ; sur 4
cœurs en 1,2 à 1,5 s ; process.env est copié par thread, mesuré.
Assisted-by: Claude Opus 5.5
2026-10-06 04:54:01 -04:00
|
|
|
* @param {number} coeurs entier ≥ 1
|
[ADD] tests: guards for layers, clock, sources, colours, watch patterns
Guards scan the tree file by file and line by line, fail on an empty scan,
and are each shown red on a temporary tree. They cover the interface import
graph, the Electron bridge, one clock, refused dependencies, how tests are
written, hard-coded strings, translation keys, forbidden words, colours and
the conflict hue, markup, pruned selectors and watch patterns. Coverage
keeps the engine integration test on a small machine. Fixes: delays in
tests, the conflict hatch class; « la rend évitable » is a named exception
(§ 5.6). Checked: 2587 node, 465 browser tests, from the index alone.
--- FR ---
[ADD] épreuves : gardes des couches, horloge, sources, couleurs, motifs
Les gardes relèvent par fichier et par ligne, échouent sur un balayage vide
et sont chacune montrées rouges sur un arbre temporaire. Elles couvrent le
graphe d'imports de l'interface, le pont d'Electron, l'horloge unique, les
dépendances refusées, l'écriture des épreuves, les chaînes en dur, les clés
de traduction, les mots interdits, les couleurs et la teinte de conflit, le
balisage, les sélecteurs élagués et les motifs de surveillance. Corrigés :
délais d'épreuves, classe de la trame de conflit ; « la rend évitable » est
une exception nommée (§ 5.6). Vérifié : 2587 node, 465 navigateur.
Assisted-by: Claude Opus 5.5
2026-10-07 13:21:21 -04:00
|
|
|
* @param {{couverture?: boolean}} [options] couverture vraie quand le
|
|
|
|
|
* lanceur mesure la couverture (--coverage)
|
[IMP] tests: watched series adapts to the core count, threads below 4
Below four cores the runner carried the watched series in one process,
and a relaunch after a base module took 2.5 to 3 s, over the 2 s budget
of § 14.14. The configuration now reads the cores the process may use:
from four, full processes and the whole series, as before; below, threads
on every core, and the end-to-end test moves to the long series. No test
disappears or changes behaviour. A guard refuses, in these series, what a
thread refuses and a process accepts; the reporter names the mode.
Checked: relaunch on 2 cores 1.0 to 1.3 s, was 2.5 to 3.0; on 4 cores
1.2 to 1.5 s; process.env is copied per thread, measured.
--- FR ---
[IMP] épreuves : la série surveillée suit les cœurs, threads sous 4
Sous quatre cœurs, le lanceur portait la série surveillée dans un seul
processus, et une relance après un module de base prenait 2,5 à 3 s,
au-delà du budget de 2 s du § 14.14. La configuration lit les cœurs que
le processus peut occuper : à partir de quatre, processus complets et
série entière, comme avant ; en deçà, threads sur tous les cœurs, et
l'épreuve de bout en bout passe dans la série longue. Aucune épreuve ne
disparaît ni ne change. Une garde refuse dans ces séries ce qu'un thread
refuse et qu'un processus accepte ; le rapporteur nomme le mode.
Vérifié : relance sur 2 cœurs en 1,0 à 1,3 s, contre 2,5 à 3,0 ; sur 4
cœurs en 1,2 à 1,5 s ; process.env est copié par thread, mesuré.
Assisted-by: Claude Opus 5.5
2026-10-06 04:54:01 -04:00
|
|
|
* @returns {{petiteMachine: boolean, coeurs: number, pool: 'forks'|'threads',
|
|
|
|
|
* maxWorkers: number|undefined, horsSerieSurveillee: string[]}}
|
|
|
|
|
* maxWorkers undefined laisse au lanceur son défaut
|
|
|
|
|
*/
|
[ADD] tests: guards for layers, clock, sources, colours, watch patterns
Guards scan the tree file by file and line by line, fail on an empty scan,
and are each shown red on a temporary tree. They cover the interface import
graph, the Electron bridge, one clock, refused dependencies, how tests are
written, hard-coded strings, translation keys, forbidden words, colours and
the conflict hue, markup, pruned selectors and watch patterns. Coverage
keeps the engine integration test on a small machine. Fixes: delays in
tests, the conflict hatch class; « la rend évitable » is a named exception
(§ 5.6). Checked: 2587 node, 465 browser tests, from the index alone.
--- FR ---
[ADD] épreuves : gardes des couches, horloge, sources, couleurs, motifs
Les gardes relèvent par fichier et par ligne, échouent sur un balayage vide
et sont chacune montrées rouges sur un arbre temporaire. Elles couvrent le
graphe d'imports de l'interface, le pont d'Electron, l'horloge unique, les
dépendances refusées, l'écriture des épreuves, les chaînes en dur, les clés
de traduction, les mots interdits, les couleurs et la teinte de conflit, le
balisage, les sélecteurs élagués et les motifs de surveillance. Corrigés :
délais d'épreuves, classe de la trame de conflit ; « la rend évitable » est
une exception nommée (§ 5.6). Vérifié : 2587 node, 465 navigateur.
Assisted-by: Claude Opus 5.5
2026-10-07 13:21:21 -04:00
|
|
|
export function reglagesSeries(coeurs, { couverture = false } = {}) {
|
[IMP] tests: watched series adapts to the core count, threads below 4
Below four cores the runner carried the watched series in one process,
and a relaunch after a base module took 2.5 to 3 s, over the 2 s budget
of § 14.14. The configuration now reads the cores the process may use:
from four, full processes and the whole series, as before; below, threads
on every core, and the end-to-end test moves to the long series. No test
disappears or changes behaviour. A guard refuses, in these series, what a
thread refuses and a process accepts; the reporter names the mode.
Checked: relaunch on 2 cores 1.0 to 1.3 s, was 2.5 to 3.0; on 4 cores
1.2 to 1.5 s; process.env is copied per thread, measured.
--- FR ---
[IMP] épreuves : la série surveillée suit les cœurs, threads sous 4
Sous quatre cœurs, le lanceur portait la série surveillée dans un seul
processus, et une relance après un module de base prenait 2,5 à 3 s,
au-delà du budget de 2 s du § 14.14. La configuration lit les cœurs que
le processus peut occuper : à partir de quatre, processus complets et
série entière, comme avant ; en deçà, threads sur tous les cœurs, et
l'épreuve de bout en bout passe dans la série longue. Aucune épreuve ne
disparaît ni ne change. Une garde refuse dans ces séries ce qu'un thread
refuse et qu'un processus accepte ; le rapporteur nomme le mode.
Vérifié : relance sur 2 cœurs en 1,0 à 1,3 s, contre 2,5 à 3,0 ; sur 4
cœurs en 1,2 à 1,5 s ; process.env est copié par thread, mesuré.
Assisted-by: Claude Opus 5.5
2026-10-06 04:54:01 -04:00
|
|
|
if (!Number.isInteger(coeurs) || coeurs < 1) {
|
|
|
|
|
throw new RangeError(`nombre de cœurs ${String(coeurs)} : entier ≥ 1 attendu`);
|
|
|
|
|
}
|
|
|
|
|
if (coeurs >= SEUIL_COEURS) {
|
|
|
|
|
return { petiteMachine: false, coeurs, pool: 'forks', maxWorkers: undefined, horsSerieSurveillee: [] };
|
|
|
|
|
}
|
[ADD] tests: guards for layers, clock, sources, colours, watch patterns
Guards scan the tree file by file and line by line, fail on an empty scan,
and are each shown red on a temporary tree. They cover the interface import
graph, the Electron bridge, one clock, refused dependencies, how tests are
written, hard-coded strings, translation keys, forbidden words, colours and
the conflict hue, markup, pruned selectors and watch patterns. Coverage
keeps the engine integration test on a small machine. Fixes: delays in
tests, the conflict hatch class; « la rend évitable » is a named exception
(§ 5.6). Checked: 2587 node, 465 browser tests, from the index alone.
--- FR ---
[ADD] épreuves : gardes des couches, horloge, sources, couleurs, motifs
Les gardes relèvent par fichier et par ligne, échouent sur un balayage vide
et sont chacune montrées rouges sur un arbre temporaire. Elles couvrent le
graphe d'imports de l'interface, le pont d'Electron, l'horloge unique, les
dépendances refusées, l'écriture des épreuves, les chaînes en dur, les clés
de traduction, les mots interdits, les couleurs et la teinte de conflit, le
balisage, les sélecteurs élagués et les motifs de surveillance. Corrigés :
délais d'épreuves, classe de la trame de conflit ; « la rend évitable » est
une exception nommée (§ 5.6). Vérifié : 2587 node, 465 navigateur.
Assisted-by: Claude Opus 5.5
2026-10-07 13:21:21 -04:00
|
|
|
const horsSerieSurveillee = couverture ? [] : [...LOURDES];
|
|
|
|
|
return { petiteMachine: true, coeurs, pool: 'threads', maxWorkers: coeurs, horsSerieSurveillee };
|
[IMP] tests: watched series adapts to the core count, threads below 4
Below four cores the runner carried the watched series in one process,
and a relaunch after a base module took 2.5 to 3 s, over the 2 s budget
of § 14.14. The configuration now reads the cores the process may use:
from four, full processes and the whole series, as before; below, threads
on every core, and the end-to-end test moves to the long series. No test
disappears or changes behaviour. A guard refuses, in these series, what a
thread refuses and a process accepts; the reporter names the mode.
Checked: relaunch on 2 cores 1.0 to 1.3 s, was 2.5 to 3.0; on 4 cores
1.2 to 1.5 s; process.env is copied per thread, measured.
--- FR ---
[IMP] épreuves : la série surveillée suit les cœurs, threads sous 4
Sous quatre cœurs, le lanceur portait la série surveillée dans un seul
processus, et une relance après un module de base prenait 2,5 à 3 s,
au-delà du budget de 2 s du § 14.14. La configuration lit les cœurs que
le processus peut occuper : à partir de quatre, processus complets et
série entière, comme avant ; en deçà, threads sur tous les cœurs, et
l'épreuve de bout en bout passe dans la série longue. Aucune épreuve ne
disparaît ni ne change. Une garde refuse dans ces séries ce qu'un thread
refuse et qu'un processus accepte ; le rapporteur nomme le mode.
Vérifié : relance sur 2 cœurs en 1,0 à 1,3 s, contre 2,5 à 3,0 ; sur 4
cœurs en 1,2 à 1,5 s ; process.env est copié par thread, mesuré.
Assisted-by: Claude Opus 5.5
2026-10-06 04:54:01 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Cœurs que ce processus peut occuper. availableParallelism suit l'affinité
|
|
|
|
|
// du processus : sous « taskset -c 0,1 », il rend 2 sur une machine qui en a
|
|
|
|
|
// seize, ce qui permet d'éprouver le mode d'une petite machine sur une grande.
|
|
|
|
|
export const coeursDisponibles = () => availableParallelism();
|
|
|
|
|
|
|
|
|
|
// Ligne que le rapporteur imprime, pour qu'un développeur sache sur quelle
|
|
|
|
|
// série sa relance a porté.
|
|
|
|
|
export function ligneMachine({ petiteMachine, coeurs, horsSerieSurveillee }) {
|
|
|
|
|
const compte = coeurs === 1 ? '1 cœur' : `${coeurs} cœurs`;
|
|
|
|
|
if (!petiteMachine) return `Machine : ${compte} — processus complets, série surveillée entière.`;
|
|
|
|
|
const ou = coeurs === 1 ? 'sur son seul cœur' : `sur les ${coeurs} cœurs`;
|
|
|
|
|
return `Machine : ${compte}, en deçà de ${SEUIL_COEURS} — threads ${ou} ; `
|
|
|
|
|
+ `en série longue : ${horsSerieSurveillee.join(', ')}.`;
|
|
|
|
|
}
|