@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.
package/README.md CHANGED
@@ -68,7 +68,7 @@ The master spec includes a `meta` block that defines system-wide expectations:
68
68
 
69
69
  ## Structure of `config/standards.json`
70
70
 
71
- - `version` — schema version (currently `2`)
71
+ - `version` — schema version (currently `3`)
72
72
  - `meta` — global rules and migration policy
73
73
  - `ciSystems` — supported CI platforms
74
74
  _(currently `github-actions`, `azure-devops`)_
@@ -102,6 +102,7 @@ The `version` field indicates schema compatibility:
102
102
 
103
103
  - `1` — Original schema
104
104
  - `2` — Adds `bazelHints`, `meta.bazelIntegration` for Bazel support, `anyOfFiles`, `pinningNotes`
105
+ - `3` — Enforces strict validation with `additionalProperties: false`. Adds enforcement/severity levels, ratio-based coverage thresholds, Rust/Go stacks, and refactors `bazelIntegration` → `executorHints.bazel`
105
106
 
106
107
  Consumers should ignore unknown fields for forward compatibility.
107
108
 
@@ -217,7 +218,7 @@ build:ci --test_output=errors
217
218
  To disable Bazel hints for a repo that contains Bazel files but uses npm for quality checks:
218
219
 
219
220
  ```json
220
- { "meta": { "bazelIntegration": { "enabled": false } } }
221
+ { "meta": { "executorHints": { "bazel": { "enabled": false } } } }
221
222
  ```
222
223
 
223
224
  ---
@@ -39,7 +39,7 @@
39
39
  "commands": [
40
40
  "bazel build //... --aspects=@rules_dotnet//dotnet:analyzers.bzl%analyzer_aspect"
41
41
  ],
42
- "notes": "Use rules_dotnet analyzer aspects for Roslyn-based linting in Bazel."
42
+ "notes": "Example only; actual targets are repo-defined. Use rules_dotnet analyzer aspects for Roslyn-based linting."
43
43
  },
44
44
  "exampleConfigFiles": [
45
45
  ".editorconfig",
@@ -56,9 +56,6 @@
56
56
  "requiredFiles": [
57
57
  ".editorconfig"
58
58
  ],
59
- "requiredScripts": [
60
- "lint"
61
- ],
62
59
  "verification": ".editorconfig must exist to drive the .NET formatting and analysis tooling."
63
60
  }
64
61
  },
@@ -275,7 +272,7 @@
275
272
  "commands": [
276
273
  "bazel build //..."
277
274
  ],
278
- "notes": "C# type errors surface during bazel build with rules_dotnet. No separate typecheck step needed."
275
+ "notes": "Example only; actual targets are repo-defined. C# type errors surface during bazel build with rules_dotnet."
279
276
  },
280
277
  "exampleConfigFiles": [
281
278
  ".editorconfig",
@@ -292,9 +289,6 @@
292
289
  "requiredFiles": [
293
290
  ".editorconfig"
294
291
  ],
295
- "requiredScripts": [
296
- "typecheck"
297
- ],
298
292
  "verification": ".editorconfig must exist; Directory.Build.props is optional for shared build configuration."
299
293
  }
300
294
  },
@@ -567,48 +561,52 @@
567
561
  "azure-devops"
568
562
  ],
