@oddessentials/repo-standards 2.0.0 → 2.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.
@@ -35,33 +35,31 @@
35
35
  "id": "linting",
36
36
  "label": "Linting",
37
37
  "stack": {
38
+ "anyOfFiles": [
39
+ "pyproject.toml",
40
+ "ruff.toml",
41
+ ".flake8",
42
+ "setup.cfg",
43
+ "tox.ini"
44
+ ],
38
45
  "bazelHints": {
39
46
  "commands": [
40
47
  "bazel test //...:ruff_test",
41
48
  "bazel run //tools/lint:ruff -- check ."
42
49
  ],
43
- "notes": "Use rules_python with ruff wrapped as py_test or a custom run target."
50
+ "notes": "Example only; actual targets are repo-defined. Use rules_python with ruff wrapped as py_test or run target."
44
51
  },
45
52
  "exampleConfigFiles": [
46
53
  "pyproject.toml",
47
- ".flake8"
54
+ ".flake8",
55
+ "ruff.toml"
48
56
  ],
49
57
  "exampleTools": [
50
58
  "ruff",
51
59
  "flake8"
52
60
  ],
53
61
  "notes": "Configure a primary linter (such as ruff) and keep rules focused on catching real issues without overwhelming developers.",
54
- "optionalFiles": [
55
- "ruff.toml",
56
- ".flake8"
57
- ],
58
- "requiredFiles": [
59
- "pyproject.toml"
60
- ],
61
- "requiredScripts": [
62
- "lint"
63
- ],
64
- "verification": "pyproject.toml (or ruff.toml / .flake8) signals that linting tools are configured for the repository."
62
+ "verification": "pyproject.toml (or ruff.toml / .flake8 / setup.cfg) signals that linting tools are configured for the repository."
65
63
  }
66
64
  },
67
65
  {
@@ -78,7 +76,7 @@
78
76
  "commands": [
79
77
  "bazel test //..."
80
78
  ],
81
- "notes": "Use rules_python py_test for pytest-based tests. Tests are hermetically isolated."
79
+ "notes": "Example only; actual targets are repo-defined. Use rules_python py_test for pytest-based tests."
82
80
  },
83
81
  "exampleConfigFiles": [
84
82
  "pytest.ini",
@@ -93,9 +91,6 @@
93
91
  "pyproject.toml",
94
92
  "tests/"
95
93
  ],
96
- "requiredScripts": [
97
- "test"
98
- ],
99
94
  "verification": "Test framework configuration is present; tests/ directory or pytest configuration exists."
100
95
  }
101
96
  },
@@ -285,7 +280,7 @@
285
280
  "bazel test //...:mypy_test",
286
281
  "bazel run //tools/typecheck:mypy"
287
282
  ],
288
- "notes": "Wrap mypy as a py_test or run target for Bazel-based type checking."
283
+ "notes": "Example only; actual targets are repo-defined. Wrap mypy as a py_test or run target."
289
284
  },
290
285
  "exampleConfigFiles": [
291
286
  "mypy.ini",
@@ -301,9 +296,6 @@
301
296
  "requiredFiles": [
302
297
  "pyproject.toml"
303
298
  ],
304
- "requiredScripts": [
305
- "typecheck"
306
- ],
307
299
  "verification": "pyproject.toml (or mypy.ini) signals that mypy configuration is available for the repository."
308
300
  }
309
301
  },
@@ -585,48 +577,52 @@
585
577
  "azure-devops"
586
578
  ],
