11 KiB
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.shavant, après le premier démarrage, après le second : identiques (migrations 1–11, 1 identité, 0 vote, 0 bulletin, 0 signalement, propositionsinertia/withdrawn:3 order/in_force:16 text/open:70 title/in_force:2, 113 révisions, 144 traductions,seed_amendments16, 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 leurnext_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 :
- « 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.pnget-page.png,apres-*-membre-ml-ecran.pnget-page.png,geste-*-3a-propositions-repliees.png,geste-*-3b-propositions-depliees.png.
- « 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.
- Avant : sept blocs « Ordre des articles ·
- « 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.
- « 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.
- « 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.
- La règle (
- « 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.
- 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 :
canSetQuorumfaux 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
- La production sert
bb4bdf5: santé"build":"bb4bdf58";prod/main→bb4bdf5. git diff bb4bdf5 b2e597b -- crates seeds docker .woodpecker .env data→ vide.- La relecture indépendante de
b2e597b, inscrite « ok » dans~/harness/etat/relectures.json. - Boucle verte sur
b2e597b, le 03/11 (journauxm6/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.tsseul : 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.
- de 08 h 48 à 08 h 55 : fmt, clippy
Commande exacte
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.shidentiques à la copie d'avant ;integrity_checkok. - 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)