# Brouillon — acte M6 (Propositions seed, quorum, tampon des votes, lecteur, accueil, textes du quorum) > **Brouillon, pas figé.** Tenu par l'intégrateur libredecision-d4. Il passe sous `actes/` quand il est > figé sur un sha, avec sa relecture indépendante inscrite. Orch (dev-63) l'exécute sous son mandat > (« déploie » et « pousse », du 03/11 au 08/11). ## Intention Mettre en ligne la revue d'Yvv du 02/11 et ses décisions du 02/11 et du 03/11 : - **H** : l'accueil sous la voûte (fusionné, `a3c0a76`) ; - **S** : les Propositions seed, la publication suspendue sans texte en vigueur, le quorum par cran, la licence `AGPL-3.0-or-later` (fusionné, `349c8ed`) ; - **V** : le tampon des votes, le vote simulé partout tant que la chaîne est fermée (à fusionner) ; - **T** : les articles du seed qui décrivent le quorum (à faire) ; - **U** : le lecteur, la ligne « N oui pour passer · N non bloquent », le réglage du quorum (à faire). ## Décisions d'Yvv que l'acte applique (registre) - Propositions seed au cran 2 ; aucun article en vigueur au départ (02/11). - Quorum par cran 12 · 12 · 50 · 50 · 50 dans Monnaie libre, 1 à l'essai ; l'auteur le change avant le premier vote (02/11) ; sous le quorum, les votants manquants comptent comme « non » (03/11). - Un vote simulé compte, puis s'efface à l'ouverture de la chaîne par un acte « supprime » (02/11). - **Q11** (03/11, « Pas avant des votes prouvés ») : un texte entré en vigueur par des votes simulés est en vigueur sur le site, mais ne se publie pas ; la publication attend un texte passé par les seuls votes prouvés. Dans Monnaie libre, rien n'est publié avant l'ouverture de la chaîne. - **Q12** (03/11, « Oui, retire-les ») : retirer les deux propositions d'inertie d'Yvv du 29/10, I1 → 5 et E1 → 5, **avant** que le nouveau serveur démarre (étape 0 ci-dessous). ## Étape 0 — avant la poussée : retirer I1 → 5 et E1 → 5 sur la production actuelle **Pourquoi avant** : l'amendement des Propositions seed (`seed_proposal_amend.rs`) tourne au démarrage et n'est décidé qu'une fois par document (l. 319-334, une ligne dans `seed_proposal_amendments`). Si une proposition d'inertie d'un membre est encore ouverte, il refuse le cran (`inertia_proposal`) pour de bon : I1 resterait au cran 3 et E1 au cran 4. Une proposition retirée sans vote ne compte plus (sa requête ne retient que `status IN ('open','applied')` ou une proposition votée). **La voie : le geste d'Yvv à l'écran**, sur la version en ligne `3f10a0e`. Vérifiée le 03/11 entre 05 h 50 et 05 h 56 sur un serveur local de `3f10a0e` (base neuve du seed, proposition I1 → 5 créée comme en production ; captures dans le scratchpad de libredecision-d4, `shots/3-row.png`, `6-withdraw-visible.png`, `7-after.png`). Pas d'écriture SQL en production. 1. Yvv, connecté, ouvre `/g/monnaie-libre/docs/acte-engagement-certification`. 2. Il descend au bloc « Propositions en cours » et clique le filtre « Les miennes » : il ne reste que ses deux propositions d'inertie. 3. Sous l'intertitre « INTRODUCTION » (I1) : la ligne « inertie vers 5 / 5 · très haute », « 0 pour · 0 contre », pastille « ta proposition ». Il clique la ligne. 4. Le vote se déplie sous la ligne (l'adresse prend `?vote=`). Il clique « Coquilles, traductions, objections, historique ». 5. Le panneau de droite s'ouvre sur « Détails » : « inertie vers 5 / 5 · très haute · proposé par Yvv ». Il clique « Retirer ma proposition ». 6. Message « Proposition retirée. » ; la ligne disparaît des propositions en cours (en base : `status = 'withdrawn'`, `left_at` posé ; la route relance un balayage, sans effet à 0 vote). 7. Même chose pour E1, sous l'intertitre « ENGAGEMENTS FONDAMENTAUX » (déduit de la liste groupée par section ; non vu en local). **Vérification**, sur une copie fraîche de la base de production : `SELECT unit_id, status FROM proposals WHERE kind = 'inertia'` → 2 `withdrawn`, 0 `open`. **Répétition** : sur une copie fraîche, le retrait par la route avec le serveur `3f10a0e`, puis le démarrage du serveur M6 sur cette copie → I1, E1, E2 au cran 2, et `seed_proposal_amendments` dit `level_outcome = 'applied'` pour les trois. Si le retrait n'est pas fait, l'acte reste valable : I1 et E1 démarrent aux crans 3 et 4, E2 au cran 2, et le journal dit `inertia_proposal`. ## Ce que l'acte écrit dans la base de production (donnée runtime) - **Migrations additives** : `0009` (Propositions seed : `proposals.seed_featured`, la table `seed_proposal_amendments`), `0010` (tampon : `ballots.mode` défaut `'chain'`, `ballot_lines.outcome` vide, l'index `ballots_doc` ; aucune ligne réécrite), `0011` (quorums : `documents.quorums`, `units.quorum`, la table `quorum_amendments`). - **Amendement Propositions seed** (`2026-11-02-i1/e1/e2-proposition-seed`), par document et par article, seulement si personne n'y a touché (0 vote, 0 bulletin, aucune coquille, révision, traduction de membre ni signalement, origine seed, texte identique) : la version passe d'en vigueur à ouverte et marquée ; `units.in_force_id` à NULL ; une ligne `revisions` de type `seed_proposal` ; le cran à 2, avec une ligne `inertia_changes`, si personne n'a touché au cran (aucune proposition d'inertie ouverte, appliquée ou votée : d'où l'étape 0) ; une ligne `seed_proposal_amendments` ; dans Monnaie libre, une ligne `outbox`, qui attend. - **Amendement quorums** (`2026-11-03-quorums-par-cran`), une fois par document : `documents.quorums` = `[12,12,50,50,50]` (Monnaie libre), `[1,1,1,1,1]` (essai), là où il est NULL ; une ligne `quorum_amendments` ; une ligne `outbox` dans Monnaie libre. - **Le tampon** : la première mise en route n'écrit rien du tampon. - **La publication** : suspendue. Aucun article n'est plus en vigueur dans Monnaie libre, puis (règle « pas avant des votes prouvés », stricte, confirmée par orch le 03/11 à 06 h 11) rien ne part tant qu'une entrée simulée ne tient pas sur les seuls votes prouvés. Le dépôt des textes garde son dernier état. ## Effet attendu - Les deux groupes : I1, E1 et E2 sont des « Propositions seed », ouvertes, au cran 2 ; aucun article n'est en vigueur ; les modules (titre du document au cran 4, ordre de chaque section au cran 2) restent en vigueur. - Le seuil se lit en quorum : 12 · 12 · 50 · 50 · 50 votants dans Monnaie libre ; au cran 2, 9 « pour » passent avec 3 « contre » au plus. - **Le vote simulé s'ouvre dans Monnaie libre dès la mise en ligne** (pas de `LD_VOTE_ACCOUNT`) : toute personne qui ouvre le groupe y vote, une personne invitée comprise ; le vote compte aussitôt, marqué « simulé » ; 9 « pour » simulés font entrer I1, E1 ou E2 **sur le site**, sans publication. À l'ouverture de la chaîne, l'acte « supprime » (`ld-server discard-simulation --apply`) écartera ces votes et réexaminera ce qu'ils ont fait entrer. Effet de « simule le vote à tout endroit » et « il compte, puis s'efface » ; orch le porte à son rapport, pas en question (03/11, 06 h 11). - L'accueil sous la voûte. Irréversibilité : **partielle**. Le code se remet en arrière ; les données changées restent (I1, E1, E2 sortis de la vigueur, crans à 2, quorums posés, votes simulés éventuels). ## Commande exacte Selon la règle du canon du 02/11, un dossier « déploie » ne liste que la poussée qui met en ligne : vers le remote `prod` (`gitea@git.open.us.org:EHV/decision.git`), branche `main`, le sha figé (Woodpecker : `.woodpecker/app.yml`, puis `maquette.yml`). La ligne exacte est écrite au gel, dans le dossier sous `actes/`. ## Vérifications après - [ ] Santé vue de l'extérieur : `curl -s https://decision.librodrome.org/api/health` → `"build":""`. - [ ] Journaux : `ssh sonic 'docker logs lpk-libredecision-app 2>&1 | grep -E "amendment|quorum|publication|ERROR|WARN"'` → les amendements « applied » (Propositions seed, quorums), « publication suspended », aucune erreur. - [ ] Redémarrage à froid (`docker compose restart` dans `/opt/libredecision-app`), santé, journaux : aucun amendement rejoué. - [ ] Sur une copie fraîche : les comptes de la répétition, à la ligne près ; `integrity_check` ok, `foreign_key_check` vide ; copie retirée ensuite. - [ ] Le dépôt des textes n'a reçu aucun commit (`git ls-remote` de `yvv/decision-depot-textes-reference`, branche `main` : inchangée depuis avant l'acte). - [ ] À l'écran (Yvv, à son retour) : l'accueil sous la voûte ; l'Acte d'engagement : les Propositions seed, aucun article en vigueur ; voter dans Monnaie libre affiche « simulé ». ## Retour - **Le code** : `docker tag libredecision-app:previous libredecision-app:latest`, puis `cd /opt/libredecision-app && docker compose up -d --force-recreate`. `previous` sera `3f10a0e`. Le serveur tolère les migrations qu'il ne connaît pas (`set_ignore_missing(true)`, `lib.rs:100`). - **Les données** : pas de retour automatique. `3f10a0e` montrerait I1, E1, E2 comme propositions ouvertes sans la marque, et aucun article en vigueur ; les votes simulés éventuels y compteraient comme des votes du serveur. Un retour du code au-delà de quelques minutes demande un acte de données à part. - **La publication** : rien n'est parti, rien à retirer. ## Copie de la base de production (prise par orch, lecture seule, aucune écriture côté production) Dans `/tmp/ld-m6-copie` (700 / 600), par `docker exec lpk-libredecision-app cat /data/` pour `libredecision.db`, `-wal`, `-shm`, puis `PRAGMA integrity_check; PRAGMA foreign_key_check;` en `sqlite3 -readonly`. Pas un instantané atomique : `integrity_check` le dirait, et l'on reprend la copie. Première copie : 03/11 à 06 h 11 min 12, production `3f10a0e8`, « ok », aucune clé étrangère cassée. Seconde copie juste avant la poussée. Lecture des prémisses : `m6/counts.sh` (scratchpad de l'intégrateur), en lecture seule. Répétition : `m6/repetition.sh`, sur une copie de la copie, publication vers un dépôt nu local ; `/tmp/ld-m6-copie` n'est jamais écrit. ## Prémisses à vérifier (à compléter au gel) 1. La production sert `3f10a0e` : santé `"build":"3f10a0e8"` ; `prod/main` → `3f10a0e`. 2. Sur une copie fraîche : aucune proposition d'inertie `open` ; 0 vote ; I1, E1, E2 en vigueur, aux crans 3, 4, 4, dans les deux groupes, intouchés (sinon l'amendement les refuse avec sa raison, et l'acte reste valable). 3. Sur la même copie : aucune proposition qui aurait déjà ses voix au nouveau seuil (attendu : 0 vote). 4. La relecture indépendante du sha figé, inscrite « ok » dans `~/harness/etat/relectures.json` ; aucune autre relecture de ce code en cours. 5. `git diff 3f10a0e -- docker/ .woodpecker/ .env data/` : à lire. 6. Boucle verte sur `` et image de production construite.