@oddessentials/repo-standards 1.0.1 → 1.2.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
71
+ - `version` — schema version (currently `2`)
72
72
  - `meta` — global rules and migration policy
73
73
  - `ciSystems` — supported CI platforms
74
74
  _(currently `github-actions`, `azure-devops`)_
@@ -76,6 +76,8 @@ The master spec includes a `meta` block that defines system-wide expectations:
76
76
  - `typescript-js`
77
77
  - `csharp-dotnet`
78
78
  - `python`
79
+ - `rust`
80
+ - `go`
79
81
 
80
82
  - `checklist`
81
83
  - `core` — must-have requirements
@@ -91,6 +93,54 @@ Each checklist item includes:
91
93
  - example tools
92
94
  - example config files
93
95
  - notes and trade-offs (including ML variants for Python)
96
+ - `anyOfFiles` — either-or file compliance hints (v2+)
97
+ - `pinningNotes` — version pinning guidance (v2+)
98
+
99
+ ### Schema Version
100
+
101
+ The `version` field indicates schema compatibility:
102
+
103
+ - `1` — Original schema
104
+ - `2` — Adds `anyOfFiles` and `pinningNotes` fields (additive, non-breaking)
105
+
106
+ Consumers should ignore unknown fields for forward compatibility.
107
+
108
+ ---
109
+
110
+ ## Dependency Governance (Recommended Items)
111
+
112
+ Two recommended checklist items support supply-chain governance:
113
+
114
+ | Item | Scope | Primary Tools |
115
+ | ------------------------------- | ----------------- | ---------------------------------------- |
116
+ | `dependency-update-automation` | Automated PR bots | Renovate (cross-CI), Dependabot (GitHub) |
117
+ | `dependency-architecture-rules` | Import boundaries | Varies by stack |
118
+
119
+ > **Note**: `dependency-security` (core) covers vulnerability scanning and lockfiles.
120
+ > These recommended items are complementary, not overlapping.
121
+
122
+ ### Renovate vs Dependabot
123
+
124
+ | Factor | Renovate | Dependabot |
125
+ | ------------------ | ------------------- | ----------- |
126
+ | CI Support | GHA + AzDO + GitLab | GitHub only |
127
+ | Config Flexibility | High | Medium |
128
+ | Grouping | Advanced | Basic |
129
+ | Automerge | Configurable | Limited |
130
+
131
+ **Recommendation**: Use Renovate for cross-CI portability.
132
+
133
+ ### Azure DevOps Renovate Setup
134
+
135
+ For Azure DevOps, Renovate requires one of:
136
+
137
+ 1. **Mend Renovate Hosted Service** — Install from Azure Marketplace
138
+ 2. **Self-Hosted Runner** — Scheduled pipeline with `renovate/renovate` Docker image
139
+ 3. **Container Job** — Run Renovate in a container step
140
+
141
+ Required secrets:
142
+
143
+ - `AZURE_DEVOPS_TOKEN` (PAT with Code Read/Write, PR Contribute)
94
144
 
95
145
  ---
96
146
 
@@ -153,7 +203,7 @@ Typical usage:
153
203
  - Load a **stack-specific view** as:
154
204
  - a CI contract
155
205
  - an onboarding checklist
156
- - input to autonomous agents (e.g. Odd Hive Mind)
206
+ - input to autonomous agents
157
207
 
158
208
  This package is intentionally **read-only** and **side-effect free**.
159
209
 
@@ -387,6 +387,61 @@
387
387
  }
388
388
  ],
