@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.
Files changed (185) hide show
  1. package/out/mcp-server.js +170 -52
  2. package/package.json +1 -1
  3. package/resources/claude-customizations/.claude/agents/atomic-executor.md +3 -3
  4. package/resources/claude-customizations/.claude/agents/atomic-planner.md +2 -2
  5. package/resources/claude-customizations/.claude/agents/csharp-typed-engineer.md +7 -7
  6. package/resources/claude-customizations/.claude/agents/feature-review.md +6 -3
  7. package/resources/claude-customizations/.claude/agents/orchestrator.md +11 -7
  8. package/resources/claude-customizations/.claude/agents/parallel-orchestrator.md +7 -3
  9. package/resources/claude-customizations/.claude/agents/parallel-planner.md +6 -2
  10. package/resources/claude-customizations/.claude/agents/powershell-typed-engineer.md +7 -7
  11. package/resources/claude-customizations/.claude/agents/python-typed-engineer.md +6 -6
  12. package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate-review.ps1 +699 -0
  13. package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate.ps1 +16 -1
  14. package/resources/claude-customizations/.claude/hooks/enforce-model-routing-receipt.ps1 +41 -0
  15. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-cleanup.ps1 +481 -0
  16. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate.ps1 +3 -1
  17. package/resources/claude-customizations/.claude/hooks/enforce-parallel-cohort-barrier-helpers.ps1 +69 -3
  18. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill-helpers.ps1 +2 -2
  19. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.cleanup.ps1 +246 -0
  20. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.docs-only.ps1 +1 -0
  21. package/resources/claude-customizations/.claude/hooks/hook-cleanup-context.ps1 +343 -0
  22. package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage-rules.ps1 +50 -16
  23. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorState.psm1 +6 -1
  24. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateCompletion.psm1 +4 -2
  25. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateCompletionChecks.psm1 +51 -2
  26. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateReceipts.psm1 +5 -2
  27. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateRemediationAccounting.psm1 +116 -4
  28. package/resources/claude-customizations/.claude/lib/parallel-admission/Invoke-ParallelAdmission.ps1 +626 -0
  29. package/resources/claude-customizations/.claude/lib/parallel-admission/ParallelAdmission.psm1 +508 -0
  30. package/resources/claude-customizations/.claude/lib/parallel-admission/ParallelAdmissionJson.psm1 +141 -0
  31. package/resources/claude-customizations/.claude/lib/parallel-admission/ParallelAdmissionPrecedence.psm1 +508 -0
  32. package/resources/claude-customizations/.claude/rules/csharp.md +8 -8
  33. package/resources/claude-customizations/.claude/rules/orchestrator-state.md +28 -2
  34. package/resources/claude-customizations/.claude/rules/parallel-orchestration.md +17 -1
  35. package/resources/claude-customizations/.claude/rules/powershell.md +2 -2
  36. package/resources/claude-customizations/.claude/settings.json +1 -0
  37. package/resources/claude-customizations/.claude/skills/atomic-plan-contract/SKILL.md +9 -13
  38. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/SKILL.md +93 -14
  39. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup-worktrees.sh +23 -10
  40. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_preserve_lib.sh +54 -46
  41. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_preserve_merge_lib.sh +234 -0
  42. package/resources/claude-customizations/.claude/skills/csharp-qa-gate/SKILL.md +14 -15
  43. package/resources/claude-customizations/.claude/skills/epic-progress-report/SKILL.md +338 -0
  44. package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.Logic.ps1 +248 -0
  45. package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.Metrics.ps1 +232 -0
  46. package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.Render.ps1 +196 -0
  47. package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.State.ps1 +286 -0
  48. package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.ps1 +475 -0
  49. package/resources/claude-customizations/.claude/skills/execution-environment/SKILL.md +31 -16
  50. package/resources/claude-customizations/.claude/skills/feature-review-workflow/SKILL.md +21 -9
  51. package/resources/claude-customizations/.claude/skills/invoke-csharp-engineer/SKILL.md +5 -5
  52. package/resources/claude-customizations/.claude/skills/invoke-powershell-engineer/SKILL.md +4 -4
  53. package/resources/claude-customizations/.claude/skills/invoke-python-engineer/SKILL.md +4 -4
  54. package/resources/claude-customizations/.claude/skills/orchestrate/SKILL.md +24 -2
  55. package/resources/claude-customizations/.claude/skills/parallel-add/SKILL.md +71 -7
  56. package/resources/claude-customizations/.claude/skills/parallel-orchestrate/SKILL.md +34 -2
  57. package/resources/claude-customizations/.claude/skills/parallel-plan/SKILL.md +82 -12
  58. package/resources/claude-customizations/.claude/skills/powershell-qa-gate/SKILL.md +16 -17
  59. package/resources/claude-customizations/.claude/skills/python-qa-gate/SKILL.md +15 -16
  60. package/resources/claude-customizations/.claude/skills/remediation-handoff-atomic-planner/SKILL.md +1 -1
  61. package/resources/claude-customizations/.claude-variants/csharp-legacy/agents/csharp-typed-engineer.md +6 -6
  62. package/resources/claude-customizations/.claude-variants/csharp-legacy/skills/csharp-qa-gate/SKILL.md +13 -14
  63. package/resources/claude-customizations/.claude-variants/csharp-legacy/skills/invoke-csharp-engineer/SKILL.md +4 -4
  64. package/resources/claude-customizations/pack-manifests/core.json +15 -0
  65. package/resources/codex-and-agents-customizations/.agents/skills/atomic-plan-contract/SKILL.md +8 -12
  66. package/resources/codex-and-agents-customizations/.agents/skills/atomic-planner/SKILL.md +1 -1
  67. package/resources/codex-and-agents-customizations/.agents/skills/csharp-qa-gate/SKILL.md +13 -14
  68. package/resources/codex-and-agents-customizations/.agents/skills/execution-environment/SKILL.md +31 -16
  69. package/resources/codex-and-agents-customizations/.agents/skills/feature-review/SKILL.md +5 -1
  70. package/resources/codex-and-agents-customizations/.agents/skills/feature-review-workflow/SKILL.md +18 -5
  71. package/resources/codex-and-agents-customizations/.agents/skills/invoke-csharp-engineer/SKILL.md +4 -4
  72. package/resources/codex-and-agents-customizations/.agents/skills/invoke-powershell-engineer/SKILL.md +4 -4
  73. package/resources/codex-and-agents-customizations/.agents/skills/invoke-python-engineer/SKILL.md +4 -4
  74. package/resources/codex-and-agents-customizations/.agents/skills/orchestrate/SKILL.md +24 -2
  75. package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-state/SKILL.md +16 -1
  76. package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-workflow/SKILL.md +3 -3
  77. package/resources/codex-and-agents-customizations/.agents/skills/powershell/SKILL.md +2 -2
  78. package/resources/codex-and-agents-customizations/.agents/skills/powershell-qa-gate/SKILL.md +15 -16
  79. package/resources/codex-and-agents-customizations/.agents/skills/python-qa-gate/SKILL.md +14 -15
  80. package/resources/codex-and-agents-customizations/.agents/skills/repo-automation-adapter/SKILL.md +2 -0
  81. package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/csharp-qa-gate/SKILL.md +13 -14
  82. package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/invoke-csharp-engineer/SKILL.md +4 -4
  83. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c1.toml +3 -3
  84. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c2.toml +3 -3
  85. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3-elevated.toml +3 -3
  86. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3.toml +3 -3
  87. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c4.toml +3 -3
  88. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor.toml +3 -3
  89. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c1.toml +2 -2
  90. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c2.toml +2 -2
  91. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3-elevated.toml +2 -2
  92. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3.toml +2 -2
  93. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c4.toml +2 -2
  94. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner.toml +2 -2
  95. package/resources/codex-and-agents-customizations/.codex/agents/csharp-atomic-executor.toml +2 -2
  96. package/resources/codex-and-agents-customizations/.codex/agents/csharp-atomic-planning.toml +1 -1
  97. package/resources/codex-and-agents-customizations/.codex/agents/csharp-orchestrator.toml +1 -1
  98. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c1.toml +6 -6
  99. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c2.toml +6 -6
  100. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c3-elevated.toml +6 -6
  101. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c3.toml +6 -6
  102. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c4.toml +6 -6
  103. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer.toml +6 -6
  104. package/resources/codex-and-agents-customizations/.codex/agents/feature-review.toml +2 -2
  105. package/resources/codex-and-agents-customizations/.codex/agents/powershell-atomic-executor.toml +2 -2
  106. package/resources/codex-and-agents-customizations/.codex/agents/powershell-atomic-planning.toml +1 -1
  107. package/resources/codex-and-agents-customizations/.codex/agents/powershell-di-unit-test-engineer.toml +1 -1
  108. package/resources/codex-and-agents-customizations/.codex/agents/powershell-orchestrator.toml +1 -1
  109. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c1.toml +7 -7
  110. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c2.toml +7 -7
  111. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c3-elevated.toml +7 -7
  112. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c3.toml +7 -7
  113. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c4.toml +7 -7
  114. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer.toml +7 -7
  115. package/resources/codex-and-agents-customizations/.codex/agents/pytest-unit-test-coding.toml +1 -1
  116. package/resources/codex-and-agents-customizations/.codex/agents/python-atomic-executor.toml +2 -2
  117. package/resources/codex-and-agents-customizations/.codex/agents/python-atomic-planning.toml +1 -1
  118. package/resources/codex-and-agents-customizations/.codex/agents/python-execution-only-typed.toml +1 -1
  119. package/resources/codex-and-agents-customizations/.codex/agents/python-orchestrator.toml +1 -1
  120. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c1.toml +6 -6
  121. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c2.toml +6 -6
  122. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c3-elevated.toml +6 -6
  123. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c3.toml +6 -6
  124. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c4.toml +6 -6
  125. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer.toml +6 -6
  126. package/resources/codex-and-agents-customizations/.codex/config.toml +1 -1
  127. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-merge-gate-review.ps1 +699 -0
  128. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-merge-gate.ps1 +29 -2
  129. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-cleanup.ps1 +481 -0
  130. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate.ps1 +4 -2
  131. package/resources/codex-and-agents-customizations/.codex/hooks/hook-cleanup-context.ps1 +343 -0
  132. package/resources/codex-and-agents-customizations/.codex/hooks/validate-feature-review-coverage.ps1 +51 -4
  133. package/resources/codex-and-agents-customizations/.codex-variants/csharp-legacy/agents/csharp-typed-engineer.toml +6 -6
  134. package/resources/codex-and-agents-customizations/pack-manifests/core.json +3 -0
  135. package/resources/customizations/.github/agents/5.1-Beast-adjusted.agent.md +1 -1
  136. package/resources/customizations/.github/agents/Powershell DI Unit Test Engineer.agent.md +20 -26
  137. package/resources/customizations/.github/agents/atomic_executor.agent.md +4 -4
  138. package/resources/customizations/.github/agents/atomic_planning.agent.md +4 -4
  139. package/resources/customizations/.github/agents/commentary-remediation.agent.md +1 -1
  140. package/resources/customizations/.github/agents/commit-steward.agent.md +1 -1
  141. package/resources/customizations/.github/agents/csharp-atomic-executor.agent.md +14 -14
  142. package/resources/customizations/.github/agents/csharp-atomic-planning.agent.md +2 -2
  143. package/resources/customizations/.github/agents/csharp-orchestrator.agent.md +4 -4
  144. package/resources/customizations/.github/agents/csharp-typed-engineer.agent.md +19 -22
  145. package/resources/customizations/.github/agents/epic-review.agent.md +1 -1
  146. package/resources/customizations/.github/agents/gpt-5-beast-mode.agent.md +3 -3
  147. package/resources/customizations/.github/agents/orchestrator.agent.md +8 -8
  148. package/resources/customizations/.github/agents/powershell-atomic-executor.agent.md +12 -12
  149. package/resources/customizations/.github/agents/powershell-atomic-planning.agent.md +4 -4
  150. package/resources/customizations/.github/agents/powershell-orchestrator.agent.md +6 -6
  151. package/resources/customizations/.github/agents/powershell-typed-engineer.agent.md +21 -24
  152. package/resources/customizations/.github/agents/pytest-unit-test-coding.agent.md +13 -17
  153. package/resources/customizations/.github/agents/python-atomic-executor.agent.md +11 -11
  154. package/resources/customizations/.github/agents/python-atomic-planning.agent.md +2 -2
  155. package/resources/customizations/.github/agents/python-execution-only-typed.agent.md +14 -17
  156. package/resources/customizations/.github/agents/python-orchestrator.agent.md +7 -7
  157. package/resources/customizations/.github/agents/python-typed-engineer.agent.md +17 -20
  158. package/resources/customizations/.github/agents/staged-review.agent.md +2 -2
  159. package/resources/customizations/.github/agents/tdd-green.agent.md +1 -1
  160. package/resources/customizations/.github/agents/tdd-red.agent.md +3 -3
  161. package/resources/customizations/.github/agents/tdd-refactor.agent.md +2 -2
  162. package/resources/customizations/.github/agents/typescript-engineer.agent.md +3 -3
  163. package/resources/customizations/.github/codex/execute-hard-lock.prompt.md +3 -3
  164. package/resources/customizations/.github/instructions/general-code-change.instructions.md +1 -1
  165. package/resources/customizations/.github/instructions/powershell-unit-test.instructions.md +1 -1
  166. package/resources/customizations/.github/instructions/python-code-change.instructions.md +5 -5
  167. package/resources/customizations/.github/instructions/python-suppressions.instructions.md +3 -3
  168. package/resources/customizations/.github/instructions/python-unit-test.instructions.md +1 -1
  169. package/resources/customizations/.github/prompts/execute-hard-lock.prompt.md +2 -2
  170. package/resources/customizations/.github/prompts/generate-commit-message-repo.prompt.md +2 -2
  171. package/resources/customizations/.github/prompts/remediate-comments.prompt.md +2 -2
  172. package/resources/customizations/.github/prompts/review-feature.prompt.md +1 -1
  173. package/resources/customizations/.github/skills/atomic-plan-contract/SKILL.md +8 -12
  174. package/resources/customizations/.github/skills/execution-environment/SKILL.md +31 -16
  175. package/resources/customizations/.github/skills/feature-review-workflow/SKILL.md +15 -2
  176. package/resources/feature-templates/bug/plan.yyyy-MM-ddTHH-mm.md +4 -4
  177. package/resources/feature-templates/feature/plan.yyyy-MM-ddTHH-mm.md +3 -3
  178. package/resources/feature-templates/refactor/plan.yyyy-MM-ddTHH-mm.md +2 -2
  179. package/resources/powershell/PoshQC/PoshQC.ScanConfig.psm1 +3 -1
  180. package/resources/powershell/PoshQC/PoshQC.Testing.psm1 +14 -12
  181. package/resources/powershell/PoshQC/PoshQC.psm1 +3 -3
  182. package/resources/powershell/PoshQC/README.md +8 -8
  183. package/resources/powershell/PoshQC/settings/pester.runsettings.psd1 +2 -2
  184. package/resources/templates/policy_audit/AGENTS.md +9 -10
  185. 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 6.x or the inbox 3.4.0 receives the actionable message instead of an import error.
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 that the
189
- # default $InvokePester trampoline now hosts in the global session state (issue #392).
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
- # Host the Pester run in the global session state so discovered test containers do
290
- # not execute inside this module's session state. This makes the bundled entry path
291
- # (module pre-imported, then Invoke-PoshQCTest -> Invoke-Pester) match the passing
292
- # direct run, and lets BeforeAll module guards in test files safely remove/re-import
293
- # same-named modules mid-run without orphaning the run's hosting session state
294
- # (issue #392). [scriptblock]::Create builds an unbound scriptblock so the installed
295
- # global function is not bound to this module's session state; the try/finally pair
296
- # removes the temporary global function so no state leaks between suite invocations.
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 (5.9.0 to 5.99.99). Run Install-PoshQCTool (alias Install-PoshQCTools) first." '5.9.0' '5.99.99'
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.22.0' },
57
- # Issue #953 (D8): UpperBound is exclusive; an installed Pester 6.x does not satisfy the requirement.
58
- @{ Name = 'Pester'; Version = '5.9.0'; UpperBound = '6.0.0' }
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 (CoverageGutters output), plus an optional Koverage-friendly copy.
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.22.0, Pester 5.9.0 or later, below 6.0 (installed automatically via the helper if missing)
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 CoverageGutters XML to `artifacts/pester/powershell-coverage.xml`.
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 CoverageGutters XML texts of the shards at LINE granularity (no file I/O, no threshold).
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 CoverageGutters 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 5.4 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`.
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. Pester 5 has no in-process parallel mode, so each shard is a separate `pwsh` process; the VS Code task `PoshQC: 4 test (Pester, parallel)` runs it.
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/CoverageGutters artifacts.
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 CoverageGutters format so VS Code Coverage Gutters
19
+ # Use Pester's JaCoCo format so VS Code Coverage Gutters
20
20
  # can map file paths correctly.
21
- OutputFormat = 'CoverageGutters'
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", "Lexile scoring pipeline refactor", "new Python module X").
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
- - **Fill in baseline coverage metrics** from pre-development measurement (per language that has coverage).
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 → Pytest (with coverage)
73
- - **PowerShell:** Invoke-PoshQCFormat → Invoke-PoshQCAnalyze → Invoke-PoshQCTest (with coverage)
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
- - Compare post-change coverage to baseline to verify no regression (per language).
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: "Baseline: 85.2% → Post-change: 87.1% (+1.9%) ✅"
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 baseline and post-change coverage metrics for every language in scope, plus changed/new-code coverage when required.
82
- - If any required baseline artifact, QA artifact, or coverage-comparison artifact is missing, the verdict must be BLOCKED or INCOMPLETE, never PASS.
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 baseline/post-change/new code coverage)
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 | [N]% lines, [N]% funcs | [N]% lines, [N]% funcs | [N]% |
34
- | PowerShell | [N] files | [N] tests | [✅/❌] [N] pass, [N] fail | [N]% cmds, [N]% funcs | [N]% cmds, [N]% funcs | [N]% |
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: [path or `N/A - out of scope`]
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: [path or `N/A - out of scope`]
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 baseline and post-change coverage metrics for every language in scope, plus changed/new-code coverage when required.
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 baseline artifact, QA artifact, or coverage-comparison artifact is missing, the verdict must be BLOCKED or INCOMPLETE, never PASS.
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
- | **Baseline Coverage Documented** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Baseline (pre-development):** [N]% lines, [N]% functions<br>**Command:** `[coverage command]`<br>**Timestamp:** [YYYY-MM-DD HH:MM]<br>**Note:** Document baseline BEFORE making changes to avoid re-computation during audit. |
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: [N]% [unit] -> Post-change: [N]% [unit]. Change: [+/-N]% [unit delta]. New/changed-code coverage: [N]% or `N/A - out of scope`. Disposition: [PASS/FAIL/N/A]. Evidence: [artifact path(s)].
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 v5.x** | [✅/❌/N/A] [PASS/FAIL/N/A] | [Describe Pester v5 features used (BeforeAll, BeforeEach, Describe/Context/It, modern Should syntax).] |
357
- | **Use PoshQC Configuration** | [✅/❌/N/A] [PASS/FAIL/N/A] | **Command:** `Invoke-PoshQCTest -Root .`<br>**Config:** `scripts/powershell/PoshQC/settings/pester.runsettings.psd1`<br>[Describe configuration updates if any.] |
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-PoshQCTest -Root .`<br>**Result:** [Describe test results] |
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-PoshQCTest -Root .` | [result] | [✅/❌] |
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 baseline artifact, QA artifact, coverage metric, or coverage-comparison artifact is missing.
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-PoshQCTest -Root .
641
+ Import-Module ./scripts/powershell/PoshQC; Invoke-PoshQCParallelTest -Root .
643
642
  ```
644
643
 
645
644
  ---