Le code d'Ustagammon va être écrit par des agents, et Pierre ne le relit pas en détail. Sans règles posées tôt, chaque agent organiserait le code à sa façon, et l'application deviendrait difficile à comprendre et à faire évoluer. Les premiers agents (0a.2 et 0a.3) sont justement en train d'écrire du code : c'est le moment de fixer le cadre.
Pierre a demandé des bonnes pratiques de niveau senior, mais surtout « quelque chose de simple, et compréhensible par un humain (pas d'overengineering) ». Il a arbitré trois points : le stockage des parties, la langue des identifiants et la vérification automatique de l'architecture.
Quoi
Un nouvel ADR, docs/adr/0007-architecture-et-conventions-de-code.md, fixe :
la simplicité d'abord : pas d'abstraction sans deuxième usage réel, pas de framework sans besoin avéré ;
trois parties (domaine pur, moteur derrière engine/include/engine.h, application), avec une seule règle : les dépendances vont vers le domaine, et aucun écran n'appelle le moteur directement ;
une partie est un journal d'événements, en arbre : les branches (« Rejouer d'ici ») et l'annulation en découlent sans code spécifique. Le reste de l'application est stocké simplement ;
le hasard est injecté : tests reproductibles, historique des dés consultable ;
les identifiants du code en anglais, les commentaires, la doc et les commits en français. L'interface C prévue sous le nom moteur.h devient donc engine.h ;
le langage commun du DDD sans sa cérémonie ;
la stratégie de tests : domaine avec un faux moteur, suite de contrat commune à tous les adaptateurs du moteur, peu de tests de bout en bout ;
les règles pour notre code C.
CLAUDE.md, docs/etape-0.md, la feuille de route et l'index des ADR sont mis à jour. Un second commit ajoute /.claude/ au .gitignore : les espaces de travail des sous-agents s'y trouvent, et le premier commit de cette branche les avait embarqués par erreur.
Comment
Les choix suivent ce que demande le cadrage, au plus simple :
Interface du moteur : le cadrage la demandait déjà (« aucun écran ne l'appelle directement ») ; l'ADR en fait une règle générale du domaine.
Journal d'événements : il répond directement à deux fonctions du cadrage, les branches et l'annulation, et à l'export SGF, qui est lui-même un journal de coups.
Tests d'architecture : ils remplacent la relecture humaine, que Pierre ne fait pas.
Les deux agents en cours de travail ont reçu les nouvelles conventions (identifiants en anglais, simplicité) ; leurs branches les appliqueront.
Choix et compromis
Event sourcing limité aux parties, pas étendu à toute l'application avec projections (CQRS) : trop lourd pour une application hors ligne à un seul utilisateur.
Pas d'état classique pour les parties : plus simple au départ, mais les branches et l'annulation deviendraient du code au cas par cas.
Identifiants en anglais (choix de Pierre) : conventions habituelles du code et des bibliothèques, au prix d'un écart entre les noms du code et ceux de la doc. Le glossaire fera le lien.
Pas d'architecture hexagonale formelle ni de DDD complet : trop d'interfaces et de vocabulaire pour une application de cette taille.
L'outil de vérification des dépendances n'est pas encore choisi : il dépend du socle (PWA ou Android), décidé à la fin de l'étape 0.
Risques et déploiement
Aucun code applicatif ne change.
Le format des événements de partie devient un contrat durable : le changer plus tard demandera une migration et un nouvel ADR.
Le renommage moteur.h en engine.h touche l'ADR 0005, qui n'est pas réécrit (règle des ADR) : l'ADR 0007 signale le renommage.
Retour arrière : annuler le commit de fusion.
Comment vérifier
git switch main && git pull
make lint && make test
less docs/adr/0007-architecture-et-conventions-de-code.md
git ls-files .claude | wc -l # 0
Hors périmètre
La structure exacte des dossiers du domaine, le langage de l'interface (TypeScript ou Kotlin) et l'outil de vérification des dépendances seront fixés avec le choix du socle.
Le glossaire des termes du jeu sera écrit avec les premières fonctions du domaine (étape 0d).
Les MR !1 et !2 apparaissent toujours « open » dans Gitea alors qu'elles sont fusionnées (commits de fusion 6958acc et aa4f504 sur main). C'est noté dans le journal ; le diagnostic côté serveur reste à faire.
## Pourquoi
Le code d'Ustagammon va être écrit par des agents, et Pierre ne le relit pas en détail. Sans règles posées tôt, chaque agent organiserait le code à sa façon, et l'application deviendrait difficile à comprendre et à faire évoluer. Les premiers agents (0a.2 et 0a.3) sont justement en train d'écrire du code : c'est le moment de fixer le cadre.
Pierre a demandé des bonnes pratiques de niveau senior, mais surtout « quelque chose de simple, et compréhensible par un humain (pas d'overengineering) ». Il a arbitré trois points : le stockage des parties, la langue des identifiants et la vérification automatique de l'architecture.
## Quoi
Un nouvel ADR, `docs/adr/0007-architecture-et-conventions-de-code.md`, fixe :
- **la simplicité d'abord** : pas d'abstraction sans deuxième usage réel, pas de framework sans besoin avéré ;
- **trois parties** (domaine pur, moteur derrière `engine/include/engine.h`, application), avec une seule règle : les dépendances vont vers le domaine, et aucun écran n'appelle le moteur directement ;
- **une partie est un journal d'événements**, en arbre : les branches (« Rejouer d'ici ») et l'annulation en découlent sans code spécifique. Le reste de l'application est stocké simplement ;
- **le hasard est injecté** : tests reproductibles, historique des dés consultable ;
- **les identifiants du code en anglais**, les commentaires, la doc et les commits en français. L'interface C prévue sous le nom `moteur.h` devient donc `engine.h` ;
- **le langage commun du DDD sans sa cérémonie** ;
- **la stratégie de tests** : domaine avec un faux moteur, suite de contrat commune à tous les adaptateurs du moteur, peu de tests de bout en bout ;
- **les règles pour notre code C**.
`CLAUDE.md`, `docs/etape-0.md`, la feuille de route et l'index des ADR sont mis à jour. Un second commit ajoute `/.claude/` au `.gitignore` : les espaces de travail des sous-agents s'y trouvent, et le premier commit de cette branche les avait embarqués par erreur.
## Comment
Les choix suivent ce que demande le cadrage, au plus simple :
- **Interface du moteur** : le cadrage la demandait déjà (« aucun écran ne l'appelle directement ») ; l'ADR en fait une règle générale du domaine.
- **Journal d'événements** : il répond directement à deux fonctions du cadrage, les branches et l'annulation, et à l'export SGF, qui est lui-même un journal de coups.
- **Tests d'architecture** : ils remplacent la relecture humaine, que Pierre ne fait pas.
Les deux agents en cours de travail ont reçu les nouvelles conventions (identifiants en anglais, simplicité) ; leurs branches les appliqueront.
## Choix et compromis
- **Event sourcing limité aux parties**, pas étendu à toute l'application avec projections (CQRS) : trop lourd pour une application hors ligne à un seul utilisateur.
- **Pas d'état classique pour les parties** : plus simple au départ, mais les branches et l'annulation deviendraient du code au cas par cas.
- **Identifiants en anglais** (choix de Pierre) : conventions habituelles du code et des bibliothèques, au prix d'un écart entre les noms du code et ceux de la doc. Le glossaire fera le lien.
- **Pas d'architecture hexagonale formelle ni de DDD complet** : trop d'interfaces et de vocabulaire pour une application de cette taille.
- **L'outil de vérification des dépendances n'est pas encore choisi** : il dépend du socle (PWA ou Android), décidé à la fin de l'étape 0.
## Risques et déploiement
Aucun code applicatif ne change.
- **Le format des événements de partie devient un contrat durable** : le changer plus tard demandera une migration et un nouvel ADR.
- **Le renommage `moteur.h` en `engine.h`** touche l'ADR 0005, qui n'est pas réécrit (règle des ADR) : l'ADR 0007 signale le renommage.
Retour arrière : annuler le commit de fusion.
## Comment vérifier
```
git switch main && git pull
make lint && make test
less docs/adr/0007-architecture-et-conventions-de-code.md
git ls-files .claude | wc -l # 0
```
## Hors périmètre
- La structure exacte des dossiers du domaine, le langage de l'interface (TypeScript ou Kotlin) et l'outil de vérification des dépendances seront fixés avec le choix du socle.
- Le glossaire des termes du jeu sera écrit avec les premières fonctions du domaine (étape 0d).
- Les MR !1 et !2 apparaissent toujours « open » dans Gitea alors qu'elles sont fusionnées (commits de fusion 6958acc et aa4f504 sur `main`). C'est noté dans le journal ; le diagnostic côté serveur reste à faire.
Generated with Claude Code https://claude.com/claude-code
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Pourquoi
Le code d'Ustagammon va être écrit par des agents, et Pierre ne le relit pas en détail. Sans règles posées tôt, chaque agent organiserait le code à sa façon, et l'application deviendrait difficile à comprendre et à faire évoluer. Les premiers agents (0a.2 et 0a.3) sont justement en train d'écrire du code : c'est le moment de fixer le cadre.
Pierre a demandé des bonnes pratiques de niveau senior, mais surtout « quelque chose de simple, et compréhensible par un humain (pas d'overengineering) ». Il a arbitré trois points : le stockage des parties, la langue des identifiants et la vérification automatique de l'architecture.
Quoi
Un nouvel ADR,
docs/adr/0007-architecture-et-conventions-de-code.md, fixe :engine/include/engine.h, application), avec une seule règle : les dépendances vont vers le domaine, et aucun écran n'appelle le moteur directement ;moteur.hdevient doncengine.h;CLAUDE.md,docs/etape-0.md, la feuille de route et l'index des ADR sont mis à jour. Un second commit ajoute/.claude/au.gitignore: les espaces de travail des sous-agents s'y trouvent, et le premier commit de cette branche les avait embarqués par erreur.Comment
Les choix suivent ce que demande le cadrage, au plus simple :
Les deux agents en cours de travail ont reçu les nouvelles conventions (identifiants en anglais, simplicité) ; leurs branches les appliqueront.
Choix et compromis
Risques et déploiement
Aucun code applicatif ne change.
moteur.henengine.htouche l'ADR 0005, qui n'est pas réécrit (règle des ADR) : l'ADR 0007 signale le renommage.Retour arrière : annuler le commit de fusion.
Comment vérifier
Hors périmètre
6958accetaa4f504surmain). C'est noté dans le journal ; le diagnostic côté serveur reste à faire.Generated with Claude Code https://claude.com/claude-code