Aller au contenu

PD-277 — Décomposition en tâches agents

1. Matrice des dépendances

ID Agent Description Module CC Produit Consomme Dépend de Niveau
T1 agent-developer Migration DDL (3 colonnes) pd277-migration *-PD277-AddNonceAndCertificateColumns.ts [] 0
T2 agent-developer Extension entité LegalReKey (3 @Column) pd277-entity-extension legal-rekey.entity.ts (extension) [] 0
T3 agent-developer Codes d'erreur PD-277 pd277-error-codes legal-pre.exception.ts (extension) [] 0
T4 agent-developer Extension interface TSP pd277-tsp-interface tsp-verifier.interface.ts (extension) [] 0
T5 agent-developer Extension stub TSP (certificats) pd277-tsp-stub tsp-verifier.stub.ts (extension) tsp-verifier.interface.ts [T4] 1
T6 agent-developer Contrôles nonce+PKI dans LegalReKeyManagerService + Repository garde pd277-rekey-manager-controls + pd277-rekey-repository legal-rekey-manager.service.ts (extension), legal-rekey.repository.ts (extension) Entity, Errors, Interface TSP [T2, T3, T4] 1
T7 agent-developer Vérification faits Prolog (C8) Vérification extract-facts.py Entity [T2] 1
T8 agent-qa-unit-integration Tests unitaires et d'intégration (TC-NOM/ERR/INV/NEG/NR) pd277-tests *.spec.ts Tous les composants [T5, T6, T7] 2

2. Bloc parallelization

parallelization:
  strategy: by_level
  levels:
    - level: 0
      tasks: [1, 2, 3, 4]
      agents: [agent-developer, agent-developer, agent-developer, agent-developer]
      branches:
        - "feature/PD-277-l0-migration"
        - "feature/PD-277-l0-entity"
        - "feature/PD-277-l0-errors"
        - "feature/PD-277-l0-tsp-interface"
    - level: 1
      tasks: [5, 6, 7]
      agents: [agent-developer, agent-developer, agent-developer]
      branches:
        - "feature/PD-277-l1-tsp-stub"
        - "feature/PD-277-l1-manager-controls"
        - "feature/PD-277-l1-prolog-check"
    - level: 2
      tasks: [8]
      agents: [agent-qa-unit-integration]
      branches:
        - "feature/PD-277-l2-tests"
  total_sequential_time: "10h"
  total_parallel_time: "6h"
  speedup_factor: 1.67
  git_strategy: branch_per_level

3. Détail des tâches

