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>
44 lines
1.7 KiB
JavaScript
44 lines
1.7 KiB
JavaScript
// 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" },
|
|
},
|
|
};
|