# Gate — Validation pre-construction

Tu es un quality gate. Ton role : **verifier que le projet est pret a passer en phase BUILD**. Tu ne crees rien — tu verifies. Tu bloques si les conditions ne sont pas remplies.

---

## Sommaire

1. Quand gate
2. Auto-checks
3. Questions qualitatives
4. Post-gate

---

## 1. Quand gate

- **Apres** `skills/sequence.md` + au moins 1 `skills/simulate.md`
- Le gate ne cree rien — il verifie
- Un gate PASS ne garantit pas que le jeu sera bon, mais qu'on a fait le **minimum de preparation**

### Gate = moment de decision

Le gate est le dernier moment ou c'est gratuit de changer. Apres le gate, on construit — et chaque changement de direction coute du code a reecrire.

---

## 2. Auto-checks

Lire les fichiers du projet et verifier automatiquement :

### Prerequis (bloquants)

```
Gate : PLAN → BUILD

Prerequis (auto-verifies) :
  GAME_PLAN.md existe et non vide
  GAME_SEQUENCE.yaml existe et parseable
  Au moins 1 simulation narrative completee (verifier CHECKPOINT.md ou demander)
  Tous les states ont au moins 1 transition sortante
  Pas de states orphelins (non atteignables depuis entry)
  Core loop identifie (>=1 loop avec >=3 states)
  Emotional arc defini pour la core loop
  Au moins 3 edge cases documentes
```

### Recommande (non bloquants)

```
Recommande (non bloquant) :
  Simulation balance completee
  Simulation exhaustive completee
  data/*.yaml crees pour les valeurs numeriques
  Tous les edge cases severity:critical ont un "expected" defini
```

### Comment verifier chaque check

| Check | Methode |
|-------|---------|
| GAME_PLAN.md existe | Lire le fichier, verifier qu'il n'est pas vide |
| GAME_SEQUENCE.yaml valide | Parser le YAML, verifier les cles `meta`, `loops`, `states` |
| Simulation faite | Chercher dans CHECKPOINT.md ou demander au user |
| Transitions completes | Pour chaque state dans `states:`, verifier que `transitions:` existe et est non vide |
| Pas d'orphelins | Construire le graphe, DFS depuis chaque `entry`, lister les states non visites |
| Core loop >=3 states | Dans `loops:`, au moins 1 loop avec >=3 items dans `states:` |
| Emotional arc | `emotional_arc:` contient une entree pour la core loop |
| Edge cases >=3 | `edge_cases:` contient >=3 items |

### Si un check echoue

Pointer vers le skill correctif :

| Check echoue | Action |
|-------------|--------|
| Pas de GAME_PLAN.md | → `skills/plan.md` |
| Pas de GAME_SEQUENCE.yaml | → `skills/sequence.md` |
| Pas de simulation | → `skills/simulate.md` |
| Transitions manquantes | → `skills/sequence.md` (editer le YAML) |
| Orphelins | → `skills/sequence.md` (ajouter les transitions manquantes) |
| Core loop trop courte | → `skills/sequence.md` (decomposer la boucle) |
| Pas d'arc emotionnel | → `skills/sequence.md` (ajouter la section emotional_arc) |
| Pas assez d'edge cases | → `skills/sequence.md` (ajouter des edge cases) |

---

## 3. Questions qualitatives

Posees au user apres les auto-checks. Adaptees du "Test UX" de Maelodynn.

### Les 4 questions

**1. DESIRABLE** — Le joueur a-t-il envie de jouer a CA ?

> Si tu n'es pas excite par ta propre sequence, le joueur ne le sera pas.

**2. LISIBLE** — En lisant la sequence, tu vois le jeu dans ta tete ?

> Si la sequence est confuse sur papier, elle sera pire en code.

**3. MEMORABLE** — Quel moment le joueur racontera a un pote ?

> S'il n'y en a pas, ajouter un moment "wow" a la sequence.

**4. VIABLE** — Est-ce realiste a construire avec ton budget temps ?

> Comparer le nombre de states/mecaniques au temps disponible.

### Interpreter les reponses

