---
name: architect
description: Phase d'architecture systématique AVANT le code (TDD). Use when starting a new feature that touches multiple files, designing a new module, or making non-trivial architectural choices.
context: fork
disable-model-invocation: true
triggers:
  keywords: ["architect", "design", "new feature", "structure", "boundaries", "dependencies", "module design"]
auto_suggest: true
---

# Architect — Phase d'architecture avant TDD

Skill inspiré de [obra/superpowers](https://github.com/obra/superpowers). **Objectif :** produire une spec d'architecture avant d'écrire le moindre test ou ligne de code.

**Règle d'or :** si tu ne peux pas dessiner le diagramme, tu ne peux pas coder la feature.

## Quand utiliser

| Situation | Architect phase ? |
|-----------|-------------------|
| Bug 1 fichier | ❌ Non (go direct TDD) |
| Nouvelle feature < 3 fichiers | ⚠️ Court (10 min) |
| Nouvelle feature > 3 fichiers | ✅ Obligatoire |
| Nouveau module/bounded context | ✅ Obligatoire |
| Migration technique | ✅ Obligatoire |
| Intégration externe (API, MQ, DB) | ✅ Obligatoire |

## Processus en 5 étapes

### 1. Identifier les boundaries

Quelles **frontières** la feature touche-t-elle ?

- **Domain boundaries** — quels bounded contexts impliqués ?
- **Layer boundaries** — Presentation / Application / Domain / Infrastructure ?
- **Process boundaries** — sync HTTP / async queue / event-driven ?
- **Data boundaries** — quelles bases de données, quelles tables ?
- **Ownership boundaries** — quelle équipe owne quel morceau ?

**Output :** liste des frontières traversées.

### 2. Définir les contrats

Pour chaque frontière traversée, définir le **contrat** :

- **Inputs** : format, types, invariants, nullabilité
- **Outputs** : format, codes d'erreur, latence cible
- **Side effects** : écritures DB, events émis, appels externes
- **Idempotence** : le contrat est-il idempotent ?
- **Transactions** : atomique ? eventually consistent ?

**Output :** signatures de fonctions/endpoints + DTO.

### 3. Dessiner les dépendances

Qui dépend de quoi ? Dans quel sens ?

```
[HTTP Controller] ──▶ [Use Case] ──▶ [Domain Service]
                                          │
                                          ▼
                                     [Repository] (interface)
                                          │
                                          ▼
                        [Postgres Adapter] ─implements─▶
```

**Vérifier :**
- [ ] Pas de cycle (A → B → A)
- [ ] DIP respecté (domain ne dépend pas de l'infra)
- [ ] Pas plus de 3 niveaux d'appel entre entrée et côté métier

**Output :** diagramme (Mermaid, ASCII, ou texte structuré).

### 4. Lister les trade-offs

Pour chaque décision non évidente, documenter **pourquoi** ce choix :

| Décision | Alternative envisagée | Pourquoi ce choix |
|----------|----------------------|-------------------|
| Async via queue | Sync HTTP | Latence >500ms, pas critique immédiat |
| CQRS | CRUD simple | Ratio 20:1 lecture/écriture |
| Event sourcing | Store état | Besoin audit légal |

**Output :** ADR léger (3-5 bullets) — voir `.claude/rules/10-documentation.md` pour ADR formel si décision majeure.

### 5. Définir les tests d'architecture

**Avant TDD sur le comportement**, définir les tests d'architecture :

- Tests de dépendances (ArchUnit, Dephpend, deptrac)
- Tests de contrats (OpenAPI validation, contract tests)
- Tests de performance cibles (latence p99, throughput)
- Tests d'isolation multitenant si applicable

**Output :** liste de tests d'architecture à écrire en Phase TDD.

## Livrables

À la fin de la phase Architect, produire :

1. **Diagramme** dépendances (1 page max)
2. **Contrats** des frontières (signatures + DTO)
3. **ADR court** trade-offs principaux
4. **Liste de tests** d'architecture
5. **Découpage en tâches atomiques** (voir skill `atomic-tasks`)

Ce n'est qu'**après** qu'on rentre dans le TDD (Red/Green/Refactor).

## Anti-patterns

| Anti-pattern | Solution |
|--------------|----------|
| Coder directement sans diagramme | Dessiner AVANT, même 5 min suffisent |
| Architect phase > 2h sur feature simple | YAGNI — couper court |
| Contrats flous ("objet User") | Types stricts, tous les champs |
| Ignorer les trade-offs | ADR court obligatoire |
| Architecture en vase clos | Review par un pair ou subagent `@tech-lead` |

## Intégration Claude Craft

- **`/workflow:design`** — utilise ce skill par défaut
- **Agent `@tech-lead`** — peut produire l'output Architect
- **ADR formel** : voir `/common:architecture-decision`
- **Rule 04 SOLID** + **Rule 17 CQRS** + **Rule 14 Multitenant** — consulter selon contexte

## Ressources

- [obra/superpowers](https://github.com/obra/superpowers)
- Rule `.claude/rules/04-solid-principles.md`
- Rule `.claude/rules/10-documentation.md` (ADR)
- Skill `atomic-tasks`

---

**Date de dernière mise à jour :** 2026-04-15
**Version :** 1.0.0
