Commit graph

171 commits

Author SHA1 Message Date
426eb911c9 [IMP] card and priority editor: red circled cross, number weight field
A tag's « Retirer » text button read like plain text, and the weight of
a criterion took a whole column for a number from 1 to 100. The card
now removes a tag with a red circled cross, shown in write mode only,
named « Retirer « tag » » for screen readers, with a 24 px target; the
red has its own token, exempted from the conflict-hue rule and limited
to card surfaces. The weight is a narrow number field, still read and
refused as before.
Checked: node 4597, navigateur 965; captures 04a and 10a republished.

--- FR ---

[IMP] fiche et priorités : croix rouge cerclée, poids en champ nombre

Le bouton texte « Retirer » d'une étiquette se lisait comme du texte, et
le poids d'un critère prenait toute une colonne pour un nombre de 1 à
100. La fiche retire désormais une étiquette par une croix rouge cerclée,
en mode écriture seulement, nommée « Retirer « étiquette » » pour les
lecteurs d'écran, sur une cible de 24 px ; le rouge a son jeton, exempté
de la règle des teintes de conflit et borné aux surfaces de la fiche. Le
poids est un champ nombre étroit, lu et refusé comme avant.
Vérifié : node 4597, navigateur 965 ; captures 04a et 10a republiées.

Assisted-by: Claude Opus 5.5
2026-10-11 23:34:28 -04:00
883dcb2519 [UPD] spec: tags, table goals, goal modes, priority tiers, format 2
The specification now describes what the software does for tags, table
goals and their rules, the goals CSV, the three goal modes, priority
tiers with weights, the facilitator criterion and file format 2, each
sentence checked against the code; captures 02, 02b and 03 are described
by what their images show. The changelog's head section lists the step
and names format 2; the guide says the default order is one order among
others. A test brings the criteria registry to full branch coverage.
Checked: node 4595, navigateur 963, node-long 124; captures stable over
two republications; six coverage thresholds met.

--- FR ---

[UPD] spec : étiquettes, objectifs, modes, paliers pondérés, format 2

La spécification décrit désormais ce que fait le logiciel pour les
étiquettes, les objectifs des tables et leurs règles, le CSV d'objectifs,
les trois modes, les paliers pondérés, le critère des animateurs et le
format 2, chaque phrase recoupée avec le code ; les captures 02, 02b et 03
sont décrites par ce que montrent leurs images. La section de tête du
journal des changements nomme l'étape et le format 2 ; le guide dit que
l'ordre par défaut n'est qu'un ordre parmi d'autres. Une épreuve porte le
registre des critères à 100 % de branches.
Vérifié : node 4595, navigateur 963, longues 124 ; captures stables sur
deux republications ; six seuils de couverture tenus.

Assisted-by: Claude Opus 5.5
2026-10-11 22:42:56 -04:00
0f8f4663b8 [IMP] engine perf: facilitator tracking on demand, one normalisation
The default search ran 4.4 % slower than before tags and goals, and a
cold evaluation of 200 proposals with goals up to 18.7 % slower. The
search now tracks facilitator meetings only when the compiled order
counts that criterion; an evaluation normalises its configuration once
for both the table and the diagnostic, through a cache keyed on the
frozen copy it builds; met pairs are read from the pairs that met.
Results are byte-identical. Measured against the previous revision,
alternating runs: search +1.3 %, evaluation with goals +4.3 to +9.1 %.
Checked: node 4594, navigateur 963, node-long 124, fingerprints intact.

--- FR ---

[IMP] perf du moteur : animateurs suivis à la demande, une normalisation

La recherche par défaut tournait 4,4 % plus lentement qu'avant étiquettes
et objectifs, et une évaluation à froid de 200 propositions à objectifs
jusqu'à 18,7 % plus lentement. La recherche ne suit les rencontres
d'animateurs que si l'ordre compilé compte ce critère ; une évaluation
normalise sa configuration une fois pour la table et le diagnostic, par un
cache sur la copie figée qu'elle bâtit ; les paires se lisent parmi celles
réunies. Résultats identiques à l'octet. Mesuré contre la révision
précédente, en alternance : recherche +1,3 %, évaluation +4,3 à +9,1 %.
Vérifié : node 4594, navigateur 963, longues 124, empreintes intactes.

Assisted-by: Claude Opus 5.5
2026-10-11 21:57:38 -04:00
d17e2931a7 [ADD] walkthrough: tags, table goals, goals CSV and a weighted tier
The photographed walkthrough now exercises the new inputs end to end:
it adds tags on a card (04a), sets an evening and a round goal on screen
(05a), imports the goals CSV with refused lines and merged spellings
(05b), ranks excess and rounds off goal together in one tier weighted
1 and 3 (10a), and generates under that order, capture 11 scrolled to
the goal columns. Read-only and locked runs try every new gesture; the
merged tag spellings read as a comma list. Captures republished.
Checked: node 4590, navigateur 963, node-long 124.

--- FR ---

[ADD] parcours : étiquettes, objectifs, CSV d'objectifs, palier pondéré

Le parcours photographié exerce désormais les nouvelles saisies de bout
en bout : étiquettes sur une fiche (04a), objectif de soirée et de tour à
l'écran (05a), import du CSV des objectifs avec lignes refusées et
orthographes fondues (05b), excédent et tours hors objectif réunis en un
palier pondéré 1 et 3 (10a), puis génération sous cet ordre, la capture
11 défilée jusqu'aux colonnes des objectifs. Lecture et plan bloqué
tentent chaque geste nouveau ; les orthographes fondues se lisent en
liste à virgules. Captures republiées.
Vérifié : node 4590, navigateur 963, longues 124.

Assisted-by: Claude Opus 5.5
2026-10-11 21:01:48 -04:00
59f847a3fe [IMP] screens a11y: table-named controls, focus back after a remedy
Controls repeated under every table (places, goals, rule, remove, the
remedies of their refusals) all read the same to a screen reader, and a
remedy that cleared its own refusal dropped focus on the page body. Each
such control now carries an accessible name with its table, through a
declared prop on Champ and Commande; every refusal is linked to its
control by id, and after a remedy focus returns to that control, nested
refusals and the priority editor included. Visible text is unchanged.
Checked: node 4590, navigateur 954, walkthrough green in verify mode.

--- FR ---

[IMP] écrans, accessibilité : noms par table, focus rendu après remède

Les commandes répétées sous chaque table (places, objectifs, règle,
retrait, remèdes de leurs refus) se lisaient pareil au lecteur d'écran,
et un remède qui retirait son propre refus laissait le focus sur le corps
de la page. Chacune porte désormais un nom accessible qui nomme sa table,
par une prop déclarée de Champ et Commande ; chaque refus est relié à sa
commande par id, et après un remède le focus y revient, refus imbriqués et
éditeur des priorités compris. Le texte visible ne change pas.
Vérifié : node 4590, navigateur 954, parcours vert en vérification.

Assisted-by: Claude Opus 5.5
2026-10-11 19:04:09 -04:00
91879ea4a5 [ADD] screens: tags on the card, table goals, priority editor, import
The operator now reaches tags, goals and priorities from the screens.
A person's card adds and removes tags, the participant list carries a
tag legend; each table takes an evening goal or one per round with its
rule; the generation settings hold a keyboard-operable priority editor
(move, join, split, restore, weights), the two optional criteria and the
goal mode; the proposals table and its ranking sentence follow the
order; the import screen reads a participants or a goals file. Removing
a tag or a goal returns focus to a neighbouring control.
Checked: node 4590, navigateur 942, node-long 124; captures republished.

--- FR ---

[ADD] écrans : étiquettes, objectifs des tables, priorités, import

