forked from yvv/decision
Merge branch 'chantier/acte-certification' into lot/u-lecteur
This commit is contained in:
@@ -3,6 +3,13 @@
|
||||
> **Complétée par [0007](0007-inertie-cinq-crans.md)** (2026-10-30) : l'inertie a cinq crans,
|
||||
> calés sur la participation habituelle du groupe, et un changement d'inertie se vote au cran
|
||||
> de l'article — il n'est plus voté au cran au-dessus.
|
||||
> **Complétée par [0011](0011-propositions-seed.md)** (2026-11-02) : aucun article n'est en
|
||||
> vigueur au départ ; les textes de départ des articles sont des Propositions seed, seuls les
|
||||
> modules restent des *seeds a minima*.
|
||||
> **Le plancher C est remplacé par [0013](0013-quorum.md)** (2026-11-03) : un quorum Q par
|
||||
> cran (12 · 12 · 50 · 50 · 50 dans Monnaie libre, 1 dans le groupe d'essai), que l'auteur
|
||||
> d'un article peut changer avant le premier vote ; sous le quorum, les votants qui manquent
|
||||
> comptent comme « non ». `vote_floor` reste, comme quorum de référence de p0.
|
||||
|
||||
**Contexte.** Chaque article est sous vote permanent ; « dès qu'une proposition atteint le score,
|
||||
elle remonte en vigueur ». La formule inertielle Ğ1 donne un seuil faible quand peu de gens
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
|
||||
> Complète [0002](0002-vote-permanent.md) : la règle « l'inertie se vote au cran au-dessus »
|
||||
> y est remplacée par l'héritage décrit ici. Décision d'Yvv du 2026-10-30 (revue, L10).
|
||||
> **Le C de la formule est remplacé par [0013](0013-quorum.md)** (2026-11-03) : R = B^W +
|
||||
> ratio(T')·T', T' = max(T, Q), un quorum Q par cran. M, G_k, s_k, p̃ et ses bornes restent ;
|
||||
> « au-delà de C » se lit désormais « parmi les T' votants » ; les nombres ci-dessous sont ceux
|
||||
> d'avant (ceux d'après : ADR 0013).
|
||||
|
||||
**Contexte.** Quatre niveaux (`low`, `standard`, `high`, `max`) fixaient M et G une fois pour
|
||||
toutes. Yvv, 2026-10-30 : « L'indice d'inertie doit avoir 5 niveaux. Tu mets par défaut au
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
> changés sans toucher au reste. Corrigé le 2026-10-31 après la relecture indépendante de
|
||||
> `74f96be` (lot B2) : finalité, recherche filtrée et paginée, tâche de fond, plafond, bulletin
|
||||
> Ğecko, bulletins lâchés, reçu.
|
||||
> **Complétée par [0012](0012-tampon-des-votes.md)** (2026-11-02, lot V) : le bulletin en attente
|
||||
> est une intention, visible aussitôt pour la personne et dans les totaux montrés (jamais dans
|
||||
> l'adoption) ; la réconciliation remplace « le dernier fait foi » ligne à ligne ; sans
|
||||
> `LD_VOTE_ACCOUNT`, le vote est simulé au lieu d'être fermé.
|
||||
|
||||
**Contexte.** Jusqu'ici, un vote était une ligne écrite par le serveur pour la session connectée.
|
||||
Dans Monnaie libre, l'électorat W est la toile de confiance, mais la connexion Ğ1
|
||||
|
||||
@@ -6,6 +6,9 @@
|
||||
> coquille d'un texte du seed validée par un administrateur sont les choix par défaut d'orch.
|
||||
> Lot F, 2026-10-31. **Révisée le 2026-11-01** (décision d'Yvv, lot G) : sur une version
|
||||
> retenue, on peut encore retirer son vote ou voter « contre », jamais ajouter un « pour ».
|
||||
> **Révisée par [0012](0012-tampon-des-votes.md)** (2026-11-02, lot V) : un « pour » dont la
|
||||
> preuve arrive sur la chaîne pendant qu'une objection retient la version est écarté ; il ne
|
||||
> compte plus « tel qu'il est signé ».
|
||||
|
||||
**Contexte.** Le signalement de contradiction (0004) bloquait l'entrée en vigueur sans dire à
|
||||
qui revenait le geste suivant, et une coquille corrigée par n'importe qui changeait le texte
|
||||
@@ -37,7 +40,8 @@ d'un autre sans lui demander. Yvv, 2026-10-30 :
|
||||
direct, vote groupé, bulletin de la chaîne : `409 objection`, et une ligne refusée refuse tout le
|
||||
vote). La version ne peut que perdre des voix tant qu'elle est retenue ; à la levée, elle
|
||||
n'entre qu'avec les voix encore là. Les votes déjà faits restent ; un bulletin scellé avant
|
||||
l'objection et confirmé après compte tel qu'il est signé, sans la faire entrer. Règle :
|
||||
l'objection et confirmé après compte tel qu'il est signé pour « contre » et le retrait ; son
|
||||
« pour » est écarté (0012). Règle :
|
||||
`ld_engine::objection::may_cast`, appliquée par `DocState::admits`.
|
||||
- Une personne n'a qu'une objection debout sur une même paire (`objection_exists`).
|
||||
- **L'auteur de la version retenue répond** : pour une redite, il **modifie l'article visé**
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
# 0011 — Les Propositions seed : rien en vigueur au départ, trois textes mis en avant
|
||||
|
||||
> Remplace, dans [0002](0002-vote-permanent.md), « les textes de départ sont des *seeds a
|
||||
> minima* » pour les articles : seuls les modules (le titre, l'ordre de chaque section, ADR 0009)
|
||||
> restent en vigueur sans vote. Décision d'Yvv du 2026-11-02.
|
||||
|
||||
**Contexte.** Depuis le 2026-10-21, la Raison d'être (I1) et les deux engagements fondamentaux,
|
||||
Unicité du compte (E1) et Réciprocité (E2), étaient en vigueur au départ, sans vote (*seeds a
|
||||
minima*, marge −C). Yvv, 2026-11-02 : « pour le démarrage, conserve un statut particulier pour
|
||||
les 3 premiers modules. Mais ils ne sont pas en vigueur. Appelle les "Proposition seed" (intégré
|
||||
par un ou deux clients pour amorcer le mouvement de vote). » Puis : « on pouvait l'amorcer avec
|
||||
une inertie basse, pour que le nombre de votes initiaux soit assez petits pour commencer
|
||||
l'expérience en mode prod. Et je mettrai, une fois les textes passés, une inertie forte pour
|
||||
éviter que l'inertie passe avant les textes. » Au formulaire du même jour : le cran 2
|
||||
(« basse ») ; la publication « Suspendre jusqu'au 1er texte ».
|
||||
|
||||
## Décision
|
||||
|
||||
- **Une Proposition seed** est une proposition ouverte du seed, mise en avant pour lancer le
|
||||
vote : I1, E1 et E2 de l'Acte d'engagement Certification, dans chaque groupe. Elle **n'est pas
|
||||
en vigueur** : elle y entre comme toute proposition, par son seuil, la place étant vide. Sa
|
||||
marque est écrite à part (`proposals.seed_featured`) ; l'API dit `seedProposal` tant que la
|
||||
version est ouverte et n'est jamais entrée en vigueur (`docs::ProposalRow::seed_proposal`).
|
||||
Entrée en vigueur, c'est un texte adopté comme un autre. L'interface la marque
|
||||
« Proposition seed » (fr), « Seed proposal » (en), « Propuesta seed » (es).
|
||||
- **Au départ, aucun article n'est en vigueur.** Le titre du document et l'ordre de chaque
|
||||
section restent des *seeds a minima* (en vigueur sans vote, ADR 0009). Le lecteur le dit
|
||||
(« Aucun article n'est en vigueur… ») ; les trois textes se lisent dans « Propositions en
|
||||
cours » et dans l'aperçu « si tout passe ».
|
||||
- **Le cran 2 pour les trois**, une seule constante : `seed::SEED_PROPOSAL_LEVEL`. Le seed ne
|
||||
leur donne pas de cran (le chargement du seed le refuse), l'amendement écrit celui-là.
|
||||
**L'intention d'Yvv** : remonter l'inertie une fois les textes passés. Une proposition de
|
||||
changement d'inertie se vote au cran de l'article (ADR 0007) : faite avant l'entrée des textes,
|
||||
elle pourrait passer avant eux et leur demander davantage ; faite après, elle protège des
|
||||
textes déjà adoptés. Le serveur n'automatise rien : c'est un vote, après les textes.
|
||||
- **La publication attend le premier texte.** Tant qu'aucun article d'un document n'est en
|
||||
vigueur, sa file d'envoi attend (`publish::waits_for_a_text`) : ce n'est pas un échec (aucune
|
||||
tentative comptée, aucune erreur), l'API dit `publication.state = "suspended"`. Le premier
|
||||
texte qui entre ajoute une ligne à la file, et tout part avec lui. `LD_PUBLISH_WITHOUT_ARTICLES=1`
|
||||
publie quand même (un document sans article). Le groupe d'essai ne publie jamais.
|
||||
|
||||
## Une base existante
|
||||
|
||||
Un document seedé n'est jamais réinstancié. Dans une base existante (la production : I1, E1 et
|
||||
E2 en vigueur, *seeds a minima*, dans Monnaie libre et dans le groupe d'essai), trois
|
||||
**amendements de Proposition seed** (`crates/ld-server/src/seed_proposal_amend.rs`,
|
||||
`2026-11-02-i1-proposition-seed`, `-e1-`, `-e2-`) décident une fois par document et par article,
|
||||
consignés dans `seed_proposal_amendments` et dans les journaux.
|
||||
|
||||
**Le statut**, seulement si personne n'a touché le texte en vigueur : origine `seed`, jamais
|
||||
entré par un vote ni confirmé ; aucun vote du serveur, aucune ligne de bulletin de la chaîne,
|
||||
quel que soit son sort ; aucune coquille (appliquée, en attente ou refusée), aucune traduction
|
||||
écrite par un membre, aucune objection qui le nomme ; son historique est celui du seed (le texte
|
||||
initial, et pour I1 l'amendement de la Raison d'être du 30/10, révision 2) ; son texte est celui
|
||||
de la Proposition seed d'aujourd'hui (empreinte). Appliqué : la même version, avec son texte, ses
|
||||
traductions et son historique, devient ouverte et marquée ; l'article n'a plus de texte en
|
||||
vigueur ; l'historique dit le changement (`seed_proposal`, sans diff). Refusé : le texte reste en
|
||||
vigueur, *seed a minima*.
|
||||
|
||||
**Le cran**, avec le statut seulement, et seulement si personne n'y a touché : aucune proposition
|
||||
de changement d'inertie d'un membre ouverte, appliquée ou votée, aucun vote qui l'a changé, et un
|
||||
cran que le seed lui a donné avant (I1 : 3 ; E1 et E2 : 3, puis 4 depuis le 30/10). Appliqué :
|
||||
l'article le dit (`inertia_changes`, « réglage de départ du texte »). Refusé : il garde son cran,
|
||||
le statut change quand même.
|
||||
|
||||
**En production**, l'orch notait le 30/10 deux propositions d'inertie ouvertes à zéro vote dans
|
||||
Monnaie libre, I1 → 5 et E1 → 5. Si elles sont encore ouvertes au démarrage, I1 et E1 y
|
||||
deviennent des Propositions seed **à leur cran d'avant** (3 et 4 ; refus `inertia_proposal`), E2
|
||||
au cran 2. Pour que les trois démarrent au cran 2, leurs auteurs les retirent avant la mise en
|
||||
ligne (une proposition retirée sans vote ne compte plus). À trancher par Yvv avant M6.
|
||||
|
||||
Là où le document publie (Monnaie libre), chaque amendement appliqué ajoute une ligne à la file
|
||||
(« Proposition seed : I1 sort de la vigueur »…), qui attend le premier texte. Les deux
|
||||
amendements d'inertie du 30/10 (E1 et E2 de 3 à 4, ADR 0007) sont dépassés : décidés en
|
||||
production, ils ne décident plus rien ailleurs (`superseded_by`).
|
||||
|
||||
## Les données
|
||||
|
||||
Migration `0009` (additive) : `proposals.seed_featured` ; la table `seed_proposal_amendments`
|
||||
(statut et cran : appliqué, refusé et pourquoi, ou déjà là). Le seed : `"seedProposal": true` et
|
||||
`"status": "open"` sur la version de I1, E1 et E2, sans `inertia`.
|
||||
|
||||
## Coût
|
||||
|
||||
- Personne ne lit de texte en vigueur avant le premier vote qui passe ; le dépôt des textes
|
||||
garde la dernière publication jusque-là.
|
||||
- Les comptes bougent : 0 article en vigueur, 35 propositions en cours (les 32 d'avant et les
|
||||
trois Propositions seed) ; « Décisions » compte toujours 41 modules à voter.
|
||||
- Les textes F1.2 et N1.1 du seed disent encore Unicité du compte et Réciprocité au cran 4 au
|
||||
départ : orch les réécrira au prochain tour de textes, avec la relecture d'Yvv.
|
||||
@@ -0,0 +1,296 @@
|
||||
# 0012 — Le tampon des votes : l'intention tout de suite, la preuve de la chaîne, la réconciliation
|
||||
|
||||
> Complète [0008](0008-vote-par-transaction.md) (vote par la chaîne Ğ1) et révise une phrase de
|
||||
> [0010](0010-objections-et-coquilles-validees.md) (un bulletin scellé avant une objection et
|
||||
> confirmé après). Demande d'Yvv du 2026-11-02. **Deux décisions d'Yvv font foi** : le poids
|
||||
> d'un vote simulé, « Il compte, puis s'efface » (2026-11-02, 06 h 26), et la publication d'un
|
||||
> texte entré par des votes simulés, « Pas avant des votes prouvés » (2026-11-03, formulaire d'orch). La
|
||||
> façon de compter une intention et ce qu'on dit quand elle est écartée restent les choix du lot
|
||||
> V, isolés dans `ld_engine::buffer` pour être changés seuls. Se lit avec
|
||||
> [0013](0013-quorum.md) (le quorum, jugé sur les totaux montrés). Lot V, 2026-11-02 et 03.
|
||||
|
||||
**Contexte.** Yvv, 2026-11-02 : « Simule le vote à tout endroit. […] du point de vue de
|
||||
l'architecture, il faut prévoir le "tampon" entre la base des votes et la mise à jour par les
|
||||
indexeurs de la chaîne. Il faut prévoir le bon process pour une ux moderne "je vois ce que j'ai
|
||||
fait sans attendre", avec un contrôle a posteriori de l'intégrité du vote (bien unique, bien le
|
||||
dernier qui vaut). » Et ses décisions déjà prises : une personne, une voix, autant de fois
|
||||
qu'elle veut, le dernier vote fait foi ; dans Monnaie libre l'intégrité vient de la chaîne Ğ1
|
||||
(0,1 Ğ1 par vote, un seul geste, un bulletin scellé) ; les totaux se voient en direct et
|
||||
**chacun voit son propre vote en direct** (« tout le monde a maintenant cette habitude,
|
||||
difficile de régresser ») ; rien n'est dit à l'écran du recoupement entre la chaîne et les
|
||||
totaux ; sur une version retenue par une objection, « contre » et retrait, jamais « pour ».
|
||||
|
||||
Jusqu'ici, dans Monnaie libre, un bulletin restait « en attente » sans rien compter jusqu'à ce
|
||||
que l'indexeur le confirme (6 à 30 secondes, une journée au plus par Ğecko), et sans
|
||||
`LD_VOTE_ACCOUNT` le vote était éteint (« pas encore ouvert »). Un bulletin scellé avant une
|
||||
objection et payé après comptait « pour » (relevé par une relecture).
|
||||
|
||||
## Décision
|
||||
|
||||
### Le cheminement d'un vote : trois temps
|
||||
|
||||
```
|
||||
geste ──► INTENTION ──────────► PREUVE ─────────────► RÉCONCILIATION ──► votes (ce qui compte)
|
||||
ballots (pending) la chaîne, lue par ld_engine::buffer
|
||||
visible aussitôt l'indexeur ; ou le ::reconcile, par
|
||||
(ton vote, totaux) confirmateur simulé identité et version
|
||||
│
|
||||
└── jamais prouvée dans sa fenêtre, refusée par la chaîne,
|
||||
dépassée, « pour » prouvé sur une version retenue : ÉCARTÉE
|
||||
```
|
||||
|
||||
1. **L'intention** est le geste lui-même : un bulletin scellé (`ballots`, `ballot_lines`,
|
||||
0008), un seul pour tout un panier. Elle est écrite **avant** que le portefeuille signe et se
|
||||
voit **aussitôt** : pour la personne (« ton vote », état `pending`) et dans les totaux
|
||||
montrés (`DocState::shown_tally`). Rien n'est parti (refus du portefeuille, nœud muet,
|
||||
fenêtre fermée avant la signature) : la page la lâche aussitôt (`DELETE`, 0008) et elle
|
||||
disparaît des totaux. Un code Ğecko montré est gardé, comme avant.
|
||||
2. **La preuve** vient de la chaîne, lue par l'indexeur, sans rien changer à 0008 : la
|
||||
remarque exacte, le virement du signataire vers le compte des votes, une identité Ğ1 membre
|
||||
au moment de la confirmation, un bloc définitif. Pendant la simulation (plus bas), un
|
||||
**confirmateur simulé** tient la place de l'indexeur.
|
||||
3. **La réconciliation** a lieu à chaque preuve, pour chaque version du bulletin, et pour
|
||||
l'identité qui a signé : elle relit **toutes** les lignes prouvées de cette identité sur
|
||||
cette version et en tire la voix qui tient (`ld_engine::buffer::reconcile`, pur, testé) :
|
||||
- **une seule voix par identité Ğ1** et par version ;
|
||||
- **la dernière dans l'ordre de la chaîne** (le bloc, puis le rang de l'évènement), quel que
|
||||
soit l'ordre dans lequel l'indexeur les a lues : le résultat ne dépend pas de l'ordre des
|
||||
confirmations ; « retirer mon vote » (`none`) qui tient efface la voix ;
|
||||
- elle **écarte** : ce que la chaîne ne confirme jamais dans la fenêtre de validité (24
|
||||
heures, plus une heure de grâce si l'indexeur se tait ou si le bloc n'est pas encore
|
||||
définitif : `expired`) ; ce que la chaîne refuse (`refused` : pas d'identité, pas membre,
|
||||
virement manquant) ; ce qu'un vote plus récent de la même identité a dépassé
|
||||
(`superseded`) ; et **un « pour » dont la preuve arrive pendant qu'une objection retient la
|
||||
version** (`objection`, voir plus bas).
|
||||
|
||||
Chaque ligne d'un bulletin prouvé porte son issue (`ballot_lines.outcome` : `counted`,
|
||||
`superseded`, `objection`), recalculée à chaque réconciliation sauf `objection`, fixée au
|
||||
moment de la preuve. La table `votes` reste ce qui compte : une ligne par identité et par
|
||||
version, écrite par la réconciliation (sources `chain`, `simulated`) ou par le serveur dans
|
||||
un groupe géré (`server`). Chaque vote compté se vérifie toujours contre la chaîne en
|
||||
recalculant H depuis les lignes et le sel (0008).
|
||||
|
||||
**Dans un groupe géré** (essai, Axiom…), il n'y a pas de tampon : le serveur est l'autorité, le
|
||||
vote est écrit d'un coup et il est enregistré (`recorded`) dès l'écriture, comme avant.
|
||||
|
||||
### Les états d'un vote, et ce que chacun pèse
|
||||
|
||||
| État | Ce que c'est | `myVoteState` | Totaux montrés (`shown_tally`) | Adoption (`tally`) |
|
||||
|---|---|---|---|---|
|
||||
| enregistré | prouvé par la chaîne, ou vote du serveur d'un groupe géré | `recorded` | oui | oui |
|
||||
| en attente | une intention sans preuve, dans sa fenêtre | `pending` | oui, **à la place** du vote que la personne voit comme le sien ; jamais un « pour » sur une version retenue | **jamais** |
|
||||
| simulé | un vote de la simulation, chaîne fermée | `simulated` | oui, **jusqu'à l'acte « supprime »** | oui, **jusqu'à l'acte « supprime »** (décision d'Yvv, « Il compte, puis s'efface ») |
|
||||
| écarté | expiré, refusé, dépassé, « pour » sur une version retenue | — | non | non |
|
||||
|
||||
- **L'adoption ne compte jamais une intention non confirmée.** Une entrée en vigueur ne repose
|
||||
que sur des votes prouvés, sur les votes du serveur dans un groupe géré, et sur les votes
|
||||
simulés jusqu'à l'acte qui les écarte (plus bas). Le balayage d'adoption et la mesure de la
|
||||
participation p̃ lisent les mêmes poids (`ld_engine::buffer::Rules`).
|
||||
- **Le quorum se juge sur les totaux montrés** (ADR 0013) : l'évaluation qu'on montre
|
||||
(`evaluation` : `quorum`, `yesNeeded`, `noNeeded`, `missing`) et les cinq crans du détail se
|
||||
calculent sur `shown_tally` — votes enregistrés, en attente et simulés, l'intention à la place
|
||||
du vote vu de la personne (`DocState::shown_evaluation`) ; l'adoption, sur `tally`
|
||||
(`DocState::evaluation`).
|
||||
- **Une intention compte pour la session qui l'a demandée** : elle remplace, dans les totaux
|
||||
montrés, le vote que cette session voit comme le sien (`my_votes`), et la dernière intention
|
||||
de la session sur une version remplace les précédentes. Une intention sur une révision
|
||||
dépassée ne compte pas (elle serait « à reconfirmer ») mais retire bien le vote d'avant ; un
|
||||
« pour » en attente sur une version retenue ne pèse rien tant qu'elle est retenue (il serait
|
||||
écarté) : `ld_engine::buffer::weigh_intent`.
|
||||
- `tallyPending` dit la part des totaux montrés qui attend encore sa preuve ; `tallySimulated`
|
||||
la part qui vient de la simulation. Les textes publiés (`publish.rs`) ne publient jamais une
|
||||
intention : ils lisent `recorded_tally` (ce qui est enregistré, simulation comprise tant
|
||||
qu'elle compte), ou `tally` pour les articles en vigueur, comme avant ; et rien ne part tant
|
||||
qu'une entrée due à des votes simulés ne tient pas sur les seuls votes prouvés (« La
|
||||
publication », plus bas).
|
||||
|
||||
### Ce que la personne voit, à chaque étape
|
||||
|
||||
| Étape | Sous l'article (`myVote`, `myVoteState`, `myBallot`) | Totaux | Boîte « Messages » |
|
||||
|---|---|---|---|
|
||||
| elle vote (groupe géré) | son choix, `recorded` | aussitôt | — |
|
||||
| elle vote, la chaîne ouverte | son choix, `pending` ; « En attente de la chaîne Ğ1 : … » | aussitôt, avec son choix | — |
|
||||
| la chaîne le confirme | son choix, `recorded` ; « inscrit sur la chaîne Ğ1 » | inchangés (l'intention devient preuve) | — |
|
||||
| rien n'est parti (portefeuille, nœud, fenêtre fermée) | son vote d'avant | son intention retirée | — |
|
||||
| jamais vu sur la chaîne en 24 h | son vote d'avant ; « Ton dernier vote n'a pas été vu sur la chaîne Ğ1 à temps » | son intention retirée | « Ton vote … n'a pas été vu sur la chaîne Ğ1 en 24 heures : il est écarté. Tu peux voter à nouveau. » |
|
||||
| refusé par la chaîne | son vote d'avant ; « Ton dernier vote n'a pas été compté : … » | son intention retirée | « Ton vote … n'a pas été compté : … » |
|
||||
| un « pour » prouvé sur une version retenue | son vote d'avant ; « Ton dernier vote n'a pas été compté : une objection retenait cette version… » | inchangés | « Ton « pour » sur … est écarté : une objection retenait cette version quand la chaîne a confirmé ton vote. Ton vote d'avant reste. » |
|
||||
| dépassé par un vote plus récent de la même identité | le plus récent | le plus récent | — (c'est son propre geste) |
|
||||
| elle vote, la chaîne fermée (simulation) | son choix, `simulated` | aussitôt | — |
|
||||
|
||||
Rien n'est dit à l'écran sur le recoupement entre la chaîne et les totaux (décision d'Yvv).
|
||||
Un message n'offre aucun geste : il dit ce qui s'est passé et mène au texte, où l'on revote.
|
||||
|
||||
### La simulation, tant que la chaîne est fermée
|
||||
|
||||
Sans `LD_VOTE_ACCOUNT`, on vote **quand même, partout, dans Monnaie libre**, sans portefeuille :
|
||||
le bouton de vote s'affiche (l'accès dit `open: true`, `simulated: true`, `way: "server"`), le
|
||||
vote part par l'écriture du serveur (`POST /api/proposals/{id}/vote`, `POST
|
||||
/api/docs/{id}/votes`) et passe **par le même tampon** : un bulletin scellé (`ballots.mode =
|
||||
'simulated'`, son sel et son empreinte, sans compte ni montant), puis le **confirmateur simulé**
|
||||
le prouve aussitôt, dans la même requête (et le balayage reprend un bulletin simulé resté en
|
||||
attente) : la voix est celle de **l'identité de la session** (il n'y a pas de portefeuille), sa
|
||||
position est « bloc 0 », au rang de son arrivée ; puis la même réconciliation, le même
|
||||
balayage d'adoption, les mêmes messages. L'architecture est ainsi éprouvée de bout en bout, en
|
||||
production, sans la chaîne. Qui peut voter en simulation : la règle de trustinWallet,
|
||||
`trustin_access::casts_simulated` (qui ouvre le groupe, la chaîne fermée) — une personne
|
||||
invitée comprise.
|
||||
|
||||
**La décision d'Yvv, 2026-11-02 à 06 h 26 : « Il compte, puis s'efface ».**
|
||||
|
||||
- **Il compte.** Un vote simulé compte dans les totaux et **pour l'entrée en vigueur**, comme un
|
||||
vote prouvé, avec la marque « simulé » (`myVoteState`, `tallySimulated`, `mode` du bulletin,
|
||||
« Tes bulletins »). Avec les quorums de l'ADR 0013, neuf « pour » simulés suffisent à faire
|
||||
entrer I1, E1 ou E2 au cran 2 (quorum 12) : le texte est alors en vigueur sur le site, et ne
|
||||
se publie pas (« La publication », plus bas). La règle : `ld_engine::buffer::SIMULATED_ADOPTS
|
||||
= true`, reprise par `Config::simulated_adopts` ; à `false`, « simulé = affiché, jamais compté
|
||||
pour l'adoption » (les totaux montrés ne changent pas, l'adoption et p̃ les ignorent). Les deux
|
||||
branches sont testées.
|
||||
- **L'ouverture de la chaîne n'efface rien d'elle-même.** Dès que `LD_VOTE_ACCOUNT` est posé
|
||||
(un acte « déploie »), on vote par la chaîne : un nouveau vote simulé est refusé (`409
|
||||
chain_only`). Les votes simulés déjà là **continuent de compter**, marqués, jusqu'à l'acte qui
|
||||
suit. Une identité Ğ1 (une session ouverte par la clé Ğ1, `idty:<index>`) qui vote ensuite
|
||||
par la chaîne passe devant son vote simulé (bloc 0, avant tout bloc réel).
|
||||
- **Puis il s'efface, par un acte « supprime » d'Yvv**, jamais déclenché par le code : ni le
|
||||
serveur, ni l'ouverture de la chaîne, ni un balayage ne l'appellent. Il est préparé et testé
|
||||
ici : `simulation::discard`, en ligne de commande dans l'image :
|
||||
```sh
|
||||
ld-server discard-simulation # à blanc : dit ce qu'il ferait, n'écrit rien
|
||||
ld-server discard-simulation --apply # l'acte
|
||||
```
|
||||
Il lit la base du volume (`LD_DATA_DIR`, `libredecision.db`) et imprime un JSON : les
|
||||
bulletins, lignes, votes et messages simulés, et chaque entrée réexaminée (article, sorte,
|
||||
votes d'entrée et leur part simulée, votes prouvés, « pour » exigés, tient ou non, rendue ou
|
||||
non, la version déplacée). Avec `--apply` :
|
||||
1. **le tri** : il efface les messages des bulletins simulés, les votes simulés
|
||||
(`votes.source = 'simulated'`), leurs lignes et les bulletins simulés, puis réconcilie de
|
||||
nouveau chaque identité qui avait voté en simulation (son vote prouvé, s'il y en a un,
|
||||
tient) ;
|
||||
2. **le réexamen** : chaque entrée en vigueur qui a compté des votes simulés
|
||||
(`adoptions.params.simulated`), la plus récente d'abord, encore en vigueur, est jugée de
|
||||
nouveau sur les seuls votes prouvés, au cran et sur le quorum où elle a été votée
|
||||
(`params.level`, `params.quorum`). **Sous son seuil, elle retourne parmi les
|
||||
propositions** : la version qu'elle avait déplacée revient en vigueur (un texte retiré
|
||||
revient, un cran d'inertie redescend, l'ordre et le titre d'avant s'appliquent de
|
||||
nouveau), son adoption est effacée, une publication est mise en file. **À son seuil ou
|
||||
au-dessus, elle reste**, et son adoption le dit (`params.reexamined`) ;
|
||||
3. les envois en attente de la publication repartent.
|
||||
|
||||
Répété, l'acte ne trouve plus rien (aucun bulletin simulé, aucune entrée à réexaminer).
|
||||
**À blanc**, le réexamen met les votes simulés de côté sans les effacer : une entrée qui ne
|
||||
reviendrait qu'après le retour d'une plus récente est dite « plus en vigueur ».
|
||||
- Pour les tests seulement, et seulement avec la connexion de développement, `POST
|
||||
/api/dev/vote-chain {"open": false}` ferme la chaîne d'un serveur qui en a une (le contrôle
|
||||
e2e de la simulation tourne sur le serveur jetable des e2e, qui a sa chaîne simulée).
|
||||
|
||||
### La publication : « Pas avant des votes prouvés »
|
||||
|
||||
**La décision d'Yvv, 2026-11-03 (formulaire d'orch) : « Pas avant des votes prouvés ».** Un texte qui
|
||||
entre en vigueur grâce à des votes simulés est **en vigueur sur le site**, mais **ne déclenche
|
||||
pas la publication** vers le dépôt des textes, que lisent les applis clientes. La publication
|
||||
d'un document attend que tout ce qui y est en vigueur et y est entré par des votes simulés —
|
||||
texte, retrait, cran d'inertie, ordre, titre — **tienne sur les seuls votes prouvés**, selon le
|
||||
réexamen même de l'acte « supprime », fait à blanc (`simulation::unproven`). La chaîne étant
|
||||
fermée, **rien ne se publie dans Monnaie libre avant son ouverture** ; après elle, la file part
|
||||
dès que l'acte a rendu ce qui ne tient pas, ou dès que des votes prouvés portent ce qui est
|
||||
entré.
|
||||
|
||||
- Un seul endroit : `publish::waits_for_proven_votes`, après `publish::waits_for_a_text` (ADR
|
||||
0011), tous deux lus par `publish::waits`. Comme pour l'attente du premier texte, ce n'est pas
|
||||
un échec : aucune tentative comptée, la file attend et se relit toutes les dix minutes ; l'API
|
||||
dit `publication.state = "suspended"` et `publication.waitsFor = "proven"` (`"text"` pour
|
||||
l'attente du premier texte).
|
||||
- La bascule, pour publier quand même si Yvv revenait sur ce choix : `LD_PUBLISH_SIMULATED=1`
|
||||
(`Publish::simulated`). Testé dans les deux sens.
|
||||
- Plus strict qu'« un texte prouvé suffit » : tant qu'une entrée simulée ne tient pas, même un
|
||||
texte prouvé du même document attend, pour que le dépôt ne porte jamais une entrée que les
|
||||
votes prouvés ne portent pas.
|
||||
|
||||
### Un « pour » prouvé pendant une objection (révise 0010)
|
||||
|
||||
0010 disait : « un bulletin scellé avant l'objection et confirmé après compte tel qu'il est
|
||||
signé, sans la faire entrer ». Une relecture a relevé qu'un « pour » entrait ainsi sur une
|
||||
version qui ne doit plus en prendre. Désormais, **un « pour » dont la preuve arrive pendant
|
||||
qu'une objection retient sa version est écarté** (`objection`) : il ne compte pas, comme s'il
|
||||
n'avait pas été émis ; le vote d'avant de la même identité, s'il y en a un, reste ; la personne
|
||||
qui l'a demandé reçoit un message. « Contre » et retrait, prouvés pendant l'objection, comptent
|
||||
(Yvv, 01/11 : « Retirer ou "contre" »). « Arrive » se lit à l'heure du serveur qui lit la
|
||||
preuve : la chaîne ne donne que des blocs, et l'objection une heure. Une objection levée avant
|
||||
la preuve laisse le « pour » compter.
|
||||
|
||||
### « Un vote existe » (ADR 0013)
|
||||
|
||||
Le quorum d'un article se fixe avant le premier vote (`quorum::voted_units`, la seule
|
||||
requête). Le tampon gardant l'historique des bulletins, elle compte : un vote qui compte
|
||||
(serveur, chaîne, **simulé**) ; toute ligne d'un bulletin **en attente** ou **prouvé**, de la
|
||||
chaîne ou de la simulation, **quel que soit son sort** (la voix qui compte, un vote dépassé, un
|
||||
« pour » écarté par une objection, **un retrait**) ; une adoption. Un vote retiré sur la chaîne
|
||||
ou en simulation laisse donc sa trace. Un bulletin lâché sans signature, jamais vu à temps ou
|
||||
refusé par la chaîne n'est pas un vote. Deux limites : dans un groupe géré, sans tampon, un vote
|
||||
retiré avant toute adoption ne laisse rien (ADR 0013) ; l'acte « supprime » emporte la trace des
|
||||
votes simulés avec eux.
|
||||
|
||||
### L'API, contrat partagé avec les lots U et S
|
||||
|
||||
Dans le JSON d'une proposition (`GET /api/docs/{id}`, `GET /api/proposals/{id}`) :
|
||||
|
||||
- `tally: {for, against}` — les totaux montrés, intentions comprises ;
|
||||
- `tallyPending: {for, against}` — la part encore sans preuve ;
|
||||
- `tallySimulated: {for, against}` — la part simulée (ajouté) ;
|
||||
- `evaluation` — sur les totaux montrés (ADR 0013 : `quorum`, `yesNeeded`, `noNeeded`) ;
|
||||
- `myVote: 'for' | 'against' | null` — ce que la personne voit comme son vote maintenant : son
|
||||
dernier geste, une intention en attente comprise (un retrait en attente : `null`) ;
|
||||
- `myVoteState: 'recorded' | 'pending' | 'simulated' | null` ;
|
||||
- inchangés : `myVoteStale`, `myVoteChain`, `myBallot` (qui peut dire `status: 'refused'`,
|
||||
`reason: 'objection'` pour un « pour » écarté).
|
||||
|
||||
Dans l'accès (`vote` du JSON du document) : `{ way, open, simulated, reason, chain }` ;
|
||||
pendant la simulation, `way: "server"`, `open: true`, `simulated: true`, `chain: null`. Un
|
||||
vote écrit par le serveur répond `{ entered, simulated }` (et `count` pour un vote groupé).
|
||||
Les bulletins (`GET /api/ballots/{id}`, `GET /api/ballots`, le reçu) gagnent `mode: 'chain' |
|
||||
'simulated'` (le bloc d'un bulletin simulé n'est jamais montré). Les messages gagnent le sujet
|
||||
`ballot`, de sortes `ballot_expired`, `ballot_refused`, `ballot_objection`, avec `ballot: {id,
|
||||
status, reason, mode, createdAt, settledAt, lines: [{proposalId, unitId, code, title, choice,
|
||||
outcome}]}`. La publication d'un document (`doc.publication`) gagne `waitsFor: 'text' |
|
||||
'proven' | null`.
|
||||
|
||||
## Les données
|
||||
|
||||
Migration `0010_vote_buffer.sql`, additive (S a pris `0009` et `0011` ; les trois passent dans
|
||||
l'ordre sur une base neuve comme sur une base arrêtée à `0008`, la production) :
|
||||
|
||||
- `ballots.mode TEXT NOT NULL DEFAULT 'chain'` (`chain` | `simulated`) : tous les bulletins
|
||||
d'avant restent des bulletins de la chaîne ;
|
||||
- `ballot_lines.outcome TEXT` (`counted` | `superseded` | `objection`, `NULL` tant que le
|
||||
bulletin n'est pas prouvé ; les lignes d'avant restent à `NULL` et se lisent comme « pas
|
||||
écartée par une objection » : la prochaine réconciliation de leur identité les qualifie) ;
|
||||
- un index `ballots(doc_id, status)` pour lire les intentions d'un document ;
|
||||
- `votes.source` prend une valeur de plus, `simulated` (colonne texte, rien à changer) ;
|
||||
`messages.topic` aussi, `ballot` ; `adoptions.params` (JSON) garde de plus, pour l'acte, la
|
||||
part simulée des votes d'entrée (`simulated`), la version déplacée (`displaced`), le cran
|
||||
d'avant (`from_inertia`), et après l'acte `reexamined`.
|
||||
|
||||
Aucune ligne existante n'est réécrite, et le premier démarrage n'écrit rien du tampon (la
|
||||
chaîne fermée en production : aucun bulletin). La purge (0008) efface avec un bulletin lâché
|
||||
les messages qui en parlent.
|
||||
|
||||
## Coût
|
||||
|
||||
- **Les totaux montrés sont provisoires** le temps de la preuve : une intention compte pour la
|
||||
session qui l'a demandée. Si une même identité vote depuis deux sessions à la fois, ou si une
|
||||
session signe avec un autre portefeuille que celui de son vote précédent, les totaux montrés
|
||||
peuvent s'écarter d'une voix jusqu'à la preuve ; la réconciliation remet le compte juste. Une
|
||||
personne qui ouvre Monnaie libre peut faire paraître une voix dans les totaux montrés pendant
|
||||
24 heures sans payer (une par session et par version, 20 bulletins au plus) : elle ne compte
|
||||
jamais pour l'adoption.
|
||||
- L'intention compte dès que le bulletin est scellé, quelques secondes avant la signature ; si
|
||||
rien ne part, la page la lâche aussitôt.
|
||||
- Un « pour » payé juste avant une objection mais lu juste après (l'indexeur suit à quelques
|
||||
secondes) est écarté : la personne revote à la levée.
|
||||
- **La simulation rend possible deux voix pour une personne** (une session par invitation, une
|
||||
session Ğ1), ce que la chaîne empêche : accepté tant qu'elle dure, et effacé par l'acte
|
||||
« supprime ». Chaque geste simulé laisse un bulletin en base jusqu'à l'acte.
|
||||
- **Un texte entré par des votes simulés se lit en vigueur sur le site sans être publié** ; le
|
||||
dépôt des textes garde la dernière publication jusqu'aux votes prouvés. L'acte peut faire
|
||||
retourner parmi les propositions un texte que des personnes ont lu en vigueur.
|
||||
- Un message sur un bulletin lâché disparaît avec lui à la purge (une semaine).
|
||||
@@ -0,0 +1,135 @@
|
||||
# 0013 — Le quorum : les votants qui manquent comptent comme « non »
|
||||
|
||||
> Remplace, dans [0002](0002-vote-permanent.md) et [0007](0007-inertie-cinq-crans.md), le
|
||||
> plancher C de voix pour placé devant la formule. Décisions d'Yvv du 2026-11-02 et du
|
||||
> 2026-11-03. La migration est la `0011` : la `0010` reste au lot V.
|
||||
|
||||
**Contexte.** Depuis le 2026-10-21, `R = C + B^W + (M + (1 − M)(1 − (T/W)^G)) · max(0, T − C)` :
|
||||
C voix pour d'abord (50 dans Monnaie libre, 1 dans le groupe d'essai), puis la part de l'inertie
|
||||
sur les votes au-delà. Yvv, 2026-11-02 : « C suit le cran, mais c'est une proposition par
|
||||
défaut, variable modifiable par l'auteur initial du texte » ; « ce n'est pas un nombre de vote
|
||||
pour a priori, c'est plutôt un quorum, à partir de ce nombre, alors il faut la bonne proportion
|
||||
attendue par l'indice. Si c'est 60 % et c = 10, alors il faut 6 voix pour et ça passe. » Au
|
||||
formulaire : « La courbe d'aujourd'hui, après le quorum » ; les quorums par défaut
|
||||
« 12 · 12 · 50 · 50 · 50 », le groupe d'essai à 1 partout ; « L'auteur, avant le 1er vote ».
|
||||
Le 2026-11-03, à « Sous le quorum, les votants qui manquent comptent-ils comme des « non » ? » :
|
||||
« Ils comptent comme non ».
|
||||
|
||||
## Décision
|
||||
|
||||
**La formule, jugée sur un quorum Q** (`crates/ld-engine/src/threshold.rs`) :
|
||||
|
||||
```
|
||||
T' = max(T, Q)
|
||||
R = B^W + (M + (1 − M)·(1 − (T'/W)^G)) · T'
|
||||
```
|
||||
|
||||
Une version passe si au moins une voix est exprimée et si « pour » ≥ ⌈R⌉. Sous le quorum, les
|
||||
votants qui manquent comptent comme « non » : la part de l'inertie est demandée à Q votants.
|
||||
La règle tient dans **une seule fonction nommée**, `threshold::judged_voters`, qui porte la
|
||||
phrase d'Yvv. M, G et les cinq crans ne changent pas (ADR 0007) : la courbe est celle
|
||||
d'aujourd'hui, après le quorum. L'exemple d'Yvv (60 %, Q = 10) donne 6 « pour » ; 6 « pour »
|
||||
contre 5 « contre » ne passent pas, 7 contre 4 passent.
|
||||
|
||||
**Monotone.** Un « pour » de plus ne nuit jamais, un « contre » de plus n'aide jamais : à
|
||||
« pour » fixé, un « contre » de plus laisse T' à Q ou l'augmente, et ratio(T')·T' ne décroît pas
|
||||
avec T' (sa dérivée reste entre 0,06 et 1 pour les cinq crans, p̃ dans ses bornes). Les tests
|
||||
le vérifient sur une grille (`an_against_never_helps`, l'équivalence de `passes` avec
|
||||
`yes_needed` et `no_needed`).
|
||||
|
||||
**Ce que l'écran peut dire** (`Evaluation`) : `quorum` ; `yesNeeded`, le total de « pour » qui
|
||||
passe avec les « contre » d'aujourd'hui ; `noNeeded`, le total de « contre » qui tient les
|
||||
« pour » d'aujourd'hui en échec (0 : le quorum les tient déjà) ; `missing = yesNeeded − pour` ;
|
||||
`wellRated`, la part de l'inertie tenue sur les T votants venus, le quorum mis de côté
|
||||
(l'aperçu « si les bien cotées passent »).
|
||||
|
||||
**Un quorum par cran**, le défaut d'un article à ce cran (`documents.quorums`) : Monnaie libre
|
||||
**12 · 12 · 50 · 50 · 50**, le groupe d'essai **1 partout**. Une proposition d'inertie se juge
|
||||
sur le quorum de son article (elle hérite de son cran, ADR 0007) ; un module, sur celui de son
|
||||
cran.
|
||||
|
||||
**Le quorum d'un article** (`units.quorum`, NULL : celui du cran) est fixé par l'auteur de sa
|
||||
première version — pour un texte du seed, sans auteur, par un administrateur —, et seulement
|
||||
**avant le premier vote** : `trustin_access::sets_quorum`, la route `PUT /units/{id}/quorum`
|
||||
(`{ "quorum": n | null }`, en-tête CSRF), dans `crates/ld-server/src/quorum.rs`. Bornes : de 2
|
||||
à W (une voix seule ne fait jamais passer un texte), de 1 à W dans le groupe d'essai
|
||||
(`ld_engine::inertia::quorum_bounds`, `trustin_access::TEST_GROUP`). Chaque changement est
|
||||
consigné (`quorum_changes` : qui, de quoi, à quoi, quand). Refus : 403 à qui n'est pas
|
||||
l'auteur, 400 `quorum` hors des bornes, 409 `voted` dès qu'un vote existe.
|
||||
|
||||
**« Un vote existe »** : une seule fonction, `quorum::voted_units` (et `quorum::a_vote_exists`
|
||||
pour une unité), que le lot V étendra là et nulle part ailleurs. Sur l'une des versions de
|
||||
l'article (textes, retrait, changement d'inertie ; toute révision) : un vote du serveur
|
||||
(`votes`) ; une ligne de bulletin de la chaîne en attente ou confirmé (un bulletin refusé ou
|
||||
expiré n'est pas un vote) ; une adoption (une version entrée en vigueur par le vote en garde la
|
||||
trace, même ses votes retirés). **Limite connue** : un vote du serveur retiré avant toute
|
||||
adoption ne laisse pas de ligne (`votes` ne garde que le dernier choix) ; après lui, l'auteur
|
||||
peut de nouveau fixer le quorum.
|
||||
|
||||
**La participation de référence** reste p0 = 2Q₀/W, Q₀ le quorum de référence du document
|
||||
(`documents.vote_floor` : 50 dans Monnaie libre, 1 dans le groupe d'essai), **jamais le quorum
|
||||
d'un article** : un auteur qui baisserait le sien déplacerait l'échelle de tout le groupe.
|
||||
|
||||
## Une base existante
|
||||
|
||||
Un document seedé n'est jamais réinstancié. Tant que `documents.quorums` est NULL, chaque cran
|
||||
lit `vote_floor` (le C d'avant : 50 et 1). L'**amendement de quorums**
|
||||
`2026-11-03-quorums-par-cran` (`crates/ld-server/src/quorum_amend.rs`) décide une fois par
|
||||
document, seulement si le seed d'aujourd'hui donne ces quorums à l'instance : NULL → écrit
|
||||
(`applied`) ; les mêmes → `present` ; d'autres → refusé (`quorums_set`), gardés tels quels.
|
||||
Chaque décision est consignée (`quorum_amendments` : ce qui était là, ce que dit le seed,
|
||||
l'issue, la raison) et dans les journaux ; là où le document publie (Monnaie libre), une ligne
|
||||
s'ajoute à la file (« quorums par cran : 12 · 12 · 50 · 50 · 50 (ADR 0013) »), qui attend le
|
||||
premier texte (ADR 0011). Rien d'autre n'est touché : ni le quorum propre d'un article, ni un
|
||||
vote, ni un texte.
|
||||
|
||||
## Les nombres
|
||||
|
||||
Monnaie libre, W = 5 745 (repli des tests), participation de référence (100 votants) :
|
||||
|
||||
| | cran 1 | cran 2 | cran 3 | cran 4 | cran 5 |
|
||||
|---|---|---|---|---|---|
|
||||
| quorum | 12 | 12 | 50 | 50 | 50 |
|
||||
| « pour » à 0 vote (C d'avant : 50) | 8 | 9 | 39 | 43 | 46 |
|
||||
| « pour » à 100 votants (C d'avant : 80 · 84 · 88 · 92 · 95) | 60 | 67 | 75 | 83 | 90 |
|
||||
|
||||
Au cran 2, quorum 12 : 9 « pour » passent avec 3 « contre » au plus ; 9 contre 4 demandent 11
|
||||
(`yesNeeded`), il en manque 2 ; 8 « pour » ne passent pas même sans « contre » (`noNeeded` 0).
|
||||
|
||||
W = 7 224 (tests `ld-engine/src/inertia.rs`), « pour » exigés :
|
||||
|
||||
| Médiane | T | cran 1 | cran 2 | cran 3 | cran 4 | cran 5 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 120 votants | 120 | 72 | 81 | 90 | 100 | 108 |
|
||||
| 120 votants | 500 | 284 | 310 | 347 | 386 | 424 |
|
||||
| 120 votants | 2 000 | 1 068 | 1 123 | 1 252 | 1 389 | 1 537 |
|
||||
| 360 votants | 120 | 76 | 86 | 96 | 106 | 113 |
|
||||
| 360 votants | 360 | 216 | 242 | 270 | 299 | 324 |
|
||||
| 360 votants | 500 | 296 | 328 | 367 | 407 | 443 |
|
||||
| 360 votants | 2 000 | 1 092 | 1 164 | 1 301 | 1 446 | 1 598 |
|
||||
|
||||
Le cas de référence de la formule (vote forgeron v2.0.0 : W 7 224, 120 votants, M 50 %, G 0,2,
|
||||
Q 0 → 94 voix) reste le test de la formule elle-même.
|
||||
|
||||
## Les données
|
||||
|
||||
Migration `0011` (additive) : `documents.quorums` (JSON des cinq quorums), `units.quorum`, les
|
||||
tables `quorum_changes` et `quorum_amendments`. Le seed : `"quorums"` sur chaque instance.
|
||||
`vote_floor` reste, lu pour p0. Les adoptions nouvelles gardent `quorum` dans leurs `params`
|
||||
(celles d'avant gardent `constant`, lu tel quel). L'API : `doc.quorums`, `levels[].quorum`,
|
||||
l'unité `quorum` (le sien ou `null`), `quorumDefault`, `canSetQuorum` ; le `document.json`
|
||||
publié : `quorums`.
|
||||
|
||||
## Coût
|
||||
|
||||
- Les seuils de Monnaie libre baissent à faible participation : 9 « pour » au lieu de 50 pour
|
||||
I1, E1 et E2 au cran 2 ; 39 au lieu de 50 au cran 3. À la participation habituelle, la part
|
||||
s_k s'applique à tous les votants, plus seulement au-delà de C.
|
||||
- **Dans le groupe d'essai, une voix seule passe**, à tout cran et quel que soit le nombre de
|
||||
membres (avant : deux voix sous 16 membres). Les tests qui demandent deux voix y posent le
|
||||
quorum 2 de l'article, comme son auteur le ferait.
|
||||
- En production, si les propositions d'inertie I1 → 5 et E1 → 5 restent ouvertes (ADR 0011),
|
||||
I1 et E1 restent aux crans 3 et 4 : leur quorum est 50, pas 12.
|
||||
- Le texte F1.1 du seed (« Seuil = C + B^W + … ») et N1.1 (« le groupe demande d'abord C voix
|
||||
pour ») décrivent encore C : orch les réécrira au prochain tour de textes, avec la relecture
|
||||
d'Yvv (ce lot ne touche pas aux textes du seed).
|
||||
@@ -15,3 +15,6 @@ pas une décision : on en écrit une nouvelle qui la remplace, et on le note dan
|
||||
| [0008](0008-vote-par-transaction.md) | Le vote par transaction sur la chaîne Ğ1 : bulletin scellé, confirmation par l'indexeur, le dernier fait foi | 2026-10-30 |
|
||||
| [0009](0009-modules-ordre-et-titre.md) | Les modules : l'ordre des articles de chaque section (inertie 2), le titre du document (inertie 4) | 2026-10-31 |
|
||||
| [0010](0010-objections-et-coquilles-validees.md) | Objections « redit » / « contredit », coquilles validées, messagerie (remplace 0004, complète 0003) | 2026-10-31 |
|
||||
| [0011](0011-propositions-seed.md) | Les Propositions seed : rien en vigueur au départ, trois textes mis en avant au cran 2, la publication attend le premier texte (complète 0002) | 2026-11-02 |
|
||||
| [0012](0012-tampon-des-votes.md) | Le tampon des votes : l'intention visible tout de suite, la preuve de la chaîne, la réconciliation a posteriori ; la simulation tant que la chaîne est fermée (complète 0008, révise 0010) | 2026-11-02 |
|
||||
| [0013](0013-quorum.md) | Le quorum par cran (12 · 12 · 50 · 50 · 50), fixé par l'auteur avant le premier vote ; sous le quorum, les votants qui manquent comptent comme « non » (remplace le C de 0002 et 0007) | 2026-11-03 |
|
||||
|
||||
@@ -14,9 +14,14 @@ les applications clientes (Cesium, Ğecko…) peuvent suivre.
|
||||
|
||||
## Ce que voit la personne
|
||||
|
||||
1. **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
|
||||
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
|
||||
@@ -29,11 +34,15 @@ les applications clientes (Cesium, Ğecko…) peuvent suivre.
|
||||
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 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* avec leur nombre réel de votes (*seed a minima · 0 vote*, puis *· 1 vote*…).
|
||||
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**.
|
||||
@@ -49,10 +58,10 @@ les applications clientes (Cesium, Ğecko…) peuvent suivre.
|
||||
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, C, B, la participation habituelle du groupe et les cinq
|
||||
crans), atteints depuis l'en-tête du document et depuis chaque vote.
|
||||
5. **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,
|
||||
**« 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
|
||||
@@ -82,46 +91,64 @@ les applications clientes (Cesium, Ğecko…) peuvent suivre.
|
||||
### Le seuil — formule inertielle Ğ1
|
||||
|
||||
```
|
||||
R = C + B^W + (M + (1 − M)·(1 − (T/W)^G)) · max(0, T − C)
|
||||
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, **C = plancher de
|
||||
votants « pour »** (Monnaie libre : **50** ; groupe d'essai : 1). Adoptée si « pour » ≥ ⌈R⌉.
|
||||
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 **au-delà de C** quand
|
||||
le groupe vote comme d'habitude (participation p̃), et G_k s'en déduit :
|
||||
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 | Au départ |
|
||||
|---|---|---|---|---|
|
||||
| 1 | très basse | 50 % | 60 % | |
|
||||
| 2 | basse | 50 % | 67 % | l'ordre des articles de chaque section |
|
||||
| 3 | moyenne | 55 % | 75 % | partout ailleurs |
|
||||
| 4 | haute | 60 % | 83 % | Unicité du compte, Réciprocité, le titre du document |
|
||||
| 5 | très haute | 66 % | 90 % | |
|
||||
| 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 2C/W (Monnaie libre : 100 votants) ;
|
||||
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 rien ne passe sous C voix pour.
|
||||
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 = 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.
|
||||
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 ; 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`.
|
||||
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* a pour marge −C : la première proposition qui
|
||||
atteint son seuil le remplace.
|
||||
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).
|
||||
|
||||
@@ -131,8 +158,10 @@ Chaque article porte son inertie, un cran de 1 à 5. La changer est une proposit
|
||||
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`).
|
||||
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)
|
||||
|
||||
@@ -141,7 +170,7 @@ Revue du 2026-10-30 : « En fin de section, il y a un "module" qui permet de cha
|
||||
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 : −C) et son cran. Son inertie
|
||||
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
|
||||
@@ -281,7 +310,10 @@ traductions marquées éditoriales) et `document.json`, commit et pousse sur
|
||||
É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.
|
||||
(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é
|
||||
|
||||
@@ -294,6 +326,21 @@ journaux quand l'article garde son texte) ; appliqué, l'amendement se lit dans
|
||||
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,
|
||||
@@ -319,7 +366,7 @@ 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)
|
||||
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)
|
||||
@@ -330,7 +377,9 @@ sans toucher au texte de la communauté. Chiara et Yvv en sont membres.
|
||||
| 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) |
|
||||
| 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 |
|
||||
@@ -373,6 +422,9 @@ Les raisons longues sont dans `docs/adr/`.
|
||||
- ~~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.
|
||||
- **Textes du quorum** (F1.1, F1.2, N1.1 ; lot T, 2026-11-03) : réécrits pour le quorum par cran, à
|
||||
relire dans `textes-quorum-seed.md` ; un second amendement de seed gardé les remplace là où personne
|
||||
n'y a touché (pour F1.2 et N1.1, la garde admet la révision 2 écrite par M5, et rien d'autre).
|
||||
- Anglais : l'interface est en anglais américain, le seed en anglais britannique.
|
||||
|
||||
## Ce qui reste après la livraison
|
||||
|
||||
@@ -5,47 +5,51 @@ Chaque contrôle existe en deux versions : **automatique** (Playwright, `web/e2e
|
||||
sur un contrôle vaut échec du contrôle tant qu'elle n'est pas traitée.
|
||||
|
||||
Où tester : les contrôles qui écrivent (C5, C6, C7, C21, C22, C25, C26, C28–C31) se font dans le **groupe
|
||||
d'essai** (caché, plancher C = 1, jamais publié) — jamais sur le texte de la communauté. Les
|
||||
d'essai** (caché, quorum 1 à chaque cran — une voix seule y passe, ADR 0013 —, jamais publié) — jamais sur le texte de la communauté. Au départ, rien
|
||||
n'y est en vigueur (ADR 0011) : les contrôles qui lisent un texte en vigueur (C4 à C6, C20, C21, C24,
|
||||
C28 à C31) y font d'abord entrer Raison d'être, Unicité du compte et Réciprocité par le vote (une voix
|
||||
suffit, deux au plus, puis leur retrait : le texte reste en vigueur, à zéro vote ; `seedsInForce`, `web/e2e/helpers.ts`). Les
|
||||
votes par la chaîne Ğ1 (C11, C17, C23, C25, C32, C33) ne se jouent, pour l'automate, que sur une **chaîne
|
||||
simulée** (`web/e2e/chain-mock.mjs` : un faux nœud, un faux indexeur, un faux portefeuille) ;
|
||||
pour une personne, ils coûtent 0,1 Ğ1 réels : c'est un acte « paye » d'Yvv.
|
||||
|
||||
| # | Contrôle | Geste humain | Attendu |
|
||||
|---|---|---|---|
|
||||
| C1 | L'accueil, sans session | ouvrir `/` sans être connectée | « Rendre possible la décision collective », puis le leitmotiv en trois lignes : « contexte et cadrage », « processus et modalités », « boîte à outils » ; « Se connecter avec sa clé Ğ1 » et sa note ; pas de piliers ni de groupes ; le menu à gauche avec les quatre outils, trois éteints |
|
||||
| C1 | L'accueil, sans session | ouvrir `/` sans être connectée | la clé de voûte en grand, jamais inclinée ; sous l'arche, centrés et dans cet ordre : « boîte à outils », « contexte et cadrage », « processus et modalités » ; puis le titre centré sur deux lignes, « Rendre possible » / « la décision collective » ; « Se connecter avec sa clé Ğ1 » et sa note ; pas de piliers ni de groupes ; le menu à gauche avec les quatre outils, trois éteints |
|
||||
| C2 | L'accueil, avec session | se connecter : on arrive sur `/` | le titre, le leitmotiv, puis directement le choix du groupe : Monnaie libre en grand, Axiom, Librodrome, Groupe local Vallée Drôme Crestois ; **pas** l'Atelier du canal ; `/groupes` et « Mes groupes » (menu) ramènent ici |
|
||||
| C3 | Le texte en vigueur | Monnaie libre → Docs de référence → Acte d'engagement Certification | trois articles seulement (Raison d'être, Unicité du compte, Réciprocité), chacun « seed a minima · 0 vote » — le nombre réel de ses votes, qui change quand on vote —, sous le titre du document et à la fin de chaque section ses modules (C25, C26) ; en dessous, « Propositions en cours » (30 lignes, une par article) |
|
||||
| C4 | Gestes contextuels | survoler la Raison d'être → « Le vote » | le vote se **déplie sous l'article**, sans fenêtre : seuil 50 voix pour, il en manque 50 ; « La formule du seuil » se déplie : « M — majorité à pleine participation : 55 % — inertie 3 / 5 · moyenne », et le lien « Réglages de la formule » ; l'URL garde le vote déplié (`?vote=`) ; « Le vote » de nouveau le replie |
|
||||
| C5 | Entrée en vigueur | groupe d'essai : à deux, déplier le vote de « Les deux garanties réciproques », « Pour » | au second vote, « … est entré en vigueur » ; le texte en vigueur compte quatre articles, le vote reste déplié sous le nouveau texte (2 pour · 0 contre) |
|
||||
| C3 | Le texte au départ : les Propositions seed | Monnaie libre → Docs de référence → Acte d'engagement Certification | aucun article en vigueur (ADR 0011) : « Aucun article n'est en vigueur. Les propositions ci-dessous remontent dès qu'elles atteignent leur seuil. », sous le titre du document, puis à la fin de chaque section ses modules (C25, C26) ; en dessous, « Propositions en cours » (33 lignes, une par article), dont Raison d'être, Unicité du compte et Réciprocité marquées « Proposition seed » (au survol : « Texte de départ mis en avant pour lancer le vote… »), « 0 pour · 0 contre », « inertie 2 / 5 · basse » |
|
||||
| C4 | Gestes contextuels | groupe d'essai, où la Raison d'être est entrée en vigueur par le vote : la survoler → « Le vote » | le vote se **déplie sous l'article**, sans fenêtre : le seuil et les voix qui manquent ; « La formule du seuil » se déplie : « M — majorité à pleine participation : 50 % — inertie 2 / 5 · basse », et le lien « Réglages de la formule » ; l'URL garde le vote déplié (`?vote=`) ; « Le vote » de nouveau le replie |
|
||||
| C5 | Entrée en vigueur | groupe d'essai (Raison d'être, Unicité du compte et Réciprocité entrées en vigueur par le vote) : déplier le vote de « Les deux garanties réciproques », « Pour » ; une deuxième personne si cette voix ne suffit pas | à la voix qui suffit, « … est entré en vigueur » ; le texte en vigueur compte quatre articles, le vote reste déplié sous le nouveau texte (autant de « pour » que de voix, 0 contre) |
|
||||
| C6 | Coquille sans vote | groupe d'essai, **en administratrice** (un texte du seed n'a pas d'auteur) : Unicité du compte → « Le vote » → « Coquilles, traductions, objections, historique » (onglet « Détails ») → « Corriger une coquille », remplacer les apostrophes droites par des apostrophes typographiques (« Je m’engage sur l’honneur ») | « Coquille corrigée, sans toucher aux votes. » ; un changement de sens est refusé : « Ce changement touche au sens : propose-le comme modification. » (sans être administratrice, la correction attend : C31) |
|
||||
| C7 | Une décision par proposition | groupe d'essai : « Proposer un nouvel article », deux paragraphes « Je m'engage à… » | l'assistant : « Ce texte semble porter 2 décisions » ; « Découper en 2 brouillons » ; « Tes brouillons » apparaît |
|
||||
| C8 | Trois langues | choisir EN puis ES pour le texte | « Certification Commitment Act », « Acta de compromiso de Certificación » ; l'interface suit |
|
||||
| C9 | Les aperçus | « Si tout passe », puis « Si les bien cotées passent » | 33 articles avec la mention d'aperçu, puis 3 |
|
||||
| C9 | Les aperçus | « Si tout passe », puis « Si les bien cotées passent » | 33 articles avec la mention d'aperçu, puis aucun (rien en vigueur dans Monnaie libre, rien de bien coté sans « pour ») |
|
||||
| C10 | trustinWallet | ouvrir `/acces` sans être administratrice | « La gestion des accès est réservée aux administrateurs de trustinWallet. » (côté admin : créer un lien d'invitation) |
|
||||
| C11 | Une personne, une voix | avec un lien d'invitation et un portefeuille dont le compte n'est pas membre de la toile (Bob, chaîne simulée), voter « Pour » sur un article de Monnaie libre | le vote dit que la voix est celle de l'identité Ğ1 du portefeuille qui signe ; après signature : « Ton vote n'a pas été compté : le portefeuille qui a signé n'est pas celui d'un membre de la toile de confiance Ğ1. », et sous l'article « Ton dernier vote n'a pas été compté… », 0 pour ; dans le groupe d'essai, la même personne vote directement, sans portefeuille |
|
||||
| C12 | Lien d'équipe | administrateur : `/acces` → « Liens d'équipe », cocher le groupe d'essai, créer ; l'ouvrir dans deux navigateurs, sous deux noms | chacun arrive sur ses groupes sous son nom ; dans `/acces`, « 2 / 30 personnes » et deux identités « venue par » le lien ; un nom déjà pris est refusé, même autrement écrit (« luna » pour « Luna ») ; sur un navigateur où quelqu'un est connecté, « Ce n'est pas moi » le déconnecte ; « Révoquer » ferme le lien |
|
||||
| M1 | Mobile | téléphone (ou fenêtre étroite) | le logo dans la barre du haut ; l'accueil montre les groupes ; menu en tiroir (le nombre à côté de « Docs de référence », les quatre pastilles d'ambiance) ; **au clavier, les pastilles** : un seul arrêt de Tab, les flèches gauche / droite passent d'une ambiance à l'autre et la choisissent ; l'anneau de focus, en pointillé, se lit sur la page (contraste 3:1 au moins, dans les quatre ambiances) et ne se confond pas avec l'anneau plein de l'ambiance choisie ; les trois gestes visibles sans survol ; le vote se déplie sous l'article ; « Réglages de la formule » depuis le vote : le panneau en feuille, l'onglet « Réglages » visible, le tableau des cinq crans tient dans la feuille ; « Voter en lot » : le panier tient dans la feuille, son bouton « Signer et envoyer » reste en vue |
|
||||
| M1 | Mobile | téléphone (ou fenêtre étroite) | le logo dans la barre du haut ; l'accueil sous la voûte tient à 412 et à 360 de large (les trois points dans l'ouverture, rien ne déborde) et montre les groupes ; menu en tiroir (le nombre à côté de « Docs de référence », les quatre pastilles d'ambiance) ; **au clavier, les pastilles** : un seul arrêt de Tab, les flèches gauche / droite passent d'une ambiance à l'autre et la choisissent ; l'anneau de focus, en pointillé, se lit sur la page (contraste 3:1 au moins, dans les quatre ambiances) et ne se confond pas avec l'anneau plein de l'ambiance choisie ; les trois gestes visibles sans survol ; le vote se déplie sous l'article ; « Réglages de la formule » depuis le vote : le panneau en feuille, l'onglet « Réglages » visible, le tableau des cinq crans tient dans la feuille ; « Voter en lot » : le panier tient dans la feuille, son bouton « Signer et envoyer » reste en vue |
|
||||
| C13 | Logo et ambiances | ouvrir `/` (appareil en clair, puis en sombre) ; choisir chaque pastille d'ambiance ; recharger | le logo « Clé de voûte » (signe, *libre*, **Decision**) droit, sans tampon ; le sceau 井 en bas à droite ; première visite : pierre (clair) ou nuit (sombre) ; les quatre pastilles (Pierre, Calcaire, Nuit, Ardoise) changent l'ambiance, qui reste après rechargement ; favicon, icône Apple et manifeste servis |
|
||||
| C14 | La page d'un groupe | Monnaie libre | le nom ; le pavé des quatre piliers (Docs de référence « ouvert », les trois autres « à venir ») ; « En cours » : l'Acte d'engagement Certification, qui ouvre son lecteur |
|
||||
| C15 | Le menu | survoler les outils ; ouvrir Docs, puis Mandats ; revenir à l'accueil | « 1 » à côté de « Docs de référence » ; aucun outil surligné sur la page du groupe, seul celui où l'on est ensuite ; au survol, seul Docs réagit ; Mandats s'ouvre quand même (ses « À venir ») ; hors d'un groupe, les outils mènent au dernier groupe ouvert (ou à l'accueil s'il n'y en a pas) |
|
||||
| C16 | En cours, à venir | Monnaie libre → Docs, Mandats, Protocoles ; les anciennes adresses `/decisions`, `/mandats`, `/protocoles` | Docs : « En cours » (Acte d'engagement Certification) et « À venir » (Acte d'engagement forgerons) ; Mandats : Administration forum Duniter, Administration forum Monnaie libre ; Protocoles : Runtime upgrade — décision on-chain ; les « À venir » sont éteints, sans lien ; ils suivent la langue ; les anciennes adresses mènent aux outils du groupe courant |
|
||||
| C17 | Décisions | Monnaie libre → Décisions ; voter (par la chaîne : bulletin, transaction, confirmation) sur une version d'un article, recharger | une ligne par doc : « Acte d'engagement Certification · 41 modules à voter · dont 41 sans ton vote » (33 articles, le titre, l'ordre de 7 sections), puis « dont 40 » ; la ligne ouvre le lecteur |
|
||||
| C18 | La Raison d'être | Monnaie libre → Acte d'engagement Certification, puis EN, puis ES | en tête du texte en vigueur, « Raison d'être » : la première phrase en italique, puis deux paragraphes ; « Purpose », « Razón de ser » |
|
||||
| C18 | La Raison d'être | Monnaie libre → Acte d'engagement Certification → « Si tout passe », puis EN, puis ES | en tête du texte, « Raison d'être » : la première phrase en italique, puis deux paragraphes ; « Purpose », « Razón de ser » |
|
||||
| C19 | Les versions d'un article | Monnaie libre → « Propositions en cours » → « Connaissance suffisante » (au clavier : Tab jusqu'à la ligne, Entrée) | une seule ligne, « 2 versions » ; dépliée : « variante 1.0.0 » et « variante 0.4.0-draft », chacune avec son niveau et ce qui la distingue ; un clic sur une version déplie son vote sous elle ; un nouveau clic sur la ligne la replie |
|
||||
| C20 | Réglages de la formule et cinq crans | Monnaie libre → Acte d'engagement : « Réglages de la formule » (en-tête) ; puis Unicité du compte → « Le vote » → « Réglages de la formule » ; dans le groupe d'essai, Réciprocité → « Le vote » → « Proposer un changement d'inertie » → 5 → « Soumettre au vote » | W 5 745 (toile de confiance Ğ1), C 50, B 0,1 ; « 100 votants sur 5 745 (1,74 %), deux fois C : la participation de référence… (0 pour l'instant) » ; le tableau des cinq crans : très basse, basse, moyenne, haute, très haute ; M 50, 50, 55, 60, 66 % ; part exigée 60, 67, 75, 83, 90 % ; voix pour à 100 votants 80, 84, 88, 92, 95, « Voix pour : à 100 votants, comme d'habitude. » ; depuis le vote déplié : « Inertie · 4 / 5 · haute », la ligne du cran 4 marquée « cet article », 50 voix, « Voix pour : à 0 votant, la participation de cette version. » ; le sélecteur montre les cinq crans, 4 « actuelle », atteignable au clavier mais jamais choisi ; un seul arrêt de tabulation ; les flèches passent d'un cran à l'autre et le choisissent, en boucle ; le vote de la proposition se déplie : « inertie vers 5 / 5 · très haute », votée à « inertie 4 / 5 · haute » |
|
||||
| C20 | Réglages de la formule et cinq crans | Monnaie libre → Acte d'engagement : « Réglages de la formule » (en-tête) ; puis, dans « Propositions en cours », Unicité du compte → son vote → « Réglages de la formule » ; dans le groupe d'essai, Réciprocité (entrée en vigueur par le vote) → « Le vote » → « Proposer un changement d'inertie » → 5 → « Soumettre au vote » | W 5 745 (toile de confiance Ğ1), B 0,1 ; « 100 votants sur 5 745 (1,74 %), deux fois 50, le quorum de référence : la participation de référence… (0 pour l'instant) » ; le tableau des cinq crans : très basse, basse, moyenne, haute, très haute ; M 50, 50, 55, 60, 66 % ; part exigée 60, 67, 75, 83, 90 % ; quorum 12, 12, 50, 50, 50 (ADR 0013) ; voix pour à 100 votants 60, 67, 75, 83, 90, « Voix pour : à 100 votants, comme d'habitude. », « Part exigée : la part de « pour » demandée, à 100 votants comme d'habitude. », « Quorum : en dessous, les votants qui manquent comptent comme « non ». … » ; depuis le vote déplié : « Inertie · 2 / 5 · basse », la ligne du cran 2 marquée « cet article », à 0 votant 8, 9, 39, 43, 46 voix, « Voix pour : à 0 votant, la participation de cette version. » ; le sélecteur montre les cinq crans, 2 « actuelle », atteignable au clavier mais jamais choisi ; un seul arrêt de tabulation ; les flèches passent d'un cran à l'autre et le choisissent, en boucle ; le vote de la proposition se déplie : « inertie vers 5 / 5 · très haute », votée à « inertie 2 / 5 · basse » |
|
||||
| C21 | Le vote déplié | groupe d'essai : Unicité du compte → « Le vote », puis « Pour » ; une autre personne ouvre le même vote | sous l'article : le niveau d'eau, « 0 pour · 0 contre », « Seuil : … voix pour », « Il manque … », « Tu n'as pas voté sur cette version. » ; après « Pour » : « Ton vote : pour · enregistré », « 1 pour · 0 contre », le bouton enfoncé, « Ton vote ne se montre à personne : seuls les totaux sont visibles. » ; l'autre personne voit 1 pour, jamais qui ; « Le vote » replie ; « Retirer mon vote » remet 0 |
|
||||
| C22 | Le vote groupé | groupe d'essai : « Propositions en cours » → « Engagements techniques » → « Voter cette section » ; « Tout pour » ; dans « Connaissance suffisante », « Pour » sur la variante 1.0.0 ; recharger ; « Voter (n) » | le panier s'ouvre sur la section ; « Tout pour » remplit les articles à une version, pas « Connaissance suffisante » ni « Rencontre physique… » (« Plusieurs versions : choisis la tienne. », et le compte des articles laissés) ; le panier reste après rechargement (« Voter en lot · n ») ; un seul envoi : « n votes enregistrés. », le panier vide, la variante choisie à 1 pour |
|
||||
| C23 | Le vote par la chaîne Ğ1 | Monnaie libre, un portefeuille dans le navigateur : « Voter en lot », « Pour » sur Unicité du compte et Réciprocité, « Signer et envoyer (2) » ; puis sous Réciprocité, « Contre » (l'indexeur en retard) puis « Retirer mon vote » ; puis sans portefeuille : « Pour » → « Passer par Ğecko » | une seule signature pour les deux : 0,1 Ğ1 vers le compte des votes et une remarque `ld1:` + 64 chiffres, rien du vote en clair ; « Ton vote compte : il est inscrit sur la chaîne Ğ1. », « Compté pour l'identité Ğ1 « Alice ». » ; sous l'article « Ton vote : pour · inscrit sur la chaîne Ğ1 », 1 pour ; « En attente de la chaîne Ğ1 : contre. » ; le retrait, plus récent sur la chaîne, fait foi même quand le « contre » est confirmé après lui (0 pour · 0 contre) ; Ğecko : un QR code et le lien `g1://<compte>?amount=0.1&comment=ld1:…`, puis la confirmation dès que la chaîne la montre |
|
||||
| C24 | Sans compte des votes | Monnaie libre sur un serveur sans `LD_VOTE_ACCOUNT`, puis le groupe d'essai | pas de « Voter en lot » ni « Voter cette section » ; sous l'article : « Le vote par la chaîne Ğ1 n'est pas encore ouvert : le compte qui reçoit les votes reste à créer. Tu peux lire, proposer et faire une objection. », pas de bouton, les totaux et le seuil restent ; le panier ouvert par son adresse (`?onglet=panier`) dit la même chose, son bouton éteint, et **jamais** « Tes votes comptent dès l'envoi » ; dans le groupe d'essai, le panier et les boutons sont là |
|
||||
| C23 | Le vote par la chaîne Ğ1 | Monnaie libre, un portefeuille dans le navigateur : « Voter en lot », « Pour » sur Unicité du compte et Réciprocité (Propositions seed), « Signer et envoyer (2) » ; puis, dans « Propositions en cours », sous Réciprocité, « Contre » (l'indexeur en retard) puis « Retirer mon vote » ; puis sans portefeuille : « Pour » → « Passer par Ğecko » | une seule signature pour les deux : 0,1 Ğ1 vers le compte des votes et une remarque `ld1:` + 64 chiffres, rien du vote en clair ; « Ton vote compte : il est inscrit sur la chaîne Ğ1. », « Compté pour l'identité Ğ1 « Alice ». » ; sous la proposition « Ton vote : pour · inscrit sur la chaîne Ğ1 », 1 pour ; « En attente de la chaîne Ğ1 : contre. » ; le retrait, plus récent sur la chaîne, fait foi même quand le « contre » est confirmé après lui (0 pour · 0 contre) ; Ğecko : un QR code et le lien `g1://<compte>?amount=0.1&comment=ld1:…`, puis la confirmation dès que la chaîne la montre |
|
||||
| C24 | Sans compte des votes | Monnaie libre sur un serveur sans `LD_VOTE_ACCOUNT`, puis le groupe d'essai | pas de « Voter en lot » ni « Voter cette section » ; sous la première proposition : « Le vote par la chaîne Ğ1 n'est pas encore ouvert : le compte qui reçoit les votes reste à créer. Tu peux lire, proposer et faire une objection. », pas de bouton, les totaux et le seuil restent ; le panier ouvert par son adresse (`?onglet=panier`) dit la même chose, son bouton éteint, et **jamais** « Tes votes comptent dès l'envoi » ; dans le groupe d'essai, le panier et les boutons sont là |
|
||||
| C25 | L'ordre des articles | groupe d'essai : en fin de « Conclusion », « Proposer un autre ordre » ; cliquer « Monnaie G1 » puis la place 1 ; au clavier, flèche bas puis haut ; « Proposer cet ordre » ; « Pour » ; une deuxième personne vote « Pour » si cette voix ne suffit pas (dès 16 membres, une voix suffit dans le groupe d'essai : ADR 0007) ; puis, dans Monnaie libre, sur un téléphone, avec un portefeuille : « Voter en lot », « Pour » sur « Ordre des articles · Engagements fondamentaux », « Signer et envoyer (1) » | chaque section finit par « Ordre des articles · <section> » (7, aucun pour l'Ordonnancement, un seul article), ses articles numérotés, « 2 articles · inertie 2 / 5 · basse », « seed a minima · 0 vote » ; le vote d'un ordre en vigueur déplié montre la liste entière ; la liste où l'on clique : l'article choisi marqué, puis à sa place, annoncé (« « Monnaie G1 » en place 1 sur 2. »), « Proposer cet ordre » éteint tant que c'est l'ordre en vigueur ; le vote de l'ordre proposé se déplie dans la liste des propositions, l'ordre proposé en clair ; il est dans le panier, à la fin de sa section ; à la voix qui suffit : « Le nouvel ordre de « Conclusion » est entré en vigueur. », la section se lit dans le nouvel ordre ; par la chaîne : « Ton vote compte : il est inscrit sur la chaîne Ğ1. », « seed a minima · 1 vote » ; sur un téléphone, rien ne déborde, chaque ligne fait au moins 44 px |
|
||||
| C26 | Le titre du document | groupe d'essai : sous le titre, « Proposer un autre titre » ; « Acte d'engagement de la certification » ; « Pour » ; une deuxième personne vote « Pour » si cette voix ne suffit pas ; lire en anglais | sous le titre : « Titre du document · inertie 4 / 5 · haute · seed a minima · 0 vote » et les trois gestes ; le titre proposé se vote dans la liste des propositions (« Titre du document ») ; à la voix qui suffit : « Le titre « … » est entré en vigueur. », le document change de titre, son vote reste déplié sous le titre ; en anglais, l'ancien titre traduit, marqué « translation needs review » |
|
||||
| C27 | La participation ramenée dans ses bornes | un groupe de 4 dont la médiane est 2,5 votants, ramenée à 50 % (l'automate fait répondre ces chiffres au serveur) : « Réglages de la formule » | « 3 votants sur 4 (62,5 %) : la médiane des 12 propositions votées depuis un an. » — la part de la mesure elle-même, jamais 3 sur 4 arrondi d'abord ; puis « Ramenée entre 5 % et 50 % de l'électorat : le groupe demande ses voix pour comme si 2 personnes votaient (50 %). » ; « Part exigée : les « pour » demandés au-delà de C, à 2 votants comme d'habitude. » |
|
||||
| C27 | La participation ramenée dans ses bornes | un groupe de 4 dont la médiane est 2,5 votants, ramenée à 50 % (l'automate fait répondre ces chiffres au serveur) : « Réglages de la formule » | « 3 votants sur 4 (62,5 %) : la médiane des 12 propositions votées depuis un an. » — la part de la mesure elle-même, jamais 3 sur 4 arrondi d'abord ; puis « Ramenée entre 5 % et 50 % de l'électorat : le groupe demande ses voix pour comme si 2 personnes votaient (50 %). » ; « Part exigée : la part de « pour » demandée, à 2 votants comme d'habitude. » |
|
||||
| C28 | Objection « redit » ; sur la version retenue, « contre » et retrait, jamais « pour » | groupe d'essai, à trois (Aude, Oscar, Vera) : Aude propose un nouvel article qui répète « Unicité du compte » ; Oscar, dans « Détails » de cette proposition → « Faire une objection » → « Redit », « En vigueur — Unicité du compte », un motif → « Envoyer l'objection » ; Vera déplie son vote → « Contre », puis « Retirer mon vote » ; Vera ouvre « Voter en lot » → « Tout le document » : « Tout pour », puis « Tout contre », puis « Vider » ; Aude ouvre « Messages » → « Modifier l'article visé », complète le texte et soumet ; Oscar ouvre « Messages » → « Lever l'objection » ; Vera déplie de nouveau son vote | « Objection enregistrée : jusqu'à sa levée, personne ne peut plus voter pour la dernière arrivée des deux versions. » ; chez Oscar, « « … » redit « Unicité du compte » », « personne ne peut plus voter pour cette version », « Lever l'objection » ; chez Vera, « Une objection retient cette version : jusqu'à sa levée, personne ne peut plus voter pour. Tu peux voter contre ou retirer ton vote ; à la levée, elle n'entre en vigueur qu'avec les voix encore là. », « Elle redit « Unicité du compte ». », pas de « Pour », mais « Contre », la ligne marquée « retenue par une objection » ; après « Contre » : « Vote enregistré. », « Ton vote : contre », « 0 pour · 1 contre », et « Retirer mon vote » ; après le retrait : « Vote retiré. », « 0 pour · 0 contre », toujours pas de « Pour » ; dans le panier, la version retenue montre « Contre » sans « Pour », avec « une objection la retient : contre ou retrait, pas de « pour » » ; « Tout pour » la laisse de côté et le dit (« Tu as tout mis pour, sauf 1 version qu'une objection retient : sur elle, tu peux voter contre ou retirer ton vote. », le nombre suivant les versions retenues du document) ; « Tout contre » la prend (« Contre » enfoncé) ; chez Aude, « Messages, 1 non lu », le message « Oscar fait une objection : ta version « … » redit « Unicité du compte »… Pour répondre, modifie l'article visé. », puis le panneau « Proposer » sur Unicité du compte, partant de son texte, avec « Cette proposition répond à une objection… » ; chez Oscar, « Ton objection sur « … » a reçu une réponse. », une échéance, « Lever l'objection » et « Réitérer l'objection » ; levée : « Objection levée. », le message dit « objection levée » sans plus aucun geste ; Vera peut de nouveau voter, « Pour » compris |
|
||||
| C29 | Objection « contredit », levée à l'échéance | groupe d'essai : Aude propose un article qui contredit « Réciprocité » ; Oscar fait une objection « Contredit » ; Aude déplie le vote de sa proposition → « Reformuler », change le fond, « Enregistrer la correction » ; Oscar ne fait rien ; trois jours passent (l'automate avance l'horloge du serveur : `POST /api/dev/clock`, connexion de développement seulement) | chez Aude : « Elle contredit « Réciprocité ». », « Pour qu'elle se vote à nouveau, reformule-la… », « Reformuler » ouvre « Détails » avec le formulaire de modification ; « Nouvelle version enregistrée : les votants devront reconfirmer. », puis « Une réponse est arrivée : Oscar lève ou réitère l'objection d'ici le … » ; trois jours après : l'objection dit « levée : 3 jours sans suite », la proposition se vote de nouveau, le message d'Oscar dit « objection levée : 3 jours sans suite », sans geste |
|
||||
| C30 | La coquille d'un autre, validée par l'auteur | groupe d'essai : Aude propose « Clé unique et vivante » ; Vera, dans « Détails » → « Corriger une coquille », apostrophes typographiques → « Enregistrer la correction » ; Aude ouvre « Messages » → « Valider » | chez Vera : « Ta correction attend l'auteur du texte : elle s'applique quand il la valide, ou d'elle-même le … » ; le texte ne change pas ; « Coquilles proposées » montre le diff, « proposée par Vera », « en attente : s'applique d'elle-même le … » ; chez Aude : « Vera propose une correction de coquille dans ta version « Clé unique et vivante ». », le diff, une échéance, « Valider » / « Refuser » ; « Correction appliquée. », le message dit « correction appliquée » ; le texte porte la correction, l'historique « coquille corrigée · par Vera · validée par Aude » |
|
||||
| C31 | Coquille sur un texte en vigueur | groupe d'essai : une administratrice (Ada) ouvre le groupe ; Vera, sur « Raison d'être » → « Le vote » → « Coquilles, traductions, objections, historique » → « Corriger une coquille », « C'est le seul » → « C’est le seul » ; Ada ouvre « Messages » → « Valider » | chez Vera : « Ta correction attend un administrateur, ce texte venant du seed… » ; le texte en vigueur ne change pas (« C'est le seul ») ; la correction en attente se lit dans « Détails » ; chez Ada : « Vera propose une correction de coquille dans « Raison d'être », un texte du seed : un administrateur la valide. » ; après « Valider », le texte en vigueur porte « C’est le seul » et l'historique « validée par Ada » |
|
||||
| C32 | Lâcher ou garder un bulletin | Monnaie libre, un portefeuille dans le navigateur (Eve, chaîne simulée), « Propositions en cours » → Document de révocation : « Contre » le nœud éteint ; puis « Contre », fermer la fenêtre pendant que le portefeuille demande, refuser dans le portefeuille ; puis « Contre », fermer, signer dans le portefeuille ; une autre personne, sans portefeuille : « Contre » → « Passer par Ğecko », fermer, payer depuis un téléphone | nœud éteint : « La chaîne Ğ1 ne répond pas. Réessaie dans un moment. », le bulletin lâché aussitôt, rien « en attente » sous l'article ; fenêtre fermée puis refus : lâché ; fenêtre fermée puis signature : gardé, et la chaîne le confirme sans la page (« Ton vote : contre · inscrit sur la chaîne Ğ1 ») ; Ğecko, fenêtre fermée : « En attente de la chaîne Ğ1 : contre. », puis confirmé sans la page |
|
||||
| C33 | Le reçu de ton vote | Monnaie libre, un portefeuille : « Contre » sur Ne jamais certifier seul (« Propositions en cours »), « Télécharger ton reçu », « Tes bulletins » ; sur « Tes bulletins », « Fichier du reçu » : le reçu ; puis coller le reçu avec un choix changé, « Vérifier » ; une autre personne ouvre « Tes bulletins » | le reçu `recu-vote-<date>-<id>.json` : les votes, le sel, la remarque `ld1:…`, « confirmed », l'identité « Alice » ; « Tes bulletins de vote » : « Compté pour l'identité Ğ1 « Alice » » et la remarque ; « Le reçu tient : ses votes et son sel donnent bien ce commentaire. », « Ne jamais certifier seul : contre » ; changé : « Le reçu ne tient pas » ; l'autre personne : « Tu n'as encore envoyé aucun bulletin par la chaîne Ğ1. », et le reçu lui est refusé |
|
||||
| C34 | Le vote simulé, la chaîne fermée (ADR 0012) | Monnaie libre sur un serveur sans compte des votes (l'automate ferme la chaîne du serveur jetable, puis la rouvre) : « Propositions en cours » → Logiciel auditable → « Contre », sans portefeuille ; puis « Tes bulletins » | « Voter en lot » est là ; aucune fenêtre de portefeuille ; « Ton vote : contre » aussitôt, et un « contre » de plus dans les totaux ; dans l'API, `myVoteState` « simulated » et `tallySimulated` ; dans « Tes bulletins » : « Simulé : compté pour « Sacha » jusqu'à l'ouverture de la chaîne Ğ1 », sans bloc |
|
||||
|
||||
## Au-delà de la liste
|
||||
|
||||
@@ -83,3 +87,4 @@ page, la langue et la taille de l'écran. Les retours se traitent dans trustinWa
|
||||
| 2026-10-31 | automate | local, `033b331` et la relecture de `cd7e683` (coquille sur un texte qui vient d'entrer, objection face à un texte retiré, objection en double, retrait qui relance l'adoption) | C1–C33, M1 | 34 / 34 verts (35 tests) |
|
||||
| 2026-11-02 | automate | local, lot G sur `5d1f865` (décision d'Yvv du 01/11 : sur une version retenue, « contre » et retrait, jamais « pour » ; C28 ajusté : « Contre » et le retrait sous l'article, le panier) | C1–C33, M1 | 34 / 34 verts (35 tests) |
|
||||
| 2026-11-02 | automate | local, lot G fusionné (`0919b46`) et les articles des règles réécrits (amendement de seed sur une proposition ouverte) | C1–C33, M1 | 34 / 34 verts (35 tests) |
|
||||
| 2026-11-03 | automate | local, lot S (Propositions seed, ADR 0011 ; le quorum par cran, ADR 0013 : C3, C4, C5, C9, C18 à C20, C23, C24, C27, M1 repris) | C1–C33, M1 | 34 / 34 verts (35 tests) |
|
||||
|
||||
@@ -1,8 +1,20 @@
|
||||
# Tableau — revue d'Yvv du 2026-10-30
|
||||
|
||||
> Tenu par orch (seul rédacteur). État courant seulement ; l'historique est dans git.
|
||||
> Tenu par l'intégrateur libredecision-d4, par délégation d'orch (dev-63, depuis le 03/11 à 05 h 02).
|
||||
> État courant seulement ; l'historique est dans git.
|
||||
> Source : le message « REVIEW DECISION » d'Yvv, 2026-10-30 vers 08 h.
|
||||
|
||||
## Sessions
|
||||
|
||||
| Rôle | Session | Ce qu'elle fait |
|
||||
|---|---|---|
|
||||
| orch | dev-63 (`e66db8ca`), ouverte dans /DEV | orchestre, parle à Yvv, pousse et met en ligne sous mandat (« déploie » et « pousse », du 03/11 au 08/11) |
|
||||
| intégrateur | libredecision-d4, ouverte dans le dépôt | mène S, V puis U (un sous-agent à la fois), relit, fusionne, tient ce tableau, prépare les dossiers d'acte ; ne pousse et ne déploie rien |
|
||||
|
||||
Vers orch : « ACTE <lot> pousse » (dépôt, branche, sha exact) ; « PRÊT M6 » (dossier figé, sha,
|
||||
relecture indépendante inscrite dans `relectures.json`) ; QUESTION pour Yvv, avec sa réponse par
|
||||
défaut (jamais de formulaire chez l'intégrateur).
|
||||
|
||||
## REPRISE
|
||||
|
||||
Orch seul sur le dépôt (sous-agents en copies de travail). **M1 (L1–L8) en ligne** depuis le
|
||||
@@ -16,6 +28,66 @@ fusionnés (B2, F, D), puis `4d4adcc` (mineurs de la relecture de F) ; boucle ve
|
||||
- **F1.2, N1, N1.1, O1** réécrits (amendement de seed sur une proposition ouverte) ;
|
||||
- **licence** AGPL-3.0 (`76b8e9f`).
|
||||
|
||||
**Revue d'Yvv du 02/11 (ergonomie, Propositions seed, tampon des votes, accueil)**, armée d'avance par
|
||||
« Et pousse. Déploie. ». Décisions d'Yvv du 02/11, de 06 h 26 à 07 h 05 (registre) :
|
||||
- Propositions seed au **cran 2** ;
|
||||
- **C devient un quorum** de votants par cran : 12 · 12 · 50 · 50 · 50 en Monnaie libre, 1 à
|
||||
l'essai. Au-delà, la proportion suit la courbe des cinq crans. L'auteur initial change le quorum
|
||||
de son article avant le premier vote ;
|
||||
- l'écran dit, sans prendre de place, combien de « oui » font passer et combien de « non »
|
||||
bloquent ;
|
||||
- un vote simulé compte, puis s'efface à l'ouverture de la chaîne (acte « supprime ») ;
|
||||
- la publication est suspendue jusqu'au premier texte en vigueur.
|
||||
|
||||
**Relève le 03/11 à 03 h 38**, sur ordre d'orch racine (dev-63) ; à 05 h 02, dev-63 devient orch de
|
||||
libreDecision avec le mandat (Yvv, 04 h 58), et cette session devient intégratrice. La session d'avant était
|
||||
bloquée par le quota depuis le 02/11 à 09 h 51, puis coupée par le redémarrage du poste à 02 h 56.
|
||||
Les quatre agents sont morts, leurs copies sont intactes, `/tmp` est vidé (captures et bases de
|
||||
test perdues). Budget : finir S, U, V et H, sans nouveau lot, **un sous-agent à la fois** (compte
|
||||
partagé avec HCO, qui passe en premier). M6 : l'intégrateur fige le dossier et fait relire,
|
||||
orch l'exécute sous son mandat.
|
||||
|
||||
Ordre de reprise : H, puis S, puis V, puis T, puis U (validé par orch le 03/11, reçu avant 05 h 38). Chaque lot fusionne d'abord le chantier, qui contient
|
||||
déjà les lots finis. Le contrat du quorum vient de S et sert V et U.
|
||||
|
||||
Lots en cours, en copies de travail (`.claude/worktrees/agent-<id>`) :
|
||||
- **H** (`a6b179c…`, `lot/h-accueil`) : l'accueil. **Fini et fusionné** le 03/11 à 04 h 03
|
||||
(`a3c0a76`). Boucle verte dans sa copie : 237 tests Rust, 55 vitest, e2e 35 / 35. À faire voir
|
||||
à Yvv : le titre anglais devient « Making it possible / to decide together » ; les trois points
|
||||
font 12 px à 360 de large.
|
||||
- **S** (`a0b2510…`, `lot/s-seed`) : **fini et fusionné** le 03/11 à 05 h 20 (`349c8ed`).
|
||||
- les Propositions seed : I1, E1 et E2 ouvertes, au cran 2 (ADR 0011) ; publication suspendue sans texte en vigueur ;
|
||||
- le quorum par cran (ADR 0013) : 12 · 12 · 50 · 50 · 50 en Monnaie libre, 1 à l'essai ; règle « les votants manquants comptent non » (`judged_voters`) ; `PUT /units/{id}/quorum` ; « un vote existe » = `voted_units`, adoptions comprises ;
|
||||
- la licence `AGPL-3.0-or-later`.
|
||||
Boucle verte dans sa copie : 265 tests Rust, 56 vitest, e2e 35 / 35. Pour M6, sur une copie de la production : vérifier les propositions qui ont déjà assez de voix (9 au cran 2, 39 au cran 3), qui entreraient au premier balayage.
|
||||
- **V** (`a78bacc…`, `lot/v-tampon`) : le tampon des votes, le vote simulé partout tant que la chaîne
|
||||
est fermée, qui compte, puis s'efface par l'acte « supprime » (`ld-server discard-simulation
|
||||
[--apply]`, jamais appelé automatiquement) ; la publication « pas avant des votes prouvés »
|
||||
(`publish::waits_for_proven_votes`, bascule `LD_PUBLISH_SIMULATED`, règle stricte) ; `voted_units`
|
||||
étendu ; ADR 0012 réécrite. Fini le 03/11 vers 06 h 05 (`98b4530`) : 286 tests Rust, 56 vitest, e2e
|
||||
36 / 36 (C34). Puis la marque « simulé » sous l'article (VoteFold, minimal, `d57326d`), puisque M6
|
||||
part sans U. **Fusionné le 03/11 à 06 h 18** (`94ddb17`).
|
||||
- **T** (`lot-t-textes`, `lot/t-textes`) : **fini et fusionné** le 03/11 à 07 h 33 (`bb4bdf5`). F1.1,
|
||||
F1.2 et N1.1 disent le quorum par cran (fr, en, es), chaque nombre calculé par le moteur ; amendement
|
||||
gardé `2026-11-03-f1-1/f1-2/n1-1-quorum` (garde étendue à la révision 2 de M5) ; fichier de relecture
|
||||
pour Yvv `textes-quorum-seed.md` (quatre points à trancher, Q13). Boucle verte : 294 tests Rust, e2e
|
||||
36 / 36 (C18 hors délai une fois, vert à la relance). **Course** : un vote, même simulé, sur un de ces
|
||||
articles avant la mise en ligne fait refuser l'amendement pour lui, définitivement. Proposé : M6b,
|
||||
dès la relecture d'Yvv.
|
||||
- **U** (`adddf06…`, `lot/u-lecteur`) : le lecteur. Page courte ; ordonnancement par poignées en
|
||||
fin de section ; trois natures de modules ; consoles sans doublon ; déplier ou panneau, une règle ;
|
||||
**la ligne « N oui pour passer · N non bloquent »** et **le réglage du quorum par l'auteur avant
|
||||
le premier vote** (le serveur les fournit depuis S, aucun écran ne les montre encore). Note `UX-lecteur.md` commitée (`d4531da`), 4 fichiers
|
||||
commencés. En attente de V.
|
||||
**Relancé le 03/11 à 07 h 33**, avec la fusion de H, S, V et T, les reprises de la relecture de M6
|
||||
(« Vote enregistré. », « effacement à l'ouverture de la chaîne ») ; part en M7.
|
||||
|
||||
**M6 en ligne** depuis le 03/11 à 07 h 03 (`94ddb17`, pipeline 37) : H, S et V. Production `94ddb175` ;
|
||||
`main` et `chantier/acte-certification` poussés vers origin par orch. Le dépôt des textes reste à `9e0f45a`
|
||||
(publication suspendue). Copies de répétition retirées par l'intégrateur le 03/11 à 07 h 06 (scratchpad
|
||||
`m6/rep`, `m6/retour`, la base locale de `3f10a0e`) ; orch a retiré ses trois copies de la base.
|
||||
Suite : **T** (en cours), puis **U** (M7), un sous-agent à la fois ; PRÊT et actes par orch.
|
||||
|
||||
Yvv relit les quatre textes en ligne. Au prochain tour, avec ses retours :
|
||||
- N1.1 : G se calcule sur p̃ rapporté à W ;
|
||||
- étendre la garde de l'amendement à un texte déjà amendé.
|
||||
@@ -51,7 +123,9 @@ Ce qu'Yvv doit fournir :
|
||||
| L12 | Objections « redit » et « contredit » : la plus récente des deux propositions n'est pas votable tant que son auteur n'a pas répondu (redit : modifier l'article visé ; contredit : reformuler) ; un message à l'auteur de l'objection dans trustinWallet : lever ou réitérer ; sans réponse sous 3 jours, l'objection est levée. | F | M4 |
|
||||
| L13 | Coquilles : celle d'un autre que l'auteur attend sa validation (message), puis passe seule après 3 jours ; l'auteur garde la main tant que le texte n'est pas en vigueur ; sur un texte en vigueur, seule une coquille validée le corrige. | F | M4 |
|
||||
|
||||
**Liste d'attente** (hors livraison, sauf mot d'Yvv) : l'inscription de chaque vote sur la
|
||||
**Liste d'attente** (hors livraison, sauf mot d'Yvv) : au bureau, le bas du menu latéral (pastilles
|
||||
d'ambiance, « Se connecter ») est rogné au bord droit ; sur téléphone avec session, le sceau fixe
|
||||
chevauche la flèche d'une carte de groupe (vus par le lot H le 03/11, pas comparés à `5cf30e0`) ; l'inscription de chaque vote sur la
|
||||
chaîne (question stratégique, `docs/recherche/vote-g1-chaine.md`) ; l'affichage dans Ğecko.
|
||||
|
||||
## Lots
|
||||
@@ -78,6 +152,11 @@ chaîne (question stratégique, `docs/recherche/vote-g1-chaine.md`) ; l'affichag
|
||||
| Q6 | Ğ1Companion ne signe pas encore une transaction construite par une page : quelle extension pour le geste unique ? | **tranché** (01/11) : duniter-connect maintenant ; Ğ1Companion et trustinWallet sur la même interface ; Ğecko par lien et QR |
|
||||
| Q7 | Le compte qui reçoit les 0,1 Ğ1 : à qui, et que deviennent les sommes ? | **tranché** (01/11) : un compte « libreDecision » créé par Yvv dans Ğecko, les sommes au collectif ; attend son adresse publique |
|
||||
| Q8 | Le secret du vote tombe par recoupement : la chaîne montre qui vient de voter, et les totaux bougent aussitôt (relecture de `74f96be`) | **tranché** (01/11) : on ne dit rien ; totaux et son propre vote en direct, inchangés |
|
||||
| Q9 | Sous le quorum, les votants qui manquent comptent-ils comme des « non » ? (Sinon, un « non » peut faire passer un texte en complétant le quorum.) | **tranché** (03/11, formulaire d'orch racine vers 03 h 45) : « Ils comptent comme non » ; au cran 2, quorum 12, 9 oui passent avec 3 non au plus |
|
||||
| Q10 | Licence : AGPL-3.0 seulement, ou « ou toute version ultérieure » ? | **tranché** (03/11, même formulaire) : « Ou version ultérieure » → `AGPL-3.0-or-later` dans les manifestes (`Cargo.toml`, `web/package.json` et son verrou) et le README ; `LICENSE` inchangé ; confié au lot S |
|
||||
| Q11 | Un texte entré en vigueur par des votes simulés (9 « pour » au cran 2 dans Monnaie libre) se publie-t-il dans le dépôt des textes ? | **tranché** (03/11, formulaire d'orch, reçu avant 05 h 35 ; le relais disait « vers 05 h 45 ») : « Pas avant des votes prouvés » → en vigueur sur le site, pas publié ; la publication attend un texte passé par les seuls votes prouvés (dans Monnaie libre, rien avant l'ouverture de la chaîne) ; codé par V, écrit au dossier M6 |
|
||||
| Q12 | En production, Yvv a ouvert le 29/10 deux propositions d'inertie, I1 → 5 et E1 → 5 (0 vote). Ouvertes au démarrage de M6, elles retiennent I1 et E1 aux crans 3 et 4 pour de bon (amendement décidé une fois). Les retirer ? | **tranché** (03/11, formulaire d'orch, reçu à 05 h 51) : « Oui, retire-les » → avant le démarrage de M6, par le geste d'Yvv à l'écran (« Les miennes » › la ligne d'inertie › « Coquilles, traductions, objections, historique » › « Retirer ma proposition »), vérifié sur `3f10a0e` en local ; fait par Yvv à l'écran (annoncé à 06 h 07), dossier `actes/2026-11-03-m6-propositions-seed-quorum-tampon.md` |
|
||||
| Q13 | Les textes du quorum (F1.1, F1.2, N1.1 ; `textes-quorum-seed.md`) : annoncer l'intention de remonter l'inertie ? « Propositions seed » dans un texte voté ? garder l'exemple 7 224 / 120 ? nommer le groupe d'essai ? | **défauts appliqués** : non ; « Propositions seed » ; garder ; ne pas le nommer. Posé à orch le 03/11 à 07 h 34, pour Yvv à son retour |
|
||||
|
||||
Défauts posés par orch, sans question (Yvv peut les corriger) :
|
||||
- Décisions : « modules restant à voter » = les modules du doc pas encore adoptés par un vote
|
||||
@@ -93,28 +172,36 @@ Défauts posés par orch, sans question (Yvv peut les corriger) :
|
||||
## Actes
|
||||
|
||||
- M1 : **exécuté** le 30/10/2026, 15 h 29 – 15 h 52 (`actes/2026-10-30-m1-mise-en-ligne.md`).
|
||||
- M3a (L10) : **figé** sur `71819f9` (`actes/2026-10-30-m3-inertie-cinq-crans.md`), attend « déploie ».
|
||||
- M2 + M3a (L9 et L10) : **figé** sur `74f96be` (`actes/2026-10-31-m2-vote.md`), le vote par la chaîne éteint ; remplace M3a s'il est armé.
|
||||
- M3a (L10) : **caduc, emporté par M4** (`actes/2026-10-30-m3-inertie-cinq-crans.md`) : jamais exécuté, `71819f9` est en production depuis M4.
|
||||
- M2 + M3a (L9 et L10) : **caduc, emporté par M4** (`actes/2026-10-31-m2-vote.md`) : jamais exécuté, `74f96be` est en production depuis M4.
|
||||
- M4 (L9 à L13) : **exécuté** le 01/11/2026, 22 h 52 – 23 h 40 (`actes/2026-10-31-m4-vote-modules-objections.md`) ; M2 et M3a n'ont plus d'objet.
|
||||
- M5 (lot G, articles des règles, licence) : **exécuté** le 02/11/2026, 02 h 53 – 03 h 10 (`actes/2026-11-02-m5-retenue-textes-regles.md`).
|
||||
- M6 (H, S, V) : **exécuté** le 03/11/2026 par orch sous mandat, en ligne à 07 h 03 (pipeline 37) ; figé le 03/11 à 06 h 22 sur `94ddb17` (`actes/2026-11-03-m6-propositions-seed-quorum-tampon.md`) ; répétition faite sur une copie de la production de 06 h 11 ; relecture indépendante « 94ddb17 : ok » inscrite à 06 h 42 ; retour corrigé (couper `LD_PUBLISH_REMOTE` avant, répété) ; PRÊT envoyé à orch (dev-63), qui exécute sous mandat.
|
||||
|
||||
Restes mineurs de `71819f9` et du lot B : faits dans le lot D.
|
||||
|
||||
Liste d'attente (relecture de `94ddb17`, M6) :
|
||||
- `sbom-publish` échoue encore (pipelines 36 et 37) : écart ancien (certificat du serveur
|
||||
Dependency-Track refusé, HANDOFF), étape en `failure: ignore` ;
|
||||
- **acte « supprime »** (ouverture de la chaîne) : le jouer serveur arrêté, ou ajouter des gardes
|
||||
`WHERE in_force_id = …` à `give_back` (`simulation.rs:200`, `:258-298`) ; `give_back` remet la version
|
||||
déplacée telle qu'elle est (révisée entre-temps, une révision non votée reviendrait) ; `confirm_seeds`
|
||||
(`adoption.rs:49`) : un module confirmé par des votes simulés le reste ; p̃ mesurée votes simulés
|
||||
compris jusqu'au lendemain de l'acte ;
|
||||
- **lien d'équipe** : il multiplie les voix simulées (jusqu'à 500 ouvertures) ; l'ADR 0012 l. 290 dit
|
||||
« deux voix » : à corriger ; à dire à Yvv ;
|
||||
- **U** : « Vote enregistré. » (`VoteFold.svelte:123`) et « N votes enregistrés. » (`BallotPanel.svelte:95`)
|
||||
après un vote simulé ; `fr.ts:263`, `:348` (et en, es) : « jusqu'à son effacement à l'ouverture de la
|
||||
chaîne » → c'est l'acte « supprime » qui efface ;
|
||||
- `document.json` comptera les votes simulés une fois la publication permise (l'ADR le dit) ;
|
||||
`simulation::unproven` recharge l'état du document à chaque affichage tant que la file attend
|
||||
(performance) ; `reached` / `missing` = 0 alors que la marge retient le rival (antérieur).
|
||||
|
||||
Liste d'attente (relecture de `033b331+4d4adcc`, après M4) :
|
||||
- 0008 : lever les doublons debout avant de créer `signals_one_standing` (sans objet en production : 0 signalement) ;
|
||||
- un ordre ne départage pas deux articles à la même position (deux créations simultanées) ;
|
||||
- `place_at_end` coupe toujours le même intervalle : au 52e ajout dans une section, les positions se confondent ;
|
||||
- `publish.rs` : articles sur `tally`, modules sur `shown_tally` (identiques aujourd'hui).
|
||||
|
||||
À dire à Yvv : dans le groupe d'essai (C = 1), dès 16 membres une voix seule fait passer un texte,
|
||||
la garde B^W passant sous la précision du calcul (ADR 0007). Monnaie libre (C = 50) n'est pas
|
||||
concernée. Pour deux voix dans l'essai quel que soit W : C = 2.
|
||||
|
||||
À demander à Yvv (relecture de `cd7e683`) : sur une version retenue par une objection, ni retirer
|
||||
son vote ni passer à « contre » ; à la levée, l'adoption tourne aussitôt. Le garder, ou permettre de
|
||||
retirer son vote et de voter « contre » sur une version retenue ? Défaut : tel quel (ADR 0010).
|
||||
|
||||
Ensuite : Chaque mise en ligne (M1 à M4) attend « déploie » d'Yvv et une relecture
|
||||
indépendante inscrite. La migration « Raison d'être » touche la base de production : elle ne
|
||||
remplace le Préambule que s'il est intact (texte de départ, 0 vote, aucune correction), et le
|
||||
dossier d'acte de M1 le dit.
|
||||
Chaque mise en ligne attend « déploie » d'Yvv, ou le mandat d'orch, et une relecture indépendante
|
||||
inscrite.
|
||||
|
||||
@@ -0,0 +1,402 @@
|
||||
# Textes du seed : le quorum par cran (F1.1, F1.2, N1.1)
|
||||
|
||||
> Préparé le 2026-11-03 pour ta relecture, Yvv (lot T), d'après tes décisions : le quorum (02/11 :
|
||||
> « C suit le cran, mais c'est une proposition par défaut, variable modifiable par l'auteur initial
|
||||
> du texte […] c'est plutôt un quorum ») ; « La courbe d'aujourd'hui, après le quorum » ; sous le
|
||||
> quorum, « Ils comptent comme non » (03/11) ; les quorums 12 · 12 · 50 · 50 · 50 dans Monnaie libre ;
|
||||
> « L'auteur, avant le 1er vote » ; les Propositions seed au cran 2 (ADR 0011). Les nouveaux textes sont
|
||||
> collés dans `seeds/acte-engagement-certification.json` et dans un amendement gardé, sur la branche
|
||||
> `lot/t-textes` : **rien n'est en ligne**.
|
||||
|
||||
## Avant de lire
|
||||
|
||||
- **Ce qui change.** Trois articles décrivaient encore l'ancien plancher C de voix « pour » :
|
||||
« Formule du seuil WoT » (F1.1), « Paramètres par défaut » (F1.2), « Niveaux d'inertie » (N1.1).
|
||||
Ils disent désormais le quorum, dans cet ordre : d'abord le sens (sous le quorum, les votants qui
|
||||
manquent comptent comme « non » ; au-delà, la part de « pour » du cran), puis la formule en code,
|
||||
telle que le moteur la calcule (`crates/ld-engine/src/threshold.rs:3-6`). F1.2 et N1.1 disent aussi
|
||||
le départ d'après l'ADR 0011 : aucun article en vigueur, Raison d'être, Unicité du compte et
|
||||
Réciprocité en Propositions seed au cran 2, le titre du document au cran 4.
|
||||
- **Les titres** sont gardés tous les trois : ils restent vrais.
|
||||
- **Les nombres.** Chaque nombre de ces textes, dans les trois langues, est calculé par le moteur ou
|
||||
lu dans le seed par un test (`crates/ld-server/tests/seed_quorum_texts.rs`,
|
||||
`every_number_of_the_quorum_texts_is_the_engine_s`) : un chiffre que rien ne justifie fait échouer
|
||||
le test. Les trois formules écrites dans les textes sont évaluées telles quelles et comparées au
|
||||
moteur sur une grille de cas (`the_formulas_of_the_texts_are_those_the_engine_computes`).
|
||||
- **La forme**, vérifiée par le test `the_quorum_texts_follow_the_rules_of_form` et par `render()`
|
||||
(`web/src/lib/markdown.ts`) : sous-ensemble de Markdown, ni tableau ni intertitre ; une ligne vide
|
||||
avant chaque liste (toutes les listes sortent en `<ul>`) ; renvois par le titre (« Formule du seuil
|
||||
WoT », « Paramètres par défaut », « Niveaux d'inertie »), jamais par le code ; apostrophes droites ;
|
||||
« » espacés en français, “ ” en anglais britannique (*favour*), «» serrés en espagnol ; formules en
|
||||
code, avec × et −, jamais d'astérisque.
|
||||
- **Longueur** (signes) : fr : F1.1 1081 · F1.2 2055 · N1.1 2372 ; en : F1.1 1058 · F1.2 1977 · N1.1 2246 ; es : F1.1 1083 · F1.2 2035 · N1.1 2454. Limite d'une proposition : 4 000 (`crates/ld-server/src/proposals.rs:32`) ;
|
||||
au-delà de 700, l'assistant dit « texte long » (`crates/ld-engine/src/assist.rs:25`), comme pour les
|
||||
textes actuels de F1.2 et N1.1.
|
||||
- **Le ton** est celui de F1.2, N1 et O1 tels que M5 les a posés : le groupe, la personne, jamais le
|
||||
système. Rien sur le vote simulé, ni sur le recoupement entre la chaîne et les totaux.
|
||||
|
||||
## La production
|
||||
|
||||
Les trois articles y sont des propositions ouvertes du seed, à 0 vote. Un **amendement de seed
|
||||
gardé** (`crates/ld-server/src/seed_amend.rs`, `2026-11-03-f1-1-quorum`, `-f1-2-quorum`,
|
||||
`-n1-1-quorum`) remplace leur texte au démarrage, une seule fois par document, **seulement si
|
||||
personne n'y a touché** : origine du seed, jamais entré en vigueur ni confirmé ; aucun vote ; aucune
|
||||
ligne de bulletin, de la chaîne ou de la simulation, en attente ou prouvée, quel qu'en soit le sort ;
|
||||
aucune coquille ; aucune traduction écrite par un membre ; aucune objection ; le texte d'avant
|
||||
identique à l'empreinte attendue.
|
||||
|
||||
- **F1.1** est encore à sa révision 1 (le texte du 21/10) : la garde de toujours.
|
||||
- **F1.2 et N1.1** sont à la révision 2 depuis M5 (02/11). La garde est étendue pour eux, et pour eux
|
||||
seuls : elle admet la révision 2 dont l'historique est « texte initial » puis « texte de départ
|
||||
remplacé », et sur laquelle l'amendement de M5 de cet article, lui seul, a été appliqué
|
||||
(`seed_amendments`) ; le texte doit être celui que M5 a posé. Rien d'autre n'est admis.
|
||||
- Les amendements de M5 sur F1.2 et N1.1 sont **dépassés** : le seed ne donne plus leur texte, ils ne
|
||||
décident plus rien (sans erreur au journal) ; leurs décisions du 02/11 restent.
|
||||
|
||||
Appliqué, dans une transaction :
|
||||
- `proposals` : le titre et le texte (fr) remplacés, la révision + 1 (F1.1 : 2 ; F1.2 et N1.1 : 3) ;
|
||||
- `revisions` : une ligne « texte de départ remplacé » (`amendment`), sans auteur, avec le nouveau
|
||||
texte : l'historique de l'article garde l'ancien et montre le diff ;
|
||||
- `translations` : en et es remplacés, liés à la nouvelle empreinte ;
|
||||
- `seed_amendments` : la décision (`applied`, `refused` et sa raison, ou `present`), aussi au journal ;
|
||||
- `outbox` : dans Monnaie libre seulement, une ligne par article (« proposition de départ réécrite :
|
||||
F1.1, le quorum par cran »…), qui attend comme les autres le premier texte en vigueur ; l'essai ne
|
||||
publie jamais.
|
||||
|
||||
Rien d'autre n'est touché : ni un vote, ni un bulletin, ni une autre proposition, ni le quorum ou le
|
||||
cran d'un article. Testé sur une base faite comme la production après M6 (née avec les textes du
|
||||
21/10, démarrée par le seed de M5 puis par celui de M6) : appliqué une fois ; refusé là où quelqu'un a
|
||||
voté (raison `votes`), là où un bulletin est en attente (`ballots`), là où un membre a écrit une
|
||||
traduction (`translation_edited`) ; au redémarrage, rien n'est rejoué.
|
||||
|
||||
**À savoir avant la mise en ligne** : le vote simulé est ouvert dans Monnaie libre depuis M6. Si
|
||||
quelqu'un vote sur l'un de ces trois articles avant que ce code parte, l'amendement le refuse là, et le
|
||||
texte d'avant reste (on le proposerait alors par l'application). Le refus est consigné une fois pour
|
||||
toutes : l'acte « supprime » de la fin de la simulation ne le fera pas rejouer.
|
||||
|
||||
## F1.1 — Formule du seuil WoT
|
||||
|
||||
**Aujourd'hui** (en production à la révision 1, le texte du 21/10) : en tête, en gras, `Seuil = C + B^W + (M + (1-M) × (1 - (T/W)^G)) × max(0, T-C)` ; « C = constante de base (plancher fixe) », « B = exposant de base (B^W tend vers 0) », « M = ratio de majorité cible (M = majority_pct / 100) » ; la liste des lettres suit « Où : » sans ligne vide, et s'affiche avec ses tirets ; « Seuil » reste en français dans les versions anglaise et espagnole.
|
||||
|
||||
**Ce qui est faux** : il n'y a plus de plancher C. Chaque cran a un quorum Q ; sous le quorum, les votants qui manquent comptent comme « non » ; au-delà, la part du cran s'applique à tous les votants. Le moteur calcule `R = B^W + (M + (1 − M)(1 − (T'/W)^G)) · T'`, avec `T' = max(T, Q)`. B est la base (W l'exposant).
|
||||
|
||||
**Titre** gardé : il reste vrai. Le texte dit d'abord le sens, puis la formule, puis les lettres ; leurs valeurs sont dans les deux articles voisins.
|
||||
|
||||
### F1.1 · Français (fait foi)
|
||||
|
||||
Titre : **Formule du seuil WoT**
|
||||
|
||||
```markdown
|
||||
Le seuil est le nombre de voix pour qu'il faut à une version pour entrer en vigueur. Sous le quorum Q, les votants qui manquent comptent comme « non » : le seuil se calcule comme si Q personnes avaient voté. Au-delà, il faut la part de « pour » que demande le cran d'inertie de l'article, parmi tous les votants : presque l'unanimité quand peu de gens votent, la majorité M quand tout le monde vote.
|
||||
|
||||
`T' = max(T, Q)`
|
||||
`Seuil = B^W + (M + (1 − M) × (1 − (T'/W)^G)) × T'`
|
||||
|
||||
Une version passe quand ses voix pour atteignent le seuil, arrondi à l'entier au-dessus.
|
||||
|
||||
- **T** : les votes exprimés sur la version, pour et contre.
|
||||
- **Q** : le quorum de l'article ; **T'** : les votants retenus, T, ou Q s'il en manque.
|
||||
- **W** : le nombre de membres de la toile de confiance Ğ1.
|
||||
- **B** : la base ; à la puissance W, elle est si petite qu'elle ne compte pas.
|
||||
- **M** : la majorité demandée quand tout le monde vote.
|
||||
- **G** : le gradient : plus il est grand, plus la part demandée monte quand peu de gens votent.
|
||||
|
||||
Leurs valeurs sont dans « Paramètres par défaut » et « Niveaux d'inertie ».
|
||||
```
|
||||
|
||||
### F1.1 · English
|
||||
|
||||
Titre : **WoT threshold formula**
|
||||
|
||||
```markdown
|
||||
The threshold is the number of votes in favour a version needs to come into force. Below the quorum Q, the voters who are missing count as votes against: the threshold is worked out as if Q people had voted. Beyond it, it takes the share of votes in favour that the article's level of inertia asks for, among all the voters: near-unanimity when few people vote, the majority M when everyone votes.
|
||||
|
||||
`T' = max(T, Q)`
|
||||
`Threshold = B^W + (M + (1 − M) × (1 − (T'/W)^G)) × T'`
|
||||
|
||||
A version passes when its votes in favour reach the threshold, rounded up to a whole number.
|
||||
|
||||
- **T**: the votes cast on the version, for and against.
|
||||
- **Q**: the article's quorum; **T'**: the voters counted, T, or Q if some are missing.
|
||||
- **W**: the number of members of the Ğ1 web of trust.
|
||||
- **B**: the base; raised to the power W, it is so small that it does not count.
|
||||
- **M**: the majority asked for when everyone votes.
|
||||
- **G**: the gradient: the larger it is, the higher the share asked for when few people vote.
|
||||
|
||||
Their values are in “Default parameters” and “Inertia levels”.
|
||||
```
|
||||
|
||||
### F1.1 · Español
|
||||
|
||||
Titre : **Fórmula del umbral WoT**
|
||||
|
||||
```markdown
|
||||
El umbral es el número de votos a favor que necesita una versión para entrar en vigor. Por debajo del quórum Q, los votantes que faltan cuentan como «no»: el umbral se calcula como si hubieran votado Q personas. Más allá, hace falta la proporción de votos a favor que pide el nivel de inercia del artículo, entre todos los votantes: casi la unanimidad cuando vota poca gente, la mayoría M cuando vota todo el mundo.
|
||||
|
||||
`T' = max(T, Q)`
|
||||
`Umbral = B^W + (M + (1 − M) × (1 − (T'/W)^G)) × T'`
|
||||
|
||||
Una versión pasa cuando sus votos a favor alcanzan el umbral, redondeado al entero superior.
|
||||
|
||||
- **T**: los votos emitidos sobre la versión, a favor y en contra.
|
||||
- **Q**: el quórum del artículo; **T'**: los votantes contados, T, o Q si faltan.
|
||||
- **W**: el número de miembros de la red de confianza Ğ1.
|
||||
- **B**: la base; elevada a la potencia W, es tan pequeña que no cuenta.
|
||||
- **M**: la mayoría pedida cuando vota todo el mundo.
|
||||
- **G**: el gradiente: cuanto mayor es, más alta es la proporción pedida cuando vota poca gente.
|
||||
|
||||
Sus valores están en «Parámetros por defecto» y «Niveles de inercia».
|
||||
```
|
||||
|
||||
## F1.2 — Paramètres par défaut
|
||||
|
||||
**Aujourd'hui** (en production à la révision 2, le texte de M5 du 02/11) : « **C = 50** : le nombre minimal de votes « pour » dans Monnaie libre. Sous 50 voix pour, rien ne passe » ; « le groupe demande 75 % de « pour » au-delà de C » ; « Au départ, Unicité du compte, Réciprocité et le titre du document sont au cran 4 (haute) ».
|
||||
|
||||
**Ce qui est faux** : C est devenu le quorum du cran (12 · 12 · 50 · 50 · 50 dans Monnaie libre), que l'auteur de la première version change avant le premier vote ; la part du cran s'applique à tous les votants, plus « au-delà de C » ; au départ, aucun article n'est en vigueur, et Raison d'être, Unicité du compte et Réciprocité sont des Propositions seed au cran 2.
|
||||
|
||||
**Titre** gardé. L'introduction, « Un vote permanent, sans durée » et les autres lettres sont ceux de M5, mot pour mot : seuls la ligne de C (devenue Q) et « Par défaut » changent.
|
||||
|
||||
### F1.2 · Français (fait foi)
|
||||
|
||||
Titre : **Paramètres par défaut**
|
||||
|
||||
```markdown
|
||||
Les valeurs des lettres de la formule (voir « Formule du seuil WoT ») et la façon dont le vote se déroule.
|
||||
|
||||
**Un vote permanent, sans durée**
|
||||
|
||||
- Chaque version se vote à tout moment, sans échéance. Chacun peut changer ou retirer son vote : le dernier fait foi.
|
||||
- Une proposition entre en vigueur dès qu'elle atteint son seuil. S'il y a déjà un texte en vigueur, il lui faut en plus une marge (voix pour moins voix exigées) plus large que celle de ce texte. Le texte remplacé redevient une proposition, avec ses votes : il peut revenir.
|
||||
- Si plusieurs propositions y parviennent, celle qui a la marge la plus large entre en vigueur.
|
||||
|
||||
**Les lettres**
|
||||
|
||||
- **W** : le nombre de membres de la toile de confiance Ğ1, relu sur la chaîne toutes les 6 heures.
|
||||
- **T** : les votes exprimés sur la version, pour et contre.
|
||||
- **Q**, le quorum : sous ce nombre de votants, ceux qui manquent comptent comme « non ». Chaque article prend celui de son cran : 12, 12, 50, 50 et 50 dans Monnaie libre, du cran 1 au cran 5. L'auteur de la première version d'un article, un administrateur pour les textes de départ, peut en fixer un autre tant que personne n'a voté sur l'article ; ensuite, il ne change plus. Dans Monnaie libre, jamais moins de 2 : une seule voix ne fait jamais passer un texte.
|
||||
- **B = 0,1** : dans la toile de confiance, `B^W` est si petit qu'il ne compte pas.
|
||||
- **M** et **G** : donnés par le cran d'inertie de l'article (voir « Niveaux d'inertie »). G n'est pas fixé à la main : il se déduit de la participation habituelle du groupe.
|
||||
|
||||
**Par défaut**
|
||||
|
||||
- Le cran par défaut est le 3 (moyenne) : M = 55 %, un quorum de 50 dans Monnaie libre, et le groupe demande 75 % de « pour » quand il vote comme d'habitude. Tout nouvel article commence à ce cran.
|
||||
- Au départ, aucun article n'est en vigueur. Raison d'être, Unicité du compte et Réciprocité sont des Propositions seed, mises en avant pour lancer le vote, au cran 2 (basse). Le titre du document est au cran 4 (haute), l'ordre des articles de chaque section au cran 2, tous les autres articles au cran 3.
|
||||
```
|
||||
|
||||
### F1.2 · English
|
||||
|
||||
Titre : **Default parameters**
|
||||
|
||||
```markdown
|
||||
The values of the letters of the formula (see “WoT threshold formula”) and how the vote runs.
|
||||
|
||||
**A permanent vote, with no duration**
|
||||
|
||||
- Every version can be voted on at any time, with no deadline. Anyone can change or withdraw their vote: the last one is the one that counts.
|
||||
- A proposal comes into force as soon as it reaches its threshold. If a text is already in force, it also needs a wider margin (votes in favour minus votes required) than that text has. The replaced text becomes a proposal again, with its votes: it can come back.
|
||||
- If several proposals get there, the one with the widest margin comes into force.
|
||||
|
||||
**The letters**
|
||||
|
||||
- **W**: the number of members of the Ğ1 web of trust, read again from the chain every 6 hours.
|
||||
- **T**: the votes cast on the version, for and against.
|
||||
- **Q**, the quorum: below this number of voters, those who are missing count as votes against. Each article takes the one of its level: 12, 12, 50, 50 and 50 in Monnaie libre, from level 1 to level 5. The author of the first version of an article, an administrator for the starting texts, can set another one as long as nobody has voted on the article; after that, it no longer changes. In Monnaie libre, never less than 2: a single vote never passes a text.
|
||||
- **B = 0.1**: in the web of trust, `B^W` is so small that it does not count.
|
||||
- **M** and **G**: given by the article's level of inertia (see “Inertia levels”). G is not set by hand: it follows from the group's usual turnout.
|
||||
|
||||
**By default**
|
||||
|
||||
- The default level is 3 (medium): M = 55%, a quorum of 50 in Monnaie libre, and the group asks for 75% of votes in favour when it votes as usual. Every new article starts at this level.
|
||||
- At the start, no article is in force. Purpose, Uniqueness of the account and Reciprocity are seed proposals, put forward to start the vote, at level 2 (low). The title of the document is at level 4 (high), the order of the articles of each section at level 2, all other articles at level 3.
|
||||
```
|
||||
|
||||
### F1.2 · Español
|
||||
|
||||
Titre : **Parámetros por defecto**
|
||||
|
||||
```markdown
|
||||
Los valores de las letras de la fórmula (ver «Fórmula del umbral WoT») y cómo se desarrolla la votación.
|
||||
|
||||
**Una votación permanente, sin duración**
|
||||
|
||||
- Cada versión se vota en cualquier momento, sin plazo. Cada cual puede cambiar o retirar su voto: el último es el que cuenta.
|
||||
- Una propuesta entra en vigor en cuanto alcanza su umbral. Si ya hay un texto en vigor, necesita además un margen (votos a favor menos votos exigidos) más amplio que el de ese texto. El texto sustituido vuelve a ser una propuesta, con sus votos: puede volver.
|
||||
- Si varias propuestas lo consiguen, entra en vigor la que tiene el margen más amplio.
|
||||
|
||||
**Las letras**
|
||||
|
||||
- **W**: el número de miembros de la red de confianza Ğ1, leído de nuevo en la cadena cada 6 horas.
|
||||
- **T**: los votos emitidos sobre la versión, a favor y en contra.
|
||||
- **Q**, el quórum: por debajo de este número de votantes, los que faltan cuentan como «no». Cada artículo toma el de su nivel: 12, 12, 50, 50 y 50 en Monnaie libre, del nivel 1 al nivel 5. El autor de la primera versión de un artículo, un administrador para los textos de partida, puede fijar otro mientras nadie haya votado sobre el artículo; después, ya no cambia. En Monnaie libre, nunca menos de 2: un solo voto nunca hace pasar un texto.
|
||||
- **B = 0,1**: en la red de confianza, `B^W` es tan pequeño que no cuenta.
|
||||
- **M** y **G**: los da el nivel de inercia del artículo (ver «Niveles de inercia»). G no se fija a mano: se deduce de la participación habitual del grupo.
|
||||
|
||||
**Por defecto**
|
||||
|
||||
- El nivel por defecto es el 3 (media): M = 55 %, un quórum de 50 en Monnaie libre, y el grupo pide un 75 % de votos a favor cuando vota como de costumbre. Todo artículo nuevo empieza en este nivel.
|
||||
- Al inicio, ningún artículo está en vigor. Razón de ser, Unicidad de la cuenta y Reciprocidad son Propuestas seed, puestas en primer plano para lanzar la votación, en el nivel 2 (baja). El título del documento está en el nivel 4 (alta), el orden de los artículos de cada sección en el nivel 2, todos los demás artículos en el nivel 3.
|
||||
```
|
||||
|
||||
## N1.1 — Niveaux d'inertie
|
||||
|
||||
**Aujourd'hui** (en production à la révision 2, le texte de M5) : « le groupe demande d'abord C voix pour, puis une part de « pour » parmi les votes au-delà de C » ; la part exigée sur T ; « Cran 4 · haute […] Unicité du compte, Réciprocité, le titre du document » ; la participation de référence « vaut deux fois C » ; l'exemple « 92, 97, 103, 109 ou 113 voix pour […] Au cran 3 : 50 voix pour, plus 75 % des 70 autres votes, soit 102,5, arrondi à 103 ».
|
||||
|
||||
**Ce qui est faux** : le quorum remplace C ; la part se calcule sur T', les votants ou le quorum s'il en manque ; au cran 2 sont les trois Propositions seed et l'ordre de chaque section, au cran 4 le titre seul ; la référence est deux fois le quorum de référence du document (50 dans Monnaie libre), jamais le quorum d'un article ; avec le quorum, l'exemple donne 72, 81, 90, 100 ou 108 voix pour ; et dans la formule de G, p̃ est une part de l'électorat, pas un nombre de votants.
|
||||
|
||||
**Titre** gardé : il reste vrai. Chaque cran dit maintenant son quorum ; l'exemple dit aussi deux cas sous le quorum.
|
||||
|
||||
### N1.1 · Français (fait foi)
|
||||
|
||||
Titre : **Niveaux d'inertie**
|
||||
|
||||
```markdown
|
||||
À chaque cran, le groupe demande un quorum de votants, puis une part de « pour » parmi eux (voir « Formule du seuil WoT »). Sous le quorum, les votants qui manquent comptent comme « non ». La part dépend du cran et du nombre de votants, comparé à la participation habituelle du groupe : plus il y a de votants, plus elle baisse, jusqu'à la majorité M quand tout le monde vote.
|
||||
|
||||
`Part exigée = M + (1 − M) × (1 − (T'/W)^G)`, où T' est le nombre de votants, ou le quorum s'il en manque.
|
||||
|
||||
**Les cinq crans** : le quorum dans Monnaie libre, la part exigée quand le groupe vote comme d'habitude, puis quand tout le monde vote, et ce qui est à ce cran au départ.
|
||||
|
||||
- **Cran 1 · très basse** : quorum 12 ; 60 % comme d'habitude, 50 % quand tout le monde vote. Aucun article au départ.
|
||||
- **Cran 2 · basse** : quorum 12 ; 67 % comme d'habitude, 50 % quand tout le monde vote. Raison d'être, Unicité du compte, Réciprocité, et l'ordre des articles de chaque section.
|
||||
- **Cran 3 · moyenne** : quorum 50 ; 75 % comme d'habitude, 55 % quand tout le monde vote. Le cran par défaut : tous les autres articles, et chaque nouvel article.
|
||||
- **Cran 4 · haute** : quorum 50 ; 83 % comme d'habitude, 60 % quand tout le monde vote. Le titre du document.
|
||||
- **Cran 5 · très haute** : quorum 50 ; 90 % comme d'habitude, 66 % quand tout le monde vote. Aucun article au départ.
|
||||
|
||||
**La participation habituelle** est la médiane du nombre de votants des propositions du groupe votées depuis un an. Tant que le groupe n'a pas voté sur 5 propositions, elle vaut deux fois le quorum de référence du document : 100 votants dans Monnaie libre. Elle ne dépend pas du quorum d'un article. Elle reste entre 1 % et 50 % de l'électorat, et se mesure une fois par jour.
|
||||
|
||||
**G** se calcule pour que la part exigée, à la participation habituelle, soit exactement celle du cran : `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, où s est la part exigée comme d'habitude et p̃ la participation habituelle divisée par W.
|
||||
|
||||
Exemple : avec 7 224 membres et une participation habituelle de 120 votants, quand 120 personnes votent, il faut 72, 81, 90, 100 ou 108 voix pour, du cran 1 au cran 5 ; au cran 3, 75 % des 120 votants, soit 90. Sous le quorum, les absents comptent comme « non » : au cran 2 (quorum 12), 9 voix pour passent avec 3 « contre » au plus ; au cran 3 (quorum 50), il faut 39 voix pour, avec 11 « contre » au plus.
|
||||
```
|
||||
|
||||
### N1.1 · English
|
||||
|
||||
Titre : **Inertia levels**
|
||||
|
||||
```markdown
|
||||
At each level, the group asks for a quorum of voters, then for a share of votes in favour among them (see “WoT threshold formula”). Below the quorum, the voters who are missing count as votes against. The share depends on the level and on the number of voters, compared with the group's usual turnout: the more voters, the lower it gets, down to the majority M when everyone votes.
|
||||
|
||||
`Share asked = M + (1 − M) × (1 − (T'/W)^G)`, where T' is the number of voters, or the quorum if some are missing.
|
||||
|
||||
**The five levels**: the quorum in Monnaie libre, the share asked when the group votes as usual, then when everyone votes, and what is at that level at the start.
|
||||
|
||||
- **Level 1 · very low**: quorum 12; 60% as usual, 50% when everyone votes. No article at the start.
|
||||
- **Level 2 · low**: quorum 12; 67% as usual, 50% when everyone votes. Purpose, Uniqueness of the account, Reciprocity, and the order of the articles of each section.
|
||||
- **Level 3 · medium**: quorum 50; 75% as usual, 55% when everyone votes. The default level: all other articles, and every new article.
|
||||
- **Level 4 · high**: quorum 50; 83% as usual, 60% when everyone votes. The title of the document.
|
||||
- **Level 5 · very high**: quorum 50; 90% as usual, 66% when everyone votes. No article at the start.
|
||||
|
||||
**The usual turnout** is the median number of voters on the group's proposals voted on over the past year. Until the group has voted on 5 proposals, it is twice the document's reference quorum: 100 voters in Monnaie libre. It does not depend on the quorum of an article. It stays between 1% and 50% of the electorate, and is measured once a day.
|
||||
|
||||
**G** is computed so that the share asked, at the usual turnout, is exactly that of the level: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, where s is the share asked as usual and p̃ the usual turnout divided by W.
|
||||
|
||||
Example: with 7,224 members and a usual turnout of 120 voters, when 120 people vote, it takes 72, 81, 90, 100 or 108 votes in favour, from level 1 to level 5; at level 3, 75% of the 120 voters, i.e. 90. Below the quorum, those missing count as votes against: at level 2 (quorum 12), 9 votes in favour pass with 3 votes against at most; at level 3 (quorum 50), it takes 39 votes in favour, with 11 votes against at most.
|
||||
```
|
||||
|
||||
### N1.1 · Español
|
||||
|
||||
Titre : **Niveles de inercia**
|
||||
|
||||
```markdown
|
||||
En cada nivel, el grupo pide un quórum de votantes, y luego una proporción de votos a favor entre ellos (ver «Fórmula del umbral WoT»). Por debajo del quórum, los votantes que faltan cuentan como «no». La proporción depende del nivel y del número de votantes, comparado con la participación habitual del grupo: cuantos más votantes, más baja, hasta la mayoría M cuando vota todo el mundo.
|
||||
|
||||
`Proporción exigida = M + (1 − M) × (1 − (T'/W)^G)`, donde T' es el número de votantes, o el quórum si faltan.
|
||||
|
||||
**Los cinco niveles**: el quórum en Monnaie libre, la proporción exigida cuando el grupo vota como de costumbre, luego cuando vota todo el mundo, y lo que está en ese nivel al inicio.
|
||||
|
||||
- **Nivel 1 · muy baja**: quórum 12; 60 % como de costumbre, 50 % cuando vota todo el mundo. Ningún artículo al inicio.
|
||||
- **Nivel 2 · baja**: quórum 12; 67 % como de costumbre, 50 % cuando vota todo el mundo. Razón de ser, Unicidad de la cuenta, Reciprocidad, y el orden de los artículos de cada sección.
|
||||
- **Nivel 3 · media**: quórum 50; 75 % como de costumbre, 55 % cuando vota todo el mundo. El nivel por defecto: todos los demás artículos, y todo artículo nuevo.
|
||||
- **Nivel 4 · alta**: quórum 50; 83 % como de costumbre, 60 % cuando vota todo el mundo. El título del documento.
|
||||
- **Nivel 5 · muy alta**: quórum 50; 90 % como de costumbre, 66 % cuando vota todo el mundo. Ningún artículo al inicio.
|
||||
|
||||
**La participación habitual** es la mediana del número de votantes de las propuestas del grupo votadas en el último año. Hasta que el grupo haya votado 5 propuestas, vale dos veces el quórum de referencia del documento: 100 votantes en Monnaie libre. No depende del quórum de un artículo. Se mantiene entre el 1 % y el 50 % del electorado, y se mide una vez al día.
|
||||
|
||||
**G** se calcula para que la proporción exigida, con la participación habitual, sea exactamente la del nivel: `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`, donde s es la proporción exigida como de costumbre y p̃ la participación habitual dividida por W.
|
||||
|
||||
Ejemplo: con 7224 miembros y una participación habitual de 120 votantes, cuando votan 120 personas, hacen falta 72, 81, 90, 100 o 108 votos a favor, del nivel 1 al nivel 5; en el nivel 3, el 75 % de los 120 votantes, es decir 90. Por debajo del quórum, los que faltan cuentan como «no»: en el nivel 2 (quórum 12), 9 votos a favor pasan con 3 en contra como mucho; en el nivel 3 (quórum 50), hacen falta 39 votos a favor, con 11 en contra como mucho.
|
||||
```
|
||||
|
||||
## Les autres articles, cherchés et laissés
|
||||
|
||||
Recherche dans tout le seed, en fr, en et es : C, un plancher, un minimum de « pour », un seuil, une
|
||||
inertie, le cran de départ de Raison d'être, Unicité du compte et Réciprocité, les nombres 12, 50,
|
||||
100.
|
||||
|
||||
| Article | Ce qu'il dit | Laissé, parce que |
|
||||
|---|---|---|
|
||||
| N1 « Réglage de l'inertie » | un cran de 1 à 5 ; « un article au cran 4 ne descend qu'avec les voix que demande le cran 4 » | vrai : le cran 4 y est un exemple, pas le cran de départ d'un article ; rien sur C |
|
||||
| O1 « Ordonnancement du document » | l'ordre de chaque section au cran 2, le titre au cran 4, « au départ » | vrai (ADR 0009, 0011) |
|
||||
| F1 « Formule de vote » | renvoie à g1vote | rien sur C ni sur un cran |
|
||||
| F1.3 « Processus de dépôt officiel » | « atteint le seuil d'adoption », puis IPFS, `system.remark`, Cesium, Gecko | rien sur C ; mais il décrit un dépôt qui n'est pas celui d'aujourd'hui (pas d'IPFS ni d'ancrage, une publication git) : **hors de ce lot, à reprendre à un prochain tour** si tu le veux |
|
||||
| K1, K2 | 100 certifications, 5 jours… ; le DU | les nombres du protocole et de la monnaie, sans rapport |
|
||||
| E1, E2, I1 | leur propre texte | rien sur leur cran |
|
||||
|
||||
## Points à trancher
|
||||
|
||||
1. **Ton intention de remonter l'inertie** une fois les textes passés : elle n'est pas écrite (ce n'est
|
||||
pas une règle). Si tu veux que F1.2 l'annonce sans la promettre, une phrase vraie suffit : « Leur
|
||||
cran se change ensuite par un vote, comme celui de tout article (voir « Réglage de l'inertie »). »
|
||||
2. **« Propositions seed »** dans un texte voté : c'est le mot de l'interface (« Proposition seed »,
|
||||
« Seed proposal », « Propuesta seed »). Autre choix : « propositions mises en avant ».
|
||||
3. **L'exemple de N1.1** (7 224 membres, 120 votants) reste celui de M5 et des tests (le vote
|
||||
forgeron de 2024) : une illustration, pas la toile d'aujourd'hui (5 707 membres en production le
|
||||
02/11). À ce W et à la participation de référence, les deux exemples sous le quorum donnent les
|
||||
mêmes nombres de « pour » : 9 au cran 2, 39 au cran 3 (`crates/ld-engine/src/inertia.rs`,
|
||||
`the_control_figures_of_the_quorum`). À retirer si tu ne veux pas de chiffre daté dans un texte voté.
|
||||
4. **Le groupe d'essai** (quorum 1 partout) n'est pas nommé : les textes donnent les quorums « dans
|
||||
Monnaie libre », comme F1.2 donnait C = 50.
|
||||
5. **F1.1 a changé de plan** : le sens d'abord, la formule ensuite, les lettres en liste (la liste
|
||||
d'aujourd'hui ne s'affiche pas comme liste, faute de ligne vide). B y est « la base » (W l'exposant :
|
||||
« exposant de base » était faux), M n'y est plus `majority_pct / 100`, et « Seuil » est traduit en
|
||||
anglais et en espagnol (*Threshold*, *Umbral*) : trois défauts relevés par M5 (`textes-regles-seed.md`,
|
||||
point 7).
|
||||
6. **N1.1, la formule de G** : p̃ y est « la participation habituelle divisée par W » (relevé par M5 à
|
||||
la mise en ligne : G se calcule sur une part de l'électorat, pas sur un nombre de votants).
|
||||
7. **Ce qui deviendra caduc une fois en ligne**, non touché par ce lot : `docs/adr/0013-quorum.md:133-135`
|
||||
(« Le texte F1.1 du seed […] et N1.1 […] décrivent encore C ») et
|
||||
`docs/adr/0011-propositions-seed.md:89-90` (F1.2 et N1.1 disent encore Unicité et Réciprocité au
|
||||
cran 4).
|
||||
|
||||
## Les chiffres et leur source
|
||||
|
||||
Chaque nombre est vérifié par `every_number_of_the_quorum_texts_is_the_engine_s`
|
||||
(`crates/ld-server/tests/seed_quorum_texts.rs`), qui le calcule ainsi :
|
||||
|
||||
| Chiffre | Où | Source |
|
||||
|---|---|---|
|
||||
| `T' = max(T, Q)` ; `Seuil = B^W + (M + (1 − M) × (1 − (T'/W)^G)) × T'` | F1.1 | `threshold::judged_voters`, `required_ratio`, `wot_threshold` (`crates/ld-engine/src/threshold.rs:57-85`) ; évaluées telles qu'écrites |
|
||||
| `Part exigée = M + (1 − M) × (1 − (T'/W)^G)` | N1.1 | `threshold::required_ratio` ; évaluée telle qu'écrite |
|
||||
| `G = ln(1 − (s − M)/(1 − M)) / ln(p̃)` | N1.1 | `inertia::gradient` (`crates/ld-engine/src/inertia.rs:190-197`) ; évaluée telle qu'écrite |
|
||||
| Quorums 12, 12, 50, 50, 50, du cran 1 au cran 5 | F1.2, N1.1 | le seed, `instances[monnaie-libre].quorums` ; `InertiaLevel::LOWEST`, `HIGHEST` |
|
||||
| Jamais moins de 2 | F1.2 | `inertia::quorum_bounds(W, false)` |
|
||||
| Qui change le quorum, avant le premier vote | F1.2 | `trustin_access::sets_quorum` (`crates/trustin-access/src/lib.rs:204-217`) ; ADR 0013 |
|
||||
| W relu toutes les 6 heures | F1.2 | `wot::REFRESH` (`crates/ld-server/src/wot.rs:13-14`) |
|
||||
| B = 0,1 | F1.2 | `FormulaParams::DEFAULT_BASE` |
|
||||
| Cran 3 par défaut : M = 55 %, quorum 50, 75 % | F1.2, N1.1 | `InertiaLevel::DEFAULT`, `majority_pct`, `share_pct` ; le quorum du cran |
|
||||
| M = 50, 50, 55, 60, 66 % ; s = 60, 67, 75, 83, 90 % | N1.1 | `InertiaLevel::majority_pct`, `share_pct` |
|
||||
| Propositions seed au cran 2 | F1.2, N1.1 | `seed::SEED_PROPOSAL_LEVEL` ; les versions `seedProposal` du seed, leurs titres dans chaque langue |
|
||||
| Le titre au cran 4, l'ordre de chaque section au cran 2 | F1.2, N1.1 | le seed, `modules.title.inertia`, `modules.order.inertia` |
|
||||
| Tous les autres articles au cran 3 ; rien aux crans 1 et 5 | F1.2, N1.1 | le seed : chaque `inertia` (toutes égales, vérifié) |
|
||||
| 5 propositions ; 100 votants (deux fois le quorum de référence) | N1.1 | `Participation::MIN_SAMPLE` ; `Participation::of(W, voteFloor, None, 0).voters(W)`, `voteFloor` = 50 |
|
||||
| Entre 1 % et 50 % | N1.1 | `Participation::LOWEST`, `HIGHEST` |
|
||||
| Depuis un an ; une fois par jour | N1.1 | `participation::WINDOW_DAYS` = 365, `EVERY_HOURS` = 24 |
|
||||
| 72, 81, 90, 100, 108 voix pour à 120 votants | N1.1 | `Scale::required(120, k, Q_k)`, W 7 224, médiane 120 ; déjà `inertia.rs`, `the_values_shown_to_yvv` |
|
||||
| 75 % des 120 votants, soit 90 | N1.1 | la part du cran 3 × 120, égale au seuil du moteur (vérifié) |
|
||||
| Cran 2 (quorum 12) : 9 « pour », 3 « contre » au plus | N1.1 | `threshold::yes_needed(0)`, puis `no_needed(9) − 1`, W 7 224, médiane 120 |
|
||||
| Cran 3 (quorum 50) : 39 « pour », 11 « contre » au plus | N1.1 | idem ; les deux exemples restent sous le quorum (vérifié) |
|
||||
|
||||
Les règles sans chiffre :
|
||||
|
||||
| Règle | Où | Source |
|
||||
|---|---|---|
|
||||
| Sous le quorum, les votants qui manquent comptent comme « non » | F1.1, F1.2, N1.1 | `threshold::judged_voters` ; ADR 0013 |
|
||||
| Au-delà du quorum, la part du cran parmi tous les votants | F1.1, N1.1 | `threshold::wot_threshold` ; ADR 0013 (« la courbe d'aujourd'hui, après le quorum ») |
|
||||
| Une version passe quand ses « pour » atteignent le seuil arrondi au-dessus | F1.1 | `threshold::passes`, `clamp_ceil` |
|
||||
| La participation habituelle ne dépend pas du quorum d'un article | N1.1 | `inertia::Participation::reference_ratio` (le quorum de référence du document) ; ADR 0013 |
|
||||
| Au départ, aucun article en vigueur | F1.2 | ADR 0011 ; le seed (aucune version `in_force` hors modules) |
|
||||
|
||||
## Les textes dans le seed
|
||||
|
||||
Déjà collés (le `_source` du seed le dit) ; une base neuve naît avec eux, et l'amendement les écrit
|
||||
dans une base existante. Rien à recopier.
|
||||
Reference in New Issue
Block a user