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>
125 lines
9.0 KiB
Markdown
125 lines
9.0 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.
|
|
|
|
**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.
|