- ADR 0008 : bulletin scellé (ld1: + blake2b-256, sel de 128 bits), la transaction utility.batchAll (virement + remarque), la confirmation sur l'indexeur, le dernier fait foi dans l'ordre de la chaîne, groupes gérés, ce que voit la chaîne, ce que sait le serveur, réglages LD_VOTE_*, coût et limites. Noté dans 0006. - CHANTIER : le vote déplié, le panier, « une personne, une voix » par la chaîne ; le droit de vote se vérifie au moment de la confirmation sur la chaîne. - CONTROLES : C4, C5, C6, C11, C17, C19, C20, M1 mis à jour ; C21–C24 ; passage du lot B, 25 / 25 verts. - CLAUDE.md : ballots.rs, indexer.rs, ballot/address du moteur, wallet/, panier, chaîne simulée des e2e. Compose : où poser LD_VOTE_ACCOUNT (en commentaire). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
19 KiB
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
- Accueil sobre (revue du 2026-10-30) : « Rendre possible la décision collective », puis le leitmotiv en trois lignes (contexte et cadrage · processus et modalités · boîte à outils), puis directement le choix du groupe (sans session : la connexion). Le pavé des quatre outils accueille dans le groupe choisi, suivi de ce qui y est « En cours ». Le menu complet à gauche : Décisions · Docs de référence (avec le nombre de docs en cours) · Mandats · Protocoles ; seul Docs de référence réagit, les autres s'ouvrent sur leurs « À venir », éteints. Décisions : une ligne par doc en cours, avec le nombre de modules qui restent à voter.
- 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 (une personne), et des liens d'équipe réutilisables jusqu'à une date (chaque ouverture crée sa propre identité, jamais administratrice).
- 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.
- Le texte en vigueur, seul, en grand, typographie de lecture (Literata) : au départ la
Raison d'être (texte d'Yvv du 2026-10-30, qui remplace le Préambule : « Derrière une clé
il n'y a qu'un seul être humain vivant ; derrière un être humain, il n'y a qu'une seule clé
certifiante. ») 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 · Les propositions · Proposer. Le vote se déplie sous l'article, façon
accordéon (un seul à la fois, l'état dans l'URL :
?vote=) : le niveau d'eau, les totaux pour et contre (jamais qui), le seuil et les voix qui manquent, ton vote et où il en est (enregistré, inscrit sur la chaîne Ğ1, en attente de la chaîne, à reconfirmer, non compté et pourquoi), puis l'inertie et la formule. Les autres gestes ouvrent un panneau latéral (une feuille sur mobile), lui aussi dans l'URL : Panier, Propositions, Proposer, Détails d'une version (coquilles, traductions, signalements, historique) et « Réglages de la formule » (W, C, B, la participation habituelle du groupe et les cinq crans), atteints depuis l'en-tête du document et depuis chaque vote. - En dessous, les propositions en cours — les 30 autres articles du texte source, à zéro vote, inertie 3 / 5 — rangées par section (introduction, fondamental, technique, conclusion, annexes, formule, inertie, ordonnancement), une ligne par article : un article qui a plusieurs versions (variantes du seed, propositions rivales) montre leur nombre et la meilleure en tête (niveau d'eau, pour / contre) ; la ligne se déplie sur ses versions, chacune avec son étiquette, son niveau et ses marques, et chacune déplie son vote. Les filtres gardent un article dès qu'une de ses versions passe. Chaque section offre « Voter cette section ».
- Le vote groupé (Yvv, 2026-10-30 : « Je peux voter tout d'un coup, ou une section entière, ou un article avec son titre, ou séparément ») : « Voter en lot » ouvre un panier — pour, contre ou retirer, article par article ; « tout pour » / « tout contre » pour une section ou tout le document, jamais pour un article dont plusieurs versions sont en concurrence (il est montré, on y choisit sa version) ; puis un seul geste : une écriture dans un groupe géré, une transaction sur la chaîne Ğ1 dans Monnaie libre. Le panier tient sur un téléphone et reste le temps de l'onglet.
- Deux aperçus : « si les bien cotées passent » et « si tout passe ».
- 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⌉.
Cinq crans d'inertie (Yvv, 2026-10-30 ; ADR 0007). Seuls M et G dépendent du cran k : M_k est la majorité à pleine participation, s_k la part de « pour » exigée au-delà de C quand le groupe vote comme d'habitude (participation p̃), et G_k s'en déduit : G_k = ln(1 − (s_k − M_k)/(1 − M_k)) / ln(p̃).
| Cran | Nom | M_k | s_k | Au départ |
|---|---|---|---|---|
| 1 | très basse | 50 % | 60 % | |
| 2 | basse | 50 % | 67 % | |
| 3 | moyenne | 55 % | 75 % | partout |
| 4 | haute | 60 % | 83 % | Unicité du compte, Réciprocité (et le titre du doc, à venir) |
| 5 | très haute | 66 % | 90 % |
La participation habituelle p̃ = la médiane des votants des propositions du groupe votées depuis un an (au moins 5), sur W ; avant, la référence 2C/W (Monnaie libre : 100 votants) ; toujours ramenée entre 1 % et 50 %. Mesurée une fois par jour. Le seuil croît avec le cran, la part exigée se relâche vers M quand plus de monde vote, et rien ne passe sous C voix pour.
Avec W = 7 224, C = 50 et une médiane de 120 votants, il faut, à 120 votants, 92, 97, 103, 109 et 113 voix pour ; à 500, 306, 329, 362, 397 et 432 ; à 2 000, 1 091, 1 145, 1 271, 1 404 et 1 549.
Moteur : crates/ld-engine/src/threshold.rs (la formule ; son cas de référence, lettres
données : 7224 / 120 votants, M 50 %, G 0,2, C 0 → 94 voix) et crates/ld-engine/src/inertia.rs
(les crans, la médiane, la référence, les bornes) ; mesure : crates/ld-server/src/participation.rs.
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, un cran de 1 à 5. La changer est une proposition, votée
elle-même au cran actuel de l'article : l'inertie de l'inertie hérite de celle de l'article
(Yvv, 2026-10-30 ; elle était votée au cran au-dessus, « inertie + », depuis le 2026-10-21).
L'article dit le passé de son inertie : passée de tel cran à tel autre, par un vote ou par le
réglage de départ du texte (E1 et E2 relevés de 3 à 4 dans une base existante, seulement si
aucun vote n'a changé leur inertie : crates/ld-server/src/inertia_amend.rs).
Corriger n'est pas voter
Une coquille touche les lettres et les espaces, rien d'autre. Accents, majuscules, le style des apostrophes et des guillemets, un mot collé ou coupé (« latransmission » → « la transmission »), ou au plus deux mots mal tapés — chacun un seul glissement de clavier au cœur du mot (« certifcation » → « certification »). Tout le reste passe par une proposition : la ponctuation, les chiffres, les signes, l'emphase, les formules, les adresses, et tout changement de sens.
| Geste | Qui | Effet sur les votes |
|---|---|---|
| Corriger une coquille | 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 |
Pourquoi si strict : six relectures indépendantes ont montré qu'une ponctuation laissée libre finit toujours par porter un sens — un signe moins devant un nombre en gras, deux conditions d'une liste fusionnées en une, une virgule glissée dans « 50 », une parenthèse déplacée qui change la portée d'une exception. La règle est donc construite à l'envers d'une liste noire :
- la forme du texte (tout ce qui n'est ni lettre latine ni espace, dans l'ordre : ponctuation, chiffres de toute écriture, signes, emphase, parenthèses, sosies, marques superposées, autres alphabets) ne bouge pas ; une espace à côté d'un chiffre en fait partie (« 1 5 » n'est pas « 15 ») ; les apostrophes et guillemets de tous styles comptent pour un même signe ; « lettre latine » s'entend de celles du français, de l'anglais et de l'espagnol (les lettres latines rares qui imitent un signe, « ǃ » ou « Ʒ », font partie de la forme) ; « espace » s'entend de l'espace, de l'insécable et de la fine insécable entre deux mots ; le saut de ligne et l'indentation qui ouvre une ligne font partie de la forme (en Markdown, ils font les listes et les paragraphes) ; un titre tient sur une ligne ;
- les adresses (liens, domaines, courriels) et les identifiants qui contiennent un chiffre (clés publiques, références) sont comparés à l'identique, casse comprise ; le contenu entre accents graves aussi ;
- les espaces ne font que coller ou couper des mots, deux au plus, jamais en touchant une négation ou une quantité — ni ses morceaux ni le mot entier (« Si non » → « Sinon », « ne certifier » → « necertifier », « jamais » → « ja mais », « sur tout » → « surtout » sont du fond) —, et jamais déplacer une frontière (« les avoir » → « le savoir » est du fond) ;
- le titre et le corps sont jugés chacun pour soi (un titre n'absorbe pas le début du corps), puis ensemble (deux mots au plus en tout) ;
- un glissement = une lettre ajoutée, retirée, ou deux voisines inversées, jamais aux deux premières ni aux deux dernières lettres (préfixes « valide » → « invalide », terminaisons « certifierai » → « certifierais »), jamais une lettre remplacée (« deux » → « dix »), jamais sur un mot de négation, de quantité ou de position (ne, jamais, deux, majorité, tous, dessus…) ;
- chaque correction est mesurée contre le texte voté, jamais contre la correction précédente : les glissements ne s'additionnent pas ;
- les caractères invisibles (tout l'ensemble Unicode des caractères ignorables : inversion du sens d'écriture, largeur nulle, trait d'union conditionnel, sélecteurs de variante, étiquettes… ; et les caractères de contrôle autres que saut de ligne et tabulation) sont refusés partout où l'on écrit ;
- une correction ne s'écrit que sur le texte qui a été jugé : si le texte est entré en vigueur ou a changé entre-temps, c'est un conflit (« recharge, puis recommence »).
Moteur : crates/ld-engine/src/edit.rs ; règle d'écriture : crates/ld-server/src/proposals.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.open.us.org/yvv/decision-depot-textes-reference, 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.
Un texte de départ remplacé
Un document seedé n'est jamais réinstancié : quand le seed change un texte de départ (le
Préambule devenu Raison d'être), un amendement de seed le remplace dans une base existante,
une seule fois, et seulement sur un article que personne n'a touché (seed a minima d'origine,
révision 1, aucun vote, aucune correction, aucune traduction modifiée, aucun signalement, texte
identique à l'empreinte attendue). Chaque décision est consignée (seed_amendments, et dans les
journaux quand l'article garde son texte) ; appliqué, l'amendement se lit dans l'historique de
l'article (« texte de départ remplacé », avec le diff) et le texte est republié
(crates/ld-server/src/seed_amend.rs).
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, par la chaîne Ğ1 (ADR 0008, Yvv 2026-10-30 : « une
personne une voix, mais la voix peut s'exprimer plusieurs fois […] c'est le dernier qui fait
foi […] une transaction par vote »). Un vote — un article, une section ou tout le document —
est une transaction signée par le portefeuille de la personne (duniter-connect, ou Ğecko par
un lien et un QR code) : 0,1 Ğ1 vers le compte des votes et, dans la même transaction, le sceau
du bulletin (ld1: + 64 chiffres hexadécimaux). La voix est celle de l'identité Ğ1 du compte
qui signe, membre au moment où le serveur confirme la transaction sur l'indexeur ; quelle que
soit la session (invitation ou connexion Ğ1), la même identité n'a qu'une voix par version, et
le dernier vote fait foi, dans l'ordre de la chaîne. La chaîne montre qui a voté et quand,
jamais quoi ; chacun ne voit que les totaux. Sans compte des votes configuré
(LD_VOTE_ACCOUNT), le vote par la chaîne est fermé et l'interface le dit. Dans les groupes
gérés (essai, Axiom…), tout membre vote directement, sans portefeuille.
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.open.us.org/yvv/decision-depot-textes-reference pour l'instant (2026-10-21) ; puis un dépôt pour l'ouverture, par transfert, et le dépôt officiel pour les textes en vigueur |
| 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 de la confirmation sur la chaîne : un membre sorti de la toile, ou dont l'accès est révoqué, garde les voix déjà confirmées.
- Le serveur fait confiance à l'indexeur pour lire la transaction (remarque, virement, identité, appartenance à la toile) ; plusieurs indexeurs se configurent (ADR 0008).
- Par Ğecko, le bulletin n'est lié à aucun compte : une copie de son sceau incluse avant lui par un autre compte le prendrait. Par l'extension, il est lié au compte qui signe.
- Un bulletin non vu sur la chaîne en 24 heures est lâché : un paiement plus tardif ne compte pas.
- 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.
- Une identité d'invitation peut porter le nom d'un membre Ğ1 qui ne s'est pas encore connecté (la connexion Ğ1 ne vérifie pas les noms) : la mention « sur invitation » à côté de chaque auteur qui n'est pas venu avec sa clé Ğ1 les distingue.
- Des accents ou une ponctuation qui portent du sens restent des coquilles (« ou » / « où », « a » / « à », une virgule autour d'une relative) : le diff de chaque correction est visible dans l'historique de l'article.
- Les traductions (en, es) sont éditoriales : tout membre les corrige sans vote, et elles sont republiées — le français fait foi.
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).