Compare commits

...
6 Commits
Author SHA1 Message Date
YvvandClaude Opus 5.5 72943b0223 Acte M6c : exécuté et vérifié en production (pipeline 40, 84f015ad), trois phrases corrigées dans les deux groupes, le reste identique ; copies retirées
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 11:06:23 +01:00
YvvandClaude Opus 5.5 b9eb33bec1 Tableau : M6c figé (84f015a : ok, 10 h 47), PRÊT M6c à orch (10 h 48) ; liste d'attente de la relecture de M6c
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 10:48:01 +01:00
YvvandClaude Opus 5.5 eb596bda45 Acte M6c figé sur 84f015a : relecture « 84f015a : ok » inscrite (10 h 47), mineurs en liste d'attente, deux raisons de refus ajoutées
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 10:47:37 +01:00
YvvandClaude Opus 5.5 8f0f8c532a Tableau : T2 fusionné (84f015a, 10 h 22), M6c en préparation, relecture lancée à 10 h 26
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 10:29:17 +01:00
YvvandClaude Opus 5.5 63c22db422 Acte M6c : boucle verte du premier coup sur 84f015a, image de production construite (10 h 29, sortie 0), relecture lancée à 10 h 26
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 10:29:11 +01:00
YvvandClaude Opus 5.5 9d8f2369c3 Acte M6c (lot T2) en préparation sur 84f015a : répétition sur une copie de la production de 10 h 23 (écritures exactement annoncées, second démarrage sans rejeu), prémisses, vérifications, retour
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 10:26:22 +01:00
2 changed files with 213 additions and 1 deletions
+196
View File
@@ -0,0 +1,196 @@
# 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 : EXÉCUTÉ (03/11, 10h48-11h06, par orch dev-63 sous mandat ; pipeline 40)** — figé sur `84f015a` (`84f015ad58a2e87803dd1100d55f271f014339de`) le 03/11 à 10 h 48 — 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 : « 84f015a : ok » (prémisse 3).
## 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`, `no_open_version` (une version entrée en
vigueur, par exemple d'une voix dans l'essai), `voted_into_force`, `confirmed`, `votes`, `ballots`,
`corrected`, `translation_edited`, `signalled`, `revised`, `text_differs`, `changed`
(`seed_amend.rs:283`, `:589`).
- 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`.
**Faite** : sous-agent neuf, sans le contexte de l'intégrateur, sur `b2e597b..84f015a`, lancée à
10 h 26, rendue à 10 h 46, inscrite à 10 h 47 (transcript
`~/.claude/projects/-home-yvv-Documents-PROD-DEV-libreDecision/d0a7108b-7f2f-484a-bcb0-de339238199d/subagents/agent-a59503237fefa982a.jsonl`,
dernière ligne « 84f015a : ok »). Aucun bloquant, aucun « à reprendre ». Ce qu'elle a exécuté, sur des
copies de la copie de 10 h 23 (supprimées depuis), réseau coupé :
- les écritures, base entière comparée : exactement celles annoncées (colonnes `body`, `revision`,
`updated_at` des 6 propositions ; `body`, `source_hash`, `updated_at` des 12 traductions) ;
- second démarrage, retour vers `b2e597b` (qu'elle a construit) et réavance : rien de rejoué, les
nouveaux textes servis par `b2e597b` ;
- la garde avec de vrais votes par l'API de `b2e597b` et des états forgés : refus `votes`, `ballots`,
`corrected`, `translation_edited`, `signalled`, `no_open_version`, `voted_into_force`, `revised`,
`text_differs` ; appliqué après un vote direct retiré dans l'essai et après « supprime » (limites
écrites) ;
- F1.2, « tant que l'article ne garde la trace d'aucun vote », vrai face à `PUT /units/{id}/quorum`
dans tous les cas (409 sur un vote simulé tenu ou retiré ; 200 après « supprime » et après un vote
direct retiré dans l'essai) ;
- les chiffres recalculés (64,4 · 73,5 · 77,4 · 85,3 · 91,9 % ; 8/12, 9/12, 39/50, 43/50, 46/50 ;
l'exemple de N1.1) ; en et es fidèles au français ;
- 220 tests Rust ciblés, svelte-check 0 / 0, vitest 69 / 69, build, C34 et C37.
Mineurs, **liste d'attente** (pour Yvv le premier, U2 ou un prochain tour de textes les autres) :
- N1.1, « qui n'est pas un nombre minimal de votants » : vrai pour les quorums par cran ; faux pour
un quorum d'auteur bas (Q = 2 ou 3 à tout cran, 6 au cran 3…), où le moteur demande Q « pour » ;
- `settings.reading` (fr, en, es) sans « au-delà du quorum » ;
- vocabulaire anglais mêlé (“yes”/“no”, « against », favor/favour) ;
- deux raisons de refus absentes de ce dossier (`no_open_version`, `changed`) : **ajoutées** ;
- `spaces.test.ts` : un faux positif théorique dans `<pre>`, deux angles morts (absents du code) ;
- commentaire `crates/ld-engine/src/threshold.rs:9-11` (« near-unanimity ») ;
- N1 garde « quand peu de gens votent », que l'interface ne dit plus.
Non vérifié par elle : la production (prémisses 1 et 6), le binaire bit pour bit, l'image, la boucle
complète, un vote prouvé par la chaîne puis retiré.
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
- [x] Santé vue de l'extérieur → `"build":"84f015ad"`.
- [x] 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.
- [x] Redémarrage à froid : aucun amendement rejoué.
- [x] 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.
- [x] 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
Acte exécuté le 03/11/2026, 10h48-11h06, par orch (session dev-63, e66db8ca), sous mandat
« déploie » (inscrit du 03/11 au 08/11) ; décision d'orch de 08h07 (T2 après U).
- Dossier relu en entier à 10h48 ; relecture « 84f015a : ok » vue inscrite (10h47) ; aucune autre
relecture de ce code en cours (PRÊT M6c).
- Prémisses, 10h48:38 : santé `{"build":"b2e597b6","ok":true}` ; `prod/main` = `b2e597b` ;
`git diff b2e597b 84f015a -- docker/ .woodpecker/ .env data/ crates/ld-server/migrations/` vide ; sur
sonic, aucun témoin `deploying` ; pipeline 39 `success` en tête.
- Copie d'avant, 10h48:46 (`/tmp/ld-m6c-avant`, 700/600) : `integrity_check` ok, `foreign_key_check`
vide ; `premisse.sh` : l'attendu exact (6 lignes `open`, `seed`, révisions 2 / 3 / 3, compteurs à 0 ;
0 vote, 0 bulletin ; migration 11). Dépôt des textes : `9e0f45a`.
- Poussée `git push prod 84f015ad58a2e87803dd1100d55f271f014339de:main` à 10h49:0x, passée du premier
coup (`b2e597b..84f015a`).
- Pipeline n° 40 : `created` à 10h49:12 ; santé `84f015ad` à 10h54:19 ; `app` puis `maquette` verts ;
`success` à 11h05:26.
- Après :
- journaux : six « seed amendment applied » (`2026-11-03-f1-1-phrases`, `-f1-2-phrases`,
`-n1-1-phrases`, essai et Monnaie libre), « publication suspended … waiting=10 », aucune ligne ERROR
ni WARN ;
- redémarrage à froid à 11h05:42 : « listening … build=84f015ad », « publication suspended …
waiting=10 », aucun amendement rejoué ; santé `84f015ad` ;
- copie fraîche, 11h05:59 (`/tmp/ld-m6c-apres`) : F1.1 en révision 3, F1.2 et N1.1 en révision 4,
dans les deux groupes, toujours `open`, 0 vote ; `counts.sh` comparé à la copie d'avant : seuls
changent révisions 113 → 119, `seed_amendments` 16 → 22, file 7 → 10 en attente (13 faites), comme
la répétition ; `integrity_check` ok, `foreign_key_check` vide ;
- dépôt des textes : `9e0f45a`, inchangé.
- `main` local avancé sur `84f015a` (depuis `b2e597b`).
- Copies retirées à 11h06:08 : `/tmp/ld-m6c-copie` (10h23:10, fournie à l'intégrateur),
`/tmp/ld-m6c-avant`, `/tmp/ld-m6c-apres`. Celles de l'intégrateur sont à retirer par lui.
- Image de retour : `libredecision-app:previous` (`b2e597b`), rien à couper.
+17 -1
View File
@@ -96,7 +96,12 @@ Lots en cours, en copies de travail (`.claude/worktrees/agent-<id>`) :
**M7 en ligne** depuis le 03/11 (pipeline 39, `success` à 09 h 42, santé `b2e597b6`).
- **T2** (`lot/t2-phrases`) : les trois phrases de F1.1, F1.2, N1.1 relevées par la relecture de M6b, la
note d'inertie de l'interface, l'espace perdu de « dont N simulé », par un amendement gardé qui suit
celui de M6b. **Lancé le 03/11 à 09 h 45** ; part en M6c.
celui de M6b. **Lancé le 03/11 à 09 h 45** ; **fini et fusionné à 10 h 22** (`84f015a`) : F1.1, F1.2,
N1.1 justes (F1.2 : « tant que l'article ne garde la trace d'aucun vote », au point 8 de la liste
d'Yvv), interface, onze espaces perdus. **M6c en préparation** (`actes/2026-11-03-m6c-phrases-quorum.md`) :
boucle verte du premier coup (301 Rust, 69 vitest, e2e 40 / 40), image à 10 h 29, répétition sur une
copie de la production de 10 h 23 (écritures exactement annoncées) ; relecture « 84f015a : ok » inscrite
à 10 h 47 ; **PRÊT M6c envoyé à orch à 10 h 48**.
- **U2** (après T2, défaut retenu par orch le 03/11 à 09 h 45) : les mineurs de la relecture de M7.
**M6 en ligne** depuis le 03/11 à 07 h 03 (`94ddb17`, pipeline 37) : H, S et V. Production `94ddb175` ;
@@ -206,8 +211,19 @@ Défauts posés par orch, sans question (Yvv peut les corriger) :
- M7 (lot U, le lecteur) : **exécuté** le 03/11/2026 par orch sous mandat, en ligne (pipeline 39 `success` à 09 h 42) ; santé `b2e597b6` ; redémarrage à froid sans rejeu ; base identique à la ligne près ; dépôt des textes à `9e0f45a` ; image de retour `previous` = `bb4bdf5`. Copies retirées : orch, puis l'intégrateur à 09 h 45. Figé le 03/11 à 09 h 28 sur `b2e597b` (`actes/2026-11-03-m7-lecteur.md`) ; interface seule, aucune écriture en base ; répétition et recette écran sur une copie de la production de 08 h 49 ; relecture « à reprendre » (le dossier) puis « b2e597b : ok » ; PRÊT M7 envoyé à orch à 09 h 29. À dire à Yvv : « Fixer ce quorum » visible pour l'administrateur sur les 33 articles du seed.
- M6c (lot T2, trois phrases) : **figé** le 03/11 à 10 h 48 sur `84f015a` (`actes/2026-11-03-m6c-phrases-quorum.md`) ; répétition sur une copie de la production de 10 h 23 ; boucle verte, image à 10 h 29 ; relecture « 84f015a : ok » inscrite à 10 h 47 ; PRÊT M6c envoyé à orch à 10 h 48.
Restes mineurs de `71819f9` et du lot B : faits dans le lot D.
Liste d'attente (relecture de `84f015a`, M6c) :
- **pour Yvv** : N1.1 « qui n'est pas un nombre minimal de votants » est vrai pour les quorums par
cran, faux pour un quorum d'auteur bas (2 ou 3 à tout cran, 6 au cran 3…) où le moteur demande Q
« pour » ;
- `settings.reading` (fr, en, es) sans « au-delà du quorum » ; N1 garde « quand peu de gens votent » ;
commentaire `ld-engine/src/threshold.rs:9-11` (« near-unanimity ») ;
- vocabulaire anglais mêlé (“yes”/“no”, « against », favor/favour) ;
- `spaces.test.ts` : faux positif théorique dans `<pre>`, deux angles morts (absents du code).
Liste d'attente (relecture de `b2e597b`, M7 ; lot U2 proposé après T2) :
- cibles de 36 px sur téléphone : « Tout déplier » (`DeepList.svelte:225`), « Autres versions »
(`VoteFold.svelte:345`), « Fixer ce quorum » (`QuorumSetting.svelte:64`) ;