forked from yvv/decision
v3 : ADR 0010 (objections, coquilles validées, messagerie) ; chantier, contrôles C28–C31, invariants
ADR 0010 remplace 0004 et complète 0003 (renvois dans les deux). CHANTIER : « Corriger n'est pas voter » et « Deux articles qui se répètent ou se contredisent » réécrits avec le tableau des gestes (qui, quoi, effet, échéance), la boîte « Messages », deux limites connues. CONTROLES : C6 suit la règle, C24 son nouveau texte, C28–C31, le passage du lot F. CLAUDE.md : l'invariant de l'objection et de la coquille validée, les nouveaux modules, 29 contrôles. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
# 0003 — Corriger n'est pas voter
|
||||
|
||||
> Complétée par [0010](0010-objections-et-coquilles-validees.md) (2026-10-31) : la règle de la
|
||||
> coquille ne change pas ; la coquille d'un autre attend son auteur (un administrateur pour un
|
||||
> texte du seed), ou 3 jours, et en vigueur seule une coquille validée change le texte.
|
||||
|
||||
**Contexte.** « Ça ne peut pas devenir un système qui nécessite un vote pour corriger une
|
||||
coquille. » Mais une correction ne doit pas pouvoir changer le sens d'un texte voté — et tout
|
||||
membre peut corriger un texte en vigueur, qui est republié aussitôt.
|
||||
@@ -24,7 +28,7 @@ ou de fond), jamais contre la correction précédente :
|
||||
ligne et tabulation) sont refusés partout où l'on écrit ; un titre tient sur une ligne.
|
||||
|
||||
Sinon c'est **du fond** : nouvelle révision d'une proposition ouverte (par son auteur), votes
|
||||
antérieurs « à reconfirmer », signalements levés ; refusé sur un texte en vigueur ou de départ.
|
||||
antérieurs « à reconfirmer », réponse aux objections qui l'attendent (0010) ; refusé sur un texte en vigueur ou de départ.
|
||||
L'écriture ne vaut que sur le texte jugé : un texte entré en vigueur ou changé entre-temps
|
||||
donne un conflit. Les brouillons s'éditent librement.
|
||||
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# 0004 — Contradictions : signalées par les personnes, bloquantes
|
||||
|
||||
> **Remplacée** par [0010](0010-objections-et-coquilles-validees.md) (2026-10-31) : le
|
||||
> signalement devient l'objection « contredit », à côté de « redit » ; elle retient la dernière
|
||||
> arrivée des deux versions, qui ne se vote plus jusqu'à sa levée ; l'auteur répond, la personne
|
||||
> qui objecte lève ou réitère, et sans réponse de sa part sous 3 jours elle est levée. Les
|
||||
> signalements existants sont devenus des « contredit » (migration 0008).
|
||||
|
||||
**Contexte.** « Il faut que 2 unités modulaires ne puissent pas passer en vigueur si elles se
|
||||
contredisent. » La contradiction est une question de sens : aucune règle ne la détecte sans
|
||||
se tromper, et l'IA est écartée pour l'instant.
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
# 0010 — Objections « redit » / « contredit », coquilles validées, messagerie
|
||||
|
||||
> Remplace [0004](0004-contradictions-signalees.md) (contradictions signalées) et complète
|
||||
> [0003](0003-corriger-n-est-pas-voter.md) (corriger n'est pas voter), dont la règle de la coquille
|
||||
> ne change pas. Décisions d'Yvv du 2026-10-30 (revue) ; la messagerie dans l'application et la
|
||||
> coquille d'un texte du seed validée par un administrateur sont les choix par défaut d'orch.
|
||||
> Lot F, 2026-10-31.
|
||||
|
||||
**Contexte.** Le signalement de contradiction (0004) bloquait l'entrée en vigueur sans dire à
|
||||
qui revenait le geste suivant, et une coquille corrigée par n'importe qui changeait le texte
|
||||
d'un autre sans lui demander. Yvv, 2026-10-30 :
|
||||
|
||||
- « Faudrait un "redit" en option avec "contredit" → faut rendre plus explicite que l'objection
|
||||
doit être levée par l'auteur de la dernière arrivée pour être une proposition votable. Pour ce
|
||||
qui constitue une répétition → modifier l'article cible ; pour une contradiction → reformuler.
|
||||
→ ping messagerie TrustinWallet → Lever l'objection ou Réitérer l'objection ; si pas de
|
||||
réponse sous 3j, alors "levée". »
|
||||
- « Corriger coquille → ping auteur pour valid → idem 3j ça passe auto, mais auteur a toujours
|
||||
la main tant que c'est pas le texte en vote. Sinon seule une coquille validée corrige le texte
|
||||
en vote. » (« le texte en vote » : le texte en vigueur.)
|
||||
|
||||
## Décision
|
||||
|
||||
### Les objections — `crates/ld-engine/src/objection.rs`
|
||||
|
||||
- Une objection dit qu'une version **redit** une autre (elle la répète) ou la **contredit**,
|
||||
motif à l'appui (10 à 600 signes). Elle porte sur deux versions de texte de deux articles
|
||||
différents, ouvertes ou en vigueur — jamais deux textes en vigueur (`both_in_force`).
|
||||
- Elle retient **la dernière arrivée** des deux (date de soumission, à défaut de création, puis
|
||||
l'ordre d'écriture) ; **jamais un texte en vigueur** : si la dernière arrivée est en vigueur,
|
||||
c'est l'autre qui est retenue. La version retenue est fixée quand l'objection est faite.
|
||||
- Tant que l'objection tient, la version retenue **ne se vote plus** (vote direct, vote groupé,
|
||||
bulletin de la chaîne : `409 objection`) et **n'entre pas en vigueur**. Les votes déjà faits
|
||||
restent ; un bulletin scellé avant l'objection et confirmé après compte, sans la faire entrer.
|
||||
- Une personne n'a qu'une objection debout sur une même paire (`objection_exists`).
|
||||
- **L'auteur de la version retenue répond** : pour une redite, il **modifie l'article visé**
|
||||
(une proposition liée à l'objection, sur l'article de l'autre version, partie de son texte) ;
|
||||
pour une contradiction, il **reformule** (une révision de fond de sa version, ou une
|
||||
proposition liée sur son propre article). Une révision de fond de l'une ou l'autre des deux
|
||||
versions vaut réponse ; une coquille, non. Une version du seed n'a pas d'auteur : tout membre
|
||||
du groupe peut y répondre par une proposition liée.
|
||||
- Une réponse donne la main à **la personne qui objecte** : un message lui demande de **lever**
|
||||
ou de **réitérer** dans les **3 jours** ; sans geste de sa part, l'objection est **levée** à
|
||||
l'échéance. Un seul tour à la fois : une autre réponse pendant son tour ne change ni le
|
||||
message ni l'échéance. Réitérer rend la main à l'auteur (tour suivant, sans échéance pour lui).
|
||||
- Lever : la personne qui a fait l'objection, à tout moment, ou un administrateur de
|
||||
trustinWallet. Réitérer : elle seule. Retirer une des deux versions met fin à l'objection.
|
||||
Une levée relance l'adoption : la version libérée entre en vigueur si ses voix suffisent.
|
||||
- Règles d'accès : `trustin_access::lifts_objection`, `reiterates_objection`.
|
||||
|
||||
| Qui | Quoi | Effet | Échéance |
|
||||
|---|---|---|---|
|
||||
| tout membre du groupe | faire une objection « redit » ou « contredit » | la dernière arrivée (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) ou reformuler (contredit) | la main passe à la personne qui objecte ; message « lever ou réitérer » | 3 jours pour elle |
|
||||
| la personne qui objecte | lever | la version se vote de nouveau, et entre en vigueur si ses voix suffisent | — |
|
||||
| la personne qui objecte | 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 | lever | levée « par un administrateur » | — |
|
||||
| l'auteur | retirer sa version | l'objection prend fin | — |
|
||||
|
||||
### Les coquilles validées — `crates/ld-engine/src/correction.rs`
|
||||
|
||||
La règle de la coquille (0003, `edit.rs`) ne change pas ; ce qui change, c'est qui la laisse
|
||||
entrer.
|
||||
|
||||
- Sur **son propre texte** (l'auteur de la version ; un administrateur pour un texte du seed),
|
||||
la correction s'applique tout de suite, comme avant.
|
||||
- Sur **celui d'un autre**, elle **attend** : un message à l'auteur de la version (aux
|
||||
administrateurs qui ouvrent le groupe, pour un texte du seed) avec **valider / refuser** ; sans
|
||||
réponse sous **3 jours**, elle s'applique d'elle-même.
|
||||
- **Tant que le texte n'est pas en vigueur, l'auteur garde la main** : il peut revenir sur une
|
||||
correction appliquée (révision « correction retirée ») ou appliquer finalement une correction
|
||||
refusée, tant que le texte est celui sur lequel elle a été écrite.
|
||||
- **En vigueur, seule une correction validée change le texte** : elle attend la validation (ou
|
||||
l'échéance, qui vaut validation), et un refus est définitif.
|
||||
- Deux corrections en attente sur un même texte : chacune est jugée contre le texte voté ; à
|
||||
l'application, la correction doit tomber sur le texte qu'elle a lu — sinon (une autre
|
||||
correction, une révision de fond ou un retrait est passé entre-temps) elle est **périmée**
|
||||
et l'interface demande de recharger.
|
||||
- Les traductions restent éditoriales : elles ne passent pas par une validation.
|
||||
- L'historique dit qui a écrit la correction et qui l'a validée (ou qu'elle est passée à
|
||||
l'échéance) ; la correction en attente se lit, avec son diff, dans « Détails ».
|
||||
- Règle d'accès : `trustin_access::answers_typo`.
|
||||
|
||||
| Qui | Quoi | Effet | Échéance |
|
||||
|---|---|---|---|
|
||||
| l'auteur de la version (un administrateur pour un texte du seed) | corriger une coquille | appliquée tout de suite, les votes restent | — |
|
||||
| tout autre membre | corriger une coquille | en attente ; message à l'auteur (aux administrateurs pour un texte du seed) | 3 jours, puis appliquée |
|
||||
| l'auteur (ou un administrateur pour le seed) | valider / refuser | appliquée / laissée de côté | — |
|
||||
| l'auteur, texte pas encore en vigueur | revenir au texte d'avant, ou appliquer finalement | la main reste à l'auteur | — |
|
||||
| texte en vigueur | — | seule une correction validée (ou passée à l'échéance) le change ; un refus est définitif | — |
|
||||
|
||||
### La messagerie — `crates/ld-server/src/messages.rs`
|
||||
|
||||
Une boîte **« Messages »** dans l'application, au menu, avec le nombre de non-lus (une pastille
|
||||
sur le bouton du menu en mobile) ; pas de courriel. Un message porte un objet (une objection, une
|
||||
coquille), son texte — dit par l'interface, dans la langue de la personne —, les gestes que
|
||||
l'objet lui demande **maintenant** (répondre, lever ou réitérer, valider ou refuser) et son
|
||||
échéance ; un message traité n'offre plus de geste et dit ce qu'il est devenu. Chacun ne lit
|
||||
que les siens (`trustin_access::reads_message`) ; agir sur l'objet lit ses messages. Un message
|
||||
ne se montre que tant que la personne ouvre le groupe dont il parle.
|
||||
|
||||
### Les échéances — `crates/ld-server/src/deadlines.rs`
|
||||
|
||||
Trois jours (`ANSWER_DAYS`). Le balayage d'adoption (toutes les 5 minutes) passe les
|
||||
échéances, et une fois au démarrage : une échéance passée pendant un arrêt est prise dès la
|
||||
reprise. L'horloge du serveur est injectable (`AppState::clock`) : les tests l'avancent, sans
|
||||
attendre ; la route `/api/dev/clock` n'existe qu'avec la connexion de développement.
|
||||
|
||||
### La migration 0008
|
||||
|
||||
Additive. Les signalements gardent leur table (`signals`) et y gagnent le genre, la version
|
||||
retenue, le tour, l'échéance, la réponse et la cause de la levée ; chaque signalement existant
|
||||
devient un **« contredit »** sans perte : levé, il le reste (par son auteur, un administrateur
|
||||
ou une révision, selon `lifted_by`) ; debout, il retient la dernière arrivée selon la règle
|
||||
ci-dessus (s'il visait deux textes aujourd'hui tous deux en vigueur, il ne retient rien et se
|
||||
lève à la main). Aucun message n'est créé pour le passé. S'y ajoutent les tables `typos` (les
|
||||
corrections des autres) et `messages`, et sur les révisions la correction d'origine et qui l'a
|
||||
validée.
|
||||
|
||||
**Coût.** Une version retenue attend son auteur aussi longtemps qu'il ne répond pas : c'est la
|
||||
dernière arrivée, c'est à elle de s'expliquer. Une personne qui réitère sans fin garde une
|
||||
version hors du vote : un administrateur peut lever. Une coquille d'un autre met jusqu'à trois
|
||||
jours à paraître, et sur un texte du seed elle attend un administrateur.
|
||||
+2
-1
@@ -8,8 +8,9 @@ pas une décision : on en écrit une nouvelle qui la remplace, et on le note dan
|
||||
| [0001](0001-rust-svelte.md) | Rust + Svelte, une image, SQLite | 2026-10-21 |
|
||||
| [0002](0002-vote-permanent.md) | Vote permanent : marge du texte en place et plancher C | 2026-10-21 |
|
||||
| [0003](0003-corriger-n-est-pas-voter.md) | Corriger n'est pas voter | 2026-10-21 |
|
||||
| [0004](0004-contradictions-signalees.md) | Contradictions : signalées par les personnes, bloquantes | 2026-10-21 |
|
||||
| [0004](0004-contradictions-signalees.md) | Contradictions : signalées par les personnes, bloquantes (remplacée par 0010) | 2026-10-21 |
|
||||
| [0005](0005-publication-git.md) | Publication par file d'envoi vers un dépôt git | 2026-10-21 |
|
||||
| [0006](0006-acces-connect-trustinwallet.md) | Accès : connect.monnaie-libre.fr, invitations, trustinWallet | 2026-10-21 |
|
||||
| [0007](0007-inertie-cinq-crans.md) | Inertie à cinq crans, calée sur la participation du groupe (complète 0002) | 2026-10-30 |
|
||||
| [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 |
|
||||
| [0010](0010-objections-et-coquilles-validees.md) | Objections « redit » / « contredit », coquilles validées, messagerie (remplace 0004, complète 0003) | 2026-10-31 |
|
||||
|
||||
Reference in New Issue
Block a user