PD-295 — Rapport de confrontation (Étape 3)¶
Ce rapport est produit par l'orchestrateur Claude avant chaque gate PMO.
Il confronte les documents produits pour identifier convergences, divergences et zones d'ombre.
1. Sources confrontées¶
PD-295-specification.md(cycle 3 v1)PD-295-tests.md(cycle 3 v1)
2. Convergences¶
- Contrat global B1..B5 cohérent entre spec et tests (B1 indexation veille, B2 clarifications non-PII, B3 scoring, B4 promotion/éviction, B5 injection).
- Contrat HMAC/JCS v3 convergent, avec couverture explicite des vecteurs V1/V4/V6/V8 (
CA-295-05↔TC-NOM-06). - Fail-closed B5 aligné sur échec d’écriture de trace (
EMPTY_BLOCK) et borne de profondeur (INV-295-17↔TC-ERR-13,TC-NEG-17). - Triplet
count_configured/count_effective/under_corpusconvergent (INV-295-11,CA-295-08↔TC-NOM-08,TC-NEG-15). - Formule
reuse_score(arrondi 4 décimales, écrêtage0.9999) convergente (INV-295-13↔TC-NOM-07). - Filtrage des lignes d’état non signées + compteur
ERR-295-UNSIGNED_ENTRYconvergent (INV-295-STATE-01..03,CA-295-STATE-01↔TC-STATE-01,TC-ERR-18). - Machines d’état
learning.scopeetclarification.lifecycle_statealignées avec les tests de transitions (§5.9↔TC-NOM-11..14,TC-NEG-06/07,TC-ERR-15). - Contrôle méta Gate 8 sur scripts
measure-cs1..4.shconvergent (INV-295-16,CA-295-15↔TC-NOM-17,TC-META-01..04,TC-ERR-17). - Exclusion backup + purge historique convergentes (
INV-295-BACKUP-01,CA-295-BACKUP-01↔TC-NOM-21).
3. Divergences¶
⚠️ Les conflits ne doivent JAMAIS être lissés. Chaque divergence est rendue visible.
-
DIV-01 : Référentiel de briques incohérent sur la signature d’état.
Source A (Spécification) : contrat limité àB1..B5(objectif + enumbrick).
Source B (Tests) : section## 6. Tests signature d’état B7.
Impact : traçabilité contractuelle cassée (briqueB7non définie dans la spec). -
DIV-02 : Attribution de l’isolation runtime au mauvais bloc dans les tests.
Source A (Spécification) : isolation verbatim contractualisée en B2 (INV-295-RUNTIME-01..03, flux nominal B2).
Source B (Tests) : section## 5. Tests runtime B5 (subprocess verbatim)alors que les scénarios décriventb2-sanitizer.py.
Impact : ambiguïté de périmètre (ownership B2 vs B5) lors du verdict QA/PMO. -
DIV-03 : Écart sur l’attendu
ERR-295-HMAC_VERIFICATION_FAILED.
Source A (Spécification) :ligne/trace rejetée.
Source B (Tests) :trace rejetée + alerte(TC-ERR-12).
Impact : verdict potentiellement divergent selon que l’alerte est obligatoire ou non. -
DIV-04 : Dérive horloge >500 ms non spécifiée de façon opérationnelle dans la spec, mais imposée en test.
Source A (Spécification) : borneclock_drift_max=500 mssans erreur dédiée ni réponse explicite fail-closed dans la table d’erreurs/guards.
Source B (Tests) :TC-NEG-10attendfail-closed.
Impact : implémentation et conformité non déterministes sur ce cas.
4. Zones d'ombre¶
- Les points
Q-295-01,Q-295-02,Q-295-05,Q-295-06restent ouverts dans la spec et ne sont pas fermés par le plan de tests. INV-295-09impose “aucune relecture Vault en session”, mais les tests couvrent surtout KO/format au démarrage; pas d’oracle explicite sur la non-relecture en cours de session.D-295-32précise init/reset/isolement defail_closed_depth(threading.local), mais la couverture explicite porte surtout sur la borne 3→4 (TC-NEG-17).CA-295-12inclut le clearingMEMORY_DEGRADEDpuisMEMORY_HEALTHYaprès 2 cycles conformes; aucun scénario dédié ne formalise cette transition.TC-NR-02(“step0 sans mémoire dispo continue sans crash”) reste ambigu face aux cas fail-closed bloquants de la spec (ERR-295-AUDIT_KEY_UNAVAILABLE/SystemExit).
5. Recommandation¶
- Procéder — convergence confirmée, aucun conflit bloquant
- Rework nécessaire — divergences à résoudre avant de continuer
- Escalade — décision humaine requise sur un point structurant