@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.
@@ -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
  }
@@ -20,8 +20,10 @@
20
20
  }
21
21
  },
22
22
  "description": "Maintain proper .gitignore and .dockerignore files to prevent committing secrets, build artifacts, or unnecessary files.",
23
+ "enforcement": "required",
23
24
  "id": "gitignore-and-dockerignore",
24
25
  "label": "Git and Docker Ignore Files",
26
+ "severity": "error",
25
27
  "stackHints": {
26
28
  "csharp-dotnet": {
27
29
  "exampleConfigFiles": [
@@ -114,15 +116,17 @@
114
116
  }
115
117
  },
116
118
  "description": "Run static code linting to enforce consistency and catch common issues early.",
119
+ "enforcement": "required",
117
120
  "id": "linting",
118
121
  "label": "Linting",
122
+ "severity": "error",
119
123
  "stackHints": {
120
124
  "csharp-dotnet": {
121
125
  "bazelHints": {
122
126
  "commands": [
123
127
  "bazel build //... --aspects=@rules_dotnet//dotnet:analyzers.bzl%analyzer_aspect"
124
128
  ],
125
- "notes": "Use rules_dotnet analyzer aspects for Roslyn-based linting in Bazel."
129
+ "notes": "Example only; actual targets are repo-defined. Use rules_dotnet analyzer aspects for Roslyn-based linting."
126
130
  },
127
131
  "exampleConfigFiles": [
128
132
  ".editorconfig",
@@ -139,9 +143,6 @@
139
143
  "requiredFiles": [
140
144
  ".editorconfig"
141
145
  ],
142
- "requiredScripts": [
143
- "lint"
144
- ],
145
146
  "verification": ".editorconfig must exist to drive the .NET formatting and analysis tooling."
146
147
  },
147
148
  "go": {
@@ -170,40 +171,38 @@
170
171
  "verification": ".golangci.yml or .golangci.yaml indicates linting is configured. Run 'golangci-lint run' to verify."
171
172
  },
172
173
  "python": {
174
+ "anyOfFiles": [
175
+ "pyproject.toml",
176
+ "ruff.toml",
177
+ ".flake8",
178
+ "setup.cfg",
179
+ "tox.ini"
180
+ ],
173
181
  "bazelHints": {
174
182
  "commands": [
175
183
  "bazel test //...:ruff_test",
176
184
  "bazel run //tools/lint:ruff -- check ."
177
185
  ],
178
- "notes": "Use rules_python with ruff wrapped as py_test or a custom run target."
186
+ "notes": "Example only; actual targets are repo-defined. Use rules_python with ruff wrapped as py_test or run target."
179
187
  },
180
188
  "exampleConfigFiles": [
181
189
  "pyproject.toml",
182
- ".flake8"
190
+ ".flake8",
191
+ "ruff.toml"
183
192
  ],
184
193
  "exampleTools": [
185
194
  "ruff",
186
195
  "flake8"
187
196
  ],
188
197
  "notes": "Configure a primary linter (such as ruff) and keep rules focused on catching real issues without overwhelming developers.",
189
- "optionalFiles": [
190
- "ruff.toml",
191
- ".flake8"
192
- ],
193
- "requiredFiles": [
194
- "pyproject.toml"
195
- ],
196
- "requiredScripts": [
197
- "lint"
198
- ],
199
- "verification": "pyproject.toml (or ruff.toml / .flake8) signals that linting tools are configured for the repository."
198
+ "verification": "pyproject.toml (or ruff.toml / .flake8 / setup.cfg) signals that linting tools are configured for the repository."
200
199
  },
201
200
  "rust": {
202
201
  "bazelHints": {
203
202
  "commands": [
204
203
  "bazel build //... --aspects=@rules_rust//rust:defs.bzl%clippy_aspect --output_groups=clippy_checks"
205
204
  ],
206
- "notes": "rules_rust includes clippy_aspect for Bazel-native Clippy linting on all Rust targets."
205
+ "notes": "Example only; actual targets are repo-defined. rules_rust includes clippy_aspect for Bazel-native Clippy linting."
207
206
  },
208
207
  "exampleConfigFiles": [
209
208
  "clippy.toml",
@@ -224,36 +223,40 @@
224
223
  "verification": "Clippy is available via rustup component. Run 'cargo clippy' to verify linting is configured."
225
224
  },
226
225
  "typescript-js": {
226
+ "anyOfFiles": [
227
+ "eslint.config.js",
228
+ "eslint.config.mjs",
229
+ "eslint.config.cjs",
230
+ ".eslintrc.js",
231
+ ".eslintrc.cjs",
232
+ ".eslintrc.json",
233
+ ".eslintrc.yaml",
234
+ ".eslintrc.yml"
235
+ ],
227
236
  "bazelHints": {
228
237
  "commands": [
229
238
  "bazel test //... --aspects=//tools:lint.bzl%eslint_aspect --output_groups=report"
230
239
  ],
231
- "notes": "Wrap eslint via aspect_rules_lint or a custom sh_test rule. Aspect-based linting runs on all source files.",
240
+ "notes": "Example only; actual targets are repo-defined. Wrap eslint via aspect_rules_lint or a custom sh_test rule.",
232
241
  "recommendedTargets": [
233
242
  "//tools/lint:lint"
234
243
  ]
235
244
  },
236
245
  "exampleConfigFiles": [
237
- ".eslintrc.*"
246
+ ".eslintrc.*",
247
+ "eslint.config.js"
238
248
  ],
239
249
  "exampleTools": [
240
250
  "eslint"
241
251
  ],
242
252
  "notes": "Treat new lint errors as CI failures; keep existing issues as warnings until addressed.",
243
253
  "optionalFiles": [
244
- ".eslintrc.js",
245
- ".eslintrc.cjs",
246
- ".eslintrc.json",
247
- ".eslintrc.yaml",
248
254
  ".prettierrc",
249
255
  "prettier.config.js",
250
256
  "prettier.config.cjs",
251
257
  "prettier.config.json",
252
258
  "prettier.config.yaml"
253
259
  ],
254
- "requiredFiles": [
255
- "eslint.config.js"
256
- ],
257
260
  "requiredScripts": [
258
261
  "lint"
259
262
  ],
@@ -280,8 +283,10 @@
280
283
  }
281
284
  },
282
285
  "description": "Provide a deterministic unit test framework with a single command to run all tests.",
286
+ "enforcement": "required",
283
287
  "id": "unit-test-runner",
284
288
  "label": "Unit Test Runner",
289
+ "severity": "error",
285
290
  "stackHints": {
286
291
  "csharp-dotnet": {
287
292
  "bazelHints": {
@@ -329,7 +334,7 @@
329
334
  "commands": [
330
335
  "bazel test //..."
331
336
  ],
332
- "notes": "Use rules_python py_test for pytest-based tests. Tests are hermetically isolated."
337
+ "notes": "Example only; actual targets are repo-defined. Use rules_python py_test for pytest-based tests."
333
338
  },
334
339
  "exampleConfigFiles": [
335
340
  "pytest.ini",
@@ -344,9 +349,6 @@
344
349
  "pyproject.toml",
345
350
  "tests/"
346
351
  ],
347
- "requiredScripts": [
348
- "test"
349
- ],
350
352
  "verification": "Test framework configuration is present; tests/ directory or pytest configuration exists."
351
353
  },
352
354
  "rust": {
@@ -417,8 +419,10 @@
417
419
  }
418
420
  },
419
421
  "description": "Provide a Dockerfile and, if applicable, a docker-compose file for local dev and CI parity.",
422
+ "enforcement": "required",
420
423
  "id": "containerization",
421
424
  "label": "Containerization (Docker / Docker Compose)",
425
+ "severity": "error",
422
426
  "stackHints": {
423
427
  "csharp-dotnet": {
424
428
  "exampleConfigFiles": [
@@ -516,8 +520,10 @@
516
520
  }
517
521
  },
518
522
  "description": "Use MAJOR.MINOR.PATCH versioning with clear rules and automated changelog generation based on commit history.",
523
+ "enforcement": "required",
519
524
  "id": "semantic-versioning",
520
525
  "label": "Semantic Versioning",
526
+ "severity": "error",
521
527
  "stackHints": {
522
528
  "csharp-dotnet": {
523
529
  "exampleConfigFiles": [
@@ -603,8 +609,10 @@
603
609
  }
604
610
  },
605
611
  "description": "Enforce structured commit messages such as Conventional Commits.",
612
+ "enforcement": "required",
606
613
  "id": "commit-linting",
607
614
  "label": "Commit Linting",
615
+ "severity": "error",
608
616
  "stackHints": {
609
617
  "csharp-dotnet": {
610
618
  "exampleConfigFiles": [
@@ -685,8 +693,10 @@
685
693
  }
686
694
  },
687
695
  "description": "Generate readable unit test and coverage reports and enforce a minimum coverage threshold (around 80%) for new or changed code.",
696
+ "enforcement": "required",
688
697
  "id": "unit-test-reporter",
689
698
  "label": "Unit Test Reporter / Coverage",
699
+ "severity": "error",
690
700
  "stackHints": {
691
701
  "csharp-dotnet": {
692
702
  "bazelHints": {
@@ -797,8 +807,10 @@
797
807
  }
798
808
  },
799
809
  "description": "Single CI pipeline that runs linting, formatting, type checking, tests, coverage, build, and containerization.",
810
+ "enforcement": "required",
800
811
  "id": "ci-quality-gates",
801
812
  "label": "CI Quality Gates",
813
+ "severity": "error",
802
814
  "stackHints": {
803
815
  "csharp-dotnet": {
804
816
  "bazelHints": {
@@ -901,8 +913,10 @@
901
913
  }
902
914
  },
903
915
  "description": "Automatic code formatting to maintain a consistent style across all contributors.",
916
+ "enforcement": "required",
904
917
  "id": "code-formatter",
905
918
  "label": "Code Formatter",
919
+ "severity": "error",
906
920
  "stackHints": {
907
921
  "csharp-dotnet": {
908
922
  "bazelHints": {
@@ -1007,8 +1021,10 @@
1007
1021
  }
1008
1022
  },
1009
1023
  "description": "Use git hooks to run linting, formatting, tests, and commit linting before changes are committed.",
1024
+ "enforcement": "required",
1010
1025
  "id": "pre-commit-hooks",
1011
1026
  "label": "Pre-Commit Hooks",
1027
+ "severity": "error",
1012
1028
  "stackHints": {
1013
1029
  "csharp-dotnet": {
1014
1030
  "exampleConfigFiles": [
@@ -1086,15 +1102,17 @@
1086
1102
  }
1087
1103
  },
1088
1104
  "description": "Use static type checking to catch errors before runtime and enforce strictness on new code.",
1105
+ "enforcement": "required",
1089
1106
  "id": "type-checking",
1090
1107
  "label": "Type Checking",
1108
+ "severity": "error",
1091
1109
  "stackHints": {
1092
1110
  "csharp-dotnet": {
1093
1111
  "bazelHints": {
1094
1112
  "commands": [
1095
1113
  "bazel build //..."
1096
1114
  ],
1097
- "notes": "C# type errors surface during bazel build with rules_dotnet. No separate typecheck step needed."
1115
+ "notes": "Example only; actual targets are repo-defined. C# type errors surface during bazel build with rules_dotnet."
1098
1116
  },
1099
1117
  "exampleConfigFiles": [
1100
1118
  ".editorconfig",
@@ -1111,9 +1129,6 @@
1111
1129
  "requiredFiles": [
1112
1130
  ".editorconfig"
1113
1131
  ],
1114
- "requiredScripts": [
1115
- "typecheck"
1116
- ],
1117
1132
  "verification": ".editorconfig must exist; Directory.Build.props is optional for shared build configuration."
1118
1133
  },
1119
1134
  "go": {
@@ -1142,7 +1157,7 @@
1142
1157
  "bazel test //...:mypy_test",
1143
1158
  "bazel run //tools/typecheck:mypy"
1144
1159
  ],
1145
- "notes": "Wrap mypy as a py_test or run target for Bazel-based type checking."
1160
+ "notes": "Example only; actual targets are repo-defined. Wrap mypy as a py_test or run target."
1146
1161
  },
1147
1162
  "exampleConfigFiles": [
1148
1163
  "mypy.ini",
@@ -1158,9 +1173,6 @@
1158
1173
  "requiredFiles": [
1159
1174
  "pyproject.toml"
1160
1175
  ],
1161
- "requiredScripts": [
1162
- "typecheck"
1163
- ],
1164
1176
  "verification": "pyproject.toml (or mypy.ini) signals that mypy configuration is available for the repository."
1165
1177
  },
1166
1178
  "rust": {
@@ -1225,8 +1237,10 @@
1225
1237
  }
1226
1238
  },
1227
1239
  "description": "Lock dependencies and scan regularly for known vulnerabilities; fail CI on newly introduced high-severity issues.",
1240
+ "enforcement": "required",
1228
1241
  "id": "dependency-security",
1229
1242
  "label": "Dependency Management & Vulnerability Scanning",
1243
+ "severity": "error",
1230
1244
  "stackHints": {
1231
1245
  "csharp-dotnet": {
1232
1246
  "exampleConfigFiles": [
@@ -1275,6 +1289,9 @@
1275
1289
  "verification": "Dependency lockfile is present; security scanning is configured in CI or project tooling."
1276
1290
  },
1277
1291
  "rust": {
1292
+ "anyOfFiles": [
1293
+ "Cargo.lock"
1294
+ ],
1278
1295
  "exampleConfigFiles": [
1279
1296
  "Cargo.lock",
1280
1297
  "deny.toml"
@@ -1287,9 +1304,7 @@
1287
1304
  "optionalFiles": [
1288
1305
  "deny.toml"
1289
1306
  ],
1290
- "requiredFiles": [
1291
- "Cargo.lock"
1292
- ],
1307
+ "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",
1293
1308
  "verification": "Cargo.lock is present; run 'cargo audit' or 'cargo deny check' to verify security scanning."
1294
1309
  },
1295
1310
  "typescript-js": {
@@ -1331,8 +1346,10 @@
1331
1346
  }
1332
1347
  },
1333
1348
  "description": "Specify required runtime/engine versions in package manifests to ensure environment stability and prevent version-related issues across development teams.",
1349
+ "enforcement": "required",
1334
1350
  "id": "runtime-version",
1335
1351
  "label": "Runtime Version Specification",
1352
+ "severity": "error",
1336
1353
  "stackHints": {
1337
1354
  "csharp-dotnet": {
1338
1355
  "exampleConfigFiles": [
@@ -1422,8 +1439,10 @@
1422
1439
  }
1423
1440
  },
1424
1441
  "description": "Maintain a comprehensive README and, where applicable, auto-generated API docs to support onboarding and maintainability.",
1442
+ "enforcement": "required",
1425
1443
  "id": "documentation",
1426
1444
  "label": "Documentation Standards",
1445
+ "severity": "error",
1427
1446
  "stackHints": {
1428
1447
  "csharp-dotnet": {
1429
1448
  "exampleConfigFiles": [
@@ -1539,8 +1558,10 @@
1539
1558
  }
1540
1559
  },
1541
1560
  "description": "Include standard governance files (LICENSE, CODE_OF_CONDUCT.md, CONTRIBUTING.md), branch protection rules, and review standards to define legal, ethical, and workflow expectations.",
1561
+ "enforcement": "required",
1542
1562
  "id": "repository-governance",
1543
1563
  "label": "Repository Governance",
1564
+ "severity": "error",
1544
1565
  "stackHints": {
1545
1566
  "csharp-dotnet": {
1546
1567
  "exampleConfigFiles": [
@@ -1650,8 +1671,10 @@
1650
1671
  }
1651
1672
  },
1652
1673
  "description": "Standardize error handling and structured logging to make debugging and production monitoring easier.",
1674
+ "enforcement": "optional",
1653
1675
  "id": "observability",
1654
1676
  "label": "Observability (Logging & Error Handling)",
1677
+ "severity": "info",
1655
1678
  "stackHints": {
1656
1679
  "csharp-dotnet": {
1657
1680
  "exampleConfigFiles": [
@@ -1729,8 +1752,10 @@
1729
1752
  }
1730
1753
  },
1731
1754
  "description": "Automate dependency updates using Renovate or Dependabot to keep dependencies current and reduce security exposure window.",
1755
+ "enforcement": "recommended",
1732
1756
  "id": "dependency-update-automation",
1733
1757
  "label": "Dependency Update Automation",
1758
+ "severity": "warn",
1734
1759
  "stackHints": {
1735
1760
  "csharp-dotnet": {
1736
1761
  "anyOfFiles": [
@@ -1845,8 +1870,10 @@
1845
1870
  }
1846
1871
  },
1847
1872
  "description": "Enforce module boundaries and import constraints to prevent architectural drift and unwanted coupling.",
1873
+ "enforcement": "recommended",
1848
1874
  "id": "dependency-architecture-rules",
1849
1875
  "label": "Dependency Architecture Rules",
1876
+ "severity": "warn",
1850
1877
  "stackHints": {
1851
1878
  "csharp-dotnet": {
1852
1879
  "exampleConfigFiles": [
@@ -1941,8 +1968,10 @@
1941
1968
  }
1942
1969
  },
1943
1970
  "description": "Test how components interact with each other and external systems, running after unit tests with more relaxed coverage thresholds.",
1971
+ "enforcement": "recommended",
1944
1972
  "id": "integration-testing",
1945
1973
  "label": "Integration Testing",
1974
+ "severity": "warn",
1946
1975
  "stackHints": {
1947
1976
  "csharp-dotnet": {
1948
1977
  "exampleConfigFiles": [
@@ -2020,8 +2049,10 @@
2020
2049
  }
2021
2050
  },
2022
2051
  "description": "Establish performance baselines and monitor for regressions using lightweight benchmarks or audits in CI.",
2052
+ "enforcement": "recommended",
2023
2053
  "id": "performance-baselining",
2024
2054
  "label": "Performance Baselines",
2055
+ "severity": "warn",
2025
2056
  "stackHints": {
2026
2057
  "csharp-dotnet": {
2027
2058
  "exampleConfigFiles": [
@@ -2099,8 +2130,10 @@
2099
2130
  }
2100
2131
  },
2101
2132
  "description": "Measure cyclomatic complexity or similar metrics to keep code maintainable, starting as a warning-only check.",
2133
+ "enforcement": "recommended",
2102
2134
  "id": "complexity-analysis",
2103
2135
  "label": "Complexity Analysis",
2136
+ "severity": "warn",
2104
2137
  "stackHints": {
2105
2138
  "csharp-dotnet": {
2106
2139
  "exampleConfigFiles": [
@@ -2178,8 +2211,10 @@
2178
2211
  }
2179
2212
  },
2180
2213
  "description": "Run accessibility checks on web-facing components to detect critical issues and improve inclusive UX.",
2214
+ "enforcement": "recommended",
2181
2215
  "id": "accessibility-auditing",
2182
2216
  "label": "Accessibility Auditing",
2217
+ "severity": "warn",
2183
2218
  "stackHints": {
2184
2219
  "csharp-dotnet": {
2185
2220
  "exampleConfigFiles": [],
@@ -2234,48 +2269,52 @@
2234
2269
  "github-actions"
2235
2270
  ],
2236
2271
  "meta": {
2237
- "bazelIntegration": {
2238
- "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
2239
- "ciContract": {
2240
- "configFlag": "--config=ci (define in .bazelrc)",
2241
- "deterministicFlags": [
2242
- "--nokeep_going",
2243
- "--test_output=errors"
2244
- ],
2245
- "remoteCache": "Optional; not required for CI",
2246
- "versionPinning": "Use .bazelversion file for Bazelisk"
2247
- },
2248
- "description": "Bazel build executor support for quality checks. All hints are ADVISORY—stack-native commands remain the default execution path.",
2249
- "detectionRules": {
2250
- "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
2251
- "optionalMarkers": [
2252
- ".bazelrc",
2253
- ".bazelversion"
2254
- ],
2255
- "rootMarkers": [
2256
- "MODULE.bazel",
2257
- "WORKSPACE.bazel",
2258
- "WORKSPACE"
2259
- ]
2260
- },
2261
- "optOut": {
2262
- "configPath": "meta.bazelIntegration.enabled",
2263
- "description": "Set meta.bazelIntegration.enabled = false in repo config to disable Bazel hints"
2264
- },
2265
- "targetConventions": {
2266
- "build": "bazel build //...",
2267
- "coverage": "bazel coverage //...",
2268
- "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
2269
- "format": "bazel run //tools/format:check",
2270
- "lint": "//tools/lint:lint or bazel test //... with lint aspects",
2271
- "test": "bazel test //..."
2272
- }
2273
- },
2274
2272
  "complexityChecks": {
2275
2273
  "description": "When supported by the stack, run cyclomatic complexity or similar metrics in CI as a warning-only check initially.",
2276
2274
  "enabledByDefault": true
2277
2275
  },
2276
+ "coverageThresholdDescription": "Expressed as a ratio (0-1), e.g., 0.8 = 80% coverage. Must be between 0 and 1.",
2277
+ "coverageThresholdUnit": "ratio",
2278
2278
  "defaultCoverageThreshold": 0.8,
2279
+ "executorHints": {
2280
+ "bazel": {
2281
+ "advisoryNotice": "bazelHints are suggestions, not required execution paths. Consumers should prefer stack-native commands unless explicitly adopting Bazel.",
2282
+ "ciContract": {
2283
+ "configFlag": "--config=ci (define in .bazelrc)",
2284
+ "deterministicFlags": [
2285
+ "--nokeep_going",
2286
+ "--test_output=errors"
2287
+ ],
2288
+ "remoteCache": "Optional; not required for CI",
2289
+ "versionPinning": "Use .bazelversion file for Bazelisk"
2290
+ },
2291
+ "detectionRules": {
2292
+ "notes": "Detection uses repo-root markers only. Nested BUILD files do not trigger Bazel mode.",
2293
+ "optionalMarkers": [
2294
+ ".bazelrc",
2295
+ ".bazelversion"
2296
+ ],
2297
+ "rootMarkers": [
2298
+ "MODULE.bazel",
2299
+ "WORKSPACE.bazel",
2300
+ "WORKSPACE"
2301
+ ]
2302
+ },
2303
+ "optOut": {
2304
+ "configPath": "meta.executorHints.bazel.enabled",
2305
+ "description": "Set meta.executorHints.bazel.enabled = false in repo config to disable Bazel hints"
2306
+ },
2307
+ "targetConventions": {
2308
+ "build": "bazel build //...",
2309
+ "coverage": "bazel coverage //...",
2310
+ "description": "Recommended target naming (not assumed to exist). These are illustrative patterns; actual targets are repo-defined.",
2311
+ "format": "bazel run //tools/format:check",
2312
+ "lint": "//tools/lint:lint or bazel test //... with lint aspects",
2313
+ "test": "bazel test //..."
2314
+ }
2315
+ },
2316
+ "description": "Advisory execution substrate hints. Bazel is the first supported executor; future monorepo executors may follow the same pattern."
2317
+ },
2279
2318
  "migrationGuide": [
2280
2319
  {
2281
2320
  "description": "Start by adding pre-commit hooks and core formatting/linting so developers get fast feedback without touching CI.",
@@ -2355,5 +2394,5 @@
2355
2394
  "languageFamily": "js"
2356
2395
  }
2357
2396
  },
2358
- "version": 2
2397
+ "version": 3
2359
2398
  }