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 |