Aller au contenu

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.development versionné 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 utilisait DATABASE_*.

  • NODE_ENV mapping : La différence entre env_name=dev (Ansible) et NODE_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)