PD-295 — Rapport de confrontation (Gate 8 — Closure)¶
Ce rapport est produit par l'orchestrateur Claude avant la gate PMO 8. Il confronte les documents produits pour identifier convergences, divergences et zones d'ombre.
1. Sources confrontées¶
| Document | Etape | Version |
|---|---|---|
| PD-295-specification.md | Step 1 (specification canonique contractuelle) | Post-Gate 3 RESERVE |
| PD-295-tests.md | Step 2 (scenarios de tests contractuels) | Post-Gate 3 |
| PD-295-plan.md | Step 4 (plan d'implementation) | Post-Gate 5, resout reserves M-01/M-02/M-03/M-06 |
| PD-295-acceptability.md | Step 7 (acceptabilite) | Post-review Codex, 2 CRITICAL + 2 MAJOR corriges |
2. Convergences¶
-
C-01 — Perimetre B1..B5 : les 4 documents s'accordent sur les 5 briques fonctionnelles (veille-indexer, clarifications-store, scoring, lifecycle, injection unifiee). Aucun document n'introduit de brique supplementaire ni n'en omet une.
-
C-02 — Machine a etats scope : la FSM a 4 etats (STORY_ACTIVE, DOMAIN_ACTIVE, GLOBAL_ACTIVE, ARCHIVED) est identique dans la specification (§5.9, INV-295-TR-01..13), les tests (TC-NOM-16, TC-ERR-07, TC-ERR-11), le plan (§2.4 + scope_fsm.py) et l'acceptabilite (lifecycle valide avec 59 archives). Les transitions autorisees et interdites sont coherentes.
-
C-03 — Formule reuse_score : les coefficients 0.4/0.4/0.2 (INV-295-05) sont repris a l'identique dans les tests (TC-NOM-05 : L1=1.8, L2=1.0), le plan (§2.3 compute_reuse_score) et l'acceptabilite (303 learnings scores). Interpretation somme brute coherente entre plan (M-01) et tests.
-
C-04 — Seuils de promotion : 0.3 (story->domain) et 0.6 (domain->global) contractualises en spec (INV-295-09/10), testes (TC-NOM-09 bords 0.29/0.30/0.59/0.60), implementes au plan (§2.4 step 2) et valides en acceptabilite (lifecycle status).
-
C-05 — Eviction conjonctive : regle
age > 56 jours ET nb_injections == 0identique dans spec (INV-295-11), tests (TC-NOM-10 matrice 4 cas), plan (§2.4 step 3) et acceptabilite (59 archives). -
C-06 — Non-blocage step 0 : les 4 documents contractualisent le comportement non bloquant (INV-295-14/15, TC-NOM-13/14, TC-ERR-04/05/06, plan §2.5 step 6 try/except, acceptabilite mode degrade veille confirme).
-
C-07 — Stack technique : Python/FAISS/Ollama/nomic-embed-text/Markdown/YAML/JSONL. Aucun document n'introduit Swift, Spring ou autre technologie hors perimetre. Spec §10, tests TC-NOM-15/TC-NR-03, plan §1, acceptabilite 11 scripts Python.
-
C-08 — Exclusions : HMAC, Vault, JCS, PII, RGPD purge, rate-limit, reranker neural, BM25, knowledge graph, skill router, resumes hierarchiques — exclus uniformement (spec §2, tests TC-NR-04, plan §10, acceptabilite implicite).
-
C-09 — Cardinalites injection : 5/3/3 max pour learnings/veille/clarifications — spec (INV-295-13), tests (TC-NOM-12), plan (§2.5), acceptabilite (5 learnings retournes confirme).
-
C-10 — Verbatim brut clarifications : les 4 documents exigent la persistance sans resume ni filtrage (INV-295-03, TC-NOM-03, plan §2.2 step 2, acceptabilite implicite via review Codex).
3. Divergences¶
Les conflits ne sont JAMAIS lisses. Chaque divergence est rendue visible.
- DIV-01 — Index veille FAISS non teste en acceptabilite
- Specification (INV-295-01, INV-295-02) : B1 DOIT scanner les fiches, produire
veille.jsonlET generer embeddings + index FAISS. - Tests (TC-NOM-01) : attendent
veille.jsonl+ index FAISS veille produits. - Plan (§2.1 steps 6-7) : embeddings Ollama + FAISS
IndexFlatIP768 dim. - Acceptabilite :
index-veille (Ollama requis) : Non teste — Ollama sur IA-Server non lance pendant la session. Seulcollect-veille(127 fiches JSONL) est valide. -
Impact : le flux complet B1 (JSONL + embeddings + FAISS) n'est valide qu'a 50%. La recherche semantique veille n'a pas ete exercee. Le mode degrade (grep fallback) a ete valide implicitement mais pas le flux nominal.
-
DIV-02 — Fallback grep veille sans filtres impact/verdict (M-3 accepte)
- Specification (§5.8 step 2) : recuperation veille avec
impact_pv in {fort, modere}. - Plan (§2.5 step 3) : filtre post-KNN
impact_pv in {fort, modere}. Test TC-PLAN-04 prevu pour couvrir ce filtre. - Acceptabilite : M-3 accepte comme ecart residuel — le fallback grep n'applique pas
--impact/--verdict. Justification : mode degrade exceptionnel, outil interne. -
Impact : en mode degrade (Ollama down), les fiches
impact_pv=faibleouimpact_pv=aucunpeuvent etre injectees dans le step 0, contrevenant a l'intention du filtre spec. L'impact reste faible (outil interne, mode degrade rare). -
DIV-03 — Validation dimension embedding non implementee (M-5 accepte)
- Specification (§5.2) :
embedding_dimension = 768fixe, hors bornes =Indexation rejetee. - Tests (TC-NEG-05) : dimension != 768 doit etre rejetee avec erreur explicite et index non publie.
- Plan (§2.1 step 6) :
raise ValueErrorsi dimension != 768. - Acceptabilite : M-5 accepte — pas de validation dimension avant
faiss.search. Justification : coherence avec codebase existante (index-learnings.pymeme pattern). -
Impact : si Ollama retourne un modele avec dimension != 768 (changement de modele, mise a jour), l'index sera corrompu silencieusement. Risque faible en pratique (modele fixe
nomic-embed-text), mais le test TC-NEG-05 serait en echec. -
DIV-04 — Index publie avec vecteurs zero si Ollama down (M-7 accepte)
- Specification (INV-295-15) : si source echoue, section vide + stderr, sans blocage.
- Plan (§2.1 steps 6-7) : embeddings Ollama, dimension 768, FAISS.
- Acceptabilite : M-7 accepte — index publie avec vecteurs zero quand Ollama down. Justification : meme pattern que
index-learnings.py, index regenere parreindex-all.py. -
Impact : un index avec vecteurs zero degrade les resultats KNN (faux positifs de similarite). Non bloquant pour step 0 (l'injection continue), mais la qualite des resultats veille est compromise jusqu'au prochain
reindex-all.py. Distinct de DIV-01 : ici l'index est publie mais avec des donnees degradees. -
DIV-05 — Scores tous a 0.0 — B3 non exerce avec donnees reelles
- Tests (TC-NOM-05) : dataset deterministe L1=1.8, L2=1.0.
- Plan (§2.3) : formule brute testable.
- Acceptabilite :
303 scores calcules — tous a 0.0 (normal, #28 pas encore utilise). -
Impact : la formule est implementee mais n'a ete validee qu'avec le cas trivial (zero injections = score 0.0). Les cas non triviaux (injections reelles, gate8 GO, multi-domaines) n'ont pas ete exerces en conditions reelles. Les promotions (seuils 0.3/0.6) n'ont donc pas ete declenchees en environnement reel.
-
DIV-06 — Sonar Phase 1.5 non applicable
- Procedures CLAUDE.md :
Scan Sonar local OBLIGATOIRE [...] Phase 1.5 est BLOQUANTE. - Acceptabilite :
Non applicable : projet Python scripts internes, pas de projet SonarQube configure. -
Impact : derogation structurelle documentee. La qualite est assuree par review Codex (Phase 2). Coherent avec le contexte du projet (scripts Python CLI, pas de CI, pas de SonarQube).
-
DIV-07 — Clarifications : filtre exact vs KNN (plan H-02 vs spec §5bis)
- Specification (diagramme §5bis) : montre un appel KNN FAISS pour les clarifications (
CLR -> OLL -> FAI). - Plan (§2.5 step 4, H-02) : filtre exact
{domain, project}+ tri recence, pas de KNN. Index FAISS construit pour usage futur mais non utilise au step 0. - Tests (TC-NOM-04) : teste l'indexation FAISS clarifications + recherche, sans preciser si KNN ou filtre exact.
- Acceptabilite : ne mentionne pas explicitement le choix filtre exact vs KNN.
- Impact : ecart deja traite en Gate 5 (reserve M-02 resolue par le plan). Le diagramme spec §5bis est documente comme "stylise". Le filtre exact est plus robuste (pas de dependance Ollama pour les clarifications). Divergence resolue par decision de plan, mais le diagramme spec reste incoherent avec l'implementation.
4. Zones d'ombre¶
-
ZO-01 — Regles non testables persistantes : les tests §9 identifient 4 regles non testables (tie-break final, enum
project, baseline CS-1, procedure ARCHIVED manuelle). Aucun document ulterieur ne les resout. La specification (Q-295-03) et le plan (§10) les documentent comme dette acceptee. Le tie-break est partiellement resolu par le plan (INV-plan-08 : tri tertiairedate_createddesc), mais le cassimilarite + score + datetous egaux reste non deterministe. -
ZO-02 — Tests plan (TC-PLAN-01..05) non mentionnes en acceptabilite : le plan introduit 5 tests supplementaires (canonicalisation tags_hash, atomicite JSONL, score absent=0.0, filtre impact_pv, tiebreak date). L'acceptabilite ne mentionne pas leur execution. Le plan les prevoit comme tests unitaires (pytest + fixtures) mais la wave 5 (tests) n'est pas documentee en acceptabilite.
-
ZO-03 — Invariants plan (INV-plan-03..09) non traces en acceptabilite : le plan ajoute 5 invariants (canonicalisation tags_hash, atomicite JSONL, score absent=0.0, tiebreak date, base d'age). L'acceptabilite ne les mentionne pas explicitement. La review Codex (Phase 2) a couvert le code mais sans reference aux invariants plan.
-
ZO-04 — Reentrancy clarifications non testee : le plan (§2.2 step 3, H-06) prevoit la creation de fichiers horodates
PD-XXX-clarifications-{ts}.mden cas de reexecution step 0. Aucun test (TC-*) ne couvre ce cas. L'acceptabilite ne le mentionne pas. -
ZO-05 — Normalisation L2 embeddings FAISS : le plan (§9 point de vigilance) mentionne que
IndexFlatIPnecessitefaiss.normalize_L2avant insertion. Aucun test ne verifie que la normalisation est effectivement appliquee. L'acceptabilite ne mentionne pas ce point (index FAISS veille non teste, cf. DIV-01). -
ZO-06 — Backfill
date_created: le plan (H-03) prevoit un script one-shot de backfilldate_created = datepour les learnings anterieurs. Ce script n'est pas mentionne dans la decomposition ni dans l'acceptabilite. Si non execute, le fallback sur D-295-12datesera systematique pour le corpus historique.
5. Recommandation¶
- Proceder — convergence confirmee, aucun conflit bloquant
- Rework necessaire — divergences a resoudre avant de continuer
- Escalade — decision humaine requise sur un point structurant
Justification : les 10 convergences couvrent l'essentiel du contrat fonctionnel (FSM, formule scoring, seuils, non-blocage, stack, exclusions, cardinalites). Les 7 divergences identifiees se repartissent en : - 3 ecarts residuels acceptes par coherence codebase (DIV-02 M-3, DIV-03 M-5, DIV-04 M-7), tous documentes et justifies en acceptabilite - 1 flux non teste par contrainte d'environnement (DIV-01 index FAISS veille, Ollama non disponible) - 1 scoring non exerce en conditions reelles (DIV-05, structural — #28 pas encore utilise) - 1 derogation structurelle documentee (DIV-06 Sonar) - 1 divergence deja resolue en Gate 5 (DIV-07 filtre exact clarifications)
Les zones d'ombre (ZO-01..06) sont principalement des dettes documentaires mineures ou des cas limites non testables, sans impact bloquant sur la livraison. La decision finale revient au PMO.