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

9.8 KiB
Raw Blame History

0007 — Inertie à cinq crans, calée sur la participation du groupe

Complète 0002 : 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 (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).