PD-26 — Rétrospective¶
1. Contexte¶
| Champ | Valeur |
|---|---|
| Story ID | PD-26 |
| Titre | Intégration Keycloak OAuth2/OIDC |
| Domaine | auth-identity |
| Projet | backend |
| Date complétion | 2026-01-08 |
| Verdict | ACCEPTÉ |
2. Métriques¶
| Métrique | Valeur |
|---|---|
| Tests Vitest OIDC | 38/38 PASS |
| Tests Jest auth | 389 PASS (25 suites) |
| Écarts initiaux | 6 (E-01 à E-06) |
| Invariants | 11 |
3. Learnings clés¶
-
jose ESM vs Jest : La bibliothèque
josev6+ est ESM-only, incompatible avec Jest. Solution : Vitest dédié pour les tests utilisant jose. -
Écarts plan/spécification : Une revue systématique du plan contre les invariants évite les écarts découverts tardivement en acceptabilité.
-
Signal fail-closed observable : Distinguer HTTP 503 (service dégradé) de HTTP 401 (token invalide) pour une observabilité correcte.
-
Liste blanche de logs fermée :
AUDIT_ALLOWED_FIELDSconst évite les fuites accidentelles de données sensibles.
4. Patterns applicables¶
Nouveau pattern : Double runner tests (Vitest + Jest)¶
Pour les dépendances ESM-only :
// vitest.config.oidc.ts
export default defineConfig({
test: {
include: ['src/**/*.oidc.spec.ts'],
},
});
Nouveau pattern : Modèle d'autorisation HYBRID explicite¶
Le décorateur @AuthorizationRule(AND|OR) rend la combinaison roles+scopes déterministe :
5. Signal CLAUDE.md¶
Priorité moyenne : Documenter la compatibilité ESM pour les dépendances auth.
### Bibliothèques ESM-only — Vitest obligatoire (2026-02-XX)
**Dépendances concernées** : `jose` v6+
**Solution** :
1. Créer `vitest.config.{module}.ts` dédié
2. Tests ESM : `*.oidc.spec.ts` exécutés par Vitest
3. Tests CommonJS : `*.spec.ts` exécutés par Jest
4. CI : deux commandes `npm run test:vitest && npm run test:jest`
6. Conclusion¶
PD-26 a intégré Keycloak avec validation JWT complète et modèle d'autorisation HYBRID. Les 6 écarts initiaux ont mis en évidence l'importance d'une revue plan/spécification. Le pattern double runner (Vitest + Jest) est une solution pragmatique pour les dépendances ESM-only comme jose.
Rétrospective générée 2026-02-19 (Étape 10 batch auth-identity)