Aller au contenu

PD-252 — Retour d'expérience (REX)

Story : PD-252 — Politique des formats de préservation SAE Projet : ProbatioVault-doc Domaine : legal-compliance Date de clôture : 2026-03-11 Tracabilité : GAP-FINAL-004 (PD-244 audit ISO 14641)


1. Résumé exécutif

Métrique Valeur
Objectif initial Produire preservation-format-policy.md + amender ch08 pour clôturer GAP-FINAL-004 (ISO 14641 §10.1.1)
Résultat obtenu Conforme — 2 livrables Markdown produits et validés
Verdict final ✅ GO — Gate 8 v1 — 8.75/10
Tests contractuels 31/31 passés (100%)
Couverture 12/12 CA, 9/9 invariants

2. Métriques de convergence

2.1 Temps et itérations

Étape Durée estimée Durée réelle Itérations Écart
0 - Besoin 30 min ~30 min 1 0%
1 - Spécification 2h ~45 min 1 -63%
2 - Tests 1h ~45 min 1 -25%
3 - Gate spec 1h ~4h 4 +300%
4 - Plan 1h ~1h 1 0%
5 - Gate plan 1h ~1h 1 0%
6 - Implémentation 4h ~2h 1 -50%
7 - Acceptabilité 2h ~1h 1 -50%
8 - Gate acceptabilité 1h ~1h 1 0%
9 - REX 30 min ~30 min 1 0%
TOTAL ~14h ~12h 12 -14%

Note : Toutes les étapes sauf Gate 3 se sont déroulées dans les temps estimés. Gate 3 a représenté ~30% du temps total du workflow.

2.2 Scores de convergence par gate

Gate Score v1 Score final Delta Itérations
Gate 3 (CONFORMITY_CHECK) 4.5/10 7.875/10 +3.375 4 (escalade PO)
Gate 5 (AMBIGUITY) 8.0/10 8.0/10 0 1 (RESERVE accepté)
Gate 8 (CLOSURE) 8.75/10 8.75/10 0 1 (GO net)

Progression Gate 3 itération par itération :

Iter Score moyen Verdict Scores détaillés
v1 4.5 NON_CONFORME completeness 3.0 / testability 4.0 / clarity 4.0 / traceability 7.0
v2 6.0 NON_CONFORME completeness 5.5 / testability 6.0 / clarity 5.0 / traceability 7.5
v3 6.75 NON_CONFORME completeness 6.5 / testability 6.0 / clarity 7.0 / traceability 7.5
v4 7.875 RESERVE completeness 8.0 / testability 7.5 / clarity 8.0 / traceability 8.0

Événement critique : À v3 (6.75/10 < 7.0), le plafond 3 itérations a été atteint. Escalade PO déclenchée. La v4 a été produite avec corrections manuelles de l'orchestrateur, levant le blocage.

2.3 Écarts par catégorie

Catégorie d'écart Gate 3 Gate 5 Gate 8 Total
ECT (complétude/testabilité) 14 2 0 16
DIV (divergence spec/impl) 0 0 0 0
AMB (ambiguïté) 5 3 2 10
SEC (sécurité) 0 0 0 0
PERF (performance) 0 0 0 0
TOTAL écarts 19 5 2 26

Observation : Zéro écart DIV — cohérence parfaite entre spec (après Gate 3) et implémentation. Phénomène attendu pour une story documentaire pure (pas de code à diverger).


3. Points fluides

  • Implémentation rapide et précise : Une fois la spec stabilisée (v4), la rédaction des 2 livrables Markdown (C1 : 24KB, C2 : amendement ch08) s'est faite sans écart. La clarté de la spec au niveau des invariants a guidé l'agent de façon déterministe.
  • Gate 8 GO en v1 : Malgré 4 itérations Gate 3, la Gate 8 a été franchie du premier coup avec 8.75/10. Aucun écart MAJEUR ni BLOQUANT.
  • Couverture tests 100% : 31/31 tests passés (nominaux + erreurs + non-régression + adversariaux + mécanisme). Couverture totale des 12 CA et 9 INV.
  • Escalade PO fonctionnelle : Le mécanisme d'escalade a correctement résolu le blocage Gate 3 v3 (plafond atteint). La décision PO a été prise avec les informations nécessaires.
  • Distinction normativeReference vs citations documentaires : Le contrat §5.1 qui distingue les références structurées (regex) des citations documentaires (textuelles) a été correctement implémenté une fois spécifié clairement.

