v3 : ADR 0009, les modules d'ordre et de titre ; chantier, contrôles C25–C27, ADR 0007, structure

ADR 0009 : un module est une unité du document (units.kind), ses versions des
propositions ; l'ordre d'une section se complète à la fin quand des articles
entrent ou sortent pendant son vote (ni caduc, ni à reconfirmer) ; un nouvel
article se place à la fin de sa section ; à l'entrée d'un titre, ses traductions
passent « à revoir » ; l'ajout gardé des documents existants.
ADR 0007 : l'échantillon de la participation nomme ses statuts (open, in_force,
applied) ; ce que les réglages disent d'une participation ramenée.
CHANTIER : ce que voit la personne, la règle des modules, les crans 2 et 4.
CONTROLES : C3, C17, C20 mis à jour, C25 à C27, le passage du lot D (29 / 29).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-10-31 05:58:17 +01:00
co-authored by Claude Opus 5.5
parent 25af01154a
commit 4bdaf0e995
6 changed files with 202 additions and 25 deletions
+14 -8
View File
@@ -36,7 +36,8 @@ crates/
ld-engine/ # PUR (zéro I/O) : threshold (formule inertielle), inertia (cinq crans, médiane,
# référence, échelle), edit (coquille vs fond, diff), assist (découpage, similarité,
# longueur), compose (adoption, aperçus), ballot (bulletin scellé ld1:, le dernier
# fait foi, jugement d'une transaction), address (SS58, préfixe g1)
# fait foi, jugement d'une transaction), address (SS58, préfixe g1), order (l'ordre
# d'une section : qui en est, complété à la fin, places), pending (modules à voter)
trustin-access/ # règles d'accès de trustinWallet : sees / opens / manages_access, vote_way (serveur ou
# chaîne), groupes par défaut
ld-server/
@@ -47,23 +48,28 @@ crates/
# jour) · publish.rs (file → git) · wot.rs (W sur la chaîne) · seed.rs ·
# seed_amend.rs / inertia_amend.rs (amendements gardés) · ballots.rs (vote groupé,
# bulletins de la chaîne Ğ1, confirmation, « ton vote ») · indexer.rs (txComments)
# · web.rs (sert web/build)
tests/ # api.rs (scénarios bout en bout) · ballots.rs (vote par la chaîne, indexeur simulé)
# · modules.rs / order.rs / doc_title.rs (les modules, ADR 0009 : l'ordre d'une
# section, le titre du document) · module_amend.rs (ajout gardé) · web.rs (sert web/build)
tests/ # api.rs (scénarios bout en bout) · ballots.rs (vote par la chaîne, indexeur simulé) ·
# modules.rs (ordre, titre, ajout gardé)
seeds/ # acte-engagement-certification.json (trilingue, 33 articles, I1/E1/E2 en vigueur ;
# inertie 3, E1/E2 à 4)
# inertie 3, E1/E2 à 4 ; modules : le titre à 4, l'ordre de chaque section à 2)
# upcoming/<groupe>.json : les « À venir » des outils d'un groupe (fr, en, es), lus au démarrage
web/src/
lib/i18n/ # fr.ts SOURCE (types Key) · en.ts · es.ts — parité testée
lib/components/ # Sidebar, DocPanel, VoteFold (le vote déplié sous l'article), BallotPanel (panier),
# ChainSign (signature, Ğecko), VersionDetails, ProposeView, UnitBlock, DeepList, Seal…
# ChainSign (signature, Ğecko), VersionDetails, ProposeView, UnitBlock, DeepList,
# OrderModule / OrderEditor (l'ordre d'une section, la liste où l'on clique),
# TitleBar / TitlePropose (le titre du document), Seal…
lib/wallet/ # injected.ts (portefeuille injectedWeb3, polkadot-api chargé à la signature) · gecko.ts
lib/basket.ts # PUR : sections, tout pour / tout contre, versions en concurrence
lib/basket.ts # PUR : sections, tout pour / tout contre, versions en concurrence, modules
lib/order.ts # PUR : placer, monter / descendre, ce qui a bougé
routes/ # / (accueil + choix du groupe) · connexion · invitation · equipe · g/[group] (piliers, en cours) ·
# g/[group]/docs · g/[group]/docs/[doc] (lecteur,
# vote déplié ?vote=, panneau ?onglet=panier|propositions|proposer|details|reglages)
# · g/[group]/decisions · g/[group]/mandats ·
# g/[group]/protocoles (à venir) · acces (trustinWallet) ; /groupes, /decisions… redirigent
web/e2e/ # Playwright C1–C24 + M1 ; serve.sh = serveur jetable /tmp/ld-e2e sur :8092 et
web/e2e/ # Playwright C1–C27 + M1 ; serve.sh = serveur jetable /tmp/ld-e2e sur :8092 et
# chain-mock.mjs (nœud et indexeur Ğ1 simulés) ; faux portefeuille dans helpers.ts
docker/ # app.Dockerfile · app-compose.yml (sonic)
.woodpecker/ # app.yml · maquette.yml
@@ -85,7 +91,7 @@ maquette/ # v2 intacte (frontend Nuxt, backend FastAPI, docker, docs-v
```bash
export PATH=$HOME/.cargo/bin:$PATH
cargo fmt --all --check && cargo clippy --workspace --all-targets -- -D warnings && cargo test --workspace
cd web && npm run check && npm test && npm run build && npm run e2e # e2e : 25 contrôles
cd web && npm run check && npm test && npm run build && npm run e2e # e2e : 29 contrôles
LD_DEV_LOGIN=1 cargo run -p ld-server # :8002, sert web/build
cd web && npm run dev # :3002 à chaud
+16 -5
View File
@@ -30,16 +30,21 @@ s_k = M_k + (1 − M_k)·(1 − p̃^G_k) ⇔ G_k = ln(1 − (s_k − M_k)/(1
| Cran | Nom | M_k | s_k |
|---|---|---|---|
| 1 | très basse | 50 % | 60 % |
| 2 | basse | 50 % | 67 % |
| 2 | basse (l'ordre des articles de chaque section, ADR 0009) | 50 % | 67 % |
| 3 | moyenne (par défaut) | 55 % | 75 % |
| 4 | haute (E1, E2 ; le titre du doc, lot D) | 60 % | 83 % |
| 4 | haute (E1, E2 ; le titre du document, ADR 0009) | 60 % | 83 % |
| 5 | très haute | 66 % | 90 % |
**La participation habituelle p̃** d'un groupe (`crates/ld-server/src/participation.rs`) :
- l'échantillon : les propositions du groupe (tous ses documents, toutes sortes, brouillons et
propositions retirées exceptés) qui portent au moins un vote sur leur révision actuelle, le dernier exprimé depuis
moins de 365 jours ;
- l'échantillon : les propositions du groupe (tous ses documents, toutes sortes, modules
compris) **ouvertes, en vigueur ou appliquées** — statuts `open`, `in_force`, `applied`,
nommés un par un dans la requête — qui portent au moins un vote sur leur révision actuelle,
le dernier exprimé depuis moins de 365 jours. Les brouillons et les propositions retirées
n'en sont pas ; un statut qui viendrait à exister n'y entre pas tant qu'il n'est pas nommé
(lot D, 2026-10-31 : la liste d'exclusion `NOT IN ('draft', 'withdrawn')` laissait entrer
tout statut nouveau sans qu'on l'ait décidé ; test
`the_usual_participation_counts_the_statuses_it_names_and_only_those`) ;
- T de chacune est compté **au moment de la mesure** : c'est le T que voit la formule, le vote
étant permanent ;
- T̃ = la médiane de ces T (moyenne des deux du milieu pour un nombre pair) ; p̃ = T̃ / W, avec le
@@ -63,6 +68,12 @@ s_k = M_k + (1 − M_k)·(1 − p̃^G_k) ⇔ G_k = ln(1 − (s_k − M_k)/(1
- le groupe d'essai (W = 2, C = 1) : la référence vaut 100 %, ramenée à 50 % ; G reste fini ;
il faut les deux voix, à tout cran.
Les réglages de la formule disent les deux, dans cet ordre (lot D) : la mesure telle quelle — sa
part est celle de la valeur elle-même, une médiane de 2,5 votants sur 4 fait 62,5 %, jamais
« 3 sur 4 » arrondi d'abord (`web/src/lib/participation.ts`, `usualShown`) —, puis ce que le
groupe en fait quand elle est ramenée : « le groupe demande ses voix pour comme si 2 personnes
votaient (50 %) » (contrôle C27).
La borne basse limite aussi l'effet de propositions à une voix multipliées pour faire baisser
la médiane (une médiane basse adoucit les seuils au-dessus d'elle) : à 1 % près, l'effet est
borné, et il faudrait plus de propositions de ce genre que de vraies. Les propositions retirées
+117
View File
@@ -0,0 +1,117 @@
# 0009 — Les modules : l'ordre des articles de chaque section, le titre du document
> Complète [0002](0002-vote-permanent.md) (vote permanent), [0007](0007-inertie-cinq-crans.md)
> (inertie à cinq crans) et [0008](0008-vote-par-transaction.md) (vote par la chaîne). Décisions
> d'Yvv à la revue du 2026-10-30 (L11) ; la règle des articles qui entrent ou sortent pendant le
> vote d'un ordre est le choix du lot D, isolé dans `ld-engine` pour être changé seul.
**Contexte.** Un texte de référence vit article par article : chacun entre en vigueur à son
seuil. Deux choses n'avaient pas de vote : la place des articles dans leur section (fixée par le
seed, puis « après tel article » au choix de qui proposait) et le titre du document (écrit une
fois, au seed). Yvv, 2026-10-30 : « En fin de section, il y a un "module" qui permet de changer
l'ordre des "articles". Lui-même à (2), avec une simple liste clipable. » ; « Le titre du doc à
(4). » ; « Non, titre et texte ensemble » — le titre d'un article reste voté avec son texte :
seul le titre du document est un module à part.
## Décision
### Un module est une unité du document, ses versions sont des propositions
`units.kind` (`article` par défaut, `title`, `order` ; migration `0007_modules.sql`, additive).
Un module a, comme un article, une inertie, une version en vigueur, des propositions ouvertes,
des votes, des changements d'inertie. Tout ce qui sert au vote d'un article lui sert sans
chemin à part : le vote déplié, le panier, le bulletin sur la chaîne Ğ1 (`ballots.rs` valide
les lignes contre les propositions du document : un module y est), le balayage, l'adoption
(`ld_engine::compose`), la marge du texte en place (0002), le cran (0007), « Décisions »
(`ld_engine::pending`).
- **Le titre du document** — code `titre`, inertie **4**. Une version = un titre dans la langue
source (corps vide). Elle se propose en tête du lecteur (« Proposer un autre titre »,
`POST /api/units/{id}/title`) ; une coquille s'y corrige sans vote (0003) ; elle se traduit.
- **L'ordre d'une section** — code `ordre.<section>`, inertie **2**, un par section. Une version =
la liste des articles de la section, un identifiant par ligne. Elle se propose en fin de
section (« Proposer un autre ordre », `POST /api/units/{id}/order`) avec une liste où l'on
clique : un article, puis sa nouvelle place, ou ses flèches, ou le clavier (Entrée choisit,
haut et bas déplacent). Un ordre ne se corrige pas et ne se traduit pas (`409 order_fixed`) :
on en propose un autre.
- L'écriture générique (`POST /api/docs/{id}/proposals`) refuse un module (`400 module`) : chacun
se propose à sa place.
### Qui est dans l'ordre d'une section
Les articles de la section qui ont un texte en vigueur ou une version ouverte (texte ou
retrait) ; ni les brouillons, ni les retirés. Dans l'ordre des positions. La même règle en Rust
(`DocState::members`) et en SQL (`order::sections_now`). Une section d'**un seul article n'a
rien à décider** : son ordre n'est jamais « à voter », ni montré, ni compté (`Module.moot`).
### Quand des articles entrent ou sortent pendant le vote d'un ordre : complété à la fin
Une proposition d'ordre garde **les votes reçus**. Ce qui est voté est l'ordre relatif des
articles qu'elle nomme ; on le lit toujours contre les articles présents
(`ld_engine::order::fit`) :
- les articles encore dans la section gardent l'ordre proposé ;
- un article **arrivé depuis** se place **à la fin**, dans l'ordre de la section (« 1 article
entré depuis, placé à la fin ») ;
- un article **sorti** (retiré, rejeté) disparaît de l'ordre, sans autre effet ;
- une proposition qui, ainsi complétée, **redit l'ordre en vigueur** ne peut pas entrer (« c'est
l'ordre en vigueur ») : elle reste ouverte, sans effet, jusqu'à ce qu'un autre ordre entre.
Écartées : **caduque** (un vote permanent dans une section vivante ne passerait jamais : chaque
nouvel article remettrait les compteurs à zéro) et **à reconfirmer** (même effet, plus lent, et
demande aux votants un geste qu'ils ne savent pas devoir faire). Compléter à la fin respecte ce
qui a été voté — l'ordre entre les articles connus — et la règle de placement par défaut.
### Les articles nouveaux se placent à la fin de leur section
Une proposition de nouvel article nomme sa **section** ; elle s'y place à la fin
(`ld_engine::order::place_at_end`). Un ancien client qui nomme un article (`afterUnitId`) obtient
la fin de la section de cet article. « Après tel article » n'existe plus : la place se vote, par
l'ordre de la section.
### Quand un ordre entre en vigueur
Il redistribue **les positions déjà tenues par la section** à ses articles, dans le nouvel ordre
(`ld_engine::order::positions`) : rien ne bouge hors de la section, aucun texte ne change, aucun
vote d'article n'est touché. L'ordre d'avant redevient une proposition ouverte, avec ses votes,
et peut revenir.
### Quand un titre entre en vigueur
`documents.title` prend le nouveau titre dans la langue source. Les traductions restent
éditoriales (le français voté fait foi) : la nouvelle version reprend celles du titre qu'elle
remplace, attachées au texte de ce titre-là, donc **« traduction à revoir »** jusqu'à ce qu'une
personne traduise le nouveau. Le titre du document dans les autres langues suit ses traductions,
fraîches ou à revoir (`doc_title::sync`, rejoué aussi à chaque mise en file de publication : une
coquille ou une traduction du titre en vigueur s'y reporte).
### Publication
`fr.md` ne change pas de forme : les articles dans leur ordre en vigueur, sous le titre en
vigueur. `en.md` / `es.md` portent une ligne de commentaire quand la traduction du titre est à
revoir. `document.json` gagne `modules` : le titre (inertie, statut, date d'entrée, votes,
traductions et leur fraîcheur) et chaque ordre (section, inertie, statut, date, votes, articles
par leur code).
### Les documents qui existent déjà
Le seed déclare les crans (`"modules": {"title": {"inertia": 4}, "order": {"inertia": 2}}`) ; une
base neuve crée les modules en même temps que les articles. Un document existant les reçoit par
un **ajout gardé** (`crates/ld-server/src/module_amend.rs`, dans la ligne de `seed_amend.rs` et
`inertia_amend.rs`) : une seule fois par document (journal `module_amendments`, migration
`0007`), depuis l'état présent — le titre en vigueur est le titre actuel du document, avec ses
traductions ; l'ordre en vigueur d'une section est l'ordre actuel de ses articles —, sans
toucher un article ni un vote. Les versions créées sont des « seed a minima » (en vigueur sans
vote, marge −C) : elles restent sous vote comme tout texte. Un document qui a déjà des modules,
ou sans titre, est noté et laissé.
## Ce que ça coûte
- Le seed de l'acte d'engagement passe de 33 à **41 modules à voter** : 33 articles, le titre, et
l'ordre de 7 sections (l'ordonnancement n'a qu'un article). C17 et les comptes de
« Décisions » le disent.
- Les aperçus (« si les bien cotées passent », « si tout passe ») montrent les articles seuls :
un ordre ou un titre proposé n'y change pas encore la place des articles ni le titre.
- Un ordre ouvert sur une section revenue à un seul article reste en base, sans être montré ni
compté.
- Les codes des nouveaux articles restent `N<n>` (sans lien avec la section), comme avant.
+1
View File
@@ -13,3 +13,4 @@ pas une décision : on en écrit une nouvelle qui la remplace, et on le note dan
| [0006](0006-acces-connect-trustinwallet.md) | Accès : connect.monnaie-libre.fr, invitations, trustinWallet | 2026-10-21 |
| [0007](0007-inertie-cinq-crans.md) | Inertie à cinq crans, calée sur la participation du groupe (complète 0002) | 2026-10-30 |
| [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 |
+45 -7
View File
@@ -33,7 +33,15 @@ les applications clientes (Cesium, Ğecko…) peuvent suivre.
**Raison d'être** (texte d'Yvv du 2026-10-30, qui remplace le Préambule : « Derrière une clé
il n'y a qu'un seul être humain vivant ; derrière un être humain, il n'y a qu'une seule clé
certifiante. ») et les deux engagements fondamentaux (Unicité du compte, Réciprocité), marqués
*seed a minima · 0 vote*. Au survol (ou toujours visibles sur mobile), trois gestes discrets :
*seed a minima* avec leur nombre réel de votes (*seed a minima · 0 vote*, puis *· 1 vote*…).
**Le titre du document est un module** (inertie 4) : sous le titre, son état (en vigueur sans
vote, ou adopté le…), « traduction à revoir » quand le titre lu est la traduction d'un titre
remplacé, et les mêmes gestes : **Le vote** · **Propositions** · **Proposer un autre titre**.
**Chaque section se termine par l'ordre de ses articles**, un module à l'inertie 2 : ses
articles numérotés en deux lignes au plus, la liste entière dans son vote, et
**Proposer un autre ordre** — une liste où l'on clique un article puis sa nouvelle place (ou
ses flèches, ou au clavier : Entrée le choisit, haut et bas le déplacent), puis « Proposer cet
ordre ». Une section d'un seul article n'a pas d'ordre à décider. Au survol (ou toujours visibles sur mobile), trois gestes discrets :
**Le vote** · **Les propositions** · **Proposer**. **Le vote se déplie sous l'article**, façon
accordéon (un seul à la fois, l'état dans l'URL : `?vote=`) : le niveau d'eau, les totaux
pour et contre (jamais qui), le seuil et les voix qui manquent, ton vote et où il en est
@@ -50,14 +58,16 @@ les applications clientes (Cesium, Ğecko…) peuvent suivre.
nombre et la meilleure en tête (niveau d'eau, pour / contre) ; la ligne se déplie sur ses
versions, chacune avec son étiquette, son niveau et ses marques, et chacune déplie son vote.
Les filtres gardent un article dès qu'une de ses versions passe. Chaque section offre
**« Voter cette section »**.
**« Voter cette section »**. Un ordre proposé s'y lit à la fin de sa section (ses articles
dans l'ordre proposé, les déplacés marqués dans son vote), un titre proposé en tête.
6. **Le vote groupé** (Yvv, 2026-10-30 : « Je peux voter tout d'un coup, ou une section entière,
ou un article avec son titre, ou séparément ») : « Voter en lot » ouvre un **panier** — pour,
contre ou retirer, article par article ; « tout pour » / « tout contre » pour une section ou
tout le document, jamais pour un article dont plusieurs versions sont en concurrence (il est
montré, on y choisit sa version) ; puis un seul geste : une écriture dans un groupe géré, une
transaction sur la chaîne Ğ1 dans Monnaie libre. Le panier tient sur un téléphone et reste
le temps de l'onglet.
le temps de l'onglet. Les modules y sont : le titre du document en premier, l'ordre de chaque
section à la fin de celle-ci (« tout pour » une section remplit aussi son ordre).
7. **Deux aperçus** : « si les bien cotées passent » et « si tout passe ».
8. **Trois langues** : fr · en · es, pour l'interface comme pour le texte. Le français fait foi ;
une traduction devenue ancienne (le français a changé depuis) est signalée.
@@ -82,9 +92,9 @@ G_k = ln(1 − (s_k − M_k)/(1 − M_k)) / ln(p̃).
| Cran | Nom | M_k | s_k | Au départ |
|---|---|---|---|---|
| 1 | très basse | 50 % | 60 % | |
| 2 | basse | 50 % | 67 % | |
| 3 | moyenne | 55 % | 75 % | partout |
| 4 | haute | 60 % | 83 % | Unicité du compte, Réciprocité (et le titre du doc, à venir) |
| 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 % | |
**La participation habituelle p̃** = la médiane des votants des propositions du groupe votées
@@ -119,6 +129,31 @@ L'article dit le passé de son inertie : passée de tel cran à tel autre, par u
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`).
### Les modules : l'ordre des articles, le titre du document (ADR 0009)
Revue du 2026-10-30 : « En fin de section, il y a un "module" qui permet de changer l'ordre des
"articles". Lui-même à (2), avec une simple liste clipable. » ; « Le titre du doc à (4). » ; le
titre d'un article reste voté avec son texte.
- Un module se vote **comme un article** : déplié, dans le panier, par la chaîne Ğ1 dans
Monnaie libre, avec la marge du texte en place (seed a minima : −C) et son cran. Son inertie
se vote aussi. Il compte dans « Décisions » : le seed passe de 33 à **41 modules à voter**
(33 articles, le titre, l'ordre de 7 sections ; l'ordonnancement n'a qu'un article).
- **L'ordre d'une section** est la liste de ses articles qui ont un texte en vigueur ou une
version ouverte. Un ordre proposé garde ses votes quand la section change : les articles
arrivés depuis se placent **à la fin**, les articles sortis disparaissent ; s'il redit alors
l'ordre en vigueur, il ne peut pas entrer. Ni caduc, ni à reconfirmer : un vote permanent dans
une section vivante ne passerait sinon jamais. À l'entrée, les articles de la section prennent
ses places dans le nouvel ordre ; rien d'autre ne bouge. Moteur : `crates/ld-engine/src/order.rs`.
- **Un nouvel article** se propose dans une section et se place à sa fin ; sa place se vote
ensuite, par l'ordre de la section.
- **Le titre du document** : à l'entrée d'un autre titre, le document change de titre en
français ; ses traductions restent éditoriales et passent « à revoir » jusqu'à ce qu'on les
reprenne. Une coquille du titre se corrige sans vote.
- Dans une base existante, chaque document reçoit ses modules **une fois**, depuis son état
présent (titre actuel, ordre actuel de chaque section), sans toucher un article ni un vote
(`crates/ld-server/src/module_amend.rs`, journal `module_amendments`, migration `0007`).
### Corriger n'est pas voter
**Une coquille touche les lettres et les espaces, rien d'autre.** Accents, majuscules, le style
@@ -199,7 +234,8 @@ traductions marquées éditoriales) et `document.json`, commit et pousse sur
`git.open.us.org/yvv/decision-depot-textes-reference`, chemin `monnaie-libre/acte-engagement-certification/`.
Échec → nouvel essai avec délai croissant. La clé de publication est générée par le serveur ;
sa partie publique s'affiche dans trustinWallet, à ajouter comme clé de déploiement (écriture)
du dépôt. Le groupe d'essai ne publie jamais.
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.
### Un texte de départ remplacé
@@ -274,6 +310,8 @@ Les raisons longues sont dans `docs/adr/`.
dans l'historique de l'article.
- Les traductions (en, es) sont éditoriales : tout membre les corrige sans vote, et elles sont
republiées — le français fait foi.
- Les aperçus (« si les bien cotées passent », « si tout passe ») montrent les articles seuls :
un ordre ou un titre proposé n'y change pas encore la place des articles ni le titre (ADR 0009).
## Questions ouvertes (à Yvv)
@@ -4,9 +4,9 @@ Chaque contrôle existe en deux versions : **automatique** (Playwright, `web/e2e
`npm run e2e`) et **humaine** (Chiara, sur la production ou en local). Une remarque de Chiara
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) se font dans le **groupe
Où tester : les contrôles qui écrivent (C5, C6, C7, C21, C22, C25, C26) se font dans le **groupe
d'essai** (caché, plancher C = 1, jamais publié) — jamais sur le texte de la communauté. Les
votes par la chaîne Ğ1 (C11, C17, C23) ne se jouent, pour l'automate, que sur une **chaîne
votes par la chaîne Ğ1 (C11, C17, C23, C25) 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.
@@ -14,7 +14,7 @@ pour une personne, ils coûtent 0,1 Ğ1 réels : c'est un acte « paye » d'Yvv.
|---|---|---|---|
| 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 |
| 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 » ; en dessous, « Propositions en cours » (30 lignes, une par article) |
| 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) |
| C6 | Coquille sans vote | groupe d'essai : Unicité du compte → « Le vote » → « Coquilles, traductions, signalements, 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. » |
@@ -29,14 +29,17 @@ pour une personne, ils coûtent 0,1 Ğ1 réels : c'est un acte « paye » d'Yvv.
| 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 · 33 modules à voter · dont 33 sans ton vote », puis « dont 32 » ; la ligne ouvre le lecteur |
| 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 » |
| 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 ; depuis le vote déplié : « Inertie · 4 / 5 · haute », la ligne du cran 4 marquée « cet article », 50 voix à 0 votant ; le sélecteur montre les cinq crans, 4 « actuelle » et grisé ; 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 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 » |
| 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 signaler une contradiction. », pas de bouton, les totaux et le seuil restent ; 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 » ; 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 » (1 vote après un « Pour », 0 après le retrait) ; 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 deuxième voix : « 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 » ; 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 deuxième voix : « Le titre « … » est entré en vigueur. », le document change de titre, son vote reste déplié sous le titre (2 pour) ; 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. » |
## Au-delà de la liste
@@ -66,3 +69,4 @@ page, la langue et la taille de l'écran. Les retours se traitent dans trustinWa
| 2026-10-30 | automate | local, lot A (entrée, logo, ambiances, menu, listes, Décisions) | C1–C17, M1 | 18 / 18 verts |
| 2026-10-30 | automate | local, lot C (inertie à cinq crans, réglages de la formule) | C1–C20, M1 | 21 / 21 verts |
| 2026-10-31 | automate | local, lot B (le vote déplié, le panier, le vote par la chaîne Ğ1 simulée) | C1–C24, M1 | 25 / 25 verts |
| 2026-10-31 | automate | local, lot D (l'ordre des articles, le titre du document, la participation ramenée) | C1–C27, M1 | 29 / 29 verts |