| Reponse | Signification | Action |
|---------|--------------|--------|
| "Non" a DESIRABLE | Red flag majeur | Revenir a `skills/plan.md` — le concept ne tient pas |
| "Non" a LISIBLE | La sequence est trop complexe ou mal structuree | Simplifier via `skills/sequence.md` |
| "Non" a MEMORABLE | Il manque un moment fort | Ajouter un peak dans l'emotional arc |
| "Non" a VIABLE | Scope trop large | Couper des states, reduire le scope |

---

## 4. Post-gate

### Output format

```
## Gate Result : PLAN → BUILD

### Auto-checks : {X}/8 passed
  GAME_PLAN.md existe (42 lignes)
  GAME_SEQUENCE.yaml valide (12 states, 3 loops)
  Simulation narrative : First Timer completee
  Transitions : tous les states ont >=1 sortie
  Pas d'orphelins
  Core loop : 5 states (explore → encounter → resolve → reward → advance)
  Emotional arc : core loop defini
  Edge cases : 5 documentes (2 critical, 2 warning, 1 info)

### Recommande : {X}/4 done
  Simulation balance : completee
  Simulation exhaustive : completee
  data/*.yaml : 3 fichiers (enemies, player, levels)
  Edge cases critical — expected manquant pour EC-03

### Qualitative : {PASS | DISCUSS}
  DESIRABLE : "Oui, le loop est addictif"
  LISIBLE : "Oui"
  MEMORABLE : "Le premier boss fight"
  VIABLE : "Oui, 2 semaines max"

### Verdict : {PASS | BLOCKED | CONDITIONAL}
```

### Verdicts

| Verdict | Condition | Message |
|---------|-----------|---------|
| **PASS** | 8/8 auto-checks + qualitative OK | "Pret a builder. Next: `skills/architecture.md`" |
| **BLOCKED** | >=1 auto-check echoue | "Corriger avant de re-gate : {items}" |
| **CONDITIONAL** | Auto-checks OK mais recommandes manquants | "PASS avec notes : {items manquants}. On continue vers `skills/architecture.md`. Les items recommandes pourront etre ajoutes pendant la construction." |

### Apres le gate

- **PASS** → Proposer `skills/architecture.md` (le flow standard continue)
- **BLOCKED** → Pointer vers les skills correctifs
- **CONDITIONAL** → Traiter comme PASS. Proposer `skills/architecture.md`. Noter les items manquants dans CHECKPOINT.md pour review ulterieur

### Enregistrer le resultat

Ajouter dans `CHECKPOINT.md` :

```markdown
## Gate : PLAN → BUILD
- Date: {date}
- Verdict: {PASS | BLOCKED | CONDITIONAL}
- Auto-checks: {X}/8
- Recommande: {X}/4
- Notes: {resume des findings}
```

---

## Checklist

- [ ] Tous les auto-checks ont ete executes
- [ ] Les questions qualitatives ont ete posees (ou skippees explicitement)
- [ ] Le verdict est clair (PASS, BLOCKED, ou CONDITIONAL)
- [ ] Les items bloquants pointent vers le bon skill correctif
- [ ] Le resultat est enregistre dans CHECKPOINT.md

---

## Pieges courants

| Piege | Solution |
|-------|---------|
| Forcer le PASS sans simulation | Le gate BLOQUE sans au moins 1 simulation narrative. Pas de negociation |
| Ignorer DESIRABLE = "non" | C'est le red flag le plus important. Revenir au plan, pas patcher la sequence |
| Gate comme formalite | Si on valide tout sans reflechir, autant ne pas gate. Prendre le temps de lire le YAML |
| Scope creep post-gate | Le gate valide un scope. Si le user ajoute des features apres, re-gate |

---

## See also

| Skill | Quand l'utiliser |
|-------|-----------------|
| `skills/sequence.md` | Creer ou corriger la sequence |
| `skills/simulate.md` | Simuler avant le gate |
| `skills/plan.md` | Revenir a la vision si DESIRABLE = non |
| `skills/architecture.md` | Prochaine etape apres PASS |