4. Points difficiles

  • Gate 3 v1 : completeness 3.0/10 — Score le plus bas observé dans l'historique du projet pour ce critère. La spec v1 ne contenait pas de modèle de données contractuel (regex, enum, contraintes) malgré les learnings injectés.
  • Dépassement plafond Gate 3 : Première occurrence dans le projet d'un dépassement du plafond 3 itérations à Gate 3 (précédent : IM-01 à Gate 8). Nécessite une procédure d'escalade claire.
  • Confusion normativeReference / citation documentaire : La distinction entre références structurées (avec §section) et citations documentaires (sans section) a créé des rejets successifs à Gate 3 v1 et v2. Cette nuance n'est pas couverte par les templates existants.
  • Dérogation Art. II (prompts > 30KB) : Gate 5 et Gate 8 ont requis une dérogation Article II car les prompts dépassaient 30KB, forçant OpenCode en mode agentic. Dérogation documentée dans les verdicts mais pattern récurrent non mitigé.
  • Spec v1 mal calibrée pour story documentaire contractuelle : Le template spec (conçu pour stories backend/app) n'impose pas de section "contrats de données" ni de définitions formelles d'enums. La spec doc a requis l'invention de ces sections.

5. Hypothèses révélées tardivement

  • H-06 (lien GAP-FINAL-004) — découverte à l'étape 3 (Gate v1) : La modalité exacte du lien tracable vers GAP-FINAL-004 (URL, identifiant d'audit, annexe) n'était pas spécifiée dans le besoin. Traitée comme NON TESTABLE (Q-252-05).
  • Plafond Gate 3 dépassable par escalade — découverte à l'étape 3 v3 : Le CONSTITUTIONAL.md prévoit l'escalade PO en cas de blocage au plafond, mais la procédure n'est pas documentée dans les skills. Elle a été appliquée implicitement.
  • Durées légales non validées juridiquement (H-03) — découverte à l'étape 1 : Les durées P10Y/P30Y/P5Y du besoin étaient présentées comme "validées" mais H-03 indique que la validation juridique externe reste à confirmer. Risque résiduel actif.

