[ADD] generation: best proposition block with its cumulated collisions
The generation screen gave no sign of where the ranking stood, so the
operator had to switch to the propositions to see whether another run was
worth it. A block at the top now names the rank-1 proposition and its
cumulated collisions (pair and tour), read from the same evaluation table
as the propositions, with the same explanation tooltip. It says so in
words when no proposition is ranked, and stays visible in reading mode,
on a blocked plan and during a generation.
Checked: 2886 node, 599 browser tests, from the index alone.
--- FR ---
[ADD] génération : bloc de la meilleure proposition, collisions cumulées
L'écran de génération ne disait rien du classement : l'opérateur devait
passer aux propositions pour juger si une autre génération valait la
peine. Un bloc en tête nomme la proposition de rang 1 et ses collisions
cumulées (paire et tour), lues dans la même table d'évaluation que les
propositions, avec la même infobulle d'explication. Il le dit en mots
quand aucune proposition n'est classée, et reste visible en lecture, sur
un plan bloqué et pendant une génération.
Vérifié : 2886 node, 599 navigateur, depuis l'index seul.
Assisted-by: Claude Opus 5.5
2026-10-08 05:27:32 -04:00
|
|
|
// © 2026 TechnoLibre (http://www.technolibre.ca)
|
|
|
|
|
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
|
|
|
|
|
|
|
|
|
|
// La meilleure proposition, que la section de la génération annonce en tête
|
|
|
|
|
// (§ 5.4, § 5.7), pure : SectionGeneration.svelte la câble.
|
|
|
|
|
//
|
|
|
|
|
// Elle se lit dans le tableau des propositions, sur la table d'évaluation
|
|
|
|
|
// de la charge (evaluation et tableau, propositions/modele.js) : la même
|
|
|
|
|
// mesure, le même classement et la même cellule que la section des
|
[ADD] home: best ranked proposition on every event line
Each event line of the home lists now names its rank-1 proposition and
its cumulated collisions, whether or not a plan is retained, with the
same label and tooltip as the generation block. One application function
picks the rank-1 proposition for both places, so the list, the generation
block and the propositions table show the same proposition and number.
The list reads the examined charge, as opening the event does, so a file
with a repeated proposition identifier no longer hides the whole folder.
Checked: 2923 node, 609 browser, 62 long tests, from the index alone.
--- FR ---
[ADD] accueil : meilleure proposition classée sur chaque événement
Chaque ligne des listes de l'accueil nomme sa proposition de rang 1 et ses
collisions cumulées, retenu ou non, avec le même libellé et la même
infobulle que le bloc de la génération. Une seule fonction d'application
désigne le rang 1 aux deux endroits : la liste, le bloc et le tableau des
propositions montrent la même proposition et le même nombre. La liste lit
la charge examinée, comme l'ouverture : un fichier dont une proposition
répète un identifiant ne fait plus disparaître tout le dossier.
Vérifié : 2923 node, 609 navigateur, 62 longues, depuis l'index seul.
Assisted-by: Claude Opus 5.5
2026-10-08 06:06:21 -04:00
|
|
|
// propositions affiche au rang 1 ; aucune valeur ne se recalcule ici. Le
|
|
|
|
|
// rang 1 est celui de premiereDuClassement (evaluation.js), la définition
|
|
|
|
|
// que la liste des événements lit aussi par resumeDuMeilleur.
|
[ADD] generation: best proposition block with its cumulated collisions
The generation screen gave no sign of where the ranking stood, so the
operator had to switch to the propositions to see whether another run was
worth it. A block at the top now names the rank-1 proposition and its
cumulated collisions (pair and tour), read from the same evaluation table
as the propositions, with the same explanation tooltip. It says so in
words when no proposition is ranked, and stays visible in reading mode,
on a blocked plan and during a generation.
Checked: 2886 node, 599 browser tests, from the index alone.
--- FR ---
[ADD] génération : bloc de la meilleure proposition, collisions cumulées
L'écran de génération ne disait rien du classement : l'opérateur devait
passer aux propositions pour juger si une autre génération valait la
peine. Un bloc en tête nomme la proposition de rang 1 et ses collisions
cumulées (paire et tour), lues dans la même table d'évaluation que les
propositions, avec la même infobulle d'explication. Il le dit en mots
quand aucune proposition n'est classée, et reste visible en lecture, sur
un plan bloqué et pendant une génération.
Vérifié : 2886 node, 599 navigateur, depuis l'index seul.
Assisted-by: Claude Opus 5.5
2026-10-08 05:27:32 -04:00
|
|
|
|
[ADD] home: best ranked proposition on every event line
Each event line of the home lists now names its rank-1 proposition and
its cumulated collisions, whether or not a plan is retained, with the
same label and tooltip as the generation block. One application function
picks the rank-1 proposition for both places, so the list, the generation
block and the propositions table show the same proposition and number.
The list reads the examined charge, as opening the event does, so a file
with a repeated proposition identifier no longer hides the whole folder.
Checked: 2923 node, 609 browser, 62 long tests, from the index alone.
--- FR ---
[ADD] accueil : meilleure proposition classée sur chaque événement
Chaque ligne des listes de l'accueil nomme sa proposition de rang 1 et ses
collisions cumulées, retenu ou non, avec le même libellé et la même
infobulle que le bloc de la génération. Une seule fonction d'application
désigne le rang 1 aux deux endroits : la liste, le bloc et le tableau des
propositions montrent la même proposition et le même nombre. La liste lit
la charge examinée, comme l'ouverture : un fichier dont une proposition
répète un identifiant ne fait plus disparaître tout le dossier.
Vérifié : 2923 node, 609 navigateur, 62 longues, depuis l'index seul.
Assisted-by: Claude Opus 5.5
2026-10-08 06:06:21 -04:00
|
|
|
import { premiereDuClassement } from '../../application/evaluation.js';
|
[ADD] generation: best proposition block with its cumulated collisions
The generation screen gave no sign of where the ranking stood, so the
operator had to switch to the propositions to see whether another run was
worth it. A block at the top now names the rank-1 proposition and its
cumulated collisions (pair and tour), read from the same evaluation table
as the propositions, with the same explanation tooltip. It says so in
words when no proposition is ranked, and stays visible in reading mode,
on a blocked plan and during a generation.
Checked: 2886 node, 599 browser tests, from the index alone.
--- FR ---
[ADD] génération : bloc de la meilleure proposition, collisions cumulées
L'écran de génération ne disait rien du classement : l'opérateur devait
passer aux propositions pour juger si une autre génération valait la
peine. Un bloc en tête nomme la proposition de rang 1 et ses collisions
cumulées (paire et tour), lues dans la même table d'évaluation que les
propositions, avec la même infobulle d'explication. Il le dit en mots
quand aucune proposition n'est classée, et reste visible en lecture, sur
un plan bloqué et pendant une génération.
Vérifié : 2886 node, 599 navigateur, depuis l'index seul.
Assisted-by: Claude Opus 5.5
2026-10-08 05:27:32 -04:00
|
|
|
import { evaluation, tableau } from '../propositions/modele.js';
|
|
|
|
|
|
|
|
|
|
/** La colonne du tableau que l'annonce reprend. */
|
|
|
|
|
export const COLONNE_ANNONCEE = 'collisionsCumulees';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* La proposition au rang 1 du classement, et sa cellule des collisions
|
|
|
|
|
* cumulées.
|
|
|
|
|
*
|
|
|
|
|
* @param {Object} charge la charge de l'état observable de la séance
|
|
|
|
|
* @returns {null|{id: number, cellule: {colonne: string, valeur: number|null,
|
|
|
|
|
* cle: string|null, decimales: number}}} null quand aucune proposition ne
|
|
|
|
|
* se classe : aucune proposition, aucune comparable — population changée —,
|
|
|
|
|
* ou une configuration que la mesure refuse ; sinon l'identifiant de la
|
|
|
|
|
* première ligne du classement et sa cellule, telle que le tableau la porte,
|
|
|
|
|
* que texteCellule écrit
|
|
|
|
|
*/
|
|
|
|
|
export function meilleureProposition(charge) {
|
|
|
|
|
const { table } = evaluation(charge);
|
|
|
|
|
if (table === null) return null;
|
[ADD] home: best ranked proposition on every event line
Each event line of the home lists now names its rank-1 proposition and
its cumulated collisions, whether or not a plan is retained, with the
same label and tooltip as the generation block. One application function
picks the rank-1 proposition for both places, so the list, the generation
block and the propositions table show the same proposition and number.
The list reads the examined charge, as opening the event does, so a file
with a repeated proposition identifier no longer hides the whole folder.
Checked: 2923 node, 609 browser, 62 long tests, from the index alone.
--- FR ---
[ADD] accueil : meilleure proposition classée sur chaque événement
Chaque ligne des listes de l'accueil nomme sa proposition de rang 1 et ses
collisions cumulées, retenu ou non, avec le même libellé et la même
infobulle que le bloc de la génération. Une seule fonction d'application
désigne le rang 1 aux deux endroits : la liste, le bloc et le tableau des
propositions montrent la même proposition et le même nombre. La liste lit
la charge examinée, comme l'ouverture : un fichier dont une proposition
répète un identifiant ne fait plus disparaître tout le dossier.
Vérifié : 2923 node, 609 navigateur, 62 longues, depuis l'index seul.
Assisted-by: Claude Opus 5.5
2026-10-08 06:06:21 -04:00
|
|
|
const premiere = premiereDuClassement(table);
|
|
|
|
|
if (premiere === null) return null;
|
|
|
|
|
const ligne = tableau(table).lignes.find(({ id }) => id === premiere.id);
|
|
|
|
|
return { id: premiere.id, cellule: ligne.cellules.find(({ colonne }) => colonne === COLONNE_ANNONCEE) };
|
[ADD] generation: best proposition block with its cumulated collisions
The generation screen gave no sign of where the ranking stood, so the
operator had to switch to the propositions to see whether another run was
worth it. A block at the top now names the rank-1 proposition and its
cumulated collisions (pair and tour), read from the same evaluation table
as the propositions, with the same explanation tooltip. It says so in
words when no proposition is ranked, and stays visible in reading mode,
on a blocked plan and during a generation.
Checked: 2886 node, 599 browser tests, from the index alone.
--- FR ---
[ADD] génération : bloc de la meilleure proposition, collisions cumulées
L'écran de génération ne disait rien du classement : l'opérateur devait
passer aux propositions pour juger si une autre génération valait la
peine. Un bloc en tête nomme la proposition de rang 1 et ses collisions
cumulées (paire et tour), lues dans la même table d'évaluation que les
propositions, avec la même infobulle d'explication. Il le dit en mots
quand aucune proposition n'est classée, et reste visible en lecture, sur
un plan bloqué et pendant une génération.
Vérifié : 2886 node, 599 navigateur, depuis l'index seul.
Assisted-by: Claude Opus 5.5
2026-10-08 05:27:32 -04:00
|
|
|
}
|