Files
decision/actes/2026-11-03-m7b-lecteur-mineurs.md
T

155 lines
11 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 M7b (les mineurs du lecteur, lot U2)
Classe : déploie
Projet : libreDecision Date : 2026-11-03
**État : 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
- [ ] Santé vue de l'extérieur → `"build":"6f6197cc"`.
- [ ] Journaux : « publication suspended … waiting=10 », aucune ligne ERROR ni WARN, aucun amendement.
- [ ] 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`).
- [ ] Sur une copie fraîche : comptes de `counts.sh` identiques à la copie d'avant ; `integrity_check` ok.
- [ ] 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
(à remplir par orch)