389
389
  "recommended": [
390
+ {
391
+ "ciHints": {
392
+ "azure-devops": {
393
+ "notes": "CI hints are suggested mappings; adjust to your pipeline topology.",
394
+ "stage": "quality"
395
+ }
396
+ },
397
+ "description": "Automate dependency updates using Renovate or Dependabot to keep dependencies current and reduce security exposure window.",
398
+ "id": "dependency-update-automation",
399
+ "label": "Dependency Update Automation",
400
+ "stack": {
401
+ "anyOfFiles": [
402
+ "renovate.json",
403
+ ".renovaterc.json",
404
+ ".github/dependabot.yml"
405
+ ],
406
+ "exampleConfigFiles": [
407
+ "renovate.json",
408
+ ".github/dependabot.yml"
409
+ ],
410
+ "exampleTools": [
411
+ "renovate",
412
+ "dependabot"
413
+ ],
414
+ "notes": "Both support NuGet packages. Renovate has better Central Package Management (Directory.Packages.props) support. For AzDO: use self-hosted Renovate runner.",
415
+ "pinningNotes": "Pin Renovate version in pipeline definition.",
416
+ "verification": "Check for renovate.json OR .github/dependabot.yml. Verify NuGet update PRs."
417
+ }
418
+ },
419
+ {
420
+ "ciHints": {
421
+ "azure-devops": {
422
+ "notes": "CI hints are suggested mappings; adjust to your pipeline topology.",
423
+ "stage": "quality"
424
+ }
425
+ },
426
+ "description": "Enforce module boundaries and import constraints to prevent architectural drift and unwanted coupling.",
427
+ "id": "dependency-architecture-rules",
428
+ "label": "Dependency Architecture Rules",
429
+ "stack": {
430
+ "exampleConfigFiles": [
431
+ "NsDepCop.config.nsdepcop",
432
+ "ArchitectureTests.cs"
433
+ ],
434
+ "exampleTools": [
435
+ "NsDepCop",
436
+ "ArchUnitNET"
437
+ ],
438
+ "notes": "NsDepCop enforces namespace dependency rules via config file. ArchUnitNET uses test code for architectural assertions.",
439
+ "optionalFiles": [
440
+ "NsDepCop.config.nsdepcop"
441
+ ],
442
+ "verification": "Build fails on namespace violations, or architecture tests run as part of test suite."
443
+ }
444
+ },
390
445
  {
391
446
  "ciHints": {
392
447
  "azure-devops": {
@@ -510,7 +565,8 @@
510
565
  "type-checking",
511
566
  "unit-test-runner",
512
567
  "unit-test-reporter",
513
- "dependency-security"
568
+ "dependency-security",
569
+ "dependency-update-automation"
514
570
  ],
515
571
  "notes": "Pin tool and runtime versions in CI and containers to avoid flaky differences across environments.",
516
572
  "step": 3,
@@ -538,5 +594,5 @@
538
594
  },
539
595
  "stack": "csharp-dotnet",
540
596
  "stackLabel": "C# / .NET",
541
- "version": 1
597
+ "version": 2
542
598
  }
@@ -387,6 +387,61 @@
387
387
  }
388
388
  ],
389
389
  "recommended": [
390
+ {
391
+ "ciHints": {
392
+ "github-actions": {
393
+ "job": "ci",
394
+ "notes": "CI hints are suggested mappings; adjust to your workflow structure."
395
+ }
396
+ },
397
+ "description": "Automate dependency updates using Renovate or Dependabot to keep dependencies current and reduce security exposure window.",
398
+ "id": "dependency-update-automation",
399
+ "label": "Dependency Update Automation",
400
+ "stack": {
401
+ "anyOfFiles": [
402
+ "renovate.json",
403
+ ".renovaterc.json",
404
+ ".github/dependabot.yml"
405
+ ],
406
+ "exampleConfigFiles": [
407
+ "renovate.json",
408
+ ".github/dependabot.yml"
409
+ ],
410
+ "exampleTools": [
411
+ "renovate",
412
+ "dependabot"
413
+ ],
414
+ "notes": "Both support NuGet packages. Renovate has better Central Package Management (Directory.Packages.props) support. For AzDO: use self-hosted Renovate runner.",
415
+ "pinningNotes": "Pin Renovate version in pipeline definition.",
416
+ "verification": "Check for renovate.json OR .github/dependabot.yml. Verify NuGet update PRs."
417
+ }
418
+ },
419
+ {
420
+ "ciHints": {
421
+ "github-actions": {
422
+ "job": "ci",
423
+ "notes": "CI hints are suggested mappings; adjust to your workflow structure."
424
+ }
425
+ },
426
+ "description": "Enforce module boundaries and import constraints to prevent architectural drift and unwanted coupling.",
427
+ "id": "dependency-architecture-rules",
428
+ "label": "Dependency Architecture Rules",
429
+ "stack": {
430
+ "exampleConfigFiles": [
431
+ "NsDepCop.config.nsdepcop",
432
+ "ArchitectureTests.cs"
433
+ ],
434
+ "exampleTools": [
435
+ "NsDepCop",
436
+ "ArchUnitNET"
437
+ ],
438
+ "notes": "NsDepCop enforces namespace dependency rules via config file. ArchUnitNET uses test code for architectural assertions.",
439
+ "optionalFiles": [
440
+ "NsDepCop.config.nsdepcop"
441
+ ],
442
+ "verification": "Build fails on namespace violations, or architecture tests run as part of test suite."
443
+ }
444
+ },
390
445
  {
391
446
  "ciHints": {
392
447
  "github-actions": {
@@ -510,7 +565,8 @@
510
565
  "type-checking",
511
566
  "unit-test-runner",
512
567
  "unit-test-reporter",
513
- "dependency-security"
568
+ "dependency-security",
569
+ "dependency-update-automation"
514
570
  ],
515
571
  "notes": "Pin tool and runtime versions in CI and containers to avoid flaky differences across environments.",
516
572
  "step": 3,
@@ -538,5 +594,5 @@
538
594
  },
539
595
  "stack": "csharp-dotnet",
540
596
  "stackLabel": "C# / .NET",
541
- "version": 1
597
+ "version": 2
542
598
  }
@@ -435,6 +435,69 @@
435
435
  }
