@danmoisan/drm-copilot-mcp 0.0.1 → 0.0.6
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/out/mcp-server.js +98 -21
- package/package.json +21 -5
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/MEMORY.md +15 -3
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_branch_base_check_unmerged_pr_deps.md +16 -0
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_every_change_through_lifecycle.md +15 -0
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_policy_compliance_not_optional.md +18 -0
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_potential_to_issue_creates_github_issue.md +13 -0
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_remediation_plan_em_dash_required.md +13 -0
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_small_bug_uses_minor_audit.md +13 -0
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_test_files_count_against_500_cap.md +13 -0
- package/resources/claude-customizations/.claude/agents/atomic-executor.md +7 -7
- package/resources/claude-customizations/.claude/agents/csharp-typed-engineer.md +4 -5
- package/resources/claude-customizations/.claude/agents/feature-review.md +7 -3
- package/resources/claude-customizations/.claude/agents/orchestrator.md +22 -3
- package/resources/claude-customizations/.claude/agents/powershell-typed-engineer.md +1 -1
- package/resources/claude-customizations/.claude/agents/pr-author.md +78 -0
- package/resources/claude-customizations/.claude/agents/task-researcher.md +10 -6
- package/resources/claude-customizations/.claude/hooks/enforce-checkpoint-monotonic.ps1 +303 -0
- package/resources/claude-customizations/.claude/hooks/enforce-completion-consistency.ps1 +300 -0
- package/resources/claude-customizations/.claude/hooks/enforce-evidence-locations.ps1 +40 -14
- package/resources/claude-customizations/.claude/hooks/enforce-feature-folder-order.ps1 +148 -0
- package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate.ps1 +210 -0
- package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.ps1 +333 -0
- package/resources/claude-customizations/.claude/hooks/enforce-prd-feature-before-planner.ps1 +216 -0
- package/resources/claude-customizations/.claude/hooks/enforce-promotion-mcp-only.ps1 +84 -15
- package/resources/claude-customizations/.claude/hooks/validate-executor-output.ps1 +1 -1
- package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage.ps1 +75 -5
- package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output.ps1 +93 -0
- package/resources/claude-customizations/.claude/hooks/validate-pr-author-output.ps1 +136 -0
- package/resources/claude-customizations/.claude/hooks/validate-task-researcher-output.ps1 +90 -6
- package/resources/claude-customizations/.claude/rules/architecture-boundaries.md +46 -0
- package/resources/claude-customizations/.claude/rules/benchmark-baselines.md +35 -0
- package/resources/claude-customizations/.claude/rules/ci-workflows.md +36 -0
- package/resources/claude-customizations/.claude/rules/csharp.md +62 -16
- package/resources/claude-customizations/.claude/rules/general-code-change.md +12 -3
- package/resources/claude-customizations/.claude/rules/general-unit-test.md +47 -2
- package/resources/claude-customizations/.claude/rules/orchestrator-state.md +39 -0
- package/resources/claude-customizations/.claude/rules/powershell.md +5 -5
- package/resources/claude-customizations/.claude/rules/python.md +4 -3
- package/resources/claude-customizations/.claude/rules/quality-tiers.md +51 -0
- package/resources/claude-customizations/.claude/rules/typescript.md +37 -8
- package/resources/claude-customizations/.claude/settings.json +59 -12
- package/resources/claude-customizations/.claude/skills/atomic-plan-contract/SKILL.md +2 -2
- package/resources/claude-customizations/.claude/skills/csharp-qa-gate/SKILL.md +25 -10
- package/resources/claude-customizations/.claude/skills/evidence-and-timestamp-conventions/SKILL.md +0 -1
- package/resources/claude-customizations/.claude/skills/execute-hard-lock/SKILL.md +6 -6
- package/resources/claude-customizations/.claude/skills/feature-promotion-lifecycle/SKILL.md +8 -8
- package/resources/claude-customizations/.claude/skills/feature-review-workflow/SKILL.md +17 -6
- package/resources/claude-customizations/.claude/skills/human-exception-runbook/SKILL.md +52 -0
- package/resources/claude-customizations/.claude/skills/human-exception-runbook/example.runbook.md +36 -0
- package/resources/claude-customizations/.claude/skills/invoke-csharp-engineer/SKILL.md +4 -4
- package/resources/claude-customizations/.claude/skills/orchestrate/SKILL.md +172 -5
- package/resources/claude-customizations/.claude/skills/policy-audit-template-usage/SKILL.md +3 -3
- package/resources/claude-customizations/.claude/skills/powershell-qa-gate/SKILL.md +4 -4
- package/resources/claude-customizations/.claude/skills/pr-base-branch-merge-base/SKILL.md +3 -3
- package/resources/claude-customizations/.claude/skills/python-qa-gate/SKILL.md +1 -1
- package/resources/claude-customizations/.claude/skills/remediation-handoff-atomic-planner/SKILL.md +90 -17
- package/resources/claude-customizations/.claude/skills/research-issue/SKILL.md +5 -3
- package/resources/claude-customizations/.claude-variants/csharp-legacy/agents/csharp-typed-engineer.md +69 -0
- package/resources/claude-customizations/.claude-variants/csharp-legacy/rules/csharp.md +96 -0
- package/resources/claude-customizations/.claude-variants/csharp-legacy/skills/csharp-qa-gate/SKILL.md +77 -0
- package/resources/claude-customizations/.claude-variants/csharp-legacy/skills/invoke-csharp-engineer/SKILL.md +64 -0
- package/resources/claude-customizations/pack-manifests/core.json +65 -0
- package/resources/claude-customizations/pack-manifests/csharp-legacy.json +11 -0
- package/resources/claude-customizations/pack-manifests/csharp-modern.json +12 -0
- package/resources/claude-customizations/pack-manifests/powershell.json +14 -0
- package/resources/claude-customizations/pack-manifests/python.json +14 -0
- package/resources/claude-customizations/pack-manifests/typescript.json +9 -0
- package/resources/claude-dir-customizations/.mcp.json +3 -3
- package/resources/codex-and-agents-customizations/.agents/README.md +1 -1
- package/resources/codex-and-agents-customizations/.agents/skills/acceptance-criteria-tracking/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/architecture-boundaries/SKILL.md +52 -0
- package/resources/codex-and-agents-customizations/.agents/skills/atomic-plan-contract/SKILL.md +16 -8
- package/resources/codex-and-agents-customizations/.agents/skills/benchmark-baselines/SKILL.md +44 -0
- package/resources/codex-and-agents-customizations/.agents/skills/ci-workflows/SKILL.md +45 -0
- package/resources/codex-and-agents-customizations/.agents/skills/commit-message/SKILL.md +3 -11
- package/resources/codex-and-agents-customizations/.agents/skills/csharp/SKILL.md +1 -5
- package/resources/codex-and-agents-customizations/.agents/skills/csharp-change-budget-router/SKILL.md +1 -6
- package/resources/codex-and-agents-customizations/.agents/skills/csharp-orchestration-state-machine/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/csharp-qa-gate/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/evidence-and-timestamp-conventions/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/execute-hard-lock/SKILL.md +8 -17
- package/resources/codex-and-agents-customizations/.agents/skills/feature-promotion-lifecycle/SKILL.md +41 -25
- package/resources/codex-and-agents-customizations/.agents/skills/feature-review-workflow/SKILL.md +1 -6
- package/resources/codex-and-agents-customizations/.agents/skills/fill-feature-docs/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/general-code-change/SKILL.md +86 -0
- package/resources/codex-and-agents-customizations/.agents/skills/general-unit-test/SKILL.md +111 -0
- package/resources/codex-and-agents-customizations/.agents/skills/human-exception-runbook/SKILL.md +57 -0
- package/resources/codex-and-agents-customizations/.agents/skills/human-exception-runbook/example.runbook.md +36 -0
- package/resources/codex-and-agents-customizations/.agents/skills/invoke-csharp-engineer/SKILL.md +0 -9
- package/resources/codex-and-agents-customizations/.agents/skills/invoke-powershell-engineer/SKILL.md +0 -9
- package/resources/codex-and-agents-customizations/.agents/skills/invoke-python-engineer/SKILL.md +0 -9
- package/resources/codex-and-agents-customizations/.agents/skills/make-skill-template/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/orchestrate/SKILL.md +206 -18
- package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-state/SKILL.md +48 -0
- package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-workflow/SKILL.md +94 -10
- package/resources/codex-and-agents-customizations/.agents/skills/policy-audit-template-usage/SKILL.md +3 -8
- package/resources/codex-and-agents-customizations/.agents/skills/policy-compliance-order/SKILL.md +0 -10
- package/resources/codex-and-agents-customizations/.agents/skills/powershell/SKILL.md +4 -8
- package/resources/codex-and-agents-customizations/.agents/skills/powershell-change-budget-router/SKILL.md +1 -6
- package/resources/codex-and-agents-customizations/.agents/skills/powershell-orchestration-state-machine/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/powershell-qa-gate/SKILL.md +3 -9
- package/resources/codex-and-agents-customizations/.agents/skills/pr-author/SKILL.md +1 -9
- package/resources/codex-and-agents-customizations/.agents/skills/pr-base-branch-merge-base/SKILL.md +4 -9
- package/resources/codex-and-agents-customizations/.agents/skills/pr-context-artifacts/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/python/SKILL.md +1 -5
- package/resources/codex-and-agents-customizations/.agents/skills/python-change-budget-router/SKILL.md +1 -6
- package/resources/codex-and-agents-customizations/.agents/skills/python-qa-gate/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/python-suppressions/SKILL.md +2 -6
- package/resources/codex-and-agents-customizations/.agents/skills/quality-tiers/SKILL.md +57 -0
- package/resources/codex-and-agents-customizations/.agents/skills/remediation-handoff-atomic-planner/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/repo-automation-adapter/SKILL.md +96 -72
- package/resources/codex-and-agents-customizations/.agents/skills/repo-automation-adapter/agents/openai.yaml +1 -1
- package/resources/codex-and-agents-customizations/.agents/skills/research-issue/SKILL.md +0 -10
- package/resources/codex-and-agents-customizations/.agents/skills/review-epic/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/review-feature/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/review-staged/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/self-explanatory-code-commenting/SKILL.md +2 -6
- package/resources/codex-and-agents-customizations/.agents/skills/skill-canonical-location-audit/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.agents/skills/tonality/SKILL.md +86 -0
- package/resources/codex-and-agents-customizations/.agents/skills/translate-claude-to-codex/SKILL.md +297 -0
- package/resources/codex-and-agents-customizations/.agents/skills/translate-copilot-to-claude/SKILL.md +0 -22
- package/resources/codex-and-agents-customizations/.agents/skills/typescript/SKILL.md +1 -5
- package/resources/codex-and-agents-customizations/.agents/skills/typescript-suppressions/SKILL.md +2 -6
- package/resources/codex-and-agents-customizations/.agents/skills/update-status/SKILL.md +0 -5
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor.toml +5 -5
- package/resources/codex-and-agents-customizations/.codex/agents/orchestrator.toml +91 -63
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-atomic-executor.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/config.toml +111 -137
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-checkpoint-monotonic.ps1 +303 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-completion-consistency.ps1 +300 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate.ps1 +148 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-pr-author-skill.ps1 +336 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-promotion-mcp-only.ps1 +84 -18
- package/resources/codex-and-agents-customizations/.codex/prompts/orchestrate-work.md +4 -3
- package/resources/codex-and-agents-customizations/.codex/scripts/post-codex-worktree-session.ps1 +5 -0
- package/resources/codex-and-agents-customizations/.github/workflows/_validate-orchestrator-state.yml +68 -0
- package/resources/codex-and-agents-customizations/.github/workflows/validate-orchestrator-state.yml +15 -0
- package/resources/config/orchestration-routing.json +76 -0
- package/resources/customizations/.github/agents/Powershell DI Unit Test Engineer.agent.md +1 -1
- package/resources/customizations/.github/agents/atomic_executor.agent.md +1 -1
- package/resources/customizations/.github/agents/atomic_planning.agent.md +10 -10
- package/resources/customizations/.github/agents/csharp-orchestrator.agent.md +6 -2
- package/resources/customizations/.github/agents/feature-review.agent.md +2 -2
- package/resources/customizations/.github/agents/orchestrator.agent.md +6 -2
- package/resources/customizations/.github/agents/powershell-atomic-executor.agent.md +4 -4
- package/resources/customizations/.github/agents/powershell-atomic-planning.agent.md +10 -10
- package/resources/customizations/.github/agents/powershell-orchestrator.agent.md +6 -2
- package/resources/customizations/.github/agents/powershell-typed-engineer.agent.md +2 -2
- package/resources/customizations/.github/agents/pr-author.agent.md +25 -0
- package/resources/customizations/.github/agents/python-orchestrator.agent.md +6 -2
- package/resources/customizations/.github/agents/staged-review.agent.md +1 -1
- package/resources/customizations/.github/agents/task-researcher.agent.md +4 -4
- package/resources/customizations/.github/instructions/powershell-code-change.instructions.md +6 -6
- package/resources/customizations/.github/prompts/fillout-prd-feature.prompt.md +1 -1
- package/resources/customizations/.github/prompts/generate-commit-message-repo.prompt.md +1 -1
- package/resources/customizations/.github/prompts/orchestrate-csharp-work.prompt.md +5 -3
- package/resources/customizations/.github/prompts/orchestrate-work.prompt.md +5 -3
- package/resources/customizations/.github/prompts/research-issue.prompt.md +4 -3
- package/resources/customizations/.github/skills/atomic-plan-contract/SKILL.md +14 -1
- package/resources/customizations/.github/skills/feature-promotion-lifecycle/SKILL.md +11 -7
- package/resources/customizations/.github/skills/feature-review-workflow/SKILL.md +10 -1
- package/resources/customizations/.github/skills/pr-base-branch-merge-base/SKILL.md +2 -2
- package/resources/customizations/.github/skills/remediation-handoff-atomic-planner/SKILL.md +5 -0
- package/resources/powershell/PoshQC/settings/pester.runsettings.psd1 +7 -0
- package/resources/scripts/dev_tools/_orchestrator_state_human_interaction.py +127 -0
- package/resources/scripts/dev_tools/_orchestrator_state_routing.py +216 -0
- package/resources/scripts/dev_tools/push_down_claude_customizations.py +276 -61
- package/resources/scripts/dev_tools/push_down_claude_filesystem.py +472 -0
- package/resources/scripts/dev_tools/push_down_claude_pack_selection.py +401 -0
- package/resources/scripts/dev_tools/validate_orchestration_artifacts.py +103 -411
- package/resources/scripts/dev_tools/validate_orchestration_review_artifacts.py +107 -0
- package/resources/scripts/dev_tools/validate_orchestrator_state.py +505 -0
- package/resources/scripts/dev_tools/validate_policy_audit_artifact.py +472 -0
- package/resources/templates/push_down_claude_customizations.py +162 -117
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_repo_root_is_source_of_truth.md +0 -11
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/feedback_vsce_verify_package_location.md +0 -19
- package/resources/claude-customizations/.claude/agent-memory/orchestrator/project_extension_location.md +0 -11
- package/resources/claude-customizations/.claude/agent-memory/prd-feature/MEMORY.md +0 -1
- package/resources/claude-customizations/.claude/agent-memory/prd-feature/project_push_down_pattern.md +0 -13
- package/resources/claude-customizations/.claude/agent-memory/task-researcher/MEMORY.md +0 -3
- package/resources/claude-customizations/.claude/agent-memory/task-researcher/project_push_down_claude_dir.md +0 -11
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.cs"
|
|
4
|
+
- "**/*.csproj"
|
|
5
|
+
description: C#-specific toolchain and coding standards.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# C# Code Standards
|
|
9
|
+
|
|
10
|
+
This rule file summarizes the C#-specific policies for this repository.
|
|
11
|
+
|
|
12
|
+
## Toolchain
|
|
13
|
+
|
|
14
|
+
1. **Formatting — CSharpier**: All C# source files must be formatted with CSharpier. Do not use `dotnet format`. Command: `dotnet tool run csharpier .` or `csharpier .`
|
|
15
|
+
2. **Linting — .NET Analyzers**: C# code must pass Roslyn/.NET analyzer diagnostics. Command: `msbuild <solution>.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`
|
|
16
|
+
3. **Type Checking — Nullable Analysis**: Enable nullable reference types and fail on warnings. Command: `msbuild <solution>.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:Nullable=enable /p:TreatWarningsAsErrors=true`
|
|
17
|
+
4. **Testing — MSTest + Moq + FluentAssertions**: Run tests with: `vstest.console.exe <test-assembly-paths> /EnableCodeCoverage`
|
|
18
|
+
|
|
19
|
+
Run the toolchain in order: format → lint → type-check → test. Restart from step 1 if any step fails or changes files.
|
|
20
|
+
|
|
21
|
+
## Coding Standards
|
|
22
|
+
|
|
23
|
+
- **Naming**: `PascalCase` for types and public members. `camelCase` for locals and private fields/parameters.
|
|
24
|
+
- **Null safety**: Keep nullable reference types enabled. Model optional values with nullable annotations and guard clauses.
|
|
25
|
+
- **Composition over inheritance**: Keep classes cohesive and scoped to one responsibility. Favor composition unless polymorphism is a clear requirement.
|
|
26
|
+
- **Async/await**: Use `async`/`await` for I/O-bound operations. Prefer `using`/`await using` for disposable resources.
|
|
27
|
+
- **Exceptions**: Fail fast with explicit exceptions. Avoid broad `catch (Exception)` unless at a defined boundary with added context.
|
|
28
|
+
- **Public surface**: Keep public API surface intentional and minimal. Prefer `internal` for non-public APIs.
|
|
29
|
+
- **XML docs**: Public APIs should include XML documentation comments when behavior or contract is non-obvious.
|
|
30
|
+
|
|
31
|
+
## Testing Standards
|
|
32
|
+
|
|
33
|
+
- Use **MSTest** (`Microsoft.VisualStudio.TestTools.UnitTesting`) as the test framework.
|
|
34
|
+
- Use **Moq** for mocking.
|
|
35
|
+
- Prefer **FluentAssertions** for assertions; use MSTest `Assert` only when FluentAssertions is not practical.
|
|
36
|
+
- Use `[TestClass]` and `[TestMethod]` attributes.
|
|
37
|
+
- Follow Arrange–Act–Assert structure.
|
|
38
|
+
- No external dependencies in unit tests.
|
|
39
|
+
- Repository-wide line coverage must remain >= 80%.
|
|
40
|
+
- Any new module, class, or method must reach >= 90% coverage.
|
|
41
|
+
- Coverage regression on changed lines is a blocking finding.
|
|
42
|
+
|
|
43
|
+
## Deterministic Test Rules
|
|
44
|
+
|
|
45
|
+
Unit tests must not depend on network, mutable machine PATH or profile state, implicit working-directory assumptions, or external services. Use seam-based mocking for all external boundaries (processes, HTTP, filesystem, clocks). Tests must produce identical results in the IDE test runner and in CLI runs so local and CI behavior agree.
|
|
46
|
+
|
|
47
|
+
## DI Seams
|
|
48
|
+
|
|
49
|
+
Introduce the smallest seam that enables reliable unit testing. Apply in this order of preference:
|
|
50
|
+
|
|
51
|
+
1. **Interface seam (preferred)** — extract boundary calls into narrow purpose-specific interfaces (for example, `IProcessRunner`, `IFileSystem`, `IClock`). Keep interfaces minimal.
|
|
52
|
+
2. **Injectable delegate seam** — use a narrow `Func<>`/`Action<>` delegate for a single call path when a full interface is excessive. Default behavior must remain safe and deterministic.
|
|
53
|
+
3. **Adapter seam for static or third-party APIs** — wrap the static or third-party call behind a small adapter so tests can mock the adapter with Moq.
|
|
54
|
+
|
|
55
|
+
### Time seam (TimeProvider) — guidance only
|
|
56
|
+
|
|
57
|
+
For new or touched time-dependent code, inject `System.TimeProvider` through the constructor instead of calling the clock directly:
|
|
58
|
+
|
|
59
|
+
- Production supplies `TimeProvider.System`.
|
|
60
|
+
- Tests supply `FakeTimeProvider` from `Microsoft.Extensions.TimeProvider.Testing` to make time deterministic.
|
|
61
|
+
- Do not call `DateTime.Now`, `DateTime.UtcNow`, or `DateTimeOffset.Now` directly in new/touched code; obtain time via the injected `TimeProvider` (for example `GetUtcNow()` / `GetLocalNow()`).
|
|
62
|
+
|
|
63
|
+
This is guidance only: it introduces no runtime behavior change and does not require rewriting existing call sites. Where `Microsoft.Bcl.TimeProvider` (the .NET Framework backport of `System.TimeProvider`) is already present in the repository, the seam is available without adding a new production dependency. Legacy call-site migration is follow-up work, not a requirement of adopting this guidance.
|
|
64
|
+
|
|
65
|
+
## Analyzer Stack
|
|
66
|
+
|
|
67
|
+
This repository adopts a fixed set of FIVE static-analysis packages, wired into first-party projects only (vendored or third-party projects are excluded):
|
|
68
|
+
|
|
69
|
+
1. **Meziantou.Analyzer**
|
|
70
|
+
2. **SonarAnalyzer.CSharp**
|
|
71
|
+
3. **Roslynator.Analyzers**
|
|
72
|
+
4. **AsyncFixer**
|
|
73
|
+
5. **Microsoft.CodeAnalysis.BannedApiAnalyzers**
|
|
74
|
+
|
|
75
|
+
### Mechanism
|
|
76
|
+
|
|
77
|
+
- Each first-party project references its analyzers via a `packages.config` `<package ... developmentDependency="true" />` entry plus an explicit `<Analyzer Include="..\packages\<id>.<version>\analyzers\dotnet\cs\<dll>" />` item in the project's analyzer `<ItemGroup>`. This file-based wiring is used because the projects are legacy (non-SDK, `packages.config`) VSTO/.NET Framework projects; no PackageReference, no Central Package Management, and no `dotnet restore` are introduced.
|
|
78
|
+
- For this repo's Roslyn 5.6 (VS18) toolchain, use the analyzer DLLs from the Meziantou `roslyn5.0` and Roslynator `roslyn4.7` subfolders.
|
|
79
|
+
- **Banned symbols** are enforced by BannedApiAnalyzers using a repo-root `BannedSymbols.txt` referenced by each first-party project as `<AdditionalFiles Include="$(MSBuildThisFileDirectory)..\BannedSymbols.txt" />`. The banned targets are `DateTime.Now`, `DateTime.UtcNow`, `Random.Shared`, `Thread.Sleep`, and `Task.Delay`. RS0030 is held at `severity = suggestion` for initial rollout (existing call sites are not build-broken); promotion to `warning` after legacy cleanup is documented follow-up work.
|
|
80
|
+
|
|
81
|
+
### Severity-first ordering invariant
|
|
82
|
+
|
|
83
|
+
All new analyzer rule severities are configured in `.editorconfig` at `severity = suggestion` (never `warning`/`error`) BEFORE any `<Analyzer Include>` item is wired into a project. This is required because the type-check toolchain step runs `msbuild ... /p:Nullable=enable /p:TreatWarningsAsErrors=true`, which promotes any `warning`-severity analyzer diagnostic to a build error. Keeping new analyzer diagnostics at `suggestion` (message level) prevents the analyzer adoption from breaking the protected nullable gate.
|
|
84
|
+
|
|
85
|
+
### Deferred analyzer — SecurityCodeScan.VS2019
|
|
86
|
+
|
|
87
|
+
SecurityCodeScan.VS2019 was evaluated and **deferred** (not silently omitted) from this rollout. Version 5.6.7 is incompatible with this repository's Roslyn 5.6 (VS18) analyzer loader: its types fail to initialize (`TypeInitializationException` → `FileNotFoundException` for `YamlDotNet, Version=11.0.0.0`), which the compiler reports as warning **CS8032**. CS8032 is a compiler warning, not an analyzer rule ID, so it cannot be set to `suggestion` via `.editorconfig`; under `/p:TreatWarningsAsErrors=true` it is promoted to an error and breaks the protected nullable build. SecurityCodeScan.VS2019 is therefore dropped from the analyzer set entirely. **No CS8032 suppression** (no `dotnet_diagnostic.CS8032` entry and no `<WarningsNotAsErrors>` containing CS8032) is introduced, and no substitute security analyzer is added. Re-evaluation is follow-up work pending a Roslyn-5.x-compatible security analyzer.
|
|
88
|
+
|
|
89
|
+
## Prohibited Behaviors
|
|
90
|
+
|
|
91
|
+
- Broad refactors across unrelated projects or files.
|
|
92
|
+
- Introducing heavy generic abstraction frameworks without need.
|
|
93
|
+
- Creating analyzer debt and deferring cleanup.
|
|
94
|
+
- Weakening assertions or relaxing test expectations to make tests pass.
|
|
95
|
+
- Adding sleeps, retries, or timing hacks to mask flaky behavior.
|
|
96
|
+
- Reporting success without running the required toolchain.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: csharp-qa-gate
|
|
3
|
+
description: Final QA gate for C# changes. Executes the full CSharpier -> .NET Analyzers -> Nullable Analysis -> MSTest toolchain, compares against a captured baseline, enforces zero-regression deltas, and produces the required reporting block before the agent declares the change complete.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# C# QA Gate
|
|
7
|
+
|
|
8
|
+
Canonical procedure for the Phase D final quality gate that every C# change must pass before completion is reported.
|
|
9
|
+
|
|
10
|
+
## When to Use This Skill
|
|
11
|
+
|
|
12
|
+
Use this skill when:
|
|
13
|
+
|
|
14
|
+
- `csharp-typed-engineer` is about to declare a change complete.
|
|
15
|
+
- An executor has finished applying a planned batch and must verify zero regressions against the baseline captured in Phase A.
|
|
16
|
+
- A reviewer needs to confirm the toolchain was actually run and produced a clean pass.
|
|
17
|
+
|
|
18
|
+
## Required Inputs
|
|
19
|
+
|
|
20
|
+
Before invoking this gate, the agent must have:
|
|
21
|
+
|
|
22
|
+
- a baseline record produced in Phase A, containing analyzer findings, compiler/nullable diagnostics, MSTest pass/fail status, and per-file coverage status for the in-scope files,
|
|
23
|
+
- the exact list of touched production and test files,
|
|
24
|
+
- a clean working tree (all planned edits committed to the working copy).
|
|
25
|
+
|
|
26
|
+
## Toolchain Execution Sequence
|
|
27
|
+
|
|
28
|
+
Run the full toolchain in this exact order. If any step fails or modifies files, fix the issue and restart from step 1. Do not stop the loop until all four steps complete without errors in a single pass.
|
|
29
|
+
|
|
30
|
+
1. `dotnet tool run csharpier .`
|
|
31
|
+
2. `msbuild <solution>.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`
|
|
32
|
+
3. `msbuild <solution>.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:Nullable=enable /p:TreatWarningsAsErrors=true`
|
|
33
|
+
4. `vstest.console.exe <test-assembly-paths> /EnableCodeCoverage`
|
|
34
|
+
|
|
35
|
+
If the environment prevents running any tool, stop and report the change as **unverified**. Do not declare completion.
|
|
36
|
+
|
|
37
|
+
## Delta Requirements (Zero-Regression Hard Gate)
|
|
38
|
+
|
|
39
|
+
Compare the final results to the Phase A baseline. All of the following must hold:
|
|
40
|
+
|
|
41
|
+
- **Analyzer delta**: 0 new findings across the repository.
|
|
42
|
+
- **Compiler / nullable delta**: 0 new diagnostics across the repository.
|
|
43
|
+
- **MSTest delta**: 0 new failing tests.
|
|
44
|
+
- **Per-file coverage delta**: coverage for every touched file is greater than or equal to the baseline for that file.
|
|
45
|
+
- **Overall coverage delta** (when the repo enforces it): overall coverage is greater than or equal to the baseline.
|
|
46
|
+
- **New modules, classes, or methods**: coverage >= 90% for each new unit introduced in the batch.
|
|
47
|
+
|
|
48
|
+
If any delta check fails, the agent must revert or fix immediately and rerun the full toolchain. Do not proceed to reporting until all deltas are clean.
|
|
49
|
+
|
|
50
|
+
## Required Reporting Block
|
|
51
|
+
|
|
52
|
+
Every completion response must include the following sections:
|
|
53
|
+
|
|
54
|
+
1. **Scope** — exact file list touched in this change.
|
|
55
|
+
2. **Baseline** — analyzer, compiler/nullable, MSTest, and coverage status recorded in Phase A.
|
|
56
|
+
3. **Plan** — design and test-strategy summary, referencing the approved plan.
|
|
57
|
+
4. **Diffs** — patch-style or full-file replacements for scoped files only.
|
|
58
|
+
5. **QA Gate Results** — analyzer, compiler/nullable, MSTest, and coverage deltas. If any step could not be run, mark the corresponding line **unverified** and state why.
|
|
59
|
+
|
|
60
|
+
## Evidence Storage
|
|
61
|
+
|
|
62
|
+
Persist toolchain output according to `evidence-and-timestamp-conventions`:
|
|
63
|
+
|
|
64
|
+
- store baseline outputs under `<FEATURE>/evidence/baseline/<timestamp>/`,
|
|
65
|
+
- store post-change outputs under `<FEATURE>/evidence/qa-gates/<timestamp>/`,
|
|
66
|
+
- use ISO-8601 UTC timestamps in folder names.
|
|
67
|
+
|
|
68
|
+
This location is canonical per evidence-and-timestamp-conventions and is not overridable.
|
|
69
|
+
See `.claude/skills/evidence-and-timestamp-conventions/SKILL.md` for the canonical evidence path authority.
|
|
70
|
+
|
|
71
|
+
The evidence paths must be referenced in the agent's completion message to satisfy the `SubagentStop` completion-artifact gate.
|
|
72
|
+
|
|
73
|
+
## Prohibited Shortcuts
|
|
74
|
+
|
|
75
|
+
- Do not disable, skip, or narrow any step of the toolchain to reach a clean result.
|
|
76
|
+
- Do not add analyzer suppressions, `#pragma warning disable`, `#nullable disable`, or test `[Ignore]` attributes to suppress new findings introduced by the change.
|
|
77
|
+
- Do not report success based on partial or targeted runs alone. Targeted runs are allowed mid-batch, but the final gate requires a full-solution pass.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: invoke-csharp-engineer
|
|
3
|
+
description: Invoke the csharp-typed-engineer worker to design, implement, and verify C# changes within typed repository boundaries. Applies CSharpier -> .NET Analyzers -> Nullable Analysis -> MSTest toolchain, the 1-3 production-file small-path budget, and zero-regression quality gates.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Implement C# Skill
|
|
7
|
+
|
|
8
|
+
This direct-use wrapper delegates C# implementation work to the `csharp-typed-engineer` worker. Use this entry point when a prompt needs a scoped C# change that must stay inside the typed engineer's guardrails.
|
|
9
|
+
|
|
10
|
+
## When to Use This Skill
|
|
11
|
+
|
|
12
|
+
Use this skill when:
|
|
13
|
+
|
|
14
|
+
- The user requests a C# code change, bug fix, refactor, or test addition.
|
|
15
|
+
- Estimated scope fits the small path (1-3 production files plus corresponding tests).
|
|
16
|
+
- The toolchain (CSharpier, .NET Analyzers, Nullable Analysis, MSTest) can be run in the current environment, or the user has explicitly authorized an unverified plan-only response.
|
|
17
|
+
|
|
18
|
+
If the estimated scope exceeds the small-path budget, this skill defers to the orchestrated flow via `csharp-change-budget-router` instead of proceeding directly.
|
|
19
|
+
|
|
20
|
+
## Inputs
|
|
21
|
+
|
|
22
|
+
- Objective statement (what the change must accomplish).
|
|
23
|
+
- Files or entrypoints in scope.
|
|
24
|
+
- Constraints, including public APIs that must be preserved.
|
|
25
|
+
- Optional approved plan. If none is supplied, the worker delegates plan authoring to `atomic_planner` before any edits.
|
|
26
|
+
- Optional budget override in the form `budget: prod=<N>, test=<M>` subject to repo policy compliance.
|
|
27
|
+
|
|
28
|
+
## Output Paths
|
|
29
|
+
|
|
30
|
+
- C# source and test files within the approved scope.
|
|
31
|
+
- Baseline evidence under `<FEATURE>/evidence/baseline/<timestamp>/` and post-change evidence under `<FEATURE>/evidence/qa-gates/<timestamp>/` per `evidence-and-timestamp-conventions`.
|
|
32
|
+
- This location is canonical per evidence-and-timestamp-conventions and is not overridable. See `.claude/skills/evidence-and-timestamp-conventions/SKILL.md` for the canonical evidence path authority.
|
|
33
|
+
- Plan artifacts under the active feature folder when the task is feature-scoped.
|
|
34
|
+
|
|
35
|
+
## Required Reporting Block
|
|
36
|
+
|
|
37
|
+
The worker must return the following reporting block:
|
|
38
|
+
|
|
39
|
+
1. Scope (exact file list).
|
|
40
|
+
2. Baseline (CSharpier, .NET Analyzers, Nullable Analysis, MSTest, coverage status).
|
|
41
|
+
3. Plan (design and test strategy).
|
|
42
|
+
4. Diffs (patch-style or full-file replacements).
|
|
43
|
+
5. QA Gate Results (CSharpier, .NET Analyzers, Nullable Analysis, MSTest, and coverage deltas, or clearly marked **unverified**).
|
|
44
|
+
|
|
45
|
+
## Worker Routing
|
|
46
|
+
|
|
47
|
+
- Worker: `csharp-typed-engineer`
|
|
48
|
+
|
|
49
|
+
## Preloaded Contracts
|
|
50
|
+
|
|
51
|
+
The worker operates under the following preloaded skills and rules:
|
|
52
|
+
|
|
53
|
+
- `policy-compliance-order`
|
|
54
|
+
- `csharp-change-budget-router`
|
|
55
|
+
- `atomic-plan-contract`
|
|
56
|
+
- `csharp-qa-gate`
|
|
57
|
+
- `acceptance-criteria-tracking`
|
|
58
|
+
- `feature-promotion-lifecycle`
|
|
59
|
+
- `remediation-handoff-atomic-planner`
|
|
60
|
+
- `evidence-and-timestamp-conventions`
|
|
61
|
+
- `.claude/rules/csharp.md` (path-scoped for `**/*.cs` and `**/*.csproj`)
|
|
62
|
+
- `.claude/rules/general-code-change.md`
|
|
63
|
+
- `.claude/rules/general-unit-test.md`
|
|
64
|
+
- `.claude/rules/tonality.md`
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "core",
|
|
3
|
+
"label": "Core (always included)",
|
|
4
|
+
"paths": [
|
|
5
|
+
".claude/settings.json",
|
|
6
|
+
".claude/agents/atomic-executor.md",
|
|
7
|
+
".claude/agents/atomic-planner.md",
|
|
8
|
+
".claude/agents/epic-review.md",
|
|
9
|
+
".claude/agents/feature-review.md",
|
|
10
|
+
".claude/agents/orchestrator.md",
|
|
11
|
+
".claude/agents/prd-feature.md",
|
|
12
|
+
".claude/agents/staged-review.md",
|
|
13
|
+
".claude/agents/status-updater.md",
|
|
14
|
+
".claude/agents/task-researcher.md",
|
|
15
|
+
".claude/hooks/enforce-checkpoint-monotonic.ps1",
|
|
16
|
+
".claude/hooks/enforce-completion-consistency.ps1",
|
|
17
|
+
".claude/hooks/enforce-evidence-locations.ps1",
|
|
18
|
+
".claude/hooks/enforce-feature-folder-order.ps1",
|
|
19
|
+
".claude/hooks/enforce-orchestration-preimplementation-gate.ps1",
|
|
20
|
+
".claude/hooks/enforce-pr-author-skill.ps1",
|
|
21
|
+
".claude/hooks/enforce-prd-feature-before-planner.ps1",
|
|
22
|
+
".claude/hooks/enforce-promotion-mcp-only.ps1",
|
|
23
|
+
".claude/hooks/validate-bash.ps1",
|
|
24
|
+
".claude/hooks/validate-executor-output.ps1",
|
|
25
|
+
".claude/hooks/validate-feature-review-coverage.ps1",
|
|
26
|
+
".claude/hooks/validate-orchestrator-output.ps1",
|
|
27
|
+
".claude/hooks/validate-planner-output.ps1",
|
|
28
|
+
".claude/hooks/validate-required-artifact-output.ps1",
|
|
29
|
+
".claude/hooks/validate-task-researcher-output.ps1",
|
|
30
|
+
".claude/rules/architecture-boundaries.md",
|
|
31
|
+
".claude/rules/benchmark-baselines.md",
|
|
32
|
+
".claude/rules/ci-workflows.md",
|
|
33
|
+
".claude/rules/general-code-change.md",
|
|
34
|
+
".claude/rules/general-unit-test.md",
|
|
35
|
+
".claude/rules/orchestrator-state.md",
|
|
36
|
+
".claude/rules/quality-tiers.md",
|
|
37
|
+
".claude/rules/self-explanatory-code-commenting.md",
|
|
38
|
+
".claude/rules/tonality.md",
|
|
39
|
+
".claude/skills/acceptance-criteria-tracking/SKILL.md",
|
|
40
|
+
".claude/skills/atomic-plan-contract/SKILL.md",
|
|
41
|
+
".claude/skills/commit-message/SKILL.md",
|
|
42
|
+
".claude/skills/evidence-and-timestamp-conventions/SKILL.md",
|
|
43
|
+
".claude/skills/execute-hard-lock/SKILL.md",
|
|
44
|
+
".claude/skills/feature-promotion-lifecycle/SKILL.md",
|
|
45
|
+
".claude/skills/feature-review-workflow/SKILL.md",
|
|
46
|
+
".claude/skills/fill-feature-docs/SKILL.md",
|
|
47
|
+
".claude/skills/human-exception-runbook/example.runbook.md",
|
|
48
|
+
".claude/skills/human-exception-runbook/SKILL.md",
|
|
49
|
+
".claude/skills/make-skill-template/SKILL.md",
|
|
50
|
+
".claude/skills/orchestrate/SKILL.md",
|
|
51
|
+
".claude/skills/policy-audit-template-usage/SKILL.md",
|
|
52
|
+
".claude/skills/policy-compliance-order/SKILL.md",
|
|
53
|
+
".claude/skills/pr-author/SKILL.md",
|
|
54
|
+
".claude/skills/pr-base-branch-merge-base/SKILL.md",
|
|
55
|
+
".claude/skills/pr-context-artifacts/SKILL.md",
|
|
56
|
+
".claude/skills/remediation-handoff-atomic-planner/SKILL.md",
|
|
57
|
+
".claude/skills/research-issue/SKILL.md",
|
|
58
|
+
".claude/skills/review-epic/SKILL.md",
|
|
59
|
+
".claude/skills/review-feature/SKILL.md",
|
|
60
|
+
".claude/skills/review-staged/SKILL.md",
|
|
61
|
+
".claude/skills/skill-canonical-location-audit/SKILL.md",
|
|
62
|
+
".claude/skills/translate-copilot-to-claude/SKILL.md",
|
|
63
|
+
".claude/skills/update-status/SKILL.md"
|
|
64
|
+
]
|
|
65
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "csharp-legacy",
|
|
3
|
+
"label": "C# (legacy)",
|
|
4
|
+
"source_prefix": ".claude-variants/csharp-legacy",
|
|
5
|
+
"paths": [
|
|
6
|
+
".claude/rules/csharp.md",
|
|
7
|
+
".claude/agents/csharp-typed-engineer.md",
|
|
8
|
+
".claude/skills/csharp-qa-gate/SKILL.md",
|
|
9
|
+
".claude/skills/invoke-csharp-engineer/SKILL.md"
|
|
10
|
+
]
|
|
11
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "csharp-modern",
|
|
3
|
+
"label": "C# (modern)",
|
|
4
|
+
"paths": [
|
|
5
|
+
".claude/rules/csharp.md",
|
|
6
|
+
".claude/agents/csharp-typed-engineer.md",
|
|
7
|
+
".claude/skills/csharp-qa-gate/SKILL.md",
|
|
8
|
+
".claude/skills/invoke-csharp-engineer/SKILL.md",
|
|
9
|
+
".claude/skills/csharp-change-budget-router/SKILL.md",
|
|
10
|
+
".claude/skills/csharp-orchestration-state-machine/SKILL.md"
|
|
11
|
+
]
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "powershell",
|
|
3
|
+
"label": "PowerShell",
|
|
4
|
+
"paths": [
|
|
5
|
+
".claude/rules/powershell.md",
|
|
6
|
+
".claude/agents/powershell-typed-engineer.md",
|
|
7
|
+
".claude/hooks/check-powershell-test-purity.ps1",
|
|
8
|
+
".claude/hooks/enforce-powershell-batch-budget.ps1",
|
|
9
|
+
".claude/skills/invoke-powershell-engineer/SKILL.md",
|
|
10
|
+
".claude/skills/powershell-change-budget-router/SKILL.md",
|
|
11
|
+
".claude/skills/powershell-orchestration-state-machine/SKILL.md",
|
|
12
|
+
".claude/skills/powershell-qa-gate/SKILL.md"
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "python",
|
|
3
|
+
"label": "Python",
|
|
4
|
+
"paths": [
|
|
5
|
+
".claude/rules/python.md",
|
|
6
|
+
".claude/rules/python-suppressions.md",
|
|
7
|
+
".claude/agents/python-typed-engineer.md",
|
|
8
|
+
".claude/hooks/check-python-test-purity.ps1",
|
|
9
|
+
".claude/hooks/enforce-python-batch-budget.ps1",
|
|
10
|
+
".claude/skills/invoke-python-engineer/SKILL.md",
|
|
11
|
+
".claude/skills/python-change-budget-router/SKILL.md",
|
|
12
|
+
".claude/skills/python-qa-gate/SKILL.md"
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -66,7 +66,7 @@ When migrating a Copilot artifact:
|
|
|
66
66
|
2. If it defines a reusable agent persona or bounded delegation role, migrate it to `.codex/agents/<name>.toml`.
|
|
67
67
|
3. If it is mainly a launch prompt or an orchestration shortcut, migrate it to `.codex/prompts/<name>.md`.
|
|
68
68
|
4. Preserve stable names where possible so downstream handoffs remain readable and consistent.
|
|
69
|
-
5. If a Copilot workflow relied on `drmCopilotExtension.*` commands or another host-specific surface, move that translation logic into `repo-automation-adapter`, target semantic MCP tools on server `
|
|
69
|
+
5. If a Copilot workflow relied on `drmCopilotExtension.*` commands or another host-specific surface, move that translation logic into `repo-automation-adapter`, target semantic MCP tools on server `drm-copilot` when available, and keep the business workflow skill host-agnostic.
|
|
70
70
|
|
|
71
71
|
## External Tool Bindings
|
|
72
72
|
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
# Converted skill
|
|
2
|
-
|
|
3
|
-
Applied rewrites:
|
|
4
|
-
- None
|
|
5
|
-
|
|
6
1
|
---
|
|
7
2
|
name: acceptance-criteria-tracking
|
|
8
3
|
description: 'Track and check off acceptance criteria in requirement source files (issue.md, spec.md, user-story.md) as they are delivered. Use when executing plans, reviewing features, or validating delivery to keep AC checkboxes current.'
|
package/resources/codex-and-agents-customizations/.agents/skills/architecture-boundaries/SKILL.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architecture-boundaries
|
|
3
|
+
description: Architecture boundary enforcement rules for the No-COM architecture.
|
|
4
|
+
paths:
|
|
5
|
+
- "**/*.ts"
|
|
6
|
+
- "**/*.cs"
|
|
7
|
+
description: Architecture boundary enforcement rules for the No-COM architecture.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Converted rule
|
|
11
|
+
|
|
12
|
+
Source: legacy Claude rule `architecture-boundaries`.
|
|
13
|
+
|
|
14
|
+
# Architecture Boundaries
|
|
15
|
+
|
|
16
|
+
Architecture boundary enforcement is a uniform gate across all tiers (T1–T4). Violations block PRs.
|
|
17
|
+
|
|
18
|
+
## Enforcement Tools
|
|
19
|
+
|
|
20
|
+
- **TypeScript:** `dependency-cruiser`. Configuration file pattern: `.dependency-cruiser.cjs`.
|
|
21
|
+
- **.NET (when the backend exists):** `NetArchTest.Rules`. Test project naming pattern: `*.ArchitectureTests`.
|
|
22
|
+
|
|
23
|
+
## No-COM Architecture Rules (enforceable assertions)
|
|
24
|
+
|
|
25
|
+
Production code in this repository must satisfy each of the following assertions. Each assertion is enforced by `dependency-cruiser` (TypeScript) or `NetArchTest.Rules` (.NET) where applicable; legacy import utilities, when added, must satisfy the same assertions.
|
|
26
|
+
|
|
27
|
+
1. New runtime code must not reference VSTO APIs (`Microsoft.Office.Tools.*`).
|
|
28
|
+
2. New runtime code must not reference Outlook desktop automation APIs (`Microsoft.Office.Interop.Outlook`).
|
|
29
|
+
3. New runtime code must not expose COM-visible interfaces (`[ComVisible(true)]` attribute is banned in production code).
|
|
30
|
+
4. New runtime code must not use Ribbon extensibility callbacks tied to the desktop object model.
|
|
31
|
+
5. New runtime code must not depend on local Outlook event streams.
|
|
32
|
+
6. New runtime code must not depend on Outlook user-defined fields as the primary state store.
|
|
33
|
+
7. Mailbox data must be accessed only through Office.js or Microsoft Graph.
|
|
34
|
+
8. Business behavior must be implemented in the backend or in host-neutral domain or application modules.
|
|
35
|
+
9. Client UI must be implemented as web UI.
|
|
36
|
+
10. Legacy integration, when required, must be limited to offline data import from files or exported data.
|
|
37
|
+
|
|
38
|
+
## Layer Boundary Assertions (TypeScript)
|
|
39
|
+
|
|
40
|
+
- `src/taskpane/` and `src/commands/` must not import from backend internals.
|
|
41
|
+
- Domain modules must not import from Office.js, Microsoft Graph SDK, or any infrastructure adapter.
|
|
42
|
+
- Adapters may import from domain; domain must not import from adapters.
|
|
43
|
+
|
|
44
|
+
## Layer Boundary Assertions (.NET, applies once the backend exists)
|
|
45
|
+
|
|
46
|
+
- `TaskMaster.Domain` must have zero references to Outlook PIA, VSTO, or Office.js types.
|
|
47
|
+
- `TaskMaster.Application` may depend on `TaskMaster.Domain` only.
|
|
48
|
+
- Adapter projects may depend on `TaskMaster.Domain` and `TaskMaster.Application`; domain may not depend on adapters.
|
|
49
|
+
|
|
50
|
+
## Enforcement Outcome
|
|
51
|
+
|
|
52
|
+
Violations of any rule above are PR-blocking findings. CI runs the architecture-boundary stage on every PR; a non-zero violation count fails the stage and prevents merge.
|
package/resources/codex-and-agents-customizations/.agents/skills/atomic-plan-contract/SKILL.md
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
# Converted skill
|
|
2
|
-
|
|
3
|
-
Applied rewrites:
|
|
4
|
-
- Rewrite Claude skill paths to shared skill paths.
|
|
5
|
-
|
|
6
1
|
---
|
|
7
2
|
name: atomic-plan-contract
|
|
8
3
|
description: 'Atomic plan format and toolchain contract shared by planning and execution agents. Use when generating, validating, or executing atomic plans with Phase 0, baseline capture, and final QA loops.'
|
|
@@ -24,7 +19,7 @@ Use this skill when:
|
|
|
24
19
|
- Phase headings must be: `### Phase N — <Title>`
|
|
25
20
|
- Tasks must start with: `- [ ] [P#-T#]` (or `[x]` for completed)
|
|
26
21
|
- Task IDs must match their phase and be sequential per phase.
|
|
27
|
-
- Plans must pass the `
|
|
22
|
+
- Plans must pass the `mcp__drm-copilot__validate_orchestration_artifacts` MCP tool with `artifact_type: "plan"` and `artifact_path: <plan-path>` before they can be reported as approved.
|
|
28
23
|
|
|
29
24
|
## Short-Path Minimal Plan Contract
|
|
30
25
|
|
|
@@ -78,9 +73,22 @@ After preflight all-clear on the minimal-audit plan:
|
|
|
78
73
|
- orchestrator MUST checkpoint Phase 0 evidence before branching.
|
|
79
74
|
|
|
80
75
|
Branching after Phase 0:
|
|
81
|
-
- `manual bootstrap` → save state and stop for manual resume,
|
|
76
|
+
- `manual bootstrap` → save state and stop for manual resume ONLY when the initial user request explicitly opted into manual orchestration from the beginning,
|
|
82
77
|
- otherwise continue with constrained small-path development, then executor validation, then reduced audit/remediation loop.
|
|
83
78
|
|
|
79
|
+
## No-Manual-Step Contract (Mandatory)
|
|
80
|
+
|
|
81
|
+
Unless the user's initial request explicitly opts into manual orchestration from the beginning, approved plans and remediation plans MUST remain fully automated.
|
|
82
|
+
|
|
83
|
+
This prohibition includes:
|
|
84
|
+
|
|
85
|
+
- manual bootstrap pauses,
|
|
86
|
+
- human-operator validation tasks,
|
|
87
|
+
- user-performed repro or QA steps,
|
|
88
|
+
- requests for screenshots, notes, or runtime evidence that the agent cannot collect itself.
|
|
89
|
+
|
|
90
|
+
When a fully automated equivalent is unavailable, the plan MUST fail closed by recording blocked or remediation-required automated state. It MUST NOT introduce a new manual step later in the workflow.
|
|
91
|
+
|
|
84
92
|
## Phase 0 Requirements
|
|
85
93
|
|
|
86
94
|
Phase 0 must include tasks to read policy files in the order defined in `policy-compliance-order`.
|
|
@@ -158,7 +166,7 @@ When validating or handing off plans for execution:
|
|
|
158
166
|
|
|
159
167
|
Before a plan can be treated as approved:
|
|
160
168
|
|
|
161
|
-
- run the `
|
|
169
|
+
- run the `mcp__drm-copilot__validate_orchestration_artifacts` MCP tool with `artifact_type: "plan"` and `artifact_path: <plan-path>`,
|
|
162
170
|
- reject the plan if that validator exits non-zero,
|
|
163
171
|
- do not treat human-readable summaries as a substitute for validator success.
|
|
164
172
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: benchmark-baselines
|
|
3
|
+
description: Benchmark baseline provenance rules for performance regression gates.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Converted rule
|
|
7
|
+
|
|
8
|
+
Source: legacy Claude rule `benchmark-baselines`.
|
|
9
|
+
|
|
10
|
+
# Benchmark Baseline Provenance
|
|
11
|
+
|
|
12
|
+
This rule governs performance baselines used by benchmark regression gates. It exists because a baseline captured on a developer workstation was compared against a `windows-latest` runner, producing deterministic latency regressions that the benchmark gate could not survive (issue #26, PR #30).
|
|
13
|
+
|
|
14
|
+
## Runner-Environment Parity (Required)
|
|
15
|
+
|
|
16
|
+
Performance baselines must be captured in the same runner environment class against which they are compared. A baseline captured on a developer workstation must not be committed for comparison against a CI runner.
|
|
17
|
+
|
|
18
|
+
## Prohibited: Unknown Processor
|
|
19
|
+
|
|
20
|
+
A baseline whose `HostEnvironmentInfo.ProcessorName` is the literal string `"Unknown processor"` is rejected. This value indicates the baseline was captured in an environment where the processor could not be identified (typically a virtualized or developer workstation), which violates runner-environment parity.
|
|
21
|
+
|
|
22
|
+
- Tooling MUST reject any baseline JSON where `HostEnvironmentInfo.ProcessorName == "Unknown processor"`.
|
|
23
|
+
- The rejection is a Blocking finding; the baseline must be recaptured on the target runner class.
|
|
24
|
+
|
|
25
|
+
## Required: Sibling Provenance File
|
|
26
|
+
|
|
27
|
+
Every committed baseline file MUST have a sibling `baseline.provenance.json` in the same directory. The provenance file records, at minimum:
|
|
28
|
+
|
|
29
|
+
- `runner_class` — the runner environment class that produced the baseline (for example `windows-latest`).
|
|
30
|
+
- `host_signature` — a stable signature of the host (for example a hashed or labeled description of the CPU/core configuration).
|
|
31
|
+
- `workflow_run_url` — the URL of the workflow run that produced the baseline.
|
|
32
|
+
|
|
33
|
+
- Tooling MUST reject a baseline that has no sibling `baseline.provenance.json`.
|
|
34
|
+
- The rejection is a Blocking finding; the baseline must be recaptured with provenance recorded.
|
|
35
|
+
|
|
36
|
+
## Enforcement
|
|
37
|
+
|
|
38
|
+
- The validator `scripts/benchmarks/Test-BaselineProvenance.ps1` enforces both rejection conditions above and accepts a runner-captured baseline whose `ProcessorName` is a real processor and whose sibling `baseline.provenance.json` is present.
|
|
39
|
+
- The feature-review policy rule `modified-workflow-needs-green-run` (see `.agents/skills/feature-review-workflow/SKILL.md`) provides a second line of defense: a diff under `scripts/benchmarks/**` is Blocking unless a green workflow run against the branch head is present in remediation inputs.
|
|
40
|
+
|
|
41
|
+
## Scope
|
|
42
|
+
|
|
43
|
+
- This rule applies to any baseline consumed by a benchmark regression gate.
|
|
44
|
+
- It does not change which checks are required by branch protection; it constrains the provenance of the data those checks consume.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ci-workflows
|
|
3
|
+
description: GitHub Actions PowerShell workflow authoring rules.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Converted rule
|
|
7
|
+
|
|
8
|
+
Source: legacy Claude rule `ci-workflows`.
|
|
9
|
+
|
|
10
|
+
# CI Workflow Authoring
|
|
11
|
+
|
|
12
|
+
This rule governs GitHub Actions workflow steps that run PowerShell (`pwsh`). It exists because a `pwsh` step that intentionally invoked a failing nested command left `$LASTEXITCODE == 1` after its verification logic had already succeeded, leaking a failure to GitHub Actions even though the step's intent was satisfied (issue #26, PR #30).
|
|
13
|
+
|
|
14
|
+
## Deliberately-Failing Nested Command Pattern (Required)
|
|
15
|
+
|
|
16
|
+
A workflow step whose `run:` block intentionally invokes a command expected to fail — for example a negative-path self-validation that asserts a gate catches a synthetic regression — MUST not allow the residual non-zero exit code to propagate to GitHub Actions.
|
|
17
|
+
|
|
18
|
+
For any such step, the `run:` block MUST do one of the following:
|
|
19
|
+
|
|
20
|
+
1. Reset the exit code explicitly after the expected failure:
|
|
21
|
+
```powershell
|
|
22
|
+
& ./some-tool --expect-failure
|
|
23
|
+
$LASTEXITCODE = 0
|
|
24
|
+
```
|
|
25
|
+
2. Or terminate the success path with an explicit zero exit:
|
|
26
|
+
```powershell
|
|
27
|
+
if ($verificationSucceeded) { exit 0 } else { exit 1 }
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
A `pwsh` step terminates with the exit code of the last external command unless the script explicitly resets it or calls `exit`. Negative-path verification steps therefore require an explicit reset or explicit `exit 0`.
|
|
31
|
+
|
|
32
|
+
## Rationale
|
|
33
|
+
|
|
34
|
+
- GitHub Actions interprets a step's process exit code as the step result. A leaked `$LASTEXITCODE` from an intentionally-failing nested command causes a passing verification to report failure.
|
|
35
|
+
- No local toolchain stage executes a workflow's `run:` block, so this defect is invisible to local feature-review. This textual rule is the artifact local review cites when reading workflow YAML.
|
|
36
|
+
|
|
37
|
+
## Enforcement
|
|
38
|
+
|
|
39
|
+
- Local feature-review cites this rule when reviewing diffs that add or modify `pwsh` steps with deliberately-failing nested commands.
|
|
40
|
+
- The feature-review policy rule `modified-workflow-needs-green-run` (see `.agents/skills/feature-review-workflow/SKILL.md`) requires a green workflow run against the branch head before a workflow change can merge, which exercises the exit-code path on the runner.
|
|
41
|
+
|
|
42
|
+
## Scope
|
|
43
|
+
|
|
44
|
+
- This rule applies to any workflow step whose `run:` block uses `shell: pwsh` (or the repo default `pwsh`) and intentionally invokes a failing nested command.
|
|
45
|
+
- It does not change required-check configuration or branch protection.
|
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
# Converted skill
|
|
2
|
-
|
|
3
|
-
Applied rewrites:
|
|
4
|
-
- None
|
|
5
|
-
|
|
6
1
|
---
|
|
7
2
|
name: commit-message
|
|
8
3
|
description: Generate a conventional commit message from staged Git changes following the repository's commit message conventions.
|
|
9
|
-
allowed-tools:
|
|
10
|
-
- Read
|
|
11
|
-
- "Bash(git log *)"
|
|
12
|
-
- "Bash(git diff *)"
|
|
13
4
|
---
|
|
14
5
|
|
|
15
6
|
# Commit Message Skill
|
|
@@ -26,12 +17,13 @@ Generate a single conventional commit message from staged Git changes or a provi
|
|
|
26
17
|
## Context Gathering
|
|
27
18
|
|
|
28
19
|
1. Use the supplied commit-context artifact first when present.
|
|
29
|
-
2.
|
|
20
|
+
2. When the `drm-copilot` MCP commit-context tool is available for the workflow, collect commit context through that tool and stop if the MCP call fails.
|
|
21
|
+
3. Otherwise inspect read-only staged Git state only:
|
|
30
22
|
- `git diff --cached --stat`
|
|
31
23
|
- `git diff --cached`
|
|
32
24
|
- `git diff --cached --name-only`
|
|
33
25
|
- `git log --oneline -n 20`
|
|
34
|
-
|
|
26
|
+
4. Do not infer intent from unstaged files or unrelated commit history.
|
|
35
27
|
|
|
36
28
|
## Classification
|
|
37
29
|
|