PD-295 — Review spécification (Gate 3, cycle 2 v3)¶
Auditeur : Gate 3 indépendant. Portée : PD-295-specification.md (cycle 2 v3) + vérification de cohérence avec PD-295-tests.md (cycle 2 v3). Mode : constat uniquement. Aucune proposition d'implémentation, aucune reformulation.
1. Ambiguïtés¶
A-01 — Statut de la clé HMAC "au moment critique" vs clé chargée une fois par session¶
- Type : Ambiguïté
- Référence : spec §5.2.4 + §5.6 step 10 + INV-295-09
- Description : §5.2.4 contractualise que la clé HMAC est chargée une fois au démarrage de la session et « reste immuable jusqu'au prochain démarrage ». §5.6 step 10 introduit toutefois une branche « Si clé audit indisponible/invalide au moment critique » avec une distinction « dernière clé valide en mémoire » vs « aucune clé valide ». Le cadre d'occurrence réel de cette branche n'est pas défini : mémoire corrompue ? unset volontaire ? rotation non autorisée intra-session ?
- Impact : comportement non reproductible, chemin d'erreur
audit_key_unavailable_fatalsans déclencheur observable, impossible à tester de manière déterministe. - Gravité : Majeur
A-02 — count_configured 5/3/3 non mappé explicitement dans INV-295-11¶
- Type : Ambiguïté
- Référence : INV-295-11 + §5.7 + §5.9
- Description : INV-295-11 impose « count_configured à 5/3/3 » sans dire quelle valeur s'applique à quelle source. Le mapping n'est lisible qu'en croisant §5.7 (top_k par source) et §5.9 (template). Un lecteur qui ne lit que §4 ne peut pas vérifier la règle.
- Impact : règle ancrée dans un invariant non négociable mais dont la vérification exige la lecture de 2 autres sections.
- Gravité : Mineur
A-03 — "buffer mémoire Python et pipes OS" vs "pipe + buffer Python"¶
- Type : Ambiguïté
- Référence : INV-295-RUNTIME-02 + §5.3 step 3 + §5.3.3
- Description : INV-295-RUNTIME-02 contractualise « buffers mémoire Python ET pipes OS (
os.pipe) ». §5.3 step 3 parle de « buffer mémoire (pipe+ buffer Python) ». §5.3.3 décrit un flux à 2 subprocess imbriqués sans préciser sios.pipeest obligatoire ou sisubprocess.PIPE(stdlib) suffit. Les 3 formulations ne se recouvrent pas strictement. - Impact : contrat runtime non déterministe pour l'implémenteur et pour le reviewer Gate 8 ; empêche une vérification objective.
- Gravité : Majeur
A-04 — ERR-295-FAIL_CLOSED_DEPTH_EXCEEDED "alias legacy" sans scope de compatibilité¶
- Type : Ambiguïté
- Référence : §6 table d'erreurs
- Description : l'entrée
ERR-295-FAIL_CLOSED_DEPTH_EXCEEDEDest déclarée « alias legacy non émis en v3 | compat lecture historique ». Aucune section ne dit quel parseur doit encore accepter cet alias, ni dans quels fichiers historiques il apparaîtrait (schéma v1/v2 non documenté ici). - Impact : règle sans observable ; non testable.
- Gravité : Mineur
A-05 — "purge sécurité 24h" vs "strict à date > retention_until"¶
- Type : Ambiguïté
- Référence : INV-295-05 + §5.10 ligne
purge cron - Description : INV-295-05 impose « purge rétention strictement à
date > retention_until». §5.10 indique un cron 24h. La fenêtre maximale effective entre expiration et purge observable n'est pas contractualisée (peut atteindre ~24h). - Impact : un enregistrement peut rester visible jusqu'à 24h après expiration, sans qu'aucune règle de §5 ne borne explicitement ce retard. Ambiguïté sur la promesse RGPD effective.
- Gravité : Majeur
2. Contradictions¶
C-01 — fail_closed_depth borne 0..3 vs 0..4¶
- Type : Contradiction
- Référence : INV-295-17 + D-295-32 + §5.6 step 8/9 + §5.7 (
fail_closed_depth_max_accepted=3,fail_closed_depth_abort=4) - Description : INV-295-17 dit « autorisé jusqu'à 3 inclus ; tentative de 4e fail-closed (
depth=4) => arrêt ». D-295-32 dit « entier 0..4 ; 4 atteignable uniquement à l'instant de l'abort récursif ». §5.6 step 8 incrémente puis teste<=3. Le contrat est consistant seulement si on lit que la valeur 4 est un état transitoire d'abort ; aucun invariant ne le dit en toutes lettres. La distinction « valeur acceptée » vs « valeur atteinte » n'est pas nommée. - Impact : risque de divergence d'implémentation sur la borne supérieure (
<=3vs<4vs<=4). - Gravité : Mineur (formel), Majeur si implémentation divergente
C-02 — Lock learnings.jsonl exigé mais corpus immuable¶
- Type : Contradiction
- Référence : INV-295-14 + TC-NR-04 + §5.4 step 1
- Description : INV-295-14 rend le
flockobligatoire surlearnings.jsonl. TC-NR-04 contractualise « B3 n'altère paslearnings.jsonl». §5.4 ne liste qu'une lecture. Si le fichier est strictement en lecture par B3, un write-lock n'est pas justifié, et un read-lockflockne protège rien contre une écriture externe non coordonnée. - Impact : contrainte qui ne protège pas l'invariant qu'elle est censée protéger ; confusion sur la surface d'écrivains légitimes.
- Gravité : Majeur
C-03 — H-295-04 "dérive horloge <=500ms" vs TC-NEG-10 testant la violation¶
- Type : Contradiction (hypothèse vs comportement testé)
- Référence : §9 H-295-04 + §5.7
clock_drift_max+ TC-NEG-10 - Description : §9 formalise la dérive <500 ms comme hypothèse environnementale (« si faux, idempotence/rate-limit fragiles »). TC-NEG-10 traite la dérive >500 ms au moment de la trace comme un cas négatif à fail-closed. Une règle testée n'est plus une hypothèse : c'est un invariant implicite de runtime, mais aucun INV- ne le porte, aucun
ERR-dédié n'est défini, et le comportement exact (quel composant mesure ? quelle horloge ?) n'est pas spécifié. - Impact : un comportement critique (rate-limit/idempotence) repose sur une hypothèse non invariantisée mais testée — statut contradictoire.
- Gravité : Majeur
C-04 — CS-2 cible numérique vs CS-1/CS-3/CS-4 sans cible¶
- Type : Contradiction (critère d'acceptation)
- Référence : CA-295-16, CA-295-17, CA-295-18, CA-295-19
- Description : CA-295-17 porte une cible explicite
>=30%. CA-295-16/18/19 n'ont aucune cible numérique : la CA est satisfaite par la simple production d'un rapport horodaté, indépendamment de la valeur mesurée. Incohérence interne sur le niveau d'exigence contractuelle des 4 compounding signals. - Impact : 3 CA sur 4 sont non falsifiables — satisfaites par tautologie si le script ne crashe pas.
- Gravité : Majeur
C-05 — Événement audit_key_unavailable_fatal signé avec clé absente¶
- Type : Contradiction
- Référence : §5.6 step 10 + §5.14 enum
event_type - Description : le chemin décrit tente de signer un événement
audit_key_unavailable_fatalavec « la dernière clé valide en mémoire ». Si §5.2.4 est respecté, il existe exactement une clé de session, non relue. Le cas « clé invalide au moment critique mais dernière clé valide encore en mémoire » décrit deux états simultanés incompatibles (la clé est ou n'est pas celle de la session). - Impact : chemin d'erreur décrit mais logiquement inatteignable sous §5.2.4 ; ou alors §5.2.4 est violé et l'invariant d'immutabilité de clé tombe.
- Gravité : Majeur
3. Règles non testables¶
NT-01 — INV-295-02 "destruction en sortie de phase 1 bis" en boîte noire¶
- Type : Non testable
- Référence : INV-295-02 + TC-INV-02
- Description : l'invariant impose la destruction du verbatim en mémoire volatile. TC-INV-02 repose sur
check-no-verbatim-persisted.shqui ne vérifie que l'absence de persistance disque. La destruction effective (zeroization, écrasement du buffer) n'est pas observable en boîte noire et aucun observable de remplacement n'est contractualisé. - Impact : la partie « destruction » de l'invariant ne peut pas être prouvée, seulement la partie « non-persistance ».
- Gravité : Mineur
NT-02 — "stdout/stderr redirigés vers buffer mémoire, jamais fichier"¶
- Type : Non testable
- Référence : INV-295-RUNTIME-01 + TC-RUNTIME-01..03
- Description : les tests runtime vérifient l'absence d'UUID sentinelle sur disque et l'absence d'enregistrements dans
data/sessions/*.jsonl. Ils ne vérifient pas que stdout/stderr du subprocess n'atterrissent nulle part sur le système (journal systemd, syslog, tty scrollback, logs IDE parent, pager). Aucun observable de type « inventaire exhaustif des consommateurs de stdout subprocess » n'est défini. - Impact : l'invariant est plus fort que ce que les tests peuvent prouver.
- Gravité : Majeur
NT-03 — "pipe OS jamais fichier" sans test d'absence dans $TMPDIR / /tmp / /dev/shm¶
- Type : Non testable
- Référence : INV-295-RUNTIME-02 + TC-RUNTIME-01
- Description : TC-RUNTIME-01 vérifie l'absence d'UUID dans
data/et dansps. Aucun test ne vérifie l'absence de fichier temporaire dans$TMPDIR,/tmp,/var/folders/...(macOS),/dev/shm, ni l'absence de fichiers anonymes ouverts (O_TMPFILE). L'interdiction « aucun fallback tmpfs sur macOS » est contractualisée mais non testée. - Impact : invariant runtime critique non couvert par scénario de test.
- Gravité : Majeur
NT-04 — "Sanitizer LLM supprime PII" dépend d'un composant non déterministe¶
- Type : Non testable
- Référence : §5.3.3 (
claude -ppour sanitisation) + INV-295-01 + D-295-17 - Description : la suppression des PII repose sur un appel
claude -pavec prompt « SANITIZE ». La spec cite un règlement PII (pii_ruleset_v1) mais ne définit pas quel composant déterministe (regex, liste bloquée, détecteur) applique ce règlement après le LLM. Aucun test ne vérifie le comportement sur prompt adversarial. TC-NEG-08 se limite à « résumé avec PII » →ERR-295-PII_DETECTEDsans préciser le détecteur. - Impact : la sécurité PII repose sur un composant non déterministe non observable à la revue.
- Gravité : Majeur
NT-05 — CA-295-16/18/19 sans seuil¶
- Type : Non testable (critère non falsifiable)
- Référence : CA-295-16, CA-295-18, CA-295-19
- Description : satisfaits dès que le script produit un rapport horodaté. Aucune valeur mesurée ne peut faire échouer la CA.
- Impact : 3 CA post-merge vides de contenu vérifiable.
- Gravité : Majeur
4. Incohérences Spec ↔ Tests¶
ST-01 — TC-NOM-20 orphelin de la matrice §2¶
- Type : Incohérence Spec↔Tests
- Référence : tests §2 matrice + §3 ligne TC-NOM-20 + INV-295-HOOK-01
- Description : TC-NOM-20 est défini en §3 (hook sur
REJECTED/DONE_WITH_ANOMALY). La matrice §2 mappe INV-295-HOOK-01 / CA-295-21 à TC-NOM-22 uniquement. TC-NOM-20 n'est tracé à aucun invariant / CA, et il ne couvre que 2 des 3 états contractualisés par INV-295-HOOK-01 (manqueDONE). Doublon partiel + trou de traçabilité. - Impact : ambiguïté sur le test faisant foi pour le hook ; audit de couverture compromis.
- Gravité : Majeur
ST-02 — Vecteurs HMAC §5.14 non reproductibles depuis la spec¶
- Type : Incohérence Spec↔Tests
- Référence : §5.14 vecteurs V1/V4/V6/V8 + TC-NOM-06
- Description : 4 signatures HMAC sont fournies comme référence contractuelle pour TC-NOM-06. La spec ne donne pas l'algorithme exact de JCS utilisé (implémentation de référence, version de la RFC 8785, ordre des clés pour les tableaux, encodage des nombres), ni la commande reproductible permettant à un implémenteur de retrouver les 4
expected_sig. Si un vecteur est erroné dans la spec, TC-NOM-06 est contradictoire avec lui-même sans que l'erreur soit détectable en Gate 3. - Impact : toute divergence entre impl JCS et spec JCS sera invisible en review et reportée en Gate 8.
- Gravité : Majeur
ST-03 — TC-NOM-06-bis : signature attendue sans payload canonique complet¶
- Type : Incohérence Spec↔Tests
- Référence : tests §3 TC-NOM-06-bis
- Description : TC-NOM-06-bis demande « HMAC(key, JCS(objet arbitraire schéma v3)) == 2afd2cd6... » sans spécifier quel objet est utilisé comme entrée, ni quelle clé. Le test est inexécutable en l'état.
- Impact : test référencé dans la matrice INV-295-06..08 mais non exécutable.
- Gravité : Bloquant
ST-04 — TC-ERR-18 ERR-295-UNSIGNED_ENTRY défini mais non listé dans la matrice §2¶
- Type : Incohérence Spec↔Tests
- Référence : tests §2 matrice + §4 TC-ERR-18 + INV-295-STATE-02
- Description : TC-ERR-18 teste le comportement
ERR-295-UNSIGNED_ENTRY(compteur + ligne ignorée). INV-295-STATE-02 porte ce comportement. La matrice trace INV-295-STATE-01..04 → TC-STATE-01/02 uniquement, pas TC-ERR-18. Trou de traçabilité. - Impact : ERR de sécurité (silent skip) sans lien matriciel.
- Gravité : Mineur
ST-05 — TC-NEG-16 "bypass 10 guards" sans détail¶
- Type : Incohérence Spec↔Tests
- Référence : tests §9 TC-NEG-16 + §5.17 G-295-01..10
- Description : TC-NEG-16 annonce « 10 cas G-295-01..10 » mais ne décrit aucun scénario individuel. Aucun moyen de vérifier que les 10 guards sont effectivement couverts ; aucune distinction entre guards d'entrée (format) et guards de flux (rate-limit, lock, clé Vault).
- Impact : couverture non vérifiable.
- Gravité : Majeur
ST-06 — TC-INT-03 observe une transition non documentée dans §5.11¶
- Type : Incohérence Spec↔Tests
- Référence : §5.11 machines à états + INV-295-18 + TC-INT-03
- Description : §5.11 ne contient aucune machine d'états
MEMORY_DEGRADED/MEMORY_HEALTHY. INV-295-18 et CA-295-25 parlent d'une transition entre deux états non introduits dans la liste §5.11. TC-INT-03 la teste. La machine complète (états initiaux, transitions sortantes de HEALTHY, condition exacte d'entrée en DEGRADED, scope du compteur « 2 cycles conformes ») n'est pas spécifiée. - Impact : test adossé à un FSM implicite ; non reproductible entre implémenteurs.
- Gravité : Majeur
ST-07 — reuse_score_clip_threshold_pre_round >=0.99995 — frontière non spécifiée¶
- Type : Incohérence Spec↔Tests
- Référence : §5.7 + TC-NOM-07
- Description : TC-NOM-07 parcourt « jeux de données saturants » et vérifie « aucune valeur 1.0000, écrêtage si pré-arrondi >=0.99995 ». Aucun test frontière
raw==0.99995(doit écrêter) vsraw==0.99994999(doit arrondir). Le mode d'arrondi n'est pas précisé dans §5.7 (half-even ? half-up ? banquier ?). - Impact : comportement non déterministe en frontière ; deux implémentations peuvent passer
TC-NOM-07avec comportements divergents. - Gravité : Majeur
5. Hypothèses dangereuses¶
HD-01 — H-295-06 "Déploiement mono-hôte" présenté comme hypothèse¶
- Type : Hypothèse dangereuse
- Référence : §9 H-295-06 + §5.16 ligne
Déploiement+ INV-295-14 - Description : le mono-hôte est traité comme hypothèse (« candidate G34 sinon ») ; c'est en réalité un pré-requis de sécurité car
flockest local. Si un second hôte coexiste, toutes les garanties de cohérence des fichiers d'état signés et l'anti-replay tombent en silence. Ce n'est pas une hypothèse, c'est un invariant d'architecture non porté par un INV-. - Impact : dérive d'exploitation possible sans signal ; aucun guard ne détecte une exécution sur un second hôte.
- Gravité : Majeur
HD-02 — HMAC-SHA256 à clé unique + rotation re-signe l'historique¶
- Type : Hypothèse dangereuse
- Référence : INV-295-06/07 + §5.15 + §5.16 ligne « Non-répudiation »
- Description : l'authenticité des événements repose intégralement sur une clé symétrique en Vault.
rotate-audit-hmac.shre-signe l'existant avec la nouvelle clé, détruisant la capacité à distinguer les événements historiques des événements reforgés rétroactivement. Le modèle est documenté (non-répudiation forte = G33) mais toute trace signée ici reste fragile à un compromis Vault. - Impact : le mot « audit » dans le nom de la clé surestime la propriété réelle obtenue.
- Gravité : Majeur (non bloquant car borné explicitement dans §5.16)
HD-03 — fail_closed_depth thread-local, aucun anti-boucle d'invocation¶
- Type : Hypothèse dangereuse
- Référence : INV-295-17 + §5.6.10
- Description : le compteur est réinitialisé à 0 en début d'invocation step 0. Rien n'empêche un scénario pathologique où
/gov-step-0est ré-invoqué après un abortERR-295-FAIL_CLOSED_RECURSION(watchdog, retry opérateur) : chaque ré-invocation repart à 0, et une situation de fail-closed systémique peut générer une oscillation abort → retry sans atteindre un état stable. Aucun invariant borne le nombre de ré-invocations. - Impact : la protection anti-récursion est locale à un process ; la protection globale n'est pas spécifiée.
- Gravité : Majeur
HD-04 — Idempotence timestamp_bucket_5min sensible à la dérive horloge¶
- Type : Hypothèse dangereuse
- Référence : §5.16 + H-295-04
- Description : deux requêtes légitimes émises à la frontière d'un bucket (ex. 14:59:59.8 et 15:00:00.1) avec 500 ms de dérive peuvent être bucketisées de façon incohérente → soit replay autorisé à tort, soit idempotence cassée à tort. La spec ne dit pas quelle horloge fait foi (locale ? NTP ? PTP ?).
- Impact : surface de replay en frontière de bucket ; fragilité reconnue en H-295-04 mais non contrainte.
- Gravité : Majeur
HD-05 — Sanitisation PII déléguée à un LLM¶
- Type : Hypothèse dangereuse
- Référence : §5.3 + §5.3.3
- Description : l'ensemble de la garantie RGPD « jamais de verbatim persistant » repose sur un LLM (
claude -p) avec promptSANITIZE. L'hypothèse implicite est que le LLM respecte le prompt — connu faux en adversariat.pii_ruleset_v1est mentionné mais son application en second passage déterministe n'est pas décrite dans §5.3 ni §5.3.3. - Impact : la promesse INV-295-01 / CA-295-02 repose sur une brique non déterministe.
- Gravité : Majeur
HD-06 — pii_ruleset_v1 réduit à 4 familles de patterns¶
- Type : Hypothèse dangereuse
- Référence : D-295-17
- Description : le règlement PII n'énonce que
email, phone, IBAN, adresse explicite. Pas de nom/prénom, pas d'identifiant national (NIR/SSN/NSS), pas de numéro client, pas de date de naissance, pas de coordonnées géographiques fines, pas de données de santé. Sous-ensemble très restreint au regard du RGPD art. 4.1. - Impact : définition PII probablement sous-spécifiée vs obligations réelles ; risque de non-conformité.
- Gravité : Majeur
6. Risques sécurité / conformité¶
SR-01 — Lignes d'état non signées "ignorées silencieusement"¶
- Type : Risque sécurité
- Référence : INV-295-STATE-02
- Description : la politique de lecture ignore les lignes non signées / invalides. Un attaquant en écriture sur le fichier peut injecter du bruit massivement pour dégrader la qualité du score ou masquer des entrées légitimes (DoS par bruit), puis compter sur le compteur
ERR-295-UNSIGNED_ENTRYpour rester sous les radars opérationnels. Aucun seuil d'alerte (« >N unsigned en M min → alerte critique ») n'est contractualisé. - Impact : silent degradation exploitable.
- Gravité : Majeur
SR-02 — Codes d'erreur distincts sur guards d'identifiants (anti-enumeration)¶
- Type : Risque sécurité
- Référence : §6 ERR-295-INVALID_STORY_ID / INVALID_DOMAIN / INVALID_PROJECT + learning universel « Anti-enumeration »
- Description : la spec distingue 3 codes d'erreur différents selon le champ invalide. Le learning universel (REX PD-85) impose un message uniforme pour éviter le profilage. Ici les erreurs sont internes (
/govlocal) donc le risque est moindre, mais l'approche diverge d'une règle transverse appliquée ailleurs, et le code d'erreur fuite l'information sur le premier champ échoué. - Impact : divergence avec un learning universel déjà appliqué ailleurs.
- Gravité : Mineur
SR-03 — rotate-audit-hmac.sh re-signe l'existant avec la nouvelle clé¶
- Type : Risque conformité (auditabilité)
- Référence : §5.15 + §5.16
- Description : la re-signature rétroactive efface la distinction cryptographique entre « signé à T0 avec keyN » et « re-signé à T1 avec keyN+1 ». Un opérateur ayant accès à Vault peut reforger l'historique complet sans trace observable. L'archivage de la clé précédente permet une vérification a posteriori seulement si l'archive est intègre — aucune contrainte sur l'archive (append-only ? WORM ?) n'est contractualisée.
- Impact : la rotation détruit partiellement la propriété d'audit.
- Gravité : Majeur
SR-04 — Purge RGPD n'énumère pas PD-XX-clarifications.md¶
- Type : Risque conformité RGPD
- Référence : INV-295-04 + §5.3 step 7 + CA-295-04
- Description : INV-295-04 liste «
clarifications.jsonl, index FAISS, embeddings NPY, cache JSON, tracesquerysessions » (5 artefacts). §5.3 step 7 écrit aussiPD-XX-clarifications.md. Ce fichier Markdown n'apparaît pas dans l'énumération de l'invariant de purge. CA-295-04 parle de « 5 artefacts » — le.mdn'en fait pas partie. - Impact : trou de purge RGPD : le résumé structuré persiste potentiellement après purge.
- Gravité : Bloquant
SR-05 — Subprocess claude -p hérite de l'environnement parent sauf surcharge¶
- Type : Risque sécurité
- Référence : §5.3.3 + INV-295-RUNTIME-01
- Description : la spec impose
CLAUDE_DISABLE_SESSION_LOG=1etTERM=dumb, mais ne dit pas que l'environnement doit être réduit à un whitelist. Variables commeCLAUDECODE,CLAUDE_CODE_*,ANTHROPIC_*,HOME(qui pointe vers les session logs),XDG_*sont implicitement héritées. Une variable non listée peut réactiver un log verbatim. - Impact : surface d'évasion non bornée, invariant RUNTIME-01 fragile à un changement upstream de
claude -p. - Gravité : Majeur
SR-06 — Absence de guard sur la taille des fichiers d'état¶
- Type : Risque sécurité
- Référence : §5.15 + INV-295-STATE-05 + SR-01
- Description : aucun invariant ne borne la taille maximale des fichiers d'état signés. Combiné à SR-01 (lignes unsigned ignorées silencieusement), un attaquant en écriture peut faire enfler
learnings-injections.jsonljusqu'à saturation disque. - Impact : DoS par remplissage, pas de quota.
- Gravité : Majeur
7. Axe 5bis — Cohérence des diagrammes¶
D-01 — Machine MEMORY_DEGRADED / MEMORY_HEALTHY absente de §5.11 et de §5bis¶
- Type : Incohérence diagramme / invariant
- Référence : §5.11 + §5bis + INV-295-18 + CA-295-25 + TC-INT-03
- Description : INV-295-18 et CA-295-25 parlent d'une transition entre ces deux états. §5.11 ne liste que
learning.scopeetclarification.lifecycle_state. §5bis ne fournit aucun diagramme pour MEMORY_*. Une entité avec >=2 états (et a minima un sous-état transitoire « en cours de 2 cycles conformes ») sans diagramme tombe sous la règle « absence de diagramme » de l'axe 5bis. - Impact : FSM implicite non vérifiable ; ST-06 découle directement.
- Gravité : Majeur
D-02 — Diagramme de séquence B5 n'explicite pas JCS et exclusion de sig_hmac_sha256¶
- Type : Cohérence diagramme / transformation
- Référence : §5bis diagramme B5 + §5.14
- Description : le diagramme montre « append signed event » sans rendre visible l'étape JCS (RFC 8785) ni le point exact d'exclusion du champ
sig_hmac_sha256avant HMAC. Pour une fonction de sécurité auditée contractuellement, ces transformations devraient apparaître explicitement. - Impact : la revue visuelle ne suffit pas à valider le flux crypto ; nécessite un croisement manuel avec §5.14.
- Gravité : Mineur
D-03 — Diagramme clarification.lifecycle_state : puits REJECTED / PURGED non matérialisés¶
- Type : Cohérence diagramme / invariant
- Référence : §5bis diagramme clarification + INV-295-CL-07 + INV-295-CL-08
- Description : les états terminaux
REJECTEDetPURGEDsont posés par INV-295-CL-07/08, mais le diagramme Mermaid ne les matérialise pas comme puits (--> [*]).REJECTEDn'apparaît que comme cible de transition, pas comme nœud terminal explicite. - Impact : lecture visuelle incomplète ; un implémenteur peut supposer d'autres transitions sortantes.
- Gravité : Mineur
8. Synthèse gravité¶
| Gravité | Nombre |
|---|---|
| Bloquant | 2 (ST-03, SR-04) |
| Majeur | 24 |
| Mineur | 8 |
Points bloquants :
- ST-03 : TC-NOM-06-bis non exécutable (payload non spécifié).
- SR-04 :
PD-XX-clarifications.mdabsent de l'énumération de purge RGPD (INV-295-04).
⚠️ Aucune correction proposée. ⚠️ Aucune reformulation. ⚠️ Aucune implémentation.