569
563
  "meta": {
570
- "bazelIntegration": {
571
- "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
572
- "ciContract": {
573
- "configFlag": "--config=ci (define in .bazelrc)",
574
- "deterministicFlags": [
575
- "--nokeep_going",
576
- "--test_output=errors"
577
- ],
578
- "remoteCache": "Optional; not required for CI",
579
- "versionPinning": "Use .bazelversion file for Bazelisk"
580
- },
581
- "description": "Bazel build executor support for quality checks. All hints are ADVISORY—stack-native commands remain the default execution path.",
582
- "detectionRules": {
583
- "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
584
- "optionalMarkers": [
585
- ".bazelrc",
586
- ".bazelversion"
587
- ],
588
- "rootMarkers": [
589
- "MODULE.bazel",
590
- "WORKSPACE.bazel",
591
- "WORKSPACE"
592
- ]
593
- },
594
- "optOut": {
595
- "configPath": "meta.bazelIntegration.enabled",
596
- "description": "Set meta.bazelIntegration.enabled = false in repo config to disable Bazel hints"
597
- },
598
- "targetConventions": {
599
- "build": "bazel build //...",
600
- "coverage": "bazel coverage //...",
601
- "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
602
- "format": "bazel run //tools/format:check",
603
- "lint": "//tools/lint:lint or bazel test //... with lint aspects",
604
- "test": "bazel test //..."
605
- }
606
- },
607
564
  "complexityChecks": {
608
565
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
609
566
  "enabledByDefault": true
610
567
  },
568
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
569
+ "coverageThresholdUnit": "ratio",
611
570
  "defaultCoverageThreshold": 0.8,
571
+ "executorHints": {
572
+ "bazel": {
573
+ "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
574
+ "ciContract": {
575
+ "configFlag": "--config=ci (define in .bazelrc)",
576
+ "deterministicFlags": [
577
+ "--nokeep_going",
578
+ "--test_output=errors"
579
+ ],
580
+ "remoteCache": "Optional; not required for CI",
581
+ "versionPinning": "Use .bazelversion file for Bazelisk"
582
+ },
583
+ "detectionRules": {
584
+ "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
585
+ "optionalMarkers": [
586
+ ".bazelrc",
587
+ ".bazelversion"
588
+ ],
589
+ "rootMarkers": [
590
+ "MODULE.bazel",
591
+ "WORKSPACE.bazel",
592
+ "WORKSPACE"
593
+ ]
594
+ },
595
+ "optOut": {
596
+ "configPath": "meta.executorHints.bazel.enabled",
597
+ "description": "Set meta.executorHints.bazel.enabled = false in repo config to disable Bazel hints"
598
+ },
599
+ "targetConventions": {
600
+ "build": "bazel build //...",
601
+ "coverage": "bazel coverage //...",
602
+ "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
603
+ "format": "bazel run //tools/format:check",
604
+ "lint": "//tools/lint:lint or bazel test //... with lint aspects",
605
+ "test": "bazel test //..."
606
+ }
607
+ },
608
+ "description": "Advisory execution substrate hints. Bazel is the first supported executor; future monorepo executors may follow the same pattern."
609
+ },
612
610
  "migrationGuide": [
613
611
  {
614
612
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -668,5 +666,5 @@
668
666
  },
669
667
  "stack": "csharp-dotnet",
670
668
  "stackLabel": "C# / .NET",
671
- "version": 2
669
+ "version": 3
672
670
  }
@@ -39,7 +39,7 @@
39
39
  "commands": [
40
40
  "bazel build //... --aspects=@rules_dotnet//dotnet:analyzers.bzl%analyzer_aspect"
41
41
  ],
42
- "notes": "Use rules_dotnet analyzer aspects for Roslyn-based linting in Bazel."
42
+ "notes": "Example only; actual targets are repo-defined. Use rules_dotnet analyzer aspects for Roslyn-based linting."
43
43
  },
44
44
  "exampleConfigFiles": [
45
45
  ".editorconfig",
@@ -56,9 +56,6 @@
56
56
  "requiredFiles": [
57
57
  ".editorconfig"
58
58
  ],
59
- "requiredScripts": [
60
- "lint"
61
- ],
62
59
  "verification": ".editorconfig must exist to drive the .NET formatting and analysis tooling."
63
60
  }
64
61
  },
@@ -275,7 +272,7 @@
275
272
  "commands": [
276
273
  "bazel build //..."
277
274
  ],
278
- "notes": "C# type errors surface during bazel build with rules_dotnet. No separate typecheck step needed."
275
+ "notes": "Example only; actual targets are repo-defined. C# type errors surface during bazel build with rules_dotnet."
279
276
  },
