diff --git a/actes/2026-11-03-m7-lecteur.md b/actes/2026-11-03-m7-lecteur.md new file mode 100644 index 0000000..e314d85 --- /dev/null +++ b/actes/2026-11-03-m7-lecteur.md @@ -0,0 +1,171 @@ +# Acte — Mise en ligne M7 (le lecteur refait, lot U) +Classe : déploie +Projet : libreDecision Date : 2026-11-03 +**État : EN PRÉPARATION** sur `b2e597b` (`b2e597b65356cac14fbffdbf33318d620940b6f3`) — préparé par +l'intégrateur libredecision-d4 ; exécuté par orch (dev-63) sous son mandat (« déploie » et « pousse », du +03/11 au 08/11). Relecture indépendante : en cours (lancée le 03/11 à 09 h 06). + +## Intention + +Mettre en ligne le lot U, la réponse à la revue d'Yvv du 02/11 (registre, revue en ligne de M5) : +« Améliore l'ux : la page est trop longue, trop fournie et on ne comprends pas tout de suite. » ; +l'ordonnancement « en fin de section, qui ajoute des "poignées" aux modules de la section. Et permette de +voter. » ; « distingue avec habileté les différentes nature des modules » ; pas de redondance entre +« consoles locales » et celles du bas ; « la distinction entre un déplier façon toggle et un menu qui +ouvre à droite doit être pertinente » ; « Simule le vote à tout endroit. ». Avec l'ajout du 02/11 à +06 h 26 : « combien il faut de oui pour passer et combien de non pour maintenir l'opposition ». + +## Ce qui part + +Version `b2e597b`, qui contient la version en ligne `bb4bdf5`. **L'interface seule** : `web/` (lecteur, +composants `OrderLine`, `Reorder`, `QuorumSetting`, `Crans`, chaînes fr, en, es, contrôles C35 à C37) ; +le reste est documentation (`CLAUDE.md`, `HANDOFF.md`, actes, ADR, `CONTROLES.md`, `UX-lecteur.md`, +tableau). `git diff bb4bdf5 b2e597b -- crates seeds docker .woodpecker .env data` → **vide** (vu par +l'intégrateur et par orch le 03/11 à 08 h 49) : le serveur est celui qui est en ligne. + +## Ce que l'acte écrit dans la base de production (donnée runtime) + +**Rien.** Aucune migration, aucun amendement, aucun code serveur nouveau. Au démarrage, comme à chaque +démarrage depuis M6, la file de publication suspendue reporte ses 7 lignes (`next_at`). + +## Répétition + +**Faite le 03/11 de 08 h 56 à 08 h 57**, avec le serveur de `b2e597b` (binaire de la boucle, copié en +`m7/ld-server-b2e597b`), sur une copie de la copie de production prise par orch à 08 h 49 min 02 (santé +`bb4bdf58`), publication vers un dépôt nu local (`m7/repetition.sh` ; journal `m7/repetition-m7.log`, +scratchpad de l'intégrateur). Deux démarrages. + +- `m7/counts.sh` avant, après le premier démarrage, après le second : **identiques** (migrations 1–11, + 1 identité, 0 vote, 0 bulletin, 0 signalement, propositions `inertia/withdrawn:3 order/in_force:16 + text/open:70 title/in_force:2`, 113 révisions, 144 traductions, `seed_amendments` 16, quorums par cran, + I1, E1, E2 au cran 2 sans texte en vigueur, file 7 en attente et 13 faites). +- **La base entière comparée** (`.dump`, 868 lignes avant et après) : seules changent les 7 lignes de la + file en attente, par leur `next_at` (la publication suspendue les reporte à chaque démarrage, comme + depuis M6). +- Journal : « publication suspended … waiting=7 », aucun amendement, aucune ligne ERROR ni WARN ; 0 commit + vers le dépôt des textes. + +## Recette écran + +**Faite le 03/11 de 09 h 00 à 09 h 03**, sur deux autres copies de la copie de 08 h 49 : l'interface de +`b2e597b` (« après ») et celle de `bb4bdf5`, en ligne (« avant », construite dans une copie de travail +jetable), servies par le même serveur, connexion de développement (identités `dev:` écrites dans ces +copies seulement). Bureau 1360 × 900 et téléphone (Pixel 7), `fr-FR`. Script `m7/recette.mjs`, rapports +`m7/shots/avant-rapport.json` et `m7/shots/apres-rapport.json` : 38 étapes, 0 échec. Captures, toutes dans +`/tmp/claude-1001/-home-yvv-Documents-PROD-DEV-libreDecision/d0a7108b-7f2f-484a-bcb0-de339238199d/scratchpad/m7/shots/`, +regardées une à une. + +La revue d'Yvv du 02/11, ligne par ligne : + +1. **« la page est trop longue, trop fournie et on ne comprends pas tout de suite »** + - Hauteur de la page d'un membre, Monnaie libre, mêmes données : **6 079 → 2 529 px** sur bureau, + **6 744 → 3 365 px** sur téléphone. + - Premier écran : avant, « Aucun article n'est en vigueur. Les propositions ci-dessous remontent… » + puis les blocs « Ordre des articles » ; après, « Aucun article n'est encore en vigueur. Commence par + les Propositions seed… », puis Raison d'être avec la marque « Proposition seed », Unicité du compte, + Réciprocité, puis « Propositions en cours » repliées par section (« Tout déplier », « Voter cette + section »). + - Captures `avant-*-membre-ml-ecran.png` et `-page.png`, `apres-*-membre-ml-ecran.png` et `-page.png`, + `geste-*-3a-propositions-repliees.png`, `geste-*-3b-propositions-depliees.png`. +2. **« la répétition de "ordonnancement" est nulle. […] en fin de section, qui ajoute des "poignées" aux + modules de la section. Et permette de voter. »** + - Avant : sept blocs « Ordre des articles ·
» en tête (Introduction à Inertie), chacun + répétant la liste de ses articles. Après : aucun ; une ligne « Ordre de la section » au bout de chaque section. + - « Réordonner » sur Engagements techniques : 11 articles, 11 poignées, sur place (le panneau reste + fermé) ; un article monté, « Proposer cet ordre », le vote se déplie à la ligne, « Pour » → « Vote + simulé. », la ligne dit « 1 ordre proposé ». + - Captures `geste-*-5a-ligne-ordre.png`, `-5b-poignees.png`, `-5c-ordre-vote-simule.png`. +3. **« distingue avec habileté les différentes nature des modules : les textes ; l'inertie ; + l'odonnancement »** + - Texte : la carte de l'article. Inertie : les crans dessinés (cinq barres, « basse ») sur la carte, et + « Inertie · 2 / 5 · basse » dans le vote déplié. Ordre : l'icône poignée et « Ordre de la section ». + Titre du document : « Titre du document · seed a minima · 0 vote », crans « inertie 4 / 5 · haute », + « Le vote », « Proposer un autre titre », sous le titre. + - Captures `apres-*-ecran.png`, `geste-*-6-titre.png`. +4. **« vérifie qu'il n'y a pas de redondance entre les "consoles locales" et celles du bas »** + - Vote déplié et panneau ouvert : 15 titres visibles, **0 doublon** (étape 8, bureau et téléphone). + Le panneau n'a plus d'onglets, il porte un titre : « Panier de vote », « Réglages de la formule ». + - Captures `geste-*-7a-panneau-panier.png`, `geste-*-9-panneau-reglages.png`. +5. **« la distinction entre un déplier façon toggle et un menu qui ouvre à droite doit être + pertinente »** + - La règle (`UX-lecteur.md`) : sur place, ce qui se lit et se décide sur un article (le vote, l'ordre + de sa section, le titre) ; à droite, ce qui travaille sur plusieurs articles ou demande de la place + (panier, réglages, détails, proposer). Vue : vote d'une proposition depuis la liste et vote d'un + ordre, panneau fermé (étapes 4 et 5) ; « Voter en lot » et « Réglages de la formule » ouvrent le + panneau. +6. **« Simule le vote à tout endroit. »** et le tampon (« je vois ce que j'ai fait sans attendre ») + - Monnaie libre (chaîne fermée) : sur une Proposition seed, une proposition de la liste, un ordre, + chaque « Pour » donne « Vote simulé. » ; aussitôt « Ton vote : pour · simulé », « 1 pour · 0 contre + dont 1 simulé », la note « tant qu'une décision humaine n'efface pas les votes simulés » ; la marque + « vote simulé » près de « Voter en lot ». « Vote enregistré. » : jamais vu. + - Groupe d'essai (vote sur le serveur) : le vote est enregistré, pas simulé, comme il se doit. + - Captures `geste-*-1-seed-vote-deplie.png`, `-2-seed-vote-simule.png`, `-4-proposition-vote-simule.png`, + `-11-essai-vote.png`. +7. **L'ajout du 02/11 à 06 h 26, « combien il faut de oui pour passer et combien de non pour maintenir + l'opposition »** + - Avant tout vote : « 9 oui sur 12 votants pour passer » (Propositions seed, cran 2), le quorum dans + l'infobulle (« Quorum : 12 votants. En dessous, les votants qui manquent comptent comme « non ». ») ; + dans la liste, « 9 oui sur 12 » et « 39 oui sur 50 » (cran 3). Après un vote : « 9 oui pour passer · + le quorum la bloque », « Il manque 8 voix pour. ». Essai : « 1 oui sur 1 votant pour passer ». + - **Le quorum de l'auteur** : sur les données de production, personne ne le règle (aucun article écrit + par un membre : `canSetQuorum` faux partout, étape 10). Il n'apparaît qu'à l'auteur d'un nouvel + article avant son premier vote : prouvé par C37 sur une base de test, pas vu sur ces données. + +Vu en passant, **pas du lot U, déjà en ligne** : +- « 0 contre » collé à « dont 1 simulé » (« 0 contredont 1 simulé ») : l'espace avant la marque se perd + (`VoteFold.svelte:163`, lot V, `d57326d`, en ligne depuis M6) → lot T2 ; +- la note d'inertie du vote déplié, « plus il faut de voix pour changer ce texte quand peu de gens + votent », a l'imprécision relevée sur F1.1 → lot T2 ; +- le bas du menu latéral (langues, ambiances) touche le bord droit : liste d'attente (vu par H). +- Le serveur de recette signale une fois « web of trust size: no node nor indexer answered, keeping the + last value » : pas de réseau vers les nœuds dans la recette. + +## Effet attendu + +- Le lecteur d'un document change pour tout le monde (les deux groupes, fr, en, es) ; les données, les + votes, les textes et la publication ne changent pas. +- Le dépôt des textes reste à `9e0f45a`. + +Irréversibilité : **aucune** côté données ; le code se remet en arrière. + +## Avant — prémisses vivantes + +1. La production sert `bb4bdf5` : santé `"build":"bb4bdf58"` ; `prod/main` → `bb4bdf5`. +2. `git diff bb4bdf5 b2e597b -- crates seeds docker .woodpecker .env data` → vide. +3. La relecture indépendante de `b2e597b`, inscrite « ok » dans `~/harness/etat/relectures.json`. +4. Boucle verte sur `b2e597b`, le 03/11 (journaux `m6/loop-m7.log`, `m7/e2e-c25.log`, `m7/e2e-all.log`) : + - de 08 h 48 à 08 h 55 : fmt, clippy `-D warnings`, 294 tests Rust, svelte-check 0 / 0, 64 vitest, + build ; e2e 39 / 40, **C25 (chaîne Ğ1 et téléphone) hors délai à 1,5 min**, la machine à une charge + de 11 à 12 (les sessions HCO) ; + - à 08 h 55, `modules.spec.ts` seul : 4 / 4, ce C25 en 7,3 s ; + - de 08 h 56 à 08 h 59, **la suite e2e complète : 40 / 40**. + Image de production construite le 03/11 de 09 h 00 à 09 h 01, sortie 0 : l'étage serveur repris du + cache (code inchangé depuis `bb4bdf5`, dont l'image a rejoué les tests Rust à 07 h 48) ; l'étage web + rejoué (svelte-check 0 / 0, 64 vitest, build). Image de contrôle retirée à 09 h 01. + +## Commande exacte + +```sh +cd /home/yvv/Documents/PROD/DEV/libreDecision +git push prod b2e597b65356cac14fbffdbf33318d620940b6f3:main +``` + +## Vérifications après + +- [ ] Santé vue de l'extérieur → `"build":"b2e597b6"`. +- [ ] Journaux : « publication suspended … waiting=7 », aucune ligne ERROR ni WARN, aucun amendement. +- [ ] La page d'un document, vue de l'extérieur, sert la nouvelle interface (le paquet JS contient + « Réordonner » et « oui pour passer »). +- [ ] Sur une copie fraîche : comptes de `m6/counts.sh` identiques à la copie d'avant ; `integrity_check` + ok. +- [ ] Le dépôt des textes reste à `9e0f45a`. + +## Retour + +`docker tag libredecision-app:previous libredecision-app:latest`, puis +`cd /opt/libredecision-app && docker compose up -d --force-recreate`. `previous` sera `bb4bdf5`, le même +serveur, qui attend aussi le premier texte pour publier : rien à couper, aucune donnée à reprendre. + +## Exécution + +(à remplir par orch) diff --git a/docs/chantiers/acte-certification/tableau.md b/docs/chantiers/acte-certification/tableau.md index 9685eca..4fa5505 100644 --- a/docs/chantiers/acte-certification/tableau.md +++ b/docs/chantiers/acte-certification/tableau.md @@ -82,6 +82,14 @@ Lots en cours, en copies de travail (`.claude/worktrees/agent-`) : commencés. En attente de V. **Relancé le 03/11 à 07 h 33**, avec la fusion de H, S, V et T, les reprises de la relecture de M6 (« Vote enregistré. », « effacement à l'ouverture de la chaîne ») ; part en M7. + **Fini et fusionné le 03/11 à 08 h 48** (`b2e597b`) : page 2,4 fois plus courte, ordre en une ligne au + bout de sa section et poignées sur place, titre et ordre votés à leur place, Propositions seed en + tête, propositions repliées par section, panneau sans onglets, « oui pour passer · non pour + bloquer », quorum de l'auteur, votes simulés dits simulés ; C35 à C37 vus rouges. Interface seule + (serveur = `bb4bdf5`). Boucle verte dans sa copie (294 Rust, 64 vitest, 40 e2e) ; à regarder par Yvv : + `UX-lecteur.md`, la ligne d'ordre au survol, « le quorum la bloque », trois points sur téléphone. + Boucle de l'intégrateur en cours ; copie de la production demandée à orch (08 h 49) pour la + répétition et la recette écran de M7. **M6 en ligne** depuis le 03/11 à 07 h 03 (`94ddb17`, pipeline 37) : H, S et V. Production `94ddb175` ; `main` et `chantier/acte-certification` poussés vers origin par orch. Le dépôt des textes reste à `9e0f45a`