Aller au contenu

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

T7 — TASK-7 : Prolog (vérification formelle)

  • 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)