PD-264 — Décomposition multi-agents
Story
- ID : PD-264
- Titre : Nonce anti-rejeu + interopérabilité TSA RFC 3161
- Projet : ProbatioVault-backend
Stratégie de parallélisation
parallelization: sequential
reason: >
Les 7 TASKs ont des dépendances séquentielles fortes :
TASK-1 (migration DDL) → TASK-2 (entity) → TASK-3 (NonceService)
→ TASK-4 (NonceValidationService) → TASK-5 (processor integration)
→ TASK-6 (tests) → TASK-7 (Prolog).
Toutes assignées au même agent (agent-developer).
Mode séquentiel obligatoire.
Manifest des tâches
| # | TASK | Agent | Module CC | Fichiers | Dépendances |
| 1 | TASK-1 Migration DDL | agent-developer | CC-264-01 | src/database/migrations/*PD264* | Aucune |
| 2 | TASK-2 Entity | agent-developer | CC-264-02 | src/modules/tsa/entities/timestamp-token.entity.ts | TASK-1 |
| 3 | TASK-3 NonceService | agent-developer | CC-264-03 | src/modules/tsa/services/nonce.service.ts | TASK-2 |
| 4 | TASK-4 NonceValidationService | agent-developer | CC-264-04 | src/modules/tsa/services/nonce-validation.service.ts | TASK-3 |
| 5 | TASK-5 Processor integration | agent-developer | CC-264-05 | src/modules/tsa/processors/batch-timestamp.processor.ts, src/modules/tsa/enums/tsa-error-code.enum.ts, src/modules/tsa/tsa.module.ts | TASK-3, TASK-4 |
| 6 | TASK-6 Tests contractuels | agent-developer | CC-264-06 | src/modules/tsa/services/*.spec.ts, src/modules/tsa/__tests__/*.spec.ts, src/modules/tsa/processors/*.spec.ts | TASK-1..5 |
| 7 | TASK-7 Prolog | agent-developer | CC-264-07 | formal-verification/prolog/* | TASK-3, TASK-4 |
Détail par tâche
T1 — TASK-1 : Migration DDL (nonce VARCHAR(64) → BYTEA NOT NULL)
- Agent : agent-developer
- Executor :
claude -p (factuel) - Contract : CC-264-01 (migration-nonce-bytea)
- Mission : Créer la migration TypeORM en 3 phases (conversion données, ALTER COLUMN, contraintes+index) avec désactivation/réactivation du trigger d'immutabilité
- Fichiers autorisés :
src/database/migrations/1740600000000-PD264NonceByteaMigration.ts - Livrable : Fichier migration complet (up + down)
T2 — TASK-2 : Entity TimestampToken
- Agent : agent-developer
- Executor :
claude -p (factuel) - Contract : CC-264-02 (entity-timestamp-token)
- Mission : Modifier le champ
nonce de VARCHAR(64) nullable vers BYTEA NOT NULL (Buffer) - Fichiers autorisés :
src/modules/tsa/entities/timestamp-token.entity.ts - Livrable : Entity mise à jour
T3 — TASK-3 : NonceService (génération + comparaison + unicité)
- Agent : agent-developer
- Executor :
claude -p (factuel) - Contract : CC-264-03 (nonce-service)
- Mission : Créer le service
NonceService avec generate() (CSPRNG), validatePresence(), compareEqual() (timingSafeEqual), checkUniqueness() - Fichiers autorisés :
src/modules/tsa/services/nonce.service.ts - Livrable : Service complet avec injectable NestJS
T4 — TASK-4 : NonceValidationService (orchestration validation)
- Agent : agent-developer
- Executor :
claude -p (factuel) - Contract : CC-264-04 (nonce-validation-service)
- Mission : Créer le service d'orchestration avec
validateRequestNonce(), validateResponseNonce(), enum NonceValidationStatus, interface NonceValidationResult - Fichiers autorisés :
src/modules/tsa/services/nonce-validation.service.ts - Livrable : Service complet + types associés
T5 — TASK-5 : Intégration Processor
- Agent : agent-developer
- Executor :
claude -p (factuel) - Contract : CC-264-05 (processor-nonce-integration)
- Mission : Modifier le
BatchTimestampProcessor pour intégrer le nonce dans la séquence (generate → validate → INSERT atomique → post-commit async). Ajouter les codes d'erreur nonce dans TsaErrorCode. Enregistrer les services dans TsaModule. - Fichiers autorisés :
src/modules/tsa/processors/batch-timestamp.processor.ts, src/modules/tsa/enums/tsa-error-code.enum.ts, src/modules/tsa/tsa.module.ts, src/modules/tsa/services/index.ts - Livrable : Processor modifié + enums + module
T6 — TASK-6 : Suite de tests contractuels
- Agent : agent-developer
- Executor :
claude -p (factuel) - Contract : CC-264-06 (tests-contractuels-nonce)
- Mission : Implémenter 18 TC + 5 NR + 3 TC-MIG couvrant la matrice INV/CA complète
- Fichiers autorisés :
src/modules/tsa/services/nonce.service.spec.ts, src/modules/tsa/services/nonce-validation.service.spec.ts, src/modules/tsa/__tests__/nonce-integration.spec.ts, src/modules/tsa/__tests__/nonce-timing.spec.ts, src/modules/tsa/__tests__/nonce-migration.spec.ts, src/modules/tsa/processors/batch-timestamp.processor.spec.ts - Livrable : Suites de tests complètes
- Agent : agent-developer
- Executor :
claude -p (factuel) - Contract : CC-264-07 (prolog-rfc3161-nonce)
- Mission : Ajouter les règles nonce dans la suite Prolog RFC 3161 pour atteindre 18/18
- Fichiers autorisés :
formal-verification/prolog/** - Livrable : Règles Prolog ajoutées
Decision trace
- La story n'a qu'un seul agent (agent-developer) car toutes les TASKs sont du code backend NestJS/TypeORM
- Mode séquentiel imposé par les dépendances inter-TASKs (chaque TASK utilise les types/services des TASKs précédentes)
- TASK-7 (Prolog) est la seule potentiellement parallélisable mais son périmètre est faible (ajout de règles)