diff --git a/actes/2026-10-31-m4-vote-modules-objections.md b/actes/2026-10-31-m4-vote-modules-objections.md new file mode 100644 index 0000000..3c73c3d --- /dev/null +++ b/actes/2026-10-31-m4-vote-modules-objections.md @@ -0,0 +1,164 @@ +# 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. diff --git a/docs/chantiers/acte-certification/tableau.md b/docs/chantiers/acte-certification/tableau.md index 2053b5c..26ea6c1 100644 --- a/docs/chantiers/acte-certification/tableau.md +++ b/docs/chantiers/acte-certification/tableau.md @@ -7,11 +7,11 @@ Orch seul sur le dépôt (sous-agents en copies de travail). **M1 (L1–L8) en ligne** depuis le 2026-10-30 à 15 h 45 (`8727315`, acte `actes/2026-10-30-m1-mise-en-ligne.md`) ; Raison d'être -publiée (commit `35864eb` du dépôt des textes). Actes M3a et M2 figés, ils attendent « déploie ». -Sur `chantier/acte-certification` : B2 (`7ffa4fd`, repris en `9c8f4cc`), F (`cd7e683`) et `924a40d` -(C22) ; boucle verte, e2e 31 / 31 ; relecture indépendante en cours. Le lot D, fini sur sa branche, -fusionne chantier dans `lot/d-modules` (17 fichiers en conflit). Puis : relecture de la fusion D, -répétition des migrations 0007 et 0008 sur une copie de la base de production, dossier d'acte. +publiée (commit `35864eb` du dépôt des textes). Sur `chantier/acte-certification` : tous les lots +fusionnés (B2, F, D), puis `4d4adcc` (mineurs de la relecture de F) ; boucle verte, e2e 35 / 35. +Relecture de `033b331+4d4adcc` en cours. Répétition sur une copie de la base de production faite +(10 h 02–10 h 06). Dossier M4 préparé (`actes/2026-10-31-m4-vote-modules-objections.md`), il +remplace M2 et M3a ; on le fige à l'« ok » de la relecture et quand l'image de production se construit. ## Critère de livraison (liste fermée) @@ -41,10 +41,10 @@ chaîne (question stratégique, `docs/recherche/vote-g1-chaine.md`) ; l'affichag | A | L1–L6 : entrée, DA, menu, listes, Décisions | high | **en ligne** 30/10 15 h 45 | `lot/a-entree` | | R | L7–L8 : Raison d'être (amendement de seed gardé), versions groupées | high | **en ligne** 30/10 15 h 45 | `lot/r-texte` | | B | L9 : vote déplié, vote groupé, vote par transaction de 0,1 Ğ1 | xhigh | fusionné et relu (`74f96be`) ; acte M2 figé (vote par la chaîne éteint) | `lot/b-vote` | -| B2 | Corrections du vote avant de l'ouvrir (relecture de `74f96be`, points 2 à 8) | xhigh | fusionné (`7ffa4fd`) ; relu « à reprendre », repris en `9c8f4cc`, en relecture | `lot/b2-vote-sur` | +| B2 | Corrections du vote avant de l'ouvrir (relecture de `74f96be`, points 2 à 8) | xhigh | fusionné (`7ffa4fd`) ; relu « à reprendre », repris en `9c8f4cc`, relu « ok » | `lot/b2-vote-sur` | | C | L10 : cinq crans, échelle, réglages | xhigh | fusionné et relu (`a576b68`, `71819f9`) ; acte M3a figé | `lot/c-inertie` | -| D | L11 + titre du doc en module (4) + restes mineurs des relectures | high | fini sur sa branche (e2e 29 / 29) ; fusionne chantier dans sa branche | `lot/d-modules` | -| F | L12–L13 : objections, coquilles validées, messages, délai de 3 jours | xhigh | fusionné (`cd7e683`), boucle verte ; en relecture | `lot/f-objections` | +| D | L11 + titre du doc en module (4) + restes mineurs des relectures | high | fusionné (`033b331`), boucle verte ; en relecture | `lot/d-modules` | +| F | L12–L13 : objections, coquilles validées, messages, délai de 3 jours | xhigh | fusionné (`cd7e683`), relu « ok » ; mineurs repris en `4d4adcc` (en relecture) | `lot/f-objections` | ## Questions (réponse par défaut appliquée tant qu'Yvv n'a pas tranché) @@ -75,12 +75,17 @@ Défauts posés par orch, sans question (Yvv peut les corriger) : - M1 : **exécuté** le 30/10/2026, 15 h 29 – 15 h 52 (`actes/2026-10-30-m1-mise-en-ligne.md`). - M3a (L10) : **figé** sur `71819f9` (`actes/2026-10-30-m3-inertie-cinq-crans.md`), attend « déploie ». - M2 + M3a (L9 et L10) : **figé** sur `74f96be` (`actes/2026-10-31-m2-vote.md`), le vote par la chaîne éteint ; remplace M3a s'il est armé. +- M4 (L9 à L13) : **préparé** sur `4d4adcc` (`actes/2026-10-31-m4-vote-modules-objections.md`), le vote par la chaîne éteint ; remplace M2 et M3a. Restes mineurs de `71819f9` et du lot B : faits dans le lot D. À dire à Yvv : dans le groupe d'essai (C = 1), dès 16 membres une voix seule fait passer un texte, la garde B^W passant sous la précision du calcul (ADR 0007). Monnaie libre (C = 50) n'est pas -concernée. +concernée. Pour deux voix dans l'essai quel que soit W : C = 2. + +À demander à Yvv (relecture de `cd7e683`) : sur une version retenue par une objection, ni retirer +son vote ni passer à « contre » ; à la levée, l'adoption tourne aussitôt. Le garder, ou permettre de +retirer son vote et de voter « contre » sur une version retenue ? Défaut : tel quel (ADR 0010). Ensuite : Chaque mise en ligne (M1 à M4) attend « déploie » d'Yvv et une relecture indépendante inscrite. La migration « Raison d'être » touche la base de production : elle ne