Aller au contenu

PD-237 — Rétrospective

1. Contexte

Champ Valeur
Story ID PD-237
Titre Persistance arbres Merkle
Domaine backend-core
Projet backend
Date complétion 2026-01-26
Verdict ACCEPTÉ

2. Métriques

Métrique Valeur
Tests contractuels 20/20 PASS
Tests totaux CI 3328 PASS
Tests unitaires Merkle 56
Tests E2E Merkle 12
Tests adversariaux 6
Commits pour livraison 4 (initial + 3 corrections tests)
Lignes service ~480
Lignes verifier ~270

3. Learnings clés

  • Détection environnement CI : Les tests E2E vérifiaient DB_HOST mais CI utilise DATABASE_URL. Supporter les deux variables.

  • BDD persistante CI : Les tests avec timestamps fixes échouent à la 2ème exécution (contrainte UNIQUE). Utiliser Date.now() pour unicité.

  • Mutation objet partagé : La fonction createValidRequest() retournait une référence. Quand un test modifie l'objet, il impacte les tests suivants. Toujours spread.

  • Tests E2E obligatoires : Les tests unitaires ne suffisent pas à valider les triggers SQL et transactions.

4. Patterns applicables

Pattern existant : Append-only avec triggers

Cohérent avec PD-171 (sync) : tables probatoires protégées par triggers BEFORE DELETE et BEFORE UPDATE.

Nouveau pattern : Isolation fixtures de test

// MAUVAIS - référence partagée
const createRequest = () => ({ ...sharedObject });

// BON - copie profonde
const createRequest = () => ({
  batch_metadata: { ...validBatchMetadata }, // spread
});

Nouveau pattern : Timestamps dynamiques pour tests

const testRunId = Date.now();
const windowStart = new Date(testRunId + testCounter * 3600000).toISOString();

5. Signal CLAUDE.md

Priorité haute : Documenter les pièges des tests avec BDD persistante.

### Tests E2E avec BDD persistante (2026-02-XX)

**Problèmes courants** :
1. `DB_HOST` vs `DATABASE_URL` : supporter les deux variables d'environnement
2. Timestamps fixes : utiliser `Date.now()` pour éviter les conflits UNIQUE
3. Objets partagés : toujours copier les fixtures avec spread operator

**Checklist** :
- [ ] `describeIfDb` vérifie `DB_HOST || DATABASE_URL`
- [ ] Chaque test génère des données uniques
- [ ] `Object.freeze()` sur les fixtures ou spread systématique

6. Conclusion

PD-237 a été livrée conformément à la spécification mais a nécessité 3 corrections de tests pour l'environnement CI. Les difficultés (détection env, timestamps, mutation) sont des problèmes d'infrastructure de test récurrents. Les patterns d'isolation des fixtures et de timestamps dynamiques doivent être standardisés pour éviter leur répétition.


Rétrospective générée 2026-02-19 (Étape 10 batch backend-core)