# 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 ». **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é, sans la faire entrer. 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.