@danmoisan/drm-copilot-mcp 1.1.17 → 1.1.19

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 (225) hide show
  1. package/out/mcp-server.js +1405 -684
  2. package/package.json +6 -4
  3. package/resources/claude-customizations/.claude/agents/atomic-executor.md +11 -0
  4. package/resources/claude-customizations/.claude/agents/atomic-planner.md +10 -0
  5. package/resources/claude-customizations/.claude/agents/epic-orchestrator.md +12 -4
  6. package/resources/claude-customizations/.claude/agents/epic-planner.md +5 -4
  7. package/resources/claude-customizations/.claude/agents/feature-review.md +16 -5
  8. package/resources/claude-customizations/.claude/agents/orchestrator.md +21 -7
  9. package/resources/claude-customizations/.claude/agents/parallel-orchestrator.md +37 -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/hooks/check-powershell-test-purity.ps1 +7 -1
  14. package/resources/claude-customizations/.claude/hooks/check-python-test-purity.ps1 +7 -1
  15. package/resources/claude-customizations/.claude/hooks/enforce-checkpoint-monotonic.ps1 +7 -1
  16. package/resources/claude-customizations/.claude/hooks/enforce-completion-consistency.ps1 +111 -46
  17. package/resources/claude-customizations/.claude/hooks/enforce-completion-helpers.ps1 +105 -0
  18. package/resources/claude-customizations/.claude/hooks/enforce-discovery-artifact-gate.ps1 +8 -1
  19. package/resources/claude-customizations/.claude/hooks/enforce-epic-invocation-origin.ps1 +7 -1
  20. package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate-resolution.ps1 +116 -59
  21. package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate.ps1 +55 -23
  22. package/resources/claude-customizations/.claude/hooks/enforce-epic-wave-barrier.ps1 +74 -75
  23. package/resources/claude-customizations/.claude/hooks/enforce-epic-worktree-removal-gate-resolution.ps1 +127 -35
  24. package/resources/claude-customizations/.claude/hooks/enforce-epic-worktree-removal-gate.ps1 +61 -57
  25. package/resources/claude-customizations/.claude/hooks/enforce-evidence-locations.ps1 +7 -1
  26. package/resources/claude-customizations/.claude/hooks/enforce-feature-folder-order.ps1 +129 -39
  27. package/resources/claude-customizations/.claude/hooks/enforce-mermaid-validation.ps1 +7 -1
  28. package/resources/claude-customizations/.claude/hooks/enforce-model-routing-receipt.ps1 +9 -3
  29. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-epic-scope.ps1 +39 -51
  30. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-helpers.ps1 +31 -58
  31. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-modes.ps1 +63 -47
  32. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate-targets.ps1 +433 -0
  33. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate.ps1 +17 -12
  34. package/resources/claude-customizations/.claude/hooks/enforce-parallel-abandon-gate.ps1 +9 -3
  35. package/resources/claude-customizations/.claude/hooks/enforce-parallel-cohort-barrier.ps1 +65 -50
  36. package/resources/claude-customizations/.claude/hooks/enforce-parallel-drift-gate.ps1 +49 -42
  37. package/resources/claude-customizations/.claude/hooks/enforce-parallel-worktree-removal-gate.ps1 +54 -72
  38. package/resources/claude-customizations/.claude/hooks/enforce-powershell-batch-budget.ps1 +8 -2
  39. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-command-allowlist.ps1 +279 -0
  40. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill-helpers.ps1 +129 -75
  41. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.artifact-root.ps1 +233 -0
  42. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.docs-only.ps1 +224 -0
  43. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.ps1 +69 -24
  44. package/resources/claude-customizations/.claude/hooks/enforce-prd-feature-before-planner-helpers.ps1 +29 -18
  45. package/resources/claude-customizations/.claude/hooks/enforce-prd-feature-before-planner.ps1 +10 -4
  46. package/resources/claude-customizations/.claude/hooks/enforce-promotion-mcp-only.ps1 +14 -5
  47. package/resources/claude-customizations/.claude/hooks/enforce-python-batch-budget.ps1 +8 -2
  48. package/resources/claude-customizations/.claude/hooks/feature-folder-resolution.ps1 +373 -0
  49. package/resources/claude-customizations/.claude/hooks/feature-review-coverage-thresholds.ps1 +85 -0
  50. package/resources/claude-customizations/.claude/hooks/hook-command-heredoc.ps1 +119 -0
  51. package/resources/claude-customizations/.claude/hooks/hook-command-invocation-operands.ps1 +198 -0
  52. package/resources/claude-customizations/.claude/hooks/hook-command-invocation.ps1 +254 -255
  53. package/resources/claude-customizations/.claude/hooks/hook-command-payload-powershell.ps1 +201 -0
  54. package/resources/claude-customizations/.claude/hooks/hook-command-payload.ps1 +484 -0
  55. package/resources/claude-customizations/.claude/hooks/hook-command-scanner.ps1 +27 -110
  56. package/resources/claude-customizations/.claude/hooks/hook-dependency-guard.ps1 +114 -0
  57. package/resources/claude-customizations/.claude/hooks/hook-docs-only-diff.ps1 +493 -0
  58. package/resources/claude-customizations/.claude/hooks/subagentstop-envelope.ps1 +192 -0
  59. package/resources/claude-customizations/.claude/hooks/validate-bash.ps1 +9 -3
  60. package/resources/claude-customizations/.claude/hooks/validate-discovery-artifact-gate.ps1 +40 -42
  61. package/resources/claude-customizations/.claude/hooks/validate-executor-output.ps1 +66 -38
  62. package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage-metrics.ps1 +180 -0
  63. package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage-rules.ps1 +195 -0
  64. package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage.ps1 +141 -395
  65. package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output-resolution.ps1 +311 -0
  66. package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output-routing.ps1 +170 -0
  67. package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output.ps1 +115 -190
  68. package/resources/claude-customizations/.claude/hooks/validate-planner-output.ps1 +64 -32
  69. package/resources/claude-customizations/.claude/hooks/validate-pr-author-output.ps1 +39 -44
  70. package/resources/claude-customizations/.claude/hooks/validate-prd-feature-output.ps1 +43 -14
  71. package/resources/claude-customizations/.claude/hooks/validate-required-artifact-output.ps1 +66 -36
  72. package/resources/claude-customizations/.claude/hooks/validate-task-researcher-output.ps1 +31 -34
  73. package/resources/claude-customizations/.claude/lib/bash/mutate-parallel-run.sh +191 -0
  74. package/resources/claude-customizations/.claude/lib/bash/parallel-cohorts.sh +13 -3
  75. package/resources/claude-customizations/.claude/lib/bash/parallel-lane-assertion.sh +4 -2
  76. package/resources/claude-customizations/.claude/lib/bash/parallel-mutation-cli.sh +152 -0
  77. package/resources/claude-customizations/.claude/lib/bash/parallel-mutation-ops.sh +193 -0
  78. package/resources/claude-customizations/.claude/lib/bash/parallel-mutation.sh +322 -0
  79. package/resources/claude-customizations/.claude/lib/bash/remove-parallel-item.sh +146 -0
  80. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusExtraction.psm1 +23 -33
  81. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusTokenShape.psm1 +86 -6
  82. package/resources/claude-customizations/.claude/lib/ci-gate/Invoke-CiGateParser.ps1 +91 -19
  83. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorState.psm1 +6 -13
  84. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateEpicWaveBarrier.psm1 +346 -0
  85. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateIssueAdoption.psm1 +396 -0
  86. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateReceipts.psm1 +22 -15
  87. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateRemediationAccounting.psm1 +337 -0
  88. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateRoutingContract.psm1 +9 -1
  89. package/resources/claude-customizations/.claude/lib/worktree-resolution/WorktreeItemResolution.psm1 +79 -2
  90. package/resources/claude-customizations/.claude/lib/worktree-resolution/WorktreeRunResolution.psm1 +3 -3
  91. package/resources/claude-customizations/.claude/rules/architecture-boundaries.md +5 -5
  92. package/resources/claude-customizations/.claude/rules/csharp.md +2 -2
  93. package/resources/claude-customizations/.claude/rules/general-code-change.md +1 -1
  94. package/resources/claude-customizations/.claude/rules/general-unit-test.md +3 -2
  95. package/resources/claude-customizations/.claude/rules/orchestrator-state.md +153 -4
  96. package/resources/claude-customizations/.claude/rules/parallel-orchestration.md +50 -5
  97. package/resources/claude-customizations/.claude/rules/plan-acceptance-gates.md +47 -8
  98. package/resources/claude-customizations/.claude/rules/quality-tiers.md +11 -7
  99. package/resources/claude-customizations/.claude/rules/shell.md +10 -8
  100. package/resources/claude-customizations/.claude/rules/typescript.md +1 -1
  101. package/resources/claude-customizations/.claude/settings.json +3 -4
  102. package/resources/claude-customizations/.claude/skills/acceptance-criteria-tracking/SKILL.md +9 -1
  103. package/resources/claude-customizations/.claude/skills/atomic-plan-contract/SKILL.md +7 -1
  104. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/SKILL.md +11 -3
  105. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup-worktrees.sh +11 -2
  106. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_detached_lib.sh +1 -1
  107. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_enumerate_lib.sh +171 -5
  108. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_preserve_lib.sh +1 -1
  109. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_report_records_lib.sh +6 -43
  110. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_scan_helper.sh +6 -15
  111. package/resources/claude-customizations/.claude/skills/epic-orchestrate/SKILL.md +45 -11
  112. package/resources/claude-customizations/.claude/skills/epic-plan/SKILL.md +1 -1
  113. package/resources/claude-customizations/.claude/skills/evidence-and-timestamp-conventions/SKILL.md +13 -0
  114. package/resources/claude-customizations/.claude/skills/feature-promotion-lifecycle/SKILL.md +10 -0
  115. package/resources/claude-customizations/.claude/skills/feature-review-workflow/SKILL.md +7 -4
  116. package/resources/claude-customizations/.claude/skills/orchestrate/SKILL.md +42 -16
  117. package/resources/claude-customizations/.claude/skills/parallel-add/SKILL.md +52 -14
  118. package/resources/claude-customizations/.claude/skills/parallel-close/SKILL.md +22 -9
  119. package/resources/claude-customizations/.claude/skills/parallel-orchestrate/SKILL.md +97 -19
  120. package/resources/claude-customizations/.claude/skills/parallel-plan/SKILL.md +63 -7
  121. package/resources/claude-customizations/.claude/skills/parallel-remove/SKILL.md +35 -12
  122. package/resources/claude-customizations/.claude/skills/pr-author/SKILL.md +3 -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 +7 -3
  125. package/resources/claude-customizations/pack-manifests/core.json +25 -0
  126. package/resources/codex-and-agents-customizations/.agents/skills/acceptance-criteria-tracking/SKILL.md +9 -1
  127. package/resources/codex-and-agents-customizations/.agents/skills/architecture-boundaries/SKILL.md +5 -5
  128. package/resources/codex-and-agents-customizations/.agents/skills/atomic-executor/SKILL.md +11 -0
  129. package/resources/codex-and-agents-customizations/.agents/skills/atomic-plan-contract/SKILL.md +4 -0
  130. package/resources/codex-and-agents-customizations/.agents/skills/atomic-planner/SKILL.md +10 -0
  131. package/resources/codex-and-agents-customizations/.agents/skills/csharp/SKILL.md +2 -2
  132. package/resources/codex-and-agents-customizations/.agents/skills/csharp-qa-gate/SKILL.md +2 -2
  133. package/resources/codex-and-agents-customizations/.agents/skills/epic-orchestrate/SKILL.md +13 -3
  134. package/resources/codex-and-agents-customizations/.agents/skills/epic-plan/SKILL.md +17 -1
  135. package/resources/codex-and-agents-customizations/.agents/skills/epic-run/SKILL.md +2 -1
  136. package/resources/codex-and-agents-customizations/.agents/skills/evidence-and-timestamp-conventions/SKILL.md +13 -0
  137. package/resources/codex-and-agents-customizations/.agents/skills/feature-promotion-lifecycle/SKILL.md +1 -1
  138. package/resources/codex-and-agents-customizations/.agents/skills/feature-review/SKILL.md +30 -6
  139. package/resources/codex-and-agents-customizations/.agents/skills/feature-review-workflow/SKILL.md +16 -6
  140. package/resources/codex-and-agents-customizations/.agents/skills/general-code-change/SKILL.md +1 -1
  141. package/resources/codex-and-agents-customizations/.agents/skills/general-unit-test/SKILL.md +3 -2
  142. package/resources/codex-and-agents-customizations/.agents/skills/orchestrate/SKILL.md +43 -11
  143. package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-state/SKILL.md +41 -2
  144. package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-workflow/SKILL.md +19 -4
  145. package/resources/codex-and-agents-customizations/.agents/skills/quality-tiers/SKILL.md +11 -7
  146. package/resources/codex-and-agents-customizations/.agents/skills/remediation-handoff-atomic-planner/SKILL.md +2 -0
  147. package/resources/codex-and-agents-customizations/.agents/skills/translate-claude-to-codex/SKILL.md +1 -1
  148. package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/csharp/SKILL.md +2 -2
  149. package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/csharp-qa-gate/SKILL.md +2 -2
  150. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c1.toml +11 -0
  151. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c2.toml +11 -0
  152. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3-elevated.toml +11 -0
  153. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3.toml +11 -0
  154. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c4.toml +11 -0
  155. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor.toml +11 -0
  156. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c1.toml +10 -0
  157. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c2.toml +10 -0
  158. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3-elevated.toml +10 -0
  159. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3.toml +10 -0
  160. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c4.toml +10 -0
  161. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner.toml +10 -0
  162. package/resources/codex-and-agents-customizations/.codex/agents/epic-orchestrator.toml +2 -1
  163. package/resources/codex-and-agents-customizations/.codex/agents/feature-review.toml +6 -6
  164. package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer-c1.toml +1 -0
  165. package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer-c2.toml +1 -0
  166. package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer-c3-elevated.toml +1 -0
  167. package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer-c3.toml +1 -0
  168. package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer-c4.toml +1 -0
  169. package/resources/codex-and-agents-customizations/.codex/agents/feature-reviewer.toml +1 -0
  170. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c1.toml +3 -3
  171. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c2.toml +3 -3
  172. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c3-elevated.toml +3 -3
  173. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c3.toml +3 -3
  174. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c4.toml +3 -3
  175. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator.toml +3 -3
  176. package/resources/codex-and-agents-customizations/.codex/codex-web-setup.sh +318 -273
  177. package/resources/codex-and-agents-customizations/.codex/config.toml +1 -1
  178. package/resources/codex-and-agents-customizations/.codex/hooks/check-powershell-test-purity.ps1 +7 -1
  179. package/resources/codex-and-agents-customizations/.codex/hooks/check-python-test-purity.ps1 +7 -1
  180. package/resources/codex-and-agents-customizations/.codex/hooks/codex-epic-child-launch-attestation.ps1 +1 -1
  181. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-checkpoint-monotonic.ps1 +7 -1
  182. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-codex-model-routing.ps1 +8 -2
  183. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-completion-consistency.ps1 +97 -44
  184. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-completion-helpers.ps1 +105 -0
  185. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-child-worktree-binding.ps1 +7 -1
  186. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-merge-gate.ps1 +37 -5
  187. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-planning-only.ps1 +6 -0
  188. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-root-invocation.ps1 +7 -1
  189. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-wave-barrier.ps1 +7 -1
  190. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-worktree-removal-gate.ps1 +54 -41
  191. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-evidence-locations.ps1 +7 -1
  192. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-epic-scope.ps1 +35 -14
  193. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-helpers.ps1 +31 -58
  194. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-modes.ps1 +63 -47
  195. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-targets.ps1 +433 -0
  196. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate.ps1 +24 -11
  197. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-powershell-batch-budget.ps1 +8 -2
  198. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-promotion-mcp-only.ps1 +13 -4
  199. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-python-batch-budget.ps1 +8 -2
  200. package/resources/codex-and-agents-customizations/.codex/hooks/feature-folder-resolution.ps1 +373 -0
  201. package/resources/codex-and-agents-customizations/.codex/hooks/feature-review-coverage-thresholds.ps1 +85 -0
  202. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-heredoc.ps1 +119 -0
  203. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-invocation-operands.ps1 +198 -0
  204. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-invocation.ps1 +254 -255
  205. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-payload-powershell.ps1 +201 -0
  206. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-payload.ps1 +484 -0
  207. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-scanner.ps1 +27 -110
  208. package/resources/codex-and-agents-customizations/.codex/hooks/hook-dependency-guard.ps1 +114 -0
  209. package/resources/codex-and-agents-customizations/.codex/hooks/hook-docs-only-diff.ps1 +493 -0
  210. package/resources/codex-and-agents-customizations/.codex/hooks/validate-bash.ps1 +8 -2
  211. package/resources/codex-and-agents-customizations/.codex/hooks/validate-codex-subagent-routing.ps1 +7 -1
  212. package/resources/codex-and-agents-customizations/.codex/hooks/validate-feature-review-coverage.ps1 +24 -8
  213. package/resources/codex-and-agents-customizations/pack-manifests/core.json +9 -0
  214. package/resources/customizations/.github/agents/csharp-typed-engineer.agent.md +2 -2
  215. package/resources/customizations/.github/instructions/csharp-code-change.instructions.md +4 -4
  216. package/resources/customizations/.github/instructions/csharp-unit-test.instructions.md +2 -2
  217. package/resources/customizations/.github/skills/acceptance-criteria-tracking/SKILL.md +9 -1
  218. package/resources/customizations/.github/skills/atomic-plan-contract/SKILL.md +4 -0
  219. package/resources/customizations/.github/skills/evidence-and-timestamp-conventions/SKILL.md +13 -0
  220. package/resources/customizations/.github/skills/feature-review-workflow/SKILL.md +1 -1
  221. package/resources/powershell/PoshQC/PoshQC.Coverage.psm1 +314 -0
  222. package/resources/powershell/PoshQC/PoshQC.Testing.psm1 +25 -28
  223. package/resources/powershell/PoshQC/PoshQC.psm1 +1 -0
  224. package/resources/powershell/PoshQC/README.md +8 -2
  225. package/resources/powershell/PoshQC/settings/pester.runsettings.psd1 +2 -315
