- Mot mal tapé = un seul glissement (une lettre ajoutée, retirée, ou deux voisines inversées), jamais au début du mot (préfixes : valide/invalide, limitée/illimitée), jamais une lettre remplacée (deux/dix, majorité/minorité), jamais sur un mot de négation ou de quantité, mots de 4 lettres au moins. - Parenthèses, crochets, « / » et tout ce qui est entre accents graves comptent comme le sens (ceil(N^(1/5)) → ceil(N^1/5) n'est plus une coquille). - Caractères invisibles (inversion du sens d'écriture, largeur nulle, BOM) refusés dans les textes, titres, traductions et motifs de signalement. - Déploiement : la version en service est gardée (image « previous ») ; un témoin marque le déploiement en cours ; « retablir » relance la maquette au premier déploiement, la version précédente ensuite ; la liste des conteneurs retirés n'est plus vidée par un pipeline annulé. - Tests : 59 Rust (dont 14 scénarios d'API, avec deux → dix sur E2 en vigueur et l'inversion bidi), e2e 12 / 12. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
176 lines
10 KiB
Markdown
176 lines
10 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 mal tapés, une lettre ajoutée, retirée ou inversée chacun) | 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 — trois relectures indépendantes l'ont éprouvé. Sont toujours « de
|
||
fond » : un chiffre, un signe, un séparateur dans un nombre, une relation, une parenthèse
|
||
changés (« 50 » → « 5,0 », « 182.625 » → « 182 625 », « ≥ » → « ≤ », « + » → « - »,
|
||
`ceil(N^(1/5))` → `ceil(N^1/5)`) ; tout ce qui est entre accents graves (formules) ; un mot de
|
||
négation ou de quantité touché (ne, pas, jamais, deux, dix, majorité, tous…) ; une lettre
|
||
remplacée par une autre (« majorité » → « minorité ») ; le début d'un mot touché (« valide » →
|
||
« invalide », « limitée » → « illimitée »). Les caractères invisibles (inversion du sens
|
||
d'écriture, espaces de largeur nulle) sont refusés : ils peuvent faire lire « 21 » là où le texte
|
||
dit « 12 ». 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`.
|
||
|
||
**Une personne, une voix.** Dans Monnaie libre, dont l'électorat W est la toile de confiance,
|
||
**seuls les membres de la toile votent** (connexion Ğ1). Une identité d'invitation y lit,
|
||
propose, corrige et signale, mais ne vote pas : sinon la même personne, invitée puis connectée
|
||
avec sa clé, voterait deux fois. Dans les groupes gérés (essai, Axiom…), tout membre vote.
|
||
|
||
## 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/`.
|
||
|
||
## Limites connues (assumées pour ce premier chantier)
|
||
|
||
- Le droit de vote se vérifie **au moment du vote** : un membre sorti de la toile, ou dont
|
||
l'accès est révoqué, garde les voix déjà exprimées.
|
||
- Dans un groupe géré (essai, Axiom…), une même personne admise sous une identité d'invitation
|
||
**et** sous sa clé Ğ1 aurait deux voix : c'est à l'administration de n'en admettre qu'une.
|
||
- Un administrateur peut créer un nouveau lien pour une identité d'invitation existante
|
||
(pour la dépanner) — jamais pour une identité Ğ1.
|
||
|
||
## 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).
|