diff --git a/CLAUDE.md b/CLAUDE.md index 81adca2..612772f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -52,15 +52,19 @@ crates/ # (les échéances de 3 jours) · clock.rs (horloge injectable) · adoption.rs # (balayage, verrou) · participation.rs (p̃, une fois par # jour) · publish.rs (file → git) · wot.rs (W sur la chaîne) · seed.rs · - # seed_amend.rs / inertia_amend.rs (amendements gardés) · ballots.rs (vote groupé, + # seed_amend.rs / inertia_amend.rs / seed_proposal_amend.rs (amendements gardés ; + # le dernier fait des Propositions seed, ADR 0011) · ballots.rs (vote groupé, # bulletins de la chaîne Ğ1, confirmation, « ton vote ») · indexer.rs (txComments) # · modules.rs / order.rs / doc_title.rs (les modules, ADR 0009 : l'ordre d'une # section, le titre du document) · module_amend.rs (ajout gardé) · web.rs (sert web/build) tests/ # api.rs (scénarios bout en bout) · ballots.rs (vote par la chaîne, indexeur simulé) · # objections.rs · typos.rs (lot F, horloge avancée, migration 0008) · modules.rs (ordre, - # titre, ajout gardé) -seeds/ # acte-engagement-certification.json (trilingue, 33 articles, I1/E1/E2 en vigueur ; - # inertie 3, E1/E2 à 4 ; modules : le titre à 4, l'ordre de chaque section à 2) + # titre, ajout gardé) · seed_proposals.rs (Propositions seed, publication suspendue) · + # fixtures/seed-production-2026-11-02/ (le seed que la production fait tourner : + # I1/E1/E2 en vigueur, pour rejouer les amendements sur une base comme elle) +seeds/ # acte-engagement-certification.json (trilingue, 33 articles, aucun en vigueur ; + # I1/E1/E2 Propositions seed au cran 2 (seed::SEED_PROPOSAL_LEVEL), inertie 3 ailleurs ; + # modules en vigueur sans vote : le titre à 4, l'ordre de chaque section à 2) # upcoming/.json : les « À venir » des outils d'un groupe (fr, en, es), lus au démarrage web/src/ lib/i18n/ # fr.ts SOURCE (types Key) · en.ts · es.ts — parité testée @@ -114,7 +118,9 @@ docker build -f docker/app.Dockerfile --target production . # rejoue toute la est la personne ou le groupe, jamais le système. Le français du texte voté fait foi. - **Moteur pur** : une règle de vote / édition / composition s'écrit et se teste dans `ld-engine` avant d'être câblée. Le serveur ne décide jamais l'accès seul : `trustin-access`. -- **Invariants** : une seule voix ne fait jamais passer un texte (C = 50 pour Monnaie libre) ; +- **Invariants** : au départ, aucun article n'est en vigueur : I1, E1 et E2 sont des Propositions + seed (ouvertes, mises en avant, au cran 2 ; seuls les modules sont des *seeds a minima*), et la + publication d'un document attend son premier texte en vigueur (ADR 0011) ; une seule voix ne fait jamais passer un texte (C = 50 pour Monnaie libre) ; une coquille ne demande pas de vote, un changement de fond si ; la coquille d'un autre attend son auteur (un administrateur pour le seed) ou 3 jours, et en vigueur seule une coquille validée change le texte ; une objection retient la dernière arrivée jusqu'à sa levée (jamais un texte en diff --git a/docs/adr/0002-vote-permanent.md b/docs/adr/0002-vote-permanent.md index 399b0a1..59c24c9 100644 --- a/docs/adr/0002-vote-permanent.md +++ b/docs/adr/0002-vote-permanent.md @@ -3,6 +3,9 @@ > **Complétée par [0007](0007-inertie-cinq-crans.md)** (2026-10-30) : l'inertie a cinq crans, > calés sur la participation habituelle du groupe, et un changement d'inertie se vote au cran > de l'article — il n'est plus voté au cran au-dessus. +> **Complétée par [0011](0011-propositions-seed.md)** (2026-11-02) : aucun article n'est en +> vigueur au départ ; les textes de départ des articles sont des Propositions seed, seuls les +> modules restent des *seeds a minima*. **Contexte.** Chaque article est sous vote permanent ; « dès qu'une proposition atteint le score, elle remonte en vigueur ». La formule inertielle Ğ1 donne un seuil faible quand peu de gens diff --git a/docs/adr/0011-propositions-seed.md b/docs/adr/0011-propositions-seed.md new file mode 100644 index 0000000..10bdc82 --- /dev/null +++ b/docs/adr/0011-propositions-seed.md @@ -0,0 +1,90 @@ +# 0011 — Les Propositions seed : rien en vigueur au départ, trois textes mis en avant + +> Remplace, dans [0002](0002-vote-permanent.md), « les textes de départ sont des *seeds a +> minima* » pour les articles : seuls les modules (le titre, l'ordre de chaque section, ADR 0009) +> restent en vigueur sans vote. Décision d'Yvv du 2026-11-02. + +**Contexte.** Depuis le 2026-10-21, la Raison d'être (I1) et les deux engagements fondamentaux, +Unicité du compte (E1) et Réciprocité (E2), étaient en vigueur au départ, sans vote (*seeds a +minima*, marge −C). Yvv, 2026-11-02 : « pour le démarrage, conserve un statut particulier pour +les 3 premiers modules. Mais ils ne sont pas en vigueur. Appelle les "Proposition seed" (intégré +par un ou deux clients pour amorcer le mouvement de vote). » Puis : « on pouvait l'amorcer avec +une inertie basse, pour que le nombre de votes initiaux soit assez petits pour commencer +l'expérience en mode prod. Et je mettrai, une fois les textes passés, une inertie forte pour +éviter que l'inertie passe avant les textes. » Au formulaire du même jour : le cran 2 +(« basse ») ; la publication « Suspendre jusqu'au 1er texte ». + +## Décision + +- **Une Proposition seed** est une proposition ouverte du seed, mise en avant pour lancer le + vote : I1, E1 et E2 de l'Acte d'engagement Certification, dans chaque groupe. Elle **n'est pas + en vigueur** : elle y entre comme toute proposition, par son seuil, la place étant vide. Sa + marque est écrite à part (`proposals.seed_featured`) ; l'API dit `seedProposal` tant que la + version est ouverte et n'est jamais entrée en vigueur (`docs::ProposalRow::seed_proposal`). + Entrée en vigueur, c'est un texte adopté comme un autre. L'interface la marque + « Proposition seed » (fr), « Seed proposal » (en), « Propuesta seed » (es). +- **Au départ, aucun article n'est en vigueur.** Le titre du document et l'ordre de chaque + section restent des *seeds a minima* (en vigueur sans vote, ADR 0009). Le lecteur le dit + (« Aucun article n'est en vigueur… ») ; les trois textes se lisent dans « Propositions en + cours » et dans l'aperçu « si tout passe ». +- **Le cran 2 pour les trois**, une seule constante : `seed::SEED_PROPOSAL_LEVEL`. Le seed ne + leur donne pas de cran (le chargement du seed le refuse), l'amendement écrit celui-là. + **L'intention d'Yvv** : remonter l'inertie une fois les textes passés. Une proposition de + changement d'inertie se vote au cran de l'article (ADR 0007) : faite avant l'entrée des textes, + elle pourrait passer avant eux et leur demander davantage ; faite après, elle protège des + textes déjà adoptés. Le serveur n'automatise rien : c'est un vote, après les textes. +- **La publication attend le premier texte.** Tant qu'aucun article d'un document n'est en + vigueur, sa file d'envoi attend (`publish::waits_for_a_text`) : ce n'est pas un échec (aucune + tentative comptée, aucune erreur), l'API dit `publication.state = "suspended"`. Le premier + texte qui entre ajoute une ligne à la file, et tout part avec lui. `LD_PUBLISH_WITHOUT_ARTICLES=1` + publie quand même (un document sans article). Le groupe d'essai ne publie jamais. + +## Une base existante + +Un document seedé n'est jamais réinstancié. Dans une base existante (la production : I1, E1 et +E2 en vigueur, *seeds a minima*, dans Monnaie libre et dans le groupe d'essai), trois +**amendements de Proposition seed** (`crates/ld-server/src/seed_proposal_amend.rs`, +`2026-11-02-i1-proposition-seed`, `-e1-`, `-e2-`) décident une fois par document et par article, +consignés dans `seed_proposal_amendments` et dans les journaux. + +**Le statut**, seulement si personne n'a touché le texte en vigueur : origine `seed`, jamais +entré par un vote ni confirmé ; aucun vote du serveur, aucune ligne de bulletin de la chaîne, +quel que soit son sort ; aucune coquille (appliquée, en attente ou refusée), aucune traduction +écrite par un membre, aucune objection qui le nomme ; son historique est celui du seed (le texte +initial, et pour I1 l'amendement de la Raison d'être du 30/10, révision 2) ; son texte est celui +de la Proposition seed d'aujourd'hui (empreinte). Appliqué : la même version, avec son texte, ses +traductions et son historique, devient ouverte et marquée ; l'article n'a plus de texte en +vigueur ; l'historique dit le changement (`seed_proposal`, sans diff). Refusé : le texte reste en +vigueur, *seed a minima*. + +**Le cran**, avec le statut seulement, et seulement si personne n'y a touché : aucune proposition +de changement d'inertie d'un membre ouverte, appliquée ou votée, aucun vote qui l'a changé, et un +cran que le seed lui a donné avant (I1 : 3 ; E1 et E2 : 3, puis 4 depuis le 30/10). Appliqué : +l'article le dit (`inertia_changes`, « réglage de départ du texte »). Refusé : il garde son cran, +le statut change quand même. + +**En production**, l'orch notait le 30/10 deux propositions d'inertie ouvertes à zéro vote dans +Monnaie libre, I1 → 5 et E1 → 5. Si elles sont encore ouvertes au démarrage, I1 et E1 y +deviennent des Propositions seed **à leur cran d'avant** (3 et 4 ; refus `inertia_proposal`), E2 +au cran 2. Pour que les trois démarrent au cran 2, leurs auteurs les retirent avant la mise en +ligne (une proposition retirée sans vote ne compte plus). À trancher par Yvv avant M6. + +Là où le document publie (Monnaie libre), chaque amendement appliqué ajoute une ligne à la file +(« Proposition seed : I1 sort de la vigueur »…), qui attend le premier texte. Les deux +amendements d'inertie du 30/10 (E1 et E2 de 3 à 4, ADR 0007) sont dépassés : décidés en +production, ils ne décident plus rien ailleurs (`superseded_by`). + +## Les données + +Migration `0009` (additive) : `proposals.seed_featured` ; la table `seed_proposal_amendments` +(statut et cran : appliqué, refusé et pourquoi, ou déjà là). Le seed : `"seedProposal": true` et +`"status": "open"` sur la version de I1, E1 et E2, sans `inertia`. + +## Coût + +- Personne ne lit de texte en vigueur avant le premier vote qui passe ; le dépôt des textes + garde la dernière publication jusque-là. +- Les comptes bougent : 0 article en vigueur, 35 propositions en cours (les 32 d'avant et les + trois Propositions seed) ; « Décisions » compte toujours 41 modules à voter. +- Les textes F1.2 et N1.1 du seed disent encore Unicité du compte et Réciprocité au cran 4 au + départ : orch les réécrira au prochain tour de textes, avec la relecture d'Yvv. diff --git a/docs/adr/README.md b/docs/adr/README.md index 83e456e..651e77c 100644 --- a/docs/adr/README.md +++ b/docs/adr/README.md @@ -15,3 +15,4 @@ pas une décision : on en écrit une nouvelle qui la remplace, et on le note dan | [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 | | [0010](0010-objections-et-coquilles-validees.md) | Objections « redit » / « contredit », coquilles validées, messagerie (remplace 0004, complète 0003) | 2026-10-31 | +| [0011](0011-propositions-seed.md) | Les Propositions seed : rien en vigueur au départ, trois textes mis en avant au cran 2, la publication attend le premier texte (complète 0002) | 2026-11-02 | diff --git a/docs/chantiers/acte-certification/CHANTIER.md b/docs/chantiers/acte-certification/CHANTIER.md index baffd48..3ddb115 100644 --- a/docs/chantiers/acte-certification/CHANTIER.md +++ b/docs/chantiers/acte-certification/CHANTIER.md @@ -29,11 +29,15 @@ les applications clientes (Cesium, Ğecko…) peuvent suivre. Vallée Drôme Crestois — pas l'Atelier du canal. Un groupe et son contenu ne s'ouvrent qu'à ses membres ; Monnaie libre s'ouvre à tout membre de la toile de confiance, les autres groupes sur accord dans trustinWallet. -4. **Le texte en vigueur**, seul, en grand, typographie de lecture (Literata) : au départ la - **Raison d'être** (texte d'Yvv du 2026-10-30, qui remplace le Préambule : « Derrière une clé - il n'y a qu'un seul être humain vivant ; derrière un être humain, il n'y a qu'une seule clé - certifiante. ») et les deux engagements fondamentaux (Unicité du compte, Réciprocité), marqués - *seed a minima* avec leur nombre réel de votes (*seed a minima · 0 vote*, puis *· 1 vote*…). +4. **Le texte en vigueur**, seul, en grand, typographie de lecture (Literata). **Au départ, aucun + article n'est en vigueur** (Yvv, 2026-11-02 ; ADR 0011), et le lecteur le dit : la **Raison + d'être** (texte d'Yvv du 2026-10-30, qui remplace le Préambule : « Derrière une clé il n'y a + qu'un seul être humain vivant ; derrière un être humain, il n'y a qu'une seule clé + certifiante. ») et les deux engagements fondamentaux (Unicité du compte, Réciprocité) sont des + **Propositions seed** : ouvertes, mises en avant pour lancer le vote, marquées « Proposition + seed », au cran 2 ; elles entrent en vigueur comme toute proposition. Le titre du document et + l'ordre de chaque section, eux, sont en vigueur sans vote, marqués *seed a minima* avec leur + nombre réel de votes (*seed a minima · 0 vote*, puis *· 1 vote*…). **Le titre du document est un module** (inertie 4) : sous le titre, son état (en vigueur sans vote, ou adopté le…), « traduction à revoir » quand le titre lu est la traduction d'un titre remplacé, et les mêmes gestes : **Le vote** · **Propositions** · **Proposer un autre titre**. @@ -51,8 +55,8 @@ les applications clientes (Cesium, Ğecko…) peuvent suivre. **Détails** d'une version (coquilles, traductions, objections, historique) et **« Réglages de la formule »** (W, C, B, la participation habituelle du groupe et les cinq crans), atteints depuis l'en-tête du document et depuis chaque vote. -5. **En dessous**, les propositions en cours — les 30 autres articles du texte source, à zéro - vote, inertie 3 / 5 — rangées par section (introduction, fondamental, technique, +5. **En dessous**, les propositions en cours — les 33 articles du texte source, à zéro vote : les + trois Propositions seed au cran 2, les 30 autres à l'inertie 3 / 5 — rangées par section (introduction, fondamental, technique, conclusion, annexes, formule, inertie, ordonnancement), **une ligne par article** : un article qui a plusieurs versions (variantes du seed, propositions rivales) montre leur nombre et la meilleure en tête (niveau d'eau, pour / contre) ; la ligne se déplie sur ses @@ -97,9 +101,9 @@ G_k = ln(1 − (s_k − M_k)/(1 − M_k)) / ln(p̃). | Cran | Nom | M_k | s_k | Au départ | |---|---|---|---|---| | 1 | très basse | 50 % | 60 % | | -| 2 | basse | 50 % | 67 % | l'ordre des articles de chaque section | +| 2 | basse | 50 % | 67 % | les trois Propositions seed (Raison d'être, Unicité du compte, Réciprocité), l'ordre des articles de chaque section | | 3 | moyenne | 55 % | 75 % | partout ailleurs | -| 4 | haute | 60 % | 83 % | Unicité du compte, Réciprocité, le titre du document | +| 4 | haute | 60 % | 83 % | le titre du document | | 5 | très haute | 66 % | 90 % | | **La participation habituelle p̃** = la médiane des votants des propositions du groupe votées @@ -122,6 +126,9 @@ données : 7224 / 120 votants, M 50 %, G 0,2, C 0 → 94 voix) et `crates/ld-eng (pour − requis) plus large que la version en place. La version déplacée redevient une proposition, avec ses votes. Un *seed a minima* a pour marge −C : la première proposition qui atteint son seuil le remplace. +- **Les Propositions seed** (ADR 0011) ne sont pas en vigueur : la place est vide, la première + version de l'article qui atteint son seuil y entre. Yvv remontera leur inertie une fois les + textes passés, par un vote : une inertie relevée avant eux leur demanderait davantage. - Retirer un article est une proposition comme une autre (« retirer cet article »). - Le balayage tourne à chaque vote et toutes les 5 minutes (la taille de la toile bouge). @@ -131,8 +138,10 @@ Chaque article porte son inertie, un cran de 1 à 5. La changer est une proposit elle-même au cran actuel de l'article** : l'inertie de l'inertie hérite de celle de l'article (Yvv, 2026-10-30 ; elle était votée au cran au-dessus, « inertie + », depuis le 2026-10-21). L'article dit le passé de son inertie : passée de tel cran à tel autre, par un vote ou par le -réglage de départ du texte (E1 et E2 relevés de 3 à 4 dans une base existante, seulement si -aucun vote n'a changé leur inertie : `crates/ld-server/src/inertia_amend.rs`). +réglage de départ du texte (E1 et E2 relevés de 3 à 4 dans une base existante le 30/10, +seulement si aucun vote n'a changé leur inertie : `crates/ld-server/src/inertia_amend.rs` ; puis +I1, E1 et E2 descendus au cran 2 des Propositions seed le 02/11, seulement si personne n'a touché +à leur cran : `crates/ld-server/src/seed_proposal_amend.rs`). ### Les modules : l'ordre des articles, le titre du document (ADR 0009) @@ -281,7 +290,10 @@ traductions marquées éditoriales) et `document.json`, commit et pousse sur Échec → nouvel essai avec délai croissant. La clé de publication est générée par le serveur ; sa partie publique s'affiche dans trustinWallet, à ajouter comme clé de déploiement (écriture) du dépôt. Le groupe d'essai ne publie jamais. `document.json` dit aussi les modules : le titre -(son état, ses votes, ses traductions et leur fraîcheur) et l'ordre de chaque section. +(son état, ses votes, ses traductions et leur fraîcheur) et l'ordre de chaque section. **Tant +qu'aucun article d'un document n'est en vigueur, sa publication attend** (Yvv, 2026-11-02 : +« Suspendre jusqu'au 1er texte ») : ni échec ni tentative comptée, l'état dit « suspendue », et +le premier texte qui entre envoie tout (`LD_PUBLISH_WITHOUT_ARTICLES=1` publie quand même). ### Un texte de départ remplacé @@ -294,6 +306,15 @@ journaux quand l'article garde son texte) ; appliqué, l'amendement se lit dans l'article (« texte de départ remplacé », avec le diff) et le texte est republié (`crates/ld-server/src/seed_amend.rs`). +De même, un texte de départ en vigueur que le seed met désormais en avant comme **Proposition +seed** (I1, E1, E2 ; ADR 0011) le devient dans une base existante par un amendement gardé, une +seule fois par document et par article, et seulement si personne ne l'a touché (origine du seed, +jamais entré par un vote ni confirmé, aucun vote ni bulletin de la chaîne, aucune coquille, +traduction de membre ou objection, l'historique du seed, l'empreinte attendue) : la même version +redevient ouverte et marquée, l'historique le dit ; son cran descend à 2 avec lui, seulement si +personne n'y a touché non plus (aucun changement d'inertie proposé, voté ou appliqué). Décisions +consignées dans `seed_proposal_amendments` (`crates/ld-server/src/seed_proposal_amend.rs`). + ### Accès — trustinWallet Tout le monde connecté peut tout faire dans les groupes qu'il ouvre (lire, proposer, voter, @@ -331,6 +352,7 @@ sans toucher au texte de la communauté. Chiara et Yvv en sont membres. | Connexion | client OAuth2 de connect.monnaie-libre.fr (demande à poka) ; liens d'invitation en attendant | | Dépôt des textes | `git.open.us.org/yvv/decision-depot-textes-reference` pour l'instant (2026-10-21) ; puis un dépôt pour l'ouverture, par transfert, et le dépôt officiel pour les textes en vigueur | | Garde-fou du vote permanent | nombre minimal de votants « pour » (C) | +| Textes de départ (2026-11-02) | aucun article en vigueur : trois Propositions seed (I1, E1, E2) au cran 2, la publication suspendue jusqu'au premier texte (ADR 0011) | | Langues | fr, en, es ; le français est voté, les traductions sont éditoriales | | Chiara | testeuse et codeuse | | Assistant | à règles d'abord ; IA locale plus tard, sans dépendance d'abonnement | diff --git a/docs/chantiers/acte-certification/CONTROLES.md b/docs/chantiers/acte-certification/CONTROLES.md index 4294bc8..ab67303 100644 --- a/docs/chantiers/acte-certification/CONTROLES.md +++ b/docs/chantiers/acte-certification/CONTROLES.md @@ -5,7 +5,10 @@ Chaque contrôle existe en deux versions : **automatique** (Playwright, `web/e2e sur un contrôle vaut échec du contrôle tant qu'elle n'est pas traitée. Où tester : les contrôles qui écrivent (C5, C6, C7, C21, C22, C25, C26, C28–C31) se font dans le **groupe -d'essai** (caché, plancher C = 1, jamais publié) — jamais sur le texte de la communauté. Les +d'essai** (caché, plancher C = 1, jamais publié) — jamais sur le texte de la communauté. Au départ, rien +n'y est en vigueur (ADR 0011) : les contrôles qui lisent un texte en vigueur (C4 à C6, C20, C21, C24, +C28 à C31) y font d'abord entrer Raison d'être, Unicité du compte et Réciprocité par le vote (deux voix +au plus, puis leur retrait : le texte reste en vigueur, à zéro vote ; `seedsInForce`, `web/e2e/helpers.ts`). Les votes par la chaîne Ğ1 (C11, C17, C23, C25, C32, C33) ne se jouent, pour l'automate, que sur une **chaîne simulée** (`web/e2e/chain-mock.mjs` : un faux nœud, un faux indexeur, un faux portefeuille) ; pour une personne, ils coûtent 0,1 Ğ1 réels : c'est un acte « paye » d'Yvv. @@ -14,13 +17,13 @@ pour une personne, ils coûtent 0,1 Ğ1 réels : c'est un acte « paye » d'Yvv. |---|---|---|---| | C1 | L'accueil, sans session | ouvrir `/` sans être connectée | « Rendre possible la décision collective », puis le leitmotiv en trois lignes : « contexte et cadrage », « processus et modalités », « boîte à outils » ; « Se connecter avec sa clé Ğ1 » et sa note ; pas de piliers ni de groupes ; le menu à gauche avec les quatre outils, trois éteints | | C2 | L'accueil, avec session | se connecter : on arrive sur `/` | le titre, le leitmotiv, puis directement le choix du groupe : Monnaie libre en grand, Axiom, Librodrome, Groupe local Vallée Drôme Crestois ; **pas** l'Atelier du canal ; `/groupes` et « Mes groupes » (menu) ramènent ici | -| C3 | Le texte en vigueur | Monnaie libre → Docs de référence → Acte d'engagement Certification | trois articles seulement (Raison d'être, Unicité du compte, Réciprocité), chacun « seed a minima · 0 vote » — le nombre réel de ses votes, qui change quand on vote —, sous le titre du document et à la fin de chaque section ses modules (C25, C26) ; en dessous, « Propositions en cours » (30 lignes, une par article) | -| C4 | Gestes contextuels | survoler la Raison d'être → « Le vote » | le vote se **déplie sous l'article**, sans fenêtre : seuil 50 voix pour, il en manque 50 ; « La formule du seuil » se déplie : « M — majorité à pleine participation : 55 % — inertie 3 / 5 · moyenne », et le lien « Réglages de la formule » ; l'URL garde le vote déplié (`?vote=`) ; « Le vote » de nouveau le replie | -| C5 | Entrée en vigueur | groupe d'essai : à deux, déplier le vote de « Les deux garanties réciproques », « Pour » | au second vote, « … est entré en vigueur » ; le texte en vigueur compte quatre articles, le vote reste déplié sous le nouveau texte (2 pour · 0 contre) | +| C3 | Le texte au départ : les Propositions seed | Monnaie libre → Docs de référence → Acte d'engagement Certification | aucun article en vigueur (ADR 0011) : « Aucun article n'est en vigueur. Les propositions ci-dessous remontent dès qu'elles atteignent leur seuil. », sous le titre du document, puis à la fin de chaque section ses modules (C25, C26) ; en dessous, « Propositions en cours » (33 lignes, une par article), dont Raison d'être, Unicité du compte et Réciprocité marquées « Proposition seed » (au survol : « Texte de départ mis en avant pour lancer le vote… »), « 0 pour · 0 contre », « inertie 2 / 5 · basse » | +| C4 | Gestes contextuels | groupe d'essai, où la Raison d'être est entrée en vigueur par le vote : la survoler → « Le vote » | le vote se **déplie sous l'article**, sans fenêtre : le seuil et les voix qui manquent ; « La formule du seuil » se déplie : « M — majorité à pleine participation : 50 % — inertie 2 / 5 · basse », et le lien « Réglages de la formule » ; l'URL garde le vote déplié (`?vote=`) ; « Le vote » de nouveau le replie | +| C5 | Entrée en vigueur | groupe d'essai (Raison d'être, Unicité du compte et Réciprocité entrées en vigueur par le vote) : déplier le vote de « Les deux garanties réciproques », « Pour » ; une deuxième personne si cette voix ne suffit pas | à la voix qui suffit, « … est entré en vigueur » ; le texte en vigueur compte quatre articles, le vote reste déplié sous le nouveau texte (autant de « pour » que de voix, 0 contre) | | C6 | Coquille sans vote | groupe d'essai, **en administratrice** (un texte du seed n'a pas d'auteur) : Unicité du compte → « Le vote » → « Coquilles, traductions, objections, historique » (onglet « Détails ») → « Corriger une coquille », remplacer les apostrophes droites par des apostrophes typographiques (« Je m’engage sur l’honneur ») | « Coquille corrigée, sans toucher aux votes. » ; un changement de sens est refusé : « Ce changement touche au sens : propose-le comme modification. » (sans être administratrice, la correction attend : C31) | | C7 | Une décision par proposition | groupe d'essai : « Proposer un nouvel article », deux paragraphes « Je m'engage à… » | l'assistant : « Ce texte semble porter 2 décisions » ; « Découper en 2 brouillons » ; « Tes brouillons » apparaît | | C8 | Trois langues | choisir EN puis ES pour le texte | « Certification Commitment Act », « Acta de compromiso de Certificación » ; l'interface suit | -| C9 | Les aperçus | « Si tout passe », puis « Si les bien cotées passent » | 33 articles avec la mention d'aperçu, puis 3 | +| C9 | Les aperçus | « Si tout passe », puis « Si les bien cotées passent » | 33 articles avec la mention d'aperçu, puis aucun (rien en vigueur dans Monnaie libre, rien de bien coté sans « pour ») | | C10 | trustinWallet | ouvrir `/acces` sans être administratrice | « La gestion des accès est réservée aux administrateurs de trustinWallet. » (côté admin : créer un lien d'invitation) | | C11 | Une personne, une voix | avec un lien d'invitation et un portefeuille dont le compte n'est pas membre de la toile (Bob, chaîne simulée), voter « Pour » sur un article de Monnaie libre | le vote dit que la voix est celle de l'identité Ğ1 du portefeuille qui signe ; après signature : « Ton vote n'a pas été compté : le portefeuille qui a signé n'est pas celui d'un membre de la toile de confiance Ğ1. », et sous l'article « Ton dernier vote n'a pas été compté… », 0 pour ; dans le groupe d'essai, la même personne vote directement, sans portefeuille | | C12 | Lien d'équipe | administrateur : `/acces` → « Liens d'équipe », cocher le groupe d'essai, créer ; l'ouvrir dans deux navigateurs, sous deux noms | chacun arrive sur ses groupes sous son nom ; dans `/acces`, « 2 / 30 personnes » et deux identités « venue par » le lien ; un nom déjà pris est refusé, même autrement écrit (« luna » pour « Luna ») ; sur un navigateur où quelqu'un est connecté, « Ce n'est pas moi » le déconnecte ; « Révoquer » ferme le lien | @@ -30,13 +33,13 @@ pour une personne, ils coûtent 0,1 Ğ1 réels : c'est un acte « paye » d'Yvv. | C15 | Le menu | survoler les outils ; ouvrir Docs, puis Mandats ; revenir à l'accueil | « 1 » à côté de « Docs de référence » ; aucun outil surligné sur la page du groupe, seul celui où l'on est ensuite ; au survol, seul Docs réagit ; Mandats s'ouvre quand même (ses « À venir ») ; hors d'un groupe, les outils mènent au dernier groupe ouvert (ou à l'accueil s'il n'y en a pas) | | C16 | En cours, à venir | Monnaie libre → Docs, Mandats, Protocoles ; les anciennes adresses `/decisions`, `/mandats`, `/protocoles` | Docs : « En cours » (Acte d'engagement Certification) et « À venir » (Acte d'engagement forgerons) ; Mandats : Administration forum Duniter, Administration forum Monnaie libre ; Protocoles : Runtime upgrade — décision on-chain ; les « À venir » sont éteints, sans lien ; ils suivent la langue ; les anciennes adresses mènent aux outils du groupe courant | | C17 | Décisions | Monnaie libre → Décisions ; voter (par la chaîne : bulletin, transaction, confirmation) sur une version d'un article, recharger | une ligne par doc : « Acte d'engagement Certification · 41 modules à voter · dont 41 sans ton vote » (33 articles, le titre, l'ordre de 7 sections), puis « dont 40 » ; la ligne ouvre le lecteur | -| C18 | La Raison d'être | Monnaie libre → Acte d'engagement Certification, puis EN, puis ES | en tête du texte en vigueur, « Raison d'être » : la première phrase en italique, puis deux paragraphes ; « Purpose », « Razón de ser » | +| C18 | La Raison d'être | Monnaie libre → Acte d'engagement Certification → « Si tout passe », puis EN, puis ES | en tête du texte, « Raison d'être » : la première phrase en italique, puis deux paragraphes ; « Purpose », « Razón de ser » | | C19 | Les versions d'un article | Monnaie libre → « Propositions en cours » → « Connaissance suffisante » (au clavier : Tab jusqu'à la ligne, Entrée) | une seule ligne, « 2 versions » ; dépliée : « variante 1.0.0 » et « variante 0.4.0-draft », chacune avec son niveau et ce qui la distingue ; un clic sur une version déplie son vote sous elle ; un nouveau clic sur la ligne la replie | -| C20 | Réglages de la formule et cinq crans | Monnaie libre → Acte d'engagement : « Réglages de la formule » (en-tête) ; puis Unicité du compte → « Le vote » → « Réglages de la formule » ; dans le groupe d'essai, Réciprocité → « Le vote » → « Proposer un changement d'inertie » → 5 → « Soumettre au vote » | W 5 745 (toile de confiance Ğ1), C 50, B 0,1 ; « 100 votants sur 5 745 (1,74 %), deux fois C : la participation de référence… (0 pour l'instant) » ; le tableau des cinq crans : très basse, basse, moyenne, haute, très haute ; M 50, 50, 55, 60, 66 % ; part exigée 60, 67, 75, 83, 90 % ; voix pour à 100 votants 80, 84, 88, 92, 95, « Voix pour : à 100 votants, comme d'habitude. » ; depuis le vote déplié : « Inertie · 4 / 5 · haute », la ligne du cran 4 marquée « cet article », 50 voix, « Voix pour : à 0 votant, la participation de cette version. » ; le sélecteur montre les cinq crans, 4 « actuelle », atteignable au clavier mais jamais choisi ; un seul arrêt de tabulation ; les flèches passent d'un cran à l'autre et le choisissent, en boucle ; le vote de la proposition se déplie : « inertie vers 5 / 5 · très haute », votée à « inertie 4 / 5 · haute » | +| C20 | Réglages de la formule et cinq crans | Monnaie libre → Acte d'engagement : « Réglages de la formule » (en-tête) ; puis, dans « Propositions en cours », Unicité du compte → son vote → « Réglages de la formule » ; dans le groupe d'essai, Réciprocité (entrée en vigueur par le vote) → « Le vote » → « Proposer un changement d'inertie » → 5 → « Soumettre au vote » | W 5 745 (toile de confiance Ğ1), C 50, B 0,1 ; « 100 votants sur 5 745 (1,74 %), deux fois C : la participation de référence… (0 pour l'instant) » ; le tableau des cinq crans : très basse, basse, moyenne, haute, très haute ; M 50, 50, 55, 60, 66 % ; part exigée 60, 67, 75, 83, 90 % ; voix pour à 100 votants 80, 84, 88, 92, 95, « Voix pour : à 100 votants, comme d'habitude. » ; depuis le vote déplié : « Inertie · 2 / 5 · basse », la ligne du cran 2 marquée « cet article », 50 voix, « Voix pour : à 0 votant, la participation de cette version. » ; le sélecteur montre les cinq crans, 2 « actuelle », atteignable au clavier mais jamais choisi ; un seul arrêt de tabulation ; les flèches passent d'un cran à l'autre et le choisissent, en boucle ; le vote de la proposition se déplie : « inertie vers 5 / 5 · très haute », votée à « inertie 2 / 5 · basse » | | C21 | Le vote déplié | groupe d'essai : Unicité du compte → « Le vote », puis « Pour » ; une autre personne ouvre le même vote | sous l'article : le niveau d'eau, « 0 pour · 0 contre », « Seuil : … voix pour », « Il manque … », « Tu n'as pas voté sur cette version. » ; après « Pour » : « Ton vote : pour · enregistré », « 1 pour · 0 contre », le bouton enfoncé, « Ton vote ne se montre à personne : seuls les totaux sont visibles. » ; l'autre personne voit 1 pour, jamais qui ; « Le vote » replie ; « Retirer mon vote » remet 0 | | C22 | Le vote groupé | groupe d'essai : « Propositions en cours » → « Engagements techniques » → « Voter cette section » ; « Tout pour » ; dans « Connaissance suffisante », « Pour » sur la variante 1.0.0 ; recharger ; « Voter (n) » | le panier s'ouvre sur la section ; « Tout pour » remplit les articles à une version, pas « Connaissance suffisante » ni « Rencontre physique… » (« Plusieurs versions : choisis la tienne. », et le compte des articles laissés) ; le panier reste après rechargement (« Voter en lot · n ») ; un seul envoi : « n votes enregistrés. », le panier vide, la variante choisie à 1 pour | -| C23 | Le vote par la chaîne Ğ1 | Monnaie libre, un portefeuille dans le navigateur : « Voter en lot », « Pour » sur Unicité du compte et Réciprocité, « Signer et envoyer (2) » ; puis sous Réciprocité, « Contre » (l'indexeur en retard) puis « Retirer mon vote » ; puis sans portefeuille : « Pour » → « Passer par Ğecko » | une seule signature pour les deux : 0,1 Ğ1 vers le compte des votes et une remarque `ld1:` + 64 chiffres, rien du vote en clair ; « Ton vote compte : il est inscrit sur la chaîne Ğ1. », « Compté pour l'identité Ğ1 « Alice ». » ; sous l'article « Ton vote : pour · inscrit sur la chaîne Ğ1 », 1 pour ; « En attente de la chaîne Ğ1 : contre. » ; le retrait, plus récent sur la chaîne, fait foi même quand le « contre » est confirmé après lui (0 pour · 0 contre) ; Ğecko : un QR code et le lien `g1://?amount=0.1&comment=ld1:…`, puis la confirmation dès que la chaîne la montre | -| C24 | Sans compte des votes | Monnaie libre sur un serveur sans `LD_VOTE_ACCOUNT`, puis le groupe d'essai | pas de « Voter en lot » ni « Voter cette section » ; sous l'article : « Le vote par la chaîne Ğ1 n'est pas encore ouvert : le compte qui reçoit les votes reste à créer. Tu peux lire, proposer et faire une objection. », pas de bouton, les totaux et le seuil restent ; le panier ouvert par son adresse (`?onglet=panier`) dit la même chose, son bouton éteint, et **jamais** « Tes votes comptent dès l'envoi » ; dans le groupe d'essai, le panier et les boutons sont là | +| C23 | Le vote par la chaîne Ğ1 | Monnaie libre, un portefeuille dans le navigateur : « Voter en lot », « Pour » sur Unicité du compte et Réciprocité (Propositions seed), « Signer et envoyer (2) » ; puis, dans « Propositions en cours », sous Réciprocité, « Contre » (l'indexeur en retard) puis « Retirer mon vote » ; puis sans portefeuille : « Pour » → « Passer par Ğecko » | une seule signature pour les deux : 0,1 Ğ1 vers le compte des votes et une remarque `ld1:` + 64 chiffres, rien du vote en clair ; « Ton vote compte : il est inscrit sur la chaîne Ğ1. », « Compté pour l'identité Ğ1 « Alice ». » ; sous la proposition « Ton vote : pour · inscrit sur la chaîne Ğ1 », 1 pour ; « En attente de la chaîne Ğ1 : contre. » ; le retrait, plus récent sur la chaîne, fait foi même quand le « contre » est confirmé après lui (0 pour · 0 contre) ; Ğecko : un QR code et le lien `g1://?amount=0.1&comment=ld1:…`, puis la confirmation dès que la chaîne la montre | +| C24 | Sans compte des votes | Monnaie libre sur un serveur sans `LD_VOTE_ACCOUNT`, puis le groupe d'essai | pas de « Voter en lot » ni « Voter cette section » ; sous la première proposition : « Le vote par la chaîne Ğ1 n'est pas encore ouvert : le compte qui reçoit les votes reste à créer. Tu peux lire, proposer et faire une objection. », pas de bouton, les totaux et le seuil restent ; le panier ouvert par son adresse (`?onglet=panier`) dit la même chose, son bouton éteint, et **jamais** « Tes votes comptent dès l'envoi » ; dans le groupe d'essai, le panier et les boutons sont là | | C25 | L'ordre des articles | groupe d'essai : en fin de « Conclusion », « Proposer un autre ordre » ; cliquer « Monnaie G1 » puis la place 1 ; au clavier, flèche bas puis haut ; « Proposer cet ordre » ; « Pour » ; une deuxième personne vote « Pour » si cette voix ne suffit pas (dès 16 membres, une voix suffit dans le groupe d'essai : ADR 0007) ; puis, dans Monnaie libre, sur un téléphone, avec un portefeuille : « Voter en lot », « Pour » sur « Ordre des articles · Engagements fondamentaux », « Signer et envoyer (1) » | chaque section finit par « Ordre des articles ·
» (7, aucun pour l'Ordonnancement, un seul article), ses articles numérotés, « 2 articles · inertie 2 / 5 · basse », « seed a minima · 0 vote » ; le vote d'un ordre en vigueur déplié montre la liste entière ; la liste où l'on clique : l'article choisi marqué, puis à sa place, annoncé (« « Monnaie G1 » en place 1 sur 2. »), « Proposer cet ordre » éteint tant que c'est l'ordre en vigueur ; le vote de l'ordre proposé se déplie dans la liste des propositions, l'ordre proposé en clair ; il est dans le panier, à la fin de sa section ; à la voix qui suffit : « Le nouvel ordre de « Conclusion » est entré en vigueur. », la section se lit dans le nouvel ordre ; par la chaîne : « Ton vote compte : il est inscrit sur la chaîne Ğ1. », « seed a minima · 1 vote » ; sur un téléphone, rien ne déborde, chaque ligne fait au moins 44 px | | C26 | Le titre du document | groupe d'essai : sous le titre, « Proposer un autre titre » ; « Acte d'engagement de la certification » ; « Pour » ; une deuxième personne vote « Pour » si cette voix ne suffit pas ; lire en anglais | sous le titre : « Titre du document · inertie 4 / 5 · haute · seed a minima · 0 vote » et les trois gestes ; le titre proposé se vote dans la liste des propositions (« Titre du document ») ; à la voix qui suffit : « Le titre « … » est entré en vigueur. », le document change de titre, son vote reste déplié sous le titre ; en anglais, l'ancien titre traduit, marqué « translation needs review » | | C27 | La participation ramenée dans ses bornes | un groupe de 4 dont la médiane est 2,5 votants, ramenée à 50 % (l'automate fait répondre ces chiffres au serveur) : « Réglages de la formule » | « 3 votants sur 4 (62,5 %) : la médiane des 12 propositions votées depuis un an. » — la part de la mesure elle-même, jamais 3 sur 4 arrondi d'abord ; puis « Ramenée entre 5 % et 50 % de l'électorat : le groupe demande ses voix pour comme si 2 personnes votaient (50 %). » ; « Part exigée : les « pour » demandés au-delà de C, à 2 votants comme d'habitude. » | diff --git a/seeds/acte-engagement-certification.json b/seeds/acte-engagement-certification.json index 8178b8b..1fc13e2 100644 --- a/seeds/acte-engagement-certification.json +++ b/seeds/acte-engagement-certification.json @@ -1,5 +1,5 @@ { - "_source": "maquette/frontend/app/data/seeds/duniter-g1.bundle.json (doc engagement-certification, 33 clauses + 2 variantes). Aucun article en vigueur au départ. I1, E1, E2 : Propositions seed (« seedProposal »), ouvertes, mises en avant pour amorcer le vote, sans niveau d'inertie ici : elles démarrent au cran SEED_PROPOSAL_LEVEL (crates/ld-server/src/seed.rs, 2 « basse » par défaut ; Yvv, 2026-11-02, ADR 0011). Tout le reste : propositions ouvertes à 0 vote (Yvv, 2026-10-21), inertie 3 / 5. I1 « Raison d'être » remplace le Préambule (texte d'Yvv, revue du 2026-10-30). Modules : le titre du document à 4, l'ordre des articles de chaque section à 2, en vigueur sans vote (seed a minima ; revue du 2026-10-30, ADR 0009). F1.2, N1, N1.1, O1 réécrits selon les règles appliquées (Yvv, 2026-11-02). Une base existante reçoit ces changements par des amendements gardés (seed_amend, seed_proposal_amend), jamais en réinstanciant le document.", + "_source": "maquette/frontend/app/data/seeds/duniter-g1.bundle.json (doc engagement-certification, 33 clauses + 2 variantes). Aucun article en vigueur au départ. I1, E1, E2 : Propositions seed (« seedProposal »), ouvertes, mises en avant pour amorcer le vote, sans niveau d'inertie ici : elles démarrent au cran SEED_PROPOSAL_LEVEL (crates/ld-server/src/seed.rs : 2 « basse », choix d'Yvv du 2026-11-02, qui remontera leur inertie par un vote une fois les textes passés ; ADR 0011). Tant qu'aucun article n'est en vigueur, la publication attend le premier texte. Tout le reste : propositions ouvertes à 0 vote (Yvv, 2026-10-21), inertie 3 / 5. I1 « Raison d'être » remplace le Préambule (texte d'Yvv, revue du 2026-10-30). Modules : le titre du document à 4, l'ordre des articles de chaque section à 2, en vigueur sans vote (seed a minima ; revue du 2026-10-30, ADR 0009). F1.2, N1, N1.1, O1 réécrits selon les règles appliquées (Yvv, 2026-11-02). Une base existante reçoit ces changements par des amendements gardés (seed_amend, seed_proposal_amend), jamais en réinstanciant le document.", "slug": "acte-engagement-certification", "title": { "fr": "Acte d'engagement Certification",