Aller au contenu

ADR-0024 — La révision convenue appartient à la revue senior, pas à l'audit externe

Statut 🟢 Accepté — 2026-06-21 ; implémenté (garde de phase dans repondre_fil ; révisions pendantes surfacées au panneau junior Cabinet.tsx ; test dans test_revue.py, suite verte)
Portée Garde de phase sur la résolution révision convenue (repondre_fil, revue.py) ; surfaçage de la révision pendante dans le panneau d'action du junior (Cabinet.tsx). Amende ADR-0022 (D-REVCONV-3).
Décision Une résolution en révision convenue n'est permise QUE lorsque la demande est en revue_senior. Pendant l'audit externe, le levier de changement est le verdict de réserves (qui renvoie au senior), pas la révision convenue directe. Quand un dossier revient en a_revoir avec une révision pendante, le panneau d'action du junior la surface (valeur cible + application + lien vers la conversation), au lieu de l'envoyer à l'aveugle au plan de travail.
Réf. ADR-0022 — Révision convenue ; ADR-0006 — Personas staff & cross-tenant (audit en chaîne) ; ADR-0008 — Revue contradictoire ancrée

🎯 À retenir

Le renvoi implicite de la révision convenue (ADR-0022, D-REVCONV-3 : résoudre → a_revoir) a été conçu pour la phase revue senior. Mais le code l'appliquait dans n'importe quelle phase : résolue pendant l'audit externe, une révision convenue arrachait le dossier en a_revoir, verrouillait l'externe hors de son audit (ouvrir_fil ne l'autorise qu'en audit_externe) et court-circuitait la boucle d'audit (après application, le dossier repart en revue_senior, jamais ré-audité — le changement déclenché par l'externe n'est jamais re-vu par lui). On borne la révision convenue à revue_senior. L'audit garde son levier propre : les réserves (verdict → retour au senior → la chaîne rejoue, re-validation ET re-audit). Et quand le junior revient en a_revoir, sa révision pendante lui est montrée dans le panneau, pas perdue derrière un plan de travail muet.

Contexte

Observé en QA (parcours externe). Le dossier était en audit_externe. Un fil de critique y a été résolu en révision convenue (valeur cible proposée). Effets vécus, tous expliqués par le code :

  • repondre_fil (revue.py) : la branche révision convenue fait demande.statut = "a_revoir" sans aucune garde de phase — la résolution ne vérifie que le persona (SENIOR/EXTERNE), jamais le statut.
  • L'externe est verrouillé : ouvrir_fil n'autorise l'externe qu'en audit_externe. Passé en a_revoir, il ne peut plus ancrer aucune critique.
  • La boucle d'audit casse : la voie normale de l'audit est le verdict (auditer, audit_externe → audite si approuve, → revue_senior si réserves). En sautant directement en a_revoir, on contourne le verdict ; après application + re-soumission le dossier va en revue_senior, jamais re-transmis à l'externe → ce qu'il a contesté n'est jamais ré-audité. Atteinte au rail ADR-0008 (« approuvé = livré »).
  • La valeur « disparaît » côté junior : en a_revoir, le panneau l'envoie « Ouvrir le plan de travail » ; or le plan de travail n'affiche ni les fils ni les révisions pendantes. Le junior voit le jeu validé (ex. v4) sans trace de la révision ni de la conversation. Rien n'est perdu (journal append-only, les fils sont en base) : c'est un trou de visibilité depuis là où le junior atterrit.

Racine : la révision convenue est un outil de la phase revue senior (le senior et le junior conviennent d'une valeur). L'avoir laissée s'exécuter pendant l'audit mélange deux mécanismes de changement et court-circuite l'autorité de l'auditeur.

Décision

  • D-REVPHASE-1 — Révision convenue ⊆ revue_senior. Résoudre un fil en révision convenue exige demande.statut == "revue_senior". Sinon → 409 avec un message qui pointe le bon levier (« pendant l'audit, une valeur se conteste par des réserves »). La résolution en maintenu (clôture de discussion, sans changement d'état) reste permise en toute phase.
  • D-REVPHASE-2 — L'audit conteste par les réserves. Inchangé, rappelé ici comme le chemin canonique : l'externe qui veut un changement de valeur émet des réserves (commentaire obligatoire) → revue_senior → le senior arbitre (et peut alors convenir une révision) → application → re-soumission → re-validation → re-transmission à l'externe → re-audit. La chaîne rejoue ; l'externe re-voit ce qu'il a contesté. L'intégrité d'audit tient.
  • D-REVPHASE-3 — La révision pendante est visible où le junior atterrit. Quand la demande est en a_revoir avec une ou plusieurs révisions convenues non appliquées, le panneau d'action du junior les liste (champ + valeur cible) avec l'application en un clic et un renvoi à la conversation, avant de proposer le plan de travail. On ne dirige plus le junior vers un plan de travail muet quand le geste attendu est « appliquer la révision ».
  • D-REVPHASE-4 — La pièce de contre-source voyage (ferme la limite v1 d'ADR-0022). À l'application, la pièce du message de résolution est matérialisée en PieceJustificative(demande, champ) (même pattern que les pièces de doctrine héritées), si bien qu'elle entre dans le snapshot figé — la justification complète (texte + référentiel
  • pièce) suit la valeur, plus seulement texte + référentiel. La pièce reste aussi sur le message du fil (immuable) : aucune perte, double présence assumée. Le junior la voit donc comme une pièce justificative figée de l'étude, et plus seulement reliée sur le fil.

Conséquences

  • Positif. Le bug d'état disparaît (plus de saut hors audit) ; l'autorité de chaque phase est nette (senior = révision convenue ; externe = verdict) ; la boucle d'audit est garantie ; le junior ne perd plus de vue la révision à appliquer.
  • Récupération de l'existant. Aucune migration : un dossier déjà coincé en a_revoir avec une révision pendante se répare en avançant — le junior applique (l'endpoint appliquer-revision accepte a_revoir), re-soumet → revue_senior → re-validation → re-transmission → l'externe re-audite.
  • Limite assumée. On ne permet pas d'« acter une valeur » directement pendant l'audit (option écartée : trop de surface, re-routage fragile). Le détour par les réserves est le prix de l'intégrité d'audit — et il est court.

Déclencheur de réexamen (pré-enregistré)

  • Friction réelle du détour réserves → revue → re-audit (si les allers-retours audit deviennent fréquents et lourds) → reconsidérer une révision convenue audit-aware avec re-audit automatique (l'option B écartée ici).