forked from yvv/decision
Brouillon M6 : écritures en base, effet attendu (vote simulé ouvert), vérifications, retour, copie de la base
Documentation seule. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -63,30 +63,100 @@ démarrage du serveur M6 sur cette copie → I1, E1, E2 au cran 2, et `seed_prop
|
||||
Si le retrait n'est pas fait, l'acte reste valable : I1 et E1 démarrent aux crans 3 et 4, E2 au cran 2,
|
||||
et le journal dit `inertia_proposal`.
|
||||
|
||||
## Ce que l'acte écrit dans la base de production (à compléter)
|
||||
## Ce que l'acte écrit dans la base de production (donnée runtime)
|
||||
|
||||
- Migrations `0009` (Propositions seed), `0010` (tampon des votes, lot V), `0011` (quorums), additives.
|
||||
- Amendement **Propositions seed** (`2026-11-02-i1/e1/e2-proposition-seed`), par document et par
|
||||
article : la version passe de en vigueur à ouverte et marquée ; `units.in_force_id` à NULL ; une ligne
|
||||
`revisions` de type `seed_proposal` ; le cran à 2 avec une ligne `inertia_changes` (si accepté) ; une
|
||||
ligne `seed_proposal_amendments` ; dans Monnaie libre une ligne `outbox`, qui attend (publication
|
||||
suspendue).
|
||||
- Amendement **quorums** (`2026-11-03-quorums-par-cran`) : `documents.quorums` là où il est NULL ; une
|
||||
ligne `quorum_amendments` ; une ligne `outbox` dans Monnaie libre.
|
||||
- Lot V : ce que `0010` et la première mise en route écrivent (à reprendre de son rapport).
|
||||
- Lot T : l'amendement des textes du quorum (à reprendre de son rapport).
|
||||
- **Migrations additives** : `0009` (Propositions seed : `proposals.seed_featured`, la table
|
||||
`seed_proposal_amendments`), `0010` (tampon : `ballots.mode` défaut `'chain'`,
|
||||
`ballot_lines.outcome` vide, l'index `ballots_doc` ; aucune ligne réécrite), `0011` (quorums :
|
||||
`documents.quorums`, `units.quorum`, la table `quorum_amendments`).
|
||||
- **Amendement Propositions seed** (`2026-11-02-i1/e1/e2-proposition-seed`), par document et par
|
||||
article, seulement si personne n'y a touché (0 vote, 0 bulletin, aucune coquille, révision, traduction
|
||||
de membre ni signalement, origine seed, texte identique) : la version passe d'en vigueur à ouverte et
|
||||
marquée ; `units.in_force_id` à NULL ; une ligne `revisions` de type `seed_proposal` ; le cran à 2,
|
||||
avec une ligne `inertia_changes`, si personne n'a touché au cran (aucune proposition d'inertie
|
||||
ouverte, appliquée ou votée : d'où l'étape 0) ; une ligne `seed_proposal_amendments` ; dans Monnaie
|
||||
libre, une ligne `outbox`, qui attend.
|
||||
- **Amendement quorums** (`2026-11-03-quorums-par-cran`), une fois par document : `documents.quorums`
|
||||
= `[12,12,50,50,50]` (Monnaie libre), `[1,1,1,1,1]` (essai), là où il est NULL ; une ligne
|
||||
`quorum_amendments` ; une ligne `outbox` dans Monnaie libre.
|
||||
- **Le tampon** : la première mise en route n'écrit rien du tampon.
|
||||
- **La publication** : suspendue. Aucun article n'est plus en vigueur dans Monnaie libre, puis (règle
|
||||
« pas avant des votes prouvés », stricte, confirmée par orch le 03/11 à 06 h 11) rien ne part tant
|
||||
qu'une entrée simulée ne tient pas sur les seuls votes prouvés. Le dépôt des textes garde son dernier
|
||||
état.
|
||||
|
||||
## Prémisses à vérifier (à compléter)
|
||||
## Effet attendu
|
||||
|
||||
- Sur une copie fraîche : les propositions qui ont déjà assez de voix pour leur nouveau seuil (9 au
|
||||
cran 2, 39 au cran 3) entreraient au premier balayage. Attendu : 0 vote en production (M5 : 0 vote,
|
||||
1 identité).
|
||||
- La santé et `prod/main` sur `3f10a0e`.
|
||||
- La relecture indépendante du sha figé, inscrite « ok » dans `~/harness/etat/relectures.json`.
|
||||
- `git diff 3f10a0e <sha> -- docker/ .woodpecker/ .env data/` : à lire.
|
||||
- Les deux groupes : I1, E1 et E2 sont des « Propositions seed », ouvertes, au cran 2 ; aucun article
|
||||
n'est en vigueur ; les modules (titre du document au cran 4, ordre de chaque section au cran 2) restent
|
||||
en vigueur.
|
||||
- Le seuil se lit en quorum : 12 · 12 · 50 · 50 · 50 votants dans Monnaie libre ; au cran 2, 9 « pour »
|
||||
passent avec 3 « contre » au plus.
|
||||
- **Le vote simulé s'ouvre dans Monnaie libre dès la mise en ligne** (pas de `LD_VOTE_ACCOUNT`) : toute
|
||||
personne qui ouvre le groupe y vote, une personne invitée comprise ; le vote compte aussitôt, marqué
|
||||
« simulé » ; 9 « pour » simulés font entrer I1, E1 ou E2 **sur le site**, sans publication. À
|
||||
l'ouverture de la chaîne, l'acte « supprime » (`ld-server discard-simulation --apply`) écartera ces
|
||||
votes et réexaminera ce qu'ils ont fait entrer. Effet de « simule le vote à tout endroit » et « il
|
||||
compte, puis s'efface » ; orch le porte à son rapport, pas en question (03/11, 06 h 11).
|
||||
- L'accueil sous la voûte.
|
||||
|
||||
## Retour (à compléter)
|
||||
Irréversibilité : **partielle**. Le code se remet en arrière ; les données changées restent (I1, E1, E2
|
||||
sortis de la vigueur, crans à 2, quorums posés, votes simulés éventuels).
|
||||
|
||||
- Le code : `libredecision-app:previous` (`3f10a0e`). Le serveur tolère les migrations qu'il ne connaît
|
||||
pas (`set_ignore_missing(true)`, `lib.rs:100`), mais les données auront changé : I1, E1, E2 ne sont
|
||||
plus en vigueur, et `3f10a0e` les montrerait comme propositions ouvertes, sans la marque.
|
||||
## Commande exacte
|
||||
|
||||
Selon la règle du canon du 02/11, un dossier « déploie » ne liste que la poussée qui met en ligne :
|
||||
vers le remote `prod` (`gitea@git.open.us.org:EHV/decision.git`), branche `main`, le sha figé
|
||||
(Woodpecker : `.woodpecker/app.yml`, puis `maquette.yml`). La ligne exacte est écrite au gel, dans le
|
||||
dossier sous `actes/`.
|
||||
|
||||
## Vérifications après
|
||||
|
||||
- [ ] Santé vue de l'extérieur : `curl -s https://decision.librodrome.org/api/health` →
|
||||
`"build":"<SHA8>"`.
|
||||
- [ ] Journaux : `ssh sonic 'docker logs lpk-libredecision-app 2>&1 | grep -E "amendment|quorum|publication|ERROR|WARN"'`
|
||||
→ les amendements « applied » (Propositions seed, quorums), « publication suspended », aucune
|
||||
erreur.
|
||||
- [ ] Redémarrage à froid (`docker compose restart` dans `/opt/libredecision-app`), santé, journaux :
|
||||
aucun amendement rejoué.
|
||||
- [ ] Sur une copie fraîche : les comptes de la répétition, à la ligne près ; `integrity_check` ok,
|
||||
`foreign_key_check` vide ; copie retirée ensuite.
|
||||
- [ ] Le dépôt des textes n'a reçu aucun commit (`git ls-remote` de
|
||||
`yvv/decision-depot-textes-reference`, branche `main` : inchangée depuis avant l'acte).
|
||||
- [ ] À l'écran (Yvv, à son retour) : l'accueil sous la voûte ; l'Acte d'engagement : les Propositions
|
||||
seed, aucun article en vigueur ; voter dans Monnaie libre affiche « simulé ».
|
||||
|
||||
## Retour
|
||||
|
||||
- **Le code** : `docker tag libredecision-app:previous libredecision-app:latest`, puis
|
||||
`cd /opt/libredecision-app && docker compose up -d --force-recreate`. `previous` sera `3f10a0e`. Le
|
||||
serveur tolère les migrations qu'il ne connaît pas (`set_ignore_missing(true)`, `lib.rs:100`).
|
||||
- **Les données** : pas de retour automatique. `3f10a0e` montrerait I1, E1, E2 comme propositions
|
||||
ouvertes sans la marque, et aucun article en vigueur ; les votes simulés éventuels y compteraient
|
||||
comme des votes du serveur. Un retour du code au-delà de quelques minutes demande un acte de données
|
||||
à part.
|
||||
- **La publication** : rien n'est parti, rien à retirer.
|
||||
|
||||
## Copie de la base de production (prise par orch, lecture seule, aucune écriture côté production)
|
||||
|
||||
Dans `/tmp/ld-m6-copie` (700 / 600), par `docker exec lpk-libredecision-app cat /data/<f>` pour
|
||||
`libredecision.db`, `-wal`, `-shm`, puis `PRAGMA integrity_check; PRAGMA foreign_key_check;` en
|
||||
`sqlite3 -readonly`. Pas un instantané atomique : `integrity_check` le dirait, et l'on reprend la
|
||||
copie. Première copie : 03/11 à 06 h 11 min 12, production `3f10a0e8`, « ok », aucune clé étrangère
|
||||
cassée. Seconde copie juste avant la poussée.
|
||||
|
||||
Lecture des prémisses : `m6/counts.sh` (scratchpad de l'intégrateur), en lecture seule. Répétition :
|
||||
`m6/repetition.sh`, sur une copie de la copie, publication vers un dépôt nu local ; `/tmp/ld-m6-copie`
|
||||
n'est jamais écrit.
|
||||
|
||||
## Prémisses à vérifier (à compléter au gel)
|
||||
|
||||
1. La production sert `3f10a0e` : santé `"build":"3f10a0e8"` ; `prod/main` → `3f10a0e`.
|
||||
2. Sur une copie fraîche : aucune proposition d'inertie `open` ; 0 vote ; I1, E1, E2 en vigueur, aux
|
||||
crans 3, 4, 4, dans les deux groupes, intouchés (sinon l'amendement les refuse avec sa raison, et
|
||||
l'acte reste valable).
|
||||
3. Sur la même copie : aucune proposition qui aurait déjà ses voix au nouveau seuil (attendu : 0 vote).
|
||||
4. La relecture indépendante du sha figé, inscrite « ok » dans `~/harness/etat/relectures.json` ;
|
||||
aucune autre relecture de ce code en cours.
|
||||
5. `git diff 3f10a0e <SHA> -- docker/ .woodpecker/ .env data/` : à lire.
|
||||
6. Boucle verte sur `<SHA>` et image de production construite.
|
||||
|
||||
Reference in New Issue
Block a user