Files
decision/docs/chantiers/acte-certification/U3-informations.md
T

27 KiB
Raw Blame History

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.