Aller au contenu

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.ts
  • src/modules/auth/password-change/password-change.dto.ts
  • src/modules/auth/password-change/password-change-exception.filter.ts
  • src/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.ts
  • src/modules/auth/password-change/password-change.controller.ts
  • src/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

  1. 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.

  2. 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.

  3. Parallélisme niveau 3 : Les tests unitaires et e2e peuvent également être exécutés en parallèle après la tâche 3.

  4. Points d'attention :

  5. Le guard ReauthTokenGuard doit récupérer le JWT principal pour vérifier que sub correspond
  6. L'extension Keycloak doit utiliser le circuit breaker existant
  7. Le service doit gérer l'atomicité partielle (changement Keycloak vs invalidation sessions)

  8. Fichiers existants à modifier :

  9. keycloak-admin.service.ts : Extension, ne pas modifier la logique existante
  10. Aucun autre fichier existant n'est modifié (nouveau module complet)

  11. Dépendances externes (réutilisation sans modification) :

  12. OidcJwtAuthGuard
  13. SessionRevocationStore
  14. UserRepository
  15. AuditService
  16. CurrentUser decorator