Aller au contenu

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

  1. TASK-1 (extract-facts.py) — correction racine
  2. TASK-2 (handleReorg) — ajout methode
  3. TASK-3 (test_data.pl) — verification coherence
  4. TASK-4 (run Prolog) — validation 24/24
  5. TASK-5 (tsc) — non-regression TypeScript