L'opérateur atteint étiquettes, objectifs et priorités depuis les écrans.
La fiche ajoute et retire les étiquettes, la liste porte leur légende ;
chaque table reçoit un objectif de soirée ou par tour avec sa règle ; les
réglages de génération portent un éditeur des priorités utilisable au
clavier (monter, joindre, séparer, rétablir, poids), les deux critères
facultatifs et le mode des objectifs ; le tableau des propositions et sa
phrase suivent l'ordre ; l'import lit un fichier de personnes ou
d'objectifs. Retirer une étiquette ou un objectif rend le focus à côté.
Vérifié : node 4590, navigateur 942, longues 124 ; captures republiées.

Assisted-by: Claude Opus 5.5
2026-10-11 17:53:34 -04:00
7dc23946c2 [ADD] priorities: search and ranking follow tiers, goals CSV, commands
The operator's priority order now drives both the search and the
ranking: each tier compiles into one score component, weights sum inside
a shared tier, and the three goal modes compare their own values. With
no stored order, no goals and the facilitator case off, plans and
rankings equal the reference fingerprints under every mode; incremental
and complete scores agree on 1 500 random configurations; a move costs
1 to 2 % more. Table goals import and export through their own CSV, and
commands set or restore the order and choose the goal mode.
Checked: node 4501, navigateur 885, node-long 124.

--- FR ---

[ADD] priorités : recherche et classement par paliers, CSV, commandes

L'ordre des priorités de l'opérateur mène désormais la recherche et le
classement : chaque palier devient une composante du score, les poids
s'additionnent dans un palier partagé, et les trois modes des objectifs
comparent leurs propres valeurs. Sans ordre écrit, sans objectif et sans
case des animateurs, plans et classements égalent les empreintes sous
chaque mode ; score incrémental et complet concordent sur 1 500
configurations tirées ; un mouvement coûte 1 à 2 % de plus. Les objectifs
des tables s'importent et s'exportent par leur CSV ; des commandes posent
ou rétablissent l'ordre et choisissent le mode des objectifs.
Vérifié : node 4501, navigateur 885, node-long 124.

Assisted-by: Claude Opus 5.5
2026-10-11 16:19:38 -04:00
320b1b1687 [ADD] tags and goals: engine measures, CSV column, commands, bridge
Tags on people and goals on tables now reach every layer below the
screens. The engine measures rounds served, never-served people and
facilitators met, with a floor per goal mode at the diagnostic; the CSV
reads and writes an etiquettes column through the shared split and
spelling reconciliation; commands set tags, goals, their rule and the
two optional criteria, each refusal with cause and remedy; facilitators
and the stored priority order reach the engine through one bridge.
Without goals or the facilitator case, plans equal the reference prints.
Checked: node 4373, navigateur 885, node-long 113.

--- FR ---

[ADD] étiquettes et objectifs : mesures, colonne CSV, commandes, pont

Les étiquettes des personnes et les objectifs des tables atteignent toutes
les couches sous les écrans. Le moteur mesure les tours servis, les
personnes jamais servies et les animateurs rencontrés, avec un plancher
par mode au diagnostic ; le CSV lit et écrit une colonne d'étiquettes par
la découpe et la réconciliation communes ; des commandes posent étiquettes,
objectifs, règle et les deux critères facultatifs, chaque refus avec cause
et remède ; animateurs et ordre écrit passent au moteur par un seul pont.
Sans objectif ni case des animateurs, les plans égalent les empreintes.
Vérifié : node 4373, navigateur 885, node-long 113.

Assisted-by: Claude Opus 5.5
2026-10-11 15:03:13 -04:00
2d782f919f [ADD] storage: file format 2, tags, goals, converted journal
Tags on people and goals on tables are operator input that an older
build must not silently drop. Files written now carry format 2 with
every new field optional and last; a format-1 file opens with no write,
and its journal is rewritten as format 2 at the first gesture with every
revision rebuilt byte for byte, so undo crosses the conversion. An older
build opens a format-2 pair read-only. Tags follow one shared form and
split rule, which a guard forbids reimplementing.
Checked: node 4215, navigateur 884, node-long 113; a real format-1 event
written by the previous build stays a fixture; depot and journal 100%.

--- FR ---

[ADD] stockage : format 2, étiquettes, objectifs, journal converti

Les étiquettes des personnes et les objectifs des tables sont de la saisie
qu'une version antérieure ne doit pas perdre sans bruit. Les fichiers
écrits portent le format 2, chaque champ nouveau facultatif et en dernier ;
un fichier du format 1 s'ouvre sans écriture, et son journal passe au
format 2 au premier geste, chaque révision reconstruite à l'octet près :
Défaire traverse la conversion. Une version antérieure ouvre un couple du
format 2 en lecture seule. Une forme et une découpe uniques des étiquettes,
qu'une garde interdit de refaire ailleurs.
Vérifié : node 4215, navigateur 884, longues 113 ; un vrai événement du
format 1, écrit par la version précédente, reste en fixture ; 100 %.

Assisted-by: Claude Opus 5.5
2026-10-11 13:55:19 -04:00
c445df3dc8 [ADD] engine tests: reference fingerprints of today's plans and ranking
The coming configurable order must leave every default plan and ranking
unchanged at equal seed. Fingerprints of the plans of the four shipped
demos, of the acceptance switch, and of a twelve-proposal ranking where
each criterion is the first to split some neighbouring pair are written
once on the previous revision and verified by every run; rewriting them
needs GTT_EMPREINTES=ecrire, any other value is refused by name.
Checked: 20 node tests, 3 long; named mutations of the order caught.

--- FR ---

[ADD] épreuves du moteur : empreintes des plans et du classement actuels

L'ordre réglable à venir doit laisser chaque plan et chaque classement par
défaut inchangés à graine égale. Les empreintes des plans des quatre
démonstrations, de la bascule d'acceptation et d'un classement de douze
propositions où chaque critère départage une paire voisine sont écrites
une fois sur la révision précédente et vérifiées à chaque exécution ;
les récrire exige GTT_EMPREINTES=ecrire, toute autre valeur est refusée.
Vérifié : 20 épreuves node, 3 longues ; mutations nommées de l'ordre prises.

Assisted-by: Claude Opus 5.5
2026-10-11 13:45:29 -04:00
a5cf1b2630 [ADD] engine: criteria registry, priority tiers, goal matching
The search and the ranking each hard-code their own order. The registry
names every criterion once, with its direction and family, and compiles
an operator order of tiers with integer weights (1 to 100) into the two
orders the engine reads; with no stored order it returns exactly today's
search tuple, acceptance switch and ranking. A stored order that breaks
a rule (shared lone criterion, weight, order inside a tier) is refused
by name. Goal matching reads OU/ET rules over normalised tags.
Checked: 60 tests, 100% branches on both modules (guard updated).

--- FR ---

[ADD] moteur : registre des critères, paliers, correspondance

La recherche et le classement figent chacun leur ordre. Le registre nomme
chaque critère une fois, avec son sens et sa famille, et compile un ordre
de paliers à poids entiers (1 à 100) en les deux ordres que lit le
moteur ; sans ordre écrit, il rend exactement le n-uplet, la bascule et
le classement d'aujourd'hui. Un ordre qui enfreint une règle (critère
seul partagé, poids, ordre dans un palier) est refusé par son nom. La
correspondance lit les règles OU/ET sur des étiquettes normalisées.
Vérifié : 60 épreuves, 100 % de branches aux deux modules (garde suivie).

Assisted-by: Claude Opus 5.5
2026-10-11 13:45:29 -04:00
52ff9649ab [ADD] csv: reconcile tag spellings across an imported file
An imported list writes the same tag several ways (Finance, finance,
FINANCE). The reconciliation keeps one spelling per tag key, the one
from the first row that uses it, rewrites the others, and lists every
merge with its row count, so no rewrite is silent. Order is by code
point, never by locale, so two machines agree. New file only: the CSV
writer and its formula rule are untouched.
Checked: 28 tests, each tie-break caught by a named mutation.

