Files
decision/actes/2026-10-31-m4-vote-modules-objections.md
T

165 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 : PRÉPARÉ** sur `4d4adcc` — la relecture de `033b331+4d4adcc` est en cours ; on fige à son « ok »
## 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` | **en cours**, avec `4d4adcc` |
| Corrections M1–M4 de la relecture de F | `4d4adcc` | **en cours**, avec `033b331` |
Ce qui change hors du code (vérifié le 31/10 à 10 h 10) :
- `docker/app-compose.yml` reçoit **trois lignes de commentaire** (où poser `LD_VOTE_ACCOUNT`), et
rien d'autre ;
- `seeds/acte-engagement-certification.json` passe 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.kind` et le journal `module_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_check` ok, `foreign_key_check` vide.
Un second démarrage ne rejoue rien : mêmes comptes, journaux 4 / 2, file à 6.
## Avant — prémisses vivantes
1. La production sert `8727315` : `curl -s https://decision.librodrome.org/api/health` →
`"build":"87273156"`. Si elle sert `71819f9` (M3a) ou `74f96be` (M2), l'acte reste valable.
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. 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.
4. `git diff 8727315 4d4adcc -- docker/ .woodpecker/ .env data/` ne montre que les trois lignes de
commentaire sur `LD_VOTE_ACCOUNT`. Sur sonic, `grep -c LD_VOTE_ACCOUNT /opt/libredecision-app/secrets.env`
→ `0`, ou fichier absent.
5. 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). Reste à vérifier que l'image de production se construit :
`docker build -f docker/app.Dockerfile --target production .`, sortie 0.
6. Sur une copie fraîche de la base de production :
- `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`.
## Commandes exactes
```sh
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`,
puis `cd /opt/libredecision-app && docker compose up -d --force-recreate`.
- **Une image plus ancienne sur la base migrée** : `open_db` tolère les migrations inconnues. Que
`8727315` lise correctement les unités `kind <> 'article'`, c'est à vérifier par la relecture en
cours ; le résultat sera écrit ici avant de figer.
- **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.