280
277
  "exampleConfigFiles": [
281
278
  ".editorconfig",
@@ -292,9 +289,6 @@
292
289
  "requiredFiles": [
293
290
  ".editorconfig"
294
291
  ],
295
- "requiredScripts": [
296
- "typecheck"
297
- ],
298
292
  "verification": ".editorconfig must exist; Directory.Build.props is optional for shared build configuration."
299
293
  }
300
294
  },
@@ -567,48 +561,52 @@
567
561
  "github-actions"
568
562
  ],
569
563
  "meta": {
570
- "bazelIntegration": {
571
- "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
572
- "ciContract": {
573
- "configFlag": "--config=ci (define in .bazelrc)",
574
- "deterministicFlags": [
575
- "--nokeep_going",
576
- "--test_output=errors"
577
- ],
578
- "remoteCache": "Optional; not required for CI",
579
- "versionPinning": "Use .bazelversion file for Bazelisk"
580
- },
581
- "description": "Bazel build executor support for quality checks. All hints are ADVISORY—stack-native commands remain the default execution path.",
582
- "detectionRules": {
583
- "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
584
- "optionalMarkers": [
585
- ".bazelrc",
586
- ".bazelversion"
587
- ],
588
- "rootMarkers": [
589
- "MODULE.bazel",
590
- "WORKSPACE.bazel",
591
- "WORKSPACE"
592
- ]
593
- },
594
- "optOut": {
595
- "configPath": "meta.bazelIntegration.enabled",
596
- "description": "Set meta.bazelIntegration.enabled = false in repo config to disable Bazel hints"
597
- },
598
- "targetConventions": {
599
- "build": "bazel build //...",
600
- "coverage": "bazel coverage //...",
601
- "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
602
- "format": "bazel run //tools/format:check",
603
- "lint": "//tools/lint:lint or bazel test //... with lint aspects",
604
- "test": "bazel test //..."
605
- }
606
- },
607
564
  "complexityChecks": {
608
565
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
609
566
  "enabledByDefault": true
610
567
  },
568
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
569
+ "coverageThresholdUnit": "ratio",
611
570
  "defaultCoverageThreshold": 0.8,
571
+ "executorHints": {
572
+ "bazel": {
573
+ "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
574
+ "ciContract": {
575
+ "configFlag": "--config=ci (define in .bazelrc)",
576
+ "deterministicFlags": [
577
+ "--nokeep_going",
578
+ "--test_output=errors"
579
+ ],
580
+ "remoteCache": "Optional; not required for CI",
581
+ "versionPinning": "Use .bazelversion file for Bazelisk"
582
+ },
583
+ "detectionRules": {
584
+ "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
585
+ "optionalMarkers": [
586
+ ".bazelrc",
587
+ ".bazelversion"
588
+ ],
589
+ "rootMarkers": [
590
+ "MODULE.bazel",
591
+ "WORKSPACE.bazel",
592
+ "WORKSPACE"
593
+ ]
594
+ },
595
+ "optOut": {
596
+ "configPath": "meta.executorHints.bazel.enabled",
597
+ "description": "Set meta.executorHints.bazel.enabled = false in repo config to disable Bazel hints"
598
+ },
599
+ "targetConventions": {
600
+ "build": "bazel build //...",
601
+ "coverage": "bazel coverage //...",
602
+ "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
603
+ "format": "bazel run //tools/format:check",
604
+ "lint": "//tools/lint:lint or bazel test //... with lint aspects",
605
+ "test": "bazel test //..."
606
+ }
607
+ },
608
+ "description": "Advisory execution substrate hints. Bazel is the first supported executor; future monorepo executors may follow the same pattern."
609
+ },
612
610
  "migrationGuide": [
613
611
  {
614
612
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -668,5 +666,5 @@
668
666
  },
669
667
  "stack": "csharp-dotnet",
670
668
  "stackLabel": "C# / .NET",
671
- "version": 2
669
+ "version": 3
672
670
  }
@@ -45,7 +45,7 @@
45
45
  "commands": [
46
46
  "bazel build //... --aspects=@rules_dotnet//dotnet:analyzers.bzl%analyzer_aspect"
47
47
  ],
48
- "notes": "Use rules_dotnet analyzer aspects for Roslyn-based linting in Bazel."
48
+ "notes": "Example only; actual targets are repo-defined. Use rules_dotnet analyzer aspects for Roslyn-based linting."
49
49
  },