587
579
  "meta": {
588
- "bazelIntegration": {
589
- "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
590
- "ciContract": {
591
- "configFlag": "--config=ci (define in .bazelrc)",
592
- "deterministicFlags": [
593
- "--nokeep_going",
594
- "--test_output=errors"
595
- ],
596
- "remoteCache": "Optional; not required for CI",
597
- "versionPinning": "Use .bazelversion file for Bazelisk"
598
- },
599
- "description": "Bazel build executor support for quality checks. All hints are ADVISORY—stack-native commands remain the default execution path.",
600
- "detectionRules": {
601
- "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
602
- "optionalMarkers": [
603
- ".bazelrc",
604
- ".bazelversion"
605
- ],
606
- "rootMarkers": [
607
- "MODULE.bazel",
608
- "WORKSPACE.bazel",
609
- "WORKSPACE"
610
- ]
611
- },
612
- "optOut": {
613
- "configPath": "meta.bazelIntegration.enabled",
614
- "description": "Set meta.bazelIntegration.enabled = false in repo config to disable Bazel hints"
615
- },
616
- "targetConventions": {
617
- "build": "bazel build //...",
618
- "coverage": "bazel coverage //...",
619
- "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
620
- "format": "bazel run //tools/format:check",
621
- "lint": "//tools/lint:lint or bazel test //... with lint aspects",
622
- "test": "bazel test //..."
623
- }
624
- },
625
580
  "complexityChecks": {
626
581
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
627
582
  "enabledByDefault": true
628
583
  },
584
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
585
+ "coverageThresholdUnit": "ratio",
629
586
  "defaultCoverageThreshold": 0.8,
587
+ "executorHints": {
588
+ "bazel": {
589
+ "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
590
+ "ciContract": {
591
+ "configFlag": "--config=ci (define in .bazelrc)",
592
+ "deterministicFlags": [
593
+ "--nokeep_going",
594
+ "--test_output=errors"
595
+ ],
596
+ "remoteCache": "Optional; not required for CI",
597
+ "versionPinning": "Use .bazelversion file for Bazelisk"
598
+ },
599
+ "detectionRules": {
600
+ "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
601
+ "optionalMarkers": [
602
+ ".bazelrc",
603
+ ".bazelversion"
604
+ ],
605
+ "rootMarkers": [
606
+ "MODULE.bazel",
607
+ "WORKSPACE.bazel",
608
+ "WORKSPACE"
609
+ ]
610
+ },
611
+ "optOut": {
612
+ "configPath": "meta.executorHints.bazel.enabled",
613
+ "description": "Set meta.executorHints.bazel.enabled = false in repo config to disable Bazel hints"
614
+ },
615
+ "targetConventions": {
616
+ "build": "bazel build //...",
617
+ "coverage": "bazel coverage //...",
618
+ "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
619
+ "format": "bazel run //tools/format:check",
620
+ "lint": "//tools/lint:lint or bazel test //... with lint aspects",
621
+ "test": "bazel test //..."
622
+ }
623
+ },
624
+ "description": "Advisory execution substrate hints. Bazel is the first supported executor; future monorepo executors may follow the same pattern."
625
+ },
630
626
  "migrationGuide": [
631
627
  {
632
628
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -686,5 +682,5 @@
686
682
  },
687
683
  "stack": "python",
688
684
  "stackLabel": "Python",
689
- "version": 2
685
+ "version": 3
690
686
  }
@@ -35,33 +35,31 @@
35
35
  "id": "linting",
36
36
  "label": "Linting",
37
37
  "stack": {
38
+ "anyOfFiles": [
39
+ "pyproject.toml",
40
+ "ruff.toml",
41
+ ".flake8",
42
+ "setup.cfg",
43
+ "tox.ini"
44
+ ],
38
45
  "bazelHints": {
39
46
  "commands": [
40
47
  "bazel test //...:ruff_test",
41
48
  "bazel run //tools/lint:ruff -- check ."
42
49
  ],
43
- "notes": "Use rules_python with ruff wrapped as py_test or a custom run target."
50
+ "notes": "Example only; actual targets are repo-defined. Use rules_python with ruff wrapped as py_test or run target."
44
51
  },
45
52
  "exampleConfigFiles": [
46
53
  "pyproject.toml",
47
- ".flake8"
54
+ ".flake8",
55
+ "ruff.toml"
48
56
  ],
49
57
  "exampleTools": [
50
58
  "ruff",
51
59
  "flake8"
52
60
  ],
53
61
  "notes": "Configure a primary linter (such as ruff) and keep rules focused on catching real issues without overwhelming developers.",
54
- "optionalFiles": [
55
- "ruff.toml",
56
- ".flake8"
57
- ],
58
- "requiredFiles": [
59
- "pyproject.toml"
60
- ],
61
- "requiredScripts": [
62
- "lint"
63
- ],
64
- "verification": "pyproject.toml (or ruff.toml / .flake8) signals that linting tools are configured for the repository."
62
+ "verification": "pyproject.toml (or ruff.toml / .flake8 / setup.cfg) signals that linting tools are configured for the repository."
65
63
  }
66
64
  },
