forked from yvv/decision
Dossier M9 (préparé, non figé) : pour Yvv, chaque texte avant / après et ce qui sort ; la répétition sur la copie de production de 22 h 41, réseau coupé (aucune ligne supprimée, table par table ; second démarrage sans rejeu ; retour sur de1b7eb rejoué : les sept articles reviennent ; nouveau passage sans rejeu) ; la prémisse des traces lue à 22 h 50
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,219 @@
|
|||||||
|
# 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)
|
||||||
Reference in New Issue
Block a user