13 KiB
Acte — Mise en ligne M4 (le vote, l'inertie à cinq crans, les modules d'ordre et de titre, les objections, les coquilles validées)
Classe : déploie
Projet : libreDecision Date : 2026-10-31
État : EXÉCUTÉ le 01/11/2026 (armé par Yvv : « déploie. », le 01/11 vers 22 h 50) — figé le 2026-10-31 à 10 h 47 sur 4d4adcc
74f96be, 9c8f4cc, cd7e683, 924a40d, 033b331, 4d4adcc
Intention
Mettre en ligne en une fois le reste de la revue d'Yvv du 30/10, L9 à L13 :
- L9 : le vote déplié et groupé ; le vote par la chaîne, corrigé (B2) mais livré éteint ;
- L10 : l'inertie à cinq crans ;
- L11 : l'ordre des articles en fin de section (cran 2) et le titre du document en module (cran 4) ;
- L12 : les objections « redit » et « contredit » ;
- L13 : les coquilles validées par leur auteur, la boîte « Messages », le délai de 3 jours.
Cet acte remplace les dossiers M2 (actes/2026-10-31-m2-vote.md, figé sur 74f96be) et M3a
(actes/2026-10-30-m3-inertie-cinq-crans.md, figé sur 71819f9). 4d4adcc contient l'un et
l'autre, et ce que M2 et M3a écrivent en base est repris ici. Si M2 ou M3a est armé avant celui-ci,
cet acte reste valable : seules les migrations manquantes s'appliquent (prémisse 1).
Le vote par la chaîne reste éteint : LD_VOTE_ACCOUNT n'est pas posé. Yvv doit encore trancher :
- le secret du vote face aux totaux en direct (Q8) ;
- le commentaire scellé (Q5) ;
- l'extension (Q6) ;
- le compte de vote (Q7).
Dans Monnaie libre, l'écran dit pourquoi on ne vote pas encore. Dans le groupe d'essai, tout marche côté serveur.
Ce qui part
Version : 4d4adcc, qui contient la version en production 8727315. Lots et relectures :
| Lot | Commits | Relecture |
|---|---|---|
| C (cinq crans) | a576b68, 71819f9 |
« ok » ×2 |
| B (vote) | 74f96be |
« ok » |
| B2 (corrections du vote) | 7ffa4fd |
« à reprendre », repris en 9c8f4cc |
| F (objections, coquilles, messages) | cd7e683 |
« ok », avec 9c8f4cc et 924a40d |
| D (modules) et sa fusion | 033b331 |
« ok », avec 4d4adcc |
| Corrections M1–M4 de la relecture de F | 4d4adcc |
« ok », avec 033b331 |
Ce qui change hors du code (vérifié le 31/10 à 10 h 10) :
docker/app-compose.ymlreçoit trois lignes de commentaire (où poserLD_VOTE_ACCOUNT), et rien d'autre ;seeds/acte-engagement-certification.jsonpasse aux crans et décrit les modules. Il n'est lu que pour une base neuve : un document qui existe en base n'est jamais réinstancié ;- aucun fichier
.env,.db, clé ou secret.
Nouvelles dépendances (celles de M2) : polkadot-api, chargé seulement au moment de signer ; uqr ;
la crate blake2.
Ce que l'acte écrit dans la base de production (donnée runtime)
- Migrations 0005 à 0008, additives :
- 0005 : les crans, avec les anciens mots gardés ;
- 0006 : les tables du vote, vides ;
- 0007 :
units.kindet le journalmodule_amendments; - 0008 : les objections, les coquilles et les messages, et index ; en production, aucun signalement à convertir (0 le 31/10 à 06 h 58).
- Ajouts gardés, journalisés, une seule fois :
- E1 et E2 au cran 4, dans les deux groupes (4 lignes) ;
- un module titre (cran 4) et un module d'ordre par section (cran 2, 8 sections) par document, soit 18 modules, chacun avec sa version en vigueur, l'état présent.
- La mesure de participation dans
settings. - La republication de Monnaie libre : trois publications en file (crans E1 et E2, modules) ; rien pour le groupe d'essai.
- Aucun article, aucun vote, aucune proposition existante n'est touché.
Répétition faite le 31/10 de 10 h 02 à 10 h 06, avec le serveur de 4d4adcc (target/debug),
sur une copie fraîche de la base de production (la santé disait 87273156), sans publication
configurée. Avant et après la montée :
| Avant | Après | |
|---|---|---|
| Migrations | 1–4 | 1–8 |
| Unités | 66 articles standard |
66 articles (62 au cran 3, 4 au cran 4), 16 ordres au cran 2, 2 titres au cran 4 |
| Propositions d'article | 6 en vigueur, 66 ouvertes | 6 en vigueur, 64 textes ouverts et 2 propositions d'inertie ouvertes (les mêmes 72) |
| Modules | — | 18, en vigueur |
| Révisions | 74 | 92 |
| Traductions | 140 | 144 |
| Votes, adoptions, signalements | 0, 0, 0 | 0, 0, 0 |
| Identités | 1 | 1 |
Ce que montrent les journaux :
- 4 lignes « inertia amendment applied » et 2 lignes « modules added » ;
- dans la file : 3 publications, toutes pour le document de Monnaie libre ;
integrity_checkok,foreign_key_checkvide.
Un second démarrage ne rejoue rien : mêmes comptes, journaux 4 / 2, file à 6.
Avant — prémisses vivantes
- La production sert
8727315:curl -s https://decision.librodrome.org/api/health→"build":"87273156". Si elle sert71819f9(M3a) ou74f96be(M2), l'acte reste valable. 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.- Dans
~/harness/etat/relectures.json, ces relectures sont inscrites « ok » :a576b68,71819f9,74f96be,9c8f4cc,cd7e683,924a40d,033b331,4d4adcc. Aucune autre relecture de ce code n'est en cours. git diff 8727315 4d4adcc -- docker/ .woodpecker/ .env data/ne montre que les trois lignes de commentaire surLD_VOTE_ACCOUNT. Sur sonic,grep -c LD_VOTE_ACCOUNT /opt/libredecision-app/secrets.env→0, ou fichier absent.- La boucle est verte sur
4d4adcc: faite le 31/10 vers 10 h (230 tests Rust, svelte-check sans avertissement, 55 vitest, e2e 35 / 35). L'image de production se construit :docker build -f docker/app.Dockerfile --target production ., sortie 0 le 31/10 à 10 h 09 (tests rejoués dans l'image : Rust verts, 55 vitest). - Sur une copie fraîche de la base de production, juste avant la poussée :
SELECT group_concat(version) FROM _sqlx_migrations→1,2,3,4(ou plus si M2 / M3a est en ligne) ;SELECT COUNT(*) FROM votes→0;SELECT COUNT(*) FROM signals→0. Cette prémisse compte : deux signalements debout d'une même personne sur une même paire feraient échouer la migration 0008 (indexsignals_one_standing, relecture de033b331+4d4adcc). Le serveur ne démarrerait pas, et Woodpecker relancerait8727315sans aucun module, sans dégât.
Commandes exactes
cd /home/yvv/Documents/PROD/DEV/libreDecision
git push prod 4d4adcc:main
git push origin 4d4adcc: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 », « Voter cette section », et le panier ;
- l'ordre des articles en fin de section, et le titre du document qui se vote ;
- « Faire une objection » (redit, contredit), la boîte « Messages », les coquilles proposées ;
- 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 et les
modules.
Irréversibilité : partielle. Le code se remet en arrière. Ce qui reste :
- les crans en base, avec les mots d'origine à côté ;
- les 18 modules ;
- les tables nouvelles, vides ou presque ;
- les commits publiés dans le dépôt des textes.
Vérifications après
curl -s https://decision.librodrome.org/api/health→"build":"4d4adcc…", les huit premiers caractères de l'empreinte.ssh sonic 'docker logs lpk-libredecision-app 2>&1 | grep -E "inertia amendment|modules added|participation measured|published|ERROR"'→ quatre « inertia amendment applied », deux « modules added », les mesures, des publications, aucune erreur.- Redémarrage à froid (
cd /opt/libredecision-app && docker compose restart), puis les mêmes journaux : aucun ajout rejoué. - À l'écran (Yvv) :
- Monnaie libre → Acte d'engagement : en fin de section, l'ordre des articles ; « Le vote » sous la Raison d'être dit que le vote par la chaîne n'est pas encore ouvert ;
- la boîte « Messages » s'ouvre depuis le menu ;
- dans le groupe d'essai : voter « Pour » sous un article ; le panier groupe une section ; « Faire une objection » dans « Détails » d'une proposition.
Retour
-
Le code, au plus court, sur sonic :
docker tag libredecision-app:previous libredecision-app:latest, puiscd /opt/libredecision-app && docker compose up -d --force-recreate. -
Revenir à
8727315une fois les modules créés abîme l'affichage et la publication (relecture de033b331+4d4adcc, prouvé sur une base faite par8727315).open_dbtolère les migrations inconnues, mais l'image ancienne lit toute la tableunits:- le titre et les ordres apparaissent comme 9 faux articles par document (un titre au corps vide, des listes d'identifiants), comptés « en vigueur » et « à voter » ;
- à son démarrage, elle republie Monnaie libre avec eux (
publish::resync) ; - elle lit les crans « 3 » et « 4 » comme
standard, ce qui est sans effet tant qu'il n'y a aucun vote.
Ce retour peut aussi venir seul : l'étape
retablirde.woodpecker/app.ymlrelancelibredecision-app:previoussi la nouvelle version ne répond pas dans les 10 minutes.Conduite retenue par défaut (Yvv peut la corriger) :
- on ne revient pas à la main vers
8727315: on corrige en avant, par un nouveau déploiement ; - si
retablirjoue, on laisse8727315servir le temps de corriger. La publication fausse ne perd rien : elle part dans le dépôt des textes provisoire, et le déploiement suivant republie le bon texte par-dessus. Le contexte : 1 identité et 0 vote en production.
-
Les crans, les modules, les tables nouvelles : pas de retour automatique. Ils sont additifs, ou gardent l'ancien mot à côté.
-
Les commits publiés dans le dépôt des textes : on ne les retire pas sans réécrire l'historique de ce dépôt, ce qui serait un acte « supprime ». On publierait par-dessus.
Exécution
Acte exécuté le 01/11/2026, 22h52-23h40, par orch (session libreDecision), armé par Yvv dans cette session (« déploie. »).
Écart au dossier : seule git push prod 4d4adcc:main est partie. Les deux poussées vers
origin (4d4adcc:main et chantier/acte-certification) relèvent de « pousse », absent du message
d'armement ; elles attendent ce mot. Leçon : un dossier « déploie » ne liste que la poussée qui met en
ligne. Une poussée vers origin est un acte « pousse » à part.
Prémisses revérifiées de 22 h 52 à 22 h 53 :
- santé
87273156; prod/main=origin/main=8727315;- les huit relectures inscrites « ok », aucune autre en cours ;
- trois lignes de commentaire seulement dans
docker/,.woodpecker/,.envetdata/;secrets.envabsent sur sonic ; - boucle et image du 31/10, inchangées depuis ;
- sur une copie fraîche : migrations
1,2,3,4, 0 vote, 0 signalement, 1 identité, 72 propositions. La copie a été retirée aussitôt.
Mise en ligne :
- 22 h 53 :
git push prod 4d4adcc:main→8727315..4d4adcc 4d4adcc -> main; - 23 h 06 : la santé répond
{"build":"4d4adcc2","ok":true}; elle répondait87273156jusqu'à 22 h 54.
Journaux du démarrage (22 h 06 UTC) :
- 4 lignes « inertia amendment applied » (E1 et E2, essai et Monnaie libre) ;
- 2 lignes « modules added » ;
- les mesures de participation (médiane absente, échantillon 0) ;
- une publication,
published … commit="12134cd49eccadbf25a157bffa8b627e869099e9", qui regroupe les trois mises en file ; - aucune ligne ERROR ni WARN.
Image de retour : libredecision-app:previous = sha256:625646c7e73d…, construite le 30/10 à 15 h 44
(8727315).
Redémarrage à froid (docker compose restart, 23 h 35) :
- le serveur écoute en
4d4adcc2,RestartCount0 ; - aucun ajout rejoué ;
- la publication de reprise dit
commit="unchanged".
La sonde de santé du script, faite de l'intérieur du conteneur, a échoué : l'image n'a ni wget ni
curl. Le script s'est donc arrêté avant de se retirer ; je l'ai retiré à la main. La santé a été
vérifiée de l'extérieur : 4d4adcc2.
Invariants sur une copie fraîche, après le redémarrage, identiques à la répétition du 31/10 à la ligne près :
- migrations
1,…,8; - 62 articles au cran 3, 4 au cran 4, 16 ordres au cran 2, 2 titres au cran 4 ;
- 90 propositions, dont les mêmes 72 d'article ;
- 92 révisions, 144 traductions, 0 vote, 1 identité ;
- journaux 4 et 2 ;
integrity_checkok,foreign_key_checkvide.
Retirés, parce qu'ils portaient des données réelles : la copie de la prémisse 6, la copie d'après, la
répétition /tmp/ld-repetition-m4 et le journal de construction.
Reste à l'écran pour Yvv : les vérifications « À l'écran » ci-dessus.