PD-52 — Rétrospective¶
1. Contexte¶
| Champ | Valeur |
|---|---|
| Story ID | PD-52 |
| Titre | Infrastructure Ethereum L2 (Polygon + Arbitrum) |
| Domaine | blockchain |
| Projet | backend |
| Date complétion | 2026-02-13 |
| Verdict | ACCEPTÉ (GO 8.0/10) |
2. Métriques¶
| Métrique | Valeur |
|---|---|
| Tests contractuels | 61/61 PASS |
| Coverage | 92.7% |
| Durée totale | ~19h (vs 16h estimé) |
| Pipelines post-Gate 8 | 5 (au lieu de 1) |
| Gate iterations | Gate 3: 2, Gate 5: 2, Gate 8: 1 |
3. Learnings clés¶
-
Tests de déploiement avant Gate 8 : Les erreurs de configuration Ansible n'ont été détectées qu'après Gate 8 GO. 5 pipelines nécessaires au lieu de 1.
-
Séparation stricte backend/infra pour les .env : Le backend contenait un
.env.developmentversionné qui entrait en conflit avec la génération Ansible. Règle : "Infra manages ALL .env files". -
AWS credentials requis pour S2 custody mode : Le plan d'implémentation ne mentionnait pas l'ajout des variables AWS dans le template Ansible.
-
Conventions de nommage variables database : PD-14 avait standardisé le préfixe
DB_*, mais le template Ansible utilisaitDATABASE_*. -
NODE_ENV mapping : La différence entre
env_name=dev(Ansible) etNODE_ENV=development(Node.js) doit être explicite.
4. Patterns applicables¶
Nouveau pattern : Module blockchain NestJS avec RPC fallback¶
@Injectable()
export class RpcProviderService {
private providers: Record<ChainId, ethers.Provider[]>;
async getProvider(chainId: ChainId): Promise<ethers.Provider> {
const [primary, secondary] = this.providers[chainId];
try {
await primary.getBlockNumber();
return primary;
} catch {
this.logger.warn(`RPC primary failed for ${chainId}, using secondary`);
return secondary;
}
}
}
Nouveau pattern : Checklist variables d'environnement dans le plan¶
## Variables d'environnement
| Variable | Source Vault | Fichier Ansible |
|----------|--------------|-----------------|
| AWS_ACCESS_KEY_ID | kv/app/aws-storage | aws.yml |
| AWS_SECRET_ACCESS_KEY | kv/app/aws-storage | aws.yml |
| BLOCKCHAIN_CUSTODY_MODE | — | env.j2 |
| RPC_POLYGON_PRIMARY | kv/app/blockchain | env.j2 |
5. Signal CLAUDE.md¶
Priorité haute : Tests de déploiement avant Gate 8.
### Workflow — Tests de déploiement avant Gate 8 (2026-02-XX)
**RÈGLE** : L'acceptabilité (étape 7) DOIT inclure un smoke-test de déploiement.
**Checklist pré-Gate 8** :
1. [ ] Pipeline infra exécuté
2. [ ] Pipeline backend exécuté
3. [ ] Smoke-test `/health` → HTTP 200
**Pourquoi** : PD-52 a nécessité 5 pipelines post-Gate 8 pour corriger la configuration Ansible (DATABASE_* vs DB_*, AWS credentials manquants).
**Règle supplémentaire** : Backend repo ne contient AUCUN fichier `.env*` (même `.env.example`). Infra gère tous les .env.
6. Conclusion¶
PD-52 a livré le module blockchain NestJS avec custody mode S2 (AWS KMS), RPC providers Polygon/Arbitrum avec fallback automatique, et health checks intégrés. Les 5 pipelines post-Gate 8 illustrent l'importance de valider la configuration Ansible avant acceptabilité. Le pattern checklist variables d'environnement est désormais obligatoire dans tout plan impliquant du déploiement.
Rétrospective générée 2026-02-19 (Étape 10 batch blockchain)