@danmoisan/drm-copilot-mcp 1.1.18 → 1.1.20

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 (264) hide show
  1. package/out/mcp-server.js +1149 -661
  2. package/package.json +3 -2
  3. package/resources/claude-customizations/.claude/agents/atomic-executor.md +28 -6
  4. package/resources/claude-customizations/.claude/agents/atomic-planner.md +20 -2
  5. package/resources/claude-customizations/.claude/agents/epic-orchestrator.md +17 -4
  6. package/resources/claude-customizations/.claude/agents/epic-planner.md +5 -4
  7. package/resources/claude-customizations/.claude/agents/feature-review.md +6 -4
  8. package/resources/claude-customizations/.claude/agents/orchestrator.md +9 -5
  9. package/resources/claude-customizations/.claude/agents/parallel-orchestrator.md +35 -13
  10. package/resources/claude-customizations/.claude/agents/parallel-planner.md +9 -6
  11. package/resources/claude-customizations/.claude/agents/pr-author.md +15 -2
  12. package/resources/claude-customizations/.claude/agents/prd-feature.md +1 -1
  13. package/resources/claude-customizations/.claude/agents/task-researcher.md +8 -0
  14. package/resources/claude-customizations/.claude/hooks/check-powershell-test-purity.ps1 +7 -1
  15. package/resources/claude-customizations/.claude/hooks/check-python-test-purity.ps1 +7 -1
  16. package/resources/claude-customizations/.claude/hooks/enforce-checkpoint-monotonic.ps1 +7 -1
  17. package/resources/claude-customizations/.claude/hooks/enforce-completion-consistency.ps1 +111 -46
  18. package/resources/claude-customizations/.claude/hooks/enforce-completion-helpers.ps1 +105 -0
  19. package/resources/claude-customizations/.claude/hooks/enforce-discovery-artifact-gate.ps1 +8 -1
  20. package/resources/claude-customizations/.claude/hooks/enforce-epic-invocation-origin.ps1 +7 -1
  21. package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate-command.ps1 +190 -0
  22. package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate-resolution.ps1 +116 -59
  23. package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate.ps1 +78 -77
  24. package/resources/claude-customizations/.claude/hooks/enforce-epic-wave-barrier.ps1 +74 -75
  25. package/resources/claude-customizations/.claude/hooks/enforce-epic-worktree-removal-gate-resolution.ps1 +127 -35
  26. package/resources/claude-customizations/.claude/hooks/enforce-epic-worktree-removal-gate.ps1 +61 -57
  27. package/resources/claude-customizations/.claude/hooks/enforce-evidence-locations.ps1 +7 -1
  28. package/resources/claude-customizations/.claude/hooks/enforce-feature-folder-order.ps1 +129 -39
  29. package/resources/claude-customizations/.claude/hooks/enforce-mermaid-validation.ps1 +7 -1
  30. package/resources/claude-customizations/.claude/hooks/enforce-model-routing-receipt.ps1 +9 -3
  31. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-epic-scope.ps1 +39 -51
  32. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-helpers.ps1 +31 -58
  33. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-modes.ps1 +63 -47
  34. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-targets.ps1 +433 -0
  35. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate.ps1 +17 -12
  36. package/resources/claude-customizations/.claude/hooks/enforce-parallel-abandon-gate.ps1 +9 -3
  37. package/resources/claude-customizations/.claude/hooks/enforce-parallel-cohort-barrier.ps1 +65 -50
  38. package/resources/claude-customizations/.claude/hooks/enforce-parallel-drift-gate.ps1 +49 -42
  39. package/resources/claude-customizations/.claude/hooks/enforce-parallel-worktree-removal-gate.ps1 +54 -72
  40. package/resources/claude-customizations/.claude/hooks/enforce-powershell-batch-budget.ps1 +8 -2
  41. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-command-allowlist.ps1 +279 -0
  42. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill-helpers.ps1 +129 -75
  43. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.artifact-root.ps1 +233 -0
  44. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.docs-only.ps1 +224 -0
  45. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.ps1 +69 -24
  46. package/resources/claude-customizations/.claude/hooks/enforce-prd-feature-before-planner-helpers.ps1 +29 -18
  47. package/resources/claude-customizations/.claude/hooks/enforce-prd-feature-before-planner.ps1 +10 -4
  48. package/resources/claude-customizations/.claude/hooks/enforce-promotion-mcp-only.ps1 +14 -5
  49. package/resources/claude-customizations/.claude/hooks/enforce-python-batch-budget.ps1 +8 -2
  50. package/resources/claude-customizations/.claude/hooks/feature-folder-resolution.ps1 +373 -0
  51. package/resources/claude-customizations/.claude/hooks/feature-review-coverage-thresholds.ps1 +85 -0
  52. package/resources/claude-customizations/.claude/hooks/hook-command-heredoc.ps1 +119 -0
  53. package/resources/claude-customizations/.claude/hooks/hook-command-invocation-operands.ps1 +198 -0
  54. package/resources/claude-customizations/.claude/hooks/hook-command-invocation.ps1 +254 -255
  55. package/resources/claude-customizations/.claude/hooks/hook-command-payload-powershell.ps1 +201 -0
  56. package/resources/claude-customizations/.claude/hooks/hook-command-payload.ps1 +484 -0
  57. package/resources/claude-customizations/.claude/hooks/hook-command-scanner.ps1 +27 -110
  58. package/resources/claude-customizations/.claude/hooks/hook-dependency-guard.ps1 +114 -0
  59. package/resources/claude-customizations/.claude/hooks/hook-docs-only-diff.ps1 +497 -0
  60. package/resources/claude-customizations/.claude/hooks/premortem-section.ps1 +149 -0
  61. package/resources/claude-customizations/.claude/hooks/subagentstop-envelope.ps1 +192 -0
  62. package/resources/claude-customizations/.claude/hooks/validate-bash.ps1 +9 -3
  63. package/resources/claude-customizations/.claude/hooks/validate-discovery-artifact-gate.ps1 +40 -42
  64. package/resources/claude-customizations/.claude/hooks/validate-executor-output.ps1 +267 -113
  65. package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage-metrics.ps1 +180 -0
  66. package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage-rules.ps1 +195 -0
  67. package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage.ps1 +141 -395
  68. package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output-resolution.ps1 +311 -0
  69. package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output-routing.ps1 +170 -0
  70. package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output.ps1 +115 -190
  71. package/resources/claude-customizations/.claude/hooks/validate-planner-output.ps1 +77 -33
  72. package/resources/claude-customizations/.claude/hooks/validate-pr-author-output.ps1 +39 -44
  73. package/resources/claude-customizations/.claude/hooks/validate-prd-feature-output.ps1 +43 -14
  74. package/resources/claude-customizations/.claude/hooks/validate-required-artifact-output.ps1 +66 -36
  75. package/resources/claude-customizations/.claude/hooks/validate-task-researcher-output.ps1 +52 -36
  76. package/resources/claude-customizations/.claude/lib/bash/mutate-parallel-run.sh +191 -0
  77. package/resources/claude-customizations/.claude/lib/bash/parallel-cohorts.sh +13 -3
  78. package/resources/claude-customizations/.claude/lib/bash/parallel-mutation-cli.sh +152 -0
  79. package/resources/claude-customizations/.claude/lib/bash/parallel-mutation-ops.sh +193 -0
  80. package/resources/claude-customizations/.claude/lib/bash/parallel-mutation.sh +322 -0
  81. package/resources/claude-customizations/.claude/lib/bash/remove-parallel-item.sh +146 -0
  82. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusExtraction.psm1 +23 -33
  83. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusTokenShape.psm1 +86 -6
  84. package/resources/claude-customizations/.claude/lib/ci-gate/Invoke-CiGateParser.ps1 +91 -19
  85. package/resources/claude-customizations/.claude/lib/ci-gate/Invoke-MergeConfirmationParser.ps1 +203 -0
  86. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateEpicWaveBarrier.psm1 +346 -0
  87. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateIssueAdoption.psm1 +24 -3
  88. package/resources/claude-customizations/.claude/lib/worktree-resolution/WorktreeItemResolution.psm1 +79 -2
  89. package/resources/claude-customizations/.claude/lib/worktree-resolution/WorktreeRunResolution.psm1 +3 -3
  90. package/resources/claude-customizations/.claude/rules/architecture-boundaries.md +5 -5
  91. package/resources/claude-customizations/.claude/rules/csharp.md +2 -2
  92. package/resources/claude-customizations/.claude/rules/general-code-change.md +1 -1
  93. package/resources/claude-customizations/.claude/rules/general-unit-test.md +3 -2
  94. package/resources/claude-customizations/.claude/rules/orchestrator-state.md +37 -4
  95. package/resources/claude-customizations/.claude/rules/parallel-orchestration.md +50 -5
  96. package/resources/claude-customizations/.claude/rules/plan-acceptance-gates.md +85 -10
  97. package/resources/claude-customizations/.claude/rules/quality-tiers.md +11 -7
  98. package/resources/claude-customizations/.claude/rules/shell.md +10 -8
  99. package/resources/claude-customizations/.claude/rules/typescript.md +1 -1
  100. package/resources/claude-customizations/.claude/settings.json +3 -4
  101. package/resources/claude-customizations/.claude/skills/acceptance-criteria-tracking/SKILL.md +1 -1
  102. package/resources/claude-customizations/.claude/skills/atomic-plan-contract/SKILL.md +52 -16
  103. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/SKILL.md +7 -3
  104. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_detached_lib.sh +1 -1
  105. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_enumerate_lib.sh +2 -0
  106. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_scan_helper.sh +2 -0
  107. package/resources/claude-customizations/.claude/skills/csharp-change-budget-router/SKILL.md +2 -2
  108. package/resources/claude-customizations/.claude/skills/epic-orchestrate/SKILL.md +45 -9
  109. package/resources/claude-customizations/.claude/skills/epic-plan/SKILL.md +5 -3
  110. package/resources/claude-customizations/.claude/skills/evidence-and-timestamp-conventions/SKILL.md +10 -1
  111. package/resources/claude-customizations/.claude/skills/execution-environment/SKILL.md +134 -0
  112. package/resources/claude-customizations/.claude/skills/feature-promotion-lifecycle/SKILL.md +1 -1
  113. package/resources/claude-customizations/.claude/skills/feature-review-workflow/SKILL.md +4 -3
  114. package/resources/claude-customizations/.claude/skills/orchestrate/SKILL.md +36 -15
  115. package/resources/claude-customizations/.claude/skills/parallel-add/SKILL.md +52 -14
  116. package/resources/claude-customizations/.claude/skills/parallel-close/SKILL.md +22 -9
  117. package/resources/claude-customizations/.claude/skills/parallel-orchestrate/SKILL.md +108 -21
  118. package/resources/claude-customizations/.claude/skills/parallel-plan/SKILL.md +63 -7
  119. package/resources/claude-customizations/.claude/skills/parallel-remove/SKILL.md +35 -12
  120. package/resources/claude-customizations/.claude/skills/powershell-change-budget-router/SKILL.md +1 -1
  121. package/resources/claude-customizations/.claude/skills/pr-author/SKILL.md +3 -1
  122. package/resources/claude-customizations/.claude/skills/python-change-budget-router/SKILL.md +1 -1
  123. package/resources/claude-customizations/.claude/skills/quota-throttling/SKILL.md +1 -1
  124. package/resources/claude-customizations/.claude/skills/remediation-handoff-atomic-planner/SKILL.md +16 -8
  125. package/resources/claude-customizations/.claude/skills/research-issue/SKILL.md +6 -0
  126. package/resources/claude-customizations/pack-manifests/core.json +27 -0
  127. package/resources/codex-and-agents-customizations/.agents/skills/README.md +1 -0
  128. package/resources/codex-and-agents-customizations/.agents/skills/acceptance-criteria-tracking/SKILL.md +1 -1
  129. package/resources/codex-and-agents-customizations/.agents/skills/architecture-boundaries/SKILL.md +5 -5
  130. package/resources/codex-and-agents-customizations/.agents/skills/atomic-executor/SKILL.md +19 -7
  131. package/resources/codex-and-agents-customizations/.agents/skills/atomic-plan-contract/SKILL.md +43 -4
  132. package/resources/codex-and-agents-customizations/.agents/skills/atomic-planner/SKILL.md +18 -6
  133. package/resources/codex-and-agents-customizations/.agents/skills/csharp/SKILL.md +2 -2
  134. package/resources/codex-and-agents-customizations/.agents/skills/csharp-change-budget-router/SKILL.md +2 -2
  135. package/resources/codex-and-agents-customizations/.agents/skills/csharp-qa-gate/SKILL.md +2 -2
  136. package/resources/codex-and-agents-customizations/.agents/skills/epic-orchestrate/SKILL.md +16 -1
  137. package/resources/codex-and-agents-customizations/.agents/skills/epic-plan/SKILL.md +17 -1
  138. package/resources/codex-and-agents-customizations/.agents/skills/epic-run/SKILL.md +2 -1
  139. package/resources/codex-and-agents-customizations/.agents/skills/evidence-and-timestamp-conventions/SKILL.md +10 -1
  140. package/resources/codex-and-agents-customizations/.agents/skills/execution-environment/SKILL.md +134 -0
  141. package/resources/codex-and-agents-customizations/.agents/skills/feature-review-workflow/SKILL.md +13 -5
  142. package/resources/codex-and-agents-customizations/.agents/skills/general-code-change/SKILL.md +1 -1
  143. package/resources/codex-and-agents-customizations/.agents/skills/general-unit-test/SKILL.md +3 -2
  144. package/resources/codex-and-agents-customizations/.agents/skills/orchestrate/SKILL.md +27 -8
  145. package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-workflow/SKILL.md +1 -1
  146. package/resources/codex-and-agents-customizations/.agents/skills/powershell-change-budget-router/SKILL.md +1 -1
  147. package/resources/codex-and-agents-customizations/.agents/skills/python-change-budget-router/SKILL.md +1 -1
  148. package/resources/codex-and-agents-customizations/.agents/skills/quality-tiers/SKILL.md +11 -7
  149. package/resources/codex-and-agents-customizations/.agents/skills/remediation-handoff-atomic-planner/SKILL.md +7 -3
  150. package/resources/codex-and-agents-customizations/.agents/skills/research-issue/SKILL.md +6 -0
  151. package/resources/codex-and-agents-customizations/.agents/skills/translate-claude-to-codex/SKILL.md +1 -1
  152. package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/csharp/SKILL.md +2 -2
  153. package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/csharp-qa-gate/SKILL.md +2 -2
  154. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c1.toml +21 -6
  155. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c2.toml +21 -6
  156. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3-elevated.toml +21 -6
  157. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3.toml +21 -6
  158. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c4.toml +21 -6
  159. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor.toml +21 -6
  160. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c1.toml +15 -2
  161. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c2.toml +15 -2
  162. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3-elevated.toml +15 -2
  163. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3.toml +15 -2
  164. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c4.toml +15 -2
  165. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner.toml +15 -2
  166. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planning.toml +1 -1
  167. package/resources/codex-and-agents-customizations/.codex/agents/csharp-atomic-planning.toml +1 -1
  168. package/resources/codex-and-agents-customizations/.codex/agents/epic-orchestrator.toml +4 -1
  169. package/resources/codex-and-agents-customizations/.codex/agents/feature-review.toml +6 -6
  170. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c1.toml +7 -4
  171. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c2.toml +7 -4
  172. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c3-elevated.toml +7 -4
  173. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c3.toml +7 -4
  174. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c4.toml +7 -4
  175. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator.toml +7 -4
  176. package/resources/codex-and-agents-customizations/.codex/agents/powershell-atomic-planning.toml +1 -1
  177. package/resources/codex-and-agents-customizations/.codex/agents/python-atomic-planning.toml +1 -1
  178. package/resources/codex-and-agents-customizations/.codex/agents/task-researcher-c1.toml +6 -0
  179. package/resources/codex-and-agents-customizations/.codex/agents/task-researcher-c2.toml +6 -0
  180. package/resources/codex-and-agents-customizations/.codex/agents/task-researcher-c3-elevated.toml +6 -0
  181. package/resources/codex-and-agents-customizations/.codex/agents/task-researcher-c3.toml +6 -0
  182. package/resources/codex-and-agents-customizations/.codex/agents/task-researcher-c4.toml +6 -0
  183. package/resources/codex-and-agents-customizations/.codex/agents/task-researcher.toml +6 -0
  184. package/resources/codex-and-agents-customizations/.codex/codex-web-setup.sh +318 -273
  185. package/resources/codex-and-agents-customizations/.codex/config.toml +1 -1
  186. package/resources/codex-and-agents-customizations/.codex/hooks/check-powershell-test-purity.ps1 +7 -1
  187. package/resources/codex-and-agents-customizations/.codex/hooks/check-python-test-purity.ps1 +7 -1
  188. package/resources/codex-and-agents-customizations/.codex/hooks/codex-epic-child-launch-attestation.ps1 +1 -1
  189. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-checkpoint-monotonic.ps1 +7 -1
  190. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-codex-model-routing.ps1 +8 -2
  191. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-completion-consistency.ps1 +97 -44
  192. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-completion-helpers.ps1 +105 -0
  193. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-child-worktree-binding.ps1 +7 -1
  194. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-merge-gate-command.ps1 +190 -0
  195. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-merge-gate.ps1 +54 -43
  196. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-planning-only.ps1 +6 -0
  197. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-root-invocation.ps1 +7 -1
  198. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-wave-barrier.ps1 +7 -1
  199. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-worktree-removal-gate.ps1 +54 -41
  200. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-evidence-locations.ps1 +7 -1
  201. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-epic-scope.ps1 +35 -14
  202. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-helpers.ps1 +31 -58
  203. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-modes.ps1 +63 -47
  204. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-targets.ps1 +433 -0
  205. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate.ps1 +24 -11
  206. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-powershell-batch-budget.ps1 +8 -2
  207. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-promotion-mcp-only.ps1 +13 -4
  208. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-python-batch-budget.ps1 +8 -2
  209. package/resources/codex-and-agents-customizations/.codex/hooks/feature-folder-resolution.ps1 +373 -0
  210. package/resources/codex-and-agents-customizations/.codex/hooks/feature-review-coverage-thresholds.ps1 +85 -0
  211. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-heredoc.ps1 +119 -0
  212. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-invocation-operands.ps1 +198 -0
  213. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-invocation.ps1 +254 -255
  214. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-payload-powershell.ps1 +201 -0
  215. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-payload.ps1 +484 -0
  216. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-scanner.ps1 +27 -110
  217. package/resources/codex-and-agents-customizations/.codex/hooks/hook-dependency-guard.ps1 +114 -0
  218. package/resources/codex-and-agents-customizations/.codex/hooks/hook-docs-only-diff.ps1 +497 -0
  219. package/resources/codex-and-agents-customizations/.codex/hooks/validate-bash.ps1 +8 -2
  220. package/resources/codex-and-agents-customizations/.codex/hooks/validate-codex-subagent-routing.ps1 +7 -1
  221. package/resources/codex-and-agents-customizations/.codex/hooks/validate-feature-review-coverage.ps1 +24 -8
  222. package/resources/codex-and-agents-customizations/.codex/prompts/feature-review-remediate.md +6 -4
  223. package/resources/codex-and-agents-customizations/pack-manifests/core.json +11 -0
  224. package/resources/customizations/.github/agents/atomic_executor.agent.md +21 -11
  225. package/resources/customizations/.github/agents/atomic_planning.agent.md +8 -3
  226. package/resources/customizations/.github/agents/csharp-atomic-executor.agent.md +13 -9
  227. package/resources/customizations/.github/agents/csharp-atomic-planning.agent.md +2 -2
  228. package/resources/customizations/.github/agents/csharp-orchestrator.agent.md +2 -2
  229. package/resources/customizations/.github/agents/csharp-typed-engineer.agent.md +5 -5
  230. package/resources/customizations/.github/agents/orchestrator.agent.md +8 -5
  231. package/resources/customizations/.github/agents/powershell-atomic-executor.agent.md +13 -9
  232. package/resources/customizations/.github/agents/powershell-atomic-planning.agent.md +2 -2
  233. package/resources/customizations/.github/agents/powershell-orchestrator.agent.md +2 -2
  234. package/resources/customizations/.github/agents/powershell-typed-engineer.agent.md +3 -3
  235. package/resources/customizations/.github/agents/python-atomic-executor.agent.md +13 -9
  236. package/resources/customizations/.github/agents/python-atomic-planning.agent.md +2 -2
  237. package/resources/customizations/.github/agents/python-orchestrator.agent.md +2 -2
  238. package/resources/customizations/.github/agents/task-researcher.agent.md +6 -0
  239. package/resources/customizations/.github/instructions/csharp-code-change.instructions.md +4 -4
  240. package/resources/customizations/.github/instructions/csharp-unit-test.instructions.md +2 -2
  241. package/resources/customizations/.github/prompts/generate-atomic-plan.prompt.md +16 -10
  242. package/resources/customizations/.github/prompts/orchestrate-csharp-work.prompt.md +2 -2
  243. package/resources/customizations/.github/prompts/orchestrate-powershell-work.prompt.md +1 -1
  244. package/resources/customizations/.github/prompts/orchestrate-python-work.prompt.md +1 -1
  245. package/resources/customizations/.github/prompts/orchestrate-work.prompt.md +2 -2
  246. package/resources/customizations/.github/skills/acceptance-criteria-tracking/SKILL.md +1 -1
  247. package/resources/customizations/.github/skills/atomic-plan-contract/SKILL.md +43 -4
  248. package/resources/customizations/.github/skills/csharp-change-budget-router/SKILL.md +1 -1
  249. package/resources/customizations/.github/skills/evidence-and-timestamp-conventions/SKILL.md +10 -1
  250. package/resources/customizations/.github/skills/execution-environment/SKILL.md +134 -0
  251. package/resources/customizations/.github/skills/feature-review-workflow/SKILL.md +1 -1
  252. package/resources/customizations/.github/skills/powershell-change-budget-router/SKILL.md +1 -1
  253. package/resources/customizations/.github/skills/remediation-handoff-atomic-planner/SKILL.md +7 -3
  254. package/resources/feature-templates/bug/plan.yyyy-MM-ddTHH-mm.md +10 -0
  255. package/resources/feature-templates/feature/plan.yyyy-MM-ddTHH-mm.md +11 -0
  256. package/resources/feature-templates/refactor/plan.yyyy-MM-ddTHH-mm.md +11 -0
  257. package/resources/powershell/PoshQC/PoshQC.Coverage.psm1 +314 -0
  258. package/resources/powershell/PoshQC/PoshQC.CoverageMerge.psm1 +163 -0
  259. package/resources/powershell/PoshQC/PoshQC.Shard.psm1 +296 -0
  260. package/resources/powershell/PoshQC/PoshQC.Testing.psm1 +48 -32
  261. package/resources/powershell/PoshQC/PoshQC.psd1 +7 -1
  262. package/resources/powershell/PoshQC/PoshQC.psm1 +18 -5
  263. package/resources/powershell/PoshQC/README.md +21 -3
  264. package/resources/powershell/PoshQC/settings/pester.runsettings.psd1 +5 -319
