Acte M8 sur de1b7eb (lots T3, T3b, T3c) : en tête pour Yvv chaque phrase finale avant / après ; répétition réseau coupé (20 h 03) ; prémisses ; relecture et image en cours ; non figé

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-11-03 20:04:57 +01:00
co-authored by Claude Opus 5.5
parent de1b7eb5d7
commit 591ed37837
+126 -98
View File
@@ -1,70 +1,118 @@
# Acte — Mise en ligne M8 (aucun chiffre daté dans les textes votés, lots T3 et T3b) # Acte — Mise en ligne M8 (aucun chiffre daté dans les textes votés, lots T3, T3b et T3c)
Classe : déploie Classe : déploie
Projet : libreDecision Date : 2026-11-03 Projet : libreDecision Date : 2026-11-03
**État : PRÉPARÉ, non figé** (relecture de `e7ab82f` à reprendre ; lot T3c en cours) — sur `e7ab82f` **État : PRÉPARÉ, non figé** (en attente de la relecture indépendante de `de1b7eb`) — sur `de1b7eb`
(`e7ab82f48f41f52b3f31e322553f7cf18bc21601`) ; préparé par l'intégrateur libredecision-d4 ; exécuté par (`de1b7eb5d7e982aee7c70a41c9f5799fb171493e`) ; 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). orch (dev-63) sous son mandat (« déploie » et « pousse », du 03/11 au 08/11).
## Pour Yvv : ce que tu liras de changé ## Pour Yvv : ce que tu liras de changé
Quatre phrases, avant / après (le français fait foi), et un exemple retiré. Toutes dans les textes votés Deux textes votés de départ changent, dans les deux groupes : N1.1 « Niveaux d'inertie » et F1.2
de départ, dans les deux groupes ; F1.1 n'est pas touché. « Paramètres par défaut ». F1.1 « Formule du seuil WoT » n'est pas touché. Chaque phrase finale, avant (le
texte en ligne aujourd'hui) et après, en français, qui fait foi.
1. **N1.1, la phrase du quorum** (premier paragraphe) : **N1.1 « Niveaux d'inertie »**
1. Le quorum :
- avant : « Chaque cran a aussi son quorum, qui n'est pas un nombre minimal de votants : sous le quorum, - avant : « Chaque cran a aussi son quorum, qui n'est pas un nombre minimal de votants : sous le quorum,
les votants qui manquent comptent comme « non ». » les votants qui manquent comptent comme « non ». »
- après : « Chaque cran a aussi son quorum : sous le quorum, les votants qui manquent comptent comme - après : « Chaque cran a aussi son quorum : sous le quorum de l'article, les votants qui manquent
« non », et il faut autant de « pour » que si le quorum avait voté. » comptent comme « non », et il faut autant de « pour » que si ce quorum avait voté. »
2. **N1.1, l'introduction des cinq crans** : 2. La part :
- avant : « La part dépend du cran et du nombre de votants, comparé à la participation habituelle du
groupe : au-delà du quorum, plus il y a de votants, plus elle baisse, jusqu'à la majorité M quand tout
le monde vote. »
- après : « La part exigée dépend du cran et du nombre de votants, comparé à la participation habituelle
du groupe : au-delà de ce quorum, plus il y a de votants, plus elle baisse, jusqu'à la majorité M quand
tout le monde vote. »
3. La formule :
- avant : « `Part exigée = M + (1 − M) × (1 − (T'/W)^G)`, où T' est le nombre de votants, ou le quorum
s'il en manque. »
- après : « `Part exigée = M + (1 − M) × (1 − (T'/W)^G)`, où T' est le nombre de votants, ou le quorum de
l'article s'il en manque. »
4. L'introduction des cinq crans :
- avant : « **Les cinq crans** : le quorum dans Monnaie libre, la part exigée quand le groupe vote comme - avant : « **Les cinq crans** : le quorum dans Monnaie libre, la part exigée quand le groupe vote comme
d'habitude, puis quand tout le monde vote, et ce qui est à ce cran au départ. » d'habitude, puis quand tout le monde vote, et ce qui est à ce cran au départ. »
- après : « **Les cinq crans** : le quorum dans Monnaie libre, la part exigée au-delà du quorum, quand le - après : « **Les cinq crans** : le quorum dans Monnaie libre, la part exigée au-delà du quorum de
groupe vote comme d'habitude, puis quand tout le monde vote, et ce qui est à ce cran au départ. » l'article, à la participation habituelle, puis quand tout le monde vote, et ce qui est à ce cran au
3. **N1.1, la phrase de G** (dernier paragraphe) : départ. »
- avant : « **G** se calcule pour que la part exigée, à la participation habituelle, soit exactement celle 5. Les cinq lignes des crans, la même retouche dans chacune :
du cran : `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, où s est la part exigée comme d'habitude et p̃ la - avant : « … quorum 12 ; 60 % comme d'habitude, 50 % quand tout le monde vote. … » (de même 67, 75,
participation habituelle divisée par W. » 83 et 90 %) ;
- après : « **G** se calcule pour que la part exigée, au-delà du quorum, soit exactement celle du cran - après : « … quorum 12 ; 60 % à la participation habituelle, 50 % quand tout le monde vote. … ». Le
quand le groupe vote comme d'habitude : `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, où s est cette part du reste de chaque ligne ne change pas.
cran (60, 67, 75, 83 ou 90 %) et p̃ la participation habituelle divisée par W. » 6. La référence :
4. **F1.2, « Par défaut »** : - avant : « Tant que le groupe n'a pas voté sur 5 propositions, elle vaut deux fois le quorum de
référence du document : 100 votants dans Monnaie libre. »
- après : « Tant qu'elle repose sur moins de 5 propositions, elle vaut deux fois le quorum de référence
du document : 100 votants dans Monnaie libre. »
7. Les bornes :
- avant : « Elle reste entre 1 % et 50 % de l'électorat, et se mesure une fois par jour. »
- après : « Elle est ramenée entre 1 % et 50 % de l'électorat, et se mesure une fois par jour. »
8. G :
- avant : « **G** se calcule pour que la part exigée, à la participation habituelle, soit exactement
celle du cran : `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, où s est la part exigée comme d'habitude et p̃
la participation habituelle divisée par W. »
- après : « **G** se calcule pour que la part exigée, au-delà du quorum de l'article, soit exactement
celle du cran à la participation habituelle : `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, où s est cette
part du cran (60, 67, 75, 83 ou 90 %) et p̃ la participation habituelle divisée par W. »
9. L'exemple, retiré (rien ne le remplace) : « Exemple : avec 7 224 membres et une participation
habituelle de 120 votants, quand 120 personnes votent, il faut 72, 81, 90, 100 ou 108 voix pour, du
cran 1 au cran 5 ; au cran 3, 75 % des 120 votants, soit 90. Sous le quorum, les absents comptent comme
« non » : au cran 2 (quorum 12), 9 voix pour passent avec 3 « contre » au plus ; au cran 3 (quorum 50),
il faut 39 voix pour, avec 11 « contre » au plus. »
**F1.2 « Paramètres par défaut »**
10. Le cran par défaut :
- avant : « Le cran par défaut est le 3 (moyenne) : M = 55 %, un quorum de 50 dans Monnaie libre, et le - avant : « Le cran par défaut est le 3 (moyenne) : M = 55 %, un quorum de 50 dans Monnaie libre, et le
groupe demande 75 % de « pour » quand il vote comme d'habitude. Tout nouvel article commence à ce groupe demande 75 % de « pour » quand il vote comme d'habitude. Tout nouvel article commence à ce
cran. » cran. »
- après : « Le cran par défaut est le 3 (moyenne) : M = 55 %, un quorum de 50 dans Monnaie libre, et, - après : « Le cran par défaut est le 3 (moyenne) : M = 55 %, un quorum de 50 dans Monnaie libre, et,
au-delà du quorum, le groupe demande 75 % de « pour » quand il vote comme d'habitude. Tout nouvel au-delà du quorum, le groupe demande 75 % de « pour » à sa participation habituelle. Tout nouvel
article commence à ce cran. » article commence à ce cran. »
5. **N1.1, l'exemple retiré** (le paragraphe qui suivait la phrase de G ; rien ne le remplace) : « Exemple :
avec 7 224 membres et une participation habituelle de 120 votants, quand 120 personnes votent, il faut 72,
81, 90, 100 ou 108 voix pour, du cran 1 au cran 5 ; au cran 3, 75 % des 120 votants, soit 90. Sous le
quorum, les absents comptent comme « non » : au cran 2 (quorum 12), 9 voix pour passent avec 3 « contre »
au plus ; au cran 3 (quorum 50), il faut 39 voix pour, avec 11 « contre » au plus. »
**Pourquoi.** **Pourquoi.**
- L'exemple (5) : ta décision du 03/11, aucun chiffre daté dans un texte voté. 7 224 membres et 120 votants - **L'exemple (9)** : ta décision du 03/11, aucun chiffre daté dans un texte voté. 7 224 membres et
sont un état de la toile et une participation d'une date ; ce qui en était calculé sort avec eux. 120 votants sont un état de la toile et une participation d'une date ; ce qui en était calculé sort avec
- La phrase du quorum (1) : « pas un nombre minimal de votants » est faux pour un quorum bas fixé par eux.
l'auteur. Au quorum 2 (le plus bas dans Monnaie libre), il faut 2 « pour », à tout cran et sur toute - **Le quorum (1)** : « pas un nombre minimal de votants » est faux pour un quorum bas fixé par l'auteur.
toile : le quorum y est bien un minimum. La phrase nouvelle est vraie pour tout quorum : sous le quorum, Au quorum 2 (le plus bas dans Monnaie libre), il faut 2 « pour », à tout cran et sur toute toile : le
le moteur demande exactement le seuil du quorum. « autant de « pour » » plutôt que « autant de voix pour », quorum y est bien un minimum. La phrase nouvelle est vraie pour tout quorum : sous le quorum de
qui se lisait d'abord « pour que ». l'article, le moteur demande exactement le seuil de ce quorum. « Autant de « pour » » plutôt que
- Les phrases 2, 3 et 4 disaient la part du cran « comme d'habitude » sans condition. C'est faux quand la « autant de voix pour », qui se lisait d'abord « pour que » ; « de l'article », parce qu'un article peut
participation habituelle reste sous le quorum : le groupe est alors jugé sur le quorum. Exemple : une avoir le quorum que son auteur a fixé, pas celui du cran.
toile de 3 000 membres dont la participation habituelle est de 40 votants (dans les bornes : 1 % de - **« À la participation habituelle » (4, 5, 8, 10)** : les textes disaient la part du cran « comme
3 000, c'est 30), au cran 3, quorum 50 : la courbe donne 75 % à 40 votants, mais la part exigée se calcule d'habitude », ce qui se lit comme le nombre de votants que le groupe a vraiment d'habitude. Le moteur,
sur 50 (74,2 %), et il faut 38 « pour » de ces 40 votants, soit 95 %, pas 75 %. Cela arrive dès que la lui, prend la participation habituelle telle que N1.1 la définit : la médiane, **ramenée entre 1 % et
toile passe sous 5 000 membres avec une participation habituelle sous 50, ou quand l'auteur d'un article 50 % de l'électorat**. Dès que la médiane sort de ces bornes, ou reste sous le quorum de l'article, la
fixe un quorum au-dessus de la participation habituelle. Les phrases 2 et 4 ont été trouvées par le lot part n'est plus celle du cran. Deux exemples, calculés par le moteur :
T3 ; la phrase 3 par la relecture indépendante de T3 (« 2ce2028 : à reprendre »), reprise par le lot T3b. - 7 224 membres, médiane de 40 votants (sous 1 %, ramenée à 72,24), cran 2, quorum 12 : à 40 votants,
Accord d'orch sur les trois (03/11, à 17 h 46, puis en réponse à mon message de 18 h 13). il faut 28 « pour » (68,7 %), pas 27 (67 %) ;
- 3 000 membres, médiane de 40 (dans les bornes), cran 3, quorum 50 : la part se calcule sur le quorum,
il faut 38 « pour » de ces 40 votants (95 %), pas 75 %.
Le terme défini, « à la participation habituelle », et « au-delà du quorum de l'article » rendent ces
phrases vraies dans tous les cas.
- **La part exigée, le quorum de l'article (2, 3)** : le terme défini, au lieu de « la part » et « le
quorum » nus. La part exigée baisse au-delà du quorum ; le nombre de « pour », arrondi à l'entier, peut
remonter d'une voix (9 sur 12, puis 10 sur 13).
- **La référence (6)** : la médiane ne compte que l'année écoulée. Avec moins de 5 propositions dans
l'année, la référence de 100 votants revient, même si le groupe en a voté plus avant ; « tant que le
groupe n'a pas voté sur 5 propositions » était faux.
- **Les bornes (7)** : « est ramenée » dit ce que fait le moteur (une médiane hors des bornes est remplacée
par la borne) ; « reste » se lisait comme un constat.
Les preuves, phrase par phrase, et les textes entiers en fr, en, es : Trois tours de relecture indépendante y ont mené : T3 (le retrait et les phrases 1, 4, 10), puis T3b (G, et
`docs/chantiers/acte-certification/textes-quorum-seed.md`, section « Lot T3 » (avec « Après la relecture « autant de « pour » ») après « 2ce2028 : à reprendre », puis T3c (le terme défini partout, 2, 3, 5, 6, 7)
de 2ce2028 »). après « e7ab82f : à reprendre ». Orch a donné son accord sur chaque tour : à 17 h 46, après 18 h 13 et
après 19 h 18, avec ces mots : « c'est une correction de vérité, qui reste dans ce qu'il a validé ». Le
détail et les textes entiers en fr, en, es : `docs/chantiers/acte-certification/textes-quorum-seed.md`
(section « Lot T3 »). Chaque phrase de F1.2 et de N1.1, avec le test qui la vérifie :
`docs/chantiers/acte-certification/t3c-liste-fermee.md`.
## Intention ## Intention
Mettre en ligne les lots T3 et T3b. Yvv, le 03/11 avant 16 h 56, mot pour mot : « Je valide Mettre en ligne les lots T3, T3b et T3c. Yvv, le 03/11 avant 16 h 56, mot pour mot : « Je valide
textes-quorum-seed (dont le point 3, pas de chiffre datés dans un texte voté). Tu peux lancer la livraison textes-quorum-seed (dont le point 3, pas de chiffre datés dans un texte voté). Tu peux lancer la livraison
de decision. » (registre `~/harness/etat/reponses-yvv.md`, commit `9b701da`). Ordre T3 d'orch (dev-63, 03/11 de decision. » (registre `~/harness/etat/reponses-yvv.md`, commit `9b701da`). Ordre T3 d'orch (dev-63, 03/11
vers 16 h 57) : retirer des textes votés F1.1, F1.2, N1.1 (fr, en, es ; deux groupes) tout chiffre qui vers 16 h 57) : retirer des textes votés F1.1, F1.2, N1.1 (fr, en, es ; deux groupes) tout chiffre qui
@@ -72,39 +120,19 @@ dépend de l'état de la toile ou d'une participation à une date ; le texte res
de N1.1 « pas un nombre minimal de votants », fausse pour un quorum d'auteur bas, écrite vraie. Points 1, 2, de N1.1 « pas un nombre minimal de votants », fausse pour un quorum d'auteur bas, écrite vraie. Points 1, 2,
4 et 8 de `textes-quorum-seed.md` : le défaut reste. 4 et 8 de `textes-quorum-seed.md` : le défaut reste.
**en et es** (fidèles au français) : **Les preuves** (`crates/ld-server/tests/seed_quorum_texts.rs`, `crates/ld-server/tests/quorum.rs`) : la
- 1 : « Each level also has its quorum: below the quorum, the voters who are missing count as votes against, liste fermée (`t3c-liste-fermee.md`) nomme, pour chaque phrase qui affirme un nombre, une part ou un sens de
and it takes as many votes in favour as if the quorum had voted. » ; « Cada nivel tiene además su quórum: variation, le test qui la vérifie contre le moteur sur une grille commune de 85 100 cas. Cette grille
por debajo del quórum, los votantes que faltan cuentan como «no», y hacen falta tantos votos a favor como couvre W de 100 à 10 000 000, des médianes sous 1 % et au-dessus de 50 % de W ramenées par le moteur,
si hubiera votado el quórum. » chaque quorum d'auteur de 2 à W jusqu'à W = 1 000, et les cinq crans. Huit tests sont vus rouges sur le
- 2 : « the share asked beyond the quorum, when the group votes as usual » ; « la proporción exigida más allá texte de `e7ab82f`, et quatre mutations du code sont vues rouges. Aucun chiffre daté : le test des nombres
del quórum, cuando el grupo vota como de costumbre ». n'admet que des paramètres.
- 3 : « **G** is computed so that the share asked, beyond the quorum, is exactly that of the level when the
group votes as usual: `G = …`, where s is that share of the level (60, 67, 75, 83 or 90%) and p̃ the usual
turnout divided by W. » ; « **G** se calcula para que la proporción exigida, más allá del quórum, sea
exactamente la del nivel cuando el grupo vota como de costumbre: `G = …`, donde s es esa proporción del
nivel (60, 67, 75, 83 o 90 %) y p̃ la participación habitual dividida por W. »
- 4 : « and, beyond the quorum, the group asks for 75% of votes in favour when it votes as usual » ; « y, más
allá del quórum, el grupo pide un 75 % de votos a favor cuando vota como de costumbre ».
**Les preuves** (tests de `crates/ld-server/tests/seed_quorum_texts.rs`) :
- aucun chiffre daté : `every_number_of_the_quorum_texts_is_the_engine_s` n'admet que des paramètres (vu
rouge sur les textes de T2) ; « 100 votants » y est dit pour ce qu'il est, deux fois le quorum de
référence, et `the_reference_turnout_is_a_parameter_the_bounds_bring_back` montre que les bornes le
ramènent hors de 200 à 10 000 membres ;
- 1 : `under_the_quorum_it_takes_as_many_for_as_if_the_quorum_had_voted`, plus de 500 000 cas (W de 100 à
10 000 000, chaque quorum de la borne basse à W, les cinq crans, quatre participations, le groupe d'essai) ;
- 2 et 4 : `the_share_of_a_level_as_usual_is_asked_beyond_the_quorum` ;
- 3 : `g_gives_the_share_of_the_level_beyond_the_quorum_when_the_group_votes_as_usual` (même grille ; G tel
qu'écrit égale celui du moteur ; s au-delà du quorum, plus bas en dessous ; le cas 3 000 / 40 en dur) ;
- F1.1 laissé : `b_to_the_power_w_never_counts_in_the_web_of_trust` (« B^W ne compte pas », de 100 à
10 000 000 membres).
## Ce qui part ## Ce qui part
Version `e7ab82f` (lots T3 et T3b), qui contient la version en ligne `6f6197c`. Code touché : `crates/ld-server/src/seed_amend.rs` Version `de1b7eb` (lots T3, T3b et T3c), qui contient la version en ligne `6f6197c`. Code touché : `crates/ld-server/src/seed_amend.rs`
(les deux amendements), `crates/ld-server/src/wot.rs` (une constante rendue publique pour les tests, valeur (les deux amendements), `crates/ld-server/src/wot.rs` (une constante rendue publique pour les tests, valeur
inchangée), `seeds/acte-engagement-certification.json` (bases neuves), des tests et une fixture inchangée), `seeds/acte-engagement-certification.json` (bases neuves), des tests (`tests/seed_quorum_texts.rs`, `tests/quorum.rs`) et une fixture
(`tests/fixtures/seed-quorum-t2.json`, les textes de T2) ; le reste est documentation. `web/` et (`tests/fixtures/seed-quorum-t2.json`, les textes de T2) ; le reste est documentation. `web/` et
`crates/ld-engine` : rien. Configuration (`docker/`, `.woodpecker/`, `.env`, `data/`) et migrations : rien `crates/ld-engine` : rien. Configuration (`docker/`, `.woodpecker/`, `.env`, `data/`) et migrations : rien
(prémisse 4). (prémisse 4).
@@ -116,7 +144,7 @@ inchangée), `seeds/acte-engagement-certification.json` (bases neuves), des test
(`follows`) ceux de T2 (`2026-11-03-f1-2-phrases`, `-n1-1-phrases`), décidé une fois par document, dans une (`follows`) ceux de T2 (`2026-11-03-f1-2-phrases`, `-n1-1-phrases`), 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, 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 posée par T2 aucune coquille, traduction de membre ni objection, texte d'avant identique à l'empreinte posée par T2
(F1.2 `96caf353…`, N1.1 `7fbedcb8…`) ; textes d'après : F1.2 `ddce5aa5…`, N1.1 `7f62fd42…` ; F1.2 et N1.1 admis à la révision 4 seulement si ce sont les (F1.2 `96caf353…`, N1.1 `7fbedcb8…`) ; textes d'après : F1.2 `0c3b800b…`, N1.1 `8107c5fc…` ; F1.2 et N1.1 admis à la révision 4 seulement si ce sont les
amendements suivis (M5, M6b, M6c), et eux seuls, qui l'ont écrite. amendements suivis (M5, M6b, M6c), et eux seuls, qui l'ont écrite.
- `proposals` : texte fr, révision + 1 (F1.2 et N1.1 → 5) ; - `proposals` : texte fr, révision + 1 (F1.2 et N1.1 → 5) ;
- `revisions` : une ligne `amendment` ; - `revisions` : une ligne `amendment` ;
@@ -133,12 +161,13 @@ inchangée), `seeds/acte-engagement-certification.json` (bases neuves), des test
## Répétition ## Répétition
**Faite le 03/11 de 18 h 54 min 44 à 18 h 55 min 28, réseau coupé** (`unshare -rn`, boucle locale seule : **Faite le 03/11 de 20 h 03 min 37 à 20 h 04 min 20, réseau coupé** (`unshare -rn`, boucle locale seule :
`m8/repetition-isolee.sh`), avec le serveur de `e7ab82f` (binaire de la boucle, construit à 18 h 54, copié en `m8/repetition-isolee.sh`), avec le serveur de `de1b7eb` (binaire de la boucle, construit à 20 h 03, copié en
`m8/ld-server-e7ab82f`), sur une copie (18 h 47 min 52) de la copie de production prise par orch de `m8/ld-server-de1b7eb` ; il porte l'empreinte `8107c5fc…`), sur une copie (18 h 47 min 52, empreintes
17 h 46 min 22 à 17 h 46 min 30 (production sur `6f6197cc`), publication vers un dépôt nu local (journal inchangées depuis) de la copie de production prise par orch de 17 h 46 min 22 à 17 h 46 min 30 (production
`m8/repetition-m8b.log`, scratchpad de l'intégrateur). Deux démarrages. Orch comparera les comptes de la sur `6f6197cc`), publication vers un dépôt nu local (journal `m8/repetition-m8c.log`, scratchpad de
production à ceux de cette copie avant de pousser. l'intégrateur). Deux démarrages. Orch comparera les comptes de la production à ceux de cette copie avant de
pousser.
| | Avant | Après | | | Avant | Après |
|---|---|---| |---|---|---|
@@ -157,15 +186,15 @@ F1.2 et N1.1 (`body`, `revision`, `updated_at` : `ff53cbdc`, `13ee215f` dans Mon
4 décisions ajoutées, 2 lignes de file ajoutées et les 10 lignes en attente reportées (`next_at`), les deux 4 décisions ajoutées, 2 lignes de file ajoutées et les 10 lignes en attente reportées (`next_at`), les deux
compteurs (`sqlite_sequence` : révisions 123, file 25). Rien d'autre (`settings` inchangé : W n'a pas pu être compteurs (`sqlite_sequence` : révisions 123, file 25). Rien d'autre (`settings` inchangé : W n'a pas pu être
relu, réseau coupé). `integrity_check` ok, `foreign_key_check` vide. Les textes écrits sont ceux du seed de relu, réseau coupé). `integrity_check` ok, `foreign_key_check` vide. Les textes écrits sont ceux du seed de
`e7ab82f`, en fr, en et es, dans les deux groupes (comparés). Journal : quatre « seed amendment applied » `de1b7eb`, en fr, en et es, dans les deux groupes (comparés). Journal : quatre « seed amendment applied »
(`2026-11-03-f1-2-chiffres`, `-n1-1-chiffres` × essai, Monnaie libre), « publication suspended … (`2026-11-03-f1-2-chiffres`, `-n1-1-chiffres` × essai, Monnaie libre), « publication suspended …
waiting=12 », aucune ligne ERROR ; un seul WARN, attendu réseau coupé : « web of trust size: no node nor waiting=12 », aucune ligne ERROR ; un seul WARN, attendu réseau coupé : « web of trust size: no node nor
indexer answered, keeping the last value ». **Un second démarrage ne rejoue rien** (comptes identiques, indexer answered, keeping the last value ». **Un second démarrage ne rejoue rien** (comptes identiques,
aucun « applied »). aucun « applied »).
Une première répétition, sur `2ce2028` (lot T3 seul), le 03/11 à 17 h 54, avait donné les mêmes comptes ; le Deux répétitions précédentes, sur `2ce2028` (17 h 54, réseau non coupé : W relu sur `rpc.duniter.org`,
réseau n'y était pas coupé (W relu sur `rpc.duniter.org`, `settings.wot_size` 5 709 → 5 711), ce que la `settings.wot_size` 5 709 → 5 711) et sur `e7ab82f` (18 h 54, réseau coupé), avaient donné les mêmes comptes ;
relecture a relevé. Ses copies sont retirées (18 h 47). seuls les textes écrits diffèrent.
## Effet attendu ## Effet attendu
@@ -186,7 +215,7 @@ dans l'historique de chaque proposition).
la copie d'orch de 17 h 46 : l'attendu exact ; 0 vote et 0 ligne de bulletin en tout ; une identité. À la copie d'orch de 17 h 46 : l'attendu exact ; 0 vote et 0 ligne de bulletin en tout ; une identité. À
relire sur la copie fraîche juste avant la poussée, et comparer `counts.sh` à la colonne « Avant » de la relire sur la copie fraîche juste avant la poussée, et comparer `counts.sh` à la colonne « Avant » de la
répétition. répétition.
3. La relecture indépendante de `e7ab82f`, inscrite « ok » dans `~/harness/etat/relectures.json`. 3. La relecture indépendante de `de1b7eb`, inscrite « ok » dans `~/harness/etat/relectures.json`.
- Première relecture, **`2ce2028` : à reprendre** (sous-agent neuf, sans le contexte de l'intégrateur, - Première relecture, **`2ce2028` : à reprendre** (sous-agent neuf, sans le contexte de l'intégrateur,
lancé à 17 h 55, inscrit à 18 h 12 ; transcript lancé à 17 h 55, inscrit à 18 h 12 ; transcript
`~/.claude/projects/-home-yvv-Documents-PROD-DEV-libreDecision/d0a7108b-7f2f-484a-bcb0-de339238199d/subagents/agent-a3341da520d4c5530.jsonl`) : `~/.claude/projects/-home-yvv-Documents-PROD-DEV-libreDecision/d0a7108b-7f2f-484a-bcb0-de339238199d/subagents/agent-a3341da520d4c5530.jsonl`) :
@@ -198,28 +227,27 @@ dans l'historique de chaque proposition).
`~/.claude/projects/-home-yvv-Documents-PROD-DEV-libreDecision/d0a7108b-7f2f-484a-bcb0-de339238199d/subagents/agent-a92ddff6f85c88f90.jsonl`) : `~/.claude/projects/-home-yvv-Documents-PROD-DEV-libreDecision/d0a7108b-7f2f-484a-bcb0-de339238199d/subagents/agent-a92ddff6f85c88f90.jsonl`) :
« quand le groupe vote comme d'habitude » se lit comme la médiane réelle, alors que le moteur cale G sur « quand le groupe vote comme d'habitude » se lit comme la médiane réelle, alors que le moteur cale G sur
la participation habituelle bornée (W 7 224, médiane 40, cran 2 : 28 « pour » sur 40, pas 27) ; la la participation habituelle bornée (W 7 224, médiane 40, cran 2 : 28 « pour » sur 40, pas 27) ; la
grille des tests sautait ces cas. Repris par le lot T3c (lancé à 19 h 18) ; ce dossier sera refait sur grille des tests sautait ces cas. Repris par le lot T3c (lancé à 19 h 18, fusionné à 19 h 57 :
son sha. `de1b7eb`), avec la liste fermée des phrases demandée par orch (`t3c-liste-fermee.md`).
4. `git diff 6f6197c e7ab82f -- docker/ .woodpecker/ .env data/ crates/ld-server/migrations/ web/ crates/ld-engine/` - **Relecture de `de1b7eb` : en cours** (sous-agent neuf, sans le contexte de l'intégrateur, sur la liste
→ vide (vu par l'intégrateur le 03/11 à 18 h 48). fermée ; consigne `m8/relis-m8c.md` du scratchpad de l'intégrateur).
5. Boucle verte sur `e7ab82f`, le 03/11 de 18 h 47 à 18 h 54 (journal `m8/loop-b.log`), du premier coup : 4. `git diff 6f6197c de1b7eb -- docker/ .woodpecker/ .env data/ crates/ld-server/migrations/ web/ crates/ld-engine/`
fmt, clippy `-D warnings`, 314 tests Rust, svelte-check 0 / 0 (648 fichiers), 78 vitest, build, e2e → vide (vu par l'intégrateur le 03/11 à 20 h 05).
42 / 42 (18 h 50 à 18 h 54). Image de production construite le 03/11 de 18 h 56 à 19 h 01 (copie 5. Boucle verte sur `de1b7eb`, le 03/11 de 19 h 57 à 20 h 03 (journal `m8/loop-c.log`), du premier coup :
principale sur `d17a5f6`, même code que `e7ab82f` : le dossier seul en plus), sortie 0 : étage serveur fmt, clippy `-D warnings`, 316 tests Rust, svelte-check 0 / 0 (648 fichiers), 78 vitest, build, e2e
rejoué (fmt, clippy, 314 tests Rust « ok », 0 échec, build release) ; étage web repris du cache (`web/` 42 / 42 (19 h 59 à 20 h 03). Image de production : en cours.
identique depuis `6f6197c`) ; image de contrôle retirée à 19 h 01 (journal `m8/docker-m8b.log`).
6. Sur sonic, aucun témoin `/opt/libredecision-app/deploying`. 6. Sur sonic, aucun témoin `/opt/libredecision-app/deploying`.
## Commande exacte ## Commande exacte
```sh ```sh
cd /home/yvv/Documents/PROD/DEV/libreDecision cd /home/yvv/Documents/PROD/DEV/libreDecision
git push prod e7ab82f48f41f52b3f31e322553f7cf18bc21601:main git push prod de1b7eb5d7e982aee7c70a41c9f5799fb171493e:main
``` ```
## Vérifications après ## Vérifications après
- [ ] Santé vue de l'extérieur → `"build":"e7ab82f4"`. - [ ] Santé vue de l'extérieur → `"build":"de1b7eb5"`.
- [ ] Journaux : quatre « seed amendment applied » (`2026-11-03-f1-2-chiffres`, `-n1-1-chiffres` × essai, - [ ] Journaux : quatre « seed amendment applied » (`2026-11-03-f1-2-chiffres`, `-n1-1-chiffres` × essai,
Monnaie libre), « publication suspended … waiting=12 », aucune ligne ERROR ni WARN. Monnaie libre), « publication suspended … waiting=12 », aucune ligne ERROR ni WARN.
- [ ] Redémarrage à froid : aucun amendement rejoué. - [ ] Redémarrage à froid : aucun amendement rejoué.