67
65
  {
@@ -78,7 +76,7 @@
78
76
  "commands": [
79
77
  "bazel test //..."
80
78
  ],
81
- "notes": "Use rules_python py_test for pytest-based tests. Tests are hermetically isolated."
79
+ "notes": "Example only; actual targets are repo-defined. Use rules_python py_test for pytest-based tests."
82
80
  },
83
81
  "exampleConfigFiles": [
84
82
  "pytest.ini",
@@ -93,9 +91,6 @@
93
91
  "pyproject.toml",
94
92
  "tests/"
95
93
  ],
96
- "requiredScripts": [
97
- "test"
98
- ],
99
94
  "verification": "Test framework configuration is present; tests/ directory or pytest configuration exists."
100
95
  }
101
96
  },
@@ -285,7 +280,7 @@
285
280
  "bazel test //...:mypy_test",
286
281
  "bazel run //tools/typecheck:mypy"
287
282
  ],
288
- "notes": "Wrap mypy as a py_test or run target for Bazel-based type checking."
283
+ "notes": "Example only; actual targets are repo-defined. Wrap mypy as a py_test or run target."
289
284
  },
290
285
  "exampleConfigFiles": [
291
286
  "mypy.ini",
@@ -301,9 +296,6 @@
301
296
  "requiredFiles": [
302
297
  "pyproject.toml"
303
298
  ],
304
- "requiredScripts": [
305
- "typecheck"
306
- ],
307
299
  "verification": "pyproject.toml (or mypy.ini) signals that mypy configuration is available for the repository."
308
300
  }
309
301
  },
@@ -585,48 +577,52 @@
585
577
  "github-actions"
586
578
  ],
