Scénario « Jouer une partie » exécuté ; garde-fous d'architecture
Les étapes de docs/scenarios/jouer-une-partie.feature pilotent le domaine sur le vrai moteur WebAssembly, avec des dés imposés (Cucumber, sous Node). Deux retouches du scénario : 8/4 avec 3-1 est un coup permis (8/5/4), remplacé par 13/12 (case tenue par l'ordinateur) ; « c'est ensuite au tour de l'ordinateur » distingue le constat de la situation de départ du même nom. dependency-cruiser vérifie que le domaine n'importe que le domaine, que l'interface n'appelle pas le moteur et qu'il n'y a pas de cycle ; tests/test_web.sh prouve aussi que des violations volontaires sont détectées. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
602d0eafed
commit
1f9981dc63
@@ -0,0 +1,43 @@
|
||||
// Règles d'architecture de l'application (ADR 0007, point 2 ; ADR 0009),
|
||||
// vérifiées par dependency-cruiser dans make test (tests/test_web.sh).
|
||||
// Les chemins sont relatifs au dossier app/.
|
||||
|
||||
/** @type {import('dependency-cruiser').IConfiguration} */
|
||||
module.exports = {
|
||||
forbidden: [
|
||||
{
|
||||
name: "domain-is-pure",
|
||||
comment:
|
||||
"Le domaine n'importe que le domaine : ni le moteur (src/engine), ni " +
|
||||
"l'interface (src/ui), ni Node, ni bibliothèque, ni code du navigateur. " +
|
||||
"Il décrit ce dont il a besoin (interface Engine) ; les adaptateurs " +
|
||||
"l'implémentent.",
|
||||
severity: "error",
|
||||
from: { path: "^src/domain/" },
|
||||
to: { pathNot: "^src/domain/" },
|
||||
},
|
||||
{
|
||||
name: "ui-does-not-call-engine",
|
||||
comment:
|
||||
"Aucun écran n'appelle le moteur directement : l'interface passe par le domaine.",
|
||||
severity: "error",
|
||||
from: { path: "^src/ui/" },
|
||||
to: { path: "^src/engine/" },
|
||||
},
|
||||
{
|
||||
name: "no-circular",
|
||||
comment: "Pas de dépendance circulaire.",
|
||||
severity: "error",
|
||||
from: {},
|
||||
to: { circular: true },
|
||||
},
|
||||
],
|
||||
options: {
|
||||
// Les imports de types comptent aussi : ils disparaissent à la
|
||||
// compilation, mais créent bien une dépendance dans le code source.
|
||||
tsPreCompilationDeps: true,
|
||||
// Résolution des imports comme TypeScript : « ./events.js » désigne
|
||||
// le fichier events.ts. Le tsconfig.json est celui du dossier courant.
|
||||
tsConfig: { fileName: "tsconfig.json" },
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user