Lot U3 : U3-informations.md (l'inventaire : chaque information de F1, F1.1, F1.2, F1.3, N1, N1.1 et O1 de M8, son moment, son endroit, sa clé i18n, sa preuve ; ce qui n'est pas porté et pourquoi — F1.3 en entier, g1vote, « toutes les 6 heures », le cran d'un nouvel article au moment de l'écrire, la formule de G ; ce qui n'est pas prouvé) ; CONTROLES.md (C1, C3 suivent les mots ; C39 à C43) ; UX-lecteur.md (section du lot U3) ; CLAUDE.md (45 contrôles, OpeningInfo, lib/opening.ts)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
# Les informations de fonctionnement dans l'interface (lot U3)
|
||||
|
||||
> Préparé le 2026-11-03 (lot U3, branche `lot/u3-interface`), d'après la demande d'Yvv du 03/11
|
||||
> vers 20 h 38 : « ordonnancement, inertie, et formule de vote sont des infos de fonctionnement. Les
|
||||
> votes se font à leur place, et les infos doivent trouver leur place dans l'ux. Vérifie que toutes
|
||||
> les infos utiles sont au bon endroit au moment où on en a besoin, tu as la place dans les panneaux
|
||||
> qui s'ouvrent à droite. » Le lot T4 a sorti F1, F1.1, F1.2, F1.3, N1, N1.1 et O1 du document
|
||||
> (ADR 0014). Leurs textes de référence sont ceux de M8 (`de1b7eb`, `seeds/acte-engagement-certification.json`,
|
||||
> gardés dans `crates/ld-server/tests/fixtures/seed-m8/`) ; ce que chaque phrase de F1.2 et N1.1
|
||||
> affirme, et le test qui le prouve : `t3c-liste-fermee.md` (numéros repris ici).
|
||||
|
||||
## Comment lire
|
||||
|
||||
Une ligne par information : la phrase source (abrégée), le **moment** où elle sert, **l'endroit** où
|
||||
l'interface la dit, la **clé** i18n (`web/src/lib/i18n/fr.ts`, puis en, es), la **preuve**. « Déjà » :
|
||||
l'interface la disait avant U3, à cet endroit ; « nouveau » ou « changé » : ce lot. Critère des lots T3
|
||||
à T3c, gardé : chaque phrase dite reste vraie pour tout W et tout quorum ; les termes définis
|
||||
(« participation habituelle », « quorum de l'article », « part exigée ») ; aucun chiffre daté ; les
|
||||
nombres viennent de l'API.
|
||||
|
||||
Les endroits : **le chapitre** « Info ouverture doc de réf. » (avant le texte, hors vote,
|
||||
`OpeningInfo.svelte`) ; **le vote déplié** sous une version (`VoteFold`), avec « Inertie »
|
||||
(`InertiaPicker`), « Quorum » (`QuorumSetting`) et « La formule du seuil » (`Formula`) ; **le panneau
|
||||
de droite** « Réglages de la formule » (`?onglet=reglages`, `FormulaSettings`) ; **la ligne d'ordre**
|
||||
d'une section et « Réordonner » (`OrderLine`, `Reorder`) ; **la ligne du titre** (`TitleBar`) ;
|
||||
**le panneau « Proposer »** (`ProposeView`).
|
||||
|
||||
Les preuves : les tests nommés sont sous `crates/` (Rust) ; « grille » renvoie à
|
||||
`crates/ld-server/tests/seed_quorum_texts.rs` sur la grille de T3c. Chaque phrase de règle que l'écran
|
||||
dit est épinglée, lettre pour lettre, par `web/tests/unit/rules.test.ts`, qui nomme à chaque ligne le
|
||||
test qui la prouve ; les nombres lus dans l'API, par les contrôles e2e (C20, C39, C43).
|
||||
|
||||
## F1 « Formule de vote »
|
||||
|
||||
| # | Phrase source | Moment | Endroit | Clé | Preuve |
|
||||
|---|---|---|---|---|---|
|
||||
| F1.a | « La formule qui régit l'adoption ou le rejet de chaque modification » | au vote | vote déplié, « La formule du seuil » (déjà) | `formula.title`, `formula.intro` | une définition |
|
||||
| F1.b | « Référence : g1vote (https://…) » | — | **non porté** (plus bas) | — | — |
|
||||
|
||||
## F1.1 « Formule du seuil WoT »
|
||||
|
||||
| # | Phrase source | Moment | Endroit | Clé | Preuve |
|
||||
|---|---|---|---|---|---|
|
||||
| F1.1.1 | « Le seuil est le nombre de voix pour qu'il faut à une version pour entrer en vigueur. » | au vote | « La formule du seuil » (déjà), R | `formula.intro`, `formula.R` | une définition |
|
||||
| F1.1.2 | « Sous le quorum Q, les votants qui manquent comptent comme « non » : le seuil se calcule comme si Q personnes avaient voté. » | au vote | « La formule du seuil », **changé** : « Sous le quorum Q de l'article, … : il faut autant de « pour » que si Q personnes avaient voté. » ; l'infobulle de « 9 oui sur 12 » (déjà) | `formula.reading`, `vote.need.title` | grille `under_the_quorum_it_takes_as_many_for_as_if_the_quorum_had_voted` |
|
||||
| F1.1.3 | « Au-delà, il faut la part de « pour » que demande le cran … la plus haute au quorum et baisse quand la participation monte, jusqu'à la majorité M » | au vote | « La formule du seuil » (déjà, suite de la même clé) | `formula.reading` | grille `the_share_asked_falls_beyond_the_article_s_quorum_down_to_m` |
|
||||
| F1.1.4 | `T' = max(T, Q)` et `Seuil = B^W + (M + (1 − M) × (1 − (T'/W)^G)) × T'` | au vote | « La formule du seuil », en MathML (déjà) | — | grille `the_formulas_of_the_texts_are_those_the_engine_computes` |
|
||||
| F1.1.5 | « Une version passe quand ses voix pour atteignent le seuil, arrondi à l'entier au-dessus. » | au vote | « La formule du seuil », **nouveau** : « Une version atteint son seuil quand ses voix pour atteignent R, arrondi à l'entier au-dessus. » | `formula.round` | `ld-engine` `threshold::a_whole_number_of_votes_never_gains_one_by_rounding` |
|
||||
| F1.1.6 | les lettres T, Q, T′, W, B, M, G | au vote | « La formule du seuil » : chaque lettre avec sa valeur lue dans l'API (déjà), **nouveau** T′ (« votants retenus : 12, T ou Q s'il en manque »), **changé** G (« déduit de la participation habituelle du groupe »), **nouveau** sous la liste, dans la toile seulement : « À la puissance W, B est si petit qu'il ne compte pas dans la toile de confiance. » | `formula.T`, `formula.Tprime`, `formula.Q`, `formula.W`, `formula.B`, `formula.B.wot`, `formula.M`, `formula.G` | `formula.Tprime` : `the_formulas_…` ; `formula.B.wot` : grille `b_to_the_power_w_never_counts_in_the_web_of_trust` (W de 100 à 10 000 000) ; G : grille `g_gives_…` |
|
||||
| F1.1.7 | « Leurs valeurs sont dans « Paramètres par défaut » et « Niveaux d'inertie ». » | au vote | le lien « Réglages de la formule » sous la formule (déjà) | `settings.title` | — |
|
||||
|
||||
## F1.2 « Paramètres par défaut » (numéros de `t3c-liste-fermee.md`)
|
||||
|
||||
| # | Phrase source | Moment | Endroit | Clé | Preuve |
|
||||
|---|---|---|---|---|---|
|
||||
| 1, 2, 9, 19 | l'introduction et les intertitres | — | rien à porter | — | — |
|
||||
| 3, 4 | « Chaque version se vote à tout moment, sans échéance. Chacun peut changer ou retirer son vote : le dernier fait foi. » | au vote | vote déplié, sous les boutons, **nouveau** : « Le vote reste ouvert, sans échéance : tu peux changer ou retirer ton vote à tout moment, le dernier fait foi. » — pas sur une version retenue par une objection, où « Une objection retient cette version… » dit ce qui reste (déjà) | `vote.permanent` (`vote.held`) | `ld-engine` `ballot::the_last_one_stands_in_the_order_of_the_chain` ; `tests/ballots.rs` `the_last_one_stands_in_the_order_of_the_chain` |
|
||||
| 5 | « Une proposition entre en vigueur dès qu'elle atteint son seuil. » | en lisant les propositions | « Propositions en cours » : « Chacune remonte dès qu'elle atteint son seuil » (déjà) ; « Seuil atteint. » dans le vote (déjà) | `deep.note`, `tally.reached` | une règle sans nombre |
|
||||
| 6, 7 | « S'il y a déjà un texte en vigueur, il lui faut en plus une marge … plus large que celle de ce texte. Le texte remplacé redevient une proposition, avec ses votes : il peut revenir. » | au vote d'une version concurrente | vote déplié d'une version à côté d'un texte en vigueur (texte, titre, ordre), **nouveau** : « Un texte est déjà en vigueur : pour le remplacer, cette version doit en plus atteindre 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. » | `vote.rival` | `ld-engine` `compose::a_rival_must_beat_the_version_in_force` ; `tests/api.rs` `a_rival_replaces_the_seed_and_the_seed_returns_among_proposals` ; `tests/modules.rs` `an_order_is_proposed_with_the_articles_of_its_section_then_voted_into_force` (l'ordre d'avant revient parmi les propositions) |
|
||||
| 8 | « Si plusieurs propositions y parviennent, celle qui a la marge la plus large entre en vigueur. » | au vote, en voyant les autres versions | vote déplié, dans « Autres versions », **nouveau** | `vote.others.rule` | `ld-engine` `compose::rivals_on_one_unit_yield_one_winner` |
|
||||
| 10 | « W : le nombre de membres de la toile de confiance Ğ1, relu sur la chaîne toutes les 6 heures. » | au vote, aux réglages | « W — électorat : 5 745 (membres de la toile de confiance Ğ1) », formule et réglages (déjà) ; « toutes les 6 heures » **non porté** (plus bas) | `formula.W`, `formula.W.wot` | — |
|
||||
| 11 | « T : les votes exprimés sur la version, pour et contre. » | au vote | « T — voix exprimées » (déjà) | `formula.T` | une définition |
|
||||
| 12 | « Q, le quorum : sous ce nombre de votants, ceux qui manquent comptent comme « non ». » | à l'ouverture ; au vote ; en fixant le quorum | le chapitre, **nouveau** : « Sous le quorum d'un article, les votants qui manquent comptent comme « non ». » ; l'infobulle du vote, « Quorum », les réglages (déjà) | `opening.quorum.rule`, `vote.need.title`, `quorum.explain`, `settings.quorum.note` | grille `under_the_quorum_…` |
|
||||
| 13 | « Chaque article prend celui de son cran : 12, 12, 50, 50 et 50 dans Monnaie libre, du cran 1 au cran 5. » | à l'ouverture ; aux réglages ; en fixant le quorum | le chapitre, **nouveau** : « 12 · 12 · 50 · 50 · 50 votants, du cran 1 au cran 5. » (lu dans `doc.quorums` ; « 1 votant à chaque cran. » dans le groupe d'essai) ; la colonne « Quorum » des réglages, « Par défaut, celui de son cran : 12 votants. » (déjà) | `opening.quorum.levels`, `opening.quorum.same.*`, `settings.col.quorum`, `quorum.default.*` | `tests/quorum.rs` `each_level_has_its_quorum_and_every_evaluation_says_it` ; lu dans l'API : C39 (l'API changée, le chapitre suit), C20 |
|
||||
| 14 | « 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 l'article ne garde la trace d'aucun vote. » | à l'ouverture ; en fixant le quorum | le chapitre, **nouveau**, la phrase de F1.2 mot pour mot ; « Quorum » du vote déplié, **changé** : « Tu fixes le quorum de cet article tant qu'il ne garde la trace d'aucun vote. » (avant : « tant que personne n'a voté », faux après un vote retiré, point 8 du lot T2) | `opening.quorum.author`, `quorum.explain` | `tests/quorum.rs` `the_author_of_an_article_sets_its_quorum_before_the_first_vote` ; `tests/ballots.rs` `a_vote_exists_for_every_state_of_the_buffer` |
|
||||
| 15 | « Dans Monnaie libre, jamais moins de 2 : une seule voix ne fait jamais passer un texte. » | en fixant le quorum | le refus du serveur, dit à la personne : « Ce quorum sort des bornes : au moins 2 votants (1 dans le groupe d'essai)… » (déjà) | `quorum.error.quorum` | `tests/quorum.rs` `in_monnaie_libre_a_quorum_holds_two_voices_and_a_ballot_counts_even_pending` ; `ld-engine` `threshold::one_vote_never_passes_with_a_quorum_of_two_or_more` |
|
||||
| 16 | « B = 0,1 : dans la toile de confiance, B^W est si petit qu'il ne compte pas. » | au vote | « B — base : 0,1 » (déjà), **nouveau** `formula.B.wot` quand W est la toile (F1.1.6) | `formula.B`, `formula.B.wot` | grille `b_to_the_power_w_…` |
|
||||
| 17 | « M et G : donnés par le cran d'inertie de l'article » | au vote ; aux réglages | « M — majorité à pleine participation : 50 % — inertie 2 / 5 · basse » (déjà) ; colonnes M et G des réglages, la ligne de l'article marquée (déjà) | `formula.M`, `settings.col.*`, `settings.current` | grille `the_formulas_…` |
|
||||
| 18 | « G n'est pas fixé à la main : il se déduit de la participation habituelle du groupe. » | au vote ; aux réglages | « G — gradient : 0,103, déduit de la participation habituelle du groupe », **changé** ; aux réglages, **nouveau** : « G se calcule pour que la part exigée, au-delà du quorum de l'article, soit exactement celle du cran à la participation habituelle. » | `formula.G`, `settings.gradient` | grille `g_gives_the_share_of_the_level_at_the_usual_turnout_beyond_the_article_s_quorum` |
|
||||
| 20 | « Le cran par défaut est le 3 (moyenne) : M = 55 %, un quorum de 50 dans Monnaie libre, et, au-delà du quorum, le groupe demande 75 % de « pour » à sa participation habituelle. » | aux réglages ; à l'ouverture | le tableau des réglages, ligne 3 (déjà) ; sous le tableau, **changé** : « Part exigée : celle que le cran demande au-delà du quorum de l'article, à la participation habituelle. » (avant : « à 100 votants comme d'habitude », faux quand la médiane sort de ses bornes, T3c) ; le chapitre : « Autres articles 3 / 5 · moyenne » | `settings.share.note`, `opening.inertia.others` | grille `the_share_of_a_level_is_asked_at_the_usual_turnout_beyond_the_article_s_quorum` ; C20 |
|
||||
| 21 | « Tout nouvel article commence à ce cran. » | en proposant un nouvel article | **non dit dans le formulaire** (plus bas) ; dit aussitôt après, dans le vote qui se déplie : « Inertie · 3 / 5 · moyenne » | — | `tests/quorum.rs` `the_author_of_an_article_sets_its_quorum_before_the_first_vote` (cran 3) |
|
||||
| 22 | « Au départ, aucun article n'est en vigueur. » | à l'ouverture | le chapitre, la phrase d'Yvv, tant que c'est vrai : « Aucun article n'est encore en vigueur. » | `opening.none` | C39 (dite à Monnaie libre, plus dite dans le groupe d'essai où trois articles sont en vigueur) |
|
||||
| 23 | « Raison d'être, Unicité du compte et Réciprocité sont des Propositions seed, mises en avant pour lancer le vote, au cran 2 (basse). » | à l'ouverture ; en lisant le texte | le chapitre : le paragraphe d'Yvv, et « Propositions d'amorce 2 / 5 · basse » (le cran d'ouverture : avant tout changement voté, lu dans l'API, `lib/opening.ts`) ; la marque « Proposition d'amorce » sur chacune, son infobulle (déjà, mot changé) | `opening.amorce`, `opening.inertia.amorce`, `doc.seedProposal`, `doc.seedProposal.long` | `tests/seed_proposals.rs` `the_view_keeps_which_versions_the_seed_put_forward_once_they_enter_into_force` ; `web/tests/unit/opening.test.ts` ; C39, C40 |
|
||||
| 24 | « 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. » | à l'ouverture | le chapitre : « Titre du document 4 / 5 · haute », « Ordre de chaque section 2 / 5 · basse », « Autres articles 3 / 5 · moyenne » ; les crans sur la ligne du titre et chaque ligne d'ordre (déjà) | `opening.inertia.title`, `opening.inertia.orders`, `opening.inertia.others` | `web/tests/unit/opening.test.ts` ; C39 (le cran du titre changé dans l'API, le chapitre suit) |
|
||||
|
||||
## N1 « Réglage de l'inertie »
|
||||
|
||||
| # | Phrase source | Moment | Endroit | Clé | Preuve |
|
||||
|---|---|---|---|---|---|
|
||||
| N1.1 | « Chaque article porte son inertie : un cran de 1 à 5 » | partout | les crans dessinés sous chaque article, ligne d'ordre, titre ; « Inertie · 2 / 5 · basse » au vote (déjà) | `inertia.level`, `inertia.badge` | — |
|
||||
| N1.2 | « Plus le cran est haut, plus il faut de voix pour changer le texte quand peu de gens votent. » | au vote | « Inertie » du vote déplié (déjà) : « Plus l'inertie est haute, plus il faut de voix pour changer ce texte. » ; sa seconde phrase **changée** : « Sous le quorum de l'article, … ; au-delà, la part exigée baisse quand la participation monte. » | `inertia.explain` | seconde phrase : grille `under_the_quorum_…`, `the_share_asked_falls_…` ; la première **n'est pas prouvée** (plus bas) |
|
||||
| N1.3 | « Le titre du document et l'ordre des articles de chaque section ont aussi la leur, qui se change de la même façon. » | au vote d'un module | les crans de la ligne du titre et des lignes d'ordre, « Inertie » dans leur vote (déjà) | — | — |
|
||||
| N1.4 | « Tout membre du groupe peut proposer un autre cran. » | au vote | « Proposer un changement d'inertie » (déjà) | `inertia.change` | — |
|
||||
| N1.5 | « Cette proposition se vote au cran actuel de l'article … l'inertie de l'inertie hérite du cran de l'article. » | en changeant l'inertie | sous le choix du cran (déjà) : « Un changement d'inertie se vote lui-même à l'inertie de l'article : 2 / 5 · basse. » | `inertia.change.note` | ADR 0007 ; `ld-engine` `compose::voting_level` |
|
||||
|
||||
## N1.1 « Niveaux d'inertie » (numéros de `t3c-liste-fermee.md`)
|
||||
|
||||
| # | Phrase source | Moment | Endroit | Clé | Preuve |
|
||||
|---|---|---|---|---|---|
|
||||
| 1 | « À chaque cran, le groupe demande une part de « pour » parmi les votants » | aux réglages | l'introduction des réglages (déjà) | `settings.intro` | — |
|
||||
| 2 | « Chaque cran a aussi son quorum : sous le quorum de l'article, … il faut autant de « pour » que si ce quorum avait voté. » | au vote ; aux réglages | « La formule du seuil » (**changé**, F1.1.2) ; aux réglages, **changé** : « Sous le quorum de l'article, les votants qui manquent comptent comme « non », et il faut autant de « pour » que si ce quorum avait voté. » | `formula.reading`, `settings.reading` | grille `under_the_quorum_…` |
|
||||
| 3 | « La part exigée dépend du cran et du nombre de votants … au-delà de ce quorum, plus il y a de votants, plus elle baisse, jusqu'à la majorité M quand tout le monde vote. » | aux réglages ; au vote | aux réglages, **changé** : « Au-delà du quorum de l'article, plus il y a de votants, plus la part exigée baisse, jusqu'à la majorité M quand tout le monde vote. » (avant : « quand il vote comme d'habitude » et « Sous le quorum du cran », T3c) ; la formule (déjà) | `settings.reading`, `formula.reading` | grille `the_share_asked_falls_…` |
|
||||
| 4 | « `Part exigée = M + (1 − M) × (1 − (T'/W)^G)` » | au vote | dans R, en MathML (déjà) | — | grille `the_formulas_…` |
|
||||
| 5 à 10 | les cinq crans : quorum, part exigée au-delà du quorum de l'article à la participation habituelle, M quand tout le monde vote, ce qui est à ce cran au départ | aux réglages ; à l'ouverture | le tableau des réglages : M, G, part exigée, quorum, voix pour, lus dans l'API (déjà) ; sous le tableau `settings.share.note` (**changé**, F1.2.20) et « Voix pour : à 100 votants, la participation habituelle arrondie, ou au quorum s'il est plus haut. » (**changé**, avant « comme d'habitude ») ; ce qui est à chaque cran au départ : le chapitre | `settings.col.*`, `settings.share.note`, `settings.required.usual.*`, `settings.required.version.*`, `opening.inertia.*` | grille `the_share_of_a_level_…` ; `every_number_of_the_quorum_texts_is_the_engine_s` ; C20 |
|
||||
| 11 | « La participation habituelle est la médiane du nombre de votants des propositions du groupe votées depuis un an. » | aux réglages | « Participation habituelle » (déjà) | `settings.usual.median.*` | `tests/inertia.rs` `the_usual_participation_is_the_median_of_five_voted_proposals` |
|
||||
| 12 | « Tant qu'elle repose sur moins de 5 propositions, elle vaut deux fois le quorum de référence du document » | aux réglages | **changé** : « … la participation de référence, tant qu'elle repose sur moins de 5 propositions votées depuis un an (0 pour l'instant). » (avant : « tant que le groupe n'a pas voté sur 5 propositions », faux quand des votes ont plus d'un an, T3c) | `settings.usual.reference.*` | grille `the_participation_habituelle_is_the_median_brought_back_within_its_bounds` ; `tests/inertia.rs` (ci-dessus) |
|
||||
| 13 | « Elle ne dépend pas du quorum d'un article. » | aux réglages | « Participation habituelle », **nouveau** | `settings.usual.quorum` | `tests/quorum.rs` `in_monnaie_libre_a_quorum_holds_two_voices_and_a_ballot_counts_even_pending` |
|
||||
| 14 | « Elle est ramenée entre 1 % et 50 % de l'électorat, et se mesure une fois par jour. » | aux réglages | « Ramenée entre 1 % et 50 % de l'électorat … » quand elle l'est (bornes lues dans l'API), « Mesurée une fois par jour… » (déjà) | `settings.usual.bounded.*`, `settings.usual.when`, `settings.usual.never` | grille `the_participation_habituelle_…` ; `participation::a_measure_is_taken_again_after_a_day` ; C27 |
|
||||
| 15 | « G se calcule pour que la part exigée, au-delà du quorum de l'article, soit exactement celle du cran à la participation habituelle : `G = ln(…)/ln(p̃)` » | aux réglages | **nouveau**, la phrase sans la formule ; la valeur de G de chaque cran dans le tableau (déjà) | `settings.gradient` | grille `g_gives_…` |
|
||||
|
||||
## O1 « Ordonnancement du document »
|
||||
|
||||
| # | Phrase source | Moment | Endroit | Clé | Preuve |
|
||||
|---|---|---|---|---|---|
|
||||
| O1.1 | « L'ordre des articles de chaque section est lui-même soumis au vote. » | en lisant | la ligne « Ordre de la section » au bout de chaque section, « Le vote » (déjà) | `order.line` | — |
|
||||
| O1.2 | « En fin de section, le module « Ordre des articles » se vote comme un article, au cran 2 (basse) au départ » | en réordonnant ; à l'ouverture | « Un ordre se vote à l'inertie 2 / 5 · basse, comme un article… » (déjà) ; le chapitre : « Ordre de chaque section 2 / 5 · basse » | `order.edit.note`, `opening.inertia.orders` | — |
|
||||
| O1.3 | « chaque proposition est la liste des articles de la section, dans un autre ordre » | au vote d'un ordre | la liste dans le vote d'un ordre, les déplacements marqués (déjà) | `module.order.proposal` | — |
|
||||
| O1.4 | « Quand un ordre entre en vigueur, seuls les articles de cette section changent de place ; aucun texte ne change. » | en réordonnant | sous la liste à réordonner, **nouveau** : « S'il entre en vigueur, seuls les articles de cette section changent de place ; aucun texte ne change. » | `order.edit.effect` | `tests/modules.rs` `an_order_is_proposed_with_the_articles_of_its_section_then_voted_into_force` |
|
||||
| O1.5 | « Un nouvel article se place à la fin de sa section ; sa place se vote ensuite par l'ordre de la section. » | en proposant ; en réordonnant | « Proposer » (nouvel article) et sous la liste à réordonner (déjà) | `propose.section.note`, `module.order.rule` | — |
|
||||
| O1.6 | « Un ordre proposé garde ses votes quand la section change … » | en réordonnant ; au vote d'un ordre | `module.order.rule` (déjà) ; « 1 article entré depuis, placé à la fin », « 1 article sorti depuis » au vote (déjà) | `module.order.rule`, `module.order.added.*`, `module.order.dropped.*` | `tests/modules.rs` `articles_that_enter_or_leave_a_section_complete_an_order_under_vote` |
|
||||
| O1.7 | « Une section d'un seul article n'a pas d'ordre à voter. » | en lisant | par l'absence : pas de ligne d'ordre (déjà) | — | `tests/modules.rs` `an_order_of_one_article_has_nothing_to_decide` |
|
||||
| O1.8 | « Le titre du document est lui aussi un module, voté au cran 4 (haute) au départ. » | en lisant ; à l'ouverture | la ligne du titre (« Titre du document », ses crans), « Le titre du document se vote à l'inertie 4 / 5 · haute… » (déjà) ; le chapitre | `module.title.name`, `title.propose.note`, `opening.inertia.title` | — |
|
||||
| O1.9 | « Le titre de chaque article, lui, se vote avec son texte. » | en proposant | le formulaire « Proposer » : le titre et le texte partent ensemble (déjà, par ses champs) | `propose.title`, `propose.body` | — |
|
||||
|
||||
## Ce qui n'est pas porté, et pourquoi
|
||||
|
||||
- **F1.3 « Processus de dépôt officiel » en entier** : il décrit un calcul de hash IPFS, un ancrage
|
||||
« on-chain via `system.remark` » et une mise à jour automatique des applications (Cesium, Gecko) ;
|
||||
rien de cela n'existe aujourd'hui. Ce qui est vrai — la publication des textes en vigueur sur un
|
||||
dépôt git, suspendue jusqu'au premier texte en vigueur (ADR 0011, 0012) — est déjà dit :
|
||||
« Publié sur le dépôt des textes », « Publication en attente » (`doc.published`,
|
||||
`doc.publish.pending`), et dans `/acces` → « Publication des textes ».
|
||||
- **F1 « Référence : g1vote »** : la formule d'aujourd'hui n'est plus celle de g1vote (le quorum
|
||||
`T′ = max(T, Q)` a remplacé le plancher C, ADR 0013) ; la dire « référence » serait inexact.
|
||||
Un « d'après g1vote » serait vrai : à trancher par Yvv.
|
||||
- **F1.2.10 « relu sur la chaîne toutes les 6 heures »** : l'API ne donne pas cette période
|
||||
(`wot::REFRESH`) ; l'écrire en dur serait un chiffre de plus à tenir à jour. La source de W
|
||||
(« membres de la toile de confiance Ğ1 ») est dite.
|
||||
- **F1.2.21 « Tout nouvel article commence à ce cran »**, au moment d'écrire un nouvel article :
|
||||
l'API ne donne pas le cran d'un nouvel article (`InertiaLevel::DEFAULT`) ; l'ordre de U3 ne
|
||||
permet de toucher `crates/` que pour le chapitre. Le cran est dit dès que l'article est proposé
|
||||
(son vote se déplie, « Inertie · 3 / 5 · moyenne »). Un champ de l'API le permettrait : à trancher.
|
||||
- **F1.1.6, la phrase de G** « plus il est grand, plus la part demandée monte quand peu de gens
|
||||
votent » : sans effet quand le quorum de l'article est W (relevé par T3c) ; le sens de G est dit par
|
||||
`formula.G` et `settings.gradient`.
|
||||
- **N1.1.15, la formule de G** (`G = ln(1 − (s − M)/(1 − M)) / ln(p̃)`) : la phrase est portée, pas
|
||||
la formule — un chapitre d'information, pas un manuel. À ajouter en MathML si Yvv la veut.
|
||||
- **N1.5, l'exemple** « Ainsi, un article au cran 4 ne descend qu'avec les voix que demande le
|
||||
cran 4 » : la règle est dite avec le cran de l'article (`inertia.change.note`).
|
||||
|
||||
## Ce qui reste à trancher ou n'est pas prouvé
|
||||
|
||||
- **`inertia.explain`, première phrase** (déjà en ligne, gardée) : « Plus l'inertie est haute, plus
|
||||
il faut de voix pour changer ce texte. » C'est une tendance, pas une règle prouvée pour tout W et
|
||||
tout quorum : quand tout le monde vote, les crans 1 et 2 demandent la même part (M = 50 % aux
|
||||
deux) ; un quorum d'article fixé à W donne M à tous les crans. Aucun test ne la vérifie.
|
||||
- **`formula.B.wot`** n'est dit que si W est celui de la toile (`electorateSource` = `wot`) ; il est
|
||||
prouvé pour W de 100 à 10 000 000 (`wot::PLAUSIBLE`). Un `LD_WOT_FALLBACK` sous 100 le rendrait
|
||||
faux (la production ne le règle pas).
|
||||
- **« Le vote reste ouvert … à tout moment »** (`vote.permanent`) : vrai hors objection ; sur une
|
||||
version retenue, la phrase ne s'affiche pas et `vote.held` dit ce qui reste (contre, ou retrait).
|
||||
|
||||
## Ce que l'API donne en plus (le seul changement sous `crates/`)
|
||||
|
||||
`seedFeatured` sur chaque version (`docs.rs`, `proposal_json`) : la colonne `proposals.seed_featured`,
|
||||
qui reste vraie quand la Proposition d'amorce entre en vigueur, alors que `seedProposal` devient faux.
|
||||
Sans elle, le chapitre ne saurait plus, une fois Raison d'être en vigueur, à quel cran les Propositions
|
||||
d'amorce ont ouvert, et la compterait parmi les « autres articles ». Testé :
|
||||
`tests/seed_proposals.rs` `the_view_keeps_which_versions_the_seed_put_forward_once_they_enter_into_force`
|
||||
(vu rouge avant le champ).
|
||||
|
||||
## Le chapitre « Info ouverture doc de réf. »
|
||||
|
||||
Ce qu'il lit (`web/src/lib/opening.ts`, testé par `web/tests/unit/opening.test.ts`) :
|
||||
|
||||
- **le cran d'ouverture** d'un module : celui d'avant le premier changement **voté**
|
||||
(`inertiaChanges`, cause `vote`) ; un changement par amendement du seed (« réglage de départ du
|
||||
texte ») est un réglage de l'auteur, il compte dans l'ouverture ;
|
||||
- **les Propositions d'amorce** : les articles dont une version porte `seedFeatured` ; **les autres
|
||||
articles** : ceux du seed (une version d'origine `seed`), pas ceux qu'un membre a proposés depuis ;
|
||||
- **le titre** et **l'ordre de chaque section** : les modules ; plusieurs crans dans une même
|
||||
catégorie seraient tous dits ;
|
||||
- **les quorums** : `doc.quorums`, du cran 1 au cran 5, dits une fois s'ils sont tous égaux.
|
||||
|
||||
Le paragraphe d'Yvv ne s'affiche que si le document a des Propositions d'amorce. **Sa première phrase,
|
||||
« Aucun article n'est encore en vigueur. », ne s'affiche plus dès qu'un article est en vigueur** ; la
|
||||
suite commençait par « Les Propositions d'amorce **y** entrent par le vote », où « y » n'a plus rien à
|
||||
reprendre : elle dit alors « Les Propositions d'amorce **entrent en vigueur** par le vote, … » (clé
|
||||
`opening.amorce.after`), le reste mot pour mot. À confirmer par Yvv.
|
||||
Reference in New Issue
Block a user