diff --git a/actes/2026-10-30-m1-mise-en-ligne.md b/actes/2026-10-30-m1-mise-en-ligne.md new file mode 100644 index 0000000..0a01842 --- /dev/null +++ b/actes/2026-10-30-m1-mise-en-ligne.md @@ -0,0 +1,126 @@ +# Acte — Mise en ligne M1 (revue du 30/10 : entrée, DA, menu, listes, Raison d'être, versions) +Classe : déploie +Projet : libreDecision Date : 2026-10-30 +**État : PRÉPARÉ** (relecture indépendante en cours ; le SHA est figé quand elle rend « ok ») + +## Intention + +Mettre en ligne sur decision.librodrome.org les points L1 à L8 de la revue d'Yvv du 30/10 (tableau +du chantier) : +- accueil qui ouvre directement sur le choix du groupe, avec le leitmotiv en trois lignes ; +- logo « Clé de voûte » et quatre ambiances ; +- page de groupe avec les quatre piliers et « En cours » ; +- menu avec le nombre de docs, les « À venir » des outils et Décisions, une ligne par doc ; +- « Raison d'être » à la place du Préambule ; +- une seule ligne par article dans la liste, même avec plusieurs versions. + +Maintenant, parce que ces points ne dépendent d'aucune question ouverte, et qu'il vaut mieux +livrer petit (le vote, M2, viendra ensuite). + +## Ce qui part + +Version : `8727315` (branche `chantier/acte-certification`), qui contient la version en +production `dc2de09`. Commits emportés (`git log --oneline dc2de09..8727315`) : +- les fusions des lots R (`68115fb`) et A (`8727315`) ; +- lot R : `a5b92fa` (Raison d'être, amendement de seed gardé), `edc8811` (versions groupées), + `1503e57` (ordre stable des variantes), `c223c5c` (contrôles) ; +- lot A : `c640413` (Décisions et « À venir » côté serveur), `81b604e` (entrée, logo, ambiances, + menu, pages d'outil), `1e04336` (nom accessible du menu) ; +- documents : HANDOFF, tableau, note `docs/recherche/vote-g1-chaine.md`. + +Aucune configuration ni aucun secret ne change : `docker/app-compose.yml` et `.woodpecker/` +sont identiques à ceux de `dc2de09` (prémisse 4). + +## Ce que l'acte écrit dans la base de production (donnée runtime) + +- La migration `0004` ajoute la table `seed_amendments`. Elle est additive : rien n'est + supprimé ni réécrit. +- L'amendement « 2026-10-30-i1-raison-d-etre » remplace le Préambule par la Raison d'être, + dans Monnaie libre et dans le groupe d'essai, **seulement si l'article est intact** : + - texte de départ, en vigueur sans vote, jamais confirmé ; + - révision 1, 0 vote, aucune correction ; + - aucune traduction écrite par un membre, aucun signalement ; + - texte identique au Préambule du seed. + + Sinon, il ne touche à rien et journalise la raison. Il consigne chaque décision dans + `seed_amendments` et ajoute à l'historique de l'article la ligne « texte de départ remplacé » + avec son diff. Il met une republication en file, pour Monnaie libre seulement. +- État de la production lu le 2026-10-30 à 13 h 43, sur une copie de la base : + - le Préambule est intact dans les deux groupes : 0 vote, révision 1, traductions du seed, + aucun signalement ; + - il y a une identité (invitation) et aucun vote en tout ; + - deux propositions d'inertie ouvertes, d'Yvv le 29/10, n'en sont pas touchées. +- Répétition faite sur cette copie avec le serveur de `8727315` : démarrage sans erreur, puis + « seed amendment applied » pour l'essai et pour Monnaie libre. Le titre est devenu « Raison + d'être », en révision 2. La file d'envoi contient « texte de départ remplacé : I1 » pour + Monnaie libre seulement. + +## Avant — prémisses vivantes + +1. La production sert `dc2de09` : + `curl -s https://decision.librodrome.org/api/health` → `"build":"dc2de09…"`. +2. `prod/main` et `origin/main` sont à `dc2de09` : + `git fetch prod && git fetch origin && git rev-parse --short prod/main && git rev-parse --short origin/main` + → `dc2de09` deux fois (vérifié le 2026-10-30 à 14 h, avec la santé `"build":"dc2de094"`). +3. La relecture de `8727315` est inscrite « ok » dans `~/harness/etat/relectures.json` ; et à + la question « une autre relecture de ce code est-elle en cours ? », la réponse est non. +4. Rien ne change la configuration : + `git diff --stat dc2de09 8727315 -- docker/app-compose.yml .woodpecker/ .env* data/` → + vide. +5. La boucle est verte sur `8727315` : fait le 2026-10-30 (91 tests Rust, svelte-check + 0 avertissement, 16 vitest, e2e 20 / 20), et l'image de production se construit + (`docker build --target production`, sortie 0, `seeds/upcoming/` présent dans l'image). + +## Commandes exactes + +```sh +cd /home/yvv/Documents/PROD/DEV/libreDecision +git push prod 8727315:main +git push origin 8727315:main +git push origin chantier/acte-certification +``` + +Le pipeline Woodpecker (dépôt LPK/decision, `ci.open.us.org`) construit l'image (qui rejoue la +boucle), garde la version en service sous `libredecision-app:previous`, déploie, et revient +seul à la version précédente si le contrôle d'après déploiement échoue. + +## Effet attendu + +Les visiteurs de decision.librodrome.org voient la nouvelle entrée, le logo, les ambiances, le +menu, les pages d'outil, Décisions, la Raison d'être et les versions groupées. Le dépôt des +textes reçoit un commit : la Raison d'être en fr, en et es, dans +`monnaie-libre/acte-engagement-certification/`. + +Irréversibilité : **partielle**. Le code se remet en arrière. Le remplacement du Préambule +reste en base, et le commit du dépôt des textes reste publié. + +## Vérifications après + +- [ ] `curl -s https://decision.librodrome.org/api/health` → `"build":"8727315…"`. +- [ ] `curl -s https://decision.librodrome.org/ | grep -c 'favicon'` ≥ 1, et la page répond + 200. +- [ ] `ssh sonic 'docker logs lpk-libredecision-app 2>&1 | grep "seed amendment"'` → deux + lignes « applied » (essai, monnaie-libre). +- [ ] Dans `/acces` → Publication : « Dernière publication » datée du jour, sans envoi en + attente. +- [ ] À l'écran (Yvv) : l'accueil ouvre sur les groupes ; Monnaie libre montre les quatre + piliers et l'Acte d'engagement ; la Raison d'être ouvre le texte ; « Connaissance + suffisante » tient une ligne avec « 2 versions ». + +## Retour + +- **Le code** : pousser l'ancienne tête rejoue le pipeline avec la version précédente. + ```sh + git push --force-with-lease=main:8727315 prod dc2de09:main + ``` + C'est une réécriture de branche : elle demande le mot « déploie » pour ce retour précis. + Plus rapide, sur sonic : `docker tag libredecision-app:previous libredecision-app:latest`, + puis `cd /opt/libredecision-app && docker compose up -d --force-recreate`. + L'ancienne version démarre sur la base migrée (la table ajoutée ne la gêne pas). Elle + affiche la clé brute « history.amendment » dans l'historique de I1, et y refuse toute + coquille, parce qu'elle la mesure contre le Préambule : c'est un refus, jamais une + écriture à tort. +- **La Raison d'être en base** : **pas de retour automatique**. Revenir au Préambule + demanderait un amendement inverse, écrit et relu comme celui-ci. +- **Le commit publié** dans le dépôt des textes : **IMPOSSIBLE à retirer sans réécrire + l'historique** de ce dépôt (geste « supprime »). On publierait par-dessus. diff --git a/docs/chantiers/acte-certification/tableau.md b/docs/chantiers/acte-certification/tableau.md index 1187a4d..9c7c75f 100644 --- a/docs/chantiers/acte-certification/tableau.md +++ b/docs/chantiers/acte-certification/tableau.md @@ -6,8 +6,10 @@ ## REPRISE Orch seul sur le dépôt (projet à un dépôt : sous-agents en copies de travail, pas de sessions). -Lots A et R lancés le 2026-10-30 ; B, C, D, F attendent les réponses du formulaire (ou partent -avec les réponses par défaut ci-dessous). Rien n'est en ligne de cette revue. +A et R fusionnés (`8727315`), boucle verte, image construite, répétition sur une copie de la +base de production faite ; relecture indépendante en cours ; dossier `actes/2026-10-30-m1-mise-en-ligne.md`. +C lancé le 2026-10-30 à 13 h 30. B attend la recherche sur Ğ1Companion et une question (secret +du vote et transaction publique). D après C, F après B. Rien n'est en ligne de cette revue. ## Critère de livraison (liste fermée) @@ -34,21 +36,22 @@ chaîne (question stratégique, `docs/recherche/vote-g1-chaine.md`) ; l'affichag | Lot | Contenu | Effort | État | Branche | |---|---|---|---|---| -| A | L1–L6 : entrée, DA, menu, listes, Décisions | high | lancé 2026-10-30 | `lot/a-entree` | -| R | L7–L8 : Raison d'être (seed + migration gardée), versions groupées | high | lancé 2026-10-30 | `lot/r-texte` | -| B | L9 : vote déplié, vote groupé, voie du vote Ğ1 | xhigh | attend Q1, Q2 | — | -| C | L10 : cinq crans, échelle, réglages | xhigh | attend Q3 | — | +| A | L1–L6 : entrée, DA, menu, listes, Décisions | high | fusionné (`8727315`) | `lot/a-entree` | +| R | L7–L8 : Raison d'être (amendement de seed gardé), versions groupées | high | fusionné (`68115fb`) | `lot/r-texte` | +| B | L9 : vote déplié, vote groupé, vote par transaction de 0,1 Ğ1 | xhigh | recherche Ğ1Companion en cours ; question Q5 | — | +| C | L10 : cinq crans, échelle, réglages | xhigh | lancé 2026-10-30 13 h 30 | `lot/c-inertie` | | D | L11 (+ titre du doc en module, Q4) | high | après C | — | | F | L12–L13 : objections, coquilles validées, messages, délai de 3 jours | xhigh | après B | — | ## Questions (réponse par défaut appliquée tant qu'Yvv n'a pas tranché) -| # | Question | Défaut | +| # | Question | Réponse | |---|---|---| -| Q1 | Voter dans Monnaie libre avant la connexion Ğ1 (poka) | lier sa clé Ğ1 une fois par une transaction commentée, puis voter ici | -| Q2 | Les votes se voient-ils avec les noms ? | oui, votes nominatifs visibles des membres du groupe | -| Q3 | Échelle des cinq crans | calée sur la participation médiane du groupe | -| Q4 | Le titre d'un article se vote-t-il à part ? | non : un article = titre + texte ; seul le titre du doc devient un module | +| Q1 | Comment voter dans Monnaie libre | **tranché** : une transaction de 0,1 Ğ1 par vote, signée par le portefeuille (Ğ1Companion, Ğecko, plus tard trustinWallet), un seul geste ; une personne, une voix, qui s'exprime autant de fois qu'elle veut, le dernier vote fait foi | +| Q2 | Les votes se voient-ils avec les noms ? | **tranché** : totaux seulement | +| Q3 | Échelle des cinq crans | **tranché** : calée sur la participation médiane | +| Q4 | Le titre d'un article se vote-t-il à part ? | **tranché** : non ; seul le titre du doc devient un module (4) | +| Q5 | Secret du vote (Q2) et transaction publique (Q1) : le commentaire porte le choix en clair, ou une empreinte scellée ? | défaut : empreinte scellée (la chaîne montre qui a voté et quand, pas quoi) | Défauts posés par orch, sans question (Yvv peut les corriger) : - Décisions : « modules restant à voter » = les modules du doc pas encore adoptés par un vote