@danmoisan/drm-copilot-mcp 1.1.25 → 1.1.27
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 +170 -52
- package/package.json +1 -1
- package/resources/claude-customizations/.claude/agents/atomic-executor.md +3 -3
- package/resources/claude-customizations/.claude/agents/atomic-planner.md +2 -2
- package/resources/claude-customizations/.claude/agents/csharp-typed-engineer.md +7 -7
- package/resources/claude-customizations/.claude/agents/feature-review.md +6 -3
- package/resources/claude-customizations/.claude/agents/orchestrator.md +11 -7
- package/resources/claude-customizations/.claude/agents/parallel-orchestrator.md +7 -3
- package/resources/claude-customizations/.claude/agents/parallel-planner.md +6 -2
- package/resources/claude-customizations/.claude/agents/powershell-typed-engineer.md +7 -7
- package/resources/claude-customizations/.claude/agents/python-typed-engineer.md +6 -6
- package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate-review.ps1 +699 -0
- package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate.ps1 +16 -1
- package/resources/claude-customizations/.claude/hooks/enforce-model-routing-receipt.ps1 +41 -0
- package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-cleanup.ps1 +481 -0
- package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate.ps1 +3 -1
- package/resources/claude-customizations/.claude/hooks/enforce-parallel-cohort-barrier-helpers.ps1 +69 -3
- package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill-helpers.ps1 +2 -2
- package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.cleanup.ps1 +246 -0
- package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.docs-only.ps1 +1 -0
- package/resources/claude-customizations/.claude/hooks/hook-cleanup-context.ps1 +343 -0
- package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage-rules.ps1 +50 -16
- package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorState.psm1 +6 -1
- package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateCompletion.psm1 +4 -2
- package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateCompletionChecks.psm1 +51 -2
- package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateReceipts.psm1 +5 -2
- package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateRemediationAccounting.psm1 +116 -4
- package/resources/claude-customizations/.claude/lib/parallel-admission/Invoke-ParallelAdmission.ps1 +626 -0
- package/resources/claude-customizations/.claude/lib/parallel-admission/ParallelAdmission.psm1 +508 -0
- package/resources/claude-customizations/.claude/lib/parallel-admission/ParallelAdmissionJson.psm1 +141 -0
- package/resources/claude-customizations/.claude/lib/parallel-admission/ParallelAdmissionPrecedence.psm1 +508 -0
- package/resources/claude-customizations/.claude/rules/csharp.md +8 -8
- package/resources/claude-customizations/.claude/rules/orchestrator-state.md +28 -2
- package/resources/claude-customizations/.claude/rules/parallel-orchestration.md +17 -1
- package/resources/claude-customizations/.claude/rules/powershell.md +2 -2
- package/resources/claude-customizations/.claude/settings.json +1 -0
- package/resources/claude-customizations/.claude/skills/atomic-plan-contract/SKILL.md +9 -13
- package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/SKILL.md +93 -14
- package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup-worktrees.sh +23 -10
- package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_preserve_lib.sh +54 -46
- package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_preserve_merge_lib.sh +234 -0
- package/resources/claude-customizations/.claude/skills/csharp-qa-gate/SKILL.md +14 -15
- package/resources/claude-customizations/.claude/skills/epic-progress-report/SKILL.md +338 -0
- package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.Logic.ps1 +248 -0
- package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.Metrics.ps1 +232 -0
- package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.Render.ps1 +196 -0
- package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.State.ps1 +286 -0
- package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.ps1 +475 -0
- package/resources/claude-customizations/.claude/skills/execution-environment/SKILL.md +31 -16
- package/resources/claude-customizations/.claude/skills/feature-review-workflow/SKILL.md +21 -9
- package/resources/claude-customizations/.claude/skills/invoke-csharp-engineer/SKILL.md +5 -5
- package/resources/claude-customizations/.claude/skills/invoke-powershell-engineer/SKILL.md +4 -4
- package/resources/claude-customizations/.claude/skills/invoke-python-engineer/SKILL.md +4 -4
- package/resources/claude-customizations/.claude/skills/orchestrate/SKILL.md +24 -2
- package/resources/claude-customizations/.claude/skills/parallel-add/SKILL.md +71 -7
- package/resources/claude-customizations/.claude/skills/parallel-orchestrate/SKILL.md +34 -2
- package/resources/claude-customizations/.claude/skills/parallel-plan/SKILL.md +82 -12
- package/resources/claude-customizations/.claude/skills/powershell-qa-gate/SKILL.md +16 -17
- package/resources/claude-customizations/.claude/skills/python-qa-gate/SKILL.md +15 -16
- package/resources/claude-customizations/.claude/skills/remediation-handoff-atomic-planner/SKILL.md +1 -1
- package/resources/claude-customizations/.claude-variants/csharp-legacy/agents/csharp-typed-engineer.md +6 -6
- package/resources/claude-customizations/.claude-variants/csharp-legacy/skills/csharp-qa-gate/SKILL.md +13 -14
- package/resources/claude-customizations/.claude-variants/csharp-legacy/skills/invoke-csharp-engineer/SKILL.md +4 -4
- package/resources/claude-customizations/pack-manifests/core.json +15 -0
- package/resources/codex-and-agents-customizations/.agents/skills/atomic-plan-contract/SKILL.md +8 -12
- package/resources/codex-and-agents-customizations/.agents/skills/atomic-planner/SKILL.md +1 -1
- package/resources/codex-and-agents-customizations/.agents/skills/csharp-qa-gate/SKILL.md +13 -14
- package/resources/codex-and-agents-customizations/.agents/skills/execution-environment/SKILL.md +31 -16
- package/resources/codex-and-agents-customizations/.agents/skills/feature-review/SKILL.md +5 -1
- package/resources/codex-and-agents-customizations/.agents/skills/feature-review-workflow/SKILL.md +18 -5
- package/resources/codex-and-agents-customizations/.agents/skills/invoke-csharp-engineer/SKILL.md +4 -4
- package/resources/codex-and-agents-customizations/.agents/skills/invoke-powershell-engineer/SKILL.md +4 -4
- package/resources/codex-and-agents-customizations/.agents/skills/invoke-python-engineer/SKILL.md +4 -4
- package/resources/codex-and-agents-customizations/.agents/skills/orchestrate/SKILL.md +24 -2
- package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-state/SKILL.md +16 -1
- package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-workflow/SKILL.md +3 -3
- package/resources/codex-and-agents-customizations/.agents/skills/powershell/SKILL.md +2 -2
- package/resources/codex-and-agents-customizations/.agents/skills/powershell-qa-gate/SKILL.md +15 -16
- package/resources/codex-and-agents-customizations/.agents/skills/python-qa-gate/SKILL.md +14 -15
- package/resources/codex-and-agents-customizations/.agents/skills/repo-automation-adapter/SKILL.md +2 -0
- package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/csharp-qa-gate/SKILL.md +13 -14
- package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/invoke-csharp-engineer/SKILL.md +4 -4
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c1.toml +3 -3
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c2.toml +3 -3
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3-elevated.toml +3 -3
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3.toml +3 -3
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c4.toml +3 -3
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor.toml +3 -3
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c1.toml +2 -2
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c2.toml +2 -2
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3-elevated.toml +2 -2
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3.toml +2 -2
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c4.toml +2 -2
- package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner.toml +2 -2
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-atomic-executor.toml +2 -2
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-atomic-planning.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-orchestrator.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c1.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c2.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c3-elevated.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c3.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c4.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/agents/feature-review.toml +2 -2
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-atomic-executor.toml +2 -2
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-atomic-planning.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-di-unit-test-engineer.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-orchestrator.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c1.toml +7 -7
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c2.toml +7 -7
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c3-elevated.toml +7 -7
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c3.toml +7 -7
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c4.toml +7 -7
- package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer.toml +7 -7
- package/resources/codex-and-agents-customizations/.codex/agents/pytest-unit-test-coding.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/agents/python-atomic-executor.toml +2 -2
- package/resources/codex-and-agents-customizations/.codex/agents/python-atomic-planning.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/agents/python-execution-only-typed.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/agents/python-orchestrator.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c1.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c2.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c3-elevated.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c3.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c4.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer.toml +6 -6
- package/resources/codex-and-agents-customizations/.codex/config.toml +1 -1
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-merge-gate-review.ps1 +699 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-merge-gate.ps1 +29 -2
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-cleanup.ps1 +481 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate.ps1 +4 -2
- package/resources/codex-and-agents-customizations/.codex/hooks/hook-cleanup-context.ps1 +343 -0
- package/resources/codex-and-agents-customizations/.codex/hooks/validate-feature-review-coverage.ps1 +51 -4
- package/resources/codex-and-agents-customizations/.codex-variants/csharp-legacy/agents/csharp-typed-engineer.toml +6 -6
- package/resources/codex-and-agents-customizations/pack-manifests/core.json +3 -0
- package/resources/customizations/.github/agents/5.1-Beast-adjusted.agent.md +1 -1
- package/resources/customizations/.github/agents/Powershell DI Unit Test Engineer.agent.md +20 -26
- package/resources/customizations/.github/agents/atomic_executor.agent.md +4 -4
- package/resources/customizations/.github/agents/atomic_planning.agent.md +4 -4
- package/resources/customizations/.github/agents/commentary-remediation.agent.md +1 -1
- package/resources/customizations/.github/agents/commit-steward.agent.md +1 -1
- package/resources/customizations/.github/agents/csharp-atomic-executor.agent.md +14 -14
- package/resources/customizations/.github/agents/csharp-atomic-planning.agent.md +2 -2
- package/resources/customizations/.github/agents/csharp-orchestrator.agent.md +4 -4
- package/resources/customizations/.github/agents/csharp-typed-engineer.agent.md +19 -22
- package/resources/customizations/.github/agents/epic-review.agent.md +1 -1
- package/resources/customizations/.github/agents/gpt-5-beast-mode.agent.md +3 -3
- package/resources/customizations/.github/agents/orchestrator.agent.md +8 -8
- package/resources/customizations/.github/agents/powershell-atomic-executor.agent.md +12 -12
- package/resources/customizations/.github/agents/powershell-atomic-planning.agent.md +4 -4
- package/resources/customizations/.github/agents/powershell-orchestrator.agent.md +6 -6
- package/resources/customizations/.github/agents/powershell-typed-engineer.agent.md +21 -24
- package/resources/customizations/.github/agents/pytest-unit-test-coding.agent.md +13 -17
- package/resources/customizations/.github/agents/python-atomic-executor.agent.md +11 -11
- package/resources/customizations/.github/agents/python-atomic-planning.agent.md +2 -2
- package/resources/customizations/.github/agents/python-execution-only-typed.agent.md +14 -17
- package/resources/customizations/.github/agents/python-orchestrator.agent.md +7 -7
- package/resources/customizations/.github/agents/python-typed-engineer.agent.md +17 -20
- package/resources/customizations/.github/agents/staged-review.agent.md +2 -2
- package/resources/customizations/.github/agents/tdd-green.agent.md +1 -1
- package/resources/customizations/.github/agents/tdd-red.agent.md +3 -3
- package/resources/customizations/.github/agents/tdd-refactor.agent.md +2 -2
- package/resources/customizations/.github/agents/typescript-engineer.agent.md +3 -3
- package/resources/customizations/.github/codex/execute-hard-lock.prompt.md +3 -3
- package/resources/customizations/.github/instructions/general-code-change.instructions.md +1 -1
- package/resources/customizations/.github/instructions/powershell-unit-test.instructions.md +1 -1
- package/resources/customizations/.github/instructions/python-code-change.instructions.md +5 -5
- package/resources/customizations/.github/instructions/python-suppressions.instructions.md +3 -3
- package/resources/customizations/.github/instructions/python-unit-test.instructions.md +1 -1
- package/resources/customizations/.github/prompts/execute-hard-lock.prompt.md +2 -2
- package/resources/customizations/.github/prompts/generate-commit-message-repo.prompt.md +2 -2
- package/resources/customizations/.github/prompts/remediate-comments.prompt.md +2 -2
- package/resources/customizations/.github/prompts/review-feature.prompt.md +1 -1
- package/resources/customizations/.github/skills/atomic-plan-contract/SKILL.md +8 -12
- package/resources/customizations/.github/skills/execution-environment/SKILL.md +31 -16
- package/resources/customizations/.github/skills/feature-review-workflow/SKILL.md +15 -2
- package/resources/feature-templates/bug/plan.yyyy-MM-ddTHH-mm.md +4 -4
- package/resources/feature-templates/feature/plan.yyyy-MM-ddTHH-mm.md +3 -3
- package/resources/feature-templates/refactor/plan.yyyy-MM-ddTHH-mm.md +2 -2
- package/resources/powershell/PoshQC/PoshQC.ScanConfig.psm1 +3 -1
- package/resources/powershell/PoshQC/PoshQC.Testing.psm1 +14 -12
- package/resources/powershell/PoshQC/PoshQC.psm1 +3 -3
- package/resources/powershell/PoshQC/README.md +8 -8
- package/resources/powershell/PoshQC/settings/pester.runsettings.psd1 +2 -2
- package/resources/templates/policy_audit/AGENTS.md +9 -10
- package/resources/templates/policy_audit/policy-audit.yyyy-MM-ddTHH-mm.md +19 -20
|
@@ -183,10 +183,11 @@ function Invoke-PoshQCTest {
|
|
|
183
183
|
[scriptblock] $EnsureModule = {
|
|
184
184
|
param([string] $Name, [string] $ErrorMessage, [string] $MinimumVersion, [string] $MaximumVersion)
|
|
185
185
|
# Issue #953 (CR-1): only an installed version inside the supported range counts as present, so a host
|
|
186
|
-
# whose only Pester is
|
|
186
|
+
# whose only Pester is 7.x or the inbox 3.4.0 receives the actionable message instead of an import error.
|
|
187
187
|
if (-not (Get-Module -ListAvailable -FullyQualifiedName @{ ModuleName = $Name; ModuleVersion = $MinimumVersion; MaximumVersion = $MaximumVersion })) { throw $ErrorMessage }
|
|
188
|
-
# Import globally so Pester's Describe/It/Mock resolve in test containers
|
|
189
|
-
#
|
|
188
|
+
# Import globally so Pester's Describe/It/Mock resolve in test containers. Under the default
|
|
189
|
+
# $InvokePester trampoline, test code runs in this module's session state, not the global
|
|
190
|
+
# session state (issue #392; see the $InvokePester comment for the Mock consequence).
|
|
190
191
|
# Issue #953 (D8, CR-2): -MinimumVersion and -MaximumVersion keep the import inside the supported range.
|
|
191
192
|
Import-Module $Name -Global -MinimumVersion $MinimumVersion -MaximumVersion $MaximumVersion -ErrorAction Stop
|
|
192
193
|
},
|
|
@@ -286,14 +287,15 @@ function Invoke-PoshQCTest {
|
|
|
286
287
|
},
|
|
287
288
|
[scriptblock] $InvokePester = {
|
|
288
289
|
param($Config)
|
|
289
|
-
#
|
|
290
|
-
# not
|
|
291
|
-
#
|
|
292
|
-
#
|
|
293
|
-
#
|
|
294
|
-
#
|
|
295
|
-
#
|
|
296
|
-
# removes the temporary global function so no state leaks between suite
|
|
290
|
+
# Run Invoke-Pester through a temporary global function built with [scriptblock]::Create,
|
|
291
|
+
# so the function itself is not bound to this module's session state (issue #392). The
|
|
292
|
+
# discovered test code nevertheless runs in this module's session state: a test reports
|
|
293
|
+
# $ExecutionContext.SessionState.Module as PoshQC here, and $null under a plain
|
|
294
|
+
# Invoke-Pester run. Consequence: after a test re-imports PoshQC, Mock -ModuleName PoshQC
|
|
295
|
+
# from test code does not reach the re-imported instance; such a test runs its body in
|
|
296
|
+
# InModuleScope PoshQC and mocks without -ModuleName (observed in issue #1067). The
|
|
297
|
+
# try/finally pair removes the temporary global function so no state leaks between suite
|
|
298
|
+
# invocations.
|
|
297
299
|
$trampoline = [scriptblock]::Create('param($c) Invoke-Pester -Configuration $c')
|
|
298
300
|
$null = New-Item -Path 'function:global:Invoke-PoshQCPesterRun' -Value $trampoline -Force
|
|
299
301
|
try {
|
|
@@ -325,7 +327,7 @@ function Invoke-PoshQCTest {
|
|
|
325
327
|
$Root = [IO.Path]::GetFullPath([IO.Path]::Combine($PWD.ProviderPath, $Root))
|
|
326
328
|
}
|
|
327
329
|
|
|
328
|
-
& $EnsureModule 'Pester' "Pester is not installed in the supported range (
|
|
330
|
+
& $EnsureModule 'Pester' "Pester is not installed in the supported range (6.2.0 to 6.99.99). Run Install-PoshQCTool (alias Install-PoshQCTools) first." '6.2.0' '6.99.99'
|
|
329
331
|
|
|
330
332
|
if (-not (& $TestPathExists $SettingsPath)) {
|
|
331
333
|
throw "Settings not found: $SettingsPath"
|
|
@@ -53,9 +53,9 @@ function Install-PoshQCTool {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
$requiredModules = @(
|
|
56
|
-
@{ Name = 'PSScriptAnalyzer'; Version = '1.
|
|
57
|
-
#
|
|
58
|
-
@{ Name = 'Pester'; Version = '
|
|
56
|
+
@{ Name = 'PSScriptAnalyzer'; Version = '1.25.0' },
|
|
57
|
+
# The selected Pester 6 range excludes the next major until separately validated (issue #1082).
|
|
58
|
+
@{ Name = 'Pester'; Version = '6.2.0'; UpperBound = '7.0.0' }
|
|
59
59
|
)
|
|
60
60
|
|
|
61
61
|
# Issue #953 (CR-3): one version-range predicate serves the present check and the post-install check.
|
|
@@ -6,14 +6,14 @@ PoshQC is a lightweight PowerShell quality gate that wraps Invoke-Formatter, PSS
|
|
|
6
6
|
|
|
7
7
|
- Formats PowerShell code with consistent indentation and pipeline alignment.
|
|
8
8
|
- Lints with PSScriptAnalyzer using a strict, dual-runtime ruleset.
|
|
9
|
-
- Runs Pester tests with code coverage (
|
|
9
|
+
- Runs Pester tests with code coverage (JaCoCo output), plus an optional Koverage-friendly copy.
|
|
10
10
|
- Provides a single suite entry point that can format, analyze, and test a selected workspace scope.
|
|
11
11
|
- Provides a one-time dependency installer for PSScriptAnalyzer and Pester.
|
|
12
12
|
|
|
13
13
|
## Requirements
|
|
14
14
|
|
|
15
15
|
- PowerShell 5.1 or 7.6+
|
|
16
|
-
- Modules: PSScriptAnalyzer 1.
|
|
16
|
+
- Modules: PSScriptAnalyzer 1.25.0, Pester 6.2.0 or later, below 7.0 (installed automatically via the helper if missing)
|
|
17
17
|
|
|
18
18
|
## Getting started
|
|
19
19
|
|
|
@@ -48,7 +48,7 @@ PoshQC is a lightweight PowerShell quality gate that wraps Invoke-Formatter, PSS
|
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
- Writes JUnit XML to `artifacts/pester/pester-junit.xml`.
|
|
51
|
-
- Writes
|
|
51
|
+
- Writes JaCoCo XML to `artifacts/pester/powershell-coverage.xml`.
|
|
52
52
|
- Also emits `*.koverage.xml` (relative paths) for VS Code Coverage Gutters and Koverage. Disable with `-DisableKoverageCopy` or override the path with `-KoverageOutputPath`.
|
|
53
53
|
|
|
54
54
|
## Functions
|
|
@@ -63,7 +63,7 @@ PoshQC is a lightweight PowerShell quality gate that wraps Invoke-Formatter, PSS
|
|
|
63
63
|
- `New-PoshQCShardManifest`: build the in-memory shard manifest (`shardIndex`, `shardCount`, `all`, `selected`, `selectedFullPath`).
|
|
64
64
|
- `Test-PoshQCShardCompleteness`: throw unless a set of shard manifests selects every test file exactly once.
|
|
65
65
|
- `Test-PoshQCShardTestCount`: throw unless the shard test counts sum to a discovery-pass test count.
|
|
66
|
-
- `Merge-PoshQCCoverageReport`: merge the
|
|
66
|
+
- `Merge-PoshQCCoverageReport`: merge the JaCoCo XML texts of the shards at LINE granularity (no file I/O, no threshold).
|
|
67
67
|
- `Get-PoshQCCoverageLineSummary`: return covered, missed, total, and percent from a report's LINE counter.
|
|
68
68
|
- `Invoke-PoshQCParallelTest`: run the Pester suite as concurrent shard processes on one machine and merge the results (see Local concurrent runs below).
|
|
69
69
|
- `Get-PoshQCParallelWorkerCount`: return the default worker count, half the logical processors, at least 1 and at most 8.
|
|
@@ -75,8 +75,8 @@ PoshQC is a lightweight PowerShell quality gate that wraps Invoke-Formatter, PSS
|
|
|
75
75
|
- PSScriptAnalyzer settings: `./settings/pssa.settings.psd1`
|
|
76
76
|
- Enforces compatible syntax for 5.1 and 7.6, 4-space indentation, ShouldProcess for state-changing functions, and safety guards (no Invoke-Expression, no global vars, etc.).
|
|
77
77
|
- Pester settings: `./settings/pester.runsettings.psd1`
|
|
78
|
-
- Runs tests under `scripts` and `tests/powershell`, outputs JUnit XML and
|
|
79
|
-
- Coverage uses Pester's profiler-based mode (`CodeCoverage.UseBreakpoints = $false`, issue #953), which needs Pester
|
|
78
|
+
- Runs tests under `scripts` and `tests/powershell`, outputs JUnit XML and JaCoCo coverage, and enables coverage. The shipped runsettings carry no `CodeCoverage.Path` list; `Invoke-PoshQCTest` derives the coverage population from the workspace (see Coverage population below).
|
|
79
|
+
- Coverage uses Pester's profiler-based mode (`CodeCoverage.UseBreakpoints = $false`, issue #953), which needs Pester 6.2 or later and is faster than breakpoint mode on the same coverage population. The PoshQC suites target PowerShell 7; profiler mode under Windows PowerShell 5.1 is not exercised in CI. To use breakpoint mode, pass a settings file with `UseBreakpoints = $true` through `-SettingsPath`.
|
|
80
80
|
- When `-ScanFolders` is supplied to `Invoke-PoshQCSuite` or the lower-level commands, the suite narrows discovery to those workspace-relative or workspace-contained folders.
|
|
81
81
|
- Coverage population (issue #527): `Invoke-PoshQCTest` measures the same file set for the same workspace whichever module copy is loaded.
|
|
82
82
|
- Workspace configuration: `config/poshqc-coverage.json` with the schema `{"version": 1, "roots": [...]}`. Each root is a workspace-relative folder. The file is validated fail-fast, and every error names `config/poshqc-coverage.json`: empty content, invalid JSON, a `version` other than 1, a missing or non-array `roots`, and a blank, absolute, or `..`-segment entry are rejected. An empty `roots` array yields an empty population.
|
|
@@ -98,7 +98,7 @@ PoshQC is a lightweight PowerShell quality gate that wraps Invoke-Formatter, PSS
|
|
|
98
98
|
- A shard that selects no test file (more shards than test files) stops with an error before Pester runs.
|
|
99
99
|
- `Merge-PoshQCCoverageReport` merges the shard reports with `ci = max(ci)` per line and recomputes the LINE and INSTRUCTION counters, so the merged LINE figures are exact. It omits `class` and `method` elements and METHOD and CLASS counters, because those cannot be recomputed from line hits.
|
|
100
100
|
- Output-path parameters (issue #1048): `Invoke-PoshQCTest -TestResultPath <path> -CoverageOutputPath <path>` replace the JUnit and coverage output paths of the settings file for one invocation; a relative path is resolved against `-Root`. When a parameter is omitted or blank, the settings value is used.
|
|
101
|
-
- Local concurrent runs (issue #1048): `Invoke-PoshQCParallelTest -Root . [-WorkerCount <n>]` runs the suite as concurrent shard processes on one machine.
|
|
101
|
+
- Local concurrent runs (issue #1048): `Invoke-PoshQCParallelTest -Root . [-WorkerCount <n>]` runs the suite as concurrent shard processes on one machine. Each shard runs Pester 6 in a separate `pwsh` process; the VS Code task `PoshQC: 4 test (Pester, parallel)` runs it.
|
|
102
102
|
- The worker count defaults to half the logical processor count, at least 1 and at most 8 (`Get-PoshQCParallelWorkerCount`); `-WorkerCount` overrides it.
|
|
103
103
|
- Each shard runs `Invoke-PoshQCTest -ShardIndex <i> -ShardCount <N>` with its JUnit, coverage, and manifest files and its console log (`shard.log`, standard error in `shard.log.err`) under `artifacts/pester/parallel/shard-<i>/`.
|
|
104
104
|
- After every shard has exited, the runner checks the manifests with `Test-PoshQCShardCompleteness`, merges the JUnit reports with `Merge-PoshQCJunitReport` and the coverage reports with `Merge-PoshQCCoverageReport`, and writes `artifacts/pester/pester-junit.xml`, `artifacts/pester/powershell-coverage.xml`, and the `powershell-coverage.koverage.xml` copy.
|
|
@@ -109,7 +109,7 @@ PoshQC is a lightweight PowerShell quality gate that wraps Invoke-Formatter, PSS
|
|
|
109
109
|
|
|
110
110
|
- Day-to-day: run `Invoke-PoshQCFormat`, `Invoke-PoshQCAnalyze`, then `Invoke-PoshQCTest` before committing.
|
|
111
111
|
- Bundled / scoped: run `Invoke-PoshQCSuite -Root . -ScanFolders @('scripts', 'tests/powershell')` when you want the suite to focus on selected workspace folders.
|
|
112
|
-
- CI: call `Invoke-PoshQCTest` to get tests + coverage and consume JUnit/
|
|
112
|
+
- CI: call `Invoke-PoshQCTest` to get tests + coverage and consume JUnit/JaCoCo artifacts.
|
|
113
113
|
|
|
114
114
|
## Notes for standalone use
|
|
115
115
|
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
}
|
|
17
17
|
CodeCoverage = @{
|
|
18
18
|
Enabled = $true
|
|
19
|
-
# Use Pester's
|
|
19
|
+
# Use Pester's JaCoCo format so VS Code Coverage Gutters
|
|
20
20
|
# can map file paths correctly.
|
|
21
|
-
OutputFormat = '
|
|
21
|
+
OutputFormat = 'JaCoCo'
|
|
22
22
|
OutputPath = 'artifacts/pester/powershell-coverage.xml'
|
|
23
23
|
# Issue #527: no Path list. Invoke-PoshQCTest derives the coverage population from the
|
|
24
24
|
# workspace (config/poshqc-coverage.json, else the effective test scan folders); see README.md.
|
|
@@ -42,9 +42,8 @@ When performing a policy audit:
|
|
|
42
42
|
When asked to perform a Policy Audit for a component, branch, or PR:
|
|
43
43
|
|
|
44
44
|
1. **Identify scope**
|
|
45
|
-
- Determine what is being audited (e.g., "fix-all.ps1 unit tests", "
|
|
45
|
+
- Determine what is being audited (e.g., "fix-all.ps1 unit tests", "scoring pipeline refactor", "new Python module X").
|
|
46
46
|
- Identify the relevant code files and test files.
|
|
47
|
-
- **Document baseline coverage BEFORE making changes** (if development has not yet started, or shelve changes temporarily to establish baseline).
|
|
48
47
|
|
|
49
48
|
2. **Create an audit document**
|
|
50
49
|
- Generate a timestamp in ISO-8601 format `yyyy-MM-ddTHH-mm` (e.g., "2026-01-08T14-30" for Jan 8, 2026 at 2:30 PM).
|
|
@@ -57,7 +56,7 @@ When asked to perform a Policy Audit for a component, branch, or PR:
|
|
|
57
56
|
- Fill in the Coverage Metrics by Language table with one row per language.
|
|
58
57
|
- Complete all applicable language sections (3A, 3B, 3C, 3D for code; 4A, 4B for tests).
|
|
59
58
|
- Delete sections for languages NOT involved in this change.
|
|
60
|
-
-
|
|
59
|
+
- Record each retained baseline field as `N/A - no pre-change run`.
|
|
61
60
|
- Add one per-language comparison bullet for every in-scope language that has coverage requirements.
|
|
62
61
|
|
|
63
62
|
3. **Evaluate policy compliance**
|
|
@@ -69,17 +68,17 @@ When asked to perform a Policy Audit for a component, branch, or PR:
|
|
|
69
68
|
- Record **status** (`✅ PASS`, `⚠️ PARTIAL`, `❌ FAIL`, `N/A`) and **evidence** in the appropriate table rows.
|
|
70
69
|
- **For multi-language changes:**
|
|
71
70
|
- Run each language's toolchain separately and document results in its section.
|
|
72
|
-
- **Python:** Black → Ruff → Pyright →
|
|
73
|
-
- **PowerShell:** Invoke-PoshQCFormat → Invoke-PoshQCAnalyze → Invoke-
|
|
71
|
+
- **Python:** Black → Ruff → Pyright → `poetry run pytest -n auto` (with coverage)
|
|
72
|
+
- **PowerShell:** Invoke-PoshQCFormat → Invoke-PoshQCAnalyze → Invoke-PoshQCParallelTest (with coverage)
|
|
74
73
|
- **Bash:** shfmt → shellcheck → bats (coverage N/A)
|
|
75
74
|
- **JSON:** format_json → validate_json (coverage N/A)
|
|
76
75
|
- **For coverage metrics (Python and PowerShell only):**
|
|
77
|
-
-
|
|
76
|
+
- Read each changed file from the single gate run and compare it with the coverage thresholds (per language).
|
|
78
77
|
- Isolate and measure coverage of new/modified code only (must be ≥90% per language).
|
|
79
|
-
- Use concrete examples showing calculations: "
|
|
78
|
+
- Use concrete examples showing calculations: "Post-change: 87.1% against the 85% line threshold ✅"
|
|
80
79
|
- **Fail-closed evidence handling:**
|
|
81
|
-
- No policy audit may report PASS unless it includes numeric
|
|
82
|
-
- If any required
|
|
80
|
+
- No policy audit may report PASS unless it includes numeric post-change coverage metrics for every language in scope, plus changed/new-code coverage when required.
|
|
81
|
+
- If any required QA artifact or post-change coverage metric is missing, the verdict must be BLOCKED or INCOMPLETE, never PASS.
|
|
83
82
|
- Do not synthesize or backfill missing audit evidence from memory or inference.
|
|
84
83
|
- If evidence is missing, stop and report the exact missing artifact paths.
|
|
85
84
|
- **For scenario testing:**
|
|
@@ -105,7 +104,7 @@ When asked to perform a Policy Audit for a component, branch, or PR:
|
|
|
105
104
|
6. **Summarize and recommend**
|
|
106
105
|
- Complete the summary sections at the end of the template:
|
|
107
106
|
- Policy-by-policy summary
|
|
108
|
-
- Metrics summary (with deterministic
|
|
107
|
+
- Metrics summary (with deterministic post-change and new code coverage)
|
|
109
108
|
- Recommendation (`Ready for merge`, `Needs revision`, or `Blocked`)
|
|
110
109
|
- Ensure the final audit document is consistent with the underlying evidence and toolchain output.
|
|
111
110
|
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
|
|
31
31
|
| Language | Files Changed | Tests | Test Result | Baseline Coverage | Post-Change Coverage | New Code Coverage |
|
|
32
32
|
|----------|--------------|-------|-------------|-------------------|---------------------|-------------------|
|
|
33
|
-
| Python | [N] files | [N] tests | [✅/❌] [N] pass, [N] fail |
|
|
34
|
-
| PowerShell | [N] files | [N] tests | [✅/❌] [N] pass, [N] fail |
|
|
33
|
+
| Python | [N] files | [N] tests | [✅/❌] [N] pass, [N] fail | N/A - no pre-change run | [N]% lines, [N]% funcs | [N]% |
|
|
34
|
+
| PowerShell | [N] files | [N] tests | [✅/❌] [N] pass, [N] fail | N/A - no pre-change run | [N]% cmds, [N]% funcs | [N]% |
|
|
35
35
|
| Bash | [N] files | [N/A] tests | [✅/❌/N/A] | N/A (no coverage) | N/A (no coverage) | N/A |
|
|
36
36
|
| JSON | [N] files | N/A | [✅/❌] validation | N/A (config files) | N/A (config files) | N/A |
|
|
37
37
|
|
|
@@ -39,15 +39,15 @@
|
|
|
39
39
|
|
|
40
40
|
### Coverage Evidence Checklist
|
|
41
41
|
|
|
42
|
-
- TypeScript baseline coverage artifact:
|
|
42
|
+
- TypeScript baseline coverage artifact: N/A - no pre-change run
|
|
43
43
|
- TypeScript post-change coverage artifact: [path or `N/A - out of scope`]
|
|
44
|
-
- PowerShell baseline coverage artifact:
|
|
44
|
+
- PowerShell baseline coverage artifact: N/A - no pre-change run
|
|
45
45
|
- PowerShell post-change coverage artifact: [path or `N/A - out of scope`]
|
|
46
46
|
- Per-language comparison summary: [section reference or artifact path]
|
|
47
47
|
|
|
48
|
-
**Non-negotiable verdict rule:** No policy audit may report PASS unless it includes numeric
|
|
48
|
+
**Non-negotiable verdict rule:** No policy audit may report PASS unless it includes numeric post-change coverage metrics for every language in scope, plus changed/new-code coverage when required.
|
|
49
49
|
|
|
50
|
-
**Fail-closed rule:** If any required
|
|
50
|
+
**Fail-closed rule:** If any required QA artifact or post-change coverage metric is missing, the verdict must be BLOCKED or INCOMPLETE, never PASS.
|
|
51
51
|
|
|
52
52
|
**Evidence rule:** Do not synthesize or backfill missing audit evidence from memory or inference. If evidence is missing, stop and list the exact missing artifact paths.
|
|
53
53
|
|
|
@@ -94,8 +94,7 @@
|
|
|
94
94
|
|
|
95
95
|
| Requirement | Status | Evidence |
|
|
96
96
|
|------------|--------|----------|
|
|
97
|
-
| **
|
|
98
|
-
| **No Coverage Regression** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Post-change coverage:** [N]% lines, [N]% functions<br>**Change:** [+/-N]% lines, [+/-N]% functions<br>**Status:** [No regression / Regression detected: justification]<br>**Example:** "Baseline: 85.2% → Post-change: 87.1% (+1.9%) ✅ PASS" |
|
|
97
|
+
| **Changed Files Meet Thresholds** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Post-change coverage:** [N]% lines, [N]% functions, read from the single gate run<br>**Thresholds:** [line and branch thresholds that apply]<br>**Status:** [All changed files meet the thresholds / Files below a threshold: list]<br>**Example:** "Post-change: 87.1% against the 85% line threshold ✅ PASS" |
|
|
99
98
|
| **New Code Coverage ≥90%** | [✅/❌/N/A] [PASS/FAIL/N/A] | **New/modified files:** [list files]<br>**New code coverage:** [N]% (must be ≥90%)<br>**Calculation method:** [describe how new code was isolated for measurement]<br>**Example:** "New module `foo.py`: 127/135 lines covered = 94.1% ✅ PASS" |
|
|
100
99
|
| **Comprehensive Coverage** | [✅/❌/N/A] [PASS/FAIL/N/A] | **All functions/classes tested:**<br>- `function_name()` (lines X-Y): [N] tests<br>- `ClassName` (lines A-B): [N] tests<br>**Untested code:** [list with justification]<br>**Example:**<br>- `parse_config()` (lines 45-67): 3 tests<br>- `ConfigLoader` (lines 100-150): 5 tests<br>- Untested: `__repr__()` (trivial representation, no business logic) |
|
|
101
100
|
| **Positive Flows** - Valid inputs | [✅/❌/N/A] [PASS/FAIL/N/A] | **All positive scenarios tested:**<br>- `test_function_with_valid_string`: Tests normal string input → returns expected output<br>- `test_function_with_valid_number`: Tests numeric input in valid range → performs calculation<br>- `test_function_with_default_params`: Tests function with default parameters → uses correct defaults<br>**Total positive tests:** [N] |
|
|
@@ -109,7 +108,7 @@
|
|
|
109
108
|
|
|
110
109
|
Repeat one bullet per in-scope language that has coverage requirements. Keep the checklist above even when a language is out of scope, but use `N/A - out of scope` for the artifact path.
|
|
111
110
|
|
|
112
|
-
- [Language]: Baseline:
|
|
111
|
+
- [Language]: Baseline: N/A - no pre-change run -> Post-change: [N]% [unit]. Change: N/A. New/changed-code coverage: [N]% or `N/A - out of scope`. Disposition: [PASS/FAIL/N/A]. Evidence: [artifact path(s)].
|
|
113
112
|
|
|
114
113
|
### 1.3 Test Structure and Diagnostics
|
|
115
114
|
|
|
@@ -208,7 +207,7 @@ Repeat one bullet per in-scope language that has coverage requirements. Keep the
|
|
|
208
207
|
| **Formatting with Black** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Command:** `poetry run black .`<br>**Result:** [Describe result] |
|
|
209
208
|
| **Linting with Ruff** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Command:** `poetry run ruff check`<br>**Result:** [Describe result] |
|
|
210
209
|
| **Type checking with Pyright** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Command:** `poetry run pyright`<br>**Result:** [Describe result] |
|
|
211
|
-
| **Testing with Pytest** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Command:** `poetry run pytest`<br>**Result:** [Describe result] |
|
|
210
|
+
| **Testing with Pytest** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Command:** `poetry run pytest -n auto`<br>**Result:** [Describe result] |
|
|
212
211
|
|
|
213
212
|
#### 3A.2 Python Design & Typing
|
|
214
213
|
|
|
@@ -342,7 +341,7 @@ Repeat one bullet per in-scope language that has coverage requirements. Keep the
|
|
|
342
341
|
|
|
343
342
|
| Requirement | Status | Evidence |
|
|
344
343
|
|------------|--------|----------|
|
|
345
|
-
| **Use Pytest** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Command:** `poetry run pytest`<br>**Result:** [Describe test results] |
|
|
344
|
+
| **Use Pytest** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Command:** `poetry run pytest -n auto`<br>**Result:** [Describe test results] |
|
|
346
345
|
| **No Alternative Test Runners** | [✅/❌/N/A] [PASS/FAIL/N/A] | [Confirm only Pytest is used.] |
|
|
347
346
|
|
|
348
347
|
---
|
|
@@ -353,8 +352,8 @@ Repeat one bullet per in-scope language that has coverage requirements. Keep the
|
|
|
353
352
|
|
|
354
353
|
| Requirement | Status | Evidence |
|
|
355
354
|
|------------|--------|----------|
|
|
356
|
-
| **Use Pester
|
|
357
|
-
| **Use PoshQC Configuration** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Command:** `Invoke-
|
|
355
|
+
| **Use Pester v6.x** | [✅/❌/N/A] [PASS/FAIL/N/A] | [Describe Pester v6 features used (BeforeAll, BeforeEach, Describe/Context/It, modern Should syntax).] |
|
|
356
|
+
| **Use PoshQC Configuration** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Command:** `Invoke-PoshQCParallelTest -Root .`<br>**Config:** `scripts/powershell/PoshQC/settings/pester.runsettings.psd1`<br>[Describe configuration updates if any.] |
|
|
358
357
|
| **PowerShell 5.1 & 7.6+ Compatible** | [✅/❌/N/A] [PASS/FAIL/N/A] | [Describe compatibility testing. Note any version-specific features.] |
|
|
359
358
|
|
|
360
359
|
#### 4B.2 Test Style and Structure
|
|
@@ -379,7 +378,7 @@ Repeat one bullet per in-scope language that has coverage requirements. Keep the
|
|
|
379
378
|
|
|
380
379
|
| Requirement | Status | Evidence |
|
|
381
380
|
|------------|--------|----------|
|
|
382
|
-
| **Use PoshQCTest Command** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Command:** `Invoke-
|
|
381
|
+
| **Use PoshQCTest Command** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Command:** `Invoke-PoshQCParallelTest -Root .`<br>**Result:** [Describe test results] |
|
|
383
382
|
| **No Alternative Test Runners** | [✅/❌/N/A] [PASS/FAIL/N/A] | [Confirm only Pester is used through PoshQC.] |
|
|
384
383
|
|
|
385
384
|
---
|
|
@@ -438,7 +437,7 @@ Repeat one bullet per in-scope language that has coverage requirements. Keep the
|
|
|
438
437
|
| Black Formatting | `poetry run black .` | [result] | [✅/❌] |
|
|
439
438
|
| Ruff Linting | `poetry run ruff check` | [result] | [✅/❌] |
|
|
440
439
|
| Pyright Type Checking | `poetry run pyright` | [result] | [✅/❌] |
|
|
441
|
-
| Pytest Tests | `poetry run pytest` | [result] | [✅/❌] |
|
|
440
|
+
| Pytest Tests | `poetry run pytest -n auto` | [result] | [✅/❌] |
|
|
442
441
|
|
|
443
442
|
**For PowerShell:**
|
|
444
443
|
|
|
@@ -446,7 +445,7 @@ Repeat one bullet per in-scope language that has coverage requirements. Keep the
|
|
|
446
445
|
|-------|---------|--------|--------|
|
|
447
446
|
| Invoke-Formatter | `Invoke-PoshQCFormat -Root .` | [result] | [✅/❌] |
|
|
448
447
|
| PSScriptAnalyzer | `Invoke-PoshQCAnalyze -Root .` | [result] | [✅/❌] |
|
|
449
|
-
| Pester Tests | `Invoke-
|
|
448
|
+
| Pester Tests | `Invoke-PoshQCParallelTest -Root .` | [result] | [✅/❌] |
|
|
450
449
|
|
|
451
450
|
**Notes:**
|
|
452
451
|
[Document any pre-existing failures unrelated to this work. Explain any deviations from clean runs.]
|
|
@@ -515,7 +514,7 @@ Repeat one bullet per in-scope language that has coverage requirements. Keep the
|
|
|
515
514
|
|
|
516
515
|
[Provide a brief summary of overall compliance status and any major findings.]
|
|
517
516
|
|
|
518
|
-
**Fail-closed reminder:** Do not mark the audit PASS, fully compliant, or ready for merge when any required
|
|
517
|
+
**Fail-closed reminder:** Do not mark the audit PASS, fully compliant, or ready for merge when any required QA artifact or post-change coverage metric is missing.
|
|
519
518
|
|
|
520
519
|
---
|
|
521
520
|
|
|
@@ -626,8 +625,8 @@ poetry run ruff check --fix # auto-fix
|
|
|
626
625
|
poetry run pyright
|
|
627
626
|
|
|
628
627
|
# Testing
|
|
629
|
-
poetry run pytest
|
|
630
|
-
poetry run pytest --cov=src/[package] --cov-report=term-missing
|
|
628
|
+
poetry run pytest -n auto
|
|
629
|
+
poetry run pytest -n auto --cov=src/[package] --cov-report=term-missing
|
|
631
630
|
```
|
|
632
631
|
|
|
633
632
|
**For PowerShell:**
|
|
@@ -639,7 +638,7 @@ Import-Module ./scripts/powershell/PoshQC; Invoke-PoshQCFormat -Root .
|
|
|
639
638
|
Import-Module ./scripts/powershell/PoshQC; Invoke-PoshQCAnalyze -Root .
|
|
640
639
|
|
|
641
640
|
# Testing
|
|
642
|
-
Import-Module ./scripts/powershell/PoshQC; Invoke-
|
|
641
|
+
Import-Module ./scripts/powershell/PoshQC; Invoke-PoshQCParallelTest -Root .
|
|
643
642
|
```
|
|
644
643
|
|
|
645
644
|
---
|