--- FR ---

[ADD] csv : réconcilier les orthographes d'une étiquette dans un fichier

Une liste importée écrit la même étiquette de plusieurs façons (Finance,
finance, FINANCE). La réconciliation garde une orthographe par clé, celle
de la première ligne qui l'emploie, réécrit les autres et liste chaque
fusion avec son nombre de lignes : aucune réécriture n'est muette. L'ordre
suit les points de code, jamais la locale. Fichier neuf seulement :
l'écriture du CSV et sa règle des formules restent intactes.
Vérifié : 28 épreuves, chaque départage pris par une mutation nommée.

Assisted-by: Claude Opus 5.5
2026-10-11 13:45:29 -04:00
91c844725b [REF] event screen: no frame names, list summaries trimmed to use
The event list shows only the retained plan's redundancy gap and the id
of the best proposal, yet its summaries still carried cumulative
collisions and redundancy totals. They now carry what the list reads.
The mode frame is gone from the screen, so its names go too: the mode
surface component, the mode colour tokens and the bar's mode label are
named for what they are. Values, pixels and captures are unchanged.
Checked: node 4039, navigateur 884 with the walkthrough, node-long 105.

--- FR ---

[REF] écran d'événement : sans noms de cadre, résumés de liste réduits

La liste des événements ne montre que l'écart de redondance du retenu et
l'identifiant de la meilleure proposition, mais ses résumés portaient
encore les collisions cumulées et les totaux de redondance. Ils portent
désormais ce que la liste lit. Le cadre de mode a quitté l'écran, ses noms
aussi : le composant de surface, les jetons de couleur du mode et le
libellé de mode de la barre portent le nom de ce qu'ils sont. Valeurs,
pixels et captures inchangés.
Vérifié : node 4039, navigateur 884 avec le parcours, node-long 105.

Assisted-by: Claude Opus 5.5
2026-10-11 06:56:24 -04:00
824f9214f6 [ADD] proposals: pages of 100 in the single ranking order
Past a few hundred proposals the table rebuilt every row on each visit:
at 500, 15 000 nodes and about 290 ms on a second visit. The table now
shows the global ranking 100 at a time, each row keeping its rank, with
the retained row on top of every page. The page is navigation state,
never written: it resets on each event opening and after a generation,
is clamped when proposals go, and follows a proposal shown on the plan.
At 500: second visit 288 -> 55 ms, first 686 -> 449 ms, 3 100 nodes.
Checked: node 4039, navigateur 884, node-long 105, all green.

--- FR ---

[ADD] propositions : pages de 100 dans l'ordre du classement unique

Au-delà de quelques centaines de propositions, le tableau refaisait toutes
ses lignes à chaque visite : à 500, 15 000 nœuds et environ 290 ms au
retour. Il montre désormais le classement global 100 par 100, chaque
ligne gardant son rang, le retenu en tête de chaque page. La page est un
état de navigation, jamais écrit : elle repart à chaque ouverture et après
une génération, se borne quand des propositions partent, et suit la
proposition montrée au plan. À 500 : retour 288 -> 55 ms, 1re 686 -> 449.
Vérifié : node 4039, navigateur 884, node-long 105, toutes vertes.

Assisted-by: Claude Opus 5.5
2026-10-11 04:49:54 -04:00
156851e043 [IMP] proposal evaluation: cached per frozen charge, validated once
The Génération and Propositions tabs re-evaluated every proposal on each
visit, about 1 ms per proposal, with no bound on how many accumulate.
The evaluation table is now kept per frozen event charge, which every
write replaces, and both tabs share it. Each placement is validated once
instead of three times; the public derive and planDepuisFichier still
validate, and a guard keeps the unchecked variants to evaluer alone.
At 200 proposals: Génération 214 to 17 ms on revisit, Propositions 310
to 118 ms. Checked: results deep-equal; node 4019, browser 873.

--- FR ---

[IMP] évaluation des propositions : gardée par charge, validée une fois

Les onglets Génération et Propositions réévaluaient toutes les
propositions à chaque visite, environ 1 ms chacune, sans borne sur leur
nombre. La table d'évaluation se garde par charge figée, qu'une écriture
remplace, et les deux onglets la partagent. Chaque placement se valide
une fois au lieu de trois ; derive et planDepuisFichier publics valident
toujours, une garde réserve les variantes sans contrôle à evaluer.
À 200 propositions : Génération 214 → 17 ms au retour, Propositions
310 → 118 ms. Vérifié : résultats identiques ; node 4019, nav. 873.

Assisted-by: Claude Opus 5.5
2026-10-11 03:43:47 -04:00
10f2c8039f [UPD] captures: event screen without frame, at full width
The walkthrough images and the README show the event screen without
its mode frame, at full width. Print captures are unchanged.
Checked: walkthrough 34/34 in verification mode.

--- FR ---

[UPD] captures : écran d'événement sans cadre, en pleine largeur

Les images du parcours et le README montrent l'écran de l'événement
sans cadre de mode, en pleine largeur. Les captures imprimées ne
changent pas. Vérifié : parcours 34/34 en vérification.

Assisted-by: Claude Opus 5.5
2026-10-11 02:44:53 -04:00
8b0d5a9097 [IMP] interface: full-width event screen, no mode frame, fewer columns
The 6 px mode frame around the event screen read as a dashed box that
narrowed the work surface, and the screen stopped at the 87rem page
width. The event screen now spans the window; the mode band under the
app header, the header label and the pill beside « Modifier » carry the
mode. The event list drops both « Collisions cumulées » columns, which
repeated a measure the proposals screen already shows: 7 columns, not 9.
Checked: node 4009, browser 872, long 105; full width at 1366 and 1920.

--- FR ---

[IMP] interface : événement pleine fenêtre, sans cadre, liste allégée

Le cadre de mode de 6 px autour de l'écran d'événement se lisait comme
un encadré pointillé qui rétrécissait la surface, et l'écran s'arrêtait
à 87rem. L'écran de l'événement occupe la fenêtre ; la bande sous le
bandeau, le libellé du bandeau et la pastille près de « Modifier »
portent le mode. La liste des événements perd ses deux colonnes
« Collisions cumulées », déjà montrées par les propositions : 7
colonnes au lieu de 9. Vérifié : node 4009, navigateur 872, long 105 ;
pleine largeur à 1366 et 1920.

Assisted-by: Claude Opus 5.5
2026-10-11 02:44:53 -04:00
40bdfc7d77 [UPD] captures: redesigned screens, walkthrough checks a warning action
The walkthrough images and their manifest show the redesigned screens,
and the README regenerates from them. Before step 04 is captured, the
walkthrough now checks that the warning zone does not scroll and that
« Ouvrir les tables » sits inside it: a capture only refreshes when the
step's text changes, so a layout regression could hide behind an old
image. Print captures are unchanged.
Checked: node 4012, browser 872, long 105, walkthrough 34/34.

--- FR ---

[UPD] captures : écrans refondus, le parcours vérifie l'action d'un avis

Les images du parcours et leur manifeste montrent les écrans refondus,
et le README s'en régénère. Avant la capture de l'étape 04, le parcours
vérifie que la zone des avis ne défile pas et que « Ouvrir les tables »
y tient : une capture ne se renouvelle que si le texte de l'étape
change, une régression de mise en page pourrait se cacher derrière une
image ancienne. Les captures imprimées ne changent pas.
Vérifié : node 4012, navigateur 872, long 105, parcours 34/34.

