Files
decision/actes/2026-10-31-m2-vote.md
T

6.9 KiB
Raw Blame History

Acte — Mise en ligne M2 + M3a (le vote déplié et groupé, l'inertie à cinq crans)

Classe : déploie Projet : libreDecision Date : 2026-10-31 État : CADUC, emporté par M4 (constaté le 03/11/2026) : jamais exécuté ; 74f96be est un ancêtre de 4d4adcc (M4, en ligne depuis le 01/11 à 23 h 06) et de 3f10a0e (M5, en ligne depuis le 02/11 à 03 h 04), son contenu est donc en production. Ne pas exécuter. État d'avant : FIGÉ (2026-10-31, 01 h 30) sur 74f96be — relectures « a576b68 : ok », « 71819f9 : ok », « 74f96be : ok » inscrites

Intention

Mettre en ligne en une fois les points L9 et L10 de la revue d'Yvv du 30/10 :

  • L10 (lot C, déjà relu, dossier M3a) : l'inertie à cinq crans, l'échelle calée sur la participation, les réglages de la formule ;
  • L9 (lot B) :
    • le vote qui se déplie sous l'article, avec ton vote, les totaux et la distance au seuil ;
    • le vote groupé (document, section, article) dans un panier ;
    • le vote par transaction Ğ1, livré éteint.

Le vote par la chaîne reste éteint : LD_VOTE_ACCOUNT n'est pas posé. La relecture de 74f96be a relevé trois défauts à corriger avant de l'ouvrir (lot B2, en cours), et Yvv doit encore trancher le secret du vote, l'extension et le compte de vote. Dans Monnaie libre, l'écran dit pourquoi on ne peut pas encore voter. Dans le groupe d'essai, le vote marche côté serveur, déplié et groupé.

Si cet acte est armé, il remplace le dossier M3a (actes/2026-10-30-m3-inertie-cinq-crans.md), qui n'aura plus d'objet. Tout ce que M3a écrit en base est repris ici.

Ce qui part

Version : 74f96be, qui contient la version en production 8727315. En plus de M3a (8727315..71819f9, voir son dossier) :

  • lot B : 3541e1b (le vote par la chaîne, moteur et serveur), b260596 (le vote déplié, le panier, la signature), ef27165 (« Voter en lot »), 032fcbb (ADR 0008, contrôles C21–C24) ;
  • la fusion 74f96be.

Ce qui change hors du code : docker/app-compose.yml reçoit trois lignes de commentaire (où poser LD_VOTE_ACCOUNT), et rien d'autre (prémisse 4). Nouvelles dépendances :

  • polkadot-api (67 Ko compressés, chargé seulement au moment de signer) ;
  • uqr (4 Ko, le QR code) ;
  • la crate blake2.

Ce que l'acte écrit dans la base de production (donnée runtime)

  • Tout ce que dit le dossier M3a :
    • migration 0005 (crans, avec les anciens mots gardés) ;
    • amendements gardés « E1 et E2 au cran 4 » ;
    • mesure de participation dans settings ;
    • republication de Monnaie libre.
  • La migration 0006, additive :
    • tables ballots et ballot_lines ;
    • quatre colonnes ajoutées à votes (source, server par défaut ; block, event_index, ballot_id) ;
    • aucun vote réécrit (il n'y en a aucun en production).
  • Répétition faite le 31/10 à 01 h 25, avec le serveur de cette version, sur une copie fraîche de la base de production (la santé disait 87273156) :
    • migrations 1 à 6 appliquées ;
    • 4 « inertia amendment applied » ;
    • 62 articles au cran 3, 4 au cran 4 ;
    • 0 bulletin, 0 vote, une identité ;
    • integrity_check ok, foreign_key_check vide.

Avant — prémisses vivantes

  1. La production sert 8727315 : curl -s https://decision.librodrome.org/api/health → "build":"87273156". Si elle sert 71819f9 (M3a déjà en ligne), l'acte reste valable : seule la migration 0006 s'applique alors.
  2. git fetch prod && git fetch origin && git rev-parse --short prod/main && git rev-parse --short origin/main → la même version que la santé, deux fois.
  3. Les relectures a576b68, 71819f9 et 74f96be sont inscrites « ok » dans ~/harness/etat/relectures.json. Aucune autre relecture de ce code n'est en cours.
  4. git diff 8727315 74f96be -- docker/app-compose.yml .woodpecker/ .env data/ ne montre que les trois lignes de commentaire sur LD_VOTE_ACCOUNT (vérifié le 31/10 à 01 h 30). Et sur sonic, grep -c LD_VOTE_ACCOUNT /opt/libredecision-app/secrets.env → 0, ou fichier absent : le vote par la chaîne reste éteint (fichier absent le 31/10 à 01 h 30).
  5. La boucle est verte sur 74f96be : fait le 31/10 vers 0 h 15 (149 tests Rust, svelte-check 0 avertissement, 32 vitest, e2e 25 / 25). L'image de production se construit (sortie 0).
  6. Sur une copie fraîche de la base de production :
    • SELECT inertia, COUNT(*) FROM units GROUP BY 1 → standard|66 (ou, si M3a est en ligne, 3|62 et 4|4) ;
    • SELECT COUNT(*) FROM votes → 0 ;
    • SELECT COUNT(*) FROM adoptions WHERE kind = 'inertia' → 0.

Commandes exactes

cd /home/yvv/Documents/PROD/DEV/libreDecision
git push prod 74f96be:main
git push origin 74f96be:main
git push origin chantier/acte-certification

Effet attendu

Les visiteurs voient :

  • l'inertie en crans et les réglages de la formule ;
  • « Le vote » qui se déplie sous l'article ;
  • « Voter en lot » et « Voter cette section », et le panier ;
  • dans Monnaie libre, la raison pour laquelle on ne vote pas encore.

E1 et E2 passent au cran 4. Le dépôt des textes reçoit un document.json qui porte les crans.

Irréversibilité : partielle. Le code se remet en arrière. Ce qui reste :

  • les crans écrits en base, avec les mots d'origine à côté ;
  • E1 et E2 au cran 4 ;
  • les tables du vote, vides ;
  • le commit publié dans le dépôt des textes.

Vérifications après

  • curl -s https://decision.librodrome.org/api/health → "build":"74f96bec".
  • ssh sonic 'docker logs lpk-libredecision-app 2>&1 | grep -E "inertia amendment|participation measured|published|ballot"' → quatre « inertia amendment applied », les mesures, une publication, aucune erreur de bulletin.
  • À l'écran (Yvv) :
    • Monnaie libre → Acte d'engagement → « Le vote » sous la Raison d'être se déplie, et dit que le vote par la chaîne n'est pas encore ouvert ;
    • les réglages de la formule montrent la référence de 100 votants ;
    • dans le groupe d'essai, voter « Pour » sous un article marche, et le panier groupe une section.

Retour

  • Le code, au plus court, sur sonic : docker tag libredecision-app:previous libredecision-app:latest, puis cd /opt/libredecision-app && docker compose up -d --force-recreate.
  • Vers 71819f9 : la relecture a montré qu'elle tolère la migration 0006 et continue d'écrire ses votes.
  • Vers 8727315 : pas de perte, mais l'affichage se dégrade. Ce sont les clés brutes « inertia.3 », les propositions vers 5 lues « vers standard », d'adoption impossible. Voir le dossier M3a. On n'y reste pas.
  • Les crans, E1 et E2 au cran 4, les tables du vote : pas de retour automatique. Elles sont additives, ou gardent l'ancien mot à côté.
  • Le commit publié dans le dépôt des textes : on ne le retire pas sans réécrire l'historique de ce dépôt, ce qui serait un acte « supprime ». On publierait par-dessus.