Compare commits
5
Commits
6f6197cc23
...
ba6a051fd1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba6a051fd1 | ||
|
|
16ffae514e | ||
|
|
23d666195c | ||
|
|
8e3aaa313b | ||
|
|
d56b978af4 |
@@ -0,0 +1,179 @@
|
||||
# Acte — Mise en ligne M7b (les mineurs du lecteur, lot U2)
|
||||
Classe : déploie
|
||||
Projet : libreDecision Date : 2026-11-03
|
||||
**État : EXÉCUTÉ** le 03/11 de 12 h 07 à 12 h 26 — **FIGÉ** sur `6f6197c` (`6f6197cc231837df55d6b3e1986f61be5d708a1f`) le 03/11 à 12 h 07 — 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 : « 6f6197c : ok » (prémisse 3).
|
||||
|
||||
## Intention
|
||||
|
||||
Mettre en ligne le lot U2 : les mineurs d'interface des relectures de M7 (`b2e597b`) et de M6c
|
||||
(`84f015a`), défaut retenu par orch le 03/11 à 09 h 45 (U2 après T2).
|
||||
|
||||
1. Cibles d'au moins 44 px sur téléphone : « Tout déplier », « Autres versions », « Fixer ce quorum », et
|
||||
tous les gestes du vote déplié et du réordonnancement.
|
||||
2. Les trois lectures (« En vigueur », « Si les bien cotées passent », « Si tout passe ») passent à la
|
||||
ligne sur téléphone au lieu de cacher « Si tout passe ».
|
||||
3. « Proposer cet ordre » éteint dit pourquoi : « C'est l'ordre en vigueur : déplace au moins un
|
||||
article. »
|
||||
4. Une information à un seul endroit dans le vote déplié : l'inertie dite une fois (ses crans dans
|
||||
« Inertie ») ; la ligne d'une Proposition seed s'efface sous son vote déplié ; l'autre version d'un
|
||||
article n'est plus redite dans « Autres versions ».
|
||||
5. L'en-tête compte ce que montre la liste : « 0 article en vigueur · 3 Propositions seed · 32
|
||||
propositions en cours ».
|
||||
6. Un changement d'inertie proposé sur un ordre ou sur le titre a sa pastille sur la ligne du module.
|
||||
7. `settings.reading` dit « au-delà du quorum » (fr, en, es) ; l'anglais en un seul vocabulaire (« for »,
|
||||
« against », « favour ») ; le commentaire de `crates/ld-engine/src/threshold.rs` écrit juste, et un test.
|
||||
|
||||
## Ce qui part
|
||||
|
||||
Version `6f6197c`, qui contient la version en ligne `84f015a`. **L'interface**, plus un commentaire et un
|
||||
test dans `crates/ld-engine` ; le reste est documentation (`CONTROLES.md`, `UX-lecteur.md`, `CLAUDE.md`,
|
||||
actes, tableau, HANDOFF). `git diff 84f015a 6f6197c -- crates/ld-server crates/trustin-access seeds docker
|
||||
.woodpecker .env data` → **vide** (vu par l'intégrateur à 11 h 39 et par orch à 11 h 40) : le serveur est
|
||||
celui qui est en ligne.
|
||||
|
||||
## Ce que l'acte écrit dans la base de production (donnée runtime)
|
||||
|
||||
**Rien.** Aucune migration, aucun amendement, aucun code serveur nouveau. Au démarrage, comme à chaque
|
||||
démarrage depuis M6, la file de publication suspendue reporte ses lignes en attente (`next_at`).
|
||||
|
||||
## Répétition
|
||||
|
||||
**Faite le 03/11 de 11 h 43 à 11 h 44**, avec le serveur de `6f6197c` (binaire de la boucle, copié en
|
||||
`m7b/ld-server-6f6197c`), sur une copie de la copie de production prise par orch à 11 h 40 min 27 (santé
|
||||
`84f015ad`), publication vers un dépôt nu local (`m7b/repetition.sh` ; journal `m7b/repetition-m7b.log`,
|
||||
scratchpad de l'intégrateur). Deux démarrages.
|
||||
|
||||
- `m7b/counts.sh` avant et après le second démarrage : **identiques**.
|
||||
- **La base entière comparée** (`.dump`) : seules changent les 10 lignes de la file en attente, par leur
|
||||
`next_at`.
|
||||
- Journal : « publication suspended », aucun amendement, aucune ligne ERROR ni WARN ; 0 commit vers le
|
||||
dépôt des textes.
|
||||
|
||||
## Recette écran
|
||||
|
||||
**Faite le 03/11 de 11 h 45 à 11 h 50**, sur d'autres copies de la copie de 11 h 40, interface de
|
||||
`6f6197c`, connexion de développement (identités `dev:` dans ces copies seulement), bureau 1360 × 900 et
|
||||
téléphone (Pixel 7), `fr-FR`, vue membre et vue administrateur. Scripts `m7b/recette.mjs` et
|
||||
`m7b/probe.mjs` ; rapport `m7b/shots/rapport.json` ; captures dans
|
||||
`/tmp/claude-1001/-home-yvv-Documents-PROD-DEV-libreDecision/d0a7108b-7f2f-484a-bcb0-de339238199d/scratchpad/m7b/shots/`,
|
||||
regardées. `recette.mjs` : 12 étapes, **4 en échec** par délai dépassé (« 2 les trois lectures » et
|
||||
« 1-4b » sur bureau et téléphone) : mes sélecteurs, pas l'interface (les lectures sont des `radio`, pas
|
||||
des `button` ; une ligne à deux versions s'ouvre d'abord sur ses variantes). Ces mesures ont été refaites
|
||||
par `probe.mjs` (sortie dans le transcript de l'intégrateur, non conservée en fichier) : téléphone, rangée
|
||||
des lectures 370 / 370, « Tout déplier » 44 px, vote de la variante 1.0.0 sans « Autres versions » ni
|
||||
0.4.0, gestes du vote 44 px ; bureau, rangée 412 / 412, « Tout déplier » 36 px. Le relecteur les a
|
||||
refaites de son côté, vraies (prémisse 3).
|
||||
|
||||
| Point | Mesuré sur les données de production | Captures |
|
||||
|---|---|---|
|
||||
| 1 | Téléphone : « Tout déplier » 44 px ; dans le vote déplié, Pour, Contre, « Réglages de la formule », « Coquilles… » 44 px ; « Proposer cet ordre » 44 px ; administrateur : « Fixer ce quorum » 44 px, le champ 44 px. (Bureau : 36 à 39 px, la règle vaut pour le téléphone.) | `telephone-1c-admin-quorum`, `telephone-4b-deux-versions`, `telephone-3-ordre-inchange` |
|
||||
| 2 | Téléphone : la rangée des lectures tient (370 px de contenu pour 370 visibles ; avant M7b, 412 pour 370 selon la relecture de M7, non remesuré ici), « Si tout passe » entier sur sa ligne ; la page ne déborde pas. | `telephone-5-entete` |
|
||||
| 3 | « Proposer cet ordre » éteint, et la phrase « C'est l'ordre en vigueur : déplace au moins un article. » visible (bureau et téléphone). | `*-3-ordre-inchange` |
|
||||
| 4 | Vote déplié de Raison d'être : « Inertie · ▮▮▯▯▯ 2 / 5 · basse » une fois (l'autre « 2 / 5 » est la ligne d'historique) ; la ligne « 0 pour · 0 contre · 9 oui sur 12 » n'est plus redite au-dessus. Rencontre physique (deux variantes) : le vote de la variante 1.0.0 ne redit pas l'autre (0 « Autres versions », 0 mention de 0.4.0). | `*-4a-seed-deplie`, `*-4b-deux-versions` |
|
||||
| 5 | « 0 article en vigueur · 3 Propositions seed · 32 propositions en cours » dans la lecture « En vigueur » (avant : « 35 propositions en cours » ; la production n'a aucun ordre proposé ouvert, l'écart de 35 à 32 est celui des 3 Propositions seed, comptées à part). | `*-5-entete` |
|
||||
| 6 | Aucun changement d'inertie de module ouvert en production : prouvé par C38 sur une base de test, pas vu sur ces données. | — |
|
||||
|
||||
Vu en passant, **pas du lot U2, déjà en ligne, en liste d'attente** :
|
||||
- sur bureau, le bas du menu latéral (langues, ambiances, « Se déconnecter ») déborde au bord droit
|
||||
quand le nom affiché est long (« Recette U2 bur… » : la quatrième pastille et « Se déconnecter »
|
||||
coupés ; « Sonde bur… » : tout tient) ;
|
||||
- sur téléphone, le sceau fixe chevauche « Réordonner » en bas à droite.
|
||||
Aussi : la carte du document sur la page du groupe compte toujours le total du serveur (35, Propositions
|
||||
seed comprises) ; changer ce compte toucherait le serveur (rapport de U2).
|
||||
|
||||
## Effet attendu
|
||||
|
||||
- Le lecteur change pour tout le monde sur ces sept points ; les données, les votes, les textes et la
|
||||
publication ne changent pas.
|
||||
- Le dépôt des textes reste à `9e0f45a`.
|
||||
|
||||
Irréversibilité : **aucune** côté données ; le code se remet en arrière.
|
||||
|
||||
## Avant — prémisses vivantes
|
||||
|
||||
1. La production sert `84f015a` : santé `"build":"84f015ad"` ; `prod/main` → `84f015a`.
|
||||
2. `git diff 84f015a 6f6197c -- crates/ld-server crates/trustin-access seeds docker .woodpecker .env data` →
|
||||
vide.
|
||||
3. La relecture indépendante de `6f6197c`, inscrite « ok » dans `~/harness/etat/relectures.json`.
|
||||
**Faite** : sous-agent neuf, sans le contexte de l'intégrateur, sur `84f015a..6f6197c`, lancée à
|
||||
11 h 51, rendue à 12 h 05, inscrite à 12 h 06 (transcript
|
||||
`~/.claude/projects/-home-yvv-Documents-PROD-DEV-libreDecision/d0a7108b-7f2f-484a-bcb0-de339238199d/subagents/agent-afbf95d4047008567.jsonl`,
|
||||
dernière ligne « 6f6197c : ok »). Aucun bloquant, aucun « à reprendre ». Ce qu'elle a exécuté : le diff
|
||||
entier ; e2e 42 / 42 du premier coup (11 h 58 à 12 h 01, binaire identique octet pour octet) ; vitest
|
||||
78 / 78 ; tests du moteur ; sondes Playwright sur deux copies de la copie de 11 h 40 (bureau, Pixel 7,
|
||||
360 et 320 px ; membre et administrateur ; fr, en, es ; écritures dans le groupe d'essai pour voir la
|
||||
pastille d'un changement d'inertie de module) : les neuf points tenus, rien de cassé (vote simulé,
|
||||
objections, panier) ; sa propre répétition (seules les `next_at` de la file) ; le retour.
|
||||
Mineurs, **liste d'attente** :
|
||||
- le vote d'un changement d'inertie de module (ouvert par la nouvelle pastille) ne dit pas le cran
|
||||
visé : seulement « inertie 2 / 5 · basse », le cran où il se vote ; « vers 3 / 5 » n'est que dans
|
||||
l'étiquette pour lecteur d'écran (`VoteFold.svelte:167`, `:177` ; `OrderLine.svelte:58-61`,
|
||||
`TitleBar.svelte:53-56`). Défaut déjà là dans `84f015a`, plus accessible depuis U2 ; aucun
|
||||
changement de ce type ouvert en production ;
|
||||
- l'en-tête ne suit la liste qu'en lecture « En vigueur » (`+page.svelte:159-160`) : nuancer
|
||||
`UX-lecteur.md` ou suivre la lecture ;
|
||||
- le commentaire du test moteur (`threshold.rs`, « 85 % of the quorum ») parle des paramètres de
|
||||
référence, pas du cran 2 ;
|
||||
- trois inexactitudes de ce dossier (4 étapes de recette en échec non dites, « 35, ordres compris »,
|
||||
la phrase de la vérification après) : **corrigées** ;
|
||||
- les copies de production de l'intégrateur : à retirer après l'acte (prévu).
|
||||
Non vérifié par elle : sonic (image, témoin `deploying`, santé), la mesure « avant » sur `84f015a`,
|
||||
les ambiances sombres, un vrai lecteur d'écran. Ses copies de la base de production sont supprimées.
|
||||
4. Boucle verte sur `6f6197c`, le 03/11 de 11 h 39 à 11 h 43, du premier coup (journal `m7b/loop.log`) :
|
||||
fmt, clippy `-D warnings`, 302 tests Rust, svelte-check 0 / 0, 78 vitest, build, e2e 42 / 42 (11 h 40 à
|
||||
11 h 43). Image de production construite de 11 h 43 à 11 h 45, sortie 0 (302 tests Rust « ok »,
|
||||
svelte-check 0 / 0, 78 vitest, build) ; image de contrôle retirée à 11 h 50.
|
||||
5. Sur sonic, aucun témoin `/opt/libredecision-app/deploying`.
|
||||
|
||||
## Commande exacte
|
||||
|
||||
```sh
|
||||
cd /home/yvv/Documents/PROD/DEV/libreDecision
|
||||
git push prod 6f6197cc231837df55d6b3e1986f61be5d708a1f:main
|
||||
```
|
||||
|
||||
## Vérifications après
|
||||
|
||||
- [x] Santé vue de l'extérieur → `"build":"6f6197cc"`.
|
||||
- [x] Journaux : « publication suspended … waiting=10 », aucune ligne ERROR ni WARN, aucun amendement.
|
||||
- [x] Le paquet JS servi, vu de l'extérieur, contient « changement d'inertie proposé » et « au-delà du
|
||||
quorum » (nouveaux dans `6f6197c` ; « déplace au moins un article » existait déjà dans `84f015a`).
|
||||
- [x] Sur une copie fraîche : comptes de `counts.sh` identiques à la copie d'avant ; `integrity_check` ok.
|
||||
- [x] Le dépôt des textes reste à `9e0f45a`.
|
||||
|
||||
## Retour
|
||||
|
||||
`docker tag libredecision-app:previous libredecision-app:latest`, puis
|
||||
`cd /opt/libredecision-app && docker compose up -d --force-recreate`. `previous` sera `84f015a`, le même
|
||||
serveur, qui attend aussi le premier texte pour publier : rien à couper, aucune donnée à reprendre.
|
||||
|
||||
## Exécution
|
||||
|
||||
Acte exécuté le 03/11/2026, 12h07-12h26, par orch (session dev-63, e66db8ca), sous mandat « déploie »
|
||||
(03/11 → 08/11, `~/harness/etat/mandats.json`).
|
||||
|
||||
- **Prémisses** (12 h 07 min 36 s) : santé `"build":"84f015ad"` ; `prod/main` → `84f015a` ; diff
|
||||
`84f015a..6f6197c` sur `crates/ld-server crates/trustin-access seeds docker .woodpecker .env data` vide ;
|
||||
« 6f6197c : ok » inscrit (12 h 06) ; aucun témoin `deploying` sur sonic.
|
||||
- **Copie d'avant** (12 h 07 min 45 s) : `integrity_check` ok, `foreign_key_check` vide ; identities 1,
|
||||
votes 0, revisions 119, translations 144, inertia_changes 10, file `pending=10 done=13`.
|
||||
- **Poussée** (12 h 08) : la commande du dossier, telle quelle → `84f015a..6f6197c 6f6197cc… -> main`.
|
||||
- **Pipeline 41** : créé à 12 h 08 min 13 s ; santé `"build":"6f6197cc"` dès 12 h 12 min 39 s ; `success`
|
||||
à 12 h 23 min 26 s (app puis maquette ; image `latest` 2637acd8a06e construite à 12 h 12 min 04 s).
|
||||
- **Redémarrage à froid** (12 h 23 min 46 s) : « libreDecision listening bind=0.0.0.0:8002
|
||||
build=6f6197cc », puis « publication suspended: no article in force … waiting=10 » ; aucune ligne
|
||||
ERROR, WARN ni amendement. Santé ensuite `{"build":"6f6197cc","ok":true}`.
|
||||
- **Copie d'après** (12 h 24 min 03 s) : `integrity_check` ok, `foreign_key_check` vide ; sortie de
|
||||
`counts.sh` **identique à la ligne près** à celle d'avant (migrations 1 à 11, quorums
|
||||
`[12,12,50,50,50]` / `[1,1,1,1,1]`, 22 amendements du seed, file `pending=10 done=13`).
|
||||
- **Paquet servi** (12 h 24 min 18 s, `curl -4` depuis le poste, 19 nœuds et 40 morceaux) :
|
||||
« changement d'inertie proposé » et « au-delà du quorum » présents, chacun dans un fichier.
|
||||
- **Dépôt des textes** : `main` → `9e0f45a9e8d4af356a0c42daa5f4fb9eb9e6dfb3`, inchangé.
|
||||
- **Retour** : `previous` = 7cc0a31053dc (construite à 10 h 53 min 40 s, `84f015a`) ; le conteneur tourne
|
||||
sur `latest` 2637acd8a06e.
|
||||
- **Copies retirées** à 12 h 26 min 19 s : `/tmp/ld-m7b-copie` (11 h 40, celle de la répétition),
|
||||
`/tmp/ld-m7b-avant`, `/tmp/ld-m7b-apres`.
|
||||
- **Branche locale** : `main` avancée `84f015a..6f6197c` à 12 h 26 min 19 s.
|
||||
- Écart au déroulé : aucun.
|
||||
@@ -103,7 +103,11 @@ Lots en cours, en copies de travail (`.claude/worktrees/agent-<id>`) :
|
||||
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 ; **en ligne** (pipeline 40, `success` à 11 h 05).
|
||||
- **U2** (après T2, défaut retenu par orch le 03/11 à 09 h 45) : les mineurs d'interface des relectures
|
||||
de M7 et de M6c. **Lancé le 03/11 à 11 h 08.**
|
||||
de M7 et de M6c. **Lancé le 03/11 à 11 h 08** ; **fini et fusionné à 11 h 39** (`6f6197c`) : neuf
|
||||
points, C38 et M2 vus rouges, boucle verte du premier coup (302 Rust, 78 vitest, e2e 42 / 42). **M7b en
|
||||
préparation** (`actes/2026-11-03-m7b-lecteur-mineurs.md`) : image à 11 h 45 ; répétition sur une copie
|
||||
de la production de 11 h 40 (0 écriture) ; recette écran des points visibles ; relecture neuve lancée
|
||||
à 11 h 51, « 6f6197c : ok » inscrite à 12 h 06 ; **PRÊT M7b envoyé à orch à 12 h 07**.
|
||||
|
||||
**M6 en ligne** depuis le 03/11 à 07 h 03 (`94ddb17`, pipeline 37) : H, S et V. Production `94ddb175` ;
|
||||
`main` et `chantier/acte-certification` poussés vers origin par orch. Le dépôt des textes reste à `9e0f45a`
|
||||
@@ -118,8 +122,7 @@ retirées (orch, puis l'intégrateur à 09 h 45).
|
||||
**M6c en ligne** depuis le 03/11 à 11 h 05 (`84f015a`, pipeline 40) : lot T2, les trois phrases de
|
||||
F1.1, F1.2 et N1.1 justes. Production `84f015ad` ; `main` et le chantier poussés vers origin par orch.
|
||||
Copies retirées (orch, puis l'intégrateur à 11 h 07).
|
||||
Suite : **U2** (les mineurs d'interface de M7 et M6c, lancé à 11 h 08), un sous-agent à la fois ; PRÊT
|
||||
et actes par orch.
|
||||
Suite : **M7b** (lot U2, relecture en cours), un sous-agent à la fois ; PRÊT et actes par orch.
|
||||
|
||||
Yvv relit les quatre textes en ligne. Au prochain tour, avec ses retours :
|
||||
- N1.1 : G se calcule sur p̃ rapporté à W ;
|
||||
@@ -219,6 +222,16 @@ Défauts posés par orch, sans question (Yvv peut les corriger) :
|
||||
|
||||
Restes mineurs de `71819f9` et du lot B : faits dans le lot D.
|
||||
|
||||
- M7b (lot U2, les mineurs du lecteur) : **figé** le 03/11 à 12 h 07 sur `6f6197c` (`actes/2026-11-03-m7b-lecteur-mineurs.md`) ; interface seule, aucune écriture en base ; répétition et recette sur une copie de la production de 11 h 40 ; relecture « 6f6197c : ok » inscrite à 12 h 06 ; PRÊT M7b envoyé à orch à 12 h 07.
|
||||
|
||||
Liste d'attente (relecture de `6f6197c`, M7b ; pas de lot sans mot d'orch) :
|
||||
- **le vote d'un changement d'inertie de module ne dit pas le cran visé** (seulement le cran où il se
|
||||
vote ; « vers N / 5 » dans l'étiquette pour lecteur d'écran seulement : `VoteFold.svelte:167`, `:177`) ;
|
||||
la pastille de U2 y mène directement ; aucun changement de ce type ouvert en production ;
|
||||
- l'en-tête ne suit la liste qu'en lecture « En vigueur » (`+page.svelte:159-160`) ;
|
||||
- commentaire du test moteur (`threshold.rs`, « 85 % of the quorum ») : les paramètres de référence, pas
|
||||
le cran 2.
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user