Files
decision/docs/adr/0007-inertie-cinq-crans.md
T
YvvandClaude Opus 5.5 40ab6e41c5 Lot S, phase 2 : le quorum documenté (ADR 0013, notes dans 0002 et 0007, CHANTIER, CONTROLES, CLAUDE.md)
ADR 0013 : la formule sur T' = max(T, Q), « Ils comptent comme non » dans
threshold::judged_voters, les quorums par cran 12 · 12 · 50 · 50 · 50 (1 dans le
groupe d'essai), le quorum d'un article fixé par l'auteur avant le premier vote
(« un vote existe » : quorum::voted_units, la limite du vote retiré), p0 = 2Q₀/W,
l'amendement 2026-11-03-quorums-par-cran, les nombres, le coût (une voix passe
dans le groupe d'essai ; F1.1 et N1.1 du seed décrivent encore C).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 05:15:18 +01:00

158 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 0007 — Inertie à cinq crans, calée sur la participation du groupe
> 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
milieu (3) pour toutes les propositions, (4) pour les 2 engagements structurels » ; « par
défaut l'inertie de l'indice d'inertie lui-même hérite de l'inertie de l'article » ; « une
échelle cohérente qui s'adapte aux nombres de certifiés et à la participation médiane aux
votes du groupe ». Au formulaire, il a choisi l'échelle **calée sur la participation** :
chaque cran exige une part fixe de « pour » quand le groupe vote comme d'habitude, puis se
relâche vers la majorité M quand plus de monde vote.
## Décision
**La formule reste celle de la Ğ1**, adoptée si « pour » ≥ ⌈R⌉ :
```
R = C + B^W + (M + (1 − M)·(1 − (T/W)^G)) · max(0, T − C)
```
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** à la participation habituelle p̃ ; G_k s'en déduit :
```
s_k = M_k + (1 − M_k)·(1 − p̃^G_k) ⇔ G_k = ln(1 − (s_k − M_k)/(1 − M_k)) / ln(p̃)
```
| Cran | Nom | M_k | s_k |
|---|---|---|---|
| 1 | très basse | 50 % | 60 % |
| 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 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, 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
W du moment : quand la toile grandit, l'échelle demande toujours s_k au même nombre habituel
de votants ;
- il faut **au moins 5** propositions votées ; avant, la **référence** p0 = 2C/W s'applique
(Monnaie libre : 100 votants sur 7 224, 1,38 %) — deux fois le plancher, une participation
que le groupe doit de toute façon atteindre pour que C laisse place à la majorité.
**Les bornes.** p̃ (mesurée ou de référence) est ramenée dans **[1 %, 50 %]**. Ainsi
0 < p̃ < 1, ln(p̃) est négatif et fini ; comme M_k < s_k < 1 pour chaque cran,
0 < 1 − (s_k − M_k)/(1 − M_k) < 1 et G_k est fini et positif (de 0,05 à 1,77). Alors :
- **le seuil croît avec le cran** : la part exigée vaut 1 − (1 − M_k)·(T/W)^G_k, croissante en
M_k et en G_k, et M_k, G_k croissent avec k (à pleine participation, les crans 1 et 2 se
rejoignent à M = 50 %) ;
- **la part exigée décroît vers M quand la participation monte**, et vaut M à T = W ;
- **à p̃, la part au-delà de C vaut s_k** ;
- **C reste un plancher** : à T ≤ C, R = C + B^W ; une seule voix ne fait jamais passer un
texte dans Monnaie libre ;
- 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. Cette garde tient à B^W : dès 16 membres, 0,1^W passe sous
la précision du calcul (1 + 10⁻¹⁶ = 1), et une voix seule suffit alors, C valant 1. Monnaie
libre n'est pas concernée (C = 50).
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
sortent de l'échantillon (relecture de `a576b68`, 2026-10-30) : sinon, créer cinq propositions, y
voter puis les retirer tirerait la médiane vers le bas sans laisser de trace visible, et leurs
votes ne pourraient plus être repris.
**Le recalcul : une fois par jour.** La mesure est gardée dans `settings`
(`participation:<groupe>` : médiane, taille de l'échantillon, date) ; elle est reprise au
démarrage puis par le balayage (toutes les 5 minutes) dès qu'elle a 24 heures. Un seuil qui
bougerait à chaque vote exprimé ailleurs dans le groupe ne se lirait pas ; une fois par jour,
il reste stable dans la journée et suit pourtant la vie du groupe. W, lui, change à son rythme
(la toile, toutes les 6 heures), et p̃ = T̃ / W le suit aussitôt.
**L'inertie de l'inertie hérite du cran de l'article.** Une proposition de changement
d'inertie se vote au cran actuel de l'article (`compose::voting_level`), comme son texte —
plus au cran au-dessus. Le cran se change en proposant l'un des cinq crans.
**Un entier reste un entier.** Le calcul flottant de ln et de la puissance peut porter un
milliardième de voix : un seuil qui tombe juste sur un entier (90 % de 70 = 63) ne doit pas
monter d'une voix pour autant. La part inertielle est ramenée à l'entier quand elle en est à
moins de 10⁻⁹ (`threshold::settle`) ; cas réel : 101 membres qui votent tous, M = 55 %, C = 1,
il faut 56 voix, et non 57.
## Les nombres
W = 7 224, C = 50 ; voix pour exigées (tests `ld-engine/src/inertia.rs`) :
| Médiane | T | cran 1 | cran 2 | cran 3 | cran 4 | cran 5 |
|---|---|---|---|---|---|---|
| 120 votants | 120 | 92 | 97 | 103 | 109 | 113 |
| 120 votants | 500 | 306 | 329 | 362 | 397 | 432 |
| 120 votants | 2 000 | 1 091 | 1 145 | 1 271 | 1 404 | 1 549 |
| 360 votants | 120 | 95 | 101 | 106 | 112 | 116 |
| 360 votants | 360 | 236 | 258 | 283 | 308 | 329 |
| 360 votants | 500 | 316 | 345 | 381 | 416 | 449 |
| 360 votants | 2 000 | 1 114 | 1 184 | 1 318 | 1 460 | 1 608 |
Le cas de référence de la formule (vote forgeron v2.0.0 : W 7 224, 120 votants, M 50 %,
G 0,2, C 0 → 94 voix) reste le test de la formule elle-même, lettres données ; ce ne sont plus
les lettres d'aucun cran.
## Les données
- Migration `0005` : les quatre mots deviennent des crans (low → 2, standard → 3, high → 4,
max → 5 ; le cran 1 est nouveau) dans `units.inertia` et `proposals.inertia_target`. Chaque
mot est d'abord gardé tel quel (`inertia_legacy`, `inertia_target_legacy`) ; les `params`
des `adoptions` passées ne sont pas touchés (ils portent les M et G de leur jugement). Le
serveur lit toujours les quatre mots. Les adoptions nouvelles gardent en plus le cran, s_k
et p̃ (sa source, l'échantillon, la médiane).
- Le seed : 3 partout, 4 pour E1 et E2.
- Dans une base existante, E1 et E2 passent de 3 à 4 par un **amendement d'inertie**
(`crates/ld-server/src/inertia_amend.rs`), dans la lignée des amendements de seed : décidé
une fois par document, seulement si **aucun vote n'a changé l'inertie de l'article** (pas
d'adoption d'inertie, cran encore celui du seed). Une proposition d'inertie ouverte ne
l'arrête pas : elle reste ouverte et se vote au nouveau cran. Chaque décision est gardée
(`inertia_amendments`), écrite dans les journaux, se lit sur l'article (`inertia_changes` :
« passée de 3 à 4 : réglage de départ du texte ») et le document est republié.
## Coût
- Les seuils de Monnaie libre changent. Avec W = 7 224, C = 50 et la référence (100 votants),
le cran 3 demande 103 voix à 120 votants (`standard` : 105), 360 à 500 (369), 1 265 à 2 000
(1 246), 3 996 quand tout le monde vote (3 637, M passant de 50 à 55 %) : un peu moins
jusqu'à un millier de votants, plus au-delà. Le cran 4 demande 108 à 120 votants (`high` :
115), 395 à 500 (439), autant à pleine participation (M 60 %). Rien n'est en vigueur par un
vote aujourd'hui ; les seuils déjà affichés bougent.
- Le seuil d'une proposition dépend désormais des autres votes du groupe, par la médiane : une
fois par jour, un texte peut passer ou ne plus passer sans nouveau vote sur lui (comme quand W
change). Chaque entrée en vigueur garde la médiane qui l'a jugée.
- Le document publié (`document.json`) porte l'inertie en nombre (1 à 5), et non plus en mot.
- Le texte N1.1 du seed (« Niveaux d'inertie », quatre niveaux) décrivait autre chose que la règle
en place. Le 2026-11-02, Yvv a fait réécrire F1.2, N1, N1.1 et O1 selon les règles appliquées
(`docs/chantiers/acte-certification/textes-regles-seed.md`) ; un amendement de seed gardé remplace
ces propositions ouvertes là où personne n'y a touché (`seed_amend`, `Version::Open`).