@@ -42,6 +42,11 @@ identical forms.
42
42
  - **Promotion.** Unpromoted items are promoted by their own preparation-mode child, not by the
43
43
  planner. The `preparation` route already carries the promotion MCP tools (`new_potential_entry`,
44
44
  `potential_to_issue`, `new_active_feature_folder`).
45
+ - **Issue adoption.** Issue-number items are adopted, not promoted. The item's GitHub issue
46
+ already exists, so its preparation child verifies the issue read-only and records a top-level
47
+ `issue_adoption` object in its checkpoint instead of calling `potential_to_issue` or the
48
+ promotion-entry tool. The delegation prompt carries that instruction as the issue-adoption line
49
+ under `## Preparation Fan-Out`.
45
50
  - **`issue_num` resolution.** `issue_num` is the primary key for every item reference. It is known
46
51
  at intake for issue-number items. For potential-entry items, record negative placeholders in
47
52
  intake order (`-1`, `-2`, ...) and back-fill the real number from each child's promotion receipt
@@ -102,11 +107,13 @@ invocations after the initial plan. Use `/parallel-plan` for intake and `/parall
102
107
  admit an item into a run that is already in flight.
103
108
 
104
109
  Each delegation prompt includes this literal kickoff line, followed by the model-budget marker
105
- line:
110
+ line and, for an issue-number item only, the issue-adoption line:
106
111
 
107
112
  > `Preparation mode: true. route_id: preparation. parallel_slug: <slug>. Perform promotion, research, feature documents (spec.md, user-story.md), atomic planning, and preflight clearance only. Atomic execution, PR authoring, and CI monitoring are out of scope for this run and are executed later by parallel-orchestrator. After the atomic-executor preflight returns PREFLIGHT: ALL CLEAR, commit the feature folder and plan to the current branch, push the current branch to origin, set out-of-scope step statuses to not-applicable, set next_step to S5_atomic_execution, and stop, reporting the plan-path and preflight status.`
108
113
  >
109
114
  > `model_budget.fable_policy: <disabled|available|preferred>.`
115
+ >
116
+ > `Issue adoption: this item's GitHub issue already exists. Verify it read-only (gh issue view), do not call potential_to_issue or the promotion-entry tool, and record a top-level issue_adoption object in the checkpoint per .claude/rules/orchestrator-state.md with origin filed_before_orchestration (or transferred when the issue was transferred), waiving potential_to_issue and the promotion-entry tool for the checkpoint's promotion-type. When a lifecycle record for the item exists under docs/features/potential/promoted/, cite it as potential_record.`
110
117
 
111
118
  Properties of that line, each individually load-bearing:
112
119
 
@@ -128,6 +135,13 @@ does not apply to preparation. It contains no `Parallel mode: true`, so F7's fut
128
135
  hook, which matches that marker, will not gate preparation either. Both omissions are intentional
129
136
  and must be preserved verbatim when the line is emitted.
130
137
 
138
+ **Issue-adoption line.** The issue-adoption line is emitted only for an issue-number item, after
139
+ the model-budget marker line, and is omitted for a potential-entry item, whose child promotes it.
140
+ The line carries no mode marker, no digits, and no active feature-folder path, so hook target
141
+ resolution and mode classification are unchanged. The preparation checkpoint does not carry over
142
+ to execution, so the execution child records its own adoption (see
143
+ `.claude/skills/parallel-orchestrate/SKILL.md`, kickoff element 4).
144
+
131
145
  **No edit to shared surfaces.** No edit is made to `.claude/skills/orchestrate/SKILL.md` or to
132
146
  `config/orchestration-routing.json`, including the `preparation` route. The route mechanism is
133
147
  marker-driven; the child contract's "commit ... to the current branch" wording is satisfied by a
@@ -135,8 +149,9 @@ branch created off `origin/main`; and `routes.preparation` declares no epic-spec
135
149
  agent, skill, or MCP tool.
136
150
 
137
151
  **Collected per child at termination:** `plan-path`, preflight status, the promotion receipt (the
138
- `issue_num` back-fill source), the model-routing receipt with `logical_agent: "orchestrator"`, the
139
- topology receipt, `branch_name`, and `worktree_path`. There is no fan-in merge step: the planner
152
+ `issue_num` back-fill source for a potential-entry item) or, for an issue-number item, the
153
+ `issue_adoption` record from the child checkpoint, the model-routing receipt with
154
+ `agent: "orchestrator"`, the topology receipt, `branch_name`, and `worktree_path`. There is no fan-in merge step: the planner
140
155
  fetches and records each pushed item branch, back-fills `issue_num` into the manifest on
141
156
  `parallel/<slug>-plan`, and updates the checkpoint.
142
157
 
@@ -276,6 +291,44 @@ concurrently.
276
291
  Derivation, the V1-V3 rules, and the contention relation are implemented upstream. This skill calls
277
292
  them; it defines none of them.
278
293
 
294
+ ## Complexity Assessment
295
+
296
+ **Assessment point.** Assess each item's complexity band after the item is `prepared` — its
297
+ preflight status is `PREFLIGHT: ALL CLEAR` and its `declared` radius is V1/V2-clear — and before
298
+ cohort seeding, which consumes the band through the scheduling entry point. The parallel parent
299
+ reads the same band to choose the `model` of that item's `Agent(orchestrator)` spawn, so an item
300
+ without a band cannot be routed.
301
+
302
+ **Signals and scale.** Read the signal catalog and the band scale from `model_policy` in
303
+ `config/orchestration-routing.json`. Record every signal the item's approved plan and spec exhibit
304
+ in `signals_present`, then choose a band from the scale.
305
+
306
+ **Floor.** Compute the floor with `Get-ComplexityFloor -SignalsPresent <signals>` from
307
+ `.claude/lib/model-routing/ModelRouting.psm1` in PowerShell, or `compute_complexity_floor(signals)`
308
+ in Python. The chosen band must be at or above the floor; the floor is a lower bound only.
309
+
310
+ **Model resolution.** Resolve the child model with
311
+ `Resolve-DelegationModel -Agent orchestrator -Band <band> -FablePolicy <fable_policy>` from the same
312
+ module, or `resolve_delegation_model("orchestrator", band, fable_policy)` in Python, using the
313
+ run's `model_budget.fable_policy`.
314
+
315
+ **Per-item record.** Write three fields on the item:
316
+
317
+ - `complexity_band` — one of `C1`, `C2`, `C3`, `C4`.
318
+ - `complexity_assessment` — `{ band, floor, signals_present, rationale, assessed_at }`, where `band`
319
+ equals `complexity_band`, `floor` is the computed floor, `rationale` is a non-empty string, and
320
+ `assessed_at` is a non-empty ISO-8601 string.
321
+ - `model_routing_receipt` — `{ agent: "orchestrator", phase, complexity_band, fable_policy,
322
+ table_model, clamped_from, model }`, copied from the resolver output, with `complexity_band`
323
+ equal to the item's band.
324
+
325
+ The kickoff artifact's `## Item Summary` `complexity` cell for the item equals its
326
+ `complexity_band`.
327
+
328
+ **Routing input, not a verdict.** The band is a routing input for model selection and edge
329
+ derivation. It is distinct from the deliberately absent worthiness verdict: assessing a band never
330
+ admits, rejects, or reorders an item.
331
+
279
332
  ## Cohort Seeding
