Noted while working on #30.
samples/crm-web/package.json declares:
"lint": "eslint src --max-warnings 0"
with eslint ^9.17.0 and typescript-eslint ^8.18.0 in devDependencies. There is no eslint.config.js, .mjs or .cjs anywhere in the package, and no .eslintrc.* either. On a clean npm ci:
Oops! Something went wrong! :(
ESLint: 9.39.5
ESLint couldn't find an eslint.config.(js|mjs|cjs) file.
So the lint gate has never run against this codebase — which is worth stating plainly, because CONTRIBUTING.md asks contributors for a clean tree and samples/crm-web/Dockerfile notes that the typecheck runs as part of build. The typecheck does; the lint does not, and a contributor reading the script list would reasonably assume otherwise.
Not sending a patch, because the config is a set of decisions rather than a file: which rule sets (typescript-eslint recommended vs strict vs type-checked), whether eslint-plugin-react-hooks — already a dependency — is wired in, and whether the three layering rules stated in samples/crm-web/README.md become lint rules or stay conventions. That last one looks like the interesting part: “a primitive never imports a feature, a contract or a query” is mechanically checkable with no-restricted-imports, and a rule that is checked is a rule that survives.
Happy to send a config once you say which shape you want.
Noted while working on #30.
samples/crm-web/package.jsondeclares:with
eslint ^9.17.0andtypescript-eslint ^8.18.0indevDependencies. There is noeslint.config.js,.mjsor.cjsanywhere in the package, and no.eslintrc.*either. On a cleannpm ci:So the lint gate has never run against this codebase — which is worth stating plainly, because
CONTRIBUTING.mdasks contributors for a clean tree andsamples/crm-web/Dockerfilenotes that the typecheck runs as part ofbuild. The typecheck does; the lint does not, and a contributor reading the script list would reasonably assume otherwise.Not sending a patch, because the config is a set of decisions rather than a file: which rule sets (
typescript-eslintrecommended vs strict vs type-checked), whethereslint-plugin-react-hooks— already a dependency — is wired in, and whether the three layering rules stated insamples/crm-web/README.mdbecome lint rules or stay conventions. That last one looks like the interesting part: “a primitive never imports a feature, a contract or a query” is mechanically checkable withno-restricted-imports, and a rule that is checked is a rule that survives.Happy to send a config once you say which shape you want.