forked from yvv/decision
132 lines
6.6 KiB
Markdown
132 lines
6.6 KiB
Markdown
# 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 : 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
|
||
|
||
```sh
|
||
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.
|