ADR 0008: Repository tooling conventions
- Status: accepted
- Date: 2026-10-04
- Issues: #144, #150, #107
- Pull requests: #145, #153
- Builds on: ADR 0002
Context
Elysion started with a Prettier config per app, which disagreed (the NestJS apps used the default print width and trailing commas, the Angular app 100 columns), no shared editor settings and no root scripts to build, test or lint everything. GravionLabs/ariadne already solved this with a handful of root files.
Decision
- pnpm only, pinned through
packageManager; Node is pinned in.nvmrc(24, matching the Dockerfiles). - One root formatter configuration:
.prettierrc(100 columns, single quotes, trailing commas, the Angular parser for HTML),.prettierignoreand.editorconfig. Per-app Prettier configs are removed.pnpm format/pnpm format:checkrun over the whole repository. - Root scripts fan out with
pnpm -r --if-present:build,test,lint. - oxlint is the linter for every TypeScript app. Each app has its own
oxlint.jsonand alintscript: the NestJS apps lintsrc/andtest/; the canvas enables the React and React hooks rules; the Angular app turns on thetypescriptandoxcplugins. All of them treat thecorrectnesscategory as errors, and the frontends also reportsuspiciousfindings as warnings. There is no root ESLint configuration as in ariadne. Rules that are switched off carry a reason in the config or in anoxlint-disable-next-linecomment next to the code. - No shared
tsconfig.base.json. The apps need different module systems and compiler options (NestJS withnodenextand decorators, the canvas with a bundler and JSX, Angular with its own options), so a base would share almost nothing. This keeps ADR 0002. - Editor setup is committed:
.vscode/extensions.json,launch.json(one configuration per service and a full-stack compound) andtasks.json. Other files in.vscodestay ignored. - The repository is MIT licensed.
Consequences
- The initial reformat touched about 40 files; formatting-only commits will show up in
git blame. - Every new app inherits the formatter without configuration. A new TypeScript app adds an
oxlint.jsonand alintscript (pnpm lintat the root picks it up); compiler options are still chosen per app. - Ports for local runs are fixed in
launch.json(frontend 4200, BFF 3000, realtime 3001, business backend 5174), and changing them means changing the configurations and the README table together.