Fusion de la tête du chantier (924a40d : lots B2 et F) dans le lot D

Les deux côtés gardés partout. Aux coutures :
- une objection (redit / contredit) porte sur deux articles, jamais sur un module ;
  un ordre ne se corrige pas, ni par son auteur ni par un autre ; une coquille du
  titre suit le chemin de F (l'auteur du titre, un administrateur pour le titre
  de départ, ou 3 jours), et documents.title suit à l'application ;
- votable() couvre les modules ; leurs totaux passent par shown_tally, à l'écran
  et dans document.json ;
- « Modules à voter » ne compte plus une version retenue par une objection (test
  vu rouge) ; la liste du groupe la compte toujours parmi les propositions en cours ;
- le panier : une fonction pour les articles et les modules, avec les versions
  retenues de F ; un nouvel article se propose dans une section, à sa fin, et peut
  répondre à une objection ;
- migrations 0007 (modules) puis 0008 (objections) ;
- C25 et C26 supportent un groupe d'essai où une voix suffit (dès 16 membres).

Boucle : fmt, clippy -D warnings, cargo test (227), svelte-check 0, vitest 55,
build, e2e 35 / 35 (C1–C33 et M1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-10-31 09:41:30 +01:00
co-authored by Claude Opus 5.5
82 changed files with 8285 additions and 677 deletions
+71 -20
View File
@@ -9,7 +9,7 @@
La communauté Monnaie libre tient son Acte d'engagement Certification comme un **texte vivant** :
lisible d'abord, modifiable par article, chaque modification passant par un vote dont le seuil
suit la formule inertielle de la Ğ1 — sans qu'une coquille demande un vote, sans que deux
articles contradictoires soient en vigueur ensemble, et avec une publication automatique que
articles qui se répètent ou se contredisent soient en vigueur ensemble, et avec une publication automatique que
les applications clientes (Cesium, Ğecko…) peuvent suivre.
## Ce que voit la personne
@@ -48,7 +48,7 @@ les applications clientes (Cesium, Ğecko…) peuvent suivre.
(enregistré, inscrit sur la chaîne Ğ1, en attente de la chaîne, à reconfirmer, non compté et
pourquoi), puis l'inertie et la formule. Les autres gestes ouvrent un panneau latéral (une
feuille sur mobile), lui aussi dans l'URL : **Panier**, **Propositions**, **Proposer**,
**Détails** d'une version (coquilles, traductions, signalements, historique) et
**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
@@ -71,6 +71,11 @@ les applications clientes (Cesium, Ğecko…) peuvent suivre.
7. **Deux aperçus** : « si les bien cotées passent » et « si tout passe ».
8. **Trois langues** : fr · en · es, pour l'interface comme pour le texte. Le français fait foi ;
une traduction devenue ancienne (le français a changé depuis) est signalée.
9. **Messages** (lot F, ADR 0010) : au menu, une boîte avec le nombre de non-lus (une pastille
sur le bouton du menu en mobile) ; ce qui attend un geste de la personne — une objection à
laquelle répondre, à lever ou à réitérer, une correction de coquille à valider —, chaque
message avec son objet, son texte, ses gestes et son échéance. Une version retenue par une
objection le dit sous l'article, à chacun selon son rôle.
## Les règles
@@ -149,7 +154,14 @@ titre d'un article reste voté avec son texte.
ensuite, par l'ordre de la section.
- **Le titre du document** : à l'entrée d'un autre titre, le document change de titre en
français ; ses traductions restent éditoriales et passent « à revoir » jusqu'à ce qu'on les
reprenne. Une coquille du titre se corrige sans vote.
reprenne. Une coquille du titre se corrige sans vote, par le chemin de toute coquille : celle
d'un autre attend l'auteur du titre (un administrateur pour le titre de départ) ou 3 jours.
- **Face aux objections (ADR 0010)** : « redit » et « contredit » portent sur deux articles,
jamais sur un module. Un ordre ne se corrige pas, ni par son auteur ni par un autre.
- **« Modules à voter »** ne compte pas une version retenue par une objection : personne ne peut
la voter tant qu'elle est retenue. Un article dont la seule version ouverte est retenue sort du
compte, et y revient à la levée. La liste du groupe la compte toujours parmi les propositions en
cours : elle est ouverte.
- Dans une base existante, chaque document reçoit ses modules **une fois**, depuis son état
présent (titre actuel, ordre actuel de chaque section), sans toucher un article ni un vote
(`crates/ld-server/src/module_amend.rs`, journal `module_amendments`, migration `0007`).
@@ -163,11 +175,19 @@ mot (« certifcation » → « certification »). Tout le reste passe par une pr
ponctuation, les chiffres, les signes, l'emphase, les formules, les adresses, et tout changement
de sens.
| Geste | Qui | Effet sur les votes |
|---|---|---|
| Corriger une **coquille** | tout membre sur un texte de départ ou en vigueur ; l'auteur sur sa proposition | aucun — les votes restent, les traductions restent à jour |
| Modifier **le fond** d'une proposition | son auteur | nouvelle révision : les votes antérieurs sont « à reconfirmer », les signalements tombent |
| Modifier le fond d'un texte **en vigueur** ou d'un texte de départ | personne | refusé : on propose une nouvelle version |
| Geste | Qui | Effet | Échéance |
|---|---|---|---|
| Corriger une **coquille** sur son propre texte | l'auteur de la version ; un administrateur sur un texte du seed | appliquée tout de suite : les votes restent, les traductions restent à jour | — |
| Corriger une **coquille** sur le texte d'un autre | tout membre du groupe | **en attente** : un message à l'auteur (aux administrateurs pour un texte du seed), qui valide ou refuse ; la correction se lit, avec son diff, dans « Détails » | 3 jours sans réponse : appliquée |
| Revenir sur une correction (ou l'appliquer finalement) | l'auteur, tant que le texte **n'est pas en vigueur** | le texte d'avant revient (ou la correction passe) | — |
| Corriger un texte **en vigueur** | tout membre ; l'auteur (un administrateur pour le seed) valide | **seule une correction validée** change le texte ; un refus est définitif | 3 jours sans réponse : appliquée |
| Modifier **le fond** d'une proposition | son auteur | nouvelle révision : les votes antérieurs sont « à reconfirmer », les corrections en attente sont périmées ; elle répond aux objections qui attendent l'auteur | — |
| Modifier le fond d'un texte **en vigueur** ou d'un texte de départ | personne | refusé : on propose une nouvelle version | — |
Deux corrections en attente sur un même texte : chacune est jugée contre le texte voté ; à
l'application, celle qui ne tombe plus sur le texte qu'elle a lu est **périmée** (« recharge,
puis recommence »). Les traductions restent éditoriales, sans validation. L'historique dit qui a
écrit chaque correction et qui l'a validée, ou qu'elle est passée à l'échéance (ADR 0010).
Pourquoi si strict : six relectures indépendantes ont montré qu'une ponctuation laissée libre
finit toujours par porter un sens — un signe moins devant un nombre en gras, deux conditions
@@ -205,14 +225,37 @@ change la portée d'une exception. La règle est donc construite à l'envers d'u
- une correction ne s'écrit que sur le texte qui a été jugé : si le texte est entré en vigueur
ou a changé entre-temps, c'est un conflit (« recharge, puis recommence »).
Moteur : `crates/ld-engine/src/edit.rs` ; règle d'écriture : `crates/ld-server/src/proposals.rs`.
Moteur : `crates/ld-engine/src/edit.rs` (la coquille) et `crates/ld-engine/src/correction.rs` (qui
la laisse entrer) ; écriture : `crates/ld-server/src/proposals.rs` et `crates/ld-server/src/typos.rs`.
### Deux articles qui se contredisent
### Deux articles qui se répètent ou se contredisent
Tout membre peut **signaler une contradiction** entre deux propositions, motif à l'appui. Tant
que le signalement tient, celle des deux qui n'est pas en vigueur **ne peut pas entrer en
vigueur**. Il se lève par son auteur (ou un administrateur), ou tombe quand la proposition
signalée est révisée sur le fond.
Tout membre peut faire une **objection** à une version : elle **redit** un autre article (elle le
répète) ou elle le **contredit**, motif à l'appui. **Une objection rend la dernière arrivée des
deux versions non votable jusqu'à sa levée** — jamais un texte en vigueur : si la dernière
arrivée est en vigueur, c'est l'autre qui est retenue. Les votes déjà faits restent ; la version
retenue ne reçoit plus de vote (ni sous l'article, ni dans le panier, ni par la chaîne) et
n'entre pas en vigueur. Pour qu'elle se vote de nouveau, **son auteur répond** : pour une redite,
il **modifie l'article visé** ; pour une contradiction, il **reformule**. La personne qui a fait
l'objection reçoit alors un message : **lever** ou **réitérer** ; sans réponse de sa part sous
**3 jours**, l'objection est levée.
| Qui | Quoi | Effet | Échéance |
|---|---|---|---|
| tout membre du groupe | faire une objection « redit » ou « contredit », motif à l'appui | la dernière arrivée des deux versions (jamais un texte en vigueur) ne se vote plus ; message à son auteur | — |
| l'auteur de la version retenue (tout membre pour une version du seed) | « Modifier l'article visé » (redit) : une proposition liée, sur l'autre article, partie de son texte ; « Reformuler » (contredit) : une révision de fond de sa version | la main passe à la personne qui objecte : message « lever ou réitérer » | 3 jours pour elle |
| la personne qui a fait l'objection | lever | la version se vote de nouveau, et entre en vigueur si ses voix suffisent | — |
| la personne qui a fait l'objection | réitérer | la main revient à l'auteur : message « réponds à nouveau » | aucune pour l'auteur |
| personne | (3 jours sans geste après une réponse) | levée : « 3 jours sans suite » | — |
| un administrateur de trustinWallet | lever | levée « par un administrateur » | — |
| l'auteur | retirer sa version | l'objection prend fin | — |
Une révision de fond de l'une ou l'autre des deux versions vaut réponse, une coquille non ; un
seul tour à la fois (une autre réponse pendant le tour de la personne qui objecte ne change ni le
message ni l'échéance) ; une personne n'a qu'une objection debout sur une même paire. Les
signalements de contradiction d'avant sont devenus des « contredit » (migration 0008). Moteur :
`crates/ld-engine/src/objection.rs` ; serveur : `crates/ld-server/src/objections.rs`,
`messages.rs`, `deadlines.rs` (les échéances, au balayage de 5 minutes et au démarrage) ; ADR 0010.
### Une décision par proposition
@@ -242,7 +285,7 @@ du dépôt. Le groupe d'essai ne publie jamais. `document.json` dit aussi les mo
Un document seedé n'est jamais réinstancié : quand le seed change un texte de départ (le
Préambule devenu Raison d'être), un **amendement de seed** le remplace dans une base existante,
une seule fois, et seulement sur un article que personne n'a touché (*seed a minima* d'origine,
révision 1, aucun vote, aucune correction, aucune traduction modifiée, aucun signalement, texte
révision 1, aucun vote, aucune correction (ni en attente), aucune traduction modifiée, aucune objection, texte
identique à l'empreinte attendue). Chaque décision est consignée (`seed_amendments`, et dans les
journaux quand l'article garde son texte) ; appliqué, l'amendement se lit dans l'historique de
l'article (« texte de départ remplacé », avec le diff) et le texte est republié
@@ -251,7 +294,7 @@ l'article (« texte de départ remplacé », avec le diff) et le texte est repub
### Accès — trustinWallet
Tout le monde connecté peut tout faire dans les groupes qu'il ouvre (lire, proposer, voter,
corriger, signaler) **sauf la gestion des accès**, réservée aux administrateurs de trustinWallet
corriger, faire une objection) **sauf la gestion des accès**, réservée aux administrateurs de trustinWallet
(`/acces`) : membres des groupes, invitations, administrateurs, retours, clé de publication.
Le nom trustinWallet remplace trustWallet (déjà pris). Règles : `crates/trustin-access`.
@@ -265,7 +308,9 @@ du bulletin (`ld1:` + 64 chiffres hexadécimaux). La voix est celle de **l'ident
qui signe**, membre au moment où le serveur confirme la transaction sur l'indexeur ; quelle que
soit la session (invitation ou connexion Ğ1), la même identité n'a qu'une voix par version, et
**le dernier vote fait foi**, dans l'ordre de la chaîne. La chaîne montre qui a voté et quand,
jamais quoi ; chacun ne voit que les totaux. Sans compte des votes configuré
jamais quoi ; chacun ne voit que les totaux. Chacun reçoit **le reçu de son bulletin** (ses votes
et son sel), le retrouve sur « Tes bulletins » et le vérifie dans son navigateur ; personne
d'autre ne le reçoit (ADR 0008, « Le reçu »). Sans compte des votes configuré
(`LD_VOTE_ACCOUNT`), le vote par la chaîne est fermé et l'interface le dit. Dans les groupes
gérés (essai, Axiom…), tout membre vote directement, sans portefeuille.
@@ -295,9 +340,11 @@ Les raisons longues sont dans `docs/adr/`.
de la toile, ou dont l'accès est révoqué, garde les voix déjà confirmées.
- Le serveur fait confiance à l'indexeur pour lire la transaction (remarque, virement, identité,
appartenance à la toile) ; plusieurs indexeurs se configurent (ADR 0008).
- Par Ğecko, le bulletin n'est lié à aucun compte : une copie de son sceau incluse avant lui par
un autre compte le prendrait. Par l'extension, il est lié au compte qui signe.
- Un bulletin non vu sur la chaîne en 24 heures est lâché : un paiement plus tardif ne compte pas.
- Par Ğecko, le bulletin n'est lié à aucun compte : une copie nue de son sceau est ignorée, mais
une copie **payée** (0,1 Ğ1) incluse avant lui par un autre compte le prendrait. Par
l'extension, il est lié au compte qui signe.
- Un bulletin non vu sur la chaîne en 24 heures est lu une dernière fois, puis lâché : un
paiement plus tardif ne compte pas.
- Dans un groupe géré (essai, Axiom…), une même personne admise sous une identité d'invitation
**et** sous sa clé Ğ1 aurait deux voix : c'est à l'administration de n'en admettre qu'une.
- Un administrateur peut créer un nouveau lien pour une identité d'invitation existante
@@ -310,6 +357,10 @@ Les raisons longues sont dans `docs/adr/`.
dans l'historique de l'article.
- Les traductions (en, es) sont éditoriales : tout membre les corrige sans vote, et elles sont
republiées — le français fait foi.
- Une version retenue par une objection attend son auteur aussi longtemps qu'il ne répond pas ;
une personne qui réitère sans fin la garde hors du vote : un administrateur peut lever (ADR 0010).
- Les messages sont dans l'application, sans courriel : qui ne passe pas ne les voit pas, et la
correction ou l'objection qui l'attendait passe à l'échéance de 3 jours.
- Les aperçus (« si les bien cotées passent », « si tout passe ») montrent les articles seuls :
un ordre ou un titre proposé n'y change pas encore la place des articles ni le titre (ADR 0009).