forked from yvv/decision
Documentation seule. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
432 lines
33 KiB
Markdown
432 lines
33 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 qui se répètent ou se contredisent soient en vigueur ensemble, et avec une publication automatique que
|
||
les applications clientes (Cesium, Ğecko…) peuvent suivre.
|
||
|
||
## Ce que voit la personne
|
||
|
||
1. **Accueil sous la voûte** (revues du 2026-10-30 et du 2026-11-02) : en haut, la clé de voûte
|
||
en grand (logo « Clé de voûte », jamais incliné), et **sous l'arche, centrés, les trois points**
|
||
du leitmotiv, dans cet ordre : boîte à outils · contexte et cadrage · processus et modalités
|
||
(Yvv, 02/11 : « mets les 3 points avec boîte à outils en premier, centrés, sous la voûte assez
|
||
grande pour les abriter ») ; puis le titre **centré, sur deux lignes**, coupé après « possible »
|
||
(« Rendre possible » / « la décision collective », une clé i18n par ligne, jamais de `<br>` dans
|
||
une traduction) ; puis **directement le choix du groupe** (sans session : la connexion). Les
|
||
e2e C1 et M1 gardent cette disposition (lot H, `a3c0a76`). 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.
|
||
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 (une personne),
|
||
et des **liens d'équipe** réutilisables jusqu'à une date (chaque ouverture crée sa propre
|
||
identité, jamais administratrice).
|
||
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, aucun
|
||
article n'est en vigueur** (Yvv, 2026-11-02 ; ADR 0011), et le lecteur le dit : 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é) sont des
|
||
**Propositions seed** : ouvertes, mises en avant pour lancer le vote, marquées « Proposition
|
||
seed », au cran 2 ; elles entrent en vigueur comme toute proposition. Le titre du document et
|
||
l'ordre de chaque section, eux, sont en vigueur sans vote, marqués *seed a minima* avec leur
|
||
nombre réel de votes (*seed a minima · 0 vote*, puis *· 1 vote*…).
|
||
**Le titre du document est un module** (inertie 4) : sous le titre, son état (en vigueur sans
|
||
vote, ou adopté le…), « traduction à revoir » quand le titre lu est la traduction d'un titre
|
||
remplacé, et les mêmes gestes : **Le vote** · **Propositions** · **Proposer un autre titre**.
|
||
**Chaque section se termine par l'ordre de ses articles**, un module à l'inertie 2 : ses
|
||
articles numérotés en deux lignes au plus, la liste entière dans son vote, et
|
||
**Proposer un autre ordre** — une liste où l'on clique un article puis sa nouvelle place (ou
|
||
ses flèches, ou au clavier : Entrée le choisit, haut et bas le déplacent), puis « Proposer cet
|
||
ordre ». Une section d'un seul article n'a pas d'ordre à décider. 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, objections, historique) et
|
||
**« Réglages de la formule »** (W, B, la participation habituelle du groupe et les cinq
|
||
crans avec leur quorum), atteints depuis l'en-tête du document et depuis chaque vote.
|
||
5. **En dessous**, les propositions en cours — les 33 articles du texte source, à zéro vote : les
|
||
trois Propositions seed au cran 2, les 30 autres à l'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 »**. Un ordre proposé s'y lit à la fin de sa section (ses articles
|
||
dans l'ordre proposé, les déplacés marqués dans son vote), un titre proposé en tête.
|
||
6. **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. Les modules y sont : le titre du document en premier, l'ordre de chaque
|
||
section à la fin de celle-ci (« tout pour » une section remplit aussi son ordre).
|
||
7. **Deux aperçus** : « si les bien cotées passent » et « si tout passe ».
|
||
8. **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.
|
||
9. **Messages** (lot F, ADR 0010) : au menu, une boîte avec le nombre de non-lus (une pastille
|
||
sur le bouton du menu en mobile) ; ce qui attend un geste de la personne — une objection à
|
||
laquelle répondre, à lever ou à réitérer, une correction de coquille à valider —, chaque
|
||
message avec son objet, son texte, ses gestes et son échéance. Une version retenue par une
|
||
objection le dit sous l'article, à chacun selon son rôle.
|
||
|
||
## Les règles
|
||
|
||
### Le seuil — formule inertielle Ğ1
|
||
|
||
```
|
||
T' = max(T, Q)
|
||
R = B^W + (M + (1 − M)·(1 − (T'/W)^G)) · T'
|
||
```
|
||
|
||
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, **Q = quorum**
|
||
(ADR 0013, Yvv 2026-11-02 et 03) : sous Q votants, **ceux qui manquent comptent comme « non »**
|
||
(« Ils comptent comme non »). Adoptée si « pour » ≥ ⌈R⌉. Chaque cran a son quorum, le défaut
|
||
d'un article à ce cran : Monnaie libre **12 · 12 · 50 · 50 · 50**, groupe d'essai **1 partout**
|
||
(une voix seule y passe). **L'auteur de la première version d'un article** (un administrateur
|
||
pour un texte du seed) peut en fixer un autre, **avant le premier vote** (« L'auteur, avant le
|
||
1er vote ») : de 2 à W, de 1 à W dans le groupe d'essai ; chaque changement est consigné. Il
|
||
remplace le plancher C (« C suit le cran, mais c'est une proposition par défaut […] c'est
|
||
plutôt un quorum »).
|
||
|
||
**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 des votants 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 | Quorum (Monnaie libre) | Au départ |
|
||
|---|---|---|---|---|---|
|
||
| 1 | très basse | 50 % | 60 % | 12 | |
|
||
| 2 | basse | 50 % | 67 % | 12 | les trois Propositions seed (Raison d'être, Unicité du compte, Réciprocité), l'ordre des articles de chaque section |
|
||
| 3 | moyenne | 55 % | 75 % | 50 | partout ailleurs |
|
||
| 4 | haute | 60 % | 83 % | 50 | le titre du document |
|
||
| 5 | très haute | 66 % | 90 % | 50 | |
|
||
|
||
**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 2Q₀/W, Q₀ le quorum de référence du
|
||
document (`vote_floor` : 50 dans Monnaie libre, 100 votants ; jamais le quorum d'un article) ;
|
||
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 sous le quorum les votants qui
|
||
manquent comptent comme « non ».
|
||
|
||
Avec W = 5 745 et la référence (100 votants), il faut, sans aucun vote, 8, 9, 39, 43 et 46 voix
|
||
pour (crans 1 à 5) ; à 100 votants, 60, 67, 75, 83 et 90. Au cran 2 (quorum 12), 9 « pour »
|
||
passent avec 3 « contre » au plus. Avec W = 7 224 et une médiane de 120 votants, il faut, à 120
|
||
votants, 72, 81, 90, 100 et 108 ; à 500, 284, 310, 347, 386 et 424 ; à 2 000, 1 068, 1 123, 1 252,
|
||
1 389 et 1 537 (ADR 0013).
|
||
|
||
Moteur : `crates/ld-engine/src/threshold.rs` (la formule, la règle du quorum dans
|
||
`judged_voters`, `yes_needed` / `no_needed` ; son cas de référence, lettres données : 7224 / 120
|
||
votants, M 50 %, G 0,2, Q 0 → 94 voix) et `crates/ld-engine/src/inertia.rs` (les crans, leurs
|
||
quorums, la médiane, la référence, les bornes) ; mesure : `crates/ld-server/src/participation.rs` ;
|
||
le quorum d'un article : `crates/ld-server/src/quorum.rs` (la route, « un vote existe » dans
|
||
`voted_units`).
|
||
|
||
### 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* (sans vote) a une marge négative : la première
|
||
proposition qui atteint son seuil le remplace.
|
||
- **Les Propositions seed** (ADR 0011) ne sont pas en vigueur : la place est vide, la première
|
||
version de l'article qui atteint son seuil y entre. Yvv remontera leur inertie une fois les
|
||
textes passés, par un vote : une inertie relevée avant eux leur demanderait davantage.
|
||
- 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 le 30/10,
|
||
seulement si aucun vote n'a changé leur inertie : `crates/ld-server/src/inertia_amend.rs` ; puis
|
||
I1, E1 et E2 descendus au cran 2 des Propositions seed le 02/11, seulement si personne n'a touché
|
||
à leur cran : `crates/ld-server/src/seed_proposal_amend.rs`).
|
||
|
||
### Les modules : l'ordre des articles, le titre du document (ADR 0009)
|
||
|
||
Revue du 2026-10-30 : « En fin de section, il y a un "module" qui permet de changer l'ordre des
|
||
"articles". Lui-même à (2), avec une simple liste clipable. » ; « Le titre du doc à (4). » ; le
|
||
titre d'un article reste voté avec son texte.
|
||
|
||
- Un module se vote **comme un article** : déplié, dans le panier, par la chaîne Ğ1 dans
|
||
Monnaie libre, avec la marge du texte en place (seed a minima : négative) et son cran. Son inertie
|
||
se vote aussi. Il compte dans « Décisions » : le seed passe de 33 à **41 modules à voter**
|
||
(33 articles, le titre, l'ordre de 7 sections ; l'ordonnancement n'a qu'un article).
|
||
- **L'ordre d'une section** est la liste de ses articles qui ont un texte en vigueur ou une
|
||
version ouverte. Un ordre proposé garde ses votes quand la section change : les articles
|
||
arrivés depuis se placent **à la fin**, les articles sortis disparaissent ; s'il redit alors
|
||
l'ordre en vigueur, il ne peut pas entrer. Ni caduc, ni à reconfirmer : un vote permanent dans
|
||
une section vivante ne passerait sinon jamais. À l'entrée, les articles de la section prennent
|
||
ses places dans le nouvel ordre ; rien d'autre ne bouge. Moteur : `crates/ld-engine/src/order.rs`.
|
||
- **Un nouvel article** se propose dans une section et se place à sa fin ; sa place se vote
|
||
ensuite, par l'ordre de la section.
|
||
- **Le titre du document** : à l'entrée d'un autre titre, le document change de titre en
|
||
français ; ses traductions restent éditoriales et passent « à revoir » jusqu'à ce qu'on les
|
||
reprenne. Une coquille du titre se corrige sans vote, par le chemin de toute coquille : celle
|
||
d'un autre attend l'auteur du titre (un administrateur pour le titre de départ) ou 3 jours.
|
||
- **Face aux objections (ADR 0010)** : « redit » et « contredit » portent sur deux articles,
|
||
jamais sur un module. Un ordre ne se corrige pas, ni par son auteur ni par un autre.
|
||
- **« Modules à voter »** ne compte pas une version retenue par une objection : personne ne peut
|
||
la voter tant qu'elle est retenue. Un article dont la seule version ouverte est retenue sort du
|
||
compte, et y revient à la levée. La liste du groupe la compte toujours parmi les propositions en
|
||
cours : elle est ouverte.
|
||
- Dans une base existante, chaque document reçoit ses modules **une fois**, depuis son état
|
||
présent (titre actuel, ordre actuel de chaque section), sans toucher un article ni un vote
|
||
(`crates/ld-server/src/module_amend.rs`, journal `module_amendments`, migration `0007`).
|
||
|
||
### 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 | Échéance |
|
||
|---|---|---|---|
|
||
| Corriger une **coquille** sur son propre texte | l'auteur de la version ; un administrateur sur un texte du seed | appliquée tout de suite : les votes restent, les traductions restent à jour | — |
|
||
| Corriger une **coquille** sur le texte d'un autre | tout membre du groupe | **en attente** : un message à l'auteur (aux administrateurs pour un texte du seed), qui valide ou refuse ; la correction se lit, avec son diff, dans « Détails » | 3 jours sans réponse : appliquée |
|
||
| Revenir sur une correction (ou l'appliquer finalement) | l'auteur, tant que le texte **n'est pas en vigueur** | le texte d'avant revient (ou la correction passe) | — |
|
||
| Corriger un texte **en vigueur** | tout membre ; l'auteur (un administrateur pour le seed) valide | **seule une correction validée** change le texte ; un refus est définitif | 3 jours sans réponse : appliquée |
|
||
| Modifier **le fond** d'une proposition | son auteur | nouvelle révision : les votes antérieurs sont « à reconfirmer », les corrections en attente sont périmées ; elle répond aux objections qui attendent l'auteur | — |
|
||
| Modifier le fond d'un texte **en vigueur** ou d'un texte de départ | personne | refusé : on propose une nouvelle version | — |
|
||
|
||
Deux corrections en attente sur un même texte : chacune est jugée contre le texte voté ; à
|
||
l'application, celle qui ne tombe plus sur le texte qu'elle a lu est **périmée** (« recharge,
|
||
puis recommence »). Les traductions restent éditoriales, sans validation. L'historique dit qui a
|
||
écrit chaque correction et qui l'a validée, ou qu'elle est passée à l'échéance (ADR 0010).
|
||
|
||
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` (la coquille) et `crates/ld-engine/src/correction.rs` (qui
|
||
la laisse entrer) ; écriture : `crates/ld-server/src/proposals.rs` et `crates/ld-server/src/typos.rs`.
|
||
|
||
### Deux articles qui se répètent ou se contredisent
|
||
|
||
Tout membre peut faire une **objection** à une version : elle **redit** un autre article (elle le
|
||
répète) ou elle le **contredit**, motif à l'appui. **Une objection retient la dernière arrivée
|
||
des deux versions jusqu'à sa levée** — jamais un texte en vigueur : si la dernière arrivée est
|
||
en vigueur, c'est l'autre qui est retenue. La version retenue n'entre pas en vigueur, quelles que
|
||
soient ses voix. Pendant l'objection, **on peut retirer son vote ou passer à « contre », jamais
|
||
ajouter un « pour »** (Yvv, 01/11/2026 : « Retirer ou "contre" ») — sous l'article, dans le
|
||
panier comme par la chaîne : « Tout pour » la saute et le dit, « Tout contre » la prend. Elle ne
|
||
peut que perdre des voix tant qu'elle est retenue ; à la levée, elle n'entre qu'avec les voix
|
||
encore là. Pour qu'elle se vote de nouveau, **son auteur répond** : pour une redite,
|
||
il **modifie l'article visé** ; pour une contradiction, il **reformule**. La personne qui a fait
|
||
l'objection reçoit alors un message : **lever** ou **réitérer** ; sans réponse de sa part sous
|
||
**3 jours**, l'objection est levée.
|
||
|
||
| Qui | Quoi | Effet | Échéance |
|
||
|---|---|---|---|
|
||
| tout membre du groupe | faire une objection « redit » ou « contredit », motif à l'appui | la dernière arrivée des deux versions (jamais un texte en vigueur) ne prend plus de « pour » — « contre » et retrait seulement — et n'entre pas en vigueur ; message à son auteur | — |
|
||
| l'auteur de la version retenue (tout membre pour une version du seed) | « Modifier l'article visé » (redit) : une proposition liée, sur l'autre article, partie de son texte ; « Reformuler » (contredit) : une révision de fond de sa version | la main passe à la personne qui objecte : message « lever ou réitérer » | 3 jours pour elle |
|
||
| la personne qui a fait l'objection | lever | la version reprend des « pour », et entre en vigueur si les voix encore là suffisent | — |
|
||
| la personne qui a fait l'objection | réitérer | la main revient à l'auteur : message « réponds à nouveau » | aucune pour l'auteur |
|
||
| personne | (3 jours sans geste après une réponse) | levée : « 3 jours sans suite » | — |
|
||
| un administrateur de trustinWallet | lever | levée « par un administrateur » | — |
|
||
| l'auteur | retirer sa version | l'objection prend fin | — |
|
||
|
||
Une révision de fond de l'une ou l'autre des deux versions vaut réponse, une coquille non ; un
|
||
seul tour à la fois (une autre réponse pendant le tour de la personne qui objecte ne change ni le
|
||
message ni l'échéance) ; une personne n'a qu'une objection debout sur une même paire. Les
|
||
signalements de contradiction d'avant sont devenus des « contredit » (migration 0008). Moteur :
|
||
`crates/ld-engine/src/objection.rs` ; serveur : `crates/ld-server/src/objections.rs`,
|
||
`messages.rs`, `deadlines.rs` (les échéances, au balayage de 5 minutes et au démarrage) ; ADR 0010.
|
||
|
||
### 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. `document.json` dit aussi les modules : le titre
|
||
(son état, ses votes, ses traductions et leur fraîcheur) et l'ordre de chaque section. **Tant
|
||
qu'aucun article d'un document n'est en vigueur, sa publication attend** (Yvv, 2026-11-02 :
|
||
« Suspendre jusqu'au 1er texte ») : ni échec ni tentative comptée, l'état dit « suspendue », et
|
||
le premier texte qui entre envoie tout (`LD_PUBLISH_WITHOUT_ARTICLES=1` publie quand même).
|
||
|
||
### 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 (ni en attente), aucune traduction modifiée, aucune objection, 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`).
|
||
|
||
De même, un texte de départ en vigueur que le seed met désormais en avant comme **Proposition
|
||
seed** (I1, E1, E2 ; ADR 0011) le devient dans une base existante par un amendement gardé, une
|
||
seule fois par document et par article, et seulement si personne ne l'a touché (origine du seed,
|
||
jamais entré par un vote ni confirmé, aucun vote ni bulletin de la chaîne, aucune coquille,
|
||
traduction de membre ou objection, l'historique du seed, l'empreinte attendue) : la même version
|
||
redevient ouverte et marquée, l'historique le dit ; son cran descend à 2 avec lui, seulement si
|
||
personne n'y a touché non plus (aucun changement d'inertie proposé, voté ou appliqué). Décisions
|
||
consignées dans `seed_proposal_amendments` (`crates/ld-server/src/seed_proposal_amend.rs`).
|
||
|
||
De même, les **quorums par cran** du seed (ADR 0013) s'écrivent dans un document qui n'en a pas,
|
||
par un amendement gardé (`2026-11-03-quorums-par-cran`, `crates/ld-server/src/quorum_amend.rs`),
|
||
une seule fois par document : écrits là où il n'y en a pas, gardés s'ils sont autres (refus
|
||
`quorums_set`) ; décisions consignées dans `quorum_amendments`, une ligne à la file là où le
|
||
document publie. Jusque-là, chaque cran lit `vote_floor` (le C d'avant).
|
||
|
||
### Accès — trustinWallet
|
||
|
||
Tout le monde connecté peut tout faire dans les groupes qu'il ouvre (lire, proposer, voter,
|
||
corriger, faire une objection) **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. Chacun reçoit **le reçu de son bulletin** (ses votes
|
||
et son sel), le retrouve sur « Tes bulletins » et le vérifie dans son navigateur ; personne
|
||
d'autre ne le reçoit (ADR 0008, « Le reçu »). 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é, quorum 1 à chaque cran (une voix seule passe), 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) ; remplacé le 2026-11-03 par un quorum par cran, les votants qui manquent comptant comme « non » (ADR 0013) |
|
||
| Textes de départ (2026-11-02) | aucun article en vigueur : trois Propositions seed (I1, E1, E2) au cran 2, la publication suspendue jusqu'au premier texte (ADR 0011) |
|
||
| Quorum (2026-11-02 et 03) | 12 · 12 · 50 · 50 · 50 dans Monnaie libre, 1 dans le groupe d'essai ; l'auteur d'un article le change avant le premier vote ; sous le quorum, les votants qui manquent comptent comme « non » (ADR 0013) |
|
||
| 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 nue de son sceau est ignorée, mais
|
||
une copie **payée** (0,1 Ğ1) 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 lu une dernière fois, puis 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.
|
||
- Une version retenue par une objection attend son auteur aussi longtemps qu'il ne répond pas ;
|
||
une personne qui réitère sans fin la garde hors du vote : un administrateur peut lever (ADR 0010).
|
||
- Les messages sont dans l'application, sans courriel : qui ne passe pas ne les voit pas, et la
|
||
correction ou l'objection qui l'attendait passe à l'échéance de 3 jours.
|
||
- Les aperçus (« si les bien cotées passent », « si tout passe ») montrent les articles seuls :
|
||
un ordre ou un titre proposé n'y change pas encore la place des articles ni le titre (ADR 0009).
|
||
|
||
## Questions ouvertes (à Yvv)
|
||
|
||
- ~~Licence du code~~ — AGPL-3.0 (Yvv, 2026-11-02).
|
||
- ~~Texte « Paramètres par défaut » du seed (F1.2)~~ — réécrit avec N1, N1.1 et O1 selon les règles
|
||
appliquées (Yvv, 2026-11-02) ; un amendement de seed gardé remplace ces propositions ouvertes à
|
||
0 vote, et Yvv relit les textes en ligne.
|
||
- 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).
|