Files
decision/actes/2026-11-03-m9-amorce-hors-vote.md
T

362 lines
29 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
Projet : libreDecision Date : 2026-11-03
**État : EXÉCUTÉ** le 04/11 de 00 h 16 à 00 h 39 (voir « Exécution ») ; figé sur `fadfff5`
(`fadfff55649140a8e240644c3a958ed256a291fd`, lot U3c fusionné le 03/11 à
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 »).
## Pour Yvv : ce que tu liras de changé
Dans les deux groupes (Monnaie libre et l'essai), en français ici ; en anglais et en espagnol dans
`docs/chantiers/acte-certification/textes-amorce.md`. Tous restent des **Propositions d'amorce** ouvertes,
0 vote, au cran 2 ; aucun article n'est en vigueur.
**I1 « Raison d'être »**
- Avant : *« Derrière une clé il n'y a qu'un seul être humain vivant ; derrière un être humain, il n'y a
qu'une seule clé certifiante. »* / C'est le seul et unique propos de la certification, qui donne à notre
toile fiduciaire sa valeur. Nous pouvons nous fier à l'unicité et l'intégrité de tout geste signé par cette
clé. C'est l'enjeu de la certification. / Cet acte d'engagement est par ailleurs le seul acte de nature
contractuelle qui fonde l'usage de la première monnaie libre.
- Après : *« Derrière une clé il y a un et un seul être humain vivant ; derrière un être humain, il y a une
et une seule clé certifiante. »* / C'est l'unique enjeu de la certification et de votre engagement, il
donne à notre toile fiduciaire sa valeur : pouvoir nous fier à l'unicité et l'intégrité de tout geste signé
par cette clé. / Cet acte d'engagement est par ailleurs le seul acte de nature contractuelle, qui fonde
l'usage de la première monnaie libre.
**E1 « Unicité du compte »**
- Avant : Je m'engage sur l'honneur à n'avoir et n'avoir jamais qu'un seul et unique compte cocréateur de
monnaie G1.
- Après : Je m'engage sur l'honneur à n'avoir et n'avoir jamais qu'un seul et unique compte certifiant.
**E12 « Responsabilité civique »** (nouveau, entre E1 et E2)
- Je déclare sur l'honneur avoir la capacité légale et physique de signer un contrat et d'en assumer la
responsabilité civique, pour certifier à mon tour.
**E2 « Réciprocité »**
- Avant : Je m'engage sur l'honneur à ne certifier que des personnes physiques qui respectent
scrupuleusement ces deux présents engagements fondamentaux.
- Après : Je m'engage sur l'honneur à ne certifier que des personnes physiques qui s'engagent elles-mêmes, à
scrupuleusement respecter ces trois principes fondamentaux.
**Ce qui sort du document** (rien n'est effacé) : les sections « Formule de vote » (F1, F1.1, F1.2, F1.3),
« Inertie » (N1, N1.1) et « Ordonnancement » (O1), avec l'ordre de chacune. Elles ne se lisent plus, ne se
votent plus, ne se publient plus. Leurs informations sont maintenant dans l'interface, là où elles servent :
au vote déplié, dans le panneau « Réglages de la formule », sur la ligne d'ordre et au réglage du quorum.
**Ce que tu verras à l'écran**
- En haut du document, avant le texte, l'encadré **« Info ouverture doc de réf. »**, hors vote : ton
paragraphe (« Aucun article n'est encore en vigueur. Les Propositions d'amorce y entrent par le vote… »),
l'inertie à l'ouverture (Propositions d'amorce 2 / 5, titre 4 / 5, ordre de chaque section 2 / 5, autres
articles 3 / 5) et le quorum (12 · 12 · 50 · 50 · 50 votants, du cran 1 au cran 5), lus dans le document.
- Un filet entre cet encadré et le texte ; plus les titres « Introduction » ni « Engagements fondamentaux ».
- « Proposition d'amorce » à la place de « Proposition seed ».
- Sans être connecté, l'accueil 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. »
**Les choix faits pour toi** (appliqués ; dis lequel tu changes, il se change par un nouvel amendement tant
qu'aucun vote n'existe) : « il y a une et une seule clé » (« n'y a » lu comme une coquille, la seule
correction de tes mots) ; I1 en trois paragraphes, le premier en italique ; tes virgules gardées ; « ces
trois principes » = E1, E12, E2 ; E12 au cran 2 ; le chapitre titré comme tu l'as écrit ; « @ chiara ou Yvv »
lu « à Chiara ou à Yvv » ; une fois un article en vigueur, la première phrase de ton paragraphe disparaît et « y entrent
par le vote » devient « entrent en vigueur par le vote ».
Tes deux propositions d'inertie retirées le 03/11 (sur I1 et E1, Q12) ne bloquent pas la réécriture de ces
textes : elles portent sur l'inertie, pas sur le texte, et restent dans l'historique.
## Intention
Mettre en ligne la demande d'Yvv du 03/11, faite dans la session de l'intégrateur (vers 20 h 38, puis avant
20 h 44), mot pour mot dans `docs/chantiers/acte-certification/tableau.md` et
`textes-amorce.md` : les textes I1, E1, E2, l'article nouveau « Responsabilité civique » ; « ordonnancement,
inertie, et formule de vote sont des infos de fonctionnement […] Vire les 3 du bas de la liste » ; le
chapitre « Info ouverture doc de réf. » ; la séparation avant le texte ; les titres « Introduction » et
« Engagements fondamentaux » retirés ; le texte pour qui n'est pas invité. Un seul acte pour T4 et U3 (accord
d'orch le 03/11 à 21 h 58) : T4 seul retirerait les informations du document avant que l'interface ne les
dise.
## Ce qui part
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`
(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`.
- **Seed** (`seeds/acte-engagement-certification.json`, bases neuves) : les textes d'Yvv, E12, sans les
sections formule, inertie, ordonnancement.
- **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
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).
## Ce que l'acte écrit dans la base de production (donnée runtime)
Au premier démarrage, dans une transaction par amendement et par document, une fois :
- **Migration 0012, additive** : deux colonnes vides `units.retired_at`, `units.retired_reason` ; deux tables
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`) :
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, raison « Proposition d'amorce
réécrite : … »). Empreintes : I1 `a7095d70…` →
`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
l'empreinte) : le texte d'avant reste.
- **`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
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, « Proposition d'amorce
ajoutée : E12 … »).
- **`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`,
`ordre.ordonnancement`), **tous ou aucun**, seulement si aucune trace d'une personne n'existe sur elles
(raisons de refus : `votes`, `ballots`, `adopted`, `member_proposal`, `corrected`,
`translation_edited`, `signalled`, `quorum_set`, `changed`) ; la décision dans `retirement_amendments` ;
une ligne de file (Monnaie libre). Leurs propositions, révisions, traductions, changements d'inertie et
lignes de file restent.
- 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.
- **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
**Faite sur `fadfff5` le 03/11 de 23 h 50 min 24 à 23 h 52 min 32, réseau coupé** (`unshare -rn`, boucle
locale seule : `m9/repetition-isolee.sh`, scratchpad de l'intégrateur), avec le serveur construit sur
`fadfff5` (`m9/ld-server-fadfff5`), sur une copie de la copie de production prise par orch de 22 h 41 min 52
à 22 h 42 min 10 (production sur `de1b7eb5` ; empreintes vérifiées : `05058b76…`, `fd4c9fda…`, WAL vide),
publication vers un dépôt nu local. Journal `m9/repetition-fadfff5.log` ; comparaison ligne à ligne de
chaque table par `m9/compare.py` (lecture seule, par `rowid`). Une première répétition sur `d66823b`
(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 |
|---|---|---|---|
| `_sqlx_migrations` | 11 | 12 | + la migration 12 |
| `units` | 84 | 86 | + E12 × 2 ; 20 unités marquées (`retired_at`, `retired_reason`) ; les 64 autres : deux colonnes nouvelles vides |
| `proposals` | 91 | 93 | + E12 × 2 (ouvertes, seed, `seed_featured`) ; I1, E1, E2 × 2 : `body`, `revision`, `updated_at` |
| `revisions` | 123 | 131 | + 6 `amendment` (I1, E1, E2 × 2), + 2 `initial` (E12 × 2) |
| `translations` | 144 | 148 | + 4 (E12 en, es × 2) ; 12 remplacées (I1, E1, E2 en, es × 2 : `body`, `source_hash`, `updated_at`) |
| `seed_amendments` | 26 | 32 | + 6 décisions `applied` |
| `article_amendments` | — | 2 | table nouvelle, 2 décisions `applied` (`between`, 4,5) |
| `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`) |
| `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
groupe, l'ordre de « fondamental » lu : T1, E1, E12, E2. Journal : six « seed amendment applied », deux
« article added … placement=Between(4.5) », deux « units out of the document … retired=[F1, F1.1, F1.2,
F1.3, N1, N1.1, O1, ordre.formule, ordre.inertie, ordre.ordonnancement] », « publication suspended …
waiting=17 », aucune ligne ERROR ; un seul WARN, attendu réseau coupé (« web of trust size: no node nor
indexer answered, keeping the last value »). Dépôt nu : 0 commit.
**Ce qu'on lit ensuite** (connexion de développement sur une copie à part de l'état d'après) : dans chaque
groupe, 27 unités, cinq ordres de section (introduction, fondamental, technique, conclusion, annexe) ; I1,
E1, E12, E2 au cran 2, Propositions d'amorce (`seedProposal`, `seedFeatured`) ; ni F, ni N, ni O.
**Un second démarrage ne rejoue rien** : toutes les tables identiques, seul le report de la file (`next_at`).
**Le retour, rejoué** : le serveur de `de1b7eb` (`m8/ld-server-de1b7eb`, celui de la répétition de M8) sur
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
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 `fadfff5` ensuite ne rejoue rien (seul le report de la file) : les dix unités restent
retirées, puisque leur marque est restée.
## Effet attendu
- Dans les deux groupes : I1, E1, E2 aux textes d'Yvv, E12 entre E1 et E2, en fr, en, es ; ni formule, ni
inertie, ni ordonnancement dans le document ; l'encadré « Info ouverture doc de réf. » en tête.
- L'accueil sans session dit le texte pour qui n'est pas invité.
- La publication reste suspendue ; le dépôt des textes reste à `9e0f45a`.
Irréversibilité : **partielle**. Le code se remet en arrière (`previous` = `de1b7eb`) et les sept articles
réapparaissent ; les nouveaux textes et E12 restent (l'ancien texte est dans l'historique de chaque
proposition) ; la migration 0012 reste (ignorée par `de1b7eb`, `set_ignore_missing`).
## Avant — prémisses vivantes
1. La production sert `de1b7eb` : santé `"build":"de1b7eb5"` ; `prod/main` → `de1b7eb`.
2. Sur une copie fraîche, `m8/counts.sh <db>` identique à la ligne près à la colonne « Avant » de la
répétition (migrations 1 à 11, integrity ok, identities 1, votes 0, revisions 123, translations 144, file
`pending=12 done=13`, `seed_amendments` 26) ; et `m9/traces.sh <db>` (scratchpad de l'intégrateur,
lecture seule) : pour I1, E1, E2 et les dix unités, dans les deux groupes, votes, bulletins, coquilles,
objections, traductions de membre et quorums fixés à 0 ; propositions de membre : seulement
`inertia/withdrawn` sur I1 et E1 dans Monnaie libre (les deux propositions d'inertie d'Yvv du 29/10,
retirées par lui le 03/11, Q12). Elles ne touchent pas le retrait : I1 et E1 ne sont pas retirés, et la
garde du retrait n'a aucune exception (une proposition de membre, de toute sorte et de tout statut, sur
une des dix unités, refuse le retrait : `retire.rs`, `member_versions`). Elles ne touchent pas non plus
la réécriture d'I1 et d'E1 : sa garde lit les traces sur la Proposition d'amorce elle-même (votes,
bulletins, coquilles, traductions de membre, objections, révision, empreinte), pas les autres
propositions de l'article (`seed_amend.rs`, `facts`) ; elles portent sur l'inertie, pas sur le texte, et
restent dans l'historique de l'article. En vigueur : seuls les trois ordres (modules en vigueur sans
vote) ; en tout 0 vote, 0 bulletin, aucune E12, migration 11. **Lu par l'intégrateur le
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.
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 à
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`).
Aucun bloquant. **À reprendre** : `formula.reading` (« La formule du seuil » du vote déplié) finit par
« quand tout le monde vote, la majorité M suffit », faux pour W ≤ 15 quand M·W est entier (B^W ajoute
une voix ; aucun groupe actuel touché : l'essai a un membre, Monnaie libre 5 745) → lot U3c, lancé à
23 h 26, avec les raisons de la file (« Proposition d'amorce » au lieu de « Proposition seed », elles
iront dans le message de commit public). **Tient**, prouvé par elle :
- le retrait : chaque route sondée sur les 10 unités des deux groupes répond 404, 400 ou 409 ; aucune
vue ne contient une unité retirée ; une trace de membre posée à la main (quatre essais : inertie
retirée sur F1.3, ordre retiré, brouillon sur N1.1, texte remplacé sur F1) refuse le retrait de son
groupe, `member_proposal`, l'autre groupe appliqué ;
- la migration 0012 additive ; « AUCUNE LIGNE SUPPRIMÉE » à chaque étape ;
- le retour sur `de1b7eb` (binaire reconstruit par elle) : 34 articles, 8 ordres, JSON des 10 unités
identique à avant M9 ; repassage sans écriture ; les deux propositions d'inertie retirées d'Yvv,
JSON identique avant M9, après M9 et après le retour ;
- les textes d'Yvv octet par octet : seule différence « n'y a » → « y a » ; empreintes recalculées ;
- boucle : 336 tests Rust, 113 vitest, e2e 48 / 48.
Mineurs, **liste d'attente** (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é sur
l'article, un texte rival d'un membre ou un vote sur une proposition d'inertie retirée la laissent
passer (la garde du retrait compte le quorum fixé) ; la prémisse 2 lit ces traces avant l'acte ;
- `inertia.explain`, première phrase : une tendance, pas une règle ;
- `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
(limite connue de l'ADR 0014).
4. `git diff de1b7eb fadfff5 -- docker/ .woodpecker/ .env data/` → vide ; sous
`crates/ld-server/migrations/`, le seul ajout `0012_retired.sql` ; `git diff d66823b fadfff5 -- crates/
seeds/` → les quatre raisons et des tests seulement. **Vu par l'intégrateur le 04/11 à 00 h 13.**
5. Boucle verte sur `fadfff5`, le 03/11 de 23 h 52 à 23 h 58 (copie principale sur `a43a098`, même code
que `fadfff5` : le tableau seul en plus ; journal `m9/loop.log`), du premier coup : fmt, clippy
`-D warnings`, 338 tests Rust, svelte-check 0 / 0 (652 fichiers), 116 vitest, build, e2e 48 / 48 (46
contrôles C1 à C44, M1, M2 ; 23 h 54 à 23 h 58). Image de production construite du 03/11 à 23 h 58 au
04/11 à 00 h 12 (copie principale sur `a43a098`), sortie 0 : étage serveur rejoué (fmt, clippy, 338 tests
Rust, 0 échec, build release) ; étage web rejoué (svelte-check, vitest, build) ; image de contrôle retirée
à 00 h 12 (journal `m9/docker.log`). Sur `d66823b` avant elle : boucle 23 h 00 - 23 h 07, image 23 h 07 -
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,
`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
crans 2 · 4 · 2 · 3 et le quorum 12 · 12 · 50 · 50 · 50 lus dans la base ; le filet ; puis « Raison
d'être » sans titre de section, « Unicité du compte », « Responsabilité civique », « Réciprocité »,
chacune « Proposition d'amorce », cran 2, « 9 oui sur 12 » ; ni formule, ni inertie, ni ordonnancement
dans la page ; le vote déplié d'E12 dit le vote permanent, l'inertie et le quorum de l'article ; le
panneau des réglages se lit en entier (W 5 709, la valeur de la copie).
6. Sur sonic, aucun témoin `/opt/libredecision-app/deploying`.
## Commande exacte
```sh
cd /home/yvv/Documents/PROD/DEV/libreDecision
git push prod fadfff55649140a8e240644c3a958ed256a291fd:main
```
Puis la branche du chantier (orch, même mandat) : `git push origin chantier/acte-certification`.
## Vérifications après
- [ ] Santé vue de l'extérieur → `"build":"fadfff55"`.
- [ ] 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 »,
« publication suspended … waiting=17 », aucune ligne ERROR ni WARN.
- [ ] 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
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é.
- [ ] 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 `de1b7eb`, qui ignore
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 à `fadfff5` ne rejoue rien.
- **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
anciennes ne restent que dans git (le seed de `de1b7eb`, identiques 12 sur 12, vérifié par la relecture).
Un nouvel amendement gardé pourrait les remettre. E12 reste (donnée).
## Exécution
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.