- docker/app.Dockerfile : une image Rust + Svelte, la construction rejoue toute la boucle (fmt, clippy -D warnings, tests, svelte-check, vitest) ; utilisateur non-root, volume /data. docker/app-compose.yml pour sonic (fabio). - .woodpecker/app.yml : produit sur decision.librodrome.org, attend la maquette, écarte tout conteneur qui revendique encore la racine, healthcheck du commit. - .woodpecker/maquette.yml (ex .woodpecker.yml) : la maquette v2 telle quelle, sur maquette.decision.librodrome.org, mêmes volumes. - .env.example de la maquette rangé dans maquette/ ; celui de la v3 à la racine. - Docs : README, CONTRIBUTING (travail à deux), CLAUDE.md v3, HANDOFF, docs/chantiers (feuille de route, fiche, contrôles, onboarding de Chiara, demande à poka), docs/adr 0001–0006. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
155 lines
8.4 KiB
Markdown
155 lines
8.4 KiB
Markdown
# Chantier 1 — Acte d'engagement Certification
|
||
|
||
> Binôme : **Yvv** (porteur) · **Chiara** (testeuse et codeuse — ses tests d'usage valent
|
||
> contrôles). Branche commune : `chantier/acte-certification`. Ouvert le 2026-10-21.
|
||
> Production : https://decision.librodrome.org
|
||
|
||
## Le besoin, en une phrase
|
||
|
||
La communauté Monnaie libre tient son Acte d'engagement Certification comme un **texte vivant** :
|
||
lisible d'abord, modifiable par article, chaque modification passant par un vote dont le seuil
|
||
suit la formule inertielle de la Ğ1 — sans qu'une coquille demande un vote, sans que deux
|
||
articles contradictoires soient en vigueur ensemble, et avec une publication automatique que
|
||
les applications clientes (Cesium, Ğecko…) peuvent suivre.
|
||
|
||
## Ce que voit la personne
|
||
|
||
1. **Accueil sobre** : « Rendre possible la décision collective » / « en fonction du contexte,
|
||
processus et modalités, boîte à outils », les quatre outils en une ligne chacun, puis la
|
||
connexion. Le menu complet à gauche : Décisions · Docs de référence · Mandats · Protocoles
|
||
(seul Docs de référence est actif).
|
||
2. **Connexion Ğ1** — la même que le forum Monnaie libre (connect.monnaie-libre.fr). En attendant
|
||
l'inscription du client OAuth2, des **liens d'invitation** à usage unique.
|
||
3. **Groupes** : avec une clé Ğ1, on voit Monnaie libre, Axiom, Librodrome et le Groupe local
|
||
Vallée Drôme Crestois — pas l'Atelier du canal. Un groupe et son contenu ne s'ouvrent qu'à
|
||
ses membres ; Monnaie libre s'ouvre à tout membre de la toile de confiance, les autres
|
||
groupes sur accord dans trustinWallet.
|
||
4. **Le texte en vigueur**, seul, en grand, typographie de lecture (Literata) : au départ le
|
||
Préambule et les deux engagements fondamentaux (Unicité du compte, Réciprocité), marqués
|
||
*seed a minima · 0 vote*. Au survol (ou toujours visibles sur mobile), trois gestes discrets :
|
||
**Le vote** (en cours, inertie, formule, annexes) · **Les propositions** · **Proposer**. Ils
|
||
ouvrent un panneau latéral (une feuille sur mobile) dont l'état vit dans l'URL.
|
||
5. **En dessous**, les propositions en cours — les 30 autres articles du texte source, à zéro
|
||
vote, inertie standard — rangées par section (introduction, fondamental, technique,
|
||
conclusion, annexes, formule, inertie, ordonnancement), les variantes signalées.
|
||
6. **Deux aperçus** : « si les bien cotées passent » et « si tout passe ».
|
||
7. **Trois langues** : fr · en · es, pour l'interface comme pour le texte. Le français fait foi ;
|
||
une traduction devenue ancienne (le français a changé depuis) est signalée.
|
||
|
||
## Les règles
|
||
|
||
### Le seuil — formule inertielle Ğ1
|
||
|
||
```
|
||
R = C + B^W + (M + (1 − M)·(1 − (T/W)^G)) · max(0, T − C)
|
||
```
|
||
|
||
W = électorat (Monnaie libre : taille de la toile, lue sur la chaîne toutes les 6 h ; un groupe
|
||
géré : ses membres), T = votes exprimés, M = majorité, G = gradient, B = 0,1, **C = plancher de
|
||
votants « pour »** (Monnaie libre : **50** ; groupe d'essai : 1). Adoptée si « pour » ≥ ⌈R⌉.
|
||
|
||
| Inertie | M | G |
|
||
|---|---|---|
|
||
| basse | 50 % | 0,1 |
|
||
| standard (au départ, partout) | 50 % | 0,2 |
|
||
| haute | 60 % | 0,4 |
|
||
| maximale | 66 % | 0,6 |
|
||
|
||
Moteur : `crates/ld-engine/src/threshold.rs` (testé : 7224 / 120 votants → 94 voix requises).
|
||
|
||
### Le vote permanent
|
||
|
||
- Toute version d'un article (proposition ou texte en vigueur) se vote à tout moment.
|
||
- Une proposition **remonte en vigueur** dès qu'elle atteint son seuil **et** tient une marge
|
||
(pour − requis) plus large que la version en place. La version déplacée redevient une
|
||
proposition, avec ses votes. Un *seed a minima* a pour marge −C : la première proposition qui
|
||
atteint son seuil le remplace.
|
||
- Retirer un article est une proposition comme une autre (« retirer cet article »).
|
||
- Le balayage tourne à chaque vote et toutes les 5 minutes (la taille de la toile bouge).
|
||
|
||
### L'inertie se vote aussi
|
||
|
||
Chaque article porte son inertie. La changer est une proposition, **votée elle-même à
|
||
l'inertie du cran au-dessus** (« inertie + ») : alourdir ou alléger demande plus que modifier.
|
||
|
||
### Corriger n'est pas voter
|
||
|
||
| Geste | Qui | Effet sur les votes |
|
||
|---|---|---|
|
||
| Corriger une **coquille** (accents, casse, ponctuation, espaces ; ou jusqu'à 2 mots à 2 lettres près) | tout membre sur un texte de départ ou en vigueur ; l'auteur sur sa proposition | aucun — les votes restent, les traductions restent à jour |
|
||
| Modifier **le fond** d'une proposition | son auteur | nouvelle révision : les votes antérieurs sont « à reconfirmer », les signalements tombent |
|
||
| Modifier le fond d'un texte **en vigueur** ou d'un texte de départ | personne | refusé : on propose une nouvelle version |
|
||
|
||
Le classement est prudent : un chiffre ou un mot de négation (ne, pas, jamais, personne…)
|
||
touché rend la modification « de fond ». Moteur : `crates/ld-engine/src/edit.rs`.
|
||
|
||
### Deux articles qui se contredisent
|
||
|
||
Tout membre peut **signaler une contradiction** entre deux propositions, motif à l'appui. Tant
|
||
que le signalement tient, celle des deux qui n'est pas en vigueur **ne peut pas entrer en
|
||
vigueur**. Il se lève par son auteur (ou un administrateur), ou tombe quand la proposition
|
||
signalée est révisée sur le fond.
|
||
|
||
### Une décision par proposition
|
||
|
||
L'éditeur a un **assistant à règles** (pas d'IA pour l'instant ; plus tard, une IA locale, sans
|
||
abonnement) : il repère un texte qui porte plusieurs décisions et propose de le **découper en
|
||
brouillons**, signale une proposition très proche d'une existante, et un texte long. Moteur :
|
||
`crates/ld-engine/src/assist.rs`.
|
||
|
||
### Brouillon → proposition
|
||
|
||
On écrit en brouillon (libre, invisible des autres), on soumet ; la proposition est alors
|
||
ouverte au vote. Son auteur peut la retirer.
|
||
|
||
### Publication
|
||
|
||
Chaque entrée en vigueur (et la publication initiale) passe par une file d'envoi : le serveur
|
||
écrit `fr.md`, `en.md`, `es.md` (front matter : document, langue, source, mise à jour ; les
|
||
traductions marquées éditoriales) et `document.json`, commit et pousse sur
|
||
`git.duniter.org/Yvv/libredecision-textes`, chemin `monnaie-libre/acte-engagement-certification/`.
|
||
Échec → nouvel essai avec délai croissant. La clé de publication est générée par le serveur ;
|
||
sa partie publique s'affiche dans trustinWallet, à ajouter comme clé de déploiement (écriture)
|
||
du dépôt. Le groupe d'essai ne publie jamais.
|
||
|
||
### Accès — trustinWallet
|
||
|
||
Tout le monde connecté peut tout faire dans les groupes qu'il ouvre (lire, proposer, voter,
|
||
corriger, signaler) **sauf la gestion des accès**, réservée aux administrateurs de trustinWallet
|
||
(`/acces`) : membres des groupes, invitations, administrateurs, retours, clé de publication.
|
||
Le nom trustinWallet remplace trustWallet (déjà pris). Règles : `crates/trustin-access`.
|
||
|
||
## Le groupe d'essai
|
||
|
||
Caché, plancher C = 1, sans publication : on y éprouve tout (adoption, coquilles, découpage)
|
||
sans toucher au texte de la communauté. Chiara et Yvv en sont membres.
|
||
|
||
## Décisions prises (2026-10-21, avec Yvv)
|
||
|
||
| Question | Décision |
|
||
|---|---|
|
||
| Stack | Rust (serveur, moteur) + Svelte (interface), pour la durée, la performance, la modularité |
|
||
| Domaine | le produit à la racine `decision.librodrome.org` ; la maquette sur `maquette.decision.librodrome.org` |
|
||
| Connexion | client OAuth2 de connect.monnaie-libre.fr (demande à poka) ; liens d'invitation en attendant |
|
||
| Dépôt des textes | `git.duniter.org/Yvv/libredecision-textes` (compte d'Yvv) |
|
||
| Garde-fou du vote permanent | nombre minimal de votants « pour » (C) |
|
||
| Langues | fr, en, es ; le français est voté, les traductions sont éditoriales |
|
||
| Chiara | testeuse et codeuse |
|
||
| Assistant | à règles d'abord ; IA locale plus tard, sans dépendance d'abonnement |
|
||
|
||
Les raisons longues sont dans `docs/adr/`.
|
||
|
||
## Questions ouvertes (à Yvv)
|
||
|
||
- **Licence** du code — non choisie.
|
||
- **Texte « Paramètres par défaut » du seed** (F1.2) : il annonce C = 0 et une durée de 30 jours,
|
||
alors que le vote est permanent avec C = 50. À reformuler par proposition (c'est leur rôle),
|
||
ou à corriger dans le seed avant la première publication si c'est une erreur de transcription.
|
||
- Anglais : l'interface est en anglais américain, le seed en anglais britannique.
|
||
|
||
## Ce qui reste après la livraison
|
||
|
||
- L'inscription du client OAuth2 (poka) : `DEMANDE-CONNECT.md`, puis les deux secrets dans la CI.
|
||
- Les retours de Chiara → contrôles → corrections, sur la branche du chantier.
|
||
- Ensuite : chantier 2, l'Acte d'engagement forgeron (qualification d'une compétence).
|