50
50
  "exampleConfigFiles": [
51
51
  ".editorconfig",
@@ -62,9 +62,6 @@
62
62
  "requiredFiles": [
63
63
  ".editorconfig"
64
64
  ],
65
- "requiredScripts": [
66
- "lint"
67
- ],
68
65
  "verification": ".editorconfig must exist to drive the .NET formatting and analysis tooling."
69
66
  }
70
67
  },
@@ -308,7 +305,7 @@
308
305
  "commands": [
309
306
  "bazel build //..."
310
307
  ],
311
- "notes": "C# type errors surface during bazel build with rules_dotnet. No separate typecheck step needed."
308
+ "notes": "Example only; actual targets are repo-defined. C# type errors surface during bazel build with rules_dotnet."
312
309
  },
313
310
  "exampleConfigFiles": [
314
311
  ".editorconfig",
@@ -325,9 +322,6 @@
325
322
  "requiredFiles": [
326
323
  ".editorconfig"
327
324
  ],
328
- "requiredScripts": [
329
- "typecheck"
330
- ],
331
325
  "verification": ".editorconfig must exist; Directory.Build.props is optional for shared build configuration."
332
326
  }
333
327
  },
@@ -636,48 +630,52 @@
636
630
  "github-actions"
637
631
  ],
638
632
  "meta": {
639
- "bazelIntegration": {
640
- "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
641
- "ciContract": {
642
- "configFlag": "--config=ci (define in .bazelrc)",
643
- "deterministicFlags": [
644
- "--nokeep_going",
645
- "--test_output=errors"
646
- ],
647
- "remoteCache": "Optional; not required for CI",
648
- "versionPinning": "Use .bazelversion file for Bazelisk"
649
- },
650
- "description": "Bazel build executor support for quality checks. All hints are ADVISORY—stack-native commands remain the default execution path.",
651
- "detectionRules": {
652
- "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
653
- "optionalMarkers": [
654
- ".bazelrc",
655
- ".bazelversion"
656
- ],
657
- "rootMarkers": [
658
- "MODULE.bazel",
659
- "WORKSPACE.bazel",
660
- "WORKSPACE"
661
- ]
662
- },
663
- "optOut": {
664
- "configPath": "meta.bazelIntegration.enabled",
665
- "description": "Set meta.bazelIntegration.enabled = false in repo config to disable Bazel hints"
666
- },
667
- "targetConventions": {
668
- "build": "bazel build //...",
669
- "coverage": "bazel coverage //...",
670
- "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
671
- "format": "bazel run //tools/format:check",
672
- "lint": "//tools/lint:lint or bazel test //... with lint aspects",
673
- "test": "bazel test //..."
674
- }
675
- },
676
633
  "complexityChecks": {
677
634
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
678
635
  "enabledByDefault": true
679
636
  },
637
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
638
+ "coverageThresholdUnit": "ratio",
680
639
  "defaultCoverageThreshold": 0.8,
640
+ "executorHints": {
641
+ "bazel": {
642
+ "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
643
+ "ciContract": {
644
+ "configFlag": "--config=ci (define in .bazelrc)",
645
+ "deterministicFlags": [
646
+ "--nokeep_going",
647
+ "--test_output=errors"
648
+ ],
649
+ "remoteCache": "Optional; not required for CI",
650
+ "versionPinning": "Use .bazelversion file for Bazelisk"
651
+ },
652
+ "detectionRules": {
653
+ "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
654
+ "optionalMarkers": [
655
+ ".bazelrc",
656
+ ".bazelversion"
657
+ ],
658
+ "rootMarkers": [
659
+ "MODULE.bazel",
660
+ "WORKSPACE.bazel",
661
+ "WORKSPACE"
662
+ ]
663
+ },
664
+ "optOut": {
665
+ "configPath": "meta.executorHints.bazel.enabled",
666
+ "description": "Set meta.executorHints.bazel.enabled = false in repo config to disable Bazel hints"
667
+ },
668
+ "targetConventions": {
669
+ "build": "bazel build //...",
670
+ "coverage": "bazel coverage //...",
671
+ "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
672
+ "format": "bazel run //tools/format:check",
673
+ "lint": "//tools/lint:lint or bazel test //... with lint aspects",
674
+ "test": "bazel test //..."
675
+ }
676
+ },
677
+ "description": "Advisory execution substrate hints. Bazel is the first supported executor; future monorepo executors may follow the same pattern."
678
+ },
681
679
  "migrationGuide": [
682
680
  {
683
681
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -737,5 +735,5 @@
737
735
  },
738
736
  "stack": "csharp-dotnet",
739
737
  "stackLabel": "C# / .NET",
740
- "version": 2
738
+ "version": 3
741
739
  }
@@ -552,48 +552,52 @@
552
552
  "azure-devops"
553
553
  ],
