Compare commits

..
3 changed files with 148 additions and 41 deletions
+3 -3
View File
@@ -1,6 +1,6 @@
# HANDOFF — libreDecision # HANDOFF — libreDecision
> Dernière mise à jour : 2026-11-03 à 22 h 41, intégrateur libredecision-d4 (orch : dev-63, session > Dernière mise à jour : 2026-11-04 à 00 h 42, intégrateur libredecision-d4 (orch : dev-63, session
> racine /DEV, mandat « déploie » et « pousse » du 03/11 au 08/11). État vivant : le tableau > racine /DEV, mandat « déploie » et « pousse » du 03/11 au 08/11). État vivant : le tableau
> `docs/chantiers/acte-certification/tableau.md`. > `docs/chantiers/acte-certification/tableau.md`.
@@ -43,11 +43,11 @@
l'article ») et chaque phrase est vraie pour tout W et tout quorum ; F1.1 inchangé. Trois relectures : l'article ») et chaque phrase est vraie pour tout W et tout quorum ; F1.1 inchangé. Trois relectures :
« 2ce2028 : à reprendre », « e7ab82f : à reprendre », « de1b7eb : ok ». En tête du dossier, pour Yvv, « 2ce2028 : à reprendre », « e7ab82f : à reprendre », « de1b7eb : ok ». En tête du dossier, pour Yvv,
chaque phrase avant / après. Copies retirées (orch à 20 h 43, l'intégrateur à 20 h 45). chaque phrase avant / après. Copies retirées (orch à 20 h 43, l'intégrateur à 20 h 45).
- **Lots T4 et U3 fusionnés** (03/11, `590ccd7`, `a47aed0`) sur la demande d'Yvv de 20 h 38 : I1, E1, E2 réécrits, E12 - **Lots T4, U3, U3b et U3c en ligne** (M9, 04/11 ; `590ccd7`, `a47aed0`) sur la demande d'Yvv de 20 h 38 : I1, E1, E2 réécrits, E12
« Responsabilité civique » ajouté entre E1 et E2, les sections formule, inertie et ordonnancement sortent « Responsabilité civique » ajouté entre E1 et E2, les sections formule, inertie et ordonnancement sortent
du document (rien effacé, ADR 0014). Relecture d'Yvv : `docs/chantiers/acte-certification/textes-amorce.md`. du document (rien effacé, ADR 0014). Relecture d'Yvv : `docs/chantiers/acte-certification/textes-amorce.md`.
**U3** (fusionné à 22 h 40) : titres, séparation, « Info ouverture doc de réf. », informations **U3** (fusionné à 22 h 40) : titres, séparation, « Info ouverture doc de réf. », informations
dans les panneaux, « Proposition d'amorce », texte pour qui n'est pas invité ; U3b fusionné (23 h 00, `d66823b`, le tableau des crans lisible sur bureau). Un seul acte **M9** sur `d66823b`, préparé (`actes/2026-11-03-m9-amorce-hors-vote.md`), relecture neuve en cours dans les panneaux, « Proposition d'amorce », texte pour qui n'est pas invité ; U3b fusionné (23 h 00, `d66823b`, le tableau des crans lisible sur bureau). U3c fusionné (23 h 49, `fadfff5`, la phrase de la majorité M vraie pour tout W). **M9 en ligne** depuis le 04/11 à 00 h 34 (`fadfff5`, pipeline 43 ; acte exécuté par orch de 00 h 16 à 00 h 39, `actes/2026-11-03-m9-amorce-hors-vote.md`) : rien effacé, retour sur `de1b7eb` possible (image `previous`). Reste à Yvv : confirmer les choix (Q15, Q16 au tableau ; `textes-amorce.md`)
(T4 et U3 ensemble). Défauts et questions à Yvv : au tableau. (T4 et U3 ensemble). Défauts et questions à Yvv : au tableau.
- H, S, V, T, U, T2, U2, T3, T3b et T3c sont en ligne. Listes d'attente (relectures de M6, M6c, M7, M7b, M8) : au tableau, section Actes. Le plus - H, S, V, T, U, T2, U2, T3, T3b et T3c sont en ligne. Listes d'attente (relectures de M6, M6c, M7, M7b, M8) : au tableau, section Actes. Le plus
visible : le vote d'un changement d'inertie de module ne dit pas le cran visé. visible : le vote d'un changement d'inertie de module ne dit pas le cran visé.
+122 -34
View File
@@ -1,10 +1,12 @@
# Acte — Mise en ligne M9 (l'Acte d'engagement d'Yvv et les informations de fonctionnement hors vote, lots T4, U3 et U3b) # Acte — Mise en ligne M9 (l'Acte d'engagement d'Yvv et les informations de fonctionnement hors vote, lots T4, U3, U3b et U3c)
Classe : déploie Classe : déploie
Projet : libreDecision Date : 2026-11-03 Projet : libreDecision Date : 2026-11-03
**État : PRÉPARÉ, non figé** — sur `d66823b` (`d66823b2f626b4833b9422c0bbf418fa698cfcd9`, lot U3b fusionné à **État : EXÉCUTÉ** le 04/11 de 00 h 16 à 00 h 39 (voir « Exécution ») ; figé sur `fadfff5`
23 h 00) ; en attente de la boucle, de l'image et de la relecture indépendante de `d66823b` — préparé par l'intégrateur libredecision-d4 ; exécuté par orch (dev-63) sous son (`fadfff55649140a8e240644c3a958ed256a291fd`, lot U3c fusionné le 03/11 à
mandat (« déploie » et « pousse », du 03/11 au 08/11). Mot : **« déploie »** (rien n'est effacé ; voir 23 h 49) le 04/11 à 00 h 15 — 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 : « fadfff5 : ok »
(prémisse 3). Mot : **« déploie »** (rien n'est effacé ; voir
« Ce que l'acte écrit »). « Ce que l'acte écrit »).
## Pour Yvv : ce que tu liras de changé ## Pour Yvv : ce que tu liras de changé
@@ -78,7 +80,7 @@ dise.
## Ce qui part ## Ce qui part
Version `d66823b` (lots T4, U3, U3b), qui contient la version en ligne `de1b7eb`. Version `fadfff5` (lots T4, U3, U3b, U3c), qui contient la version en ligne `de1b7eb`.
- **Serveur** : migration `0012_retired.sql` (additive) ; `retire.rs` (le retrait) ; `article_amend.rs` - **Serveur** : migration `0012_retired.sql` (additive) ; `retire.rs` (le retrait) ; `article_amend.rs`
(E12) ; `seed_amend.rs` (trois amendements, I1, E1, E2) ; les lectures, votes, propositions, objections, (E12) ; `seed_amend.rs` (trois amendements, I1, E1, E2) ; les lectures, votes, propositions, objections,
coquilles, traductions, comptes et la publication ignorent une unité retirée ; `docs.rs` : `seedFeatured`. coquilles, traductions, comptes et la publication ignorent une unité retirée ; `docs.rs` : `seedFeatured`.
@@ -86,7 +88,8 @@ Version `d66823b` (lots T4, U3, U3b), qui contient la version en ligne `de1b7eb`
sections formule, inertie, ordonnancement. sections formule, inertie, ordonnancement.
- **Interface** (`web/`) : le chapitre, la séparation, les titres, les informations dans le vote et les - **Interface** (`web/`) : le chapitre, la séparation, les titres, les informations dans le vote et les
panneaux, « Proposition d'amorce », le texte pour qui n'est pas invité, le réordonnancement sur plusieurs panneaux, « Proposition d'amorce », le texte pour qui n'est pas invité, le réordonnancement sur plusieurs
lignes, le tableau des crans lisible sur bureau. lignes, le tableau des crans lisible sur bureau ; « La formule du seuil » dit « quand tout le monde vote,
la part exigée est la majorité M » (U3c, vrai pour tout W).
- Configuration (`docker/`, `.woodpecker/`, `.env`, `data/`) : rien (prémisse 4). - Configuration (`docker/`, `.woodpecker/`, `.env`, `data/`) : rien (prémisse 4).
## Ce que l'acte écrit dans la base de production (donnée runtime) ## Ce que l'acte écrit dans la base de production (donnée runtime)
@@ -96,14 +99,16 @@ Au premier démarrage, dans une transaction par amendement et par document, une
de journal `retirement_amendments`, `article_amendments`. Aucune colonne retirée, aucune ligne effacée. de journal `retirement_amendments`, `article_amendments`. Aucune colonne retirée, aucune ligne effacée.
- **`2026-11-03-i1-amorce`, `-e1-amorce`, `-e2-amorce`** (amendements de seed gardés, `Version::SeedProposal`) : - **`2026-11-03-i1-amorce`, `-e1-amorce`, `-e2-amorce`** (amendements de seed gardés, `Version::SeedProposal`) :
texte fr, révision + 1 (I1 → 3, E1 et E2 → 2), une ligne `revisions` `amendment`, en et es remplacés, la texte fr, révision + 1 (I1 → 3, E1 et E2 → 2), une ligne `revisions` `amendment`, en et es remplacés, la
décision dans `seed_amendments`, une ligne de file (Monnaie libre). Empreintes : I1 `a7095d70…` → décision dans `seed_amendments`, une ligne de file (Monnaie libre, raison « Proposition d'amorce
réécrite : … »). Empreintes : I1 `a7095d70…` →
`32eb36b4…`, E1 `bdca2713…` → `df31d0ec…`, E2 `bde76a30…` → `a7dd4690…`. Refusé à la moindre trace d'une `32eb36b4…`, E1 `bdca2713…` → `df31d0ec…`, E2 `bde76a30…` → `a7dd4690…`. Refusé à la moindre trace d'une
personne (vote, simulé compris ; bulletin ; coquille ; traduction de membre ; objection ; texte différent de personne (vote, simulé compris ; bulletin ; coquille ; traduction de membre ; objection ; texte différent de
l'empreinte) : le texte d'avant reste. l'empreinte) : le texte d'avant reste.
- **`2026-11-03-e12-responsabilite-civique`** (`article_amend.rs`) : une unité E12 (section - **`2026-11-03-e12-responsabilite-civique`** (`article_amend.rs`) : une unité E12 (section
`fondamental`, position 4,5, entre E1 et E2 tant que l'ordre de la section n'a pas de vote, sinon en fin de `fondamental`, position 4,5, entre E1 et E2 tant que l'ordre de la section n'a pas de vote, sinon en fin de
section), sa Proposition d'amorce ouverte (cran 2, `seed_featured`), sa révision initiale, en et es section), sa Proposition d'amorce ouverte (cran 2, `seed_featured`), sa révision initiale, en et es
(empreinte `3fa5a8e5…`), la décision dans `article_amendments`, une ligne de file (Monnaie libre). (empreinte `3fa5a8e5…`), la décision dans `article_amendments`, une ligne de file (Monnaie libre, « Proposition d'amorce
ajoutée : E12 … »).
- **`2026-11-03-fonctionnement-hors-vote`** (`retire.rs`) : `UPDATE units SET retired_at, retired_reason` - **`2026-11-03-fonctionnement-hors-vote`** (`retire.rs`) : `UPDATE units SET retired_at, retired_reason`
sur dix unités par document (F1, F1.1, F1.2, F1.3, N1, N1.1, O1, `ordre.formule`, `ordre.inertie`, sur dix unités par document (F1, F1.1, F1.2, F1.3, N1, N1.1, O1, `ordre.formule`, `ordre.inertie`,
`ordre.ordonnancement`), **tous ou aucun**, seulement si aucune trace d'une personne n'existe sur elles `ordre.ordonnancement`), **tous ou aucun**, seulement si aucune trace d'une personne n'existe sur elles
@@ -113,17 +118,21 @@ Au premier démarrage, dans une transaction par amendement et par document, une
lignes de file restent. lignes de file restent.
- La file de publication : les lignes en attente sont reportées (`next_at`) ; la publication reste - La file de publication : les lignes en attente sont reportées (`next_at`) ; la publication reste
suspendue (aucun texte en vigueur). Le groupe d'essai ne publie jamais. suspendue (aucun texte en vigueur). Le groupe d'essai ne publie jamais.
- **Rien d'autre** : aucun vote, aucune identité, aucun réglage, aucun autre article. - **Rien d'autre** : aucun vote, aucune identité, aucun autre article. (Les cinq réglages de participation
sont remesurés par la tâche quotidienne si la dernière mesure a plus de 24 h, avec ou sans M9 : mêmes
valeurs tant qu'aucune proposition n'a été votée.)
## Répétition ## Répétition
**Faite le 03/11 de 22 h 45 min 39 à 22 h 47 min 46, réseau coupé** (`unshare -rn`, boucle locale seule : **Faite sur `fadfff5` le 03/11 de 23 h 50 min 24 à 23 h 52 min 32, réseau coupé** (`unshare -rn`, boucle
`m9/repetition-isolee.sh`, scratchpad de l'intégrateur), avec le serveur construit sur `5730d78` (même code locale seule : `m9/repetition-isolee.sh`, scratchpad de l'intégrateur), avec le serveur construit sur
serveur et même seed que `d66823b` : prémisse 4), copié en `m9/ld-server-a47aed0`, sur une copie de la copie `fadfff5` (`m9/ld-server-fadfff5`), sur une copie de la copie de production prise par orch de 22 h 41 min 52
de production prise par orch de 22 h 41 min 52 à 22 h 42 min 10 (production sur `de1b7eb5` ; empreintes à 22 h 42 min 10 (production sur `de1b7eb5` ; empreintes vérifiées : `05058b76…`, `fd4c9fda…`, WAL vide),
vérifiées : `05058b76…`, `fd4c9fda…`, WAL vide), publication vers un dépôt nu local. Journal publication vers un dépôt nu local. Journal `m9/repetition-fadfff5.log` ; comparaison ligne à ligne de
`m9/repetition-1.log` ; comparaison ligne à ligne de chaque table par `m9/compare.py` (lecture seule, par chaque table par `m9/compare.py` (lecture seule, par `rowid`). Une première répétition sur `d66823b`
`rowid`). (22 h 45 min 39 à 22 h 47 min 46, `m9/repetition-d66823b.log`, états gardés dans `m9/snap-d66823b/`) a donné
les mêmes comptes ; la relecture de `fadfff5` a comparé les deux, heures et identifiants neutralisés : seules
diffèrent les raisons des quatre lignes de file (« Proposition d'amorce »).
| Table | Avant | Après | Ce qui change | | Table | Avant | Après | Ce qui change |
|---|---|---|---| |---|---|---|---|
@@ -136,7 +145,8 @@ vérifiées : `05058b76…`, `fd4c9fda…`, WAL vide), publication vers un dép
| `article_amendments` | — | 2 | table nouvelle, 2 décisions `applied` (`between`, 4,5) | | `article_amendments` | — | 2 | table nouvelle, 2 décisions `applied` (`between`, 4,5) |
| `retirement_amendments` | — | 2 | table nouvelle, 2 décisions `applied` | | `retirement_amendments` | — | 2 | table nouvelle, 2 décisions `applied` |
| `outbox` | 25 (12 en attente) | 30 (17 en attente) | + 5 (Monnaie libre) ; les 12 en attente reportées (`next_at`) | | `outbox` | 25 (12 en attente) | 30 (17 en attente) | + 5 (Monnaie libre) ; les 12 en attente reportées (`next_at`) |
| Les 22 autres tables (votes 0, bulletins 0, identités 1, réglages, quorums, inertie, invitations, groupes, sessions…) | | | identiques | | `settings` | 7 | 7 | les 5 mesures de participation refaites (dernière le 02/11 à 22 h 09 UTC, plus de 24 h) : mêmes valeurs (médiane nulle, 0 proposition), seule l'heure change ; ce n'est pas M9 (absent de la répétition de `d66823b`, faite moins de 24 h après) |
| Les 21 autres tables (votes 0, bulletins 0, identités 1, quorums, inertie, invitations, groupes, sessions…) | | | identiques |
**Aucune ligne supprimée, dans aucune table.** `integrity_check` ok, `foreign_key_check` vide. Dans chaque **Aucune ligne supprimée, dans aucune table.** `integrity_check` ok, `foreign_key_check` vide. Dans chaque
groupe, l'ordre de « fondamental » lu : T1, E1, E12, E2. Journal : six « seed amendment applied », deux groupe, l'ordre de « fondamental » lu : T1, E1, E12, E2. Journal : six « seed amendment applied », deux
@@ -155,7 +165,7 @@ E1, E12, E2 au cran 2, Propositions d'amorce (`seedProposal`, `seedFeatured`) ;
une copie de l'état d'après : démarre, santé ok ; il n'écrit rien d'autre que le report de la file ; il une copie de l'état d'après : démarre, santé ok ; il n'écrit rien d'autre que le report de la file ; il
montre, dans chaque groupe, **34 unités** : les sept articles F1 à O1 et les huit ordres de section montre, dans chaque groupe, **34 unités** : les sept articles F1 à O1 et les huit ordres de section
reviennent, avec les nouveaux textes d'I1, E1, E2 et E12 entre E1 et E2 (ce sont des données). **Un nouveau reviennent, avec les nouveaux textes d'I1, E1, E2 et E12 entre E1 et E2 (ce sont des données). **Un nouveau
passage** au serveur de `d66823b` ensuite ne rejoue rien (seul le report de la file) : les dix unités restent passage** au serveur de `fadfff5` ensuite ne rejoue rien (seul le report de la file) : les dix unités restent
retirées, puisque leur marque est restée. retirées, puisque leur marque est restée.
## Effet attendu ## Effet attendu
@@ -189,6 +199,22 @@ proposition) ; la migration 0012 reste (ignorée par `de1b7eb`, `set_ignore_miss
03/11 à 22 h 50** sur sa copie de la copie d'orch de 22 h 41 : l'attendu exact. Une trace fait refuser 03/11 à 22 h 50** sur sa copie de la copie d'orch de 22 h 41 : l'attendu exact. Une trace fait refuser
l'amendement concerné avec sa raison, et rien ne bouge pour lui. l'amendement concerné avec sa raison, et rien ne bouge pour lui.
3. La relecture indépendante, inscrite « ok » dans `~/harness/etat/relectures.json`. 3. La relecture indépendante, inscrite « ok » dans `~/harness/etat/relectures.json`.
- **`fadfff5` : ok.** Sous-agent neuf, sans le contexte de l'intégrateur, sur le delta `d66823b..fadfff5`
(accord d'orch, en réponse à la question de l'intégrateur du 03/11 vers 23 h 27), lancé le 03/11 à 23 h 50 sur la consigne `m9/relis-m9b.md`,
inscrit le 04/11 à 00 h 14 (transcript
`~/.claude/projects/-home-yvv-Documents-PROD-DEV-libreDecision/d0a7108b-7f2f-484a-bcb0-de339238199d/subagents/agent-ad733bc6ca86cb5de.jsonl`,
dernière ligne « fadfff5 : ok »). Aucun bloquant, aucun « à reprendre ». Ce qu'elle a vérifié :
- le delta ne fait que `formula.reading` (fr, en, es) et les quatre raisons ; aucune empreinte, garde,
seed ni migration ;
- la nouvelle phrase vraie sur 201 484 750 cas (tous les W de 1 à 20 000, 179 692 tirés jusqu'à
10 000 000, les cinq crans, les quorums de la borne basse à W) ; l'ancienne fausse sur 17 couples
(W, cran), tous à W ≤ 15 ; en et es disent la même chose ; mutations vues rouges ;
- la répétition rejouée par elle, réseau coupé, sur une copie de la copie d'orch, comparée table par
table à celle de `d66823b` : seules les quatre raisons diffèrent (et la mesure quotidienne de
participation, contrôlée en relançant `d66823b` sur la même copie) ;
- boucle : 338 tests Rust, 116 vitest, e2e 48 / 48.
Mineurs, liste d'attente : hors de la toile, l'écran ne dit pas que B^W peut demander une voix de plus
dans un petit groupe ; « la part de « pour » demandée » puis « la part exigée » dans la même phrase.
- **`d66823b` : à reprendre** (sous-agent neuf, sans le contexte de l'intégrateur, lancé le 03/11 à - **`d66823b` : à reprendre** (sous-agent neuf, sans le contexte de l'intégrateur, lancé le 03/11 à
23 h 00 sur la consigne `m9/relis-m9.md` du scratchpad de l'intégrateur, inscrit à 23 h 25 ; transcript 23 h 00 sur la consigne `m9/relis-m9.md` du scratchpad de l'intégrateur, inscrit à 23 h 25 ; transcript
`~/.claude/projects/-home-yvv-Documents-PROD-DEV-libreDecision/d0a7108b-7f2f-484a-bcb0-de339238199d/subagents/agent-a81f5c0481c04ce9b.jsonl`). `~/.claude/projects/-home-yvv-Documents-PROD-DEV-libreDecision/d0a7108b-7f2f-484a-bcb0-de339238199d/subagents/agent-a81f5c0481c04ce9b.jsonl`).
@@ -215,17 +241,19 @@ proposition) ; la migration 0012 reste (ignorée par `de1b7eb`, `set_ignore_miss
- `vote.others.rule` ne dit pas qu'une version retenue par une objection n'entre pas en vigueur ; - `vote.others.rule` ne dit pas qu'une version retenue par une objection n'entre pas en vigueur ;
- après un retour, une trace laissée sur F1 à O1 n'empêche pas le repassage de les tenir retirées - après un retour, une trace laissée sur F1 à O1 n'empêche pas le repassage de les tenir retirées
(limite connue de l'ADR 0014). (limite connue de l'ADR 0014).
4. `git diff de1b7eb d66823b -- docker/ .woodpecker/ .env data/` → vide ; sous 4. `git diff de1b7eb fadfff5 -- docker/ .woodpecker/ .env data/` → vide ; sous
`crates/ld-server/migrations/`, le seul ajout `0012_retired.sql` ; `git diff 5730d78 d66823b -- crates/ `crates/ld-server/migrations/`, le seul ajout `0012_retired.sql` ; `git diff d66823b fadfff5 -- crates/
seeds/` → vide (la répétition vaut pour `d66823b`). **Vu par l'intégrateur le 03/11 à 23 h 01.** seeds/` → les quatre raisons et des tests seulement. **Vu par l'intégrateur le 04/11 à 00 h 13.**
5. Boucle verte sur `d66823b`, le 03/11 de 23 h 00 à 23 h 07 (journal `m9/loop.log`), du premier coup : 5. Boucle verte sur `fadfff5`, le 03/11 de 23 h 52 à 23 h 58 (copie principale sur `a43a098`, même code
fmt, clippy `-D warnings`, 336 tests Rust, svelte-check 0 / 0 (652 fichiers), 113 vitest, build, e2e que `fadfff5` : le tableau seul en plus ; journal `m9/loop.log`), du premier coup : fmt, clippy
48 / 48 (46 contrôles C1 à C44, M1, M2 ; 23 h 02 à 23 h 07). Image de production construite le 03/11 de `-D warnings`, 338 tests Rust, svelte-check 0 / 0 (652 fichiers), 116 vitest, build, e2e 48 / 48 (46
23 h 07 à 23 h 11 (copie principale sur `0e26624`, même code que `d66823b` : le dossier, le tableau et le contrôles C1 à C44, M1, M2 ; 23 h 54 à 23 h 58). Image de production construite du 03/11 à 23 h 58 au
HANDOFF seuls en plus), sortie 0 : étage serveur rejoué (fmt, clippy, 336 tests Rust, 0 échec, build 04/11 à 00 h 12 (copie principale sur `a43a098`), sortie 0 : étage serveur rejoué (fmt, clippy, 338 tests
release) ; étage web rejoué (svelte-check 0 erreur 0 avertissement, vitest, build) ; image de contrôle Rust, 0 échec, build release) ; étage web rejoué (svelte-check, vitest, build) ; image de contrôle retirée
retirée à 23 h 11 (journal `m9/docker.log`). à 00 h 12 (journal `m9/docker.log`). Sur `d66823b` avant elle : boucle 23 h 00 - 23 h 07, image 23 h 07 -
**Recette écran sur la copie de production** (l'état d'après M9 de la répétition, serveur de `d66823b`, 23 h 11, toutes deux vertes.
**Recette écran sur la copie de production**, faite sur `d66823b` (U3c ne change à l'écran que la fin de
`formula.reading`, épinglée par `rules.test.ts`) (l'état d'après M9 de la répétition, serveur de `d66823b`,
chaîne coupée, connexion de développement sur cette copie seulement ; 32 captures, chaîne coupée, connexion de développement sur cette copie seulement ; 32 captures,
`m9/recette/shots/`, bureau 1360 et Pixel 7, pierre et nuit) : l'accueil sans session dit le texte pour `m9/recette/shots/`, bureau 1360 et Pixel 7, pierre et nuit) : l'accueil sans session dit le texte pour
qui n'est pas invité ; en tête du document, « Info ouverture doc de réf. » avec le paragraphe d'Yvv, les qui n'est pas invité ; en tête du document, « Info ouverture doc de réf. » avec le paragraphe d'Yvv, les
@@ -240,20 +268,22 @@ proposition) ; la migration 0012 reste (ignorée par `de1b7eb`, `set_ignore_miss
```sh ```sh
cd /home/yvv/Documents/PROD/DEV/libreDecision cd /home/yvv/Documents/PROD/DEV/libreDecision
git push prod d66823b2f626b4833b9422c0bbf418fa698cfcd9:main git push prod fadfff55649140a8e240644c3a958ed256a291fd:main
``` ```
Puis la branche du chantier (orch, même mandat) : `git push origin chantier/acte-certification`. Puis la branche du chantier (orch, même mandat) : `git push origin chantier/acte-certification`.
## Vérifications après ## Vérifications après
- [ ] Santé vue de l'extérieur → `"build":"d66823b2"`. - [ ] Santé vue de l'extérieur → `"build":"fadfff55"`.
- [ ] Journaux : six « seed amendment applied » (`2026-11-03-i1-amorce`, `-e1-amorce`, `-e2-amorce` × essai, - [ ] Journaux : six « seed amendment applied » (`2026-11-03-i1-amorce`, `-e1-amorce`, `-e2-amorce` × essai,
Monnaie libre), deux « article added … Between(4.5) », deux « units out of the document », Monnaie libre), deux « article added … Between(4.5) », deux « units out of the document »,
« publication suspended … waiting=17 », aucune ligne ERROR ni WARN. « publication suspended … waiting=17 », aucune ligne ERROR ni WARN.
- [ ] Redémarrage à froid : aucun amendement rejoué. - [ ] Redémarrage à froid : aucun amendement rejoué.
- [ ] Sur une copie fraîche : `m9/compare.py <copie d'avant> <copie d'après>` donne exactement la table de - [ ] Sur une copie fraîche : `m9/compare.py <copie d'avant> <copie d'après>` donne exactement la table de
la répétition, « AUCUNE LIGNE SUPPRIMÉE » ; `integrity_check` ok. la répétition (à la mesure quotidienne de `settings` près), « AUCUNE LIGNE SUPPRIMÉE » ;
`integrity_check` ok ; les cinq nouvelles lignes de file disent « Proposition d'amorce … » et
« informations de fonctionnement sorties du document ».
- [ ] Vue de l'extérieur, `https://decision.librodrome.org/` sans session : le texte pour qui n'est pas invité. - [ ] Vue de l'extérieur, `https://decision.librodrome.org/` sans session : le texte pour qui n'est pas invité.
- [ ] Le dépôt des textes reste à `9e0f45a`. - [ ] Le dépôt des textes reste à `9e0f45a`.
@@ -262,7 +292,7 @@ Puis la branche du chantier (orch, même mandat) : `git push origin chantier/act
- **Le code** : `docker tag libredecision-app:previous libredecision-app:latest`, puis - **Le code** : `docker tag libredecision-app:previous libredecision-app:latest`, puis
`cd /opt/libredecision-app && docker compose up -d --force-recreate`. `previous` sera `de1b7eb`, qui ignore `cd /opt/libredecision-app && docker compose up -d --force-recreate`. `previous` sera `de1b7eb`, qui ignore
la migration 0012 et la colonne : les sept articles et les trois ordres réapparaissent, rien d'effacé la migration 0012 et la colonne : les sept articles et les trois ordres réapparaissent, rien d'effacé
(rejoué en répétition). Un nouveau passage à `d66823b` ne rejoue rien. (rejoué en répétition). Un nouveau passage à `fadfff5` ne rejoue rien.
- **Les textes** : pas de retour automatique. L'ancien texte français reste dans l'historique de chaque - **Les textes** : pas de retour automatique. L'ancien texte français reste dans l'historique de chaque
proposition (`revisions`) ; les traductions en et es d'I1, E1, E2 sont remplacées sur place : les proposition (`revisions`) ; les traductions en et es d'I1, E1, E2 sont remplacées sur place : les
anciennes ne restent que dans git (le seed de `de1b7eb`, identiques 12 sur 12, vérifié par la relecture). anciennes ne restent que dans git (le seed de `de1b7eb`, identiques 12 sur 12, vérifié par la relecture).
@@ -270,4 +300,62 @@ Puis la branche du chantier (orch, même mandat) : `git push origin chantier/act
## Exécution ## Exécution
(à remplir par orch) Acte exécuté le 04/11/2026, 00h16-00h39, par orch (session dev-63, e66db8ca), sous mandat « déploie »
(03/11 → 08/11, `~/harness/etat/mandats.json`).
- **Prémisses** (00 h 16 min 33 s) : santé `{"build":"de1b7eb5","ok":true}` ; `prod/main` → `de1b7eb`,
ancêtre de `fadfff5` ; diff `de1b7eb..fadfff5` sur `docker/ .woodpecker/ .env data/` : 0 fichier ; sous
`crates/ld-server/migrations/`, le seul ajout `0012_retired.sql` ; « fadfff5 : ok » inscrit (00 h 14), la
seule relecture de ce code lancée par l'intégrateur, close ; aucun témoin `deploying` sur sonic.
- **Copie d'avant** (00 h 16 min 42 s, `/tmp/ld-m9-avant`) : sortie de `m8/counts.sh` **identique à la ligne
près** à celle de la copie de 22 h 41, base de la répétition ; `m9/traces.sh` : l'attendu de la prémisse 2
(pour I1, E1, E2 et les dix unités, dans les deux groupes : 0 vote, bulletin, coquille, objection,
traduction de membre et quorum fixé ; propositions de membre : seulement `inertia/withdrawn` sur I1 et E1
dans Monnaie libre ; en vigueur : les trois ordres).
- **Poussée** (00 h 17) : la commande du dossier, telle quelle → `de1b7eb..fadfff5 fadfff55… -> main`.
- **Pipeline 43** : créé à 00 h 17 min 07 s ; image `latest` df3787b28ee9 construite à 00 h 23 min 19 s ;
santé `"build":"fadfff55"` dès 00 h 24 min 02 s ; `success` à 00 h 34 min 49 s. `sbom-publish` en échec,
comme au pipeline 42 (étape non bloquante, déjà en échec avant M9).
- **Journal du premier démarrage** (23:23:46Z) : six « seed amendment applied » (`2026-11-03-i1-amorce`,
`-e1-amorce`, `-e2-amorce`, essai et monnaie-libre), deux « article added
amendment="2026-11-03-e12-responsabilite-civique" … placement=Between(4.5) », deux « units out of the
document amendment="2026-11-03-fonctionnement-hors-vote" … retired=["F1", "F1.1", "F1.2", "F1.3", "N1",
"N1.1", "O1", "ordre.formule", "ordre.inertie", "ordre.ordonnancement"] », « libreDecision listening …
build=fadfff55 », « publication suspended … waiting=17 » ; aucune ligne ERROR ni WARN.
- **Redémarrage à froid** (00 h 36 min 24 s) : « libreDecision listening … build=fadfff55 », puis
« publication suspended … waiting=17 » ; aucun amendement rejoué, aucune ligne ERROR ni WARN. Santé ensuite
`{"build":"fadfff55","ok":true}`.
- **Copie d'après** (00 h 36 min 42 s, `/tmp/ld-m9-apres`) : `m9/compare.py <avant> <après>` donne la table
de la répétition, ligne pour ligne : `_sqlx_migrations` 11 → 12 (+ 12 `retired`) ; `units` 84 → 86
(+ E12 × 2, `fondamental`, position 4,5, cran 2 ; 20 unités marquées
`2026-11-03-fonctionnement-hors-vote`, les 64 autres aux deux colonnes nouvelles vides) ; `proposals`
91 → 93 (+ E12 × 2, `open`, `seed`, `seed_featured` ; I1, E1, E2 × 2 : `body`, `revision`, `updated_at`) ;
`revisions` 123 → 131 (+ 6 `amendment`, + 2 `initial`) ; `translations` 144 → 148 (+ 4, 12 remplacées :
`body`, `source_hash`, `updated_at`) ; `seed_amendments` 26 → 32 ; `article_amendments` et
`retirement_amendments` nouvelles, 2 décisions `applied` chacune ; `outbox` 25 → 30 (`pending=17
done=13`), les 12 en attente reportées (`next_at`) ; les 21 autres tables identiques.
**« AUCUNE LIGNE SUPPRIMÉE »** ; `integrity_check` ok ; `foreign_key_check` vide. Les cinq nouvelles
lignes de file : « Proposition d'amorce réécrite : I1, … », « … : E1, … », « … : E2, … », « Proposition
d'amorce ajoutée : E12, … », « informations de fonctionnement sorties du document … ».
- **Écart à la répétition, `settings`** : 2 lignes changées, l'heure seule — `wot_size` (5709 → 5709) et
`wot_source` (`chain:https://rpc.duniter.org`, inchangé), relus au démarrage, le réseau répondant (la
répétition, réseau coupé, gardait la dernière valeur : son seul WARN). Les 5 mesures de participation ne
sont pas refaites : la production les a refaites le 03/11 à 22:12:52Z, moins de 24 h avant (la
répétition, sur la copie de 22 h 41, les avait refaites). Rien d'autre.
- **Vu de l'extérieur** (00 h 37 min 59 s, Chromium, locale `fr-FR`, sans session) :
`https://decision.librodrome.org/` dit « Pour rentrer dans un groupe de décisions, il faut pour l'instant
demander un lien d'invitation à Chiara ou à Yvv. Ce prototype n'est pas encore câblé sur la chaîne. » ;
aucune requête hors de `decision.librodrome.org`.
- **Dépôt des textes** : `main` → `9e0f45a9e8d4af356a0c42daa5f4fb9eb9e6dfb3`, inchangé.
- **Retour** : `previous` = 78ca8a1d10e4 (construite le 03/11 à 20 h 31 min 25 s, `de1b7eb`) ; le conteneur
tourne sur `latest` df3787b28ee9.
- **Copies retirées** à 00 h 38 min 25 s : `/tmp/ld-m9-copie` (22 h 41, base des répétitions),
`/tmp/ld-m9-avant`, `/tmp/ld-m9-apres`. Les copies de l'intégrateur (`m9/base`, `m9/rep`, `m9/recette`,
`m9/snap-d66823b`) sont à retirer par lui, sur ce message.
- **Branche locale** : `main` avancée `de1b7eb..fadfff5` à 00 h 38.
- Écart au déroulé : aucun, hors l'écart de `settings` ci-dessus, qui n'est pas de M9.
- Copies de l'intégrateur retirées le 04/11 à 00 h 41 (scratchpad de libredecision-d4) : `m9/base` (la
copie de la copie d'orch de 22 h 41, donnée aux relecteurs), `m9/rep` (la base de la répétition de
`fadfff5`, avec son dépôt nu local et ses états), `m9/recette` (la base et les captures de la recette sur
l'état d'après M9) et `m9/snap-d66823b` (les états de la répétition de `d66823b`). Plus aucune base dans ce
scratchpad.
+23 -4
View File
@@ -163,8 +163,14 @@ réglages, sur bureau comme sur téléphone, en fr, en, es. **M9 sur `d66823b`**
copie de production d'orch de 22 h 41 (22 h 45 - 22 h 47, réseau coupé ; aucune ligne supprimée ; retour copie de production d'orch de 22 h 41 (22 h 45 - 22 h 47, réseau coupé ; aucune ligne supprimée ; retour
sur `de1b7eb` rejoué) ; boucle verte (23 h 00 - 23 h 07), image (23 h 07 - 23 h 11), recette écran sur la copie de production après sur `de1b7eb` rejoué) ; boucle verte (23 h 00 - 23 h 07), image (23 h 07 - 23 h 11), recette écran sur la copie de production après
M9 ; **relecture de `d66823b` : à reprendre** (inscrite à 23 h 25 ; aucun bloquant ; une phrase de M9 ; **relecture de `d66823b` : à reprendre** (inscrite à 23 h 25 ; aucun bloquant ; une phrase de
`formula.reading`, « quand tout le monde vote, la majorité M suffit », fausse pour W ≤ 15) → **lot U3c en `formula.reading`, « quand tout le monde vote, la majorité M suffit », fausse pour W ≤ 15) → **lot U3c fusionné**
cours** depuis 23 h 26 (la phrase ; les raisons de la file en « Proposition d'amorce ») ; dossier à 23 h 49 (`fadfff5` ; boucle du lot verte sur `266a443` : 338 tests, 116 vitest, e2e 48 / 48 ; la phrase
« quand tout le monde vote, la part exigée est la majorité M », vraie pour tout W, grille `ld-engine` de W = 1
à 10 000 000 ; les raisons de la file en « Proposition d'amorce ») ; **M9 sur `fadfff5`** : répétition
réseau coupé (23 h 50 - 23 h 52 ; aucune ligne supprimée ; retour sur `de1b7eb` rejoué), boucle verte (23 h 52
- 23 h 58 : 338 tests, 116 vitest, e2e 48 / 48), image (23 h 58 - 00 h 12) ; **relecture du delta
`d66823b..fadfff5` : ok** (inscrite le 04/11 à 00 h 14) ; **dossier figé le 04/11 à 00 h 15** ; **M9 en ligne** depuis le
04/11 (acte exécuté par orch de 00 h 16 à 00 h 39, pipeline 43 `success` à 00 h 34 ; santé `fadfff55`) ; dossier
`actes/2026-11-03-m9-amorce-hors-vote.md` (préparé, non figé). Mise en ligne prévue : `actes/2026-11-03-m9-amorce-hors-vote.md` (préparé, non figé). Mise en ligne prévue :
un seul acte **M9** pour T4 et U3 (T4 seul retirerait les informations avant que l'interface ne les dise) — un seul acte **M9** pour T4 et U3 (T4 seul retirerait les informations avant que l'interface ne les dise) —
accord d'orch à 21 h 58, à trois conditions pour figer : une relecture neuve de tout `27995b9..<tête>` (le accord d'orch à 21 h 58, à trois conditions pour figer : une relecture neuve de tout `27995b9..<tête>` (le
@@ -298,7 +304,16 @@ Liste d'attente (relectures de M8 ; aucun ne rend une phrase fausse ; après la
- l'interface (`settings.*`) dit encore « comme d'habitude ». - l'interface (`settings.*`) dit encore « comme d'habitude ».
- M9 (lots T4, U3, U3b, U3c : l'Acte d'engagement d'Yvv, les informations de fonctionnement hors vote) : - M9 (lots T4, U3, U3b, U3c : l'Acte d'engagement d'Yvv, les informations de fonctionnement hors vote) :
**préparé, non figé** (`actes/2026-11-03-m9-amorce-hors-vote.md`). **figé** le 04/11 à 00 h 15 sur `fadfff5` (`actes/2026-11-03-m9-amorce-hors-vote.md`) ; relectures
« d66823b : à reprendre » (03/11, 23 h 25) puis « fadfff5 : ok » (04/11, 00 h 14) ; répétition réseau coupé
sur la copie de production d'orch de 22 h 41 ; **exécuté** le 04/11 par orch sous mandat, 00 h 16 – 00 h 39
(pipeline 43 `success` à 00 h 34) ; santé `fadfff55` ; six amendements, E12 ajouté, dix unités retirées par
groupe, redémarrage à froid sans rejeu ; la table de la répétition retrouvée ligne pour ligne, aucune ligne
supprimée (seul écart : `settings`, W relu au démarrage, même valeur) ; dépôt des textes à `9e0f45a` ; image
de retour `previous` = `de1b7eb`. Copies retirées : orch à 00 h 38, l'intégrateur à 00 h 41.
- Mineurs de la relecture de `fadfff5` (liste d'attente) : hors de la toile, l'écran ne dit pas que B^W peut
demander une voix de plus dans un petit groupe ; « la part de « pour » demandée » puis « la part exigée »
dans la même phrase de `formula.reading`.
Liste d'attente (relecture de `d66823b`, M9 ; aucun ne touche la production d'aujourd'hui) : Liste d'attente (relecture de `d66823b`, M9 ; aucun ne touche la production d'aujourd'hui) :
- la garde de réécriture d'I1, E1, E2 ne lit que la Proposition d'amorce (un quorum fixé, un texte rival, un - la garde de réécriture d'I1, E1, E2 ne lit que la Proposition d'amorce (un quorum fixé, un texte rival, un
@@ -306,7 +321,11 @@ Liste d'attente (relecture de `d66823b`, M9 ; aucun ne touche la production d'au
- `inertia.explain`, première phrase (« plus il faut de voix ») : une tendance, pas une règle ; - `inertia.explain`, première phrase (« plus il faut de voix ») : une tendance, pas une règle ;
- `vote.others.rule` ne dit pas qu'une version retenue par une objection n'entre pas en vigueur ; - `vote.others.rule` ne dit pas qu'une version retenue par une objection n'entre pas en vigueur ;
- après un retour, une trace laissée sur F1 à O1 n'empêche pas le repassage de les tenir retirées (ADR 0014) ; - après un retour, une trace laissée sur F1 à O1 n'empêche pas le repassage de les tenir retirées (ADR 0014) ;
- I2 « Les deux garanties réciproques » redit la première phrase d'I1 (à montrer à Yvv, rien à changer sans lui). - I2 « Les deux garanties réciproques » redit la première phrase d'I1 (à montrer à Yvv, rien à changer sans lui) ;
- `deep.note` (« Propositions en cours », en ligne depuis M7) : le seuil « la part de voix pour que demande son
inertie, comptée sur au moins son quorum », inexact d'une voix pour W ≤ 15 (B^W) ; vu par le lot U3c ;
- les trois lignes de file de M6 en production disent « Proposition seed » : elles iront dans le premier
commit public avec celles de M9 (donnée, pas touchée).
Liste d'attente (orch, 03/11 à 20 h 47 : les restes des tests sous `/tmp`) : Liste d'attente (orch, 03/11 à 20 h 47 : les restes des tests sous `/tmp`) :
- les tests Rust laissent sous `/tmp` des centaines de dossiers `ld-*` (568 le 03/11 à 20 h 47 : 563 copies du - les tests Rust laissent sous `/tmp` des centaines de dossiers `ld-*` (568 le 03/11 à 20 h 47 : 563 copies du