Assisted-by: Claude Opus 5.5
2026-10-11 02:14:20 -04:00
16a7abbedc [FIX] event header: a lone warning shows its action without scrolling
A four-line warning with its action needed 132 px in the header's side
zone, capped at 7.25rem, so « Ouvrir les tables » hid below the fold. A
zone holding a single warning now grows to 10rem, five lines plus the
action; several warnings keep the lower cap, so the plan loses no more.
Checked: 1, 4 and 13 missing places at 1366 and 1024 px, the action
inside the visible zone; node 4012, browser 872.

--- FR ---

[FIX] en-tête : un avis seul montre son action sans défilement

Un avis de quatre lignes et son action demandaient 132 px dans la zone
latérale de l'en-tête, bornée à 7,25rem : « Ouvrir les tables » restait
caché. Une zone qui ne porte qu'un avis monte à 10rem, cinq lignes et
l'action ; plusieurs avis gardent la borne basse, le plan ne perd rien
de plus. Vérifié : 1, 4 et 13 places manquantes à 1366 et 1024 px,
l'action dans la zone visible ; node 4012, navigateur 872.

Assisted-by: Claude Opus 5.5
2026-10-11 01:53:47 -04:00
6f7cd3511b [FIX] event header, proposals: unclipped warning, wider proposal column
The header warning sat in a zone that could not grow past the header
content, so a five-line warning lost its last line at 1366 x 700. The
zone now takes part in the layout: the header grows with it up to
7.25rem, then the zone scrolls; under a 70rem header it drops below at
full width. The proposal cell gets a 14rem minimum, so the kept row no
longer wraps word by word. Checked: node 4012, browser 868.

--- FR ---

[FIX] en-tête, propositions : avis jamais rogné, colonne plus large

L'avis de l'en-tête vivait dans une zone qui ne dépassait pas le contenu
de l'en-tête : un avis de cinq lignes perdait sa dernière à 1366 x 700.
La zone prend part à la mise en page : l'en-tête grandit avec elle
jusqu'à 7,25rem, puis elle défile ; sous un en-tête de 70rem, elle passe
dessous en pleine largeur. La cellule de proposition prend 14rem au
moins, la ligne retenue ne se replie plus mot à mot.
Vérifié : node 4012, navigateur 868.

Assisted-by: Claude Opus 5.5
2026-10-11 01:45:15 -04:00
27f652c732 [UPD] spec: redesign of the screens, tints, pills, mode band, phases
The spec describes what each screen shows, so the redesign changes its
text: the token families, membership tints limited to lists, pill
anatomy, the bounded exception to render-only contrast checks, the
event list header and state tiles, the mode band, phase navigation,
state steps, grouped proposal headers and import message classes.
Checked: the full suites pass except the walkthrough capture gaps.

--- FR ---

[UPD] spec : refonte des écrans, teintes, pastilles, bande, phases

Le spec décrit ce que montre chaque écran, la refonte change donc son
texte : les familles de jetons, les teintes d'appartenance réservées aux
listes, l'anatomie d'une pastille, l'exception bornée à l'épreuve par
rendu, l'en-tête et les tuiles de la liste, la bande de mode, la
navigation par phase, les étapes d'état, les en-têtes groupés des
propositions et les classes de messages de l'import.
Vérifié : séries complètes vertes hors écarts de captures du parcours.

Assisted-by: Claude Opus 5.5
2026-10-11 00:58:07 -04:00
c6082c3af2 [IMP] proposals, generation, badges, preview: cards and grouped headers
The proposal table had a dozen measure columns with no grouping. Five
group headers now gather neighbouring measures without changing any
column text; numbers align right in tabular figures, and the kept
placement row wears the Retenu tint and a « retenue » pill. Generation
settings and progress, badges and the paper choice become cards, each
paper a distinct choice; the preview toolbar groups its commands. The
printed paper is unchanged. Checked: node 172, browser 162.

--- FR ---

[IMP] propositions, génération, badges, aperçu : cartes, intitulés

Le tableau des propositions alignait une douzaine de mesures sans
groupe. Cinq intitulés de groupe réunissent les mesures voisines sans
changer le texte d'aucune colonne ; les nombres s'alignent à droite en
chiffres tabulaires, la ligne du retenu porte la teinte Retenu et une
pastille « retenue ». Réglages et avancement, badges et papier
deviennent des cartes, chaque papier un choix distinct ; la barre de
l'aperçu groupe ses commandes. Le papier imprimé ne change pas.
Vérifié : node 172, navigateur 162.

Assisted-by: Claude Opus 5.5
2026-10-11 00:58:07 -04:00
901095a1ef [IMP] plan and diagnostic: grouped toolbar, card panels, bounded tooltip
The plan's chrome mixed view controls with panels of the same weight.
The toolbar groups round, zoom and views; side panels, the reserve and
the work lists become cards. A seat tooltip, like a refusal on a seat,
stays inside the plan frame and flips side rather than cover the next
panel. The diagnostic groups its statements into one card per colliding
membership, in the same order. The drawing keeps its colours and shapes.
Checked: node 231, browser 137, 6 mutations caught.

--- FR ---

[IMP] plan et diagnostic : barre groupée, panneaux en cartes, infobulle

L'habillage du plan mêlait commandes de vue et panneaux de même poids.
La barre groupe tour, zoom et vues ; panneaux, réserve et listes de
travail deviennent des cartes. L'infobulle d'un siège, comme un refus
sur une place, reste dans le cadre du plan et change de côté plutôt que
de couvrir le panneau voisin. Le diagnostic groupe ses énoncés en une
carte par appartenance en collision, sans changer l'ordre. Le dessin
garde couleurs et formes. Vérifié : node 231, navigateur 137.

Assisted-by: Claude Opus 5.5
2026-10-11 00:58:07 -04:00
c4130d3b5e [IMP] participants, tables, import: counts, membership pills, messages
Long participant lists were hard to scan by organisation. The list now
opens on counts and a legend of memberships, each with its headcount;
the grid shows a membership as a pill of its tint, the expected title
and the exclusion as icon pills, and row commands wrap without breaking
their labels at 1024 px. The import preview and report class each
message as refus, avis or information. Editing and shortcuts are as
before. Checked: node 144, browser 117, 9 mutations caught.

--- FR ---

[IMP] participants, tables, import : comptes, pastilles, messages

Une longue liste se parcourait mal par organisation. Elle s'ouvre sur
des comptes et une légende des appartenances avec leur effectif ; la
grille montre l'appartenance en pastille de sa teinte, le titre
pressenti et l'exclusion en pastilles à icône, et les commandes de ligne
passent à la ligne sans casser leur libellé à 1024 px. L'aperçu et le
rapport d'import classent chaque message en refus, avis ou information.
L'édition et les raccourcis ne changent pas. Vérifié : node 144,
navigateur 117, 9 mutations prises.

Assisted-by: Claude Opus 5.5
2026-10-11 00:58:07 -04:00
8b69b63a32 [IMP] event screen: header card, state steps, mode band, phase tabs
The event screen showed its states and sections as flat button rows. A
header card now carries the name, the counts and the fixed « Modifier »
place; the four plan states read as steps; sections group into
Préparer, Placer and Produire. A band under the app header states the
mode edge to edge and names the command that leaves it; the mode frame
stays around the work surface. A warning's action is no longer clipped.
Checked: evenement node and browser tests, 7 mutations caught.

--- FR ---

[IMP] écran d'événement : carte d'en-tête, étapes, bande de mode, phases

L'écran montrait ses états et ses sections en rangées de boutons plates.
Une carte d'en-tête porte le nom, les comptes et la place fixe de
« Modifier » ; les quatre états du plan se lisent en étapes ; les
sections se groupent en Préparer, Placer et Produire. Une bande sous le
bandeau dit le mode de bord à bord et nomme la commande qui en sort ; le
cadre de mode reste autour de la surface. L'action d'un avertissement
n'est plus rognée. Vérifié : node et navigateur, 7 mutations prises.