554
554
  "meta": {
555
- "bazelIntegration": {
556
- "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
557
- "ciContract": {
558
- "configFlag": "--config=ci (define in .bazelrc)",
559
- "deterministicFlags": [
560
- "--nokeep_going",
561
- "--test_output=errors"
562
- ],
563
- "remoteCache": "Optional; not required for CI",
564
- "versionPinning": "Use .bazelversion file for Bazelisk"
565
- },
566
- "description": "Bazel build executor support for quality checks. All hints are ADVISORY—stack-native commands remain the default execution path.",
567
- "detectionRules": {
568
- "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
569
- "optionalMarkers": [
570
- ".bazelrc",
571
- ".bazelversion"
572
- ],
573
- "rootMarkers": [
574
- "MODULE.bazel",
575
- "WORKSPACE.bazel",
576
- "WORKSPACE"
577
- ]
578
- },
579
- "optOut": {
580
- "configPath": "meta.bazelIntegration.enabled",
581
- "description": "Set meta.bazelIntegration.enabled = false in repo config to disable Bazel hints"
582
- },
583
- "targetConventions": {
584
- "build": "bazel build //...",
585
- "coverage": "bazel coverage //...",
586
- "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
587
- "format": "bazel run //tools/format:check",
588
- "lint": "//tools/lint:lint or bazel test //... with lint aspects",
589
- "test": "bazel test //..."
590
- }
591
- },
592
555
  "complexityChecks": {
593
556
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
594
557
  "enabledByDefault": true
595
558
  },
559
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
560
+ "coverageThresholdUnit": "ratio",
596
561
  "defaultCoverageThreshold": 0.8,
562
+ "executorHints": {
563
+ "bazel": {
564
+ "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
565
+ "ciContract": {
566
+ "configFlag": "--config=ci (define in .bazelrc)",
567
+ "deterministicFlags": [
568
+ "--nokeep_going",
569
+ "--test_output=errors"
570
+ ],
571
+ "remoteCache": "Optional; not required for CI",
572
+ "versionPinning": "Use .bazelversion file for Bazelisk"
573
+ },
574
+ "detectionRules": {
575
+ "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
576
+ "optionalMarkers": [
577
+ ".bazelrc",
578
+ ".bazelversion"
579
+ ],
580
+ "rootMarkers": [
581
+ "MODULE.bazel",
582
+ "WORKSPACE.bazel",
583
+ "WORKSPACE"
584
+ ]
585
+ },
586
+ "optOut": {
587
+ "configPath": "meta.executorHints.bazel.enabled",
588
+ "description": "Set meta.executorHints.bazel.enabled = false in repo config to disable Bazel hints"
589
+ },
590
+ "targetConventions": {
591
+ "build": "bazel build //...",
592
+ "coverage": "bazel coverage //...",
593
+ "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
594
+ "format": "bazel run //tools/format:check",
595
+ "lint": "//tools/lint:lint or bazel test //... with lint aspects",
596
+ "test": "bazel test //..."
597
+ }
598
+ },
599
+ "description": "Advisory execution substrate hints. Bazel is the first supported executor; future monorepo executors may follow the same pattern."
600
+ },
597
601
  "migrationGuide": [
598
602
  {
599
603
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -653,5 +657,5 @@
653
657
  },
654
658
  "stack": "go",
655
659
  "stackLabel": "Go",
656
- "version": 2
660
+ "version": 3
657
661
  }
@@ -552,48 +552,52 @@
552
552
  "github-actions"
553
553
  ],
