Aller au contenu

ADR-013 — Activation de l'ordre cible de précédence (extraction_pdf > messagerie > Bubble)

Statut Accepted
Date 22/05/2026
Décideurs Romain BAZIL, Nicolas Léonard
Origine Session design système de convergence — 22/05/2026

Contexte

ADR-003 a défini en S19 un ordre cible de précédence des sources de la fiche consolidée, conditionné à deux prérequis :

  1. Validation auto activée sur convergence
  2. Data Extraction fiabilisé

L'ordre transitoire en V1 était : am_override > declarative_bubble > crm_messagerie > extraction_pdf. Le code de fiche_consolidation/agent.py::_resolve_field matérialise toujours cet ordre transitoire.

Le système de convergence en cours de design (cf. spec 2026-05-22-systeme-convergence-design.md) débloque le prérequis #1. Le prérequis #2 est partiellement réalisé : la cascade interne de data_extraction n'est pas finalisée, mais les outputs PDF (RAG hybride + Haiku/Opus) sont déjà jugés plus fiables qu'un déclaratif Bubble figé au moment de la création de la fiche.

Plus structurant : avec le système de convergence, la précédence change de rôle. Elle n'est plus le mécanisme primaire qui résout les conflits ; elle devient un tie-breaker invoqué uniquement quand :

  • une seule source a fourni une valeur (cas single_source), ou
  • le LLM-as-a-judge est incapable de trancher entre sources divergentes (cas judge_no_decision).

Dans ces deux cas seulement, on a besoin d'un ordre par défaut pour la recommandation HITL. Et cet ordre doit refléter la fiabilité réelle des sources, pas l'historique défensif initial.

Décision

Activer immédiatement l'ordre cible décrit dans ADR-003 :

1. am_override         (autoritaire, dernier mot humain)
2. extraction_pdf      (document officiel, plus fiable que déclaratif)
3. crm_messagerie      (déclaratif vivant, daté)
4. declarative_bubble  (snapshot figé à la création, le moins frais)

Cet ordre est appliqué :

  • Pour la sélection du chosen_source en cas de single source : on prend la valeur disponible et on persiste la source dans chosen_sources (array, cf. ADR-005).
  • Pour la recommandation HITL par défaut : quand le judge LLM ne tranche pas, la todo list AM affiche la valeur de la source la plus haute dans l'ordre comme "recommandation faible".

L'ordre n'est plus appliqué pour résoudre un désaccord entre sources convergentes — la convergence (auto ou via judge) prime systématiquement.

Rationale

Conformité avec ADR-003

L'ordre cible était déjà débattu et validé en S19. Cette ADR documente l'activation de l'ordre déjà décidé, pas un nouveau choix.

Cohérent avec le shift vers convergence

Avant : précédence = mécanisme primaire de résolution. Maintenant : précédence = tie-breaker en cas d'échec de la cascade (convergence → judge → HITL). Le rôle change, donc l'ordre peut bouger sans contradiction.

Pourquoi extraction_pdf monte en #2

L'extraction PDF lit les documents officiels (compromis, bilans, baux, permis). Une fois passée par le RAG hybride + vision LLM, elle est plus dense en information vérifiable qu'un Bubble saisi par un AM qui a lui-même lu le PDF (corrélation cachée + risque de typo humaine).

Pourquoi declarative_bubble descend en #4

Verbatim Romain (ADR-003 §63) : « Le déclaratif Bubble et la messagerie n'ont pas de valeur en soi. C'est justement pour ça qu'on les avait traités à part. » Bubble est un snapshot figé au moment de la création de la fiche, jamais mis à jour ensuite. Pré-valider du déclaratif Bubble âgé de 6 semaines = risque concret de propager une donnée obsolète.

Pourquoi pas attendre data_extraction "complètement fiabilisé"

Le chantier multi-approches sur la cascade interne de data_extraction continue. Mais attendre sa complétion pour activer l'ordre cible bloquerait la convergence sur le reste — c'est l'argument inverse de "perfect is the enemy of done". Les outputs PDF actuels sont déjà au-dessus de Bubble en fiabilité observée.

Conséquences

Ce qui change

  1. Code : agents/app/agents/fiche_consolidation/agent.py::_resolve_field (variable candidates) — réordonner les lignes d'insertion. 1 ligne à bouger.
  2. Rôle de la précédence : elle devient un tie-breaker, pas un mécanisme primaire. À documenter dans la doc in-app (ADR-006).
  3. Recommandation HITL par défaut : utilise l'ordre cible quand le judge ne tranche pas.

Ce qu'il faut faire

  • Modifier _resolve_field (1 ligne)
  • Ajuster les tests unitaires de fiche_consolidation qui assumaient l'ancien ordre
  • Documenter dans la doc in-app le nouveau rôle de la précédence (tie-breaker only)

Ce qu'il faut éviter

  • Utiliser la précédence pour résoudre un désaccord entre sources convergentes : la convergence (ou le judge) prime systématiquement
  • Pré-valider automatiquement du Bubble seul : règle déjà actée par ADR-003, à respecter strictement

Alternatives écartées

  • Garder l'ordre transitoire bubble > messagerie > pdf : recréerait le bug d'auto-validation de déclaratif obsolète dès qu'on flippe le switch convergence
  • Pas de précédence du tout : pas de fallback pour le single_source ni pour les cas où judge ne tranche pas → todo list HITL sans aucune recommandation → friction inutile pour l'AM
  • Attendre la fiabilisation complète de data_extraction : bloque l'activation de la convergence sur le reste → on perd des semaines d'auto-validation et de capture passive pour un gain marginal

Verbatims

« Sur l'inversion de précédence : tu as raison. Acte cette décision en créant un ADR. » — Nicolas (22/05/2026, design session convergence)

Voir aussi

Sources