587
579
  "meta": {
588
- "bazelIntegration": {
589
- "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
590
- "ciContract": {
591
- "configFlag": "--config=ci (define in .bazelrc)",
592
- "deterministicFlags": [
593
- "--nokeep_going",
594
- "--test_output=errors"
595
- ],
596
- "remoteCache": "Optional; not required for CI",
597
- "versionPinning": "Use .bazelversion file for Bazelisk"
598
- },
599
- "description": "Bazel build executor support for quality checks. All hints are ADVISORY—stack-native commands remain the default execution path.",
600
- "detectionRules": {
601
- "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
602
- "optionalMarkers": [
603
- ".bazelrc",
604
- ".bazelversion"
605
- ],
606
- "rootMarkers": [
607
- "MODULE.bazel",
608
- "WORKSPACE.bazel",
609
- "WORKSPACE"
610
- ]
611
- },
612
- "optOut": {
613
- "configPath": "meta.bazelIntegration.enabled",
614
- "description": "Set meta.bazelIntegration.enabled = false in repo config to disable Bazel hints"
615
- },
616
- "targetConventions": {
617
- "build": "bazel build //...",
618
- "coverage": "bazel coverage //...",
619
- "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
620
- "format": "bazel run //tools/format:check",
621
- "lint": "//tools/lint:lint or bazel test //... with lint aspects",
622
- "test": "bazel test //..."
623
- }
624
- },
625
580
  "complexityChecks": {
626
581
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
627
582
  "enabledByDefault": true
628
583
  },
584
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
585
+ "coverageThresholdUnit": "ratio",
629
586
  "defaultCoverageThreshold": 0.8,
587
+ "executorHints": {
588
+ "bazel": {
589
+ "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
590
+ "ciContract": {
591
+ "configFlag": "--config=ci (define in .bazelrc)",
592
+ "deterministicFlags": [
593
+ "--nokeep_going",
594
+ "--test_output=errors"
595
+ ],
596
+ "remoteCache": "Optional; not required for CI",
597
+ "versionPinning": "Use .bazelversion file for Bazelisk"
598
+ },
599
+ "detectionRules": {
600
+ "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
601
+ "optionalMarkers": [
602
+ ".bazelrc",
603
+ ".bazelversion"
604
+ ],
605
+ "rootMarkers": [
606
+ "MODULE.bazel",
607
+ "WORKSPACE.bazel",
608
+ "WORKSPACE"
609
+ ]
610
+ },
611
+ "optOut": {
612
+ "configPath": "meta.executorHints.bazel.enabled",
613
+ "description": "Set meta.executorHints.bazel.enabled = false in repo config to disable Bazel hints"
614
+ },
615
+ "targetConventions": {
616
+ "build": "bazel build //...",
617
+ "coverage": "bazel coverage //...",
618
+ "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
619
+ "format": "bazel run //tools/format:check",
620
+ "lint": "//tools/lint:lint or bazel test //... with lint aspects",
621
+ "test": "bazel test //..."
622
+ }
623
+ },
624
+ "description": "Advisory execution substrate hints. Bazel is the first supported executor; future monorepo executors may follow the same pattern."
625
+ },
630
626
  "migrationGuide": [
631
627
  {
632
628
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -686,5 +682,5 @@
686
682
  },
687
683
  "stack": "python",
688
684
  "stackLabel": "Python",
689
- "version": 2
685
+ "version": 3
690
686
  }
@@ -41,33 +41,31 @@
41
41
  "id": "linting",
42
42
  "label": "Linting",
43
43
  "stack": {
44
+ "anyOfFiles": [
45
+ "pyproject.toml",
46
+ "ruff.toml",
47
+ ".flake8",
48
+ "setup.cfg",
49
+ "tox.ini"
50
+ ],
44
51
  "bazelHints": {
45
52
  "commands": [
46
53
  "bazel test //...:ruff_test",
47
54
  "bazel run //tools/lint:ruff -- check ."
48
55
  ],
49
- "notes": "Use rules_python with ruff wrapped as py_test or a custom run target."
56
+ "notes": "Example only; actual targets are repo-defined. Use rules_python with ruff wrapped as py_test or run target."
50
57
  },
51
58
  "exampleConfigFiles": [
52
59
  "pyproject.toml",
53
- ".flake8"
60
+ ".flake8",
61
+ "ruff.toml"
54
62
  ],
55
63
  "exampleTools": [
56
64
  "ruff",
57
65
  "flake8"
58
66
  ],
59
67
  "notes": "Configure a primary linter (such as ruff) and keep rules focused on catching real issues without overwhelming developers.",
60
- "optionalFiles": [
61
- "ruff.toml",
62
- ".flake8"
63
- ],
64
- "requiredFiles": [
65
- "pyproject.toml"
66
- ],
67
- "requiredScripts": [
68
- "lint"
69
- ],
70
- "verification": "pyproject.toml (or ruff.toml / .flake8) signals that linting tools are configured for the repository."
68
+ "verification": "pyproject.toml (or ruff.toml / .flake8 / setup.cfg) signals that linting tools are configured for the repository."
71
69
  }
72
70
  },
73
71
  {
@@ -87,7 +85,7 @@
87
85
  "commands": [
88
86
  "bazel test //..."
89
87
  ],
90
- "notes": "Use rules_python py_test for pytest-based tests. Tests are hermetically isolated."
88
+ "notes": "Example only; actual targets are repo-defined. Use rules_python py_test for pytest-based tests."
91
89
  },
92
90
  "exampleConfigFiles": [
93
91
  "pytest.ini",
@@ -102,9 +100,6 @@
102
100
  "pyproject.toml",
103
101
  "tests/"
104
102
  ],
105
- "requiredScripts": [
106
- "test"
107
- ],
108
103
  "verification": "Test framework configuration is present; tests/ directory or pytest configuration exists."
109
104
  }
110
105
  },
@@ -318,7 +313,7 @@
318
313
  "bazel test //...:mypy_test",
319
314
  "bazel run //tools/typecheck:mypy"
320
315
  ],
321
- "notes": "Wrap mypy as a py_test or run target for Bazel-based type checking."
316
+ "notes": "Example only; actual targets are repo-defined. Wrap mypy as a py_test or run target."
322
317
  },
323
318
  "exampleConfigFiles": [
324
319
  "mypy.ini",
@@ -334,9 +329,6 @@
334
329
  "requiredFiles": [
335
330
  "pyproject.toml"
336
331
  ],
337
- "requiredScripts": [
338
- "typecheck"
339
- ],
340
332
  "verification": "pyproject.toml (or mypy.ini) signals that mypy configuration is available for the repository."
341
333
  }
342
334
  },