Assisted-by: Claude Opus 5.5
2026-10-11 00:58:07 -04:00
229a2d4067 [IMP] event list: summary, state filter tiles, table grouped by state
The list gave every event the same weight, so a manager could not see at
a glance what was still in draft or already printed. A header now sums
events and participants; one tile per plan state, in the § 9 order,
filters the table and holds only for the session; rows group by state or
not at all, under grouped column headers. Each « Ouvrir » is named after
its event, and messages take the avis, refus or information tone. The
cards sit under the table: a sidebar does not fit beside nine columns.
Checked: accueil node and browser tests, 8 mutations caught.

--- FR ---

[IMP] liste des événements : résumé, tuiles par état, groupes par état

La liste donnait à chaque événement le même poids : on ne voyait pas
d'un coup d'œil ce qui restait en brouillon ou déjà imprimé. Un en-tête
compte événements et participants ; une tuile par état du plan, dans
l'ordre du § 9, filtre le tableau le temps de la séance ; les lignes se
groupent par état ou pas, sous des en-têtes groupés. Chaque « Ouvrir »
porte le nom de son événement, les messages prennent le ton avis, refus
ou information. Les cartes passent sous le tableau, faute de place.
Vérifié : épreuves node et navigateur de l'accueil, 8 mutations prises.

Assisted-by: Claude Opus 5.5
2026-10-11 00:58:07 -04:00
16e328ab12 [FIX] card primitive: no blank between the icon and the title text
A titled card rendered a whitespace text node before its title, so the
heading's text began with a space and a lookup of the title text inside
the heading missed it. The layout is flex, so nothing visible changes.
Checked: the cross-screen test that finds a step's title passes.

--- FR ---

[FIX] primitive carte : aucun blanc entre l'icône et le texte du titre

Une carte titrée rendait un nœud de blanc devant son titre : le texte de
l'intitulé commençait par une espace et la recherche du titre dans
l'intitulé échouait. La mise en page est en flex, rien de visible ne
change. Vérifié : l'épreuve transversale qui trouve le titre d'une étape
passe.

Assisted-by: Claude Opus 5.5
2026-10-11 00:58:07 -04:00
4d34039f47 [ADD] interface: visual foundations, pills, cards, icons, navy header
Screens need colour that separates information without ever carrying it
alone. Tokens gain state, membership and status tints whose marks hold
3:1 and texts 4.5:1 in both themes and under three dichromacies, and
every hue stays 30 degrees from the reserved conflict hues. Commands get
three levels; Pastille, Carte and an icon module join the primitives;
memberships map to six stable tints over sorted names. A pill label
wraps and never truncates, and keeps one line beside a nowrap neighbour.
Checked: node 3949; browser 767, only the walkthrough captures differ.

--- FR ---

[ADD] interface : fondations, pastilles, cartes, icônes, bandeau marine

Les écrans ont besoin d'une couleur qui distingue l'information sans
jamais la porter seule. Les jetons gagnent des teintes d'état,
d'appartenance et de statut dont les marques tiennent 3:1 et les textes
4,5:1 dans les deux thèmes et sous trois dichromaties, chaque teinte à
30 degrés des teintes de conflit réservées. Les commandes ont trois
niveaux ; Pastille, Carte et un module d'icônes rejoignent les
primitives ; les appartenances reçoivent six teintes stables sur les
noms triés. Un libellé de pastille se replie, jamais tronqué.
Vérifié : node 3949 ; navigateur 767, seules les captures du parcours.

Assisted-by: Claude Opus 5.5
2026-10-10 22:59:59 -04:00
73d08294f5 [FIX] local settings: an unreadable or unwritable file no longer blocks
An unreadable reglages_locaux.json, or a folder that refused to write it,
refused the paper choice, so no badge sheet or preview could be produced
on that machine. The chosen paper now holds for the session on that
working folder, in memory, and the file is never overwritten. On that
folder it wins over a stale paper still in the file; the first settings
write that succeeds there retains it and withdraws the warning. The
warning names the file and no longer promises defaults never written.
Checked: node 3918, browser 773; each fix red under the previous code.

--- FR ---

[FIX] réglages locaux : un fichier illisible ou non écrit ne bloque plus

Un reglages_locaux.json illisible, ou un dossier qui refusait de l'écrire,
refusait le choix du papier : ni planche ni aperçu sur cette machine. Le
papier choisi vaut désormais pour la séance sur ce dossier de travail, en
mémoire, et le fichier n'est jamais écrasé. Sur ce dossier, il l'emporte
sur un papier périmé du fichier ; la première écriture des réglages qui y
réussit le retient et retire l'avertissement. L'avertissement nomme le
fichier et ne promet plus de valeurs par défaut jamais écrites.
Vérifié : node 3918, navigateur 773 ; chaque correction rouge avant elle.

Assisted-by: Claude Opus 5.5
2026-10-10 20:20:04 -04:00
a50d3278f1 [IMP] tooling: late off-loopback requests, version gap shown in tests
A request leaving the loopback after the last browser capture went
unnoticed: the walkthrough now checks requests at its closing too, and a
test that both emits one and gets a collector error names the request.
The short cycle prints the gap between the manifest version and the build
in the node series, without failing, as the spec asks; a test proves the
line reaches the console. The documentation script detects a direct run
through realpath, and the bench reading reruns the README region test.
Checked: node 3903, browser 770, each fix red under its mutant.

--- FR ---

[IMP] outillage : requêtes hors boucle tardives, écart de version montré

Une requête sortie de la boucle locale après la dernière capture passait
inaperçue : le parcours relève les requêtes à sa clôture aussi, et une
épreuve qui en émet une avec une erreur du collecteur nomme la requête.
Le cycle court affiche dans la série node l'écart entre la version du
manifeste et la construction, sans échouer, comme le veut la spec ; une
épreuve prouve que la ligne atteint la console. Le script de documentation
reconnaît l'appel direct par realpath, et le relevé du banc relance
l'épreuve de la région du README.
Vérifié : node 3903, navigateur 770, chaque correction rouge sous son mutant.

Assisted-by: Claude Opus 5.5
2026-10-10 20:17:25 -04:00
9a2c8c20f3 [FIX] plan preview: drag ghost effect, page fallback, sheet border
The drag ghost now states what releasing does where the default said
otherwise: a person with no reservation changes nothing, and the floor
under the retained plan removes the person from the tour. A long event
name no longer throws in the plan preview: the cut falls back to the
orientation that still has room, and throws only when neither has. The
on-screen sheet draws its edge as an inset outline, so the content zone
is as wide as on paper. The unused page cut of the preview model is gone.
Checked: node 3899, browser 769; captures 22 and 23 republished.

--- FR ---

[FIX] aperçu du plan : effet du fantôme, repli de page, bord de feuille

Le fantôme du glisser dit ce que fait le relâcher là où le défaut disait
autre chose : une personne sans réservation ne change rien, et le sol
sous le retenu la retire du tour. Un long nom d'événement ne fait plus
lever l'aperçu du plan : la découpe se replie sur l'orientation qui a la
place, et ne lève que si aucune ne l'a. La feuille à l'écran trace son
bord en contour intérieur : la zone de contenu a la largeur du papier.
La découpe inutilisée du modèle de l'aperçu disparaît.
Vérifié : node 3899, navigateur 769 ; captures 22 et 23 republiées.

Assisted-by: Claude Opus 5.5
2026-10-10 20:14:18 -04:00
7c9b708cc9 [FIX] badges: injective sheet file names, a reissue never overwrites
Two propositions with the same timestamp, or the by-table order, gave the
same file name, so one badge sheet silently replaced another. The name now
carries -p<id> for a proposition and _table for the by-table order; the
unmarked retained alphabetical name is unchanged. A reissue, or a name cut
to fit under a long folder, takes the first free rank and never replaces a
file; a folder that cannot be listed refuses first. A faulty proposition is
refused with its own message. The control sheet names its source.
Checked: node 3896, browser 767, long 105; captures 24 and 25 republished.

