forked from yvv/decision
136 lines
8.5 KiB
Markdown
136 lines
8.5 KiB
Markdown
# Acte — Mise en ligne M6c (trois phrases de F1.1, F1.2 et N1.1 écrites justes, lot T2)
|
||
Classe : déploie
|
||
Projet : libreDecision Date : 2026-11-03
|
||
**État : EN PRÉPARATION** sur `84f015a` (`84f015ad58a2e87803dd1100d55f271f014339de`) — 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 : en cours (lancée le 03/11 à 10 h 26).
|
||
|
||
## Intention
|
||
|
||
Mettre en ligne le lot T2 : les trois phrases que la relecture de M6b (« bb4bdf5 : ok », 03/11) a laissées
|
||
inexactes dans les textes du seed réécrits par le lot T, en ligne depuis le 03/11 à 08 h 02 ; et, dans
|
||
l'interface, la même imprécision (« presque l'unanimité ») et un espace perdu (« 0 contredont 1 simulé »).
|
||
Décision d'orch (dev-63, 03/11 à 08 h 07, puis 09 h 45) : T2 après U, un sous-agent à la fois.
|
||
|
||
- **F1.1** : « presque l'unanimité quand peu de gens votent » → « cette part est la plus haute au quorum
|
||
et baisse quand la participation monte, jusqu'à la majorité M quand tout le monde vote ».
|
||
- **F1.2** : « tant que personne n'a voté sur l'article ; ensuite, il ne change plus » → « tant que
|
||
l'article ne garde la trace d'aucun vote ». (Le défaut proposé, « compté », se trompait dans l'autre
|
||
sens : un vote retiré sur la chaîne n'est plus compté, mais garde la trace et fige le quorum. Le choix
|
||
reste à Yvv : `textes-quorum-seed.md`, point 8.)
|
||
- **N1.1** : « le groupe demande un quorum de votants, puis une part de « pour » » → « une part de « pour »
|
||
parmi les votants […]. Chaque cran a aussi son quorum, qui n'est pas un nombre minimal de votants ».
|
||
- Interface : `inertia.explain`, `formula.reading`, `quorum.error.voted` (fr, en, es) ; espaces perdus en
|
||
tête d'un bloc Svelte (`VoteFold`, `VersionDetails`, menu).
|
||
|
||
## Ce qui part
|
||
|
||
Version `84f015a`, qui contient la version en ligne `b2e597b`. Code touché : `crates/ld-server/src/seed_amend.rs`
|
||
(l'amendement), `seeds/acte-engagement-certification.json` (bases neuves), `web/` (chaînes fr, en, es ;
|
||
`VoteFold.svelte`, `VersionDetails.svelte`, `+layout.svelte`), des tests ; le reste est documentation.
|
||
`crates/ld-engine` : des tests seulement. Configuration (`docker/`, `.woodpecker/`, `.env`, `data/`) et
|
||
migrations : rien (prémisse 4).
|
||
|
||
## Ce que l'acte écrit dans la base de production (donnée runtime)
|
||
|
||
- **Aucune migration.**
|
||
- **Amendement de seed gardé** `2026-11-03-f1-1-phrases`, `-f1-2-phrases`, `-n1-1-phrases`, qui suit
|
||
(`follows`) ceux de M6b, décidé une fois par document, dans une transaction, seulement si personne n'a
|
||
touché l'article : 0 vote (simulé compris), 0 ligne de bulletin, aucune coquille, traduction de membre ni
|
||
objection, texte d'avant identique à l'empreinte posée par M6b ; F1.1 admis à la révision 2, F1.2 et
|
||
N1.1 à la révision 3, seulement si c'est l'amendement de M6b, et lui seul, qui l'a écrite.
|
||
- `proposals` : texte fr, révision + 1 (F1.1 → 3 ; F1.2 et N1.1 → 4) ;
|
||
- `revisions` : une ligne `amendment` ;
|
||
- `translations` : en et es remplacés ;
|
||
- `seed_amendments` : la décision ;
|
||
- `outbox` : une ligne par article dans Monnaie libre, qui attend (publication suspendue) ; rien pour
|
||
l'essai.
|
||
Refus possibles, le texte d'avant reste : `not_a_seed`, `voted_into_force`, `confirmed`, `votes`,
|
||
`ballots`, `corrected`, `translation_edited`, `signalled`, `revised`, `text_differs`.
|
||
- Les amendements de M6b sont marqués dépassés : ils ne décident plus rien.
|
||
- **Aucun vote, aucune autre proposition, aucun autre article n'est touché ; la publication reste
|
||
suspendue.**
|
||
|
||
## Répétition
|
||
|
||
**Faite le 03/11 de 10 h 23 à 10 h 24**, avec le serveur de `84f015a` (binaire de la boucle, copié en
|
||
`m6c/ld-server-84f015a`), sur une copie de la copie de production prise par orch à 10 h 23 min 10 (santé
|
||
`b2e597b6`), publication vers un dépôt nu local (`m6c/repetition.sh` ; journal `m6c/repetition-m6c.log`,
|
||
scratchpad de l'intégrateur). Deux démarrages.
|
||
|
||
| | Avant | Après |
|
||
|---|---|---|
|
||
| F1.1 (deux groupes) | ouverte, seed, révision 2, 0 vote, 0 bulletin | révision 3 |
|
||
| F1.2, N1.1 (deux groupes) | ouvertes, seed, révision 3, 0 vote, 0 bulletin | révision 4 |
|
||
| Révisions | 113 | 119 |
|
||
| Traductions | 144 | 144 (en, es des trois articles remplacés) |
|
||
| `seed_amendments` | 16 | 22 |
|
||
| File de publication (Monnaie libre) | 7 en attente, 13 faites | 10 en attente, 13 faites |
|
||
| Commits vers le dépôt des textes (local) | — | 0 (« publication suspended ») |
|
||
| Tout le reste (`m6c/counts.sh` : migrations 1–11, propositions, unités en vigueur, I1/E1/E2, `inertia_changes`, votes, bulletins, signalements, identités) | | identique |
|
||
|
||
**La base entière comparée** (`.dump`) : changent exactement les 6 propositions de F1.1, F1.2, N1.1
|
||
(identifiants de la prémisse 2), leurs 12 traductions en et es, 6 révisions et 6 décisions ajoutées, 3
|
||
lignes de file ajoutées et les 7 lignes en attente reportées (`next_at`), les deux compteurs
|
||
(`sqlite_sequence` : révisions 119, file 23). Rien d'autre. `integrity_check` ok, `foreign_key_check`
|
||
vide. Journal : six « seed amendment applied » (`2026-11-03-f1-1-phrases`, `-f1-2-phrases`,
|
||
`-n1-1-phrases` × essai, Monnaie libre), « publication suspended », aucune ligne ERROR ni WARN. **Un second
|
||
démarrage ne rejoue rien** (comptes identiques, aucun « applied »).
|
||
|
||
## Effet attendu
|
||
|
||
- Dans les deux groupes, F1.1, F1.2 et N1.1 montrent les phrases corrigées, en fr, en et es ; la note
|
||
d'inertie et la lecture de la formule de l'interface disent la même chose ; « 0 contre dont 1 simulé ».
|
||
- Rien d'autre ne change ; le dépôt des textes reste à `9e0f45a`.
|
||
|
||
Irréversibilité : **partielle**. Le code se remet en arrière ; les nouveaux textes restent (l'ancien est
|
||
dans l'historique de chaque proposition).
|
||
|
||
## Avant — prémisses vivantes
|
||
|
||
1. La production sert `b2e597b` : santé `"build":"b2e597b6"` ; `prod/main` → `b2e597b`.
|
||
2. Sur une copie fraîche, `m6c/premisse.sh <db>` (scratchpad de l'intégrateur, lecture seule) : 6 lignes,
|
||
toutes `open`, origine `seed`, révision 2 pour F1.1 et 3 pour F1.2 et N1.1, votes, bulletins,
|
||
coquilles et objections à 0 ; migration 11. Un article touché est refusé par l'amendement avec sa
|
||
raison, et l'acte reste valable pour les autres. **Lu par orch sur la copie de 10 h 23 min 10** (santé
|
||
`b2e597b6`), puis par l'intégrateur sur sa copie de cette copie : l'attendu exact ; 0 vote et 0 ligne
|
||
de bulletin en tout. À relire sur la copie fraîche juste avant la poussée.
|
||
3. La relecture indépendante de `84f015a`, inscrite « ok » dans `~/harness/etat/relectures.json`.
|
||
4. `git diff b2e597b 84f015a -- docker/ .woodpecker/ .env data/ crates/ld-server/migrations/` → vide (vu par
|
||
l'intégrateur à 10 h 22 et par orch à 10 h 23).
|
||
5. Boucle verte sur `84f015a`, le 03/11 de 10 h 22 à 10 h 26 (journal `m6c/loop.log`), du premier coup :
|
||
fmt, clippy `-D warnings`, 301 tests Rust, svelte-check 0 / 0, 69 vitest, build, e2e 40 / 40 (10 h 23
|
||
à 10 h 26). Image de production construite le 03/11 de 10 h 26 à 10 h 29, sortie 0 : étage serveur
|
||
rejoué (fmt, clippy, 301 tests Rust « ok », 0 échec), étage web rejoué (svelte-check 0 / 0, 69 vitest,
|
||
build) ; image de contrôle retirée à 10 h 29 (journal `m6c/docker-m6c.log`).
|
||
6. Sur sonic, aucun témoin `/opt/libredecision-app/deploying`.
|
||
|
||
## Commande exacte
|
||
|
||
```sh
|
||
cd /home/yvv/Documents/PROD/DEV/libreDecision
|
||
git push prod 84f015ad58a2e87803dd1100d55f271f014339de:main
|
||
```
|
||
|
||
## Vérifications après
|
||
|
||
- [ ] Santé vue de l'extérieur → `"build":"84f015ad"`.
|
||
- [ ] Journaux : six « seed amendment applied » (`2026-11-03-f1-1-phrases`, `-f1-2-phrases`,
|
||
`-n1-1-phrases` × essai, Monnaie libre), « publication suspended », aucune ligne ERROR ni WARN.
|
||
- [ ] Redémarrage à froid : aucun amendement rejoué.
|
||
- [ ] Sur une copie fraîche : F1.1 en révision 3, F1.2 et N1.1 en révision 4, dans les deux groupes ; le
|
||
reste identique à la ligne près à la copie d'avant (comptes de `counts.sh`) ; `integrity_check` ok.
|
||
- [ ] 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 `b2e597b`, qui
|
||
attend aussi le premier texte pour publier : pas de coupure de la publication à faire.
|
||
- **Les textes** : pas de retour automatique ; l'ancien texte reste dans l'historique de chaque
|
||
proposition, un nouvel amendement gardé pourrait le remettre.
|
||
|
||
## Exécution
|
||
|
||
(à remplir par orch)
|