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 2 v2, étape Spécification)PD-295-tests.md(cycle 2 v2, étape Tests)
2. Convergences¶
- Les deux documents convergent sur le périmètre contractuel B1..B5, le mode fail-closed et l’exclusion des changements de stack/hors-scope (Spec §1-2 ; Tests §1-2).
- Le contrat B5 est cohérent: cardinalités fixes
5/3/3, calculcount_effective, drapeauunder_corpus, et blocEMPTY_BLOCKen échec de trace signée (Spec INV-295-10/11, §5.6, CA-295-07/08 ; Tests TC-NOM-08, TC-ERR-13, TC-NEG-15). - L’audit HMAC canonique JCS est aligné, y compris la validation des vecteurs
V1..V8(Spec INV-295-06..08, §5.14, CA-295-05 ; Tests TC-NOM-06, TC-NOM-06-bis, TC-ERR-11/12). - Le traitement B2 (résumé non-PII validé, rejet sans persistance si PO=non, isolation runtime) est convergent (Spec INV-295-01/03, INV-295-RUNTIME-01..03 ; Tests TC-NOM-02/03, TC-ERR-14, TC-RUNTIME-01..03).
- Le scoring
reuse_score(formule, arrondi 4 décimales, écrêtage0.9999, interdiction1.0000) est cohérent (Spec INV-295-13, §5.7, CA-295-09 ; Tests TC-NOM-07, TC-NOM-10, TC-NEG-05). - Les machines à états
learning.scopeetclarification.lifecycle_statesont globalement alignées, y compris les transitions interdites (Spec §5.9, INV-295-LS-01..12, INV-295-CL-01..08 ; Tests TC-NOM-11/12/13/14, TC-ERR-15, TC-NEG-06/07). - Les contraintes Gate 8 méta (
measure-cs1..4.shprésents + exécutables) et la requalification post-merge deCA-295-16..19sont convergentes (Spec INV-295-16, CA-295-15..19 ; Tests TC-NOM-17, TC-META-01..04, TC-NOM-18-A/B/C/D, §12). - L’absence d’artefacts DDL SQL est alignée (Spec §5.10, CA-295-20 ; Tests TC-NOM-19, TC-NR-08).
3. Divergences¶
⚠️ Les conflits ne doivent JAMAIS être lissés. Chaque divergence est rendue visible.
- DIV-01 : Couverture annoncée de
INV-295-STATE-04non alignée avec le scénario testé. - Source A (spécification) :
INV-295-STATE-04impose une migration one-shot viascripts/sign-existing-state.pypour re-signer les entrées pré-B3 avant activation B3/B4/B5 (Spec INV-295-STATE-04, §5.4, §5.15). - Source B (tests) :
TC-STATE-02(référencé surINV-295-STATE-04) exécutescripts/rotate-audit-hmac.shet vérifie une rotation de cléN -> N+1, pas la migration one-shot pré-B3 (Tests §6, TC-STATE-02). -
Impact : preuve de conformité de
INV-295-STATE-04incomplète; risque d’activation B3/B4/B5 sans validation explicite de la migration historique requise. -
DIV-02 : Incohérence sur la forme attendue du payload runtime
verbatim_subprocess_invoked. - Source A (spécification) : le vecteur contractuel
V5placestory_idau niveau de l’événement, tandis quepayload_canoniquecontientdetail,duration_ms,subprocess_name,success(Spec §5.14, V5). - Source B (tests) :
TC-RUNTIME-03exige que le payload contienne{story_id, subprocess_name, duration_ms, success}(Tests §5, TC-RUNTIME-03). -
Impact : risque de faux négatifs QA (implémentation conforme aux vecteurs mais non conforme au test, ou inversement).
-
DIV-03 : Chemin de script writer d’état signé non homogène.
- Source A (spécification) : writer obligatoire
scripts/lib/write-signed-state.py; écriture manuelle viascripts/write-signed-state.py(Spec INV-295-STATE-03, §5.15). - Source B (tests) : scripts ciblés listent
lib/write-signed-state.py(sans préfixescripts/) (Tests §1). -
Impact : ambiguïté d’exécution/CI sur le binaire de référence; risque de test non exécutable ou pointant le mauvais chemin.
-
DIV-04 : Scénario de test hors contrat explicite de la spécification.
- Source A (spécification) : aucune exigence explicite
on_story_closeavec statutsREJECTED/DONE_WITH_ANOMALYpour déclencher une purge (absence de ce hook/statuts dans invariants/flux/erreurs/CA). - Source B (tests) :
TC-NOM-20impose ce comportement (on_story_closepurge dans les deux cas) (Tests §3). - Impact : extension implicite du scope côté tests; impossibilité d’arbitrer la conformité si le code suit strictement la spec sans implémenter ce hook.
4. Zones d'ombre¶
Q-295-01reste ouvert: référence épique détaillée (ID Epic interne final) non explicitée dans les tests.Q-295-02reste ouvert: chemin de livraison final non consolidé entre les documents.Q-295-05reste ouvert: validation DPO depii_ruleset_v1non matérialisée en preuve dans les tests.Q-295-06reste ouvert: contenu final du bloc d’orchestration{{LEARNINGS}}non contracté dans les scénarios de test (les tests vérifient la structure et les compteurs, pas le contenu final attendu).- Le clearing
MEMORY_DEGRADED -> MEMORY_HEALTHYaprès 2 cycles conformes est défini (Spec §5.12) et observable (Tests §11), mais aucun scénario dédié ne vérifie explicitement la transition de bout en bout.
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 ```