forked from yvv/decision
150 lines
8.1 KiB
Markdown
150 lines
8.1 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 : FIGÉ (2026-10-30, 14 h 50)** sur `8727315` — relecture « 8727315 : ok » inscrite (sous-agent neuf, 30/10 14 h 45)
|
|
|
|
## 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.
|