PD-281 — Retour d'experience (REX)¶
1. Resume executif¶
| Metrique | Valeur |
|---|---|
| Objectif initial | Z-lint : discriminer state machine vs type/category dans Anchor enum + completer types Z manquants |
| Resultat obtenu | Conforme — Z-lint 9/9 PASS, 0 faux positif, 4 types Z ajoutes |
| Verdict final | GO (Gate 8 : 9.125/10, v1) |
| Tests contractuels | 33/33 scenarios documentes, Z-lint 9/9 PASS en execution reelle |
2. Metriques de convergence¶
2.1 Temps et iterations¶
| Etape | Duree estimee | Duree reelle | Iterations | Ecart |
|---|---|---|---|---|
| 0 - Besoin | 30 min | 28 min | 1 | -7% |
| 1 - Specification | 2h | 10 min | 1 | -92% |
| 2 - Tests | 1h | 6 min | 1 | -90% |
| 3 - Gate spec | 1h | 12 min | 1 | -80% |
| 4 - Plan | 1h | 9 min | 1 | -85% |
| 5 - Gate plan | 1h | 37 min | 2 | -38% |
| 6 - Implementation | 4h | 13 min | 1 | -95% |
| 7 - Acceptabilite | 2h | 3 min | 1 | -98% |
| 8 - Gate acceptabilite | 1h | 6 min | 1 | -90% |
| 9 - REX | 30 min | ~30 min | 1 | 0% |
| TOTAL | ~14h | ~2.5h | 11 | -82% |
Note : duree reelle = temps effectif d'execution (hors pause de ~2h53 entre Gate 5 v1 RESERVE et correction v2). Wall-clock total : ~4h47.
2.2 Scores de convergence par gate¶
| Gate | Score v1 | Score final | Delta | Iterations |
|---|---|---|---|---|
| Gate 3 | 8.94/10 | 8.94/10 | 0 | 1 |
| Gate 5 | 7.75/10 | 8.50/10 | +0.75 | 2 |
| Gate 8 | 9.13/10 | 9.13/10 | 0 | 1 |
2.3 Ecarts par categorie¶
| Categorie d'ecart | Gate 3 | Gate 5 | Gate 8 | Total |
|---|---|---|---|---|
| ECT (completude/testabilite) | 3 | 4 | 2 | 9 |
| DIV (divergence spec/impl) | 2 | 6 | 1 | 9 |
| AMB (ambiguite) | 4 | 5 | 1 | 10 |
| SEC (securite) | 1 | 0 | 1 | 2 |
| PERF (performance) | 0 | 0 | 0 | 0 |
| TOTAL ecarts | 10 | 15 | 5 | 30 |
Note : les ecarts sont comptes en cumul brut (avant reclassement confrontation). Apres confrontation Gate 8, 4 ecarts MINEUR retenus + 7 faux positifs rejetes.
3. Points fluides¶
Ce qui a bien fonctionne :
- Gate 3 GO en v1 (8.94/10) : la specification ChatGPT etait suffisamment precise pour passer la gate de conformite du premier coup. C'est la premiere story du projet
docavec ce resultat. - Gate 8 GO en v1 (9.13/10) : l'implementation a ete validee sans iteration supplementaire. Score le plus eleve des stories recentes.
- Step 6 en 13 min : l'implementation mono-agent sur un perimetre doc-only (Python/Shell/Z-notation) a ete tres rapide. Le scope reduit et le plan bien decompose ont permis une execution directe.
- Discrimination faux positifs LLM en acceptabilite : 7 faux positifs sur 12 ecarts ChatGPT rejetes en Gate 8, tous lies a l'application de grilles backend (Jest, .spec.ts, @Roles, REST) sur un projet doc-only. Le pattern de reclassement est desormais stabilise.
- Injection de learnings efficace : 3 learnings injectes (PD-250, PD-37, PD-35) ont evite des ecarts connus des l'etape 0.
4. Points difficiles¶
Obstacles rencontres (sans justification) :
- Gate 5 RESERVE v1 (7.75/10) : 3 ecarts a corriger (ECT-01 TimestampBatchStatus, AMB-01 normes, AMB-02 pseudo-code). Le pseudo-code du plan utilisait une cle entite seule au lieu du couple entite+colonne, et la decision sur TimestampBatchStatus vs BatchState n'etait pas alignee avec la spec.
- Divergence referentiel normes (Spec §5.1 vs filesystem) : la Spec liste des normes qui n'existent pas (
etsi-119-xxx,eidas,rgpd) et ignore des normes reelles (rfc-5054,pv-audit,pv-proof). Cet ecart, documente comme AMB-01r, n'a jamais ete corrige dans la Spec canonique. - Faux positifs LLM systematiques sur projets doc-only : ChatGPT applique des grilles d'evaluation backend (Jest, TypeScript, REST endpoints, Sonar) sur un perimetre Python/Shell/Z-notation. Le cout de tri des faux positifs est significatif.
- Reference epique jamais propagee : l'identifiant PD-217 est connu dans WORKFLOW-STATE.md mais reste "A clarifier" dans la Spec et "EPIC-XX" dans les Tests.
5. Hypotheses revelees tardivement¶
Hypotheses non explicites decouvertes en cours de workflow :
- Coexistence BatchState / TimestampBatchStatus dans RFC_3161.zed — decouverte a l'etape 4 (plan).
RFC_3161.zedcontenait dejaBatchStateavec les memes valeurs queTimestampBatchStatus. La decision d'ajouterTimestampBatchStatusexplicitement (conformement a la Spec §5.3) a ete prise en correction Gate 5. - Multi-enum par entite — decouverte a l'etape 4.
_collect_zlint_entities()ecrasait les enums precedents d'une meme entite. La modification pour stocker une liste d'enums par entite etait necessaire pour le filtre de discrimination. deposit.statusabsent des faits Prolog — confirme a l'etape 6 (C4). La branche conditionnelleDepositStatusn'a pas ete executee. Cela a leve la reserve des tests (TC-NOM-06/TC-NOM-07).
6. Invariants complexes¶
Invariants difficiles a implementer ou sensibles aux regressions :
- INV-281-01 (discrimination) — TC-NOM-01/02/03 : la discrimination status vs type/category necessitait un filtre sur le couple (entite, colonne) et non sur l'entite seule. Le pseudo-code du plan v1 etait incorrect sur ce point.
- INV-281-04 (non-regression Anchor entity) — TC-NOM-10, TC-NR-01 : la modification de
_collect_zlint_entities()risquait d'alterer le dictentitiesutilise pour les checks Anchor entity. Le mecanisme de separation des dicts a ete verifie par diff avant/apres. - INV-281-05 (idempotence) — TC-NOM-09 : le passage au multi-enum risquait d'introduire un non-determinisme si les valeurs n'etaient pas triees. Verifie par double execution.
7. Dette technique¶
Compromis acceptes et non bloquants :
- Spec §5.1 norm_id non alignee avec le filesystem — impact: faible. La Spec liste 3 normes inexistantes et omet 3 normes reelles. Le pipeline fonctionne sur les normes reelles. La mise a jour de la Spec canonique est hors perimetre PD-281.
- Coexistence BatchState / TimestampBatchStatus dans RFC_3161.zed — impact: faible. Deux types Z avec les memes valeurs coexistent. Le linter ne valide que les types references par
expected_z_type, donc pas de conflit fonctionnel. - Reference epique non propagee dans les documents canoniques — impact: faible. Cosmetique, ne bloque pas l'execution.
8. Risques residuels¶
| Risque | Type | Probabilite | Impact | Mitigation |
|---|---|---|---|---|
Ajout futur d'une entite exclue dans _z_enum_type_mappings | tech | faible | moyen | TC-NOM-04 en regression verifierait l'exclusion |
Conflit linter avec deux types Z identiques dans un .zed | tech | faible | faible | Le linter ne verifie que expected_z_type |
| Tests negatifs (TC-NEG-01 a TC-NEG-10) non executes en CI | ops | moyen | faible | Scenarios de design verifies par inspection |
8bis. Matrice de delegation inter-PD¶
| Story | Direction | Statut | Nature de la dependance | Probleme rencontre |
|---|---|---|---|---|
| PD-250 | <- depend de | DONE | Learning : machine a etats formelle — transitions autorisees ET interdites | RAS — learning injecte |
| PD-37 | <- depend de | DONE | Learning : verification independante = vraie independance | RAS — learning injecte |
| PD-35 | <- depend de | DONE | Learning : scaffolding DEV-ONLY code genere MAJEUR gaps | RAS — learning injecte |
8ter. Bugs de tests¶
Aucun bug de test rencontre. Le perimetre PD-281 est doc-only (Python/Shell/Z-notation) sans framework Jest/Vitest.
8quater. Corrections post-Gate 8¶
Aucune correction post-Gate 8 necessaire. Gate 8 GO en v1.
9. Patterns recurrents detectes¶
9.1 Patterns confirmes (deja vus dans d'autres stories)¶
- Format non contractualise dans spec v1 bloque en Gate 3 — aussi dans PD-32, PD-250, PD-264, PD-251, PD-277, PD-276, PD-275. Ici : le referentiel des 9 normes dans la regex Spec §5.1 ne correspondait pas au filesystem reel.
- Faux positifs LLM systematiques en reviews — aussi dans PD-251, PD-276, PD-277, PD-275. Ici : 7/12 ecarts ChatGPT rejetes car grilles backend appliquees a un projet doc-only.
- Stubs inter-PD acceptes en Gate 8 si documentes avec story destination — aussi dans PD-63, PD-82, PD-250, PD-251, PD-277, PD-276. Ici : la mise a jour de la Spec §5.1 (referentiel normes) est un stub documente, sans story destination explicite.
9.2 Nouveaux patterns identifies¶
- Projet doc-only : Sonar Phase 1.5 non applicable — PD-281 est le premier projet
docavec le workflow complet post-Phase 1.5 obligatoire. Sonar n'est pas pertinent pour les scripts Python/Shell de verification formelle. A surveiller pour les prochaines storiesdoc. - Grilles d'evaluation LLM inadaptees au perimetre doc-only — les prompts de review (7a/7b/7c) et de gate (8) appliquent systematiquement des criteres backend (Jest, TypeScript, REST, Sonar) aux projets doc-only. Pattern candidat a 1 occurrence, mais tres couteux en faux positifs.
- TimestampBatchStatus vs BatchState : types Z dupliques dans un meme
.zed— la coexistence de deux types Z avec les memes valeurs n'a pas cause de conflit, mais n'est pas contractualisee. A surveiller si le linter evolue.
10. Ameliorations du workflow¶
10.1 Ameliorations des prompts/templates¶
| Fichier | Amelioration suggeree | Priorite |
|---|---|---|
templates/prompts/7a Review Code.md | Ajouter une section "Projet doc-only" qui desactive les criteres Jest, TypeScript, REST, @Roles quand le projet cible est doc | haute |
templates/prompts/7b Review Tests.md | Desactiver l'exigence .spec.ts et Jest pour les projets doc-only (Python/Shell) | haute |
templates/prompts/7c Review Security.md | Reduire la surface d'attaque evaluee pour les projets doc-only (pas d'API REST, pas de surface reseau) | moyenne |
templates/prompts/8 Revue Acceptabilite.md | Ajouter un flag project_type: doc-only qui adapte les grilles de revue | moyenne |
templates/prompts/1 Specification.md | Contractualiser la liste nominale exacte des normes/entites cibles quand le perimetre est ferme | moyenne |
10.2 Ameliorations des agents¶
| Agent | Amelioration suggeree | Justification |
|---|---|---|
| Agent step 1 (spec ChatGPT) | Pour les stories doc-only, injecter la stack reelle (Python/Shell/.zed) au lieu de la stack backend par defaut | 7 faux positifs dus a la grille backend |
| Agent step 7 (reviews ChatGPT) | Injecter project_type: doc-only dans le system prompt pour conditionner les criteres d'evaluation | Cout de tri des faux positifs en acceptabilite |
10.3 Ameliorations du processus¶
- Phase 1.5 Sonar : detection automatique du type de projet : pour les projets
docsanssonar-project.properties, la Phase 1.5 devrait etre automatiquement marquee N/A au lieu de necessiter une justification manuelle. - Propagation de la reference epique : quand le WORKFLOW-STATE.md contient l'identifiant epique (PD-217), il devrait etre automatiquement injecte dans les prompts de spec et tests pour eviter les placeholders "A clarifier" / "EPIC-XX".
- Correction de la Spec canonique apres Gate 5 : quand une divergence documentaire (type AMB-01r) est identifiee en Gate 5 et que la correction est purement documentaire, l'orchestrateur devrait proposer une mise a jour de la Spec avant de continuer. Aujourd'hui, la Spec reste inchangee et la divergence est tracee mais jamais corrigee.
11. Enseignements cles¶
-
Les projets doc-only necessitent des grilles d'evaluation specifiques — les prompts de review ChatGPT appliquent des criteres backend (Jest, TypeScript, REST) qui generent 7/12 faux positifs. Le cout de reclassement est disproportionne par rapport au risque reel sur un perimetre Python/Shell.
-
Gate 3 GO en v1 est un marqueur de qualite de specification — PD-281 est la premiere story doc avec Gate 3 GO en v1 (8.94/10). L'injection de learnings (3 points) et la qualite de l'expression de besoin (etape 0 en 28 min) ont contribue a ce resultat.
-
Le filtre de discrimination doit operer au niveau du couple (entite, colonne) — le pseudo-code initial operait au niveau de l'entite seule, ce qui etait incorrect pour les entites multi-enum. L'ecart a ete detecte en Gate 5 (AMB-02) et corrige en v2. Enseignement : pour toute regle de filtrage multi-dimensionnelle, contractualiser la dimension la plus fine des l'etape 1.
-
La divergence documentaire non corrigee persiste — le referentiel des 9 normes dans la Spec §5.1 reste incorrect malgre la detection en Gate 5. Le processus ne prevoit pas de correction de la Spec canonique apres Gate 3 GO. A corriger dans le workflow.
-
Temps d'execution record sur projet doc-only — 2.5h effectives pour un workflow complet a 11 etapes. Le perimetre reduit (scripts Python, fichiers
.zed, configs YAML) et l'absence de complexite backend (pas de DB, pas d'API, pas de tests Jest) expliquent cette performance.
12. Metriques cumulatives (auto-calculees)¶
| Metrique | Cette story | Moyenne projet | Tendance |
|---|---|---|---|
| Temps total | 2.5h | 4.08h (4 dernieres) | ↓ |
| Iterations gates | 4 | 5.25 | ↓ |
| Ecarts totaux | 30 (bruts) / 4 (retenus) | 20.75 | ↓ |
| Score convergence moyen | 8.86/10 | 8.53/10 | ↑ |
Document genere le 2026-03-01. Story PD-281, projet ProbatioVault-doc, domaine legal-compliance.