--- FR ---

[FIX] badges : noms de planche injectifs, une réédition n'écrase rien

Deux propositions au même horodatage, ou l'ordre par table, donnaient le
même nom : une planche en remplaçait une autre sans un mot. Le nom porte
-p<id> pour une proposition et _table pour l'ordre par table ; le nom du
retenu alphabétique ne change pas. Une réédition, ou un nom raccourci sous
un dossier long, prend le premier rang libre et n'écrase rien ; un dossier
qui ne se liste pas refuse d'abord. Une proposition fautive a son refus.
La feuille de contrôle nomme sa source.
Vérifié : node 3896, navigateur 767, long 105 ; captures 24 et 25 republiées.

Assisted-by: Claude Opus 5.5
2026-10-10 20:09:25 -04:00
3db0bb138c [UPD] spec: paper written at the gesture, word cut, registry fields
Three passages contradicted the code. Section 8.5 said every local
setting is written late; only the framing is, and the paper is written
at the gesture that chooses it, both through one queue that rereads the
file. Section 7.4 said a row always breaks at a word; a word longer than
a page breaks between two characters, never inside a grapheme. Section
14.1 placed each constant's rationale in a comment; it lives in the
registry entry's fields.
Checked: version check conforms; every sentence read against the code.

--- FR ---

[UPD] spec : papier écrit au geste, coupe des mots, champs du registre

Trois passages contredisaient le code. Le § 8.5 disait chaque réglage
local écrit en différé ; seul le cadrage l'est, et le papier s'écrit au
geste qui le choisit, les deux par une même file qui relit le fichier.
Le § 7.4 disait une ligne toujours coupée à un mot ; un mot plus long
qu'une page se coupe entre deux caractères, jamais dans un graphème. Le
§ 14.1 mettait la raison de chaque constante en commentaire ; elle vit
dans les champs de son entrée du registre.
Vérifié : contrôle de version conforme ; chaque phrase relue sur le code.

Assisted-by: Claude Opus 5.5
2026-10-10 18:54:27 -04:00
f2cbad29df [ADD] captures: headless mode, preview bar and machine identity checked
Three capture rules held only by convention. The browser project must
run headless, MODE_AFFICHAGE names that mode, and a screenshot refuses
a page whose user agent is not headless. Captures 22 and 23 assert the
preview bar has scrolled out of the frame before they are taken.
Publishing refuses a text carrying the machine's host or user name, or
an instant outside the driven clock; the checks are shown red on
invented names, and the default identity is read from node:os.
Checked: 3883 node and 767 browser tests from the index alone.

--- FR ---

[ADD] captures : mode sans tête, barre de l'aperçu, identité de machine

Trois règles des captures ne tenaient que par convention. Le projet
navigateur tourne sans tête, MODE_AFFICHAGE nomme ce mode, et une
capture refuse une page dont l'agent n'est pas sans tête. Les captures
22 et 23 vérifient que la barre de l'aperçu est sortie du cadre. La
publication refuse un texte qui porte le nom d'hôte ou d'utilisateur de
la machine, ou un instant hors de l'horloge pilotée ; montré rouge sur
des noms inventés, l'identité par défaut lue de node:os.
Vérifié : 3883 node et 767 navigateur depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-10 18:54:15 -04:00
55765e93c2 [ADD] documentation: verifier checks every cited image against the disk
verifier read no image: an older PNG published under an unchanged
manifest, or an image outside doc/captures cited by the guide, left
every series green. It now refuses any image a carrier cites outside
doc/captures/<name>.png, in every Markdown or HTML form, and checks each
cited capture's hash and size against its manifest entry. When every
carrier is read, a manifest entry no carrier cites is a fault too; a
check narrowed by --porteur does not judge the carriers it skips.
Checked: 3877 node tests from the index alone; verifier at 0 fault.

--- FR ---

[ADD] documentation : verifier confronte chaque image citée au disque

verifier ne lisait aucune image : un PNG plus ancien publié sous un
manifeste inchangé, ou une image hors de doc/captures citée par le
guide, laissaient toutes les séries vertes. Il refuse désormais toute
image citée hors de doc/captures/<nom>.png, sous chaque forme Markdown
ou HTML, et confronte l'empreinte et la taille de chaque capture citée à
son entrée du manifeste. Quand tous les porteurs sont lus, une entrée
que nul ne cite est une faute ; restreint par --porteur, il ne juge pas
les porteurs qu'il ne lit pas.
Vérifié : 3877 node depuis l'index seul ; verifier à 0 faute.

Assisted-by: Claude Opus 5.5
2026-10-10 18:52:00 -04:00
aaa2c1a3a7 [IMP] mutation: count long-series kills apart, test the audit end to end
A mutant the node series missed but the long series killed was still
counted as a survivor, so the committed audit overstated what escapes
the tests. It now has its own column: 15 of the 137 survivors move
there, leaving 122; the committed files are regenerated from their own
results, without a rerun. The audit itself now runs in the long series
on a small fixture tree: long-series replay, exit code 0 with
survivors, exit 2 and nothing written when the baseline fails. The
committed audit files are read back and must match what rediger writes.
Checked: 3868 node and 105 long tests from the index alone.

--- FR ---

[IMP] mutation : tués par la série longue à part, audit éprouvé entier

Un mutant que la série node manquait et que la série longue tuait
comptait encore comme survivant : l'audit commis surestimait ce qui
échappe aux épreuves. Il a sa colonne : 15 des 137 survivants y passent,
il en reste 122 ; les fichiers commis sont réengendrés de leurs propres
résultats, sans rejeu. L'audit tourne entier dans la série longue sur un
petit arbre : rejeu long, sortie 0 avec survivants, sortie 2 et rien
d'écrit quand la ligne de base tombe. Les fichiers commis sont relus et
doivent égaler ce que rediger écrit.
Vérifié : 3868 node et 105 longues depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-10 18:51:43 -04:00
171de56c4e [ADD] guards: single print door, one core count reader, coverage flag
Three rules of the spec had no guard. Printing could bypass the preview:
now only the preview reads the 'imprimante' context, and no module of
the interface or application layers calls print or imprimer. Only the
entry module reads hardwareConcurrency. The coverage command must pass
--reporter=default, so the capped reporter never measures the
instrumented series. Each guard names the offending line, skips strings
and comments, and is shown red on a demonstration tree.
Checked: 3860 node tests from the index alone.

--- FR ---

[ADD] gardes : porte d'impression unique, cœurs lus une fois, rapporteur

Trois règles du spec n'avaient pas de garde. L'impression pouvait
contourner l'aperçu : seul l'aperçu lit désormais le contexte
« imprimante », et aucun module de l'interface ni de l'application
n'appelle print ou imprimer. Seul le module d'entrée lit
hardwareConcurrency. La commande de couverture passe --reporter=default,
pour que le rapporteur plafonné ne mesure jamais la série instrumentée.
Chaque garde nomme la ligne fautive, ignore chaînes et commentaires, et
rougit sur un arbre de démonstration.
Vérifié : 3860 node depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-10 18:51:03 -04:00
0af6aca64f [ADD] badges: tests that fonts are subset and cut lines are thin
Nothing checked that the sheet embeds font subsets rather than whole
fonts, nor how thick its cut lines are: subset: false or 5 pt lines left
the series green. The PDF reader used by the tests now reports each
embedded font program's length and each stroke's width in millimetres
under the current matrix. The sheet's programs must weigh under a tenth
of their .ttf, and every cut line at most 0.1 mm, in A4 and Letter.
Checked: 3856 node tests from the index alone; both mutants caught.

--- FR ---

[ADD] badges : épreuves des sous-ensembles de police et des filets fins

