A core runs slower when its neighbours work too, so the estimate that
divided the run by the number of workers promised too short a wait. The
estimate now multiplies by rho(W), linear from 1 on one core to the
registry constant RALENTISSEMENT_PLEINE_CHARGE when every logical
processor works; the cores setting itself is unchanged. A bench file
measures the curve. An out-of-range setting is refused before
AUCUN_EVENEMENT.
Checked: red first; 3582 node and 659 browser tests green from the index.
--- FR ---
[IMP] génération : l'estimation compte le ralentissement des cœurs
Un cœur va moins vite quand ses voisins travaillent aussi : l'estimation
qui divisait le calcul par le nombre de travailleurs promettait une attente
trop courte. Elle multiplie désormais par rho(W), linéaire de 1 sur un cœur
à la constante RALENTISSEMENT_PLEINE_CHARGE du registre quand tous les
processeurs logiques travaillent ; le réglage des cœurs ne change pas. Un
fichier du banc mesure la courbe. Un réglage hors domaine est refusé avant
AUCUN_EVENEMENT.
Vérifié : rouge d'abord ; 3582 node et 659 navigateur verts depuis l'index.
Assisted-by: Claude Opus 5.5
Generation ran in a single worker, one proposition after another, using
one core. A pool of workers now takes propositions by rank, as many as
the cores set: automatic by default (every logical CPU), or a count from
1 to that number. Each proposition is still computed from its own derived
seed, so the result is byte-identical whatever the core count, ordered by
identifier. One progress bar sums the workers; Cancel stops them all; the
duration estimate counts the cores. The setting is per session and never
written. Checked: 2872 node, 586 browser, 62 long; 5 workers in Electron.
--- FR ---
[ADD] génération : réserve de travailleurs sur les processeurs, cœurs
La génération tournait dans un seul travailleur, une proposition après
l'autre, sur un seul cœur. Une réserve de travailleurs prend maintenant les
propositions par rang, autant que de cœurs réglés : automatique par défaut
(tous les processeurs logiques), ou un nombre de 1 à ce total. Chaque
proposition se calcule toujours depuis sa graine dérivée : le résultat est
identique à l'octet quel que soit le nombre de cœurs, rangé par
identifiant. Une seule barre ; Annuler arrête tout ; l'estimation compte
les cœurs. Réglage de séance, jamais écrit. Vérifié : 2872, 586, 62.
Assisted-by: Claude Opus 5.5
Generating must never block the screen or record a plan that breaks a
rule. The controller refuses before launching, in a fixed order: an
out-of-range setting named by the engine's own check, the session's
refusals, then what makes the run useless. It runs the search in a worker
or in the thread, records only propositions whose invariants hold, skips
plans already present, and keeps the last duration for the session only.
The evaluation table ranks propositions on the minimum of encounters and
names the reservations a proposition does not honour.
Checked: 2112 node and 60 node-long tests; coverage floors kept.
--- FR ---
[ADD] application : génération, travailleur, table d'évaluation
Générer ne doit jamais bloquer l'écran ni enregistrer un plan qui enfreint
une règle. Le contrôleur refuse avant tout lancement, dans un ordre fixe :
un réglage hors de son domaine, nommé par la règle même du moteur, les
refus de la séance, puis ce qui rend le calcul vain. Il lance la recherche
dans un travailleur ou dans le fil, n'enregistre que les propositions dont
les invariants tiennent, écarte les plans déjà présents, et garde la
dernière durée pour la seule séance. La table d'évaluation classe les
propositions sur le minimum de rencontres et nomme les réservations
qu'une proposition ne tient pas.
Vérifié : 2112 node et 60 node-long ; seuils de couverture tenus.
Assisted-by: Claude Opus 5.5