PD-272 — Retour d'experience¶
1. Fiche d'identite¶
| Champ | Valeur |
|---|---|
| Story | PD-272 |
| Titre | Conformite formelle PV-PROOF — trigger immutabilite legal_composite_proofs |
| Projet | ProbatioVault-backend |
| Domaine | crypto-proof |
| Sprint | PD Sprint 9 |
| Date debut | 2026-02-27 |
| Date fin | 2026-02-27 |
| Duree totale | ~4h (session unique) |
| Complexite | Faible |
2. Metriques de convergence¶
| Gate | Iterations | Score final | Verdict |
|---|---|---|---|
| Gate 3 (CONFORMITY_CHECK) | 1 | 9.0/10 | GO |
| Gate 5 (AMBIGUITY) | 1 | 8.875/10 | GO |
| Gate 8 (CLOSURE) | 1 | 9.0/10 | GO |
Total iterations : 3 (minimum theorique) Convergence : Optimale — GO en v1 pour les 3 gates
3. Artefacts livres¶
| Fichier | Lignes | Role |
|---|---|---|
1740900000000-PD272-CreateLegalCompositeProofImmutableTrigger.ts | ~40 | Migration PostgreSQL |
PD272-legal-composite-proof-immutable.integration-spec.ts | ~170 | Tests d'integration |
Volume total : ~210 lignes
4. Quality gates¶
| Outil | Resultat |
|---|---|
| TypeScript (tsc) | PASS — 0 erreur |
| ESLint | PASS — 0 erreur sur fichiers PD-272 |
| Prettier | PASS (apres correction) |
| Sonar | SKIP (token expire) |
5. Ecarts identifies en gates¶
Gate 3¶
4 ecarts MINEURS, tous faux positifs apres confrontation.
Gate 5¶
ChatGPT a identifie 9 ecarts dont 6 faux positifs. Ecart reel corrige : retrait de REVOKE TRUNCATE (extension de scope non demandee).
Gate 8¶
3 ecarts MINEURS : IF TG_OP (accepte), isolation tests (accepte), Sonar (non imputable).
6. Patterns positifs¶
-
Pattern trigger repliquable : Le pattern BEFORE UPDATE OR DELETE avec IF TG_OP pour messages differencies est desormais valide dans le codebase (rejoint PD-81 legal_access_event et PD-237 merkle_trees).
-
Story simple = convergence rapide : Une story de complexite faible (1 migration, 1 fichier test) converge naturellement en v1 sur les 3 gates. Pas de boucle de correction necessaire.
-
Typage des resultats query TypeORM : Les interfaces
ProofRowetTriggerRowresolvent les erreurs ESLintno-unsafe-assignmentsans castas any.
7. Difficultes rencontrees¶
-
claude-p indisponible : La commande
claude -pn'est pas installee (tier degraded). Contournement : utilisation d'OpenCode avec le modeleanthropic/claude-sonnet-4-20250514. -
ChatGPT Gate 5 sur-severe : Le reviewer ChatGPT a confondu singulier/pluriel (
legal_composite_proofvslegal_composite_proofs) et a signale 9 ecarts dont 6 faux positifs. La confrontation a corrige. -
Sonar token expire : Le token Vault pour SonarCloud est expire (HTTP 403). Non imputable a PD-272 mais bloque le scan local.
-
OpenCode permission external_directory : L'agent OpenCode ne peut pas acceder aux fichiers hors du projet backend. Les reviews et le REX doivent etre guides ou assembles inline.
8. Ecarts de processus¶
| ID | Description | Impact |
|---|---|---|
| PROC-01 | Sonar local skip — necessitait un token valide | MINEUR — couvert par ESLint+tsc |
| PROC-02 | claude-p indisponible — fallback OpenCode | MINEUR — fonctionnellement equivalent |
| PROC-03 | Tests integration non executables (pas de PostgreSQL local) | MINEUR — seront executes en CI |
9. Learnings¶
-
[PostgreSQL Immutability Trigger] IF TG_OP pour differencier les messages d'erreur est conforme au forbidden pattern "IF/WHEN condition" si les 2 branches levent RAISE EXCEPTION.
-
[TypeORM Query Typing] Typer les resultats
dataSource.query()avec des interfaces evite les erreurs ESLint no-unsafe-assignment et ameliore la maintenabilite des tests. -
[Gate 5 Cross-validation] ChatGPT peut etre sur-severe sur les noms de tables (singulier vs pluriel). La confrontation est indispensable pour corriger les faux positifs.
10. Ameliorations process¶
10.1 Renouvellement token Sonar (priorite: haute)¶
Fichier cible : CLAUDE.md section "Integrations externes"
Action : Documenter la procedure de renouvellement du token SonarCloud via Vault et ajouter un check de validite au demarrage du workflow.
10.2 Template tests integration — interfaces TypeORM (priorite: moyenne)¶
Fichier cible : templates/prompts/step2-tests.md
Action : Ajouter dans le template de generation de tests une instruction pour typer les resultats dataSource.query() avec des interfaces explicites au lieu de any.
10.3 Fallback claude-p → OpenCode (priorite: basse)¶
Documentation : Le fallback opencode run -m anthropic/claude-sonnet-4-20250514 est fonctionnellement equivalent a claude -p pour les prompts delegues. A documenter dans CLAUDE.md section "Fallbacks".