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

13 KiB
Raw Blame History

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

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

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.