280
333
 
281
334
  Reach cohort computation through the **destination-runtime bash entry point** under
@@ -448,7 +501,8 @@ Top-level fields: `objective`, `parallel_slug`, `parallel_manifest_path`, `mode`
448
501
  `last_updated`. F3's landed required-key set (planner invariant P1) is a strict subset of this
449
502
  list, and `plan_home_branch` is a permitted additional field.
450
503
 
451
- Per item: `issue_num`, `feature_folder`, `kind`, `state`, `complexity_band`, `preparation_status`,
504
+ Per item: `issue_num`, `feature_folder`, `kind`, `state`, `complexity_band`, `complexity_assessment`,
505
+ `preparation_status`,
452
506
  `research_path`, `plan_path`, `preflight_status`, `branch_name`, `worktree_path`, `blast_radius`
453
507
  (with `source: "declared"`), `radius_validation` (the `v1`, `v2`, and `v3` results with their
454
508
  severities), `model_routing_receipt`, and `topology_receipt`.
@@ -461,8 +515,10 @@ blast-radius overlap.
461
515
  `require_ready_for_execution` gate: at least two items (invariant P6); every item
462
516
  `preparation_status: prepared` with `preflight_status` exactly `PREFLIGHT: ALL CLEAR`, non-empty
463
517
  `research_path` and `plan_path`, and `blast_radius.source == "declared"` (P7); `next_step` exactly