Rien ne vérifiait que la planche embarque des sous-ensembles de police
plutôt que les polices entières, ni l'épaisseur de ses filets : subset
false ou des filets de 5 pt laissaient la série verte. Le lecteur de PDF
des épreuves rend la longueur de chaque programme de police embarqué et
l'épaisseur de chaque trait en millimètres sous la matrice courante. Les
programmes pèsent moins du dixième de leur .ttf, et chaque filet au plus
0,1 mm, en A4 et en Lettre.
Vérifié : 3856 node depuis l'index seul ; les deux mutants tombent.

Assisted-by: Claude Opus 5.5
2026-10-10 18:50:40 -04:00
6dd2762d8e [UPD] spec: iteration 4 amendments, changelog for the badge sheet
The spec described several print and bench behaviours as planned rather
than as built: page cuts, table sheets split into tour groups, rows
continued across pages, the bench reading limited to the machine class,
the adopted thresholds, and capture inputs rasterised from the PDF.
Each amendment now states what the committed code does. The capture
manifest photographs both 07a captures on the large demo, as the walk
does. The changelog lists the badge sheet, print preview and guide.
Checked: 3852 node and 766 browser tests; version check conforms.

--- FR ---

[UPD] spec : amendements de l'itération 4, journal de la planche

Le spec décrivait plusieurs comportements de l'impression et du banc
comme prévus plutôt que comme bâtis : coupe en pages, feuilles par table
en groupes de tours, lignes continuées, relevé réduit à la classe de
machine, seuils adoptés, entrées des captures tirées du PDF. Chaque
amendement dit désormais ce que fait le code commis. Le manifeste
photographie les deux 07a sur la grande démonstration, comme le
parcours. Le journal annonce la planche, l'aperçu et le guide.
Vérifié : 3852 node et 766 navigateur ; contrôle de version conforme.

Assisted-by: Claude Opus 5.5
2026-10-10 17:27:41 -04:00
13bf16b5be [REF] interface: read every key through the shortcut table
Twelve components still compared key names themselves, so the shortcut
table could drift from what they actually did; a guard listed them as
pending. Each now reads its effect from RACCOURCIS through effetDe, the
pending list and its guard are removed, and the generated shortcut
table is unchanged. The keys the old guard pinned without a behaviour
test (Escape on the plan root with no active element, ArrowLeft in the
grid, and those of the participant and table lists) each gain one.
Checked: 3852 node, 766 browser, 101 long tests, from the index alone.

--- FR ---

[REF] interface : chaque touche lue par la table des raccourcis

Douze composants comparaient encore eux-mêmes les noms de touches : la
table des raccourcis pouvait s'écarter de ce qu'ils faisaient, et une
garde les tenait en attente. Chacun lit désormais son effet dans
RACCOURCIS par effetDe ; la liste d'attente et sa garde disparaissent,
la table engendrée ne change pas. Les touches que l'ancienne garde
figeait sans épreuve de comportement (Échap sur le plan sans élément
actif, flèche gauche dans la grille, listes des personnes et des
tables) en reçoivent chacune une.
Vérifié : 3852 node, 766 navigateur, 101 longues, depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-10 17:25:03 -04:00
8f1edc83c7 [ADD] badges: tests for control page wrapping, margins and imposition
No test covered how the control page wraps its lines at spaces, its
margins on a continuation page, the second imposition value or the
default order a sheet takes when none is given. Twelve mutants of the
sheet producer and of its session layer survived; each is now caught
by one test. The margin cases need the full control sheet and run in
the long series. No source file changes.
Checked: 3855 node and 101 long tests, from the index alone.

--- FR ---

[ADD] badges : épreuves du repli, des marges et de l'imposition

Aucune épreuve ne couvrait le repli des lignes de la feuille de
contrôle aux espaces, ses marges sur une page de suite, l'autre valeur
d'imposition ni l'ordre par défaut d'une planche. Douze mutants de la
production et de sa couche de séance survivaient ; chacun tombe
désormais sous une épreuve. Les marges exigent la feuille de contrôle
pleine et vivent dans la série longue. Aucun fichier source ne change.
Vérifié : 3855 node et 101 longues, depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-10 17:22:35 -04:00
01b5582f62 [FIX] print: continue overlong rows across pages, adopt bench values
A row taller than a page, on the table sheet or the welcome list, was
clipped by its page's content zone. It now continues piece by piece on
the next sheets under the repeated header, each cell's text once and in
order. SEUIL_SIEGES_LISIBLES (18 places) and TOLERANCE_CHAINE_TEMOIN
(0.011) move from working default to measured, matching the committed
bench reading. The walkthrough checks that leaving the read-only mode
writes only the badge PDF and the local paper setting.
Checked: 3853 node, 761 browser, 101 long tests, from the index alone.

--- FR ---

[FIX] impression : lignes trop hautes continuées, banc adopté

Une ligne plus haute qu'une page, sur la feuille par table ou la liste
d'accueil, était rognée par la zone de contenu. Elle se continue
désormais par morceaux sur les feuilles suivantes, sous l'en-tête
répété, chaque texte une fois et dans l'ordre. SEUIL_SIEGES_LISIBLES
(18 places) et TOLERANCE_CHAINE_TEMOIN (0,011) passent de défaut de
travail à mesurées, d'accord avec le relevé commis. Le parcours vérifie
que sortir de la lecture seule n'écrit que le PDF et le papier local.
Vérifié : 3853 node, 761 navigateur, 101 longues, depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-10 17:21:55 -04:00
c69c0f320b [ADD] bench: make banc orchestrator, first reading and constants table
`make banc` runs the node and browser measures, assembles releve.json in
the registry's order and fails when a measure is missing, a harness
check falls, a text measure is not in Noto Sans, or the time per image
is not held. It prints values to adopt and never edits constantes.js; ρ
is reported but stays at its working default on the reference machine.
Each bench constant cites the CPU slowdown of its own measure. The
reading names the machine class only: identifying keys, accented or
camelCase, and account paths are refused.
Checked: node 3836, browser 758, node-long 101; make banc exits 0.

--- FR ---

[ADD] banc : orchestrateur make banc, premier relevé, constantes

`make banc` lance les mesures node et navigateur, assemble releve.json
dans l'ordre du registre et échoue sur une mesure manquante, un contrôle
du harnais tombé, une mesure de texte hors Noto Sans ou un temps par
image non tenu. Il imprime les valeurs à adopter sans toucher
constantes.js ; ρ est relevé mais reste à son défaut de travail. Chaque
constante du banc cite le ralentissement de sa propre mesure. Le relevé
ne nomme que la classe de machine : clés identifiantes, accentuées ou
camelCase, et chemins de compte sont refusés.
Vérifié : node 3836, navigateur 758, longues 101 ; make banc sort en 0.

Assisted-by: Claude Opus 5.5
2026-10-10 15:31:25 -04:00
cb89060e34 [ADD] captures: badge control page and first sheet, rasterised from PDF
The walkthrough produces the retained plan's badge sheet through the
Badges section and rasterises the PDF under node with pdfjs at 96 dpi:
page 1 becomes the control page, page 2 the first sheet of four A6.
Manifest entries carry the PDF's sha256, so an unchanged PDF leaves the
images unchanged; two productions under the driven clock must hash the
same, and a missing canvas fails the step by name with nothing written.
No capture remains pending.
Checked: node 3787, browser 758, node-long 101 from the index alone.

--- FR ---

[ADD] captures : feuille de contrôle et planche, tramées du PDF

