PD-40 — Rétrospective¶
1. Contexte¶
| Champ | Valeur |
|---|---|
| Story ID | PD-40 |
| Titre | Rotation de clés HSM et re-signature |
| Domaine | crypto-proof |
| Projet | backend |
| Date complétion | 2026-01-05 |
| Verdict | ACCEPTÉ |
2. Métriques¶
| Métrique | Valeur |
|---|---|
| Suites Jest/Vitest | 144 |
| Tests totaux | 2551 + 92 contractuels |
| Couverture branches | ~80% |
| Services créés | 6 |
| Invariants couverts | 10/10 |
| Critères d'acceptation | 7/7 |
3. Learnings clés¶
-
Modèle append-only simplifie la gestion d'erreurs : Utiliser des états de signature (CANDIDATE/ACTIVE) plutôt que des suppressions rend le rollback trivial — il n'y a pas de rollback, juste une absence de promotion.
-
Invariants numérotés facilitent la traçabilité : Chaque INV-* a un test TC-INV-* correspondant. Cette correspondance 1:1 rend la revue d'acceptabilité mécanique.
-
Tests purs préférables pour CI : Convertir les tests d'intégration (avec DB) en tests unitaires purs accélère l'exécution CI de ~10x et élimine les problèmes de concurrence.
-
Canonicalisation RFC 8785 essentielle : Sans canonicalisation déterministe, le hash du payload varie selon l'ordre des clés JSON, rendant les signatures non reproductibles.
-
Documentation aspirationnelle vs factuelle : Marquer des tests comme PASS avant implémentation crée une fausse impression de complétude. Distinguer "à implémenter" vs "implémenté".
4. Patterns applicables¶
Pattern existant : Canonicalisation RFC 8785¶
import { canonicalize } from 'canonicalize';
const canonical = canonicalize(eventData);
const hash = crypto.createHash('sha3-256').update(canonical).digest();
Nouveau pattern : États de signature append-only¶
enum SignatureState {
CANDIDATE = 'CANDIDATE', // Re-signé, pas encore promu
ACTIVE = 'ACTIVE', // Signature de référence
SUPERSEDED = 'SUPERSEDED', // Remplacée par nouvelle rotation
}
// Promotion atomique
await queryRunner.manager.update(SignatureEntry,
{ rotationId, state: SignatureState.CANDIDATE },
{ state: SignatureState.ACTIVE }
);
Nouveau pattern : Unicité clé active PostgreSQL¶
5. Signal CLAUDE.md¶
Priorité moyenne : Template de test avec statut factuel.
### Matrice de Tests — Statut factuel (2026-02-XX)
Dans PD-XX-tests.md, utiliser des statuts explicites :
| Test ID | Description | Statut | Date vérification |
|---------|-------------|--------|-------------------|
| TC-01 | ... | À IMPLÉMENTER | - |
| TC-02 | ... | IMPLÉMENTÉ | 2026-01-05 |
| TC-03 | ... | PASS (CI) | 2026-01-05 |
**NE JAMAIS marquer PASS avant exécution réelle.**
6. Conclusion¶
PD-40 a livré la rotation de clés HSM avec re-signature append-only et promotion atomique. Les 4 écarts (E-01 à E-04) concernaient des tests contractuels manquants, illustrant l'importance de distinguer documentation aspirationnelle et factuelle. Le pattern append-only avec états de signature est désormais standard pour les opérations probatoires.
Rétrospective générée 2026-02-19 (Étape 10 batch crypto-proof)