464
- the ready sentinel `PARALLEL_EXECUTION_READY` (P8); and `kickoff_prompt_path` exactly
465
- `artifacts/orchestration/parallel-kickoff-<slug>.md` (P9).
518
+ the ready sentinel `PARALLEL_EXECUTION_READY` (P8); `kickoff_prompt_path` exactly
519
+ `artifacts/orchestration/parallel-kickoff-<slug>.md` (P9); and every item carries a valid
520
+ `complexity_band`, a `complexity_assessment`, and a `model_routing_receipt` with
521
+ `agent: "orchestrator"` that agree with the band (P10).
466
522
 
467
523
  **Git integrity is F4-owned.** F3's `require_ready_for_execution` gate is structural only, so
468
524
  verifying that each item's committed plan blob exists on that item's pushed branch ref — and that
@@ -595,7 +651,7 @@ With no ready feature checkpoint, the exemption admits two attribution-trailer f
595
651
  - The trailer option: `git commit -m 'docs: plan' --trailer 'Co-Authored-By: Name <email>' --trailer 'Claude-Session: <url>' -- <exempt paths>`. The separate-value form and the `--trailer=<value>` form are both admitted, any number of times, on `git commit` only; `git add --trailer` and a trailer option with no value are denied. Git writes every trailer value into one trailer block.
596
652
  - The one-paragraph multi-message form: the subject in the first `-m` and every trailer in one single-quoted second `-m` value, separated by a literal newline. Each `-m` value becomes its own paragraph and git parses only the last paragraph as the trailer block, so trailers split across separate `-m` values do not form one trailer block.
597
653
 
