forked from yvv/decision
Demande d'Yvv du 02/11 : « je vois ce que j'ai fait sans attendre », contrôle a posteriori (bien unique, bien le dernier qui vaut), et le vote simulé partout dans Monnaie libre tant que LD_VOTE_ACCOUNT n'est pas posé. Révise une phrase de 0010 : un « pour » prouvé pendant une objection est écarté. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
139 lines
10 KiB
Markdown
139 lines
10 KiB
Markdown
# 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. **Révisée le 2026-11-01** (décision d'Yvv, lot G) : sur une version
|
|
> retenue, on peut encore retirer son vote ou voter « contre », jamais ajouter un « pour ».
|
|
> **Révisée par [0012](0012-tampon-des-votes.md)** (2026-11-02, lot V) : un « pour » dont la
|
|
> preuve arrive sur la chaîne pendant qu'une objection retient la version est écarté ; il ne
|
|
> compte plus « tel qu'il est signé ».
|
|
|
|
**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 prend plus de « pour »** et **n'entre pas
|
|
en vigueur**, quelles que soient ses voix. Yvv, 2026-11-01, à la question « pendant qu'une
|
|
objection retient une version, que permet-on ? » : **« Retirer ou "contre" »**. Chacun peut
|
|
**retirer son vote** ou **passer à « contre »** ; personne ne peut **ajouter un « pour »** (vote
|
|
direct, vote groupé, bulletin de la chaîne : `409 objection`, et une ligne refusée refuse tout le
|
|
vote). La version ne peut que perdre des voix tant qu'elle est retenue ; à la levée, elle
|
|
n'entre qu'avec les voix encore là. Les votes déjà faits restent ; un bulletin scellé avant
|
|
l'objection et confirmé après compte tel qu'il est signé pour « contre » et le retrait ; son
|
|
« pour » est écarté (0012). Règle :
|
|
`ld_engine::objection::may_cast`, appliquée par `DocState::admits`.
|
|
- 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 les voix encore là
|
|
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 prend plus de « pour » — « contre » et retrait seulement — et n'entre pas en vigueur ; 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 reprend des « pour », et entre en vigueur si les voix encore là 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. Pendant ce temps, ceux qui la soutiennent ne
|
|
peuvent pas la renforcer : un nouveau « pour » attend la levée, alors qu'un « contre » ou un
|
|
retrait compte tout de suite. 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.
|