@oddessentials/repo-standards 2.0.1 → 3.0.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
@@ -6,7 +6,7 @@
6
6
 
7
7
  **@oddessentials/repo-standards**
8
8
 
9
- This package defines a **single, authoritative JSON specification** for repository quality standards across multiple stacks (TypeScript/JS, C#/.NET, Python), plus deterministic tooling to generate **stack- and CI-specific views**.
9
+ This package defines a **single, authoritative JSON specification** for repository quality standards across multiple stacks (TypeScript/JS, C#/.NET, Python, Rust, and Go), plus deterministic tooling to generate **stack- and CI-specific views**.
10
10
 
11
11
  It is designed to be:
12
12
 
@@ -101,7 +101,7 @@ Each checklist item includes:
101
101
  The `version` field indicates schema compatibility:
102
102
 
103
103
  - `1` — Original schema
104
- - `2` — Adds `bazelHints`, `meta.bazelIntegration` for Bazel support, `anyOfFiles`, `pinningNotes`
104
+ - `2` — Adds `bazelHints`, `meta.executorHints.bazel` for Bazel support, `anyOfFiles`, `pinningNotes`, enforcement/severity levels, ratio-based coverage thresholds, Rust/Go stacks. Enforces strict validation with `additionalProperties: false`.
105
105
 
106
106
  Consumers should ignore unknown fields for forward compatibility.
107
107
 
@@ -217,7 +217,7 @@ build:ci --test_output=errors
217
217
  To disable Bazel hints for a repo that contains Bazel files but uses npm for quality checks:
218
218
 
219
219
  ```json
220
- { "meta": { "bazelIntegration": { "enabled": false } } }
220
+ { "meta": { "executorHints": { "bazel": { "enabled": false } } } }
221
221
  ```
222
222
 
223
223
  ---
@@ -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.",
@@ -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.",
@@ -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.",
@@ -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.",
@@ -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.",
@@ -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.",