436
436
  ],
437
437
  "recommended": [
438
+ {
439
+ "ciHints": {
440
+ "azure-devops": {
441
+ "notes": "CI hints are suggested mappings; adjust to your pipeline topology.",
442
+ "stage": "quality"
443
+ },
444
+ "github-actions": {
445
+ "job": "ci",
446
+ "notes": "CI hints are suggested mappings; adjust to your workflow structure."
447
+ }
448
+ },
449
+ "description": "Automate dependency updates using Renovate or Dependabot to keep dependencies current and reduce security exposure window.",
450
+ "id": "dependency-update-automation",
451
+ "label": "Dependency Update Automation",
452
+ "stack": {
453
+ "anyOfFiles": [
454
+ "renovate.json",
455
+ ".renovaterc.json",
456
+ ".github/dependabot.yml"
457
+ ],
458
+ "exampleConfigFiles": [
459
+ "renovate.json",
460
+ ".github/dependabot.yml"
461
+ ],
462
+ "exampleTools": [
463
+ "renovate",
464
+ "dependabot"
465
+ ],
466
+ "notes": "Both support NuGet packages. Renovate has better Central Package Management (Directory.Packages.props) support. For AzDO: use self-hosted Renovate runner.",
467
+ "pinningNotes": "Pin Renovate version in pipeline definition.",
468
+ "verification": "Check for renovate.json OR .github/dependabot.yml. Verify NuGet update PRs."
469
+ }
470
+ },
471
+ {
472
+ "ciHints": {
473
+ "azure-devops": {
474
+ "notes": "CI hints are suggested mappings; adjust to your pipeline topology.",
475
+ "stage": "quality"
476
+ },
477
+ "github-actions": {
478
+ "job": "ci",
479
+ "notes": "CI hints are suggested mappings; adjust to your workflow structure."
480
+ }
481
+ },
482
+ "description": "Enforce module boundaries and import constraints to prevent architectural drift and unwanted coupling.",
483
+ "id": "dependency-architecture-rules",
484
+ "label": "Dependency Architecture Rules",
485
+ "stack": {
486
+ "exampleConfigFiles": [
487
+ "NsDepCop.config.nsdepcop",
488
+ "ArchitectureTests.cs"
489
+ ],
490
+ "exampleTools": [
491
+ "NsDepCop",
492
+ "ArchUnitNET"
493
+ ],
494
+ "notes": "NsDepCop enforces namespace dependency rules via config file. ArchUnitNET uses test code for architectural assertions.",
495
+ "optionalFiles": [
496
+ "NsDepCop.config.nsdepcop"
497
+ ],
498
+ "verification": "Build fails on namespace violations, or architecture tests run as part of test suite."
499
+ }
500
+ },
438
501
  {
439
502
  "ciHints": {
440
503
  "azure-devops": {
@@ -571,7 +634,8 @@
571
634
  "type-checking",
572
635
  "unit-test-runner",
573
636
  "unit-test-reporter",
574
- "dependency-security"
637
+ "dependency-security",
638
+ "dependency-update-automation"
575
639
  ],
576
640
  "notes": "Pin tool and runtime versions in CI and containers to avoid flaky differences across environments.",
577
641
  "step": 3,
@@ -599,5 +663,5 @@
599
663
  },
600
664
  "stack": "csharp-dotnet",
601
665
  "stackLabel": "C# / .NET",
602
- "version": 1
666
+ "version": 2
603
667
  }