@@ -654,48 +646,52 @@
654
646
  "github-actions"
655
647
  ],
656
648
  "meta": {
657
- "bazelIntegration": {
658
- "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
659
- "ciContract": {
660
- "configFlag": "--config=ci (define in .bazelrc)",
661
- "deterministicFlags": [
662
- "--nokeep_going",
663
- "--test_output=errors"
664
- ],
665
- "remoteCache": "Optional; not required for CI",
666
- "versionPinning": "Use .bazelversion file for Bazelisk"
667
- },
668
- "description": "Bazel build executor support for quality checks. All hints are ADVISORY—stack-native commands remain the default execution path.",
669
- "detectionRules": {
670
- "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
671
- "optionalMarkers": [
672
- ".bazelrc",
673
- ".bazelversion"
674
- ],
675
- "rootMarkers": [
676
- "MODULE.bazel",
677
- "WORKSPACE.bazel",
678
- "WORKSPACE"
679
- ]
680
- },
681
- "optOut": {
682
- "configPath": "meta.bazelIntegration.enabled",
683
- "description": "Set meta.bazelIntegration.enabled = false in repo config to disable Bazel hints"
684
- },
685
- "targetConventions": {
686
- "build": "bazel build //...",
687
- "coverage": "bazel coverage //...",
688
- "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
689
- "format": "bazel run //tools/format:check",
690
- "lint": "//tools/lint:lint or bazel test //... with lint aspects",
691
- "test": "bazel test //..."
692
- }
693
- },
694
649
  "complexityChecks": {
695
650
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
696
651
  "enabledByDefault": true
697
652
  },
653
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
654
+ "coverageThresholdUnit": "ratio",
698
655
  "defaultCoverageThreshold": 0.8,
656
+ "executorHints": {
657
+ "bazel": {
658
+ "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
659
+ "ciContract": {
660
+ "configFlag": "--config=ci (define in .bazelrc)",
661
+ "deterministicFlags": [
662
+ "--nokeep_going",
663
+ "--test_output=errors"
664
+ ],
665
+ "remoteCache": "Optional; not required for CI",
666
+ "versionPinning": "Use .bazelversion file for Bazelisk"
667
+ },
668
+ "detectionRules": {
669
+ "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
670
+ "optionalMarkers": [
671
+ ".bazelrc",
672
+ ".bazelversion"
673
+ ],
674
+ "rootMarkers": [
675
+ "MODULE.bazel",
676
+ "WORKSPACE.bazel",
677
+ "WORKSPACE"
678
+ ]
679
+ },
680
+ "optOut": {
681
+ "configPath": "meta.executorHints.bazel.enabled",
682
+ "description": "Set meta.executorHints.bazel.enabled = false in repo config to disable Bazel hints"
683
+ },
684
+ "targetConventions": {
685
+ "build": "bazel build //...",
686
+ "coverage": "bazel coverage //...",
687
+ "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
688
+ "format": "bazel run //tools/format:check",
689
+ "lint": "//tools/lint:lint or bazel test //... with lint aspects",
690
+ "test": "bazel test //..."
691
+ }
692
+ },
693
+ "description": "Advisory execution substrate hints. Bazel is the first supported executor; future monorepo executors may follow the same pattern."
694
+ },
699
695
  "migrationGuide": [
700
696
  {
701
697
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -755,5 +751,5 @@
755
751
  },
756
752
  "stack": "python",
757
753
  "stackLabel": "Python",
758
- "version": 2
754
+ "version": 3
759
755
  }
@@ -39,7 +39,7 @@
39
39
  "commands": [
40
40
  "bazel build //... --aspects=@rules_rust//rust:defs.bzl%clippy_aspect --output_groups=clippy_checks"
41
41
  ],
42
- "notes": "rules_rust includes clippy_aspect for Bazel-native Clippy linting on all Rust targets."
42
+ "notes": "Example only; actual targets are repo-defined. rules_rust includes clippy_aspect for Bazel-native Clippy linting."
43
43
  },
