Aller au contenu

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 — Spécification (cycle 2 v3)
  • PD-295-tests.md — Tests (cycle 2 v3)

2. Convergences

  • Alignement global sur le périmètre B1..B5, fail-closed, audit HMAC JCS, RGPD et isolation runtime B2 (Spec §1-2, §4 ; Tests §2, §5-6).
  • Alignement sur le contrat B5 count_configured=5/3/3, count_effective=min(...), under_corpus, trace signée avant retour, EMPTY_BLOCK si échec d’écriture (Spec INV-295-10/11, §5.6, CA-295-07/08 ; Tests TC-NOM-08, TC-ERR-13, TC-NEG-15).
  • Alignement sur la borne récursive fail-closed (depth<=3 accepté, depth=4 abort + erreur dédiée) (Spec INV-295-17, D-295-32 ; Tests TC-NEG-17, TC-ERR-19).
  • Alignement sur la stabilité de clé Vault pendant la session /gov et arrêt process si indisponible/invalide au chargement (Spec INV-295-09, §5.2.4, CA-295-06/22 ; Tests TC-ERR-10/11, TC-NOM-23).
  • Alignement sur scoring reuse_score (formule, 4 décimales, écrêtage 0.9999, interdiction 1.0000) (Spec INV-295-13, §5.7, CA-295-09 ; Tests TC-NOM-07, TC-NOM-10).
  • Alignement sur états learning.scope et clarification.lifecycle_state + blocage des transitions interdites (Spec INV-295-LS-01..12, INV-295-CL-01..08, §5.11 ; Tests TC-NOM-11/12/13/14, TC-ERR-15, TC-NEG-06/07).
  • Alignement sur signatures des fichiers d’état, filtrage des entrées non signées, compteur ERR-295-UNSIGNED_ENTRY, migration/rotation (Spec INV-295-STATE-01..05, §5.15 ; Tests TC-STATE-01/02/03, TC-ERR-18).
  • Alignement sur Gate 8 méta (présence + exécutable de measure-cs1..4.sh) et campagnes post-merge CS-1..CS-4 (Spec INV-295-16, CA-295-15..19 ; Tests TC-META-01..04, TC-NOM-17, TC-NOM-18-A/B/C/D).

3. Divergences

⚠️ Les conflits ne doivent JAMAIS être lissés. Chaque divergence est rendue visible.

  • DIV-01 : Nom du champ de signature des événements audit non unifié.
    Source A (SPEC) : D-295-11 définit signature_hmac_sha256 pour les événements audit.
    Source B (TESTS) : observabilité §12 exige sig_hmac_sha256 pour le schéma v3.
    Impact : incompatibilité possible entre producteurs/validateurs de traces (rejets ou faux négatifs QA).

  • DIV-02 : Comportement attendu pour ERR-295-HMAC_VERIFICATION_FAILED plus strict côté tests.
    Source A (SPEC) : §6 indique « ligne/trace rejetée ».
    Source B (TESTS) : TC-ERR-12 exige « trace rejetée + alerte ».
    Impact : critère d’acceptation non déterministe (implémentation conforme SPEC potentiellement non conforme TESTS).

  • DIV-03 : Chemins de scripts d’écriture signée et hook non alignés.
    Source A (SPEC) : scripts/lib/write-signed-state.py obligatoire (INV-295-STATE-03, §5.15) et scripts/lib/story-hooks.sh (§5.8).
    Source B (TESTS) : §1 référence lib/write-signed-state.py et lib/story-hooks.sh; TC-STATE-03 cite write-signed-state.py.
    Impact : ambiguïté d’exécution des tests et risque de valider un chemin non contractuel.

  • DIV-04 : Critère de tri de /morning étendu dans les tests.
    Source A (SPEC) : CA-295-13 impose « 3 lignes score=X.XXXX ».
    Source B (TESTS) : TC-NOM-10 exige en plus un « tri stable ».
    Impact : risque de rejet QA sur un comportement non explicitement contracté dans la SPEC.

4. Zones d'ombre

  • La SPEC impose TERM=dumb pour le subprocess B2 (§5.3), mais aucun test dédié ne vérifie explicitement ce point (Tests runtime couvrent surtout CLAUDE_DISABLE_SESSION_LOG=1).
  • La SPEC impose, en cas de clé indisponible, une tentative d’alerte signée avec dernière clé valide sinon UNSIGNED_DEGRADED (INV-295-09, §5.6.9/10) ; les tests valident l’arrêt process mais ne distinguent pas explicitement ces deux branches.
  • INV-295-RUNTIME-04 demande que le hash du commit DPO soit référencé dans le dépôt de conformité ; TC-NOM-24 vérifie fichier + commit/tag, mais la vérification explicite de la référence de hash reste implicite.
  • Le test TC-NOM-20 (hook sur 2 états) coexiste avec TC-NOM-22 (hook sur 3 états idempotent) sans positionnement explicite dans la matrice de couverture ; statut exact (complément ou reliquat) non explicité.

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 ```