forked from yvv/decision
186 lines
9.8 KiB
Markdown
186 lines
9.8 KiB
Markdown
# 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 : EXÉCUTÉ** — armé le 30/10/2026 à 15 h 29 par Yvv (« pousse déploie »), sur `8727315`, relecture « 8727315 : ok » inscrite
|
|
|
|
## 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).
|
|
|
|
6. Le Préambule est toujours intact en production, sans proposition de texte rivale. Sur une
|
|
copie fraîche de la base (`docker exec lpk-libredecision-app cat /data/libredecision.db*`
|
|
vers `/tmp/ld-prod-copie/`, lecture seule), la requête suivante :
|
|
```sql
|
|
SELECT d.group_slug, p.kind, p.status, p.origin,
|
|
(SELECT COUNT(*) FROM votes v WHERE v.proposal_id=p.id),
|
|
(SELECT group_concat(kind) FROM revisions r WHERE r.proposal_id=p.id)
|
|
FROM proposals p JOIN units u ON u.id=p.unit_id JOIN documents d ON d.id=u.doc_id
|
|
WHERE u.code='I1';
|
|
```
|
|
doit rendre, comme le 30/10 à 13 h 43 :
|
|
- `monnaie-libre|text|in_force|seed|0|initial` ;
|
|
- `monnaie-libre|inertia|open|member|0|initial`, la proposition d'Yvv du 29/10 ;
|
|
- `essai|text|in_force|seed|0|initial`.
|
|
|
|
Toute autre ligne `text` ou `remove` arrête l'acte : la relecture a montré que l'amendement
|
|
ne regarde pas les propositions rivales.
|
|
|
|
## 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. Elle mesure les
|
|
coquilles de I1 contre le Préambule, ce qui a deux effets :
|
|
- une vraie coquille sur la Raison d'être est refusée ;
|
|
- n'importe quel membre peut ramener le Préambule par une « coquille », qui serait alors
|
|
publiée. La relecture l'a prouvé.
|
|
|
|
Un retour de code se fait donc au plus court, puis on revient sur une version corrigée.
|
|
Tant qu'il dure, on surveille l'historique de I1.
|
|
- **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.
|
|
|
|
## Exécution
|
|
|
|
Acte exécuté le 30/10/2026, 15h29-15h52, par orch (session libreDecision), sur le mot d'Yvv
|
|
« pousse déploie ».
|
|
|
|
- Prémisses revérifiées à 15 h 29 :
|
|
- santé `{"build":"dc2de094","ok":true}` ;
|
|
- `prod/main` et `origin/main` à `dc2de09` ;
|
|
- aucun écart de configuration ;
|
|
- relecture inscrite ;
|
|
- copie fraîche de la base : I1 rend exactement les trois lignes attendues.
|
|
- Commandes : `git push prod 8727315:main` (`dc2de09..8727315`),
|
|
`git push origin 8727315:main` (`dc2de09..8727315`),
|
|
`git push origin chantier/acte-certification` (`68111c3..1593e50`), à 15 h 35.
|
|
- Pipeline :
|
|
- le site est injoignable un instant à 15 h 44 min 52 s ;
|
|
- l'ancienne version répond encore à 15 h 45 min 09 s ;
|
|
- `{"build":"87273156","ok":true}` à 15 h 45 min 45 s.
|
|
- Vérifications :
|
|
- [x] santé `87273156` ;
|
|
- [x] `/` répond 200 et la page cite la favicon (4 occurrences) ;
|
|
- [x] journaux du conteneur, à 14:45:32Z :
|
|
- `seed amendment applied … group=essai unit="I1"` ;
|
|
- `seed amendment applied … group=monnaie-libre unit="I1"` ;
|
|
- [x] publication à 14:45:36Z : `published doc=0a4c0663… commit="35864eb3dccebf8c7e38accb69107fa3823f8ab4"`, la
|
|
Raison d'être est publiée dans le dépôt des textes ;
|
|
- [x] maquette.decision.librodrome.org répond 200 ;
|
|
- [ ] vérification à l'écran par Yvv (accueil, Monnaie libre, Raison d'être, versions
|
|
groupées).
|
|
- Image de retour : `libredecision-app:previous` (la version `dc2de09`), gardée par le
|
|
pipeline.
|
|
- Redémarrage à froid : celui du pipeline, qui recrée le conteneur (`up --force-recreate`).
|
|
Aucun autre, il n'était pas au dossier.
|
|
- Copies de la base de production (`/tmp/ld-prod-copie`, `/tmp/ld-prod-recette`) retirées du
|
|
poste à 15 h 52.
|