@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
|
+
"github-actions": {
|
|
7
|
+
"job": "ci",
|
|
8
|
+
"notes": "Add .gitattributes check as first step in CI job."
|
|
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": "Mark *.rs, *.toml as text with auto EOL handling. Mark shell scripts as eol=lf. Binary files (*.exe, *.dll) 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 consistency."
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"ciHints": {
|
|
39
|
+
"github-actions": {
|
|
40
|
+
"job": "ci",
|
|
41
|
+
"notes": "Add CRLF detection step before main CI steps."
|
|
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": "Rust build scripts (build.rs) and shell scripts must not have CRLF. Cargo tolerates CRLF in .rs files but shell invocations fail.",
|
|
59
|
+
"verification": "Run CRLF detection on shell and build scripts."
|
|
60
|
+
}
|
|
61
|
+
},
|
|
4
62
|
{
|
|
5
63
|
"ciHints": {
|
|
6
64
|
"github-actions": {
|
|
@@ -148,6 +206,34 @@
|
|
|
148
206
|
"verification": "Check that Cargo.toml version follows SemVer and verify changelog generation from commit history."
|
|
149
207
|
}
|
|
150
208
|
},
|
|
209
|
+
{
|
|
210
|
+
"ciHints": {
|
|
211
|
+
"github-actions": {
|
|
212
|
+
"job": "ci",
|
|
213
|
+
"notes": "Run the version guard in PR workflows against the base ref."
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"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.",
|
|
217
|
+
"id": "version-guard",
|
|
218
|
+
"label": "Version Guard (Automated Releases)",
|
|
219
|
+
"stack": {
|
|
220
|
+
"exampleConfigFiles": [
|
|
221
|
+
"scripts/check-version-unchanged.sh",
|
|
222
|
+
".github/workflows/ci.yml",
|
|
223
|
+
"azure-pipelines.yml"
|
|
224
|
+
],
|
|
225
|
+
"exampleTools": [
|
|
226
|
+
"cargo-release",
|
|
227
|
+
"semantic-release",
|
|
228
|
+
"git"
|
|
229
|
+
],
|
|
230
|
+
"notes": "When using cargo-release or semantic-release-cargo, guard against manual edits to Cargo.toml version fields in PRs.",
|
|
231
|
+
"requiredFiles": [
|
|
232
|
+
"Cargo.toml"
|
|
233
|
+
],
|
|
234
|
+
"verification": "Run the guard and confirm it fails when Cargo.toml version changes."
|
|
235
|
+
}
|
|
236
|
+
},
|
|
151
237
|
{
|
|
152
238
|
"ciHints": {
|
|
153
239
|
"github-actions": {
|
|
@@ -177,6 +263,27 @@
|
|
|
177
263
|
"verification": "Trigger the release pipeline and confirm all artifacts share the same version number and tag."
|
|
178
264
|
}
|
|
179
265
|
},
|
|
266
|
+
{
|
|
267
|
+
"ciHints": {
|
|
268
|
+
"github-actions": {
|
|
269
|
+
"job": "release",
|
|
270
|
+
"notes": "Set HUSKY=0 or equivalent in release job to disable hooks."
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
"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.",
|
|
274
|
+
"id": "release-hook-bypass",
|
|
275
|
+
"label": "Release Hook Bypass",
|
|
276
|
+
"stack": {
|
|
277
|
+
"exampleConfigFiles": [
|
|
278
|
+
".github/workflows/release.yml"
|
|
279
|
+
],
|
|
280
|
+
"exampleTools": [
|
|
281
|
+
"cargo-release"
|
|
282
|
+
],
|
|
283
|
+
"notes": "Use --no-verify with git commands in release scripts. If using pre-commit, set SKIP=all.",
|
|
284
|
+
"verification": "Check release workflow for hook bypass."
|
|
285
|
+
}
|
|
286
|
+
},
|
|
180
287
|
{
|
|
181
288
|
"ciHints": {
|
|
182
289
|
"github-actions": {
|
|
@@ -293,10 +400,11 @@
|
|
|
293
400
|
{
|
|
294
401
|
"ciHints": {
|
|
295
402
|
"github-actions": {
|
|
296
|
-
"job": "ci"
|
|
403
|
+
"job": "ci",
|
|
404
|
+
"notes": "Hooks and CI must invoke identical verification commands. Use npm run verify or equivalent."
|
|
297
405
|
}
|
|
298
406
|
},
|
|
299
|
-
"description": "Use git hooks to run linting, formatting,
|
|
407
|
+
"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).",
|
|
300
408
|
"id": "pre-commit-hooks",
|
|
301
409
|
"label": "Pre-Commit Hooks",
|
|
302
410
|
"stack": {
|
|
@@ -307,8 +415,53 @@
|
|
|
307
415
|
"pre-commit",
|
|
308
416
|
"cargo-husky"
|
|
309
417
|
],
|
|
310
|
-
"notes": "Use pre-commit with rust hooks for cargo fmt and cargo clippy on staged files.
|
|
311
|
-
"verification": "
|
|
418
|
+
"notes": "Use pre-commit with rust hooks for 'cargo fmt --check' and 'cargo clippy' on staged files. Pin rust-toolchain.toml for determinism across environments.",
|
|
419
|
+
"verification": "Confirm hooks run cargo fmt --check (not cargo fmt) and cargo clippy before commits."
|
|
420
|
+
}
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
"ciHints": {
|
|
424
|
+
"github-actions": {
|
|
425
|
+
"job": "ci",
|
|
426
|
+
"notes": "CI should call the same verify script that hooks use locally."
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
"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.",
|
|
430
|
+
"id": "hook-ci-parity",
|
|
431
|
+
"label": "Hook/CI Parity",
|
|
432
|
+
"stack": {
|
|
433
|
+
"exampleConfigFiles": [
|
|
434
|
+
"Makefile",
|
|
435
|
+
"Cargo.toml"
|
|
436
|
+
],
|
|
437
|
+
"exampleTools": [
|
|
438
|
+
"cargo",
|
|
439
|
+
"make"
|
|
440
|
+
],
|
|
441
|
+
"notes": "Define a verify target (make verify or cargo make verify) that runs fmt --check, clippy, and test. Both hooks and CI should use this target.",
|
|
442
|
+
"verification": "Compare hook commands with CI commands and confirm they invoke the same cargo commands."
|
|
443
|
+
}
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"ciHints": {
|
|
447
|
+
"github-actions": {
|
|
448
|
+
"job": "ci",
|
|
449
|
+
"notes": "Enable GitHub secret scanning and also run gitleaks in CI."
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
"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.",
|
|
453
|
+
"id": "secret-scanning-precommit",
|
|
454
|
+
"label": "Pre-commit Secret Scanning",
|
|
455
|
+
"stack": {
|
|
456
|
+
"exampleConfigFiles": [
|
|
457
|
+
".gitleaks.toml",
|
|
458
|
+
".pre-commit-config.yaml"
|
|
459
|
+
],
|
|
460
|
+
"exampleTools": [
|
|
461
|
+
"gitleaks"
|
|
462
|
+
],
|
|
463
|
+
"notes": "Add gitleaks to pre-commit hooks. Configure Rust-specific patterns if needed.",
|
|
464
|
+
"verification": "Run 'gitleaks protect --staged' and verify it catches test secrets."
|
|
312
465
|
}
|
|
313
466
|
},
|
|
314
467
|
{
|
|
@@ -532,6 +685,75 @@
|
|
|
532
685
|
],
|
|
533
686
|
"verification": "LICENSE file is present; CODE_OF_CONDUCT.md and CONTRIBUTING.md provide contribution guidance."
|
|
534
687
|
}
|
|
688
|
+
},
|
|
689
|
+
{
|
|
690
|
+
"ciHints": {
|
|
691
|
+
"github-actions": {
|
|
692
|
+
"job": "ci",
|
|
693
|
+
"notes": "CI should call the canonical verify command, not duplicate check logic."
|
|
694
|
+
}
|
|
695
|
+
},
|
|
696
|
+
"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.",
|
|
697
|
+
"id": "canonical-verify",
|
|
698
|
+
"label": "Canonical Verify Entrypoint",
|
|
699
|
+
"stack": {
|
|
700
|
+
"exampleConfigFiles": [
|
|
701
|
+
"Makefile",
|
|
702
|
+
"Makefile.toml"
|
|
703
|
+
],
|
|
704
|
+
"exampleTools": [
|
|
705
|
+
"cargo",
|
|
706
|
+
"make",
|
|
707
|
+
"cargo-make"
|
|
708
|
+
],
|
|
709
|
+
"notes": "Define 'make verify' or 'cargo make verify' that runs fmt --check, clippy, and test. Both hooks and CI use this entrypoint.",
|
|
710
|
+
"verification": "Makefile or Makefile.toml contains a 'verify' task."
|
|
711
|
+
}
|
|
712
|
+
},
|
|
713
|
+
{
|
|
714
|
+
"ciHints": {
|
|
715
|
+
"github-actions": {
|
|
716
|
+
"job": "ci",
|
|
717
|
+
"notes": "Ensure CI reads from authoritative configs, not duplicated settings."
|
|
718
|
+
}
|
|
719
|
+
},
|
|
720
|
+
"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.",
|
|
721
|
+
"id": "config-authority",
|
|
722
|
+
"label": "Config File Authority Rules",
|
|
723
|
+
"stack": {
|
|
724
|
+
"exampleConfigFiles": [
|
|
725
|
+
".gitattributes",
|
|
726
|
+
"Cargo.toml",
|
|
727
|
+
"rustfmt.toml",
|
|
728
|
+
"clippy.toml"
|
|
729
|
+
],
|
|
730
|
+
"exampleTools": [],
|
|
731
|
+
"notes": "Authority mapping: .gitattributes for EOL, Cargo.toml for project config, rustfmt.toml for formatting, clippy.toml for linting. Each concern has one file.",
|
|
732
|
+
"verification": "Review configs and confirm no rules are duplicated across files."
|
|
733
|
+
}
|
|
734
|
+
},
|
|
735
|
+
{
|
|
736
|
+
"ciHints": {
|
|
737
|
+
"github-actions": {
|
|
738
|
+
"job": "ci",
|
|
739
|
+
"notes": "CI should read skip paths from config files, not hardcode them in pipeline."
|
|
740
|
+
}
|
|
741
|
+
},
|
|
742
|
+
"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.",
|
|
743
|
+
"id": "explicit-skip-paths",
|
|
744
|
+
"label": "Explicit Skip Paths",
|
|
745
|
+
"stack": {
|
|
746
|
+
"exampleConfigFiles": [
|
|
747
|
+
"rustfmt.toml",
|
|
748
|
+
".clippy.toml"
|
|
749
|
+
],
|
|
750
|
+
"exampleTools": [
|
|
751
|
+
"rustfmt",
|
|
752
|
+
"clippy"
|
|
753
|
+
],
|
|
754
|
+
"notes": "Use #[rustfmt::skip] or #[allow(clippy::*)] sparingly and document why. For directory-level exclusions, use Cargo.toml workspace exclude.",
|
|
755
|
+
"verification": "Search for skip annotations and confirm each is documented."
|
|
756
|
+
}
|
|
535
757
|
}
|
|
536
758
|
],
|
|
537
759
|
"optionalEnhancements": [
|
|
@@ -731,6 +953,117 @@
|
|
|
731
953
|
"verification": "For web-facing Rust apps, run accessibility audits against key routes using axe or pa11y."
|
|
732
954
|
}
|
|
733
955
|
},
|
|
956
|
+
{
|
|
957
|
+
"ciHints": {
|
|
958
|
+
"github-actions": {
|
|
959
|
+
"job": "nightly",
|
|
960
|
+
"notes": "Use scheduled workflow (cron) to run AI drift detection nightly."
|
|
961
|
+
}
|
|
962
|
+
},
|
|
963
|
+
"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.",
|
|
964
|
+
"id": "ai-drift-detection",
|
|
965
|
+
"label": "AI Drift Detection",
|
|
966
|
+
"stack": {
|
|
967
|
+
"exampleConfigFiles": [
|
|
968
|
+
"snapshots/",
|
|
969
|
+
"ai-baselines/"
|
|
970
|
+
],
|
|
971
|
+
"exampleTools": [
|
|
972
|
+
"insta",
|
|
973
|
+
"custom baseline tests"
|
|
974
|
+
],
|
|
975
|
+
"notes": "Use insta for snapshot testing of AI outputs. Pin model versions and prompt templates. Run nightly to detect drift.",
|
|
976
|
+
"verification": "Run 'cargo insta test' and confirm AI outputs match baselines."
|
|
977
|
+
}
|
|
978
|
+
},
|
|
979
|
+
{
|
|
980
|
+
"ciHints": {
|
|
981
|
+
"github-actions": {
|
|
982
|
+
"job": "ci",
|
|
983
|
+
"notes": "Include AI output schema validation in CI test suite."
|
|
984
|
+
}
|
|
985
|
+
},
|
|
986
|
+
"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.",
|
|
987
|
+
"id": "ai-schema-enforcement",
|
|
988
|
+
"label": "AI Output Schema Enforcement",
|
|
989
|
+
"stack": {
|
|
990
|
+
"exampleConfigFiles": [
|
|
991
|
+
"src/schemas/"
|
|
992
|
+
],
|
|
993
|
+
"exampleTools": [
|
|
994
|
+
"serde",
|
|
995
|
+
"jsonschema",
|
|
996
|
+
"validator"
|
|
997
|
+
],
|
|
998
|
+
"notes": "Use serde with #[serde(deny_unknown_fields)] for strict deserialization of AI outputs. Add validator derives for business rule validation.",
|
|
999
|
+
"verification": "Review AI integration code and confirm strict deserialization is enforced."
|
|
1000
|
+
}
|
|
1001
|
+
},
|
|
1002
|
+
{
|
|
1003
|
+
"ciHints": {
|
|
1004
|
+
"github-actions": {
|
|
1005
|
+
"job": "ci",
|
|
1006
|
+
"notes": "Include AI golden contract tests in CI test suite."
|
|
1007
|
+
}
|
|
1008
|
+
},
|
|
1009
|
+
"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.",
|
|
1010
|
+
"id": "ai-golden-tests",
|
|
1011
|
+
"label": "AI Golden Contract Tests",
|
|
1012
|
+
"stack": {
|
|
1013
|
+
"exampleConfigFiles": [
|
|
1014
|
+
"snapshots/"
|
|
1015
|
+
],
|
|
1016
|
+
"exampleTools": [
|
|
1017
|
+
"insta"
|
|
1018
|
+
],
|
|
1019
|
+
"notes": "Use insta for snapshot testing AI-generated code and configs. Test format compliance and forbidden path restrictions.",
|
|
1020
|
+
"verification": "Run 'cargo insta test' and confirm AI outputs match snapshots."
|
|
1021
|
+
}
|
|
1022
|
+
},
|
|
1023
|
+
{
|
|
1024
|
+
"ciHints": {
|
|
1025
|
+
"github-actions": {
|
|
1026
|
+
"job": "security",
|
|
1027
|
+
"notes": "Run AI safety checks on main branch merges."
|
|
1028
|
+
}
|
|
1029
|
+
},
|
|
1030
|
+
"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.",
|
|
1031
|
+
"id": "ai-safety-checks",
|
|
1032
|
+
"label": "AI Adversarial & Safety Testing",
|
|
1033
|
+
"stack": {
|
|
1034
|
+
"exampleConfigFiles": [
|
|
1035
|
+
"tests/ai_safety/"
|
|
1036
|
+
],
|
|
1037
|
+
"exampleTools": [
|
|
1038
|
+
"proptest",
|
|
1039
|
+
"custom tests"
|
|
1040
|
+
],
|
|
1041
|
+
"notes": "Use proptest for property-based testing of AI input validation. Test that malicious inputs don't escape sandboxing.",
|
|
1042
|
+
"verification": "Run AI safety tests with adversarial inputs."
|
|
1043
|
+
}
|
|
1044
|
+
},
|
|
1045
|
+
{
|
|
1046
|
+
"ciHints": {
|
|
1047
|
+
"github-actions": {
|
|
1048
|
+
"job": "ci",
|
|
1049
|
+
"notes": "Check AI provenance logging implementation in CI."
|
|
1050
|
+
}
|
|
1051
|
+
},
|
|
1052
|
+
"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.",
|
|
1053
|
+
"id": "ai-provenance-tracking",
|
|
1054
|
+
"label": "AI Provenance & Audit Logging",
|
|
1055
|
+
"stack": {
|
|
1056
|
+
"exampleConfigFiles": [
|
|
1057
|
+
"src/ai/provenance.rs"
|
|
1058
|
+
],
|
|
1059
|
+
"exampleTools": [
|
|
1060
|
+
"tracing",
|
|
1061
|
+
"OpenTelemetry"
|
|
1062
|
+
],
|
|
1063
|
+
"notes": "Use tracing spans to capture AI call provenance. Include model version, prompt hash, and parameters as span attributes.",
|
|
1064
|
+
"verification": "Review AI integration and confirm provenance is logged."
|
|
1065
|
+
}
|
|
1066
|
+
},
|
|
734
1067
|
{
|
|
735
1068
|
"ciHints": {
|
|
736
1069
|
"github-actions": {
|
|
@@ -807,27 +1140,41 @@
|
|
|
807
1140
|
},
|
|
808
1141
|
"migrationGuide": [
|
|
809
1142
|
{
|
|
810
|
-
"description": "
|
|
1143
|
+
"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.",
|
|
1144
|
+
"focusIds": [
|
|
1145
|
+
"gitattributes-eol",
|
|
1146
|
+
"canonical-verify",
|
|
1147
|
+
"hook-ci-parity",
|
|
1148
|
+
"config-authority"
|
|
1149
|
+
],
|
|
1150
|
+
"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.",
|
|
1151
|
+
"step": 0,
|
|
1152
|
+
"title": "Foundation: Line Endings and Hook Entry Point"
|
|
1153
|
+
},
|
|
1154
|
+
{
|
|
1155
|
+
"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.",
|
|
811
1156
|
"focusIds": [
|
|
812
1157
|
"pre-commit-hooks",
|
|
1158
|
+
"secret-scanning-precommit",
|
|
813
1159
|
"linting",
|
|
814
1160
|
"code-formatter"
|
|
815
1161
|
],
|
|
816
|
-
"notes": "Keep hooks fast
|
|
1162
|
+
"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.",
|
|
817
1163
|
"step": 1,
|
|
818
1164
|
"title": "Establish Local Safety Nets First"
|
|
819
1165
|
},
|
|
820
1166
|
{
|
|
821
|
-
"description": "Introduce CI quality gates that mirror local
|
|
1167
|
+
"description": "Introduce CI quality gates that mirror local hooks exactly. Add CRLF detection early in pipeline. Treat existing violations as warnings where possible.",
|
|
822
1168
|
"focusIds": [
|
|
1169
|
+
"crlf-detection",
|
|
823
1170
|
"ci-quality-gates",
|
|
824
1171
|
"linting",
|
|
825
1172
|
"code-formatter",
|
|
826
1173
|
"commit-linting"
|
|
827
1174
|
],
|
|
828
|
-
"notes": "Use diff-based tools
|
|
1175
|
+
"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.",
|
|
829
1176
|
"step": 2,
|
|
830
|
-
"title": "Mirror Local Checks in CI
|
|
1177
|
+
"title": "Mirror Local Checks in CI with CRLF Detection"
|
|
831
1178
|
},
|
|
832
1179
|
{
|
|
833
1180
|
"description": "Enable type-checking, coverage thresholds, and dependency/vulnerability scanning with gradual enforcement.",
|
|
@@ -852,9 +1199,22 @@
|
|
|
852
1199
|
"complexity-analysis",
|
|
853
1200
|
"accessibility-auditing"
|
|
854
1201
|
],
|
|
855
|
-
"notes": "Tackle recommended items in order of business value; backend-only repos can skip web-focused checks like accessibility.
|
|
1202
|
+
"notes": "Tackle recommended items in order of business value; backend-only repos can skip web-focused checks like accessibility.",
|
|
856
1203
|
"step": 4,
|
|
857
1204
|
"title": "Layer in Docs, Governance, and Recommended Checks"
|
|
1205
|
+
},
|
|
1206
|
+
{
|
|
1207
|
+
"description": "For repos using or building with generative AI, add drift detection, schema enforcement, golden contract tests, safety testing, and provenance tracking.",
|
|
1208
|
+
"focusIds": [
|
|
1209
|
+
"ai-drift-detection",
|
|
1210
|
+
"ai-schema-enforcement",
|
|
1211
|
+
"ai-golden-tests",
|
|
1212
|
+
"ai-safety-checks",
|
|
1213
|
+
"ai-provenance-tracking"
|
|
1214
|
+
],
|
|
1215
|
+
"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?'",
|
|
1216
|
+
"step": 5,
|
|
1217
|
+
"title": "AI/ML Governance (If Applicable)"
|
|
858
1218
|
}
|
|
859
1219
|
],
|
|
860
1220
|
"qualityGatePolicy": {
|
|
@@ -864,5 +1224,5 @@
|
|
|
864
1224
|
},
|
|
865
1225
|
"stack": "rust",
|
|
866
1226
|
"stackLabel": "Rust",
|
|
867
|
-
"version":
|
|
1227
|
+
"version": 5
|
|
868
1228
|
}
|