PD-274 — Plan d'implementation¶
1. Strategie¶
Approche hybride identique a PD-272 et PD-273 : modifier extract-facts.py pour corriger la detection des enums varchar, ajouter la methode handleReorg() dans AnchorBatchService, mettre a jour test_data.pl pour coherence, et valider par run Prolog.
2. Taches¶
TASK-1 : Modifier extract-facts.py — detection enum varchar + TS enum¶
Fichier : ProbatioVault-doc/scripts/formal/extract-facts.py (methode _extract_enums)
Modification : Ajouter un second pattern de detection pour les colonnes @Column({ type: 'varchar' }) dont la propriete TypeScript est typee avec un enum importe.
Pattern actuel (ligne 182) : @Column\(\s*\{[^}]*type:\s*['"]enum['"][^}]*enum:\s*(\w+)[^}]*\} — ne detecte que type: 'enum'.
Nouveau pattern supplementaire a ajouter : 1. Detecter @Column({ type: 'varchar' ... }) suivi d'une propriete status!: EnumType 2. Resoudre EnumType via les imports du fichier 3. Chercher la definition de l'enum dans le meme repertoire 4. Extraire les valeurs et generer entity_enum_values(...)
Invariants couverts : INV-274-01, INV-274-02 CA couverts : CA-01, CA-02
TASK-2 : Ajouter handleReorg() dans AnchorBatchService¶
Fichier : ProbatioVault-backend/src/modules/anchor/services/anchor-batch.service.ts
Modification : Ajouter une methode handleReorg(batchId: string) qui delegue vers failBatch(batchId, 'blockchain_reorg'). Pattern identique a PD-273 (alias sign() → signAuditEntry()).
Invariants couverts : INV-274-03 CA couverts : CA-03, CA-04
TASK-3 : Mettre a jour test_data.pl¶
Fichier : ProbatioVault-doc/docs/normes/pv-anchor/formal/test_data.pl
Modification : Verifier que les facts statiques sont coherents avec les corrections. Ajouter service_method(anchor_batch, handleReorg) si absent (deja present ligne 15). Verifier entity_enum_values (deja present ligne 52).
Invariants couverts : INV-274-06 (non-regression)
TASK-4 : Run Prolog PV-ANCHOR-001 complet¶
Commande : swipl -l test_data.pl -l pv_anchor_compliance.pl -g "run_audit." -t "halt."
Critere : 24/24 OK — score global conforme.
CA couverts : CA-05, CA-06
TASK-5 : Verification TypeScript¶
Commande : npx tsc --noEmit sur le fichier anchor-batch.service.ts modifie.
CA couverts : CA-07
3. Contraintes techniques¶
Dependances inter-PD¶
| Story | Statut | Nature |
|---|---|---|
| PD-55 | DONE | AnchorBatch entity + service (base) |
| PD-177 | DONE | signer_address ajoutee |
| PD-272 | DONE | Meme pattern de correction (PV-PROOF) |
| PD-273 | DONE | Meme pattern (PV-AUDIT, trigger atoms) |
Framework de test¶
- Runner : Jest
- Tests :
swipl(Prolog) +npx tsc --noEmit(TypeScript) - Pas de nouveaux tests unitaires — la preuve est le run Prolog 24/24
Compatibilite ESM/CJS¶
- Aucune dependance ESM-only identifiee
4. Mapping invariants/CA vers taches¶
| Invariant/CA | Tache couvrant | Test couvrant |
|---|---|---|
| INV-274-01 | TASK-1 (extract-facts.py) | TC-NOM-01, TC-NOM-02, TASK-4 (run Prolog) |
| INV-274-02 | TASK-1 (extract-facts.py) | TC-NOM-01, TC-NEG-01, TASK-4 |
| INV-274-03 | TASK-2 (handleReorg()) | TC-NOM-03, TC-NOM-04, TASK-4 |
| INV-274-04 | Hors perimetre code (spec only) | TC-NOM-07, TC-NOM-08 |
| INV-274-05 | Hors perimetre code (spec only) | TC-NOM-07, TC-NEG-03 |
| INV-274-06 | TASK-4 (run Prolog) | TC-NOM-05, TC-NOM-06 |
| INV-274-07 | TASK-5 (tsc --noEmit) | TC-NR-02 |
| INV-274-08 | Aucune modification DDL | TC-INV-08, TC-NR-03 |
5. Risques¶
| Risque | Mitigation |
|---|---|
| extract-facts.py : le nouveau pattern pourrait matcher des colonnes non-enum | Restreindre le pattern aux proprietes nommees status avec un import d'enum explicite |
| handleReorg() : methode deja referencee dans confirmation.tracker.ts | Verifier que la methode ajoutee est coherente avec l'usage existant dans le tracker |
| test_data.pl obsolete | Verifier coherence avec facts generes par extract-facts.py |
6. Ordre d'execution¶
- TASK-1 (extract-facts.py) — correction racine
- TASK-2 (handleReorg) — ajout methode
- TASK-3 (test_data.pl) — verification coherence
- TASK-4 (run Prolog) — validation 24/24
- TASK-5 (tsc) — non-regression TypeScript