@oddessentials/repo-standards 2.0.1 → 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
  ---
@@ -561,48 +561,52 @@
561
561
  "azure-devops"
562
562
  ],
563
563
  "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
564
  "complexityChecks": {
602
565
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
603
566
  "enabledByDefault": true
604
567
  },
568
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
569
+ "coverageThresholdUnit": "ratio",
605
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
+ },
606
610
  "migrationGuide": [
607
611
  {
608
612
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -662,5 +666,5 @@
662
666
  },
663
667
  "stack": "csharp-dotnet",
664
668
  "stackLabel": "C# / .NET",
665
- "version": 2
669
+ "version": 3
666
670
  }
@@ -561,48 +561,52 @@
561
561
  "github-actions"
562
562
  ],
563
563
  "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
564
  "complexityChecks": {
602
565
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
603
566
  "enabledByDefault": true
604
567
  },
568
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
569
+ "coverageThresholdUnit": "ratio",
605
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
+ },
606
610
  "migrationGuide": [
607
611
  {
608
612
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -662,5 +666,5 @@
662
666
  },
663
667
  "stack": "csharp-dotnet",
664
668
  "stackLabel": "C# / .NET",
665
- "version": 2
669
+ "version": 3
666
670
  }
@@ -630,48 +630,52 @@
630
630
  "github-actions"
631
631
  ],
632
632
  "meta": {
633
- "bazelIntegration": {
634
- "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
635
- "ciContract": {
636
- "configFlag": "--config=ci (define in .bazelrc)",
637
- "deterministicFlags": [
638
- "--nokeep_going",
639
- "--test_output=errors"
640
- ],
641
- "remoteCache": "Optional; not required for CI",
642
- "versionPinning": "Use .bazelversion file for Bazelisk"
643
- },
644
- "description": "Bazel build executor support for quality checks. All hints are ADVISORY—stack-native commands remain the default execution path.",
645
- "detectionRules": {
646
- "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
647
- "optionalMarkers": [
648
- ".bazelrc",
649
- ".bazelversion"
650
- ],
651
- "rootMarkers": [
652
- "MODULE.bazel",
653
- "WORKSPACE.bazel",
654
- "WORKSPACE"
655
- ]
656
- },
657
- "optOut": {
658
- "configPath": "meta.bazelIntegration.enabled",
659
- "description": "Set meta.bazelIntegration.enabled = false in repo config to disable Bazel hints"
660
- },
661
- "targetConventions": {
662
- "build": "bazel build //...",
663
- "coverage": "bazel coverage //...",
664
- "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
665
- "format": "bazel run //tools/format:check",
666
- "lint": "//tools/lint:lint or bazel test //... with lint aspects",
667
- "test": "bazel test //..."
668
- }
669
- },
670
633
  "complexityChecks": {
671
634
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
672
635
  "enabledByDefault": true
673
636
  },
637
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
638
+ "coverageThresholdUnit": "ratio",
674
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
+ },
675
679
  "migrationGuide": [
676
680
  {
677
681
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -731,5 +735,5 @@
731
735
  },
732
736
  "stack": "csharp-dotnet",
733
737
  "stackLabel": "C# / .NET",
734
- "version": 2
738
+ "version": 3
735
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
  }
@@ -621,48 +621,52 @@
621
621
  "github-actions"
622
622
  ],
623
623
  "meta": {
624
- "bazelIntegration": {
625
- "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
626
- "ciContract": {
627
- "configFlag": "--config=ci (define in .bazelrc)",
628
- "deterministicFlags": [
629
- "--nokeep_going",
630
- "--test_output=errors"
631
- ],
632
- "remoteCache": "Optional; not required for CI",
633
- "versionPinning": "Use .bazelversion file for Bazelisk"
634
- },
635
- "description": "Bazel build executor support for quality checks. All hints are ADVISORY—stack-native commands remain the default execution path.",
636
- "detectionRules": {
637
- "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
638
- "optionalMarkers": [
639
- ".bazelrc",
640
- ".bazelversion"
641
- ],
642
- "rootMarkers": [
643
- "MODULE.bazel",
644
- "WORKSPACE.bazel",
645
- "WORKSPACE"
646
- ]
647
- },
648
- "optOut": {
649
- "configPath": "meta.bazelIntegration.enabled",
650
- "description": "Set meta.bazelIntegration.enabled = false in repo config to disable Bazel hints"
651
- },
652
- "targetConventions": {
653
- "build": "bazel build //...",
654
- "coverage": "bazel coverage //...",
655
- "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
656
- "format": "bazel run //tools/format:check",
657
- "lint": "//tools/lint:lint or bazel test //... with lint aspects",
658
- "test": "bazel test //..."
659
- }
660
- },
661
624
  "complexityChecks": {
662
625
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
663
626
  "enabledByDefault": true
664
627
  },
628
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
629
+ "coverageThresholdUnit": "ratio",
665
630
  "defaultCoverageThreshold": 0.8,
631
+ "executorHints": {
632
+ "bazel": {
633
+ "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
634
+ "ciContract": {
635
+ "configFlag": "--config=ci (define in .bazelrc)",
636
+ "deterministicFlags": [
637
+ "--nokeep_going",
638
+ "--test_output=errors"
639
+ ],
640
+ "remoteCache": "Optional; not required for CI",
641
+ "versionPinning": "Use .bazelversion file for Bazelisk"
642
+ },
643
+ "detectionRules": {
644
+ "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
645
+ "optionalMarkers": [
646
+ ".bazelrc",
647
+ ".bazelversion"
648
+ ],
649
+ "rootMarkers": [
650
+ "MODULE.bazel",
651
+ "WORKSPACE.bazel",
652
+ "WORKSPACE"
653
+ ]
654
+ },
655
+ "optOut": {
656
+ "configPath": "meta.executorHints.bazel.enabled",
657
+ "description": "Set meta.executorHints.bazel.enabled = false in repo config to disable Bazel hints"
658
+ },
659
+ "targetConventions": {
660
+ "build": "bazel build //...",
661
+ "coverage": "bazel coverage //...",
662
+ "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
663
+ "format": "bazel run //tools/format:check",
664
+ "lint": "//tools/lint:lint or bazel test //... with lint aspects",
665
+ "test": "bazel test //..."
666
+ }
667
+ },
668
+ "description": "Advisory execution substrate hints. Bazel is the first supported executor; future monorepo executors may follow the same pattern."
669
+ },
666
670
  "migrationGuide": [
667
671
  {
668
672
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -722,5 +726,5 @@
722
726
  },
723
727
  "stack": "go",
724
728
  "stackLabel": "Go",
725
- "version": 2
729
+ "version": 3
726
730
  }