6. Invariants complexes

  • INV-252-06 (unicité des définitions en §5.1) — TC-NOM-06 : Risque de copier-coller de regex dans §3-§6. Nécessite vigilance active à la rédaction. Correctement respecté en v1 de l'implémentation.
  • INV-252-07 (modèle d'états avec transitions inverses interdites) — TC-NOM-07 : La complétude du tableau des transitions (toutes les transitions depuis COMPLETE/BITSTREAM/REJECTED = INTERDITES) a pris 3 itérations de spec pour être correctement contractualisée.
  • INV-252-05 (5 validations d'ingestion avec SHA3-384 explicite) — TC-NOM-05 : La clause de non-conformité technique (validations PLANIFIÉ ≠ déclaration de conformité) était absente de la spec v1. Anomalie E-01 (casse IMPLANTÉ vs IMPLEMENTE) est restée MINEURE.

7. Dette technique

Dette Impact Priorité
E-01 : IMPLANTÉ (accent) au lieu de IMPLEMENTE dans preservation-format-policy.md §5 Faible — typographie, sémantique identique Basse
E-02 : Artefact backtick (```) parasite ligne 324 Faible — rendu Markdown potentiellement affecté Basse
Q-252-05 (NON TESTABLE) : modalité exacte lien GAP-FINAL-004 Moyen — impact conditionnel si audit externe exige URL structuré Moyenne (post-PD-252)
Durées légales non validées juridiquement (H-03) Élevé — risque de non-conformité réglementaire Haute (équipe juridique)

8. Risques résiduels

Risque Type Probabilité Impact Mitigation
Auditeur exigeant URL structuré pour GAP-FINAL-004 (Q-252-05) métier faible moyen Documenter URL/ID lors du prochain audit ISO 14641 externe
Durées légales invalides si H-03 non tenue réglementaire faible élevé Validation juridique formelle à planifier avec équipe légale
E-02 (backtick parasite) causant rendu cassé dans MkDocs technique moyen faible Corriger en maintenance (non bloquant)

8bis. Matrice de délégation inter-PD

Story Direction Statut Nature de la dépendance Problème rencontré
PD-244 ← dépend de DONE Source de GAP-FINAL-004 (audit ISO 14641) RAS — tracabilité correcte
PD-NEW → génère TODO Implémentation validation PDF/A (VeraPDF) Story non créée — statut PLANIFIÉ documenté dans policy §5
PD-NEW → génère TODO Implémentation scan malware (ClamAV) Story non créée — statut PLANIFIÉ documenté dans policy §5

8ter. Bugs de tests

Aucun bug de test rencontré. PD-252 est une story documentaire pure. Tous les tests sont des revues documentaires structurées (checklist) — pas de tests unitaires/intégration.


8quater. Corrections post-Gate 8

Aucune correction post-Gate 8 requise. Les 2 écarts MINEURS (E-01, E-02) sont des dettes de forme, non bloquantes pour la conformité normative.


9. Patterns récurrents détectés

9.1 Patterns confirmés (déjà vus dans d'autres stories)

  • Dérogation Art. II prompts > 30KB — aussi dans PD-283 (Gate 8), IM-01 (Gate 8) : Les stories avec beaucoup d'artefacts dépassent le seuil d'OpenCode/ChatGPT. Pattern structurel non résolu. Le claude -p comme reviewer principal est la dérogation acceptée.
  • Gate 8 GO en v1 malgré Gate 3 difficile — aussi dans PD-278, PD-280 : La Gate 3 sert de filtre dur pour la spec. Une spec bien construite (même après 4 itérations) guide une implémentation propre. Le coût Gate 3 est un investissement.
  • ECT domination en début de workflow — pattern systémique (21 stories) : La complétude et la testabilité sont les critères les plus difficiles à satisfaire à Gate 3. Le modèle de données contractuel (§5.1) est la zone la plus sensible.

9.2 Nouveaux patterns identifiés

  • Spec v1 completeness 3.0 : seuil d'alarme : Une spec documentaire qui ne contractualise pas ses données (pas de regex, enum, contraintes) peut tomber à completeness 3.0/10. Le template spec doit exiger une section "contrats de données" pour TOUTE story avec des champs structurés (même doc).
  • Documentation contractuelle ≠ documentation narrative : PD-252 a révélé deux catégories distinctes de stories doc :
  • Narrative : descriptions de process, guides (→ Gate 3 facile, PD-281 : 8.938 en v1)
  • Contractuelle : politiques avec regex/enum/états/matrices (→ Gate 3 difficile, PD-252 : 4.5 en v1) Le discriminant est la présence de modèles de données formels. Les stories contractuelles doivent être traitées comme des stories techniques niveau spec.
  • Plafond Gate 3 atteint → escalade PO : Première occurrence à Gate 3 (vs. IM-01 qui l'a atteint à Gate 8). La procédure d'escalade a fonctionné implicitement mais n'est pas documentée dans les skills /gov-gate. À formaliser.

10. Améliorations du workflow

10.1 Améliorations des prompts/templates

Fichier Amélioration suggérée Priorité
templates/prompts/1-specification.md Ajouter une section obligatoire "Contrats de données" pour toute story avec des champs structurés (regex, enum, contraintes). Inclure la distinction normativeReference vs citations documentaires pour les stories doc. Haute
templates/prompts/3-specification-review.md Ajouter un critère de revue spécifique : "Les modèles de données (regex, enum) sont-ils définis une seule fois et référencés ailleurs ?" Haute
templates/outputs/governance-metrics.yaml Ajouter un champ story_type: narrative|contractual pour distinguer les deux catégories de stories doc Moyenne

10.2 Améliorations des agents

Agent Amélioration suggérée Justification
Agent spec (step 1) Détection automatique du type de story doc (narrative vs contractuelle) et adaptation du template Gate 3 v1 completeness 3.0 dû à l'absence de modèle de données
Agent doc-writer (step 6) Checklist de validation unicité des définitions (scan §3-§6 pour redéfinitions de regex/enums) INV-252-06 risque moyen

10.3 Améliorations du processus

  • Formaliser la procédure d'escalade Gate plafond dans le skill /gov-gate : définir explicitement les actions possibles (escalade PO, corrections orchestrateur, abandon), les conditions de dérogation et le format de trace dans WORKFLOW-STATE.md.
  • Seuil d'alarme Gate 3 completeness < 5.0 : Déclencher automatiquement une revue de la spec par l'orchestrateur avant de relancer la Gate (économise 1-2 itérations).
  • Validation pré-soumission Gate 3 pour stories doc contractuelles : Vérifier la présence d'une section "contrats de données" (regex, enum, comportement si invalide) avant de soumettre à Gate 3. Similaire au /gov-check-plan pour Gate 5.
  • Budget temps Gate 3 variable par type de story : L'estimation 1h pour Gate 3 est adaptée aux stories narratives. Les stories contractuelles (doc avec modèles de données) doivent être estimées à 2-4h de Gate 3 dès le départ.

11. Enseignements clés

  1. Stories doc contractuelles = stories techniques — Les politiques avec regex/enum/états-transitions doivent être traitées comme des stories backend niveau spec. Le template et les estimations de Gate 3 doivent être adaptés. Indicateur : présence de données structurées dans le besoin.

  2. Le plafond Gate 3 est franchissable par escalade — 4 itérations (dépassant le plafond de 3) ont permis de passer de NON_CONFORME 4.5 à RESERVE 7.875. L'escalade PO est le mécanisme correct. La v4 avec corrections manuelles de l'orchestrateur est une dérogation acceptable documentée.

  3. Spec solide → implémentation zéro-divergence — PD-252 démontre qu'une spec bien construite (même à coût élevé : 4 itérations Gate 3) garantit une implémentation propre (31/31 tests PASS, Gate 8 GO v1). ROI : le temps investi en Gate 3 est rentabilisé en Gate 8.

  4. Dérogation Art. II (prompts > 30KB) : pattern structurel — Récurrent dans les stories avec de nombreux artefacts. Solution palliative (claude -p comme reviewer) mais non définitive. Une stratégie de chunking ou de résumé des artefacts pour maintenir les prompts < 30KB serait à explorer.

  5. Modèle de données = source unique de vérité — INV-252-06 (§5.1 source unique) est l'invariant le plus critique des stories contractuelles. Sa violation (copier-coller de regex) est invisible à la Gate 3 mais cause des incohérences lors des évolutions. À contractualiser systématiquement dans les stories avec données structurées.


12. Métriques cumulatives (auto-calculées)

Métrique Cette story Moyenne projet (21 stories) Tendance
Temps total ~12h ~6.3h ↑ (story doc contractuelle plus lente que moyenne)
Itérations gates 6 (3+5+8) 5.43 → (légèrement au-dessus)
Écarts totaux 26 ~23.6
Score convergence moyen 8.21/10 8.45/10 ↓ (Gate 3 difficile pèse sur la moyenne)
Gate 8 score 8.75/10 ~8.5/10

Produit dans le cadre du workflow de gouvernance ProbatioVault — Étape 9 (REX) — PD-252 — 2026-03-11