44
44
  "exampleConfigFiles": [
45
45
  "clippy.toml",
@@ -302,6 +302,9 @@
302
302
  "id": "dependency-security",
303
303
  "label": "Dependency Management & Vulnerability Scanning",
304
304
  "stack": {
305
+ "anyOfFiles": [
306
+ "Cargo.lock"
307
+ ],
305
308
  "exampleConfigFiles": [
306
309
  "Cargo.lock",
307
310
  "deny.toml"
@@ -314,9 +317,7 @@
314
317
  "optionalFiles": [
315
318
  "deny.toml"
316
319
  ],
317
- "requiredFiles": [
318
- "Cargo.lock"
319
- ],
320
+ "pinningNotes": "Required for binaries/services; optional for libraries (add to .gitignore for libs). See https://doc.rust-lang.org/cargo/faq.html#why-have-cargolock-in-version-control",
320
321
  "verification": "Cargo.lock is present; run 'cargo audit' or 'cargo deny check' to verify security scanning."
321
322
  }
322
323
  },
@@ -561,48 +562,52 @@
561
562
  "azure-devops"
562
563
  ],
563
564
  "meta": {
564
- "bazelIntegration": {
565
- "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
566
- "ciContract": {
567
- "configFlag": "--config=ci (define in .bazelrc)",
568
- "deterministicFlags": [
569
- "--nokeep_going",
570
- "--test_output=errors"
571
- ],
572
- "remoteCache": "Optional; not required for CI",
573
- "versionPinning": "Use .bazelversion file for Bazelisk"
574
- },
575
- "description": "Bazel build executor support for quality checks. All hints are ADVISORY—stack-native commands remain the default execution path.",
576
- "detectionRules": {
577
- "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
578
- "optionalMarkers": [
579
- ".bazelrc",
580
- ".bazelversion"
581
- ],
582
- "rootMarkers": [
583
- "MODULE.bazel",
584
- "WORKSPACE.bazel",
585
- "WORKSPACE"
586
- ]
587
- },
588
- "optOut": {
589
- "configPath": "meta.bazelIntegration.enabled",
590
- "description": "Set meta.bazelIntegration.enabled = false in repo config to disable Bazel hints"
591
- },
592
- "targetConventions": {
593
- "build": "bazel build //...",
594
- "coverage": "bazel coverage //...",
595
- "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
596
- "format": "bazel run //tools/format:check",
597
- "lint": "//tools/lint:lint or bazel test //... with lint aspects",
598
- "test": "bazel test //..."
599
- }
600
- },
601
565
  "complexityChecks": {
602
566
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
603
567
  "enabledByDefault": true
604
568
  },
569
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
570
+ "coverageThresholdUnit": "ratio",
605
571
  "defaultCoverageThreshold": 0.8,
572
+ "executorHints": {
573
+ "bazel": {
574
+ "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
575
+ "ciContract": {
576
+ "configFlag": "--config=ci (define in .bazelrc)",
577
+ "deterministicFlags": [
578
+ "--nokeep_going",
579
+ "--test_output=errors"
580
+ ],
581
+ "remoteCache": "Optional; not required for CI",
582
+ "versionPinning": "Use .bazelversion file for Bazelisk"
583
+ },
584
+ "detectionRules": {
585
+ "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
586
+ "optionalMarkers": [
587
+ ".bazelrc",
588
+ ".bazelversion"
589
+ ],
590
+ "rootMarkers": [
591
+ "MODULE.bazel",
592
+ "WORKSPACE.bazel",
593
+ "WORKSPACE"
594
+ ]
595
+ },
596
+ "optOut": {
597
+ "configPath": "meta.executorHints.bazel.enabled",
598
+ "description": "Set meta.executorHints.bazel.enabled = false in repo config to disable Bazel hints"
599
+ },
600
+ "targetConventions": {
601
+ "build": "bazel build //...",
602
+ "coverage": "bazel coverage //...",
603
+ "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
604
+ "format": "bazel run //tools/format:check",
605
+ "lint": "//tools/lint:lint or bazel test //... with lint aspects",
606
+ "test": "bazel test //..."
607
+ }
608
+ },
609
+ "description": "Advisory execution substrate hints. Bazel is the first supported executor; future monorepo executors may follow the same pattern."
610
+ },
606
611
  "migrationGuide": [
607
612
  {
608
613
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -662,5 +667,5 @@
662
667
  },
663
668
  "stack": "rust",
664
669
  "stackLabel": "Rust",
665
- "version": 2
670
+ "version": 3
666
671
  }