@oddessentials/repo-standards 4.4.0 → 5.1.0
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/README.md +2 -1
- package/dist/config/standards.csharp-dotnet.azure-devops.json +377 -12
- package/dist/config/standards.csharp-dotnet.github-actions.json +378 -13
- package/dist/config/standards.csharp-dotnet.json +435 -13
- package/dist/config/standards.go.azure-devops.json +367 -10
- package/dist/config/standards.go.github-actions.json +368 -11
- package/dist/config/standards.go.json +425 -11
- package/dist/config/standards.json +1470 -81
- package/dist/config/standards.python.azure-devops.json +383 -10
- package/dist/config/standards.python.github-actions.json +384 -11
- package/dist/config/standards.python.json +441 -11
- package/dist/config/standards.rust.azure-devops.json +370 -10
- package/dist/config/standards.rust.github-actions.json +371 -11
- package/dist/config/standards.rust.json +428 -11
- package/dist/config/standards.schema.json +24 -2
- package/dist/config/standards.typescript-js.azure-devops.json +387 -11
- package/dist/config/standards.typescript-js.github-actions.json +388 -12
- package/dist/config/standards.typescript-js.json +445 -12
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/scripts/check-version-unchanged.sh +50 -0
- package/scripts/validate-schema.ts +46 -0
|
@@ -1,6 +1,64 @@
|
|
|
1
1
|
{
|
|
2
2
|
"checklist": {
|
|
3
3
|
"core": [
|
|
4
|
+
{
|
|
5
|
+
"ciHints": {
|
|
6
|
+
"azure-devops": {
|
|
7
|
+
"notes": "Run CRLF detection early in pipeline before other checks.",
|
|
8
|
+
"stage": "quality"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"description": "Enforce line endings at the Git layer using .gitattributes. Mark text files with appropriate EOL handling (eol=lf for shell scripts, eol=auto for most files) and binary files as binary to prevent corruption. This prevents 'works locally, fails in CI' issues caused by CRLF/LF mismatches.",
|
|
12
|
+
"id": "gitattributes-eol",
|
|
13
|
+
"label": "Git Attributes (Line Endings)",
|
|
14
|
+
"stack": {
|
|
15
|
+
"exampleConfigFiles": [
|
|
16
|
+
".gitattributes",
|
|
17
|
+
".editorconfig"
|
|
18
|
+
],
|
|
19
|
+
"exampleTools": [
|
|
20
|
+
"git"
|
|
21
|
+
],
|
|
22
|
+
"machineCheck": {
|
|
23
|
+
"command": "git ls-files --eol | grep -E 'w/crlf.*\\.sh$' && exit 1 || exit 0",
|
|
24
|
+
"description": "Verify no CRLF in shell scripts",
|
|
25
|
+
"expectExitCode": 0
|
|
26
|
+
},
|
|
27
|
+
"notes": "Go files should use LF for consistency. Mark *.go as text. Shell scripts (*.sh) must use eol=lf. Binary artifacts should be marked as binary.",
|
|
28
|
+
"optionalFiles": [
|
|
29
|
+
".editorconfig"
|
|
30
|
+
],
|
|
31
|
+
"requiredFiles": [
|
|
32
|
+
".gitattributes"
|
|
33
|
+
],
|
|
34
|
+
"verification": "Run 'git ls-files --eol' to verify EOL handling."
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"ciHints": {
|
|
39
|
+
"azure-devops": {
|
|
40
|
+
"notes": "Run CRLF detection as the first quality check before linting or testing.",
|
|
41
|
+
"stage": "quality"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"description": "Fail CI early for Linux-executed files containing CRLF line endings. Shell scripts, Python files, and other interpreted files fail silently or with cryptic errors when they contain \\r characters. Detect this before running deeper CI steps.",
|
|
45
|
+
"id": "crlf-detection",
|
|
46
|
+
"label": "CRLF Detection in CI",
|
|
47
|
+
"stack": {
|
|
48
|
+
"exampleConfigFiles": [],
|
|
49
|
+
"exampleTools": [
|
|
50
|
+
"file",
|
|
51
|
+
"grep"
|
|
52
|
+
],
|
|
53
|
+
"machineCheck": {
|
|
54
|
+
"command": "git ls-files --eol | grep -E 'w/crlf.*\\.(sh|bash)$' && exit 1 || exit 0",
|
|
55
|
+
"description": "Detect CRLF in shell scripts",
|
|
56
|
+
"expectExitCode": 0
|
|
57
|
+
},
|
|
58
|
+
"notes": "Go source files tolerate CRLF but shell scripts and Makefiles do not. Check .sh, Makefile, and go.mod for CRLF.",
|
|
59
|
+
"verification": "Run CRLF detection on shell scripts and Makefiles."
|
|
60
|
+
}
|
|
61
|
+
},
|
|
4
62
|
{
|
|
5
63
|
"ciHints": {
|
|
6
64
|
"azure-devops": {
|
|
@@ -144,6 +202,33 @@
|
|
|
144
202
|
"verification": "Check that git tags follow vMAJOR.MINOR.PATCH format and goreleaser or similar tooling generates releases and changelogs."
|
|
145
203
|
}
|
|
146
204
|
},
|
|
205
|
+
{
|
|
206
|
+
"ciHints": {
|
|
207
|
+
"azure-devops": {
|
|
208
|
+
"notes": "Run the version guard in PR validation jobs before merge.",
|
|
209
|
+
"stage": "quality"
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
"description": "If semantic-release or automated versioning is enabled, block manual edits to canonical version fields in pull requests. Enforce a CI guard (and optional pre-push hook) that fails when version lines change outside the release workflow.",
|
|
213
|
+
"id": "version-guard",
|
|
214
|
+
"label": "Version Guard (Automated Releases)",
|
|
215
|
+
"stack": {
|
|
216
|
+
"exampleConfigFiles": [
|
|
217
|
+
"scripts/check-version-unchanged.sh",
|
|
218
|
+
".github/workflows/ci.yml",
|
|
219
|
+
"azure-pipelines.yml"
|
|
220
|
+
],
|
|
221
|
+
"exampleTools": [
|
|
222
|
+
"goreleaser",
|
|
223
|
+
"git"
|
|
224
|
+
],
|
|
225
|
+
"notes": "Go versioning is tag-driven; only enable the guard if you keep a VERSION file or embed version constants in code. The guard should ensure those fields are not edited manually in PRs.",
|
|
226
|
+
"optionalFiles": [
|
|
227
|
+
"VERSION"
|
|
228
|
+
],
|
|
229
|
+
"verification": "Run the guard and confirm it fails when VERSION or version constants change outside release automation."
|
|
230
|
+
}
|
|
231
|
+
},
|
|
147
232
|
{
|
|
148
233
|
"ciHints": {
|
|
149
234
|
"azure-devops": {
|
|
@@ -173,6 +258,28 @@
|
|
|
173
258
|
"verification": "Trigger the release pipeline and confirm all artifacts share the same version number and tag."
|
|
174
259
|
}
|
|
175
260
|
},
|
|
261
|
+
{
|
|
262
|
+
"ciHints": {
|
|
263
|
+
"azure-devops": {
|
|
264
|
+
"notes": "Set HUSKY=0 or equivalent in release pipeline to disable hooks.",
|
|
265
|
+
"stage": "release"
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
"description": "Release automation must bypass local developer hooks (HUSKY=0, --no-verify) and rely solely on CI gates for validation. This ensures idempotent, reproducible releases that don't fail due to hook environment differences.",
|
|
269
|
+
"id": "release-hook-bypass",
|
|
270
|
+
"label": "Release Hook Bypass",
|
|
271
|
+
"stack": {
|
|
272
|
+
"exampleConfigFiles": [
|
|
273
|
+
".goreleaser.yml",
|
|
274
|
+
".github/workflows/release.yml"
|
|
275
|
+
],
|
|
276
|
+
"exampleTools": [
|
|
277
|
+
"goreleaser"
|
|
278
|
+
],
|
|
279
|
+
"notes": "Goreleaser handles releases without invoking local hooks. Ensure any git operations use --no-verify.",
|
|
280
|
+
"verification": "Check release workflow for hook bypass configuration."
|
|
281
|
+
}
|
|
282
|
+
},
|
|
176
283
|
{
|
|
177
284
|
"ciHints": {
|
|
178
285
|
"azure-devops": {
|
|
@@ -286,10 +393,11 @@
|
|
|
286
393
|
{
|
|
287
394
|
"ciHints": {
|
|
288
395
|
"azure-devops": {
|
|
396
|
+
"notes": "Hooks and CI must invoke identical verification commands. Use npm run verify or equivalent.",
|
|
289
397
|
"stage": "quality"
|
|
290
398
|
}
|
|
291
399
|
},
|
|
292
|
-
"description": "Use git hooks to run linting, formatting,
|
|
400
|
+
"description": "Use git hooks to run linting, formatting, and commit linting before changes are committed. Hooks should CHECK by default (not auto-fix), be fast, and scope to changed files only. Use a single entry hook mechanism (e.g., Husky as entry point calling pre-commit or lint-staged).",
|
|
293
401
|
"id": "pre-commit-hooks",
|
|
294
402
|
"label": "Pre-Commit Hooks",
|
|
295
403
|
"stack": {
|
|
@@ -301,8 +409,54 @@
|
|
|
301
409
|
"pre-commit",
|
|
302
410
|
"lefthook"
|
|
303
411
|
],
|
|
304
|
-
"notes": "Use pre-commit with go hooks for gofmt
|
|
305
|
-
"verification": "
|
|
412
|
+
"notes": "Use pre-commit or lefthook with go hooks for 'gofmt -d' (check mode) and golangci-lint. Pin Go version in go.mod and .go-version for determinism.",
|
|
413
|
+
"verification": "Confirm hooks run format checks (not auto-fix) and golangci-lint before commits."
|
|
414
|
+
}
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
"ciHints": {
|
|
418
|
+
"azure-devops": {
|
|
419
|
+
"notes": "CI should call the same verify script that hooks use locally.",
|
|
420
|
+
"stage": "quality"
|
|
421
|
+
}
|
|
422
|
+
},
|
|
423
|
+
"description": "Local hooks and CI must invoke identical verification commands to prevent 'works locally, fails in CI' issues. Use a single canonical verify entrypoint (e.g., npm run verify) that both hooks and CI call.",
|
|
424
|
+
"id": "hook-ci-parity",
|
|
425
|
+
"label": "Hook/CI Parity",
|
|
426
|
+
"stack": {
|
|
427
|
+
"exampleConfigFiles": [
|
|
428
|
+
"Makefile",
|
|
429
|
+
"magefile.go"
|
|
430
|
+
],
|
|
431
|
+
"exampleTools": [
|
|
432
|
+
"make",
|
|
433
|
+
"mage"
|
|
434
|
+
],
|
|
435
|
+
"notes": "Define a verify target (make verify) that runs go vet, golangci-lint, and go test. Both hooks and CI should use this target.",
|
|
436
|
+
"verification": "Compare hook commands with CI commands and confirm they invoke the same make targets."
|
|
437
|
+
}
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
"ciHints": {
|
|
441
|
+
"azure-devops": {
|
|
442
|
+
"notes": "Also run secret scanning in CI as a safety net for commits that bypassed hooks.",
|
|
443
|
+
"stage": "quality"
|
|
444
|
+
}
|
|
445
|
+
},
|
|
446
|
+
"description": "Scan staged diffs for credentials, API keys, and secrets before they reach the remote repository. Catch secrets at commit time rather than after they're pushed.",
|
|
447
|
+
"id": "secret-scanning-precommit",
|
|
448
|
+
"label": "Pre-commit Secret Scanning",
|
|
449
|
+
"stack": {
|
|
450
|
+
"exampleConfigFiles": [
|
|
451
|
+
".gitleaks.toml",
|
|
452
|
+
".pre-commit-config.yaml"
|
|
453
|
+
],
|
|
454
|
+
"exampleTools": [
|
|
455
|
+
"gitleaks",
|
|
456
|
+
"trufflehog"
|
|
457
|
+
],
|
|
458
|
+
"notes": "Add gitleaks to pre-commit hooks. Scan staged changes only for speed.",
|
|
459
|
+
"verification": "Run 'gitleaks protect --staged' and verify it catches test secrets."
|
|
306
460
|
}
|
|
307
461
|
},
|
|
308
462
|
{
|
|
@@ -525,6 +679,71 @@
|
|
|
525
679
|
],
|
|
526
680
|
"verification": "LICENSE file is present; CODE_OF_CONDUCT.md and CONTRIBUTING.md provide contribution guidance."
|
|
527
681
|
}
|
|
682
|
+
},
|
|
683
|
+
{
|
|
684
|
+
"ciHints": {
|
|
685
|
+
"azure-devops": {
|
|
686
|
+
"notes": "CI should call the canonical verify command, not duplicate check logic.",
|
|
687
|
+
"stage": "quality"
|
|
688
|
+
}
|
|
689
|
+
},
|
|
690
|
+
"description": "Provide one canonical 'verify' command per repository/stack that all stages call with appropriate flags. This prevents duplication, drift, and ensures consistency between local development and CI.",
|
|
691
|
+
"id": "canonical-verify",
|
|
692
|
+
"label": "Canonical Verify Entrypoint",
|
|
693
|
+
"stack": {
|
|
694
|
+
"exampleConfigFiles": [
|
|
695
|
+
"Makefile",
|
|
696
|
+
"magefile.go"
|
|
697
|
+
],
|
|
698
|
+
"exampleTools": [
|
|
699
|
+
"make",
|
|
700
|
+
"mage"
|
|
701
|
+
],
|
|
702
|
+
"notes": "Define 'make verify' that runs go vet, golangci-lint, and go test. All stages use this single entrypoint.",
|
|
703
|
+
"verification": "Makefile contains a 'verify' target."
|
|
704
|
+
}
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
"ciHints": {
|
|
708
|
+
"azure-devops": {
|
|
709
|
+
"notes": "Ensure CI reads from authoritative configs, not duplicated settings.",
|
|
710
|
+
"stage": "quality"
|
|
711
|
+
}
|
|
712
|
+
},
|
|
713
|
+
"description": "Each configuration rule must live in exactly one authoritative config file. Avoid duplication across .editorconfig, linter configs, and CI definitions. Document which file is authoritative for each concern.",
|
|
714
|
+
"id": "config-authority",
|
|
715
|
+
"label": "Config File Authority Rules",
|
|
716
|
+
"stack": {
|
|
717
|
+
"exampleConfigFiles": [
|
|
718
|
+
".gitattributes",
|
|
719
|
+
"go.mod",
|
|
720
|
+
".golangci.yml"
|
|
721
|
+
],
|
|
722
|
+
"exampleTools": [],
|
|
723
|
+
"notes": "Authority mapping: .gitattributes for EOL, go.mod for module config and Go version, .golangci.yml for all linting rules. Keep lint config consolidated in one file.",
|
|
724
|
+
"verification": "Review configs and confirm .golangci.yml is the single source for lint rules."
|
|
725
|
+
}
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
"ciHints": {
|
|
729
|
+
"azure-devops": {
|
|
730
|
+
"notes": "CI should read skip paths from config files, not hardcode them in pipeline.",
|
|
731
|
+
"stage": "quality"
|
|
732
|
+
}
|
|
733
|
+
},
|
|
734
|
+
"description": "Encode path exclusions and skip rules deterministically in config files, not through ad-hoc human judgment. Make it clear which paths are excluded from checks and why.",
|
|
735
|
+
"id": "explicit-skip-paths",
|
|
736
|
+
"label": "Explicit Skip Paths",
|
|
737
|
+
"stack": {
|
|
738
|
+
"exampleConfigFiles": [
|
|
739
|
+
".golangci.yml"
|
|
740
|
+
],
|
|
741
|
+
"exampleTools": [
|
|
742
|
+
"golangci-lint"
|
|
743
|
+
],
|
|
744
|
+
"notes": "Define skip-dirs and skip-files in .golangci.yml. Use //nolint comments sparingly and always include justification (//nolint:errcheck // reason).",
|
|
745
|
+
"verification": "Review .golangci.yml and confirm skip paths are explicit and documented."
|
|
746
|
+
}
|
|
528
747
|
}
|
|
529
748
|
],
|
|
530
749
|
"optionalEnhancements": [
|
|
@@ -721,6 +940,117 @@
|
|
|
721
940
|
"verification": "For web-facing Go apps, run accessibility audits against key routes using axe or pa11y."
|
|
722
941
|
}
|
|
723
942
|
},
|
|
943
|
+
{
|
|
944
|
+
"ciHints": {
|
|
945
|
+
"azure-devops": {
|
|
946
|
+
"notes": "Run AI drift detection in a scheduled nightly pipeline separate from main CI.",
|
|
947
|
+
"stage": "nightly"
|
|
948
|
+
}
|
|
949
|
+
},
|
|
950
|
+
"description": "Run nightly or scheduled checks comparing AI-generated outputs against pinned baselines to detect model drift, prompt drift, or code changes affecting AI behavior. Attribute regressions to code changes vs model updates vs prompt changes.",
|
|
951
|
+
"id": "ai-drift-detection",
|
|
952
|
+
"label": "AI Drift Detection",
|
|
953
|
+
"stack": {
|
|
954
|
+
"exampleConfigFiles": [
|
|
955
|
+
"testdata/golden/",
|
|
956
|
+
"ai-baselines/"
|
|
957
|
+
],
|
|
958
|
+
"exampleTools": [
|
|
959
|
+
"go test",
|
|
960
|
+
"golden files"
|
|
961
|
+
],
|
|
962
|
+
"notes": "Use golden file testing pattern for AI outputs. Compare current output against pinned baselines nightly.",
|
|
963
|
+
"verification": "Run golden tests and confirm AI outputs match baselines."
|
|
964
|
+
}
|
|
965
|
+
},
|
|
966
|
+
{
|
|
967
|
+
"ciHints": {
|
|
968
|
+
"azure-devops": {
|
|
969
|
+
"notes": "Run schema validation tests as part of quality gates.",
|
|
970
|
+
"stage": "quality"
|
|
971
|
+
}
|
|
972
|
+
},
|
|
973
|
+
"description": "Validate all AI-generated outputs against strict JSON schemas or type definitions at system boundaries. Reject invalid outputs early rather than letting malformed data propagate through the system.",
|
|
974
|
+
"id": "ai-schema-enforcement",
|
|
975
|
+
"label": "AI Output Schema Enforcement",
|
|
976
|
+
"stack": {
|
|
977
|
+
"exampleConfigFiles": [
|
|
978
|
+
"schemas/"
|
|
979
|
+
],
|
|
980
|
+
"exampleTools": [
|
|
981
|
+
"go-playground/validator",
|
|
982
|
+
"gojsonschema"
|
|
983
|
+
],
|
|
984
|
+
"notes": "Define struct tags for JSON unmarshaling and use validator for additional constraints. Reject AI outputs that don't match expected schema.",
|
|
985
|
+
"verification": "Review AI integration code and confirm schema validation is in place."
|
|
986
|
+
}
|
|
987
|
+
},
|
|
988
|
+
{
|
|
989
|
+
"ciHints": {
|
|
990
|
+
"azure-devops": {
|
|
991
|
+
"notes": "Run AI golden tests as part of the test stage.",
|
|
992
|
+
"stage": "test"
|
|
993
|
+
}
|
|
994
|
+
},
|
|
995
|
+
"description": "Validate AI tool-generated patches, configs, and code against exact expected formats. Test that AI outputs respect forbidden paths, file patterns, and format constraints through golden contract tests.",
|
|
996
|
+
"id": "ai-golden-tests",
|
|
997
|
+
"label": "AI Golden Contract Tests",
|
|
998
|
+
"stack": {
|
|
999
|
+
"exampleConfigFiles": [
|
|
1000
|
+
"testdata/"
|
|
1001
|
+
],
|
|
1002
|
+
"exampleTools": [
|
|
1003
|
+
"go test",
|
|
1004
|
+
"golden files"
|
|
1005
|
+
],
|
|
1006
|
+
"notes": "Use golden file pattern for AI output testing. Verify generated code follows Go conventions and doesn't modify vendor/ or other protected paths.",
|
|
1007
|
+
"verification": "Run golden tests and confirm AI outputs match expected files."
|
|
1008
|
+
}
|
|
1009
|
+
},
|
|
1010
|
+
{
|
|
1011
|
+
"ciHints": {
|
|
1012
|
+
"azure-devops": {
|
|
1013
|
+
"notes": "Run AI safety tests as part of security stage on main branch.",
|
|
1014
|
+
"stage": "security"
|
|
1015
|
+
}
|
|
1016
|
+
},
|
|
1017
|
+
"description": "Test AI integrations for prompt injection resistance, input sanitization, output filtering, and data exfiltration prevention. Include adversarial test cases that attempt to manipulate AI behavior.",
|
|
1018
|
+
"id": "ai-safety-checks",
|
|
1019
|
+
"label": "AI Adversarial & Safety Testing",
|
|
1020
|
+
"stack": {
|
|
1021
|
+
"exampleConfigFiles": [
|
|
1022
|
+
"ai_safety_test.go"
|
|
1023
|
+
],
|
|
1024
|
+
"exampleTools": [
|
|
1025
|
+
"go test",
|
|
1026
|
+
"go-fuzz"
|
|
1027
|
+
],
|
|
1028
|
+
"notes": "Create adversarial test cases for AI integrations. Use fuzzing to discover input handling edge cases.",
|
|
1029
|
+
"verification": "Run AI safety tests and fuzz tests."
|
|
1030
|
+
}
|
|
1031
|
+
},
|
|
1032
|
+
{
|
|
1033
|
+
"ciHints": {
|
|
1034
|
+
"azure-devops": {
|
|
1035
|
+
"notes": "Verify AI provenance logging is implemented in quality checks.",
|
|
1036
|
+
"stage": "quality"
|
|
1037
|
+
}
|
|
1038
|
+
},
|
|
1039
|
+
"description": "Log AI provider, model version, prompt template version, parameters, and tool versions for all AI operations. Enable attribution of outputs to specific model+prompt combinations for debugging and compliance.",
|
|
1040
|
+
"id": "ai-provenance-tracking",
|
|
1041
|
+
"label": "AI Provenance & Audit Logging",
|
|
1042
|
+
"stack": {
|
|
1043
|
+
"exampleConfigFiles": [
|
|
1044
|
+
"ai/provenance.go"
|
|
1045
|
+
],
|
|
1046
|
+
"exampleTools": [
|
|
1047
|
+
"slog",
|
|
1048
|
+
"OpenTelemetry"
|
|
1049
|
+
],
|
|
1050
|
+
"notes": "Use structured logging (slog) to capture AI provenance. Include model, prompt version, and parameters in log context.",
|
|
1051
|
+
"verification": "Review AI integration and confirm provenance logging is implemented."
|
|
1052
|
+
}
|
|
1053
|
+
},
|
|
724
1054
|
{
|
|
725
1055
|
"ciHints": {
|
|
726
1056
|
"azure-devops": {
|
|
@@ -797,27 +1127,41 @@
|
|
|
797
1127
|
},
|
|
798
1128
|
"migrationGuide": [
|
|
799
1129
|
{
|
|
800
|
-
"description": "
|
|
1130
|
+
"description": "Configure .gitattributes for cross-platform line ending correctness and establish the canonical verify entrypoint before adding any checks. This prevents 'works locally, fails in CI' issues from day one.",
|
|
1131
|
+
"focusIds": [
|
|
1132
|
+
"gitattributes-eol",
|
|
1133
|
+
"canonical-verify",
|
|
1134
|
+
"hook-ci-parity",
|
|
1135
|
+
"config-authority"
|
|
1136
|
+
],
|
|
1137
|
+
"notes": "Start here to avoid debugging cryptic CRLF failures later. Use .gitattributes as the authority for EOL (not .editorconfig). Run 'git add --renormalize .' after adding .gitattributes to fix existing files.",
|
|
1138
|
+
"step": 0,
|
|
1139
|
+
"title": "Foundation: Line Endings and Hook Entry Point"
|
|
1140
|
+
},
|
|
1141
|
+
{
|
|
1142
|
+
"description": "Add pre-commit hooks with secret scanning, formatting, and linting. Hooks should CHECK (not auto-fix) and scope to changed files only for speed.",
|
|
801
1143
|
"focusIds": [
|
|
802
1144
|
"pre-commit-hooks",
|
|
1145
|
+
"secret-scanning-precommit",
|
|
803
1146
|
"linting",
|
|
804
1147
|
"code-formatter"
|
|
805
1148
|
],
|
|
806
|
-
"notes": "Keep hooks fast
|
|
1149
|
+
"notes": "Keep hooks fast by scoping to staged files. Use Husky as entry point calling lint-staged or pre-commit. Hooks should check, not fix, to keep developers aware of issues.",
|
|
807
1150
|
"step": 1,
|
|
808
1151
|
"title": "Establish Local Safety Nets First"
|
|
809
1152
|
},
|
|
810
1153
|
{
|
|
811
|
-
"description": "Introduce CI quality gates that mirror local
|
|
1154
|
+
"description": "Introduce CI quality gates that mirror local hooks exactly. Add CRLF detection early in pipeline. Treat existing violations as warnings where possible.",
|
|
812
1155
|
"focusIds": [
|
|
1156
|
+
"crlf-detection",
|
|
813
1157
|
"ci-quality-gates",
|
|
814
1158
|
"linting",
|
|
815
1159
|
"code-formatter",
|
|
816
1160
|
"commit-linting"
|
|
817
1161
|
],
|
|
818
|
-
"notes": "Use diff-based tools
|
|
1162
|
+
"notes": "CI must call the same verify scripts that hooks use. Add CRLF detection before other checks to fail fast on line ending issues. Use diff-based tools so only new violations break builds.",
|
|
819
1163
|
"step": 2,
|
|
820
|
-
"title": "Mirror Local Checks in CI
|
|
1164
|
+
"title": "Mirror Local Checks in CI with CRLF Detection"
|
|
821
1165
|
},
|
|
822
1166
|
{
|
|
823
1167
|
"description": "Enable type-checking, coverage thresholds, and dependency/vulnerability scanning with gradual enforcement.",
|
|
@@ -842,9 +1186,22 @@
|
|
|
842
1186
|
"complexity-analysis",
|
|
843
1187
|
"accessibility-auditing"
|
|
844
1188
|
],
|
|
845
|
-
"notes": "Tackle recommended items in order of business value; backend-only repos can skip web-focused checks like accessibility.
|
|
1189
|
+
"notes": "Tackle recommended items in order of business value; backend-only repos can skip web-focused checks like accessibility.",
|
|
846
1190
|
"step": 4,
|
|
847
1191
|
"title": "Layer in Docs, Governance, and Recommended Checks"
|
|
1192
|
+
},
|
|
1193
|
+
{
|
|
1194
|
+
"description": "For repos using or building with generative AI, add drift detection, schema enforcement, golden contract tests, safety testing, and provenance tracking.",
|
|
1195
|
+
"focusIds": [
|
|
1196
|
+
"ai-drift-detection",
|
|
1197
|
+
"ai-schema-enforcement",
|
|
1198
|
+
"ai-golden-tests",
|
|
1199
|
+
"ai-safety-checks",
|
|
1200
|
+
"ai-provenance-tracking"
|
|
1201
|
+
],
|
|
1202
|
+
"notes": "Skip this step if your repo has no AI/ML components. For AI-heavy repos: add nightly drift detection to catch model changes, enforce strict schemas at AI output boundaries, and log provenance for debugging 'why did AI do X?'",
|
|
1203
|
+
"step": 5,
|
|
1204
|
+
"title": "AI/ML Governance (If Applicable)"
|
|
848
1205
|
}
|
|
849
1206
|
],
|
|
850
1207
|
"qualityGatePolicy": {
|
|
@@ -854,5 +1211,5 @@
|
|
|
854
1211
|
},
|
|
855
1212
|
"stack": "go",
|
|
856
1213
|
"stackLabel": "Go",
|
|
857
|
-
"version":
|
|
1214
|
+
"version": 5
|
|
858
1215
|
}
|