598
- Quoting rules: `$` and backtick are literal and admitted inside single quotes, and denied outside quotes and inside double quotes, where the shell expands them. `<` and `>` are admitted inside single or double quotes and denied outside quotes. An unquoted `#` is denied anywhere, because it starts a shell comment that the exemption does not model; a `#` inside quotes is admitted. A typographic quote character (U+2018 to U+201E) anywhere in the command line is denied, because a PowerShell host reads it as a quote.
654
+ Quoting rules: `$` and backtick are literal and admitted inside single quotes, and denied outside quotes and inside double quotes, where the shell expands them. `<` and `>` are admitted inside single or double quotes and denied outside quotes. An unquoted `#` is denied anywhere, because it starts a shell comment that the exemption does not model; a `#` inside quotes is admitted. A typographic quote character (U+2018 to U+201E) anywhere in the command line is denied, because a PowerShell host reads it as a quote. Because the executing shell is undetermined (issue #735), a shape whose meaning differs between a POSIX shell and PowerShell is denied: a backslash anywhere in the command line is denied, and `{`, `}`, `,`, `(`, `)`, and `@` are denied outside quotes. Every staging operand must be a plain forward-slash repository-relative path that uses only the characters `A-Z a-z 0-9 . _ / -`.
599
655
 
600
656
  Not admitted: heredoc-fed messages, including `git commit -m "$(cat <<'EOF' ... EOF)"` and `git commit -F - <<'EOF'`, and message files supplied through `-F <file>` or `--file=<file>`. Use one of the two forms above instead.
601
657
 
@@ -73,17 +73,28 @@ Do not record a partial removal, and do not record the rejection itself in `muta
73
73
 
74
74
  1. Re-derive durable state as above and resolve the item key against `items[]`.
75
75
 
76
- 2. Decide the removal by calling `decide_removal(item_key, items, disposition)` from
77
- `scripts/dev_tools/parallel_mutation_protocol.py`. The engine raises the dedicated rejection
78
- exception for every rejected row; surface its message and stop.
76
+ 2. Decide the removal through the bundled entry point:
77
+
78
+ ```shell
79
+ bash .claude/lib/bash/remove-parallel-item.sh decide --item <key> --state <state> --removal-disposition <detach|abandon>
80
+ ```
81
+
82
+ `--state` is the state re-derived in step 1; omit it when the key resolves to no `items[]`
83
+ entry. Pass the caller's disposition as `--removal-disposition`, and omit the option when none
84
+ was supplied. Exit 0 prints the decision object (`item_key`, `prior_state`, `new_state`,
85
+ `disposition`, `triggers_recompute`) as one JSON line on stdout. Exit 1 is a rejected row:
86
+ surface its single stderr line and stop. Exit 2 is a usage error in the invocation itself.
79
87
 
80
88
  3. **Unstarted removal (recompute).** Set the item's state to `withdrawn`, drop its vertex, and
81
- recolor by calling `recolor_unstarted(unstarted_items, conflict_edges, pinned,
82
- current_generation, current_cohort=current_cohort,
83
- highest_pinned_cohort=highest_pinned_cohort)`. Write
84
- `RecolorResult.cohort_assignments` into `cohorts[]` and set the top-level `recolor_generation`
85
- to `RecolorResult.generation`; the generation increments by exactly one. The result names no
86
- pinned key, so no in-flight item moves.
89
+ recolor through the bundled entry point:
90
+
91
+ ```shell
92
+ bash .claude/lib/bash/remove-parallel-item.sh recolor --unstarted "<k> ..." --edges "<a>:<b> ..." --pinned "<k> ..." --generation <g> --current-cohort <c> --highest-pinned-cohort <h>
93
+ ```
94
+
95
+ Write the output field `cohort_assignments` into `cohorts[]` and set the top-level
96
+ `recolor_generation` to the output field `generation`; the generation increments by exactly
97
+ one. The result names no pinned key, so no in-flight item moves.
87
98
 
88
99
  `current_cohort` is F3's top-level field, read from the re-verified durable state: the lowest
89
100
  current-generation cohort index still holding a non-terminal item. Under the per-edge barrier an
@@ -117,8 +128,18 @@ Do not record a partial removal, and do not record the rejection itself in `muta
117
128
  invocation above, so an ad hoc command is not matchable and would bypass the confirmation
118
129
  contract entirely. One invocation, one item, both side effects.
119
130
 
120
- 6. **Append exactly one `mutations[]` entry** for a successful removal, built by
121
- `build_remove_entry` from `scripts/dev_tools/parallel_mutation_protocol.py`:
131
+ 6. **Append exactly one `mutations[]` entry** for a successful removal, built through the
132
+ bundled entry point:
133
+
134
+ ```shell
135
+ bash .claude/lib/bash/remove-parallel-item.sh entry --item <key> --prior-state <state> --removal-disposition <detach|abandon> --recompute <true|false> --generation <g> --at <timestamp>
136
+ ```
137
+
138
+ `--recompute` equals the decision's `triggers_recompute`. `--generation` is the generation
139
+ before the removal. Omit `--removal-disposition` for an unstarted item. `--at` is the mutation
140
+ timestamp in `yyyy-MM-ddTHH-mm` form; when it is omitted the entry point uses the current UTC
141
+ minute. Exit 0 prints the entry as one JSON line on stdout; exit 1 is a contract rejection whose
142
+ single stderr line is surfaced before stopping; exit 2 is a usage error.
122
143
 
123
144
  | Case | `op` | `item_key` | `prior_state` | `new_state` | `disposition` | `recolor_generation` |
124
145
  | --- | --- | --- | --- | --- | --- | --- |
@@ -127,7 +148,9 @@ Do not record a partial removal, and do not record the rejection itself in `muta
127
148
  | Remove, `abandon` | `remove` | item key | `in_flight` | `withdrawn` | `abandon` | `g` (unchanged) |
128
149
 
129
150
  `disposition` is non-null only on an in-flight removal and is null on the unstarted row. The `at`
130
- timestamp comes from the engine's injected clock seam.
151
+ timestamp comes from the `--at` value, or from the current UTC minute when `--at` is omitted.
152
+ The repository-local module `scripts/dev_tools/parallel_mutation_protocol.py` is retained as the
153
+ parity reference for this entry point and is not invoked on this path.
131
154
 
132
155
  7. **Validate the checkpoint** before treating the removal as applied. Run the
133
156
  `validate_orchestration_artifacts` MCP tool with `artifact_type:
@@ -49,7 +49,7 @@ PreToolUse hook can verify the body passed to `gh pr create --body-file` is the
49
49
  produced:
50
50
 
51
51
  1. Write the body text to `artifacts/pr_body_<N>.md`, where `<N>` is the target issue or PR number.
52
- 2. Compute the SHA-256 of the body file bytes and render it as lowercase hexadecimal.
52
+ 2. Compute the SHA-256 of the body file by running `sha256sum artifacts/pr_body_<N>.md` as a single command (no chaining) and take the lowercase hexadecimal digest.
53
53
  3. Write the sibling receipt `artifacts/pr_body_<N>.receipt.json` with the shape:
54
54
 
55
55
  ```json
@@ -63,6 +63,8 @@ produced:
63
63
  }
64
64
  ```
65
65
 
66
+ Obtain it by running `date -u +%Y-%m-%dT%H:%M:%SZ` as a single command.
67
+
66
68
  4. Pass the body to the pull request via `--body-file artifacts/pr_body_<N>.md`; do not use inline
67
69
  `--body`.
68
70
 
@@ -6,7 +6,7 @@ description: 'Quota throttling and account-switching policy for multi-agent orch
6
6
  # Quota Throttling and Account-Switching Policy
7
7
 
8
8
  Policy for keeping long-running, multi-agent orchestration inside account usage limits without
9
- losing work. Derived from about five days of continuous multi-agent orchestration (TaskMaster runs
9
+ losing work. Derived from about five days of continuous multi-agent orchestration (consumer-repository runs
10
10
  `bugs-2026-09-11` and `bugs-2026-09-17`).
11
11
 
12
12
  Every figure marked **MEASURED** was observed; figures marked **ESTIMATE** are extrapolations.
@@ -14,7 +14,7 @@ Use this skill when:
14
14
  - Audit findings require remediation (FAIL or material PARTIAL findings).
15
15
  - Toolchain checks fail.
16
16
  - Acceptance criteria are unmet.
17
- - A required CI check fails after the pull request is open.
17
+ - A CI check fails after the pull request is open.
18
18
  - Any new finding surfaces during execution of an active cycle (in which case begin a new cycle, do not extend the active one).
19
19
 
20
20
  ## Full Handoff Chain
@@ -52,7 +52,9 @@ Trigger remediation when any of these are true:
52
52
  - Audit artifacts contain FAIL or meaningful PARTIAL findings.
53
53
  - Toolchain checks fail (format, lint, type-check, test, contract, or integration stages).
54
54
  - Acceptance criteria are not met.
55
- - A required CI check fails after the PR is open (workflow-file changes specifically must enter the loop and trigger the `modified-workflow-needs-green-run` rule defined in `.claude/skills/feature-review-workflow/SKILL.md`).
55
+ - A CI check fails after the PR is open (workflow-file changes specifically must enter the loop and trigger the `modified-workflow-needs-green-run` rule defined in `.claude/skills/feature-review-workflow/SKILL.md`).
56
+
57
+ Remediation triggers only on blocking findings classified `autonomous`. Each blocking finding carries one remediability class (`autonomous`, `external_dependency`, `policy_hold`, `awaiting_ci`, or `human_decision_required`; `autonomous` when no class is stated). When no blocking finding is `autonomous`, the review verdict is `HALT_NON_REMEDIABLE` or `AWAITING_CI`: the orchestrator halts or waits, and no cycle, remediation plan, or `atomic-planner` handoff is created.
56
58
 
57
59
  ## Required Remediation Inputs
58
60
 
@@ -118,11 +120,13 @@ Iteration ceiling. When a cycle's `iterations` would exceed 2, the orchestrator
118
120
 
119
121
  When preflight is clear, `atomic-executor` executes the plan task-by-task. The executor invokes workers (`python-typed-engineer`, `typescript-engineer`, `csharp-typed-engineer`, `powershell-typed-engineer`) internally as needed. The orchestrator does not call workers.
120
122
 
123
+ Before the reaudit, the orchestrator records `candidate_applied` on the current cycle: `true` only when execution finished with `execution_status: "complete"` and the pre-reaudit commit recorded a non-empty change set, and `false` otherwise (execution not started, execution failed, or an empty staged change set). `remediation_loop.completed_attempts` equals the number of cycles whose `candidate_applied` is `true`, and a cycle with `candidate_applied: false` consumes no attempt number.
124
+
121
125
  When execution is complete, the orchestrator delegates to `feature-review`. `feature-review` produces the three reaudit artifacts under `docs/features/active/<slug>/audit/<exit-ts>/` using the exit timestamp.
122
126
 
123
127
  ## Exit Gate
124
128
 
125
- The orchestrator reads the latest cycle's three reaudit artifacts and computes `blocking_count` as the total number of FAIL findings plus material PARTIAL findings flagged as blocking. Only when `blocking_count == 0` does the orchestrator set `exit_condition_met = true` on the current cycle and mark the remediation loop complete. Otherwise, the orchestrator opens cycle N+1 with a new `remediation/<new-ts>/remediation-inputs.md` and runs the full chain again.
129
+ The orchestrator reads the latest cycle's three reaudit artifacts and computes `blocking_count` as the total number of FAIL findings plus material PARTIAL findings flagged as blocking. Only when `blocking_count == 0` does the orchestrator set `exit_condition_met = true` on the current cycle and mark the remediation loop complete. Otherwise, when at least one remaining blocking finding is `autonomous`, the orchestrator opens cycle N+1 with a new `remediation/<new-ts>/remediation-inputs.md` and runs the full chain again. When the remaining blocking findings are all non-remediable, the orchestrator does not open the next cycle: it halts on `HALT_NON_REMEDIABLE` or waits on `AWAITING_CI`.
126
130
 
127
131
  ## Context Package (When Required)
128
132
 
@@ -40,25 +40,42 @@
40
40
  ".claude/hooks/enforce-orchestration-preimplementation-gate-epic-scope.ps1",
41
41
  ".claude/hooks/enforce-orchestration-preimplementation-gate-helpers.ps1",
42
42
  ".claude/hooks/enforce-orchestration-preimplementation-gate-modes.ps1",
43
+ ".claude/hooks/enforce-orchestration-preimplementation-gate-targets.ps1",
43
44
  ".claude/hooks/enforce-parallel-abandon-gate.ps1",
44
45
  ".claude/hooks/enforce-parallel-cohort-barrier.ps1",
45
46
  ".claude/hooks/enforce-parallel-cohort-barrier-helpers.ps1",
46
47
  ".claude/hooks/enforce-parallel-drift-gate.ps1",
47
48
  ".claude/hooks/enforce-parallel-drift-gate-helpers.ps1",
48
49
  ".claude/hooks/enforce-parallel-worktree-removal-gate.ps1",
50
+ ".claude/hooks/enforce-pr-author-command-allowlist.ps1",
51
+ ".claude/hooks/enforce-pr-author-skill.artifact-root.ps1",
52
+ ".claude/hooks/enforce-pr-author-skill.docs-only.ps1",
49
53
  ".claude/hooks/enforce-pr-author-skill.epic-base-branch.ps1",
50
54
  ".claude/hooks/enforce-pr-author-skill.ps1",
51
55
  ".claude/hooks/enforce-pr-author-skill-helpers.ps1",
52
56
  ".claude/hooks/enforce-prd-feature-before-planner-helpers.ps1",
53
57
  ".claude/hooks/enforce-prd-feature-before-planner.ps1",
54
58
  ".claude/hooks/enforce-promotion-mcp-only.ps1",
59
+ ".claude/hooks/feature-folder-resolution.ps1",
60
+ ".claude/hooks/feature-review-coverage-thresholds.ps1",
61
+ ".claude/hooks/hook-command-heredoc.ps1",
55
62
  ".claude/hooks/hook-command-invocation.ps1",
63
+ ".claude/hooks/hook-command-invocation-operands.ps1",
64
+ ".claude/hooks/hook-command-payload.ps1",
65
+ ".claude/hooks/hook-command-payload-powershell.ps1",
56
66
  ".claude/hooks/hook-command-scanner.ps1",
67
+ ".claude/hooks/hook-dependency-guard.ps1",
68
+ ".claude/hooks/hook-docs-only-diff.ps1",
57
69
  ".claude/hooks/persist-session-id.ps1",
70
+ ".claude/hooks/subagentstop-envelope.ps1",
58
71
  ".claude/hooks/validate-bash.ps1",
59
72
  ".claude/hooks/validate-discovery-artifact-gate.ps1",
60
73
  ".claude/hooks/validate-executor-output.ps1",
74
+ ".claude/hooks/validate-feature-review-coverage-metrics.ps1",
75
+ ".claude/hooks/validate-feature-review-coverage-rules.ps1",
61
76
  ".claude/hooks/validate-feature-review-coverage.ps1",
77
+ ".claude/hooks/validate-orchestrator-output-resolution.ps1",
78
+ ".claude/hooks/validate-orchestrator-output-routing.ps1",
62
79
  ".claude/hooks/validate-orchestrator-output.ps1",
63
80
  ".claude/hooks/validate-planner-output.ps1",
64
81
  ".claude/hooks/validate-prd-feature-output.ps1",
@@ -136,13 +153,16 @@
136
153
  ".claude/lib/orchestrator-state/OrchestratorStateCompletion.psm1",
137
154
  ".claude/lib/orchestrator-state/OrchestratorStateCheckpointValue.psm1",
138
155
  ".claude/lib/orchestrator-state/OrchestratorStateReceipts.psm1",
156
+ ".claude/lib/orchestrator-state/OrchestratorStateRemediationAccounting.psm1",
139
157
  ".claude/lib/orchestrator-state/OrchestratorStateModelReceipts.psm1",
140
158
  ".claude/lib/orchestrator-state/OrchestratorStateCodexModelReceipts.psm1",
141
159
  ".claude/lib/orchestrator-state/OrchestratorStateCodexTopologyReceipts.psm1",
142
160
  ".claude/lib/orchestrator-state/OrchestratorStateRoutingMatrix.psm1",
143
161
  ".claude/lib/orchestrator-state/OrchestratorStateCompletionChecks.psm1",
144
162
  ".claude/lib/orchestrator-state/OrchestratorStateRoutingContract.psm1",
163
+ ".claude/lib/orchestrator-state/OrchestratorStateIssueAdoption.psm1",
145
164
  ".claude/lib/orchestrator-state/OrchestratorStateUnconditional.psm1",
165
+ ".claude/lib/orchestrator-state/OrchestratorStateEpicWaveBarrier.psm1",
146
166
  ".claude/lib/discovery-validation/DiscoveryValidation.psm1",
147
167
  ".claude/lib/codex-routing/CodexDeployment.psm1",
148
168
  ".claude/lib/codex-routing/CodexTopology.psm1",
@@ -169,13 +189,18 @@
169
189
  ".claude/lib/bash/abandon-parallel-item.sh",
170
190
  ".claude/lib/bash/compute-cohorts.sh",
171
191
  ".claude/lib/bash/compute-concurrency-batches.sh",
192
+ ".claude/lib/bash/mutate-parallel-run.sh",
172
193
  ".claude/lib/bash/parallel-cohorts.sh",
173
194
  ".claude/lib/bash/parallel-common.sh",
174
195
  ".claude/lib/bash/parallel-items-validate.sh",
175
196
  ".claude/lib/bash/parallel-lane-assertion.sh",
176
197
  ".claude/lib/bash/parallel-manifest-validate.sh",
198
+ ".claude/lib/bash/parallel-mutation-cli.sh",
199
+ ".claude/lib/bash/parallel-mutation-ops.sh",
200
+ ".claude/lib/bash/parallel-mutation.sh",
177
201
  ".claude/lib/bash/parallel-yaml-emit.sh",
178
202
  ".claude/lib/bash/parallel-yaml-scan.sh",
203
+ ".claude/lib/bash/remove-parallel-item.sh",
179
204
  ".claude/lib/bash/report-lane-assertion.sh",
180
205
  ".claude/lib/bash/validate-parallel-manifest.sh",
181
206
  "config/orchestration-routing.json",
@@ -68,6 +68,14 @@ During plan execution, after completing a task whose work satisfies an acceptanc
68
68
 
69
69
  Timing: Check off AC items as soon as the corresponding plan task passes verification — do not defer all AC updates to the end of plan execution.
70
70
 
71
+ ### CI-Dependent Criteria
72
+
73
+ A CI-dependent criterion is one whose verification requires the result of CI on the PR head. It cannot be verified before the pull request exists, so it stays unchecked and is listed as pending-CI in the AC verification artifact until CI has run.
74
+
75
+ - Owner: the item's own orchestrator run owns the check-off and performs it at S9; this is the one case in which an orchestrator run checks off AC. A parent or coordinating session never commits the check-off from its own root.
76
+ - Timing: after the CI green gate (S9) records `ci_gate.conclusion` as `success`, and before the run reports DONE.
77
+ - Push and re-verify: the check-off is committed in the item's own worktree and pushed to the PR branch, and the CI green gate is re-run against the new head SHA so that `ci_gate.head_sha` equals the final PR head before DONE.
78
+
71
79
  ### When Reviewers Check Off AC
72
80
 
73
81
  During feature review (feature-audit phase):
@@ -78,7 +86,7 @@ During feature review (feature-audit phase):
78
86
 
79
87
  ### When Orchestrators Enforce AC Tracking
80
88
 
81
- Orchestrators do not directly check off AC items. Instead:
89
+ Orchestrators do not directly check off AC items. The one exception is a CI-dependent criterion, which the item's own orchestrator run checks off at S9 as described in `### CI-Dependent Criteria` above. For every other criterion, orchestrators instead:
82
90
 
83
91
  1. Ensure delegated executors and reviewers reference this skill.
84
92
  2. After executor or reviewer completion, verify that AC source files reflect delivered work (spot-check; do not re-execute verification).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: architecture-boundaries
3
- description: Architecture boundary enforcement rules for the No-COM architecture.
3
+ description: Architecture boundary enforcement rules for a host-neutral layered architecture.
4
4
  ---
5
5
 
6
6
  # Converted rule
@@ -16,7 +16,7 @@ Architecture boundary enforcement is a uniform gate across all tiers (T1–T4).
16
16
  - **TypeScript:** `dependency-cruiser`. Configuration file pattern: `.dependency-cruiser.cjs`.
17
17
  - **.NET (when the backend exists):** `NetArchTest.Rules`. Test project naming pattern: `*.ArchitectureTests`.
18
18
 
19
- ## No-COM Architecture Rules (enforceable assertions)
19
+ ## Host-Neutral Architecture Rules (enforceable assertions)
20
20
 
21
21
  Production code in this repository must satisfy each of the following assertions. Each assertion is enforced by `dependency-cruiser` (TypeScript) or `NetArchTest.Rules` (.NET) where applicable; legacy import utilities, when added, must satisfy the same assertions.
22
22
 
@@ -39,9 +39,9 @@ Production code in this repository must satisfy each of the following assertions
39
39
 
40
40
  ## Layer Boundary Assertions (.NET, applies once the backend exists)
41
41
 
42
- - `TaskMaster.Domain` must have zero references to Outlook PIA, VSTO, or Office.js types.
43
- - `TaskMaster.Application` may depend on `TaskMaster.Domain` only.
44
- - Adapter projects may depend on `TaskMaster.Domain` and `TaskMaster.Application`; domain may not depend on adapters.
42
+ - `<Product>.Domain` must have zero references to Outlook PIA, VSTO, or Office.js types.
43
+ - `<Product>.Application` may depend on `<Product>.Domain` only.
44
+ - Adapter projects may depend on `<Product>.Domain` and `<Product>.Application`; domain may not depend on adapters.
45
45
 
46
46
  ## Enforcement Outcome
47
47
 
@@ -55,6 +55,17 @@ For each task:
55
55
  4. Check off the plan file on disk immediately after verification passes.
56
56
  5. Check off satisfied acceptance criteria in the authoritative requirement source file per `acceptance-criteria-tracking`.
57
57
 
58
+ ## Scratch Location
59
+
60
+ Concurrent child runs in one session share one session scratchpad, so every scratch file a run writes lives in a directory unique to the child.
61
+
62
+ - `SCRATCH` resolves to `<session scratchpad>/issue-<issue-num>/`, where `<issue-num>` is the plan's canonical issue number.
63
+ - Every scratch file, helper script, staged copy, and coverage report a plan names lives under `SCRATCH`. Subdirectories such as `SCRATCH/stage/` are permitted.
64
+ - Create `SCRATCH` before the first scratch write. Never write a scratch file to the scratchpad root or to a fixed shared name outside `SCRATCH`.
65
+ - When a plan written before this rule defines `SCRATCH` as the bare session scratchpad, treat that definition as `<session scratchpad>/issue-<issue-num>/`. This is a mechanical micro-action, not replanning.
66
+ - Plans and evidence artifacts record the literal token `SCRATCH`, never a host path.
67
+ - If two runs for the same issue can execute at once, the run-unique form `issue-<issue-num>-<yyyy-MM-ddTHH-mm>` replaces `issue-<issue-num>`.
68
+
58
69
  ## Non-Negotiable Constraints
59
70
 
60
71
  - Do not invent new phases or tasks.
@@ -117,6 +117,10 @@ For short-path/minimal-audit plans, Phase 0 evidence is incomplete unless both a
117
117
 
118
118
  `Output Summary:` is mandatory for each command-step artifact and must concisely summarize the essential result signal (for example: pass/fail status, key counts, coverage headline, or primary diagnostic).
119
119
 
120
+ ## Evidence Filename Timestamps in Plans
121
+
122
+ Plans name evidence artifacts `<name>.<timestamp>.md` and never fix a plan-time stamp in an evidence filename. An acceptance condition identifies a consumed evidence artifact by the derivation in `evidence-and-timestamp-conventions` (`### Evidence Filename Timestamp`): the lexicographically greatest file matching `<name>.*.md`, not a pre-stamped literal path. This section governs artifact paths only: asserted search tokens remain concrete.
123
+
120
124
  ## Coverage Evidence Contract (Mandatory when policy requires coverage)
121
125
 
122
126
  For any language in scope where repository policy requires coverage validation:
@@ -34,6 +34,16 @@ Each task must be:
34
34
  - independently verifiable,
35
35
  - free of placeholder text.
36
36
 
37
+ ## Scratch Location
38
+
39
+ Concurrent child runs in one session share one session scratchpad, so every plan places its scratch files in a directory unique to the child.
40
+
41
+ - `SCRATCH` resolves to `<session scratchpad>/issue-<issue-num>/`, where `<issue-num>` is the plan's canonical issue number. Every plan that uses scratch files defines `SCRATCH` this way.
42
+ - Every scratch file, helper script, staged copy, and coverage report a plan names lives under `SCRATCH`. Subdirectories such as `SCRATCH/stage/` are permitted.
43
+ - A plan never directs a scratch file to the scratchpad root or to a fixed shared name outside `SCRATCH`.
44
+ - Plans and evidence artifacts record the literal token `SCRATCH`, never a host path.
45
+ - If two runs for the same issue can execute at once, the run-unique form `issue-<issue-num>-<yyyy-MM-ddTHH-mm>` replaces `issue-<issue-num>`.
46
+
37
47
  ## Mandatory Preflight Loop
38
48
 
39
49
  Before a plan is finalized:
@@ -10,8 +10,8 @@ This rule file summarizes the C#-specific policies for this repository.
10
10
  ## Toolchain
11
11
 
12
12
  1. **Formatting — CSharpier**: All C# source files must be formatted with CSharpier. Do not use `dotnet format`. Command: `dotnet tool run csharpier .` or `csharpier .`
13
- 2. **Linting — .NET Analyzers**: C# code must pass Roslyn/.NET analyzer diagnostics. Command: `msbuild TaskMaster.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`
14
- 3. **Type Checking — Nullable Analysis**: Enable nullable reference types and fail on warnings. Command: `msbuild TaskMaster.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:Nullable=enable /p:TreatWarningsAsErrors=true`
13
+ 2. **Linting — .NET Analyzers**: C# code must pass Roslyn/.NET analyzer diagnostics. Command: `msbuild <solution>.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`
14
+ 3. **Type Checking — Nullable Analysis**: Enable nullable reference types and fail on warnings. Command: `msbuild <solution>.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:Nullable=enable /p:TreatWarningsAsErrors=true`
15
15
  4. **Testing — MSTest + Moq + FluentAssertions**: Run tests with: `vstest.console.exe <test-assembly-paths> /EnableCodeCoverage`
16
16
 
17
17
  Run the toolchain in order: format → lint → type-check → test. Restart from step 1 if any step fails or changes files.
@@ -28,8 +28,8 @@ Before invoking this gate, the agent must have:
28
28
  Run the full toolchain in this exact order. If any step fails or modifies files, fix the issue and restart from step 1. Do not stop the loop until all four steps complete without errors in a single pass.
29
29
 
30
30
  1. `dotnet tool run csharpier .`
31
- 2. `msbuild TaskMaster.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`
32
- 3. `msbuild TaskMaster.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:Nullable=enable /p:TreatWarningsAsErrors=true`
31
+ 2. `msbuild <solution>.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:EnableNETAnalyzers=true /p:EnforceCodeStyleInBuild=true`
32
+ 3. `msbuild <solution>.sln /t:Build /p:Configuration=Debug /p:Platform="Any CPU" /p:Nullable=enable /p:TreatWarningsAsErrors=true`
33
33
  4. `vstest.console.exe <test-assembly-paths> /EnableCodeCoverage`
34
34
 
35
35
  If the environment prevents running any tool, stop and report the change as **unverified**. Do not declare completion.
@@ -68,6 +68,14 @@ Create a missing integration branch from current `origin/main` and push it. Befo
68
68
  fetch the current remote integration tip. Create every child worktree from that tip, never from
69
69
  `main`, and set each feature PR base explicitly to the integration branch.
70
70
 
71
+ Before each wave launches, run `git fetch origin main` and then
72
+ `git rev-list --count <integration>..origin/main`. A zero count proceeds directly to the wave.
73
+ A non-zero count runs the main-sync as a dedicated chore child item (the `epic-852-main-sync` /
74
+ PR #882 pattern) whose branch starts from the integration tip, merges `origin/main` with a merge
75
+ commit, and opens a PR into the integration branch; that PR must merge before the wave launches.
76
+ Record the sync child's `features[]` row before its launch, and do not reuse a manifest child's
77
+ issue number for it. Run at most one main-sync child per wave, then re-fetch the integration tip.
78
+
71
79
  Launch all ready children in one bounded parallel wave. Before each launch, persist the
72
80
  epic-child topology receipt, reviewed complexity assessment, delegation receipt, and Codex
73
81
  model-routing receipt with the same `delegation_id`, then select the generated deployment agent.
@@ -112,9 +120,11 @@ authoritative backstop.
112
120
 
113
121
  Each child owns its implementation, review, PR, CI-green gate, and merge into the integration
114
122
  branch. A merge conflict enters that child's existing remediation loop with a blocking
115
- `remediation-inputs.<timestamp>.md`. After three unresolved passes, record
116
- `blocked_conflict_loop_limit` and stop that edge. The epic agent must not resolve child conflicts
117
- locally.
123
+ `remediation-inputs.<timestamp>.md`. Conflict cycles share the child's attempt count,
124
+ `remediation_loop.completed_attempts`. The active cycle number is `completed_attempts + 1`, and a
125
+ cycle without an applied candidate consumes no number. After three completed attempts without a
126
+ `PASS` review, record `blocked_conflict_loop_limit` and stop that edge. The epic agent must not
127
+ resolve child conflicts locally.
118
128
 
119
129
  ## Worktree Cleanup
120
130
 
@@ -63,6 +63,21 @@ must never use placeholders.
63
63
  Create or reuse `epic/<epic-slug>-integration` from `origin/main`, push it, and commit the epic
64
64
  home before preparation. All prepared child outputs must fan into this branch.
65
65
 
66
+ ## Integration Commit Form
67
+
68
+ The epic planner's own commits of the epic manifest, the fanned-in child feature folders and approved plans, and the kickoff copy are orchestration bookkeeping. `.codex/hooks/enforce-orchestration-preimplementation-gate.ps1` exempts them without a ready feature checkpoint only when the invocation is pathspec-bearing and every path operand lies inside `docs/features/epics/`, `docs/features/parallel/`, `docs/features/active/`, `docs/features/potential/`, or `artifacts/orchestration/`. A pathless commit, a whole-tree operand, or any operand outside those trees is denied.
69
+
70
+ Admitted commit forms, each followed by `--` and the exempt path operands:
71
+
72
+ - A single-quoted message containing `$`, for example `git commit -m 'docs: costs $5' -- <exempt paths>`.
73
+ - A single-quoted message containing a backtick, for example ``git commit -m 'docs: fix `Foo`' -- <exempt paths>``.
74
+ - The trailer option on `git commit` only, in the separate-value form `--trailer 'Co-Authored-By: Name <email>'` or the `--trailer=<value>` form, any number of times.
75
+ - The one-paragraph multi-message form: the subject in the first `-m` and every trailer in one single-quoted second `-m` value, separated by a literal newline. Each `-m` value becomes its own paragraph and git parses only the last paragraph as the trailer block, so trailers split across separate `-m` values do not form one trailer block.
76
+
77
+ Quoting rules: `$` and backtick are admitted only inside single quotes. `<`, `>`, and `#` are admitted only inside quotes. A typographic quote character (U+2018 to U+201E) is denied anywhere. Because the executing shell is undetermined (issue #735), a shape whose meaning differs between a POSIX shell and PowerShell is denied: a backslash anywhere in the command line is denied, and `{`, `}`, `,`, `(`, `)`, and `@` are denied outside quotes. Every staging operand must be a plain forward-slash repository-relative path that uses only the characters `A-Z a-z 0-9 . _ / -`.
78
+
79
+ Not admitted: heredoc-fed messages, and message files supplied through `-F <file>` or `--file=<file>` (issue #732, decision D5).
80
+
66
81
  ## Concurrent Preparation
67
82
 
68
83
  Place all child preparations in one preparation batch, regardless of execution-wave
@@ -181,7 +196,8 @@ byte-identical; the manifest, durable kickoff, plans, and planning commits must
181
196
  repository-aware readiness validator without worktree drift.
182
197
 
183
198
  Invoke `validate_orchestration_artifacts` for `epic-planner-state` with
184
- `require_ready_for_execution: true` and the explicit workspace root. Do not write or delegate the
199
+ `require_ready_for_execution: true`, `require_codex_topology: true`,
200
+ `require_codex_model_routing: true`, and the explicit workspace root. Do not write or delegate the
185
201
  kickoff until this canonical gate succeeds.
186
202
 
187
203
  ## Kickoff Artifacts
@@ -22,7 +22,8 @@ Use the epic slug or path supplied in the invoking user request.
22
22
  per-feature plan paths, preflight evidence, and current Git state. Derive optional missing
23
23
  hashes from Git; fail closed on actual drift.
24
24
  Invoke `validate_orchestration_artifacts` for `epic-planner-state` with
25
- `require_ready_for_execution: true` and the explicit workspace root. Do not delegate until
25
+ `require_ready_for_execution: true`, `require_codex_topology: true`,
26
+ `require_codex_model_routing: true`, and the explicit workspace root. Do not delegate until
26
27
  that canonical repository-aware gate succeeds.
27
28
  4. Delegate the invocation prompt to `epic-orchestrator` and apply `epic-orchestrate`.
28
29
  5. Reuse the existing integration branch. Every child resumes at atomic execution from its
@@ -48,6 +48,17 @@ Use this skill when:
48
48
  Use `yyyy-MM-ddTHH-mm` for all audit, remediation, and evidence artifacts.
49
49
  Example: `2026-02-06T14-30`.
50
50
 
51
+ The `Timestamp` value is UTC read from the host system clock when the recorded command runs (for example `Get-Date -AsUTC -Format yyyy-MM-ddTHH-mm` in PowerShell 7, `(Get-Date).ToUniversalTime().ToString('yyyy-MM-ddTHH-mm')` in Windows PowerShell 5.1, or `date -u +%Y-%m-%dT%H-%M` in a POSIX shell); the agent never composes or estimates it. The value is written without a zone suffix.
52
+
53
+ ### Evidence Filename Timestamp
54
+
55
+ The stamp in the filename of every artifact under `<FEATURE>/evidence/<kind>/` is the UTC time at which that file is written, read from the host system clock immediately before the write, in the same `yyyy-MM-ddTHH-mm` shape with no zone suffix. It is never a plan-time stamp, a plan-cycle identifier, or any other value fixed before the write.
56
+
57
+ - Plans name such an artifact `<name>.<timestamp>.md`, and the executor substitutes the write time. A later loop pass writes a new file with a new stamp.
58
+ - A task that consumes an evidence artifact selects the lexicographically greatest file matching `<name>.*.md`. The fixed-width UTC shape sorts in chronological order, so that file is the most recently written one.
59
+ - Plan files (`plan.<timestamp>.md`, stamped by the feature-folder tooling in America/New_York) and the review artifact set (`policy-audit`, `code-review`, `feature-audit`, `remediation-inputs`, which share one stamp) are outside this rule.
60
+ - Existing evidence files whose names carry a plan-time stamp are not renamed.
61
+
51
62
  ## Canonical Evidence Locations
52
63
 
53
64
  - Baseline evidence: `evidence/baseline/`
@@ -112,6 +123,8 @@ When evidence artifacts are used for automated checking or plan reconciliation,
112
123
  - `Command: <exact command>`
113
124
  - `EXIT_CODE: <int>`
114
125
 
126
+ The first occurrence of `Timestamp`, `Command`, `EXIT_CODE`, and `ExpectedExitCode` forms the record in both the Python and the TypeScript parser; later occurrences, including empty later values, are ignored. An artifact that records several gates therefore reports its first gate.
127
+
115
128
  One optional field may also be declared:
116
129
  - `ExpectedExitCode: <int>` — the exit code the gate is expected to produce.
117
130
 
@@ -83,7 +83,7 @@ Lifecycle guardrails:
83
83
 
84
84
  4) Create the potential entry through `mcp__drm-copilot__new_potential_entry` or `mcp__drm-copilot__new_potential_bug_entry`.
85
85
 
86
- 5) Promote the potential document through `mcp__drm-copilot__potential_to_issue` with the selected `${work-mode}` and capture the numeric `${issue-num}`.
86
+ 5) Promote the potential document through `mcp__drm-copilot__potential_to_issue` with the selected `${work-mode}` and capture the numeric `${issue-num}`. When the issue already exists, do not call `potential_to_issue`; verify the issue read-only and record `issue_adoption` with the existing number as `${issue-num}`.
87
87
 
88
88
  6) Rename the branch to the final branch:
89
89
  - `${final-branch}`