554
554
  "meta": {
555
- "bazelIntegration": {
556
- "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
557
- "ciContract": {
558
- "configFlag": "--config=ci (define in .bazelrc)",
559
- "deterministicFlags": [
560
- "--nokeep_going",
561
- "--test_output=errors"
562
- ],
563
- "remoteCache": "Optional; not required for CI",
564
- "versionPinning": "Use .bazelversion file for Bazelisk"
565
- },
566
- "description": "Bazel build executor support for quality checks. All hints are ADVISORY—stack-native commands remain the default execution path.",
567
- "detectionRules": {
568
- "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
569
- "optionalMarkers": [
570
- ".bazelrc",
571
- ".bazelversion"
572
- ],
573
- "rootMarkers": [
574
- "MODULE.bazel",
575
- "WORKSPACE.bazel",
576
- "WORKSPACE"
577
- ]
578
- },
579
- "optOut": {
580
- "configPath": "meta.bazelIntegration.enabled",
581
- "description": "Set meta.bazelIntegration.enabled = false in repo config to disable Bazel hints"
582
- },
583
- "targetConventions": {
584
- "build": "bazel build //...",
585
- "coverage": "bazel coverage //...",
586
- "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
587
- "format": "bazel run //tools/format:check",
588
- "lint": "//tools/lint:lint or bazel test //... with lint aspects",
589
- "test": "bazel test //..."
590
- }
591
- },
592
555
  "complexityChecks": {
593
556
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
594
557
  "enabledByDefault": true
595
558
  },
559
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
560
+ "coverageThresholdUnit": "ratio",
596
561
  "defaultCoverageThreshold": 0.8,
562
+ "executorHints": {
563
+ "bazel": {
564
+ "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
565
+ "ciContract": {
566
+ "configFlag": "--config=ci (define in .bazelrc)",
567
+ "deterministicFlags": [
568
+ "--nokeep_going",
569
+ "--test_output=errors"
570
+ ],
571
+ "remoteCache": "Optional; not required for CI",
572
+ "versionPinning": "Use .bazelversion file for Bazelisk"
573
+ },
574
+ "detectionRules": {
575
+ "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
576
+ "optionalMarkers": [
577
+ ".bazelrc",
578
+ ".bazelversion"
579
+ ],
580
+ "rootMarkers": [
581
+ "MODULE.bazel",
582
+ "WORKSPACE.bazel",
583
+ "WORKSPACE"
584
+ ]
585
+ },
586
+ "optOut": {
587
+ "configPath": "meta.executorHints.bazel.enabled",
588
+ "description": "Set meta.executorHints.bazel.enabled = false in repo config to disable Bazel hints"
589
+ },
590
+ "targetConventions": {
591
+ "build": "bazel build //...",
592
+ "coverage": "bazel coverage //...",
593
+ "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
594
+ "format": "bazel run //tools/format:check",
595
+ "lint": "//tools/lint:lint or bazel test //... with lint aspects",
596
+ "test": "bazel test //..."
597
+ }
598
+ },
599
+ "description": "Advisory execution substrate hints. Bazel is the first supported executor; future monorepo executors may follow the same pattern."
600
+ },
597
601
  "migrationGuide": [
598
602
  {
599
603
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -653,5 +657,5 @@
653
657
  },
654
658
  "stack": "go",
655
659
  "stackLabel": "Go",
656
- "version": 2
660
+ "version": 3
657
661
  }