Le parcours produit la planche du retenu par la section Badges et trame
le PDF sous node par pdfjs à 96 ppp : la page 1 donne la feuille de
contrôle, la page 2 la première planche de quatre A6. Les entrées du
manifeste portent le sha256 du PDF : un PDF inchangé laisse les images
inchangées ; deux productions sous l'horloge pilotée ont même empreinte,
et un canevas absent fait échouer l'étape en le nommant, rien d'écrit.
Plus aucune capture n'est à venir.
Vérifié : node 3787, navigateur 758, longues 101 depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-10 14:36:21 -04:00
b72f3fe784 [ADD] captures: print preview of a draft and of the retained plan
The walkthrough photographs the printed plan twice from the same scroll
position: a proposal not retained carries BROUILLON and its own footer,
the retained plan carries neither watermark nor proposal timestamp. The
visible condition is judged on the whole box of each element, so a
label cut at the window edge fails the walkthrough; capture 19 now aims
at a seat that keeps the ghost and its label inside the plan. A failed
preview step closes the preview before the next tests run.
Checked: node 3777, browser 756, node-long 101 from the index alone.

--- FR ---

[ADD] captures : aperçu imprimé d'un brouillon et du placement retenu

Le parcours photographie deux fois le plan imprimé au même défilement :
une proposition non retenue porte BROUILLON et son propre pied, le
retenu ne porte ni filigrane ni horodatage de la proposition. La
condition visible se juge sur la boîte entière de chaque élément : un
libellé coupé au bord de la fenêtre fait échouer le parcours ; la
capture 19 vise un siège qui garde le fantôme et son libellé dans le
plan. Un échec à l'aperçu le referme avant les épreuves suivantes.
Vérifié : node 3777, navigateur 756, longues 101 depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-10 13:37:50 -04:00
365561272e [ADD] print: real PDF output proven, table sheets split by tour groups
Printing goes through Chromium's PDF with the CSS page size; a browser
command reads the PDF under node and returns pages, MediaBox and text
only. The tests prove pages = sheets for the cut plan in A4 and Letter,
the paper size within 0.25 mm, BROUILLON and the placement timestamp on
every page of a draft and none of a retained plan. The startup trial
prints the preview through the real shell. A table sheet whose tours do
not fit side by side splits them into groups of consecutive tours, so a
long name wraps inside its page instead of being clipped.
Checked: node 3776, browser 753, node-long 101; startup trial conforms.

--- FR ---

[ADD] impression : PDF réel prouvé, feuilles par table en groupes

L'impression passe par le PDF de Chromium à la taille de page CSS ; une
commande lit le PDF sous node et ne rend que pages, MediaBox et textes.
Les épreuves prouvent pages = feuilles du plan découpé en A4 et Lettre,
le papier à 0,25 mm, BROUILLON et l'horodatage du placement sur chaque
page d'un brouillon et sur aucune d'un retenu. L'essai de démarrage
imprime l'aperçu par la vraie coquille. Une feuille par table dont les
tours ne tiennent pas côte à côte les répartit en groupes consécutifs :
un long nom passe à la ligne dans sa page au lieu d'être coupé.
Vérifié : node 3776, navigateur 753, longues 101 ; essai conforme.

Assisted-by: Claude Opus 5.5
2026-10-10 13:33:35 -04:00
e71879e852 [ADD] badges: event section to prepare, produce and reissue the sheet
The Badges section follows Propositions. It offers the retained plan by
default, or the proposal chosen in Propositions, which always prints as
BROUILLON; the announcement names the source, the imposition and the
page count before anything is written. The paper question is asked
once per machine, refusals sit beside « Produire » with their remedy,
and a new production clears the previous sheet's path. Section buttons
narrow so eight still fit one line at 1 366 px.
Checked: node 3769, browser 745, node-long 101 from the index alone.

--- FR ---

[ADD] badges : section pour préparer, produire et rééditer la planche

La section Badges suit Propositions. Elle offre le retenu par défaut,
ou la proposition choisie dans Propositions, toujours BROUILLON ;
l'annonce nomme la source, l'imposition et le nombre de pages avant
toute écriture. La question du papier se pose une fois par machine, les
refus se posent à côté de « Produire » avec leur remède, et une
nouvelle production efface le chemin de la précédente. Les boutons de
section s'amincissent : huit tiennent sur une ligne à 1 366 px.
Vérifié : node 3769, navigateur 745, node-long 101 depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-10 11:11:33 -04:00
62f8406d78 [ADD] print: welcome list and table sheets, paginated with headers
The welcome list sorts names by their normalised key and gives each
round a column whose width comes from the longest seat it holds; the
table sheet puts the rounds in columns, or one sheet per table and
round under « Une feuille par tour ». Rows are measured and paginated
with the header repeated, never split across pages; names wrap
instead of being cut. Read-only and locked plans print the same.
Checked: node 3753, browser 730, node-long 101 from the index alone.

--- FR ---

[ADD] impression : liste d'accueil et feuilles par table, paginées

La liste d'accueil trie les noms par leur clé normalisée et donne à
chaque tour une colonne large de la plus longue place qu'elle porte ;
la feuille par table met les tours en colonnes, ou une feuille par
table et par tour sous « Une feuille par tour ». Les lignes sont
mesurées et paginées sous l'en-tête répété, jamais coupées entre deux
pages ; les noms passent à la ligne plutôt que d'être tronqués. Un plan
en lecture ou verrouillé s'imprime de même.
Vérifié : node 3753, navigateur 730, node-long 101 depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-10 11:07:03 -04:00
e5d9026b2a [ADD] print: seating plan cut into pages, with cartouche and scale
The printed plan draws every table in seat mode with its name lists,
whatever the zoom, and drops screen gestures: no selection, focus,
grab handle or highlight reaches paper. Each page carries a cartouche
(page p of n, column, row) and references to its neighbours; the cut
uses the band measured under the footer. Print marks resolve their
colour tokens from the printed document, so a dark screen theme
leaves the paper light.
Checked: node 3721, browser 720, node-long 101 from the index alone.

--- FR ---

[ADD] impression : plan découpé en pages, avec cartouche et échelle

Le plan imprimé dessine chaque table en régime sièges, avec ses listes
de noms, quel que soit le zoom, et laisse les gestes à l'écran :
sélection, focus, poignée et mise en évidence n'atteignent pas le
papier. Chaque page porte un cartouche (page p sur n, colonne, rangée)
et ses renvois aux voisines ; la découpe prend la bande mesurée sous le
pied. Les marques lisent leurs jetons dans le document imprimé : un
thème sombre à l'écran laisse le papier clair.
Vérifié : node 3721, navigateur 720, node-long 101 depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-10 11:03:12 -04:00
9994858904 [ADD] docs: usage and Windows guides, with how the search works
An operator who did not write the software must be able to prepare an
evening alone. GUIDE-USAGE.md follows an evening step by step on the
published captures, with the seed and stop count that reproduce them, and
explains why two searches give two placements and how the ranking picks
the best one. GUIDE-WINDOWS.md covers installation and the portable mode.
README.md carries the generated contrast and constant tables, and a
delivery build fails when a generated region differs.
Checked: the guide's numbers are bounded in the tests; 3699 node and 101
long tests green from the index alone.

--- FR ---

[ADD] docs : guides d'usage et Windows, fonctionnement de la recherche

Une personne qui n'a pas écrit le logiciel doit pouvoir préparer une soirée
seule. GUIDE-USAGE.md suit une soirée pas à pas sur les captures publiées,
avec la graine et le compte d'arrêt qui les reproduisent, et explique
pourquoi deux recherches donnent deux placements et comment le classement
choisit le meilleur. GUIDE-WINDOWS.md couvre l'installation et le mode
portable. README.md porte les tableaux engendrés des contrastes et des
constantes, et une construction de livraison échoue quand une région diffère.
Vérifié : les nombres du guide sont bornés dans les épreuves ; 3699 node et
101 longues vertes depuis l'index seul.

Assisted-by: Claude Opus 5.5
2026-10-09 17:14:56 -04:00