Compare commits

...
6 Commits
2 changed files with 180 additions and 2 deletions
+174
View File
@@ -0,0 +1,174 @@
# Acte — Mise en ligne M6b (F1.1, F1.2 et N1.1 disent le quorum par cran)
Classe : déploie
Projet : libreDecision Date : 2026-11-03
**État : EXÉCUTÉ (03/11, 07h56-08h13, par orch dev-63 sous mandat ; pipeline 38)** — figé sur `bb4bdf5` (`bb4bdf58c114fb88ac4e154a7ffe0b06ff359b3e`) le 03/11 à 07 h 55 — préparé
par l'intégrateur libredecision-d4 ; exécuté par orch (dev-63) sous son mandat (« déploie » et « pousse »,
du 03/11 au 08/11). Relecture indépendante : « bb4bdf5 : ok » (prémisse 3).
## Intention
Mettre en ligne le lot T : les trois articles du seed qui décrivaient encore l'ancien plancher C
(F1.1 « Formule du seuil WoT », F1.2 « Paramètres par défaut », N1.1 « Niveaux d'inertie ») disent le
quorum par cran (ADR 0013), en fr, en et es.
**Décision d'orch (dev-63, 03/11 à 07 h 36)** : T part en M6b sans attendre la relecture d'Yvv, avec les
quatre défauts de l'intégrateur (Q13). Raison : le vote simulé est ouvert depuis M6 ; un vote, même
simulé, sur un de ces articles avant la mise en ligne figerait pour de bon le texte faux (l'amendement le
refuserait). Avec T en ligne, un vote figerait au pire un défaut de formulation, qu'un nouvel amendement
gardé corrigera tant qu'aucun vote n'a touché l'article. Les quatre questions vont à Yvv avec
`docs/chantiers/acte-certification/textes-quorum-seed.md`.
Défauts appliqués (Q13) : F1.2 n'annonce pas l'intention de remonter l'inertie ; « Propositions seed »
dans le texte voté ; l'exemple de N1.1 (7 224 membres, 120 votants) gardé comme illustration ; le groupe
d'essai non nommé.
## Ce qui part
Version `bb4bdf5`, qui contient la version en ligne `94ddb17`. Code touché :
`crates/ld-server/src/seed_amend.rs` (l'amendement), `crates/ld-server/src/wot.rs` (`REFRESH` rendu
public pour un test), `seeds/acte-engagement-certification.json` (bases neuves), des tests ; le reste est
documentation. Configuration (`docker/`, `.woodpecker/`, `.env`, `data/`) : rien (vérifié le 03/11 à
07 h 37).
## Ce que l'acte écrit dans la base de production (donnée runtime)
- **Aucune migration.**
- **Amendement de seed gardé** `2026-11-03-f1-1-quorum`, `-f1-2-quorum`, `-n1-1-quorum`, décidé une fois
par document, dans une transaction, seulement si personne n'a touché l'article : 0 vote (simulé
compris), 0 ligne de bulletin, aucune coquille, traduction de membre ni objection, texte d'avant
identique à l'empreinte attendue ; pour F1.2 et N1.1, la révision 2 admise seulement si c'est
l'amendement de M5, et lui seul.
- `proposals` : titre et texte fr, révision + 1 (F1.1 → 2 ; F1.2 et N1.1 → 3) ;
- `revisions` : une ligne `amendment` (l'ancien texte gardé, diff) ;
- `translations` : en et es remplacés ;
- `seed_amendments` : la décision ;
- `outbox` : une ligne par article dans Monnaie libre, qui attend (publication suspendue) ; rien pour
l'essai.
Refus possibles, le texte d'avant reste : `not_a_seed`, `voted_into_force`, `confirmed`, `votes`,
`ballots`, `corrected`, `translation_edited`, `signalled`, `revised`, `text_differs`.
- Les amendements de M5 sur F1.2 et N1.1 sont marqués dépassés : ils ne décident plus rien.
- **Aucun vote, aucune autre proposition, aucun autre article n'est touché ; la publication reste
suspendue.**
## Répétition
**Faite le 03/11 de 07 h 43 à 07 h 44**, avec le serveur de `bb4bdf5` (binaire de la boucle), sur une copie
de la copie de production prise par orch à 07 h 36 min 53 (santé `94ddb175`), publication vers un dépôt nu
local (`m6/repetition.sh` ; journal `m6/repetition-m6b.log`, scratchpad de l'intégrateur).
| | Avant | Après |
|---|---|---|
| F1.1 (deux groupes) | ouverte, seed, révision 1, 0 vote, 0 bulletin | révision 2 |
| F1.2, N1.1 (deux groupes) | ouvertes, seed, révision 2, 0 vote, 0 bulletin | révision 3 |
| Révisions | 107 | 113 |
| Traductions | 144 | 144 (en, es des trois articles remplacés) |
| `seed_amendments` | 10 | 16 |
| File de publication (Monnaie libre) | 4 en attente, 13 faites | 7 en attente, 13 faites |
| Commits vers le dépôt des textes (local) | — | 0 (« publication suspended ») |
| Tout le reste (`m6/counts.sh` : migrations 1–11, propositions, unités en vigueur, I1/E1/E2, `inertia_changes`, amendements de M6, votes, bulletins, signalements, identités) | | identique à la ligne près |
`integrity_check` ok, `foreign_key_check` vide. Journal : six « seed amendment applied »
(`2026-11-03-f1-1-quorum`, `-f1-2-quorum`, `-n1-1-quorum` × essai, Monnaie libre), « publication
suspended », aucune ligne ERROR ni WARN. **Un second démarrage ne rejoue rien** (comptes identiques).
## Effet attendu
- Dans les deux groupes, F1.1, F1.2 et N1.1 montrent les nouveaux textes, en fr, en et es.
- Rien d'autre ne change ; le dépôt des textes reste à `9e0f45a`.
Irréversibilité : **partielle**. Le code se remet en arrière ; les nouveaux textes restent (l'ancien est
dans l'historique de chaque proposition).
## Avant — prémisses vivantes
1. La production sert `94ddb17` : santé `"build":"94ddb175"` ; `prod/main` → `94ddb17`.
2. Sur une copie fraîche, `m6/m6b-premisse.sh <db>` (scratchpad de l'intégrateur, lecture seule) :
6 lignes, toutes `open`, origine `seed`, révision 1 pour F1.1 et 2 pour F1.2 et N1.1, votes,
bulletins, coquilles et objections à 0 ; migration 11. Un article touché est refusé par l'amendement
avec sa raison, et l'acte reste valable pour les autres. **Lu par orch sur la copie de 07 h 36 min 53**
(santé `94ddb175`) : l'attendu exact ; 0 vote et 0 ligne de bulletin en tout. À relire sur la copie
fraîche juste avant la poussée.
3. La relecture indépendante de `bb4bdf5`, inscrite « ok » dans `~/harness/etat/relectures.json`.
**Faite** : sous-agent neuf, sans le contexte de l'intégrateur, sur `94ddb17..bb4bdf5`, rendue le 03/11
à 07 h 53, inscrite à 07 h 55 (transcript
`~/.claude/projects/-home-yvv-Documents-PROD-DEV-libreDecision/d0a7108b-7f2f-484a-bcb0-de339238199d/subagents/agent-ad97443391b59fb37.jsonl`,
dernière ligne « bb4bdf5 : ok »). Ce qu'elle a exécuté :
- une base faite par les vrais binaires `dc2de09`, `8727315`, `4d4adcc`, `3f10a0e`, `94ddb17`, puis le
candidat ; écritures exactement celles annoncées, base entière comparée ;
- un second démarrage et un retour vers `94ddb17` sans rejeu ;
- la garde avec de vrais votes : refus `votes`, `ballots`, `no_open_version`.
Ce qu'elle laisse **à reprendre, dans le texte** (aucun bloquant ; mettre en ligne reste un gain net,
les textes de M5 décrivent encore C = 50) :
- F1.2 « ensuite, il ne change plus » : faux après l'acte « supprime » (les votes simulés effacés ne
laissent pas de trace, le quorum redevient réglable) ;
- F1.1 « presque l'unanimité quand peu de gens votent » : faux aux crans 1 à 3 avec le quorum (à la
production, 64 · 74 · 77 · 85 · 92 % du cran 1 au cran 5 ; 9 « pour » sur 12 suffisent au cran 2).
Mineur : N1.1, première phrase (« un quorum de votants » laisse croire à un minimum) ; base née avant
M5 (pas la production) ; essai sans trace d'un vote direct retiré ; ADR 0013 et 0011 à mettre à jour.
Suite : un amendement gardé qui suit celui-ci (`follows`) peut corriger ces phrases tant que personne
n'a voté sur l'article. Proposé à orch comme lot T2 (M6c).
4. `git diff 94ddb17 bb4bdf5 -- docker/ .woodpecker/ .env data/` → vide (vérifié à 07 h 37).
5. Boucle verte sur le code de `bb4bdf5` (arbre de `33f149b`, documentation seule en plus) le 03/11 de
07 h 36 à 07 h 43 : fmt, clippy `-D warnings`, 294 tests Rust, svelte-check 0 / 0, 56 vitest, build,
e2e 36 / 36. Image de production construite le 03/11 à 07 h 48, sortie 0 (tests Rust rejoués dedans,
tous « ok » ; l'étape web reprise du cache, le web n'ayant pas changé depuis `94ddb17`) ; image de
contrôle retirée à 07 h 48.
## Commande exacte
```sh
cd /home/yvv/Documents/PROD/DEV/libreDecision
git push prod bb4bdf58c114fb88ac4e154a7ffe0b06ff359b3e:main
```
## Vérifications après
- [x] Santé vue de l'extérieur → `"build":"bb4bdf58"`.
- [x] Journaux : six « seed amendment applied » (F1.1, F1.2, N1.1 × essai, Monnaie libre),
« publication suspended », aucune ligne ERROR ni WARN.
- [x] Redémarrage à froid : aucun amendement rejoué.
- [x] Sur une copie fraîche : les trois articles à la nouvelle révision dans les deux groupes ; le reste
identique à la ligne près à la copie d'avant (comptes de `m6/counts.sh`) ; `integrity_check` ok.
- [x] Le dépôt des textes reste à `9e0f45a`.
## Retour
- **Le code** : `docker tag libredecision-app:previous libredecision-app:latest`, puis
`cd /opt/libredecision-app && docker compose up -d --force-recreate`. `previous` sera `94ddb17`, qui
attend aussi le premier texte pour publier : pas de coupure de la publication à faire.
- **Les textes** : pas de retour automatique ; l'ancien texte reste dans l'historique de chaque
proposition, un nouvel amendement gardé pourrait le remettre.
## Exécution
Acte exécuté le 03/11/2026, 07h56-08h13, par orch (session dev-63, e66db8ca), sous mandat
« déploie » (inscrit du 03/11 au 08/11) ; décision d'orch de 07h36 (T sans attendre Yvv).
- Dossier relu en entier à 07h56 ; relecture « bb4bdf5 : ok » vue inscrite (07h55) ; aucune autre
relecture de ce code en cours (PRÊT M6b de libredecision-d4).
- Prémisses, 07h57:04 : santé `{"build":"94ddb175","ok":true}`, `prod/main` = `94ddb17` ;
`git diff 94ddb17 bb4bdf5 -- docker/ .woodpecker/ .env data/` vide ; pipeline 37 `success` en tête.
- Copie fraîche, 07h57:11 (`/tmp/ld-m6b-avant`, 700/600) : `integrity_check` ok, `foreign_key_check`
vide ; `m6b-premisse.sh` : l'attendu exact (6 lignes `open`, `seed`, révisions 1 / 2 / 2, tous les
compteurs à 0 ; 0 vote, 0 bulletin en tout ; migration 11). Dépôt des textes avant : `9e0f45a`.
- Poussée `git push prod bb4bdf58c114fb88ac4e154a7ffe0b06ff359b3e:main` à 07h57:2x, passée du premier
coup (`94ddb17..bb4bdf5`).
- Pipeline n° 38 : `running` à 07h57:34 ; santé `bb4bdf58` à 08h02:03 ; `app` vert (`retablir` sauté) ;
`maquette` verte ; `success` à 08h12:29. `sbom-publish` échoue comme aux pipelines 36 et 37.
- Après :
- journaux : six « seed amendment applied » (`2026-11-03-f1-1-quorum`, `-f1-2-quorum`,
`-n1-1-quorum`, essai et Monnaie libre), « publication suspended … waiting=7 », aucune ligne ERROR
ni WARN ;
- redémarrage à froid à 08h12:44 : « listening … build=bb4bdf58 », « publication suspended …
waiting=7 », aucun amendement rejoué ; santé `bb4bdf58` ;
- copie fraîche, 08h13:02 (`/tmp/ld-m6b-apres`) : F1.1 en révision 2, F1.2 et N1.1 en révision 3,
dans les deux groupes, toujours `open`, 0 vote ; `counts.sh` comparé à la copie d'avant : seuls
changent révisions 107 → 113, `seed_amendments` 10 → 16, file 4 → 7 en attente (13 faites), comme
la répétition ; le reste identique à la ligne près ; `integrity_check` ok, `foreign_key_check`
vide ;
- dépôt des textes : `9e0f45a`, inchangé.
- `main` local avancé sur `bb4bdf5` (`git fetch . bb4bdf5…:main`, depuis `94ddb17`).
- Copies retirées à 08h13:16 : `/tmp/ld-m6b-copie` (07h36:53, fournie à l'intégrateur),
`/tmp/ld-m6b-avant`, `/tmp/ld-m6b-apres`. Les copies de répétition de l'intégrateur sont à retirer
par lui.
- Image de retour : `libredecision-app:previous` (`94ddb17`), sans coupure de la publication (§ Retour).
+6 -2
View File
@@ -72,8 +72,10 @@ Lots en cours, en copies de travail (`.claude/worktrees/agent-<id>`) :
gardé `2026-11-03-f1-1/f1-2/n1-1-quorum` (garde étendue à la révision 2 de M5) ; fichier de relecture
pour Yvv `textes-quorum-seed.md` (quatre points à trancher, Q13). Boucle verte : 294 tests Rust, e2e
36 / 36 (C18 hors délai une fois, vert à la relance). **Course** : un vote, même simulé, sur un de ces
articles avant la mise en ligne fait refuser l'amendement pour lui, définitivement. Proposé : M6b,
dès la relecture d'Yvv.
articles avant la mise en ligne fait refuser l'amendement pour lui, définitivement. **M6b** (décision
d'orch, 07 h 36, sans attendre Yvv) : relecture « bb4bdf5 : ok » inscrite à 07 h 55, dossier figé,
PRÊT M6b envoyé à orch à 07 h 56. La relecture laisse trois phrases à reprendre (F1.1, F1.2, N1.1) :
lot T2 proposé (Q14).
- **U** (`adddf06…`, `lot/u-lecteur`) : le lecteur. Page courte ; ordonnancement par poignées en
fin de section ; trois natures de modules ; consoles sans doublon ; déplier ou panneau, une règle ;
**la ligne « N oui pour passer · N non bloquent »** et **le réglage du quorum par l'auteur avant
@@ -157,6 +159,7 @@ chaîne (question stratégique, `docs/recherche/vote-g1-chaine.md`) ; l'affichag
| Q11 | Un texte entré en vigueur par des votes simulés (9 « pour » au cran 2 dans Monnaie libre) se publie-t-il dans le dépôt des textes ? | **tranché** (03/11, formulaire d'orch, reçu avant 05 h 35 ; le relais disait « vers 05 h 45 ») : « Pas avant des votes prouvés » → en vigueur sur le site, pas publié ; la publication attend un texte passé par les seuls votes prouvés (dans Monnaie libre, rien avant l'ouverture de la chaîne) ; codé par V, écrit au dossier M6 |
| Q12 | En production, Yvv a ouvert le 29/10 deux propositions d'inertie, I1 → 5 et E1 → 5 (0 vote). Ouvertes au démarrage de M6, elles retiennent I1 et E1 aux crans 3 et 4 pour de bon (amendement décidé une fois). Les retirer ? | **tranché** (03/11, formulaire d'orch, reçu à 05 h 51) : « Oui, retire-les » → avant le démarrage de M6, par le geste d'Yvv à l'écran (« Les miennes » › la ligne d'inertie › « Coquilles, traductions, objections, historique » › « Retirer ma proposition »), vérifié sur `3f10a0e` en local ; fait par Yvv à l'écran (annoncé à 06 h 07), dossier `actes/2026-11-03-m6-propositions-seed-quorum-tampon.md` |
| Q13 | Les textes du quorum (F1.1, F1.2, N1.1 ; `textes-quorum-seed.md`) : annoncer l'intention de remonter l'inertie ? « Propositions seed » dans un texte voté ? garder l'exemple 7 224 / 120 ? nommer le groupe d'essai ? | **défauts appliqués** : non ; « Propositions seed » ; garder ; ne pas le nommer. Posé à orch le 03/11 à 07 h 34, pour Yvv à son retour |
| Q14 | La relecture de `bb4bdf5` (M6b) trouve trois phrases inexactes : F1.2 « ensuite, il ne change plus » (faux après l'acte « supprime ») ; F1.1 « presque l'unanimité quand peu de gens votent » (faux aux crans 1 à 3 avec le quorum : 9 « pour » sur 12 suffisent au cran 2) ; N1.1, première phrase (« un quorum de votants » lu comme un minimum). Les corriger par un lot T2 (amendement gardé qui suit celui de M6b, M6c), possible tant que personne n'a voté sur l'article ? | **tranché par orch** (03/11, reçu à 08 h 07) : T2 après U, un sous-agent à la fois (risque faible : une seule identité en production) ; les phrases inexactes vont dans la liste d'Yvv avec la proposition. Posé à orch le 03/11 à 07 h 56 |
Défauts posés par orch, sans question (Yvv peut les corriger) :
- Décisions : « modules restant à voter » = les modules du doc pas encore adoptés par un vote
@@ -177,6 +180,7 @@ Défauts posés par orch, sans question (Yvv peut les corriger) :
- M4 (L9 à L13) : **exécuté** le 01/11/2026, 22 h 52 – 23 h 40 (`actes/2026-10-31-m4-vote-modules-objections.md`) ; M2 et M3a n'ont plus d'objet.
- M5 (lot G, articles des règles, licence) : **exécuté** le 02/11/2026, 02 h 53 – 03 h 10 (`actes/2026-11-02-m5-retenue-textes-regles.md`).
- M6 (H, S, V) : **exécuté** le 03/11/2026 par orch sous mandat, en ligne à 07 h 03 (pipeline 37) ; figé le 03/11 à 06 h 22 sur `94ddb17` (`actes/2026-11-03-m6-propositions-seed-quorum-tampon.md`) ; répétition faite sur une copie de la production de 06 h 11 ; relecture indépendante « 94ddb17 : ok » inscrite à 06 h 42 ; retour corrigé (couper `LD_PUBLISH_REMOTE` avant, répété) ; PRÊT envoyé à orch (dev-63), qui exécute sous mandat.
- M6b (lot T, textes du quorum) : **poussé par orch** le 03/11 à 07 h 57 (`94ddb17..bb4bdf5`, pipeline 38), santé `bb4bdf58` depuis 08 h 02 (vue de l'extérieur à 08 h 07), six « seed amendment applied », aucune ligne ERROR ni WARN ; vérifications après en cours chez orch. Figé le 03/11 à 07 h 55 sur `bb4bdf5` (`actes/2026-11-03-m6b-textes-quorum.md`) ; répétition sur une copie de la production de 07 h 36 ; boucle verte, image construite à 07 h 48 ; relecture « bb4bdf5 : ok » inscrite à 07 h 55 ; PRÊT M6b envoyé à orch à 07 h 56. À sa mise en ligne : retirer `m6/rep` (données réelles) du scratchpad de l'intégrateur.
Restes mineurs de `71819f9` et du lot B : faits dans le lot D.