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
+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 |