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_HOSTmais CI utiliseDATABASE_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)