@@ -0,0 +1,180 @@
1
+ <#
2
+ .SYNOPSIS
3
+ Artifact reader and coverage-report parsers for the feature-review coverage hook.
4
+
5
+ .DESCRIPTION
6
+ Dot-sourced by validate-feature-review-coverage.ps1. Defines the review-artifact file reader
7
+ (Get-ArtifactFileContent), the LCOV and JaCoCo line and branch coverage parsers, and the
8
+ per-language dispatchers that select a coverage report for a changed language.
9
+
10
+ The file has no param() block, writes nothing to the output stream, and runs no top-level
11
+ statement other than function definitions.
12
+
13
+ .NOTES
14
+ Requires PowerShell 7+.
15
+ #>
16
+
17
+ function Get-ArtifactFileContent {
18
+ [CmdletBinding()]
19
+ [OutputType([hashtable])]
20
+ param(
21
+ [Parameter(Mandatory = $true)]
22
+ [string] $Path
23
+ )
24
+
25
+ if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) {
26
+ return @{ Exists = $false; Text = $null; Lines = @() }
27
+ }
28
+
29
+ $text = Get-Content -LiteralPath $Path -Raw -ErrorAction Stop
30
+ $lines = Get-Content -LiteralPath $Path -ErrorAction Stop
31
+ if ($null -eq $lines) {
32
+ $lines = @()
33
+ }
34
+ elseif ($lines -isnot [array]) {
35
+ $lines = @($lines)
36
+ }
37
+
38
+ return @{ Exists = $true; Text = $text; Lines = $lines }
39
+ }
40
+
41
+ function Get-FeatureReviewClaudeMdText {
42
+ <#
43
+ .SYNOPSIS
44
+ Reads the repository's root CLAUDE.md for the coverage-floor lookup (CR-4).
45
+ .DESCRIPTION
46
+ Returns a hashtable with Text and ReadError. An absent file yields Text = $null and
47
+ ReadError = $null, so the caller applies the default floors. A file that exists but
48
+ cannot be read yields Text = $null and ReadError set to the first line of the
49
+ exception message, so the caller fails closed. The function never throws.
50
+ #>
51
+ [CmdletBinding()]
52
+ [OutputType([hashtable])]
53
+ param()
54
+
55
+ try {
56
+ $file = Get-ArtifactFileContent -Path 'CLAUDE.md'
57
+ return @{ Text = $file.Text; ReadError = $null }
58
+ }
59
+ catch {
60
+ return @{ Text = $null; ReadError = ([string]$_.Exception.Message -split "`r?`n")[0] }
61
+ }
62
+ }
63
+
64
+ function Get-LcovRepoCoverage {
65
+ [OutputType([Nullable[double]])]
66
+ param([string]$Path)
67
+
68
+ $file = Get-ArtifactFileContent -Path $Path
69
+ if (-not $file.Exists) { return $null }
70
+
71
+ $totalFound = 0
72
+ $totalHit = 0
73
+ foreach ($line in $file.Lines) {
74
+ if ($line.StartsWith('LF:')) {
75
+ $totalFound += [int]($line.Substring(3))
76
+ }
77
+ elseif ($line.StartsWith('LH:')) {
78
+ $totalHit += [int]($line.Substring(3))
79
+ }
80
+ }
81
+ if ($totalFound -le 0) { return $null }
82
+ return [math]::Round(($totalHit * 100.0) / $totalFound, 2)
83
+ }
84
+
85
+ function Get-LcovBranchCoverage {
86
+ # Parses LCOV branch counters (BRF: branches found, BRH: branches hit) and returns a percent.
87
+ # LCOV emits one BRF/BRH line per source file in the report; we sum across the file to compute
88
+ # repo-wide branch coverage. Returns $null when the artifact is absent or when no branch
89
+ # information is recorded (BRF total = 0).
90
+ [OutputType([Nullable[double]])]
91
+ param([string]$Path)
92
+
93
+ $file = Get-ArtifactFileContent -Path $Path
94
+ if (-not $file.Exists) { return $null }
95
+
96
+ $totalFound = 0
97
+ $totalHit = 0
98
+ foreach ($line in $file.Lines) {
99
+ if ($line.StartsWith('BRF:')) {
100
+ $totalFound += [int]($line.Substring(4))
101
+ }
102
+ elseif ($line.StartsWith('BRH:')) {
103
+ $totalHit += [int]($line.Substring(4))
104
+ }
105
+ }
106
+ if ($totalFound -le 0) { return $null }
107
+ return [math]::Round(($totalHit * 100.0) / $totalFound, 2)
108
+ }
109
+
110
+ function Get-JacocoBranchCoverage {
111
+ [OutputType([Nullable[double]])]
112
+ param([string]$Path)
113
+
114
+ $file = Get-ArtifactFileContent -Path $Path
115
+ if (-not $file.Exists) { return $null }
116
+
117
+ [xml]$doc = $file.Text
118
+ $counters = $doc.SelectNodes('//counter[@type="BRANCH"]')
119
+ if (-not $counters -or $counters.Count -eq 0) { return $null }
120
+
121
+ $missed = 0
122
+ $covered = 0
123
+ foreach ($counter in $counters) {
124
+ $missed += [int]$counter.missed
125
+ $covered += [int]$counter.covered
126
+ }
127
+ $total = $missed + $covered
128
+ if ($total -le 0) { return $null }
129
+ return [math]::Round(($covered * 100.0) / $total, 2)
130
+ }
131
+
132
+ function Get-LanguageBranchCoverage {
133
+ [OutputType([Nullable[double]])]
134
+ param([string]$Language)
135
+
136
+ switch ($Language) {
137
+ 'TypeScript' { return Get-LcovBranchCoverage -Path 'coverage/lcov.info' }
138
+ 'Python' { return Get-LcovBranchCoverage -Path 'artifacts/python/lcov.info' }
139
+ 'PowerShell' { return Get-JacocoBranchCoverage -Path 'artifacts/pester/powershell-coverage.xml' }
140
+ 'CSharp' { return Get-JacocoBranchCoverage -Path 'artifacts/csharp/coverage.xml' }
141
+ }
142
+ return $null
143
+ }
144
+
145
+ function Get-JacocoRepoCoverage {
146
+ [OutputType([Nullable[double]])]
147
+ param([string]$Path)
148
+
149
+ $file = Get-ArtifactFileContent -Path $Path
150
+ if (-not $file.Exists) { return $null }
151
+
152
+ [xml]$doc = $file.Text
153
+ $counters = $doc.SelectNodes('//counter[@type="LINE"]')
154
+ if (-not $counters -or $counters.Count -eq 0) { return $null }
155
+
156
+ $missed = 0
157
+ $covered = 0
158
+ foreach ($counter in $counters) {
159
+ $missed += [int]$counter.missed
160
+ $covered += [int]$counter.covered
161
+ }
162
+ $total = $missed + $covered
163
+ if ($total -le 0) { return $null }
164
+ return [math]::Round(($covered * 100.0) / $total, 2)
165
+ }
166
+
167
+ function Get-LanguageRepoCoverage {
168
+ [OutputType([Nullable[double]])]
169
+ param(
170
+ [string]$Language
171
+ )
172
+
173
+ switch ($Language) {
174
+ 'TypeScript' { return Get-LcovRepoCoverage -Path 'coverage/lcov.info' }
175
+ 'Python' { return Get-LcovRepoCoverage -Path 'artifacts/python/lcov.info' }
176
+ 'PowerShell' { return Get-JacocoRepoCoverage -Path 'artifacts/pester/powershell-coverage.xml' }
177
+ 'CSharp' { return Get-JacocoRepoCoverage -Path 'artifacts/csharp/coverage.xml' }
178
+ }
179
+ return $null
180
+ }
@@ -0,0 +1,195 @@
1
+ <#
2
+ .SYNOPSIS
3
+ Artifact-path rules, changed-language set, and coverage-row rule for the feature-review coverage hook.
4
+
5
+ .DESCRIPTION
6
+ Dot-sourced by validate-feature-review-coverage.ps1. Defines the advertised-path reader
7
+ (Get-ReviewArtifactPathFromOutput), the active-feature location rule (Get-ReviewArtifactInfo),
8
+ the changed-language reader for the PR context summary (Get-ChangedLanguageSet), and the
9
+ per-language coverage-row rule (Test-LanguageCoverageRow).
10
+
11
+ The file has no param() block, writes nothing to the output stream, and runs no top-level
12
+ statement other than function definitions.
13
+
14
+ .NOTES
15
+ Requires PowerShell 7+.
16
+ #>
17
+
18
+ function Get-ReviewArtifactPathFromOutput {
19
+ [CmdletBinding()]
20
+ [OutputType([string])]
21
+ param(
22
+ [Parameter(Mandatory = $true)]
23
+ [string] $AgentOutput,
24
+
25
+ [Parameter(Mandatory = $true)]
26
+ [string] $Token
27
+ )
28
+
29
+ $escapedToken = [regex]::Escape($Token)
30
+ $pattern = "$escapedToken\s*[:=]\s*[""']?([^\s""'\)`]+)|\[$escapedToken\]\(([^)]+)\)"
31
+ $match = [regex]::Match(
32
+ $AgentOutput,
33
+ $pattern,
34
+ [System.Text.RegularExpressions.RegexOptions]::IgnoreCase
35
+ )
36
+ if (-not $match.Success) {
37
+ return $null
38
+ }
39
+
40
+ $value = if ($match.Groups[1].Success) { $match.Groups[1].Value } else { $match.Groups[2].Value }
41
+ $value = $value.Trim()
42
+ if ([string]::IsNullOrWhiteSpace($value)) {
43
+ return $null
44
+ }
45
+
46
+ return $value
47
+ }
48
+
49
+ function Get-ReviewArtifactInfo {
50
+ [CmdletBinding()]
51
+ [OutputType([hashtable])]
52
+ param(
53
+ [Parameter(Mandatory = $true)]
54
+ [string] $Path,
55
+
56
+ [Parameter(Mandatory = $true)]
57
+ [string] $Stem
58
+ )
59
+
60
+ $normalized = $Path -replace '\\', '/'
61
+ $pattern = "^docs/features/active/(?<Folder>.+)/$Stem\.(?<Timestamp>\d{4}-\d{2}-\d{2}T\d{2}-\d{2})\.md$"
62
+ $match = [regex]::Match($normalized, $pattern, [System.Text.RegularExpressions.RegexOptions]::IgnoreCase)
63
+ if (-not $match.Success) {
64
+ # Remediation-handoff layout: <slug>/audit/<timestamp>/<stem>.md (timestamp on the folder).
65
+ $auditPattern = "^docs/features/active/(?<Folder>[^/]+)/audit/(?<Timestamp>\d{4}-\d{2}-\d{2}T\d{2}-\d{2})/$Stem\.md$"
66
+ $match = [regex]::Match($normalized, $auditPattern, [System.Text.RegularExpressions.RegexOptions]::IgnoreCase)
67
+ }
68
+ if (-not $match.Success) {
69
+ return $null
70
+ }
71
+
72
+ return @{
73
+ Folder = $match.Groups['Folder'].Value
74
+ Timestamp = $match.Groups['Timestamp'].Value
75
+ Path = $normalized
76
+ }
77
+ }
78
+
79
+ function Get-ChangedLanguageSet {
80
+ [OutputType([System.Collections.Hashtable])]
81
+ param([string[]]$Lines)
82
+
83
+ $langs = [ordered]@{}
84
+ foreach ($line in $Lines) {
85
+ if ($line -notmatch '^\s*-\s+(\S+)\s+\(\+\d+/-\d+\)\s*$') { continue }
86
+ $path = $matches[1]
87
+ $ext = [IO.Path]::GetExtension($path).ToLowerInvariant()
88
+ switch -Regex ($ext) {
89
+ '^\.(ts|tsx)$' { $langs['TypeScript'] = $true }
90
+ '^\.py$' { $langs['Python'] = $true }
91
+ '^\.(ps1|psm1)$' { $langs['PowerShell'] = $true }
92
+ '^\.cs$' { $langs['CSharp'] = $true }
93
+ }
94
+ }
95
+ return $langs
96
+ }
97
+
98
+ function Test-LanguageCoverageRow {
99
+ [OutputType([System.Collections.Hashtable])]
100
+ param(
101
+ [string]$AuditText,
102
+ [string]$Language,
103
+ [Nullable[double]]$RepoWidePct,
104
+ [Nullable[double]]$BranchPct,
105
+ [double]$LineFloor = 85.0,
106
+ [double]$BranchFloor = 75.0,
107
+ [string] $LineSource = 'default',
108
+ [string] $BranchSource = 'default'
109
+ )
110
+
111
+ $lineSourceLabel = if ($LineSource -eq 'claude-md') { '(root CLAUDE.md)' } else { '(default)' }
112
+ $branchSourceLabel = if ($BranchSource -eq 'claude-md') { '(root CLAUDE.md)' } else { '(default)' }
113
+
114
+ $languageLabelMap = @{
115
+ 'TypeScript' = @('TypeScript', 'typescript')
116
+ 'Python' = @('Python', 'python', 'pytest')
117
+ 'PowerShell' = @('PowerShell', 'powershell', 'pester')
118
+ 'CSharp' = @('C#', 'CSharp', 'csharp', '.NET', 'dotnet')
119
+ }
120
+
121
+ $labels = $languageLabelMap[$Language]
122
+ $labelPattern = '(?i)(' + (($labels | ForEach-Object { [regex]::Escape($_) }) -join '|') + ')'
123
+
124
+ $lines = $AuditText -split "`r?`n"
125
+ $languageLines = $lines | Where-Object { $_ -match $labelPattern }
126
+
127
+ if (-not $languageLines -or $languageLines.Count -eq 0) {
128
+ return @{
129
+ Ok = $false
130
+ Reason = "$Language has changed files on the branch but the policy-audit does not mention $Language."
131
+ Repairable = $true
132
+ }
133
+ }
134
+
135
+ $coverageLines = $languageLines | Where-Object { $_ -match '(?i)(coverage|lcov|line[s]?\s+hit|pester)' }
136
+ if (-not $coverageLines -or $coverageLines.Count -eq 0) {
137
+ return @{
138
+ Ok = $false
139
+ Reason = "$Language has changed files on the branch but no coverage-scoped row in the policy-audit mentions $Language."
140
+ Repairable = $true
141
+ }
142
+ }
143
+
144
+ # Sanctioned narrowing text is not a scope narrowing by the audit: a line inside a
145
+ # '## Rejected Scope Narrowing' section (caller text recorded verbatim), and a PowerShell
146
+ # line naming branch coverage but not line coverage (Pester measures no branch coverage).
147
+ $narrowingPattern = '(?i)(informational only|context only|out of plan scope|out of scope|not applicable|\bN/A\b|\bUNVERIFIED\b)'
148
+ $insideRejectedSection = $false
149
+ $narrowing = foreach ($line in $lines) {
150
+ if ($line -match '^##\s') { $insideRejectedSection = $line -match '^##\s+Rejected Scope Narrowing\b' }
151
+ elseif ($insideRejectedSection) { continue }
152
+ if ($line -notmatch $labelPattern -or $line -notmatch '(?i)(coverage|lcov|line[s]?\s+hit|pester)' -or $line -notmatch $narrowingPattern) { continue }
153
+ if ($Language -eq 'PowerShell' -and $line -match '(?i)\bbranch\b' -and $line -notmatch '(?i)\bline\s+coverage\b') { continue }
154
+ $line
155
+ }
156
+ $narrowing = @($narrowing)
157
+ if ($narrowing.Count -gt 0) {
158
+ $first = ($narrowing | Select-Object -First 1).ToString().Trim()
159
+ return @{
160
+ Ok = $false
161
+ Reason = "$Language has changed files on the branch but a coverage-scoped row narrows scope: '$first'. Scope narrowing is not permitted for languages with changed files."
162
+ Repairable = $true
163
+ }
164
+ }
165
+
166
+ $verdictLines = $coverageLines | Where-Object { $_ -match '\b(PASS|FAIL)\b' }
167
+ if (-not $verdictLines -or $verdictLines.Count -eq 0) {
168
+ return @{
169
+ Ok = $false
170
+ Reason = "$Language coverage rows contain neither a PASS nor a FAIL verdict."
171
+ Repairable = $true
172
+ }
173
+ }
174
+
175
+ if ($null -ne $RepoWidePct -and $RepoWidePct -lt $LineFloor) {
176
+ $failLines = $coverageLines | Where-Object { $_ -match '\bFAIL\b' }
177
+ if (-not $failLines -or $failLines.Count -eq 0) {
178
+ return @{
179
+ Ok = $false
180
+ Reason = ("{0} repo-wide coverage is {1}% (below the {2}% line coverage floor {3}) but the policy-audit contains no FAIL verdict on a coverage row for {0}." -f $Language, $RepoWidePct, $LineFloor, $lineSourceLabel)
181
+ Repairable = $true
182
+ }
183
+ }
184
+ }
185
+
186
+ if ($null -ne $BranchPct -and $BranchPct -lt $BranchFloor) {
187
+ return @{
188
+ Ok = $false
189
+ Reason = ("{0} branch coverage is {1}% (below the {2}% branch coverage floor {3}); policy-audit must record FAIL on the corresponding coverage row." -f $Language, $BranchPct, $BranchFloor, $branchSourceLabel)
190
+ Repairable = $false
191
+ }
192
+ }
193
+
194
+ return @{ Ok = $true; Reason = $null }
195
+ }