Tâche 1 — Migration DDL (3 colonnes)

  • Agent : agent-developer
  • Niveau : 0
  • Dépend de : []
  • Contract : pd277-migration
  • Fichiers : src/database/migrations/*-PD277-AddNonceAndCertificateColumns.ts
  • Description : Créer la migration TypeORM pour ajouter used_nonces (JSONB NOT NULL DEFAULT '[]'::jsonb), owner_certificate_id (VARCHAR(255) NOT NULL DEFAULT ''), recipient_certificate_id (VARCHAR(255) NOT NULL DEFAULT '') à vault_secure.legal_rekey. Up et Down.

Tâche 2 — Extension entité LegalReKey

  • Agent : agent-developer
  • Niveau : 0
  • Dépend de : []
  • Contract : pd277-entity-extension
  • Fichiers : src/modules/legal-pre/entities/legal-rekey.entity.ts
  • Description : Ajouter 3 propriétés TypeORM à l'entité LegalReKey : usedNonces (@Column jsonb), ownerCertificateId (@Column varchar 255), recipientCertificateId (@Column varchar 255). NE PAS modifier les @Column existants ni les enums.

Tâche 3 — Codes d'erreur PD-277

  • Agent : agent-developer
  • Niveau : 0
  • Dépend de : []
  • Contract : pd277-error-codes
  • Fichiers : src/modules/legal-pre/errors/legal-pre.exception.ts
  • Description : Ajouter 5 codes d'erreur : ERR-NONCE-MISSING (400), ERR-NONCE-FORMAT (400), PRE_NONCE_REPLAY_DETECTED (409), PRE_CERTIFICATE_BINDING_FAILED (400), ERR-PERSISTENCE-CONTROL (500). Ne pas modifier les codes PD-81 existants.

Tâche 4 — Extension interface TSP

  • Agent : agent-developer
  • Niveau : 0
  • Dépend de : []
  • Contract : pd277-tsp-interface
  • Fichiers : src/modules/legal-pre/interfaces/tsp-verifier.interface.ts
  • Description : Ajouter ownerCertificateId?: string et recipientCertificateId?: string à TspVerificationResult. Ne pas modifier la signature de ITspVerifier.verify().

Tâche 5 — Extension stub TSP (certificats)

  • Agent : agent-developer
  • Niveau : 1
  • Dépend de : [T4]
  • Contract : pd277-tsp-stub
  • Fichiers : src/modules/legal-pre/providers/tsp-verifier.stub.ts
  • Description : Enrichir TspVerifierStub pour retourner des ownerCertificateId et recipientCertificateId cohérents dans le résultat de vérification. Les TODO existants (AC-81-01-PARTIAL) doivent être préservés. Support config de test pour certificats invalides (TC-ERR-06, TC-NEG-05).

Tâche 6 — Contrôles nonce + PKI dans Manager + Repository

  • Agent : agent-developer
  • Niveau : 1
  • Dépend de : [T2, T3, T4]
  • Contract : pd277-rekey-manager-controls + pd277-rekey-repository
  • Fichiers : src/modules/legal-pre/services/legal-rekey-manager.service.ts, src/modules/legal-pre/repositories/legal-rekey.repository.ts
  • Description :
  • Ajouter reEncryptWithNonce() dans LegalReKeyManagerService : validation nonce UUID v4, transaction SERIALIZABLE, vérification JSONB @>, insertion nonce, contrôle fail-closed certificats vides (étape 3b), appel preService.reEncrypt().
  • Enrichir generateLegalReKey() : extraction certificateId depuis TSP result, validation non-nullité + validité, persistance.
  • Dans Repository : garde d'immuabilité certificats sur updateStatus().

Tâche 7 — Vérification faits Prolog

  • Agent : agent-developer (ou orchestrateur direct)
  • Niveau : 1
  • Dépend de : [T2]
  • Contract : —
  • Fichiers : Vérification seule (pas de modification)
  • Description : Vérifier que extract-facts.py détecte les 3 nouveaux @Column et génère les faits entity_column(legal_re_key, used_nonces, jsonb), entity_column(legal_re_key, owner_certificate_id, varchar), entity_column(legal_re_key, recipient_certificate_id, varchar). Pas de modification de code.

Tâche 8 — Tests unitaires et d'intégration

  • Agent : agent-qa-unit-integration
  • Niveau : 2
  • Dépend de : [T5, T6, T7]
  • Contract : pd277-tests
  • Fichiers : src/modules/legal-pre/**/*.spec.ts, test/legal-pre/**
  • Description : Couvrir TOUS les TC : TC-NOM-01 à TC-NOM-05, TC-ERR-01 à TC-ERR-10, TC-INV-03/05/06/08, TC-NEG-01 à TC-NEG-06, TC-NR-01 à TC-NR-04. TC-NEG-02 avec concurrence réelle (Promise.all). Utiliser crypto.randomUUID() pour nonces.

4. Décisions architecturales

ID Décision Justification
DA-1 Modules rekey-manager-controls + rekey-repository combinés en T6 (un seul agent) Cohésion fonctionnelle — le manager et le repository ont des dépendances fortes (le manager appelle le repository). Évite une dépendance cyclique T6↔T6b.
DA-2 T7 (Prolog) est une vérification, pas du code extract-facts.py existe et parse les @Column automatiquement. Aucune modification requise — vérification seule.
DA-3 Tests (T8) séparés en dernier niveau Les tests consomment tous les composants — impossible de les paralléliser avec le code.

5. Résumé

Métrique Valeur
Total tâches 8
Niveaux de parallélisation 3
Temps séquentiel estimé 10h
Temps parallèle estimé 6h
Speedup factor 1.67x
Stratégie Git branch_per_level