@oddessentials/repo-standards 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +202 -0
- package/dist/config/standards.csharp-dotnet.azure-devops.json +542 -0
- package/dist/config/standards.csharp-dotnet.github-actions.json +542 -0
- package/dist/config/standards.csharp-dotnet.json +603 -0
- package/dist/config/standards.json +1351 -0
- package/dist/config/standards.python.azure-devops.json +557 -0
- package/dist/config/standards.python.github-actions.json +557 -0
- package/dist/config/standards.python.json +618 -0
- package/dist/config/standards.typescript-js.azure-devops.json +555 -0
- package/dist/config/standards.typescript-js.github-actions.json +555 -0
- package/dist/config/standards.typescript-js.json +616 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/package.json +82 -0
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
{
|
|
2
|
+
"checklist": {
|
|
3
|
+
"core": [
|
|
4
|
+
{
|
|
5
|
+
"ciHints": {
|
|
6
|
+
"github-actions": {
|
|
7
|
+
"job": "ci"
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
"description": "Maintain proper .gitignore and .dockerignore files to prevent committing secrets, build artifacts, or unnecessary files.",
|
|
11
|
+
"id": "gitignore-and-dockerignore",
|
|
12
|
+
"label": "Git and Docker Ignore Files",
|
|
13
|
+
"stack": {
|
|
14
|
+
"exampleConfigFiles": [
|
|
15
|
+
".gitignore",
|
|
16
|
+
".dockerignore"
|
|
17
|
+
],
|
|
18
|
+
"notes": "Use the official github/gitignore Node template as a base and add .env*, node_modules, dist/, coverage/, *.log, npm-debug.log*, etc. .dockerignore must exclude node_modules, .git, and local build output.",
|
|
19
|
+
"optionalFiles": [
|
|
20
|
+
".dockerignore"
|
|
21
|
+
],
|
|
22
|
+
"requiredFiles": [
|
|
23
|
+
".gitignore"
|
|
24
|
+
],
|
|
25
|
+
"verification": ".gitignore must exist; .dockerignore is recommended when containerizing or using Docker workflows."
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"ciHints": {
|
|
30
|
+
"github-actions": {
|
|
31
|
+
"job": "ci"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"description": "Run static code linting to enforce consistency and catch common issues early.",
|
|
35
|
+
"id": "linting",
|
|
36
|
+
"label": "Linting",
|
|
37
|
+
"stack": {
|
|
38
|
+
"exampleConfigFiles": [
|
|
39
|
+
".eslintrc.*"
|
|
40
|
+
],
|
|
41
|
+
"exampleTools": [
|
|
42
|
+
"eslint"
|
|
43
|
+
],
|
|
44
|
+
"notes": "Treat new lint errors as CI failures; keep existing issues as warnings until addressed.",
|
|
45
|
+
"optionalFiles": [
|
|
46
|
+
".eslintrc.js",
|
|
47
|
+
".eslintrc.cjs",
|
|
48
|
+
".eslintrc.json",
|
|
49
|
+
".eslintrc.yaml",
|
|
50
|
+
".prettierrc",
|
|
51
|
+
"prettier.config.js",
|
|
52
|
+
"prettier.config.cjs",
|
|
53
|
+
"prettier.config.json",
|
|
54
|
+
"prettier.config.yaml"
|
|
55
|
+
],
|
|
56
|
+
"requiredFiles": [
|
|
57
|
+
"eslint.config.js"
|
|
58
|
+
],
|
|
59
|
+
"requiredScripts": [
|
|
60
|
+
"lint"
|
|
61
|
+
],
|
|
62
|
+
"verification": "Presence of eslint.config.js (or any .eslintrc* file) indicates linting is enforced for the repository."
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"ciHints": {
|
|
67
|
+
"github-actions": {
|
|
68
|
+
"job": "ci"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"description": "Provide a deterministic unit test framework with a single command to run all tests.",
|
|
72
|
+
"id": "unit-test-runner",
|
|
73
|
+
"label": "Unit Test Runner",
|
|
74
|
+
"stack": {
|
|
75
|
+
"exampleConfigFiles": [
|
|
76
|
+
"jest.config.*"
|
|
77
|
+
],
|
|
78
|
+
"exampleTools": [
|
|
79
|
+
"jest"
|
|
80
|
+
],
|
|
81
|
+
"notes": "Keep unit tests fast and deterministic; move slow or flaky tests into integration or E2E suites.",
|
|
82
|
+
"optionalFiles": [
|
|
83
|
+
"jest.config.js",
|
|
84
|
+
"jest.config.ts",
|
|
85
|
+
"vitest.config.js",
|
|
86
|
+
"vitest.config.ts"
|
|
87
|
+
],
|
|
88
|
+
"requiredScripts": [
|
|
89
|
+
"test"
|
|
90
|
+
],
|
|
91
|
+
"verification": "Test framework configuration is present; test script is defined in package.json."
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"ciHints": {
|
|
96
|
+
"github-actions": {
|
|
97
|
+
"job": "ci"
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"description": "Provide a Dockerfile and, if applicable, a docker-compose file for local dev and CI parity.",
|
|
101
|
+
"id": "containerization",
|
|
102
|
+
"label": "Containerization (Docker / Docker Compose)",
|
|
103
|
+
"stack": {
|
|
104
|
+
"exampleConfigFiles": [
|
|
105
|
+
"Dockerfile",
|
|
106
|
+
"docker-compose.yml"
|
|
107
|
+
],
|
|
108
|
+
"exampleTools": [],
|
|
109
|
+
"notes": "Use multi-stage builds and pin Node.js and base image versions in the Dockerfile to match CI (e.g., node:22-alpine).",
|
|
110
|
+
"optionalFiles": [
|
|
111
|
+
"docker-compose.yml"
|
|
112
|
+
],
|
|
113
|
+
"requiredFiles": [
|
|
114
|
+
"Dockerfile"
|
|
115
|
+
],
|
|
116
|
+
"verification": "Dockerfile must be present; docker-compose.yml is optional and indicates orchestration usage."
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"ciHints": {
|
|
121
|
+
"github-actions": {
|
|
122
|
+
"job": "release"
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"description": "Use MAJOR.MINOR.PATCH versioning with clear rules and automated changelog generation based on commit history.",
|
|
126
|
+
"id": "semantic-versioning",
|
|
127
|
+
"label": "Semantic Versioning",
|
|
128
|
+
"stack": {
|
|
129
|
+
"exampleConfigFiles": [
|
|
130
|
+
".releaserc",
|
|
131
|
+
"package.json",
|
|
132
|
+
"CHANGELOG.md"
|
|
133
|
+
],
|
|
134
|
+
"exampleTools": [
|
|
135
|
+
"semantic-release",
|
|
136
|
+
"standard-version"
|
|
137
|
+
],
|
|
138
|
+
"notes": "Automate version bumping and changelog generation from Conventional Commits using semantic-release or standard-version. Configure CI to automatically bump package.json version, generate/update CHANGELOG.md, create git tags, and publish release artifacts. Protect release branches and ensure release tooling only runs there.",
|
|
139
|
+
"verification": "Check that the version field follows SemVer, and trigger the configured release workflow (for example, a dry run of semantic-release or standard-version) to confirm it automatically generates the expected next version, updates package.json, and creates/updates CHANGELOG.md with commit-based entries."
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"ciHints": {
|
|
144
|
+
"github-actions": {
|
|
145
|
+
"job": "ci"
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
"description": "Enforce structured commit messages such as Conventional Commits.",
|
|
149
|
+
"id": "commit-linting",
|
|
150
|
+
"label": "Commit Linting",
|
|
151
|
+
"stack": {
|
|
152
|
+
"exampleConfigFiles": [
|
|
153
|
+
"commitlint.config.*"
|
|
154
|
+
],
|
|
155
|
+
"exampleTools": [
|
|
156
|
+
"@commitlint/cli",
|
|
157
|
+
"@commitlint/config-conventional"
|
|
158
|
+
],
|
|
159
|
+
"notes": "Enforce commit message format via commit-msg hooks (e.g., Husky) before CI.",
|
|
160
|
+
"verification": "Create a test commit using the documented convention and ensure the commit message passes the configured commit linting or wizard (for example, commitlint or commitizen)."
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"ciHints": {
|
|
165
|
+
"github-actions": {
|
|
166
|
+
"job": "ci"
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
"description": "Generate readable unit test and coverage reports and enforce a minimum coverage threshold (around 80%) for new or changed code.",
|
|
170
|
+
"id": "unit-test-reporter",
|
|
171
|
+
"label": "Unit Test Reporter / Coverage",
|
|
172
|
+
"stack": {
|
|
173
|
+
"exampleConfigFiles": [
|
|
174
|
+
"jest.config.*"
|
|
175
|
+
],
|
|
176
|
+
"exampleTools": [
|
|
177
|
+
"jest",
|
|
178
|
+
"nyc"
|
|
179
|
+
],
|
|
180
|
+
"notes": "Collect coverage in lcov or similar format; use diff coverage so legacy gaps are visible but non-blocking.",
|
|
181
|
+
"verification": "Run the unit tests with coverage enabled and confirm that a coverage report is produced and that the configured threshold (around 80%) is enforced for new changes."
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"ciHints": {
|
|
186
|
+
"github-actions": {
|
|
187
|
+
"job": "ci"
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
"description": "Single CI pipeline that runs linting, formatting, type checking, tests, coverage, build, and containerization.",
|
|
191
|
+
"id": "ci-quality-gates",
|
|
192
|
+
"label": "CI Quality Gates",
|
|
193
|
+
"stack": {
|
|
194
|
+
"exampleConfigFiles": [
|
|
195
|
+
".github/workflows/*",
|
|
196
|
+
"azure-pipelines.yml"
|
|
197
|
+
],
|
|
198
|
+
"exampleTools": [],
|
|
199
|
+
"notes": "Expose a single npm script (e.g., `npm run ci`) that mirrors the CI pipeline so contributors can reproduce failures locally.",
|
|
200
|
+
"verification": "Open the CI configuration and verify there is a job or stage that runs linting, type checking, tests, build, and any required container checks before merging to main."
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"ciHints": {
|
|
205
|
+
"github-actions": {
|
|
206
|
+
"job": "ci"
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
"description": "Automatic code formatting to maintain a consistent style across all contributors.",
|
|
210
|
+
"id": "code-formatter",
|
|
211
|
+
"label": "Code Formatter",
|
|
212
|
+
"stack": {
|
|
213
|
+
"exampleConfigFiles": [
|
|
214
|
+
".prettierrc.*",
|
|
215
|
+
".prettierignore"
|
|
216
|
+
],
|
|
217
|
+
"exampleTools": [
|
|
218
|
+
"prettier"
|
|
219
|
+
],
|
|
220
|
+
"notes": "Run Prettier in check mode in CI; auto-fix locally via pre-commit hooks or editor integration.",
|
|
221
|
+
"verification": "Run the formatter in check mode (for example, `npm run format:check`) and confirm it reports clean formatting on committed code and auto-fixes as expected locally."
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"ciHints": {
|
|
226
|
+
"github-actions": {
|
|
227
|
+
"job": "ci"
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
"description": "Use git hooks to run linting, formatting, tests, and commit linting before changes are committed.",
|
|
231
|
+
"id": "pre-commit-hooks",
|
|
232
|
+
"label": "Pre-Commit Hooks",
|
|
233
|
+
"stack": {
|
|
234
|
+
"exampleConfigFiles": [
|
|
235
|
+
".husky/",
|
|
236
|
+
"package.json"
|
|
237
|
+
],
|
|
238
|
+
"exampleTools": [
|
|
239
|
+
"husky",
|
|
240
|
+
"lint-staged"
|
|
241
|
+
],
|
|
242
|
+
"notes": "Run ESLint and Prettier on staged files and enforce commit message format via commit-msg hooks.",
|
|
243
|
+
"verification": "Inspect the pre-commit and commit-msg hooks (for example, files under .husky or other hook tooling) and confirm they run linting/formatting and commit linting on staged changes."
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"ciHints": {
|
|
248
|
+
"github-actions": {
|
|
249
|
+
"job": "ci"
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"description": "Use static type checking to catch errors before runtime and enforce strictness on new code.",
|
|
253
|
+
"id": "type-checking",
|
|
254
|
+
"label": "Type Checking",
|
|
255
|
+
"stack": {
|
|
256
|
+
"exampleConfigFiles": [
|
|
257
|
+
"tsconfig.json"
|
|
258
|
+
],
|
|
259
|
+
"exampleTools": [
|
|
260
|
+
"TypeScript compiler (tsc)"
|
|
261
|
+
],
|
|
262
|
+
"notes": "Enable strict mode ('strict': true) and treat type-check failures as CI failures for new code; gradually expand strictness into legacy modules.",
|
|
263
|
+
"requiredFiles": [
|
|
264
|
+
"tsconfig.json"
|
|
265
|
+
],
|
|
266
|
+
"requiredScripts": [
|
|
267
|
+
"typecheck"
|
|
268
|
+
],
|
|
269
|
+
"verification": "Presence of tsconfig.json indicates type-checking is configured for the repository."
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"ciHints": {
|
|
274
|
+
"github-actions": {
|
|
275
|
+
"job": "ci"
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
"description": "Lock dependencies and scan regularly for known vulnerabilities; fail CI on newly introduced high-severity issues.",
|
|
279
|
+
"id": "dependency-security",
|
|
280
|
+
"label": "Dependency Management & Vulnerability Scanning",
|
|
281
|
+
"stack": {
|
|
282
|
+
"exampleConfigFiles": [
|
|
283
|
+
"package-lock.json",
|
|
284
|
+
"pnpm-lock.yaml",
|
|
285
|
+
"yarn.lock"
|
|
286
|
+
],
|
|
287
|
+
"exampleTools": [
|
|
288
|
+
"npm audit",
|
|
289
|
+
"Snyk"
|
|
290
|
+
],
|
|
291
|
+
"notes": "Require a lockfile for reproducible installs and pin Node.js/tooling versions; block merges on new high-severity vulnerabilities.",
|
|
292
|
+
"optionalFiles": [
|
|
293
|
+
"package-lock.json",
|
|
294
|
+
"pnpm-lock.yaml",
|
|
295
|
+
"yarn.lock"
|
|
296
|
+
],
|
|
297
|
+
"verification": "Dependency lockfile is present; security scanning is configured in CI or project tooling."
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"ciHints": {
|
|
302
|
+
"github-actions": {
|
|
303
|
+
"job": "ci"
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
"description": "Specify required runtime/engine versions in package manifests to ensure environment stability and prevent version-related issues across development teams.",
|
|
307
|
+
"id": "runtime-version",
|
|
308
|
+
"label": "Runtime Version Specification",
|
|
309
|
+
"stack": {
|
|
310
|
+
"exampleConfigFiles": [
|
|
311
|
+
"package.json"
|
|
312
|
+
],
|
|
313
|
+
"exampleTools": [],
|
|
314
|
+
"notes": "Specify the 'engines' field in package.json to define the required Node.js version (e.g., \"engines\": { \"node\": \">=18.0.0\" }). This helps prevent environment-related bugs and ensures all developers use compatible Node.js versions.",
|
|
315
|
+
"requiredFiles": [
|
|
316
|
+
"package.json"
|
|
317
|
+
],
|
|
318
|
+
"verification": "package.json must contain an 'engines' field specifying the required Node.js version."
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"ciHints": {
|
|
323
|
+
"github-actions": {
|
|
324
|
+
"job": "ci"
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
"description": "Maintain a comprehensive README and, where applicable, auto-generated API docs to support onboarding and maintainability.",
|
|
328
|
+
"id": "documentation",
|
|
329
|
+
"label": "Documentation Standards",
|
|
330
|
+
"stack": {
|
|
331
|
+
"exampleConfigFiles": [
|
|
332
|
+
"README.md",
|
|
333
|
+
"docs/"
|
|
334
|
+
],
|
|
335
|
+
"exampleTools": [
|
|
336
|
+
"JSDoc",
|
|
337
|
+
"TypeDoc"
|
|
338
|
+
],
|
|
339
|
+
"notes": "README should describe setup, scripts, and architecture; generate API docs from TypeScript types and JSDoc where helpful.",
|
|
340
|
+
"optionalFiles": [
|
|
341
|
+
"docs/",
|
|
342
|
+
"typedoc.json"
|
|
343
|
+
],
|
|
344
|
+
"requiredFiles": [
|
|
345
|
+
"README.md"
|
|
346
|
+
],
|
|
347
|
+
"verification": "README.md is present in the repository root; docs/ directory or documentation tooling configuration exists if applicable."
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"ciHints": {
|
|
352
|
+
"github-actions": {
|
|
353
|
+
"job": "ci"
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
"description": "Include standard governance files (LICENSE, CODE_OF_CONDUCT.md, CONTRIBUTING.md), branch protection rules, and review standards to define legal, ethical, and workflow expectations.",
|
|
357
|
+
"id": "repository-governance",
|
|
358
|
+
"label": "Repository Governance",
|
|
359
|
+
"stack": {
|
|
360
|
+
"exampleConfigFiles": [
|
|
361
|
+
"LICENSE",
|
|
362
|
+
"CODE_OF_CONDUCT.md",
|
|
363
|
+
"CONTRIBUTING.md"
|
|
364
|
+
],
|
|
365
|
+
"exampleTools": [],
|
|
366
|
+
"notes": "Use an SPDX license identifier in package.json and describe review expectations, tests, and docs requirements in CONTRIBUTING.md.",
|
|
367
|
+
"optionalFiles": [
|
|
368
|
+
"CODE_OF_CONDUCT.md",
|
|
369
|
+
"CONTRIBUTING.md"
|
|
370
|
+
],
|
|
371
|
+
"requiredFiles": [
|
|
372
|
+
"LICENSE"
|
|
373
|
+
],
|
|
374
|
+
"verification": "LICENSE file is present in the repository root; CODE_OF_CONDUCT.md and CONTRIBUTING.md are present for contribution guidance."
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
],
|
|
378
|
+
"optionalEnhancements": [
|
|
379
|
+
{
|
|
380
|
+
"ciHints": {
|
|
381
|
+
"github-actions": {
|
|
382
|
+
"job": "ci"
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
"description": "Standardize error handling and structured logging to make debugging and production monitoring easier.",
|
|
386
|
+
"id": "observability",
|
|
387
|
+
"label": "Observability (Logging & Error Handling)",
|
|
388
|
+
"stack": {
|
|
389
|
+
"exampleConfigFiles": [],
|
|
390
|
+
"exampleTools": [
|
|
391
|
+
"Winston",
|
|
392
|
+
"Pino"
|
|
393
|
+
],
|
|
394
|
+
"notes": "Adopt structured JSON logging with correlation IDs and send logs to a centralized sink in production.",
|
|
395
|
+
"verification": "Confirm that a structured logging library (such as Winston or Pino) is configured to emit JSON or key-value logs and that error handling routes important failures through this logger."
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
],
|
|
399
|
+
"recommended": [
|
|
400
|
+
{
|
|
401
|
+
"ciHints": {
|
|
402
|
+
"github-actions": {
|
|
403
|
+
"job": "ci"
|
|
404
|
+
}
|
|
405
|
+
},
|
|
406
|
+
"description": "Test how components interact with each other and external systems, running after unit tests with more relaxed coverage thresholds.",
|
|
407
|
+
"id": "integration-testing",
|
|
408
|
+
"label": "Integration Testing",
|
|
409
|
+
"stack": {
|
|
410
|
+
"exampleConfigFiles": [
|
|
411
|
+
"jest.config.*",
|
|
412
|
+
"playwright.config.*"
|
|
413
|
+
],
|
|
414
|
+
"exampleTools": [
|
|
415
|
+
"Jest",
|
|
416
|
+
"Supertest",
|
|
417
|
+
"Playwright"
|
|
418
|
+
],
|
|
419
|
+
"notes": "Use Supertest for HTTP APIs and Playwright or similar tools for end-to-end flows; keep integration suites slower but reliable.",
|
|
420
|
+
"verification": "Confirm there is a separate integration or end-to-end test command or configuration and run it to verify that cross-component flows behave as expected."
|
|
421
|
+
}
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"ciHints": {
|
|
425
|
+
"github-actions": {
|
|
426
|
+
"job": "performance"
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
"description": "Establish performance baselines and monitor for regressions using lightweight benchmarks or audits in CI.",
|
|
430
|
+
"id": "performance-baselining",
|
|
431
|
+
"label": "Performance Baselines",
|
|
432
|
+
"stack": {
|
|
433
|
+
"exampleConfigFiles": [
|
|
434
|
+
"lighthouserc.json"
|
|
435
|
+
],
|
|
436
|
+
"exampleTools": [
|
|
437
|
+
"Lighthouse CI",
|
|
438
|
+
"custom Node.js benchmarks"
|
|
439
|
+
],
|
|
440
|
+
"notes": "Run Lighthouse CI for web apps and basic Node benchmarks on critical endpoints; schedule runs or limit to key branches to keep CI fast.",
|
|
441
|
+
"verification": "Identify and run the configured performance or Lighthouse-style checks and verify that key metrics are captured and compared to documented baselines."
|
|
442
|
+
}
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
"ciHints": {
|
|
446
|
+
"github-actions": {
|
|
447
|
+
"job": "ci"
|
|
448
|
+
}
|
|
449
|
+
},
|
|
450
|
+
"description": "Measure cyclomatic complexity or similar metrics to keep code maintainable, starting as a warning-only check.",
|
|
451
|
+
"id": "complexity-analysis",
|
|
452
|
+
"label": "Complexity Analysis",
|
|
453
|
+
"stack": {
|
|
454
|
+
"exampleConfigFiles": [
|
|
455
|
+
".eslintrc.*",
|
|
456
|
+
"sonar-project.properties"
|
|
457
|
+
],
|
|
458
|
+
"exampleTools": [
|
|
459
|
+
"ESLint complexity rules",
|
|
460
|
+
"SonarQube"
|
|
461
|
+
],
|
|
462
|
+
"notes": "Warn on overly complex functions and methods; fail CI only when new or modified code exceeds thresholds.",
|
|
463
|
+
"verification": "Run the configured complexity tooling or rules (for example, ESLint complexity rules or Sonar analysis) and review any hot spots, ensuring new code does not exceed agreed thresholds."
|
|
464
|
+
}
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
"ciHints": {
|
|
468
|
+
"github-actions": {
|
|
469
|
+
"job": "ci"
|
|
470
|
+
}
|
|
471
|
+
},
|
|
472
|
+
"description": "Run accessibility checks on web-facing components to detect critical issues and improve inclusive UX.",
|
|
473
|
+
"id": "accessibility-auditing",
|
|
474
|
+
"label": "Accessibility Auditing",
|
|
475
|
+
"stack": {
|
|
476
|
+
"exampleConfigFiles": [],
|
|
477
|
+
"exampleTools": [
|
|
478
|
+
"axe-core",
|
|
479
|
+
"Lighthouse accessibility audits"
|
|
480
|
+
],
|
|
481
|
+
"notes": "Run accessibility checks against key pages or components in CI; fail on critical violations while treating minor issues as warnings initially.",
|
|
482
|
+
"verification": "For web-facing apps, run the configured accessibility tooling (for example, axe, pa11y, or Lighthouse accessibility audits) against key pages and confirm that critical issues are resolved."
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
]
|
|
486
|
+
},
|
|
487
|
+
"ciSystems": [
|
|
488
|
+
"github-actions"
|
|
489
|
+
],
|
|
490
|
+
"meta": {
|
|
491
|
+
"complexityChecks": {
|
|
492
|
+
"description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
|
|
493
|
+
"enabledByDefault": true
|
|
494
|
+
},
|
|
495
|
+
"defaultCoverageThreshold": 0.8,
|
|
496
|
+
"migrationGuide": [
|
|
497
|
+
{
|
|
498
|
+
"description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
|
|
499
|
+
"focusIds": [
|
|
500
|
+
"pre-commit-hooks",
|
|
501
|
+
"linting",
|
|
502
|
+
"code-formatter"
|
|
503
|
+
],
|
|
504
|
+
"notes": "Keep hooks fast and focused on changed files to avoid slowing down day-to-day work.",
|
|
505
|
+
"step": 1,
|
|
506
|
+
"title": "Establish Local Safety Nets First"
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
"description": "Introduce CI quality gates that mirror local checks, but treat existing violations as warnings wherever possible.",
|
|
510
|
+
"focusIds": [
|
|
511
|
+
"ci-quality-gates",
|
|
512
|
+
"linting",
|
|
513
|
+
"code-formatter",
|
|
514
|
+
"commit-linting"
|
|
515
|
+
],
|
|
516
|
+
"notes": "Use diff-based tools or baselines so only new violations break builds; legacy issues remain visible but non-blocking.",
|
|
517
|
+
"step": 2,
|
|
518
|
+
"title": "Mirror Local Checks in CI (Soft-Fail on Legacy)"
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
"description": "Enable type-checking, coverage thresholds, and dependency/vulnerability scanning with gradual enforcement.",
|
|
522
|
+
"focusIds": [
|
|
523
|
+
"type-checking",
|
|
524
|
+
"unit-test-runner",
|
|
525
|
+
"unit-test-reporter",
|
|
526
|
+
"dependency-security"
|
|
527
|
+
],
|
|
528
|
+
"notes": "Pin tool and runtime versions in CI and containers to avoid flaky differences across environments.",
|
|
529
|
+
"step": 3,
|
|
530
|
+
"title": "Add Type Safety, Coverage, and Dependency Security"
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
"description": "Add documentation standards, governance files, integration testing, performance baselines, complexity analysis, accessibility auditing, and (optionally) ML-specific practices for data-heavy Python repos.",
|
|
534
|
+
"focusIds": [
|
|
535
|
+
"documentation",
|
|
536
|
+
"repository-governance",
|
|
537
|
+
"integration-testing",
|
|
538
|
+
"performance-baselining",
|
|
539
|
+
"complexity-analysis",
|
|
540
|
+
"accessibility-auditing"
|
|
541
|
+
],
|
|
542
|
+
"notes": "Tackle recommended items in order of business value; backend-only repos can skip web-focused checks like accessibility. For AI/ML-heavy Python teams, consider extending containerization with data versioning (DVC) and unit tests with data quality checks (e.g., Great Expectations) as part of this step.",
|
|
543
|
+
"step": 4,
|
|
544
|
+
"title": "Layer in Docs, Governance, and Recommended Checks"
|
|
545
|
+
}
|
|
546
|
+
],
|
|
547
|
+
"qualityGatePolicy": {
|
|
548
|
+
"description": "New quality checks should warn on existing code and fail CI only for violations introduced in new or changed code, to reduce friction on legacy codebases.",
|
|
549
|
+
"preferSoftFailOnLegacy": true
|
|
550
|
+
}
|
|
551
|
+
},
|
|
552
|
+
"stack": "typescript-js",
|
|
553
|
+
"stackLabel": "TypeScript / JavaScript",
|
|
554
|
+
"version": 1
|
|
555
|
+
}
|