PD-239 — Manifest de décomposition¶
Ce document est produit par l'orchestrateur Claude à l'étape 6a. Il découpe le plan d'implémentation en tâches assignées à des agents spécialisés.
Résumé¶
- Story : PD-239 — Changement de mot de passe utilisateur
- Nombre de tâches : 5
- Agents mobilisés : agent-developer, agent-qa-unit-integration
Tâche 1 : agent-developer — Fondations¶
- Agent : agent-developer
- LLM : claude
- Code contracts :
- password-change-errors
- password-change-dto
- password-change-filter
- reauth-token-guard
- Périmètre fichiers :
src/modules/auth/password-change/password-change.errors.tssrc/modules/auth/password-change/password-change.dto.tssrc/modules/auth/password-change/password-change-exception.filter.tssrc/modules/auth/password-change/guards/reauth-token.guard.ts- Livrable attendu :
- Classes d'erreur ERR-239-* avec code et httpStatus
- DTOs avec validation @IsString @MinLength et @Exclude
- Filter de normalisation JSON {error, message}
- Guard ReauthTokenGuard validant X-Reauth-Token
- Dépendances : Aucune
Tâche 2 : agent-developer — Extension Keycloak Admin Service¶
- Agent : agent-developer
- LLM : claude
- Code contract : keycloak-admin-extension
- Périmètre fichiers :
src/modules/auth/mfa/services/keycloak-admin.service.ts(extension)- Livrable attendu :
- Nouvelle méthode
changeUserPassword(userId: string, newPassword: string) - Appel PUT /admin/realms/{realm}/users/{id}/reset-password
- Log structuré event=keycloak_password_change
- Normalisation des erreurs Keycloak en exceptions PD-239
- Dépendances : Aucune (utilise le service existant)
Tâche 3 : agent-developer — Service et Controller¶
- Agent : agent-developer
- LLM : claude
- Code contracts :
- password-change-service
- password-change-controller
- Périmètre fichiers :
src/modules/auth/password-change/password-change.service.tssrc/modules/auth/password-change/password-change.controller.tssrc/modules/auth/password-change/password-change.module.ts- Livrable attendu :
- PasswordChangeService avec verifyOldPassword() et orchestration complète
- PasswordChangeController avec endpoint POST /user/password/change
- PasswordChangeModule assemblant tous les composants
- Dépendances : Tâche 1 (errors, dto, filter, guard), Tâche 2 (keycloak-admin-extension)
Tâche 4 : agent-qa-unit-integration — Tests unitaires¶
- Agent : agent-qa-unit-integration
- LLM : claude
- Code contract : password-change-tests-unit
- Périmètre fichiers :
src/modules/auth/password-change/__tests__/*.spec.ts- Livrable attendu :
- Tests unitaires du PasswordChangeService
- Couverture ≥ 80%
- Tous les cas ERR-239-* testés
- Mocks Keycloak et SessionRevocationStore
- Dépendances : Tâche 3 (service)
Tâche 5 : agent-qa-unit-integration — Tests e2e¶
- Agent : agent-qa-unit-integration
- LLM : claude
- Code contract : password-change-tests-e2e
- Périmètre fichiers :
test/auth/password-change.e2e-spec.ts- Livrable attendu :
- Tests e2e couvrant T-239-NOM-01 et T-239-ERR-*
- Vérification invalidation sessions
- Vérification log keycloak_password_change
- Injection erreurs Keycloak via mock
- Dépendances : Tâche 3 (controller + module)
Ordre d'exécution¶
Niveau 1 (parallèle) :
├── Tâche 1 : Fondations (errors, dto, filter, guard)
└── Tâche 2 : Extension Keycloak Admin Service
Niveau 2 (après niveau 1) :
└── Tâche 3 : Service et Controller
Niveau 3 (parallèle, après niveau 2) :
├── Tâche 4 : Tests unitaires
└── Tâche 5 : Tests e2e
Diagramme de dépendances¶
[T1 Fondations] ──┐
├──→ [T3 Service+Controller] ──┬──→ [T4 Tests unit]
[T2 Keycloak] ───┘ └──→ [T5 Tests e2e]
Notes de l'orchestrateur¶
-
Regroupement stratégique : Les 9 modules code contracts sont regroupés en 5 tâches pour réduire la fragmentation et optimiser le contexte des agents.
-
Parallélisme niveau 1 : Les tâches 1 et 2 n'ont pas de dépendances mutuelles et peuvent être exécutées en parallèle.
-
Parallélisme niveau 3 : Les tests unitaires et e2e peuvent également être exécutés en parallèle après la tâche 3.
-
Points d'attention :
- Le guard ReauthTokenGuard doit récupérer le JWT principal pour vérifier que sub correspond
- L'extension Keycloak doit utiliser le circuit breaker existant
-
Le service doit gérer l'atomicité partielle (changement Keycloak vs invalidation sessions)
-
Fichiers existants à modifier :
keycloak-admin.service.ts: Extension, ne pas modifier la logique existante-
Aucun autre fichier existant n'est modifié (nouveau module complet)
-
Dépendances externes (réutilisation sans modification) :
- OidcJwtAuthGuard
- SessionRevocationStore
- UserRepository
- AuditService
- CurrentUser decorator