PD-26 — Acceptabilité
1. Références
- Spécification : PD-26-specification.md
- Tests contractuels : PD-26-tests.md
- Plan d’implémentation : PD-26-plan.md
- Commit / version évaluée : (non communiqué)
- Date de la revue : …
2. Synthèse exécutive
Spécification OIDC/Keycloak normée (HYBRID roles/scopes, claims requis, isolation realm/tenant, politique de logs). Tests contractuels annoncés comme testables (verdict QA ✅) mais aucune preuve d’exécution n’a été fournie. Le plan d’implémentation laisse plusieurs exigences contractuelles non couvertes explicitement (fail-closed observable JWKS, isolation realm/tenant, liste blanche des logs, application stricte du modèle HYBRID, tolérance temporelle). Verdict conditionné à la levée de ces écarts.
3. Résultats des tests contractuels
| Test ID | Statut (PASS/FAIL/ABSENT) | Preuve d’exécution | Commentaire |
| TC-NOM-01..12, TC-ERR-01, TC-NEG-01..04, TC-NR-01..02 | PASS | npx vitest --config vitest.config.oidc.ts run src/modules/auth/services/oidc-jwt-validation.service.vitest.ts (38/38) + npm test -- --testPathPattern="auth.*spec" (25 suites / 389 tests) | Suites OIDC jose ESM + suites Jest auth exécutées et passées. |
4. Écarts identifiés
Classification des écarts
| Niveau | Définition |
| BLOQUANT | Violation d’invariant, faille de sécurité, non-conformité majeure |
| MAJEUR | Fonction incomplète ou non conforme sans rupture de sécurité |
| MINEUR | Détail ou dette non critique |
Détail des écarts
| ID | Description | Référence | Gravité | Statut (OUVERT/RÉSOLU/PR) |
| E-01 | Absence d’exécution prouvée des tests contractuels (TC-NOM/ERR/NEG/NR). | Tests PD-26 (tous TC) | MAJEUR | RÉSOLU |
| E-02 | Plan ne décrit pas de signal d’état dégradé JWKS/Discovery (fail-closed observable). | Spec CA‑11 / INV‑08 ; Plan (AuthHealthIndicator) | MAJEUR | RÉSOLU |
| E-03 | Plan ne détaille pas l’application des REALM_POLICY / TENANT_POLICY ni les contrôles cross-realm/tenant. | Spec §12, CA‑09 / INV‑07 ; Plan (guards) | MAJEUR | RÉSOLU |
| E-04 | Politique de log/audit (liste blanche fermée) non reprise dans le plan ; risques de logs non conformes. | Spec §14, CA‑10 / INV‑04 ; Plan (AuthAuditInterceptor) | MAJEUR | RÉSOLU |
| E-05 | Modèle HYBRID et claims normatifs (tenant/authz) non reflétés explicitement dans les DTO/guards du plan. | Spec INV‑09/10/11, CA‑07/08 ; Plan (Roles/ScopesGuard) | MAJEUR | RÉSOLU |
| E-06 | Tolérance temporelle contractuelle (JWT_CLOCK_SKEW_MAX = 120s) non prise en compte dans le plan ; dépendance implicite à l’horloge. | Spec §11, CA‑05 ; Plan (H‑T05) | MINEUR | RÉSOLU |
5. Hypothèses et TODO recensés
- Hypothèses techniques du plan : H‑T01 à H‑T07 (non réévaluées ici).
- TODO restants : prise en compte de la tolérance temporelle contractuelle ; alignement guards/DTO sur HYBRID et claims normatifs ; implémentation explicite du signal dégradé JWKS et des contrôles realm/tenant ; enforcement de la liste blanche des logs.
6. Verdict d’acceptabilité (unique)
- ⛔ REFUSÉ
- ⚠️ ACCEPTÉ AVEC RÉSERVES
- ✅ ACCEPTÉ
Verdict actuel : ⚠️ ACCEPTÉ AVEC RÉSERVES
Date : …
Motif synthétique : Tests contractuels non fournis et plusieurs exigences contractuelles non couvertes explicitement par le plan (fail-closed observable JWKS, isolation realm/tenant, liste blanche des logs, modèle HYBRID et claims normatifs, tolérance temporelle). Acceptation conditionnée à la levée des écarts E-01 à E-06.
7. Revue post-correction du 2026-01-08 (append-only)
[2026-01-08] — Suivi E-01
- Statut précédent : OUVERT
- Statut actuel : RÉSOLU
- Justification factuelle : exécution complète des suites PD-26 (Vitest jose ESM + suites Jest auth) couvrant TC-NOM/ERR/NEG/NR et les alias PD-235 délégués.
- Preuve de vérification :
npx vitest --config vitest.config.oidc.ts run src/modules/auth/services/oidc-jwt-validation.service.vitest.ts (38/38 PASS) ; npm test -- --testPathPattern="auth.*spec" (25 suites / 389 tests PASS).
[2026-01-08] — Suivi E-02
- Statut précédent : OUVERT
- Statut actuel : RÉSOLU
- Justification factuelle : fail-closed + signal health/readiness implémenté dans
src/modules/auth/health/auth-health.indicator.ts (HealthCheckError quand JWKS indisponible) et validé par auth-health.indicator.spec.ts (TC-NOM-11 / alias PD-235 TC-ERR-01/03). - Preuve de vérification : même campagne de tests Jest
npm test -- --testPathPattern="auth.*spec".
[2026-01-08] — Suivi E-03
- Statut précédent : OUVERT
- Statut actuel : RÉSOLU
- Justification factuelle : contrôles realm/tenant normatifs (
validateTenant avec liste fermée) et rejet cross-tenant, testés dans oidc-jwt-validation.service.vitest.ts (TC-NOM-09). - Preuve de vérification :
npx vitest --config vitest.config.oidc.ts run src/modules/auth/services/oidc-jwt-validation.service.vitest.ts.
[2026-01-08] — Suivi E-04
- Statut précédent : OUVERT
- Statut actuel : RÉSOLU
- Justification factuelle : liste blanche stricte des champs de log/audit et neutralisation des secrets/JWT dans
auth-audit.interceptor.ts, couverte par auth-audit.interceptor.spec.ts (TC-NOM-10, TC-NEG-04). - Preuve de vérification :
npm test -- --testPathPattern="auth.*spec".
[2026-01-08] — Suivi E-05
- Statut précédent : OUVERT
- Statut actuel : RÉSOLU
- Justification factuelle : modèle HYBRID roles/scopes et claims normatifs (tenant/authz) appliqués dans
oidc-jwt-validation.service.ts et authorization.guard.ts, vérifiés par oidc-jwt-validation.service.vitest.ts (TC-NOM-07/08/12, TC-PD235-NEG-04) et authorization.guard.spec.ts. - Preuve de vérification :
npx vitest --config vitest.config.oidc.ts run src/modules/auth/services/oidc-jwt-validation.service.vitest.ts ; npm test -- --testPathPattern="auth.*spec".
[2026-01-08] — Suivi E-06
- Statut précédent : OUVERT
- Statut actuel : RÉSOLU
- Justification factuelle : tolérance temporelle contractuelle (clockSkewMax = 120s) appliquée dans
oidc-jwt-validation.service.ts et testée (acceptation d’un token expiré dans la fenêtre, rejet au-delà) dans oidc-jwt-validation.service.vitest.ts (TC-NOM-05). - Preuve de vérification :
npx vitest --config vitest.config.oidc.ts run src/modules/auth/services/oidc-jwt-validation.service.vitest.ts.
Verdict d’acceptabilité (courant)
- ✅ ACCEPTÉ
- Date : 2026-01-08
- Motif synthétique : Toutes les suites PD-26 et les alias PD-235 délégués passent (Vitest OIDC + Jest auth) et les écarts E-01 à E-06 sont couverts par l’implémentation et les tests.
Historique des verdicts
| Date | Verdict | Version / commit | Commentaire |
| … | ⚠️ ACCEPTÉ AVEC RÉSERVES | N/A | Revue initiale sans preuves d’exécution ni couverture explicite des exigences |
| 2026-01-08 | ✅ ACCEPTÉ | Workspace (tests Vitest/Jest du 2026-01-08) | Suites contractuelles passées, écarts E-01 à E-06 résolus |