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

220 lines
16 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 et U3b)
**État : PRÉPARÉ, non figé** (en attente du lot U3b, de la boucle, de l'image et de la relecture
indépendante de `<SHA7>`) — 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). 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 » lu
« à Chiara » ; 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 ».
## 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 `<SHA7>` (lots T4, U3, U3b), 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.
- 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). 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).
- **`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 réglage, aucun autre article.
## 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 :
`m9/repetition-isolee.sh`, scratchpad de l'intégrateur), avec le serveur construit sur `5730d78` (même code
serveur et même seed que `<SHA7>` : prémisse 4), copié en `m9/ld-server-a47aed0`, 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-1.log` ; comparaison ligne à ligne de chaque table par `m9/compare.py` (lecture seule, par
`rowid`).
| 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`) |
| Les 22 autres tables (votes 0, bulletins 0, identités 1, réglages, 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 `<SHA7>` 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 ; la garde les admet) ; 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 de `<SHA7>`, inscrite « ok » dans `~/harness/etat/relectures.json`.
4. `git diff de1b7eb <SHA7> -- docker/ .woodpecker/ .env data/` → vide ; sous
`crates/ld-server/migrations/`, le seul ajout `0012_retired.sql` ; `git diff 5730d78 <SHA7> -- crates/
seeds/` → vide (la répétition vaut pour `<SHA7>`).
5. Boucle verte sur `<SHA7>` et image de production construite (à remplir).
6. Sur sonic, aucun témoin `/opt/libredecision-app/deploying`.
## Commande exacte
```sh
cd /home/yvv/Documents/PROD/DEV/libreDecision
git push prod <SHA>: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":"<SHA8>"`.
- [ ] 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, « AUCUNE LIGNE SUPPRIMÉE » ; `integrity_check` ok.
- [ ] 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 à `<SHA7>` ne rejoue rien.
- **Les textes** : pas de retour automatique ; l'ancien texte reste dans l'historique de chaque proposition,
un nouvel amendement gardé pourrait le remettre. E12 reste (donnée).
## Exécution
(à remplir par orch)