Files
decision/docs/adr/0010-objections-et-coquilles-validees.md
T
YvvandClaude Opus 5.5 06c99cb0db 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>
2026-10-31 05:19:02 +01:00

9.0 KiB

0010 — Objections « redit » / « contredit », coquilles validées, messagerie

Remplace 0004 (contradictions signalées) et complète 0003 (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.