@danmoisan/drm-copilot-mcp 1.1.18 → 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 (206) hide show
  1. package/out/mcp-server.js +989 -662
  2. package/package.json +3 -2
  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 +6 -4
  8. package/resources/claude-customizations/.claude/agents/orchestrator.md +5 -4
  9. package/resources/claude-customizations/.claude/agents/parallel-orchestrator.md +31 -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-mutation-cli.sh +152 -0
  76. package/resources/claude-customizations/.claude/lib/bash/parallel-mutation-ops.sh +193 -0
  77. package/resources/claude-customizations/.claude/lib/bash/parallel-mutation.sh +322 -0
  78. package/resources/claude-customizations/.claude/lib/bash/remove-parallel-item.sh +146 -0
  79. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusExtraction.psm1 +23 -33
  80. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusTokenShape.psm1 +86 -6
  81. package/resources/claude-customizations/.claude/lib/ci-gate/Invoke-CiGateParser.ps1 +91 -19
  82. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateEpicWaveBarrier.psm1 +346 -0
  83. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateIssueAdoption.psm1 +24 -3
  84. package/resources/claude-customizations/.claude/lib/worktree-resolution/WorktreeItemResolution.psm1 +79 -2
  85. package/resources/claude-customizations/.claude/lib/worktree-resolution/WorktreeRunResolution.psm1 +3 -3
  86. package/resources/claude-customizations/.claude/rules/architecture-boundaries.md +5 -5
  87. package/resources/claude-customizations/.claude/rules/csharp.md +2 -2
  88. package/resources/claude-customizations/.claude/rules/general-code-change.md +1 -1
  89. package/resources/claude-customizations/.claude/rules/general-unit-test.md +3 -2
  90. package/resources/claude-customizations/.claude/rules/orchestrator-state.md +37 -4
  91. package/resources/claude-customizations/.claude/rules/parallel-orchestration.md +50 -5
  92. package/resources/claude-customizations/.claude/rules/plan-acceptance-gates.md +47 -8
  93. package/resources/claude-customizations/.claude/rules/quality-tiers.md +11 -7
  94. package/resources/claude-customizations/.claude/rules/shell.md +10 -8
  95. package/resources/claude-customizations/.claude/rules/typescript.md +1 -1
  96. package/resources/claude-customizations/.claude/settings.json +3 -4
  97. package/resources/claude-customizations/.claude/skills/acceptance-criteria-tracking/SKILL.md +1 -1
  98. package/resources/claude-customizations/.claude/skills/atomic-plan-contract/SKILL.md +5 -1
  99. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_detached_lib.sh +1 -1
  100. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_enumerate_lib.sh +2 -0
  101. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/scripts/cleanup_worktrees_scan_helper.sh +2 -0
  102. package/resources/claude-customizations/.claude/skills/epic-orchestrate/SKILL.md +33 -6
  103. package/resources/claude-customizations/.claude/skills/epic-plan/SKILL.md +1 -1
  104. package/resources/claude-customizations/.claude/skills/evidence-and-timestamp-conventions/SKILL.md +10 -1
  105. package/resources/claude-customizations/.claude/skills/feature-promotion-lifecycle/SKILL.md +1 -1
  106. package/resources/claude-customizations/.claude/skills/feature-review-workflow/SKILL.md +4 -3
  107. package/resources/claude-customizations/.claude/skills/orchestrate/SKILL.md +14 -6
  108. package/resources/claude-customizations/.claude/skills/parallel-add/SKILL.md +52 -14
  109. package/resources/claude-customizations/.claude/skills/parallel-close/SKILL.md +22 -9
  110. package/resources/claude-customizations/.claude/skills/parallel-orchestrate/SKILL.md +79 -16
  111. package/resources/claude-customizations/.claude/skills/parallel-plan/SKILL.md +63 -7
  112. package/resources/claude-customizations/.claude/skills/parallel-remove/SKILL.md +35 -12
  113. package/resources/claude-customizations/.claude/skills/pr-author/SKILL.md +3 -1
  114. package/resources/claude-customizations/.claude/skills/quota-throttling/SKILL.md +1 -1
  115. package/resources/claude-customizations/.claude/skills/remediation-handoff-atomic-planner/SKILL.md +2 -2
  116. package/resources/claude-customizations/pack-manifests/core.json +23 -0
  117. package/resources/codex-and-agents-customizations/.agents/skills/acceptance-criteria-tracking/SKILL.md +1 -1
  118. package/resources/codex-and-agents-customizations/.agents/skills/architecture-boundaries/SKILL.md +5 -5
  119. package/resources/codex-and-agents-customizations/.agents/skills/atomic-executor/SKILL.md +11 -0
  120. package/resources/codex-and-agents-customizations/.agents/skills/atomic-plan-contract/SKILL.md +4 -0
  121. package/resources/codex-and-agents-customizations/.agents/skills/atomic-planner/SKILL.md +10 -0
  122. package/resources/codex-and-agents-customizations/.agents/skills/csharp/SKILL.md +2 -2
  123. package/resources/codex-and-agents-customizations/.agents/skills/csharp-qa-gate/SKILL.md +2 -2
  124. package/resources/codex-and-agents-customizations/.agents/skills/epic-orchestrate/SKILL.md +8 -0
  125. package/resources/codex-and-agents-customizations/.agents/skills/epic-plan/SKILL.md +17 -1
  126. package/resources/codex-and-agents-customizations/.agents/skills/epic-run/SKILL.md +2 -1
  127. package/resources/codex-and-agents-customizations/.agents/skills/evidence-and-timestamp-conventions/SKILL.md +10 -1
  128. package/resources/codex-and-agents-customizations/.agents/skills/feature-review-workflow/SKILL.md +13 -5
  129. package/resources/codex-and-agents-customizations/.agents/skills/general-code-change/SKILL.md +1 -1
  130. package/resources/codex-and-agents-customizations/.agents/skills/general-unit-test/SKILL.md +3 -2
  131. package/resources/codex-and-agents-customizations/.agents/skills/orchestrate/SKILL.md +15 -6
  132. package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-workflow/SKILL.md +1 -1
  133. package/resources/codex-and-agents-customizations/.agents/skills/quality-tiers/SKILL.md +11 -7
  134. package/resources/codex-and-agents-customizations/.agents/skills/translate-claude-to-codex/SKILL.md +1 -1
  135. package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/csharp/SKILL.md +2 -2
  136. package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/csharp-qa-gate/SKILL.md +2 -2
  137. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c1.toml +11 -0
  138. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c2.toml +11 -0
  139. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3-elevated.toml +11 -0
  140. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3.toml +11 -0
  141. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c4.toml +11 -0
  142. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor.toml +11 -0
  143. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c1.toml +10 -0
  144. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c2.toml +10 -0
  145. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3-elevated.toml +10 -0
  146. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3.toml +10 -0
  147. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c4.toml +10 -0
  148. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner.toml +10 -0
  149. package/resources/codex-and-agents-customizations/.codex/agents/epic-orchestrator.toml +2 -1
  150. package/resources/codex-and-agents-customizations/.codex/agents/feature-review.toml +6 -6
  151. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c1.toml +2 -2
  152. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c2.toml +2 -2
  153. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c3-elevated.toml +2 -2
  154. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c3.toml +2 -2
  155. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator-c4.toml +2 -2
  156. package/resources/codex-and-agents-customizations/.codex/agents/orchestrator.toml +2 -2
  157. package/resources/codex-and-agents-customizations/.codex/codex-web-setup.sh +318 -273
  158. package/resources/codex-and-agents-customizations/.codex/config.toml +1 -1
  159. package/resources/codex-and-agents-customizations/.codex/hooks/check-powershell-test-purity.ps1 +7 -1
  160. package/resources/codex-and-agents-customizations/.codex/hooks/check-python-test-purity.ps1 +7 -1
  161. package/resources/codex-and-agents-customizations/.codex/hooks/codex-epic-child-launch-attestation.ps1 +1 -1
  162. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-checkpoint-monotonic.ps1 +7 -1
  163. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-codex-model-routing.ps1 +8 -2
  164. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-completion-consistency.ps1 +97 -44
  165. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-completion-helpers.ps1 +105 -0
  166. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-child-worktree-binding.ps1 +7 -1
  167. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-merge-gate.ps1 +37 -5
  168. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-planning-only.ps1 +6 -0
  169. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-root-invocation.ps1 +7 -1
  170. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-wave-barrier.ps1 +7 -1
  171. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-worktree-removal-gate.ps1 +54 -41
  172. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-evidence-locations.ps1 +7 -1
  173. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-epic-scope.ps1 +35 -14
  174. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-helpers.ps1 +31 -58
  175. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-modes.ps1 +63 -47
  176. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate-targets.ps1 +433 -0
  177. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate.ps1 +24 -11
  178. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-powershell-batch-budget.ps1 +8 -2
  179. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-promotion-mcp-only.ps1 +13 -4
  180. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-python-batch-budget.ps1 +8 -2
  181. package/resources/codex-and-agents-customizations/.codex/hooks/feature-folder-resolution.ps1 +373 -0
  182. package/resources/codex-and-agents-customizations/.codex/hooks/feature-review-coverage-thresholds.ps1 +85 -0
  183. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-heredoc.ps1 +119 -0
  184. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-invocation-operands.ps1 +198 -0
  185. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-invocation.ps1 +254 -255
  186. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-payload-powershell.ps1 +201 -0
  187. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-payload.ps1 +484 -0
  188. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-scanner.ps1 +27 -110
  189. package/resources/codex-and-agents-customizations/.codex/hooks/hook-dependency-guard.ps1 +114 -0
  190. package/resources/codex-and-agents-customizations/.codex/hooks/hook-docs-only-diff.ps1 +493 -0
  191. package/resources/codex-and-agents-customizations/.codex/hooks/validate-bash.ps1 +8 -2
  192. package/resources/codex-and-agents-customizations/.codex/hooks/validate-codex-subagent-routing.ps1 +7 -1
  193. package/resources/codex-and-agents-customizations/.codex/hooks/validate-feature-review-coverage.ps1 +24 -8
  194. package/resources/codex-and-agents-customizations/pack-manifests/core.json +9 -0
  195. package/resources/customizations/.github/agents/csharp-typed-engineer.agent.md +2 -2
  196. package/resources/customizations/.github/instructions/csharp-code-change.instructions.md +4 -4
  197. package/resources/customizations/.github/instructions/csharp-unit-test.instructions.md +2 -2
  198. package/resources/customizations/.github/skills/acceptance-criteria-tracking/SKILL.md +1 -1
  199. package/resources/customizations/.github/skills/atomic-plan-contract/SKILL.md +4 -0
  200. package/resources/customizations/.github/skills/evidence-and-timestamp-conventions/SKILL.md +10 -1
  201. package/resources/customizations/.github/skills/feature-review-workflow/SKILL.md +1 -1
  202. package/resources/powershell/PoshQC/PoshQC.Coverage.psm1 +314 -0
  203. package/resources/powershell/PoshQC/PoshQC.Testing.psm1 +25 -28
  204. package/resources/powershell/PoshQC/PoshQC.psm1 +1 -0
  205. package/resources/powershell/PoshQC/README.md +8 -2
  206. package/resources/powershell/PoshQC/settings/pester.runsettings.psd1 +2 -319
@@ -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,7 @@ 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
56
 
57
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.
58
58
 
@@ -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",
@@ -145,6 +162,7 @@
145
162
  ".claude/lib/orchestrator-state/OrchestratorStateRoutingContract.psm1",
146
163
  ".claude/lib/orchestrator-state/OrchestratorStateIssueAdoption.psm1",
147
164
  ".claude/lib/orchestrator-state/OrchestratorStateUnconditional.psm1",
165
+ ".claude/lib/orchestrator-state/OrchestratorStateEpicWaveBarrier.psm1",
148
166
  ".claude/lib/discovery-validation/DiscoveryValidation.psm1",
149
167
  ".claude/lib/codex-routing/CodexDeployment.psm1",
150
168
  ".claude/lib/codex-routing/CodexTopology.psm1",
@@ -171,13 +189,18 @@
171
189
  ".claude/lib/bash/abandon-parallel-item.sh",
172
190
  ".claude/lib/bash/compute-cohorts.sh",
173
191
  ".claude/lib/bash/compute-concurrency-batches.sh",
192
+ ".claude/lib/bash/mutate-parallel-run.sh",
174
193
  ".claude/lib/bash/parallel-cohorts.sh",
175
194
  ".claude/lib/bash/parallel-common.sh",
176
195
  ".claude/lib/bash/parallel-items-validate.sh",
177
196
  ".claude/lib/bash/parallel-lane-assertion.sh",
178
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",
179
201
  ".claude/lib/bash/parallel-yaml-emit.sh",
180
202
  ".claude/lib/bash/parallel-yaml-scan.sh",
203
+ ".claude/lib/bash/remove-parallel-item.sh",
181
204
  ".claude/lib/bash/report-lane-assertion.sh",
182
205
  ".claude/lib/bash/validate-parallel-manifest.sh",
183
206
  "config/orchestration-routing.json",
@@ -86,7 +86,7 @@ During feature review (feature-audit phase):
86
86
 
87
87
  ### When Orchestrators Enforce AC Tracking
88
88
 
89
- 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:
90
90
 
91
91
  1. Ensure delegated executors and reviewers reference this skill.
92
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.
@@ -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,7 +48,16 @@ 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 local time read from the host system clock when the recorded command runs (for example `Get-Date -Format yyyy-MM-ddTHH-mm`); the agent never composes or estimates it.
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.
52
61
 
53
62
  ## Canonical Evidence Locations
54
63
 
@@ -63,6 +63,17 @@ Always apply:
63
63
  - if the marker is missing or malformed, use `full-feature`
64
64
  - if `minor-audit` is selected and `issue.md` lacks `## Acceptance Criteria`, require remediation
65
65
 
66
+ ## Policy Rules
67
+
68
+ ### modified-workflow-needs-green-run
69
+
70
+ If the branch diff modifies any path matching `.github/workflows/**`, `scripts/benchmarks/**`, or `.github/actions/**`, the policy audit emits a Blocking finding unless evidence of a green workflow run against the branch head is present in the remediation inputs.
71
+
72
+ - The rule provides a second, independent line of defense for CI-gate-modifying features, separate from and prior to the orchestrator CI Green Gate (S9).
73
+ - "Green workflow run against the branch head" means a run of the affected workflow whose conclusion is success and which satisfies either (a) or (b): (a) its head SHA equals the current branch head; or (b) all three predecessor-head conditions hold: (1) the run's head SHA is an ancestor of, or equal to, the current branch head and contains the latest commit that changes any path outside the active feature folder (`git merge-base --is-ancestor <commit> <run-sha>`); (2) every commit after the run's head SHA changes only paths inside the active feature folder (`git log <run-sha>..HEAD -- . ":!<feature-folder>"` returns no commits); (3) the policy audit states that the orchestrator CI Green Gate (S9) remains responsible for `ci_gate.conclusion == "success"` with `ci_gate.head_sha` equal to the final PR head before DONE. Condition (b) exists because an in-repo evidence artifact cannot name the SHA of the commit that contains it.
74
+ - A green `workflow_dispatch` run against the branch head also satisfies the rule, not only a PR-context run. This mitigates the chicken-and-egg case where a feature must land its CI gate before the gate can run in PR context (see spec.md Risks & Mitigations).
75
+ - When the rule fires and no qualifying green-run evidence is present, record a Blocking finding classified `awaiting_ci` (the remediation inputs carry `Remediability: awaiting_ci` and a `Remediability-Evidence:` line naming the awaited workflow) and route it to the wait path (`AWAITING_CI` when no other class is present) instead of the remediation handoff.
76
+
66
77
  ## Ordered Procedure
67
78
 
68
79
  1. **Resolve the base branch**
@@ -97,10 +108,7 @@ Always apply:
97
108
  - Python: `poetry run pytest --cov` → artifact: `artifacts/python/lcov.info`
98
109
  - PowerShell: `mcp__drm-copilot__run_poshqc_test` → artifact: `artifacts/pester/powershell-coverage.xml`
99
110
  - C#: `vstest.console.exe <test-assembly-paths> /EnableCodeCoverage` → artifact: `artifacts/csharp/coverage.xml`
100
- - Coverage thresholds:
101
- - New code files (added in this feature): line coverage must be >= 90%. Flag as FAIL otherwise.
102
- - Modified files (changed but previously existing): line coverage must show no regression relative to baseline and must remain >= 80%. Flag as FAIL otherwise.
103
- - Repo-wide line coverage must remain >= 80% per language. Flag as FAIL otherwise.
111
+ - Coverage thresholds: when the repository's root `CLAUDE.md` states a line or branch coverage threshold, that threshold governs; otherwise the defaults govern (line 85%, branch 75% for branch-capable languages). Each metric falls back independently. New files and modified files must meet the governing line threshold (and the branch threshold where measured); modified files must also show no regression on changed lines. Repo-wide coverage per language must meet the governing thresholds. Flag as FAIL otherwise.
104
112
  - If coverage artifacts already exist from the executor run, inspect them instead of re-running.
105
113
  - If no coverage artifact exists for a language that has changed files, flag as FAIL — coverage verification is mandatory for all languages with changed files.
106
114
  - Run the smallest relevant subset first when the repo policy permits it.
@@ -134,7 +142,7 @@ Always apply:
134
142
  - toolchain checks fail
135
143
  - the code review contains blockers
136
144
  - required acceptance criteria are FAIL or PARTIAL
137
- - coverage regression below policy threshold (< 80% repo-wide per language, < 80% or regression for modified files, or < 90% for new files)
145
+ - coverage below the governing thresholds defined in step 5 (repo-wide per language, modified files including any regression on changed lines, or new files)
138
146
  - coverage artifact absent for any language that has changed files
139
147
  - Classify each blocking finding before triggering remediation: every blocking finding receives one `Remediability` class (`autonomous`, `external_dependency`, `policy_hold`, `awaiting_ci`, or `human_decision_required`; `autonomous` when no class is stated).
140
148
  - Trigger remediation only for `autonomous` findings. When no blocking finding is `autonomous`, write the remediation inputs, report `HALT_NON_REMEDIABLE` (at least one `external_dependency`, `policy_hold`, or `human_decision_required` finding) or `AWAITING_CI` (every finding `awaiting_ci`) with `REMEDIATION_PLAN: NONE`, create no remediation plan target, and do not hand off to `atomic-planner`.
@@ -29,7 +29,7 @@ Apply these priorities in order when designing or changing code:
29
29
 
30
30
  ## Module Rigor Tiers
31
31
 
32
- Module rigor tiers (T1–T4) and the uniform-versus-tier-dependent gate matrix are defined in `.agents/skills/quality-tiers.md`. Every project must be classified in `quality-tiers.yml` at repo root.
32
+ Module rigor tiers (T1–T4) and the uniform-versus-tier-dependent gate matrix are defined in `.agents/skills/quality-tiers/SKILL.md` and apply only when `quality-tiers.yml` exists at the repository root; in that case every project must be classified in it. A repository without `quality-tiers.yml` has not adopted tiers, and the tier requirements do not apply.
33
33
 
34
34
  ## Mandatory Toolchain Loop
35
35
 
@@ -23,10 +23,11 @@ Every unit test must satisfy all five of these properties:
23
23
 
24
24
  ## Coverage Requirements
25
25
 
26
+ - Threshold precedence: when the repository's root `AGENTS.md` states line or branch coverage thresholds, those thresholds govern; when `AGENTS.md` states none, thresholds stated in the repository's root `CLAUDE.md` govern. The 85% line and 75% branch figures are defaults that apply only when neither root `AGENTS.md` nor root `CLAUDE.md` states thresholds. This precedence applies to every restatement of these figures in other skills, agents, and rule files. Each metric falls back independently: when a root file states only a line threshold or only a branch threshold, that threshold governs its metric and the next source in this order, ending with the default, governs the other.
26
27
  - **Line coverage must remain >= 85% across all tiers (T1–T4).**
27
28
  - **Branch coverage must remain >= 75% across all tiers (T1–T4) for languages whose coverage tooling measures branch coverage.** PowerShell (Pester) and bash (kcov) are the exceptions: neither tool measures branch coverage in any output format, so only the line threshold applies to them and there is no branch-coverage gate. This is a threshold exemption only; PowerShell and bash production files remain in the coverage denominator under the Coverage Exclusion Policy below.
28
29
  - Code changes or refactors must not reduce coverage for the lines that were changed.
29
- - Tier-specific lower coverage thresholds are not used in this repository. See `.agents/skills/quality-tiers.md` for the full tier system.
30
+ - Tier-specific lower coverage thresholds are not used. See `.agents/skills/quality-tiers/SKILL.md` for the full tier system, which applies only when `quality-tiers.yml` exists at the repository root.
30
31
  - Coverage is a supporting metric, not the sole quality gate. Untested critical behavior is not acceptable even if the overall percentage looks good.
31
32
  - Configure coverage tooling to exclude test files (e.g., `tests/`) so metrics reflect application code, not tests.
32
33
  - Type-only / interface-only modules with no executable behavior may be omitted from coverage measurement. Examples: Python `Protocol`-only modules consumed only under `TYPE_CHECKING`, TypeScript interface/type-only files, and C# interface-only files. Such modules legitimately report 0% executable coverage and may be excluded from measurement. This is a clarification only; it does not lower any coverage threshold.
@@ -89,7 +90,7 @@ Colocation — placing test files alongside production source files in `src/` or
89
90
 
90
91
  ## Test Categories
91
92
 
92
- The following test categories apply across the repository, with tier-dependent obligations per `.agents/skills/quality-tiers.md`:
93
+ The following test categories apply across the repository, with tier-dependent obligations per `.agents/skills/quality-tiers/SKILL.md`; those tier-dependent obligations apply only when `quality-tiers.yml` exists at the repository root:
93
94
 
94
95
  - **Unit tests** — required for all tiers (T1–T4). Cover single units of behavior in isolation.
95
96
  - **Property-based tests** — required for T1 and T2 modules: at least one property test per pure function. Use `fast-check` (TypeScript) or `hypothesis` (Python) where applicable.
@@ -422,7 +422,7 @@ After each `feature-reviewer` delegation returns:
422
422
  Halt precedence: human_decision_required > policy_hold > external_dependency
423
423
 
424
424
  8. If the result is `REVIEW_STATUS: AWAITING_CI`, require `REMEDIATION_PLAN: NONE` and wait: set `blocked_reason: "awaiting_ci"`, set `next_step` to the step that re-checks (`S7_feature_review` for a review-time wait, `S9_ci_green` for a CI poll timeout), record no `human_interaction.requirements[]` entry for the wait, write no cycle, and create no remediation plan. Poll within the existing bounded CI interval and timeout; when the bound is exhausted, persist and stop. On resume, set `blocked_reason: "none"` and re-run the named step. For a review-time wait, the awaited workflow is named in the finding's `Remediability-Evidence:` line.
425
- 9. A CI Green Gate poll timeout is recorded as a finding with `Remediability: awaiting_ci` and follows the wait path; a failed required check stays `autonomous` and enters the remediation loop.
425
+ 9. A CI Green Gate poll timeout is recorded as a finding with `Remediability: awaiting_ci` and follows the wait path; a failed check stays `autonomous` and enters the remediation loop.
426
426
 
427
427
  ## Remediation Loop (R1–R5)
428
428
 
@@ -453,11 +453,20 @@ If a subagent artifact references a different issue number, the orchestrator rej
453
453
  ## CI Green Gate
454
454
 
455
455
  Before PR/DONE completion, the orchestrator must observe the live PR head SHA
456
- and required GitHub checks through `gh`. The checkpoint must record the checked
457
- head SHA and CI result. DONE is blocked unless the required checks pass for the
458
- current PR head SHA.
456
+ and every GitHub check on that head SHA through `gh`. The checkpoint must record
457
+ the checked head SHA and CI result. DONE is blocked unless every check on the
458
+ current PR head SHA passed or was skipped.
459
459
 
460
- The checkpoint records the CI result in a top-level `ci_gate` object with the required keys `conclusion`, `head_sha`, and `verified_at`. `conclusion` is one of `success`, `failure`, or `pending`; `head_sha` is the PR head SHA the required checks were observed against; `verified_at` is the ISO-8601 time at which this gate (S9) recorded the result. DONE requires `ci_gate.conclusion` equal to `success` and `ci_gate.head_sha` equal to the current PR head SHA. The key set is defined by `CI_GATE_KEYS` in `scripts/dev_tools/validate_orchestrator_state.py`, and the TypeScript MCP validator used by the Codex runtime requires the same keys.
460
+ Gate procedure:
461
+
462
+ 1. Resolve the live PR head SHA and the PR base branch with `gh pr view --json headRefOid,baseRefName`.
463
+ 2. Invoke `gh pr checks --json bucket,name,state,link,workflow` against that head SHA. The query covers every check on the head SHA for every PR, whether or not branch protection marks the check as required.
464
+ 3. Parse the JSON by running `pwsh -NoProfile -File .claude/lib/ci-gate/Invoke-CiGateParser.ps1 -ChecksJson <checks-json> -HeadSha <head-sha>`, appending `-RequireWorkflow CI` when the PR base branch is an `epic/<slug>-integration` branch. The parser derives `ci_gate.conclusion` over every queried check: `success` when every check passed or was skipped, `failure` when any check failed or was cancelled, and `pending` when any check is still in progress.
465
+ 4. Epic-child rule: when the PR base branch is an `epic/<slug>-integration` branch, an empty check list is not accepted as green. Every check returned by the unfiltered query counts: a failing or cancelled non-`CI` check fails the gate, and a pending one keeps it pending. With `-RequireWorkflow CI`, the parser never returns `success` until at least one passing `CI` check is observed.
466
+ 5. No-checks rule: when `gh pr checks` fails with a `no checks reported` error, that error is never treated as green for any PR. On an epic child, the parser runs with `-ChecksJson '[]'` and `-RequireWorkflow CI`, which returns `pending`; on any other PR the gate stays `pending` within the bounded poll.
467
+ 6. Parser-absent rule: when `.claude/lib/ci-gate/Invoke-CiGateParser.ps1` does not exist in the repository, the orchestrator does not derive `success` by hand; it must stop and persist blocked state before PR/DONE completion.
468
+
469
+ The checkpoint records the CI result in a top-level `ci_gate` object with the required keys `conclusion`, `head_sha`, and `verified_at`. `conclusion` is one of `success`, `failure`, or `pending`; `head_sha` is the PR head SHA the queried checks were observed against; `verified_at` is the ISO-8601 time at which this gate (S9) recorded the result. DONE requires `ci_gate.conclusion` equal to `success` and `ci_gate.head_sha` equal to the current PR head SHA. The key set is defined by `CI_GATE_KEYS` in `scripts/dev_tools/validate_orchestrator_state.py`, and the TypeScript MCP validator used by the Codex runtime requires the same keys.
461
470
 
462
471
  The checkpoint records the pull request in a top-level `pr_gate` object with the keys `pr_number`, `pr_url`, `head_branch`, and `head_sha`. The key set is defined by `PR_GATE_KEYS` in `scripts/dev_tools/_orchestrator_state_routing.py`.
463
472
 
@@ -473,7 +482,7 @@ The orchestrator must not create a PR, push a branch for PR purposes, or report
473
482
  2. The AC verification artifact (`p14-acceptance-criteria-checkoff.md` or equivalent) confirms all acceptance criteria pass.
474
483
  3. The mandatory toolchain passed in its most recent run on the branch (no linting/type-check/test failures).
475
484
  4. The checkpoint `next_step` is `S8_create_pr`.
476
- 5. The required CI checks pass for the current PR head SHA.
485
+ 5. Every check on the current PR head SHA passed or was skipped (`ci_gate.conclusion` is `success`).
477
486
 
478
487
  This gate is non-negotiable. Each condition is independently verified before PR creation proceeds.
479
488
 
@@ -436,7 +436,7 @@ Do not claim mission completion until all of the following are true:
436
436
  - any required remediation loop run also includes a remediation execution receipt, a remediation commit receipt, and a final `REVIEW_STATUS: PASS`
437
437
  - validator-backed checks for the approved plan, policy audit, code review, feature audit, and checkpoint state pass
438
438
  - the canonical checkpoint passes `validate_orchestration_artifacts` with `artifact_type: "orchestrator-state"`, `require_complete: true`, `require_codex_topology: true`, and `require_codex_model_routing: true`
439
- - required GitHub checks pass for the current PR head SHA before PR/DONE completion
439
+ - every GitHub check on the current PR head SHA passed or was skipped before PR/DONE completion
440
440
 
441
441
  ## Hard Constraints
442
442
 
@@ -9,19 +9,21 @@ Source: legacy Claude rule `quality-tiers`.
9
9
 
10
10
  # Module Rigor Tiers
11
11
 
12
- This rule defines the T1–T4 module rigor tier system used by all CI gates in this repository. The tier definitions and gate matrix in this document are the tier system's source of truth; the file `quality-tiers.yml` at the repository root maps every project to a tier. Adding a project without a tier classification fails CI.
12
+ Applicability: this skill (`.agents/skills/quality-tiers/SKILL.md`) applies only when `quality-tiers.yml` exists at the repository root, which indicates that the repository has adopted module rigor tiers. When that file is absent, there is no tier classification requirement, no `tier-classification` CI stage, and no tier-dependent gate (the escape-hatch limits, property-test density, mutation score, contract-bump rule, determinism retry rate, golden tests, and E2E suite scope in the Tier-dependent table below), and the absence of `quality-tiers.yml` is not a defect. The coverage defaults listed under Uniform across all tiers do not depend on tier adoption; their precedence is stated in that section.
13
+
14
+ When `quality-tiers.yml` exists, this skill defines the T1–T4 module rigor tier system used by the repository's CI gates, and the tier definitions and gate matrix in this document are the tier system's source of truth.
13
15
 
14
16
  ## Tiers
15
17
 
16
- - **T1 — Critical.** Behavior bugs cause silent data loss, model drift, or security holes. Examples (No-COM architecture): classifier engines (SpamBayes, Triage), ToDo ID allocator and hierarchy operations, Graph extended-properties adapter, auth/token handling, host-agnostic command bus.
17
- - **T2 — Core.** Bugs cause feature regressions but not data loss. Examples: `TaskMaster.Domain`, `TaskMaster.Application`, mail-item DTOs, settings store abstraction, schema definitions.
18
- - **T3 — Adapters & UI.** Glue around APIs the team does not own. Examples: Outlook task pane UI, Office.js wrappers, Microsoft Graph SDK wrappers, persistence I/O.
18
+ - **T1 — Critical.** Behavior bugs cause silent data loss, model drift, or security holes. Examples: classifier and scoring engines, identifier allocators and hierarchy operations, adapters that write to an external system of record, authentication and token handling, command dispatch.
19
+ - **T2 — Core.** Bugs cause feature regressions but not data loss. Examples: domain and application layers, data-transfer objects, settings store abstractions, schema definitions.
20
+ - **T3 — Adapters & UI.** Glue around APIs the team does not own. Examples: user-interface surfaces, host-platform API wrappers, third-party API and SDK wrappers, persistence I/O.
19
21
  - **T4 — Scaffolding.** Examples: DI wiring, bootstrap, build scripts, dev tooling, generated code, manifests.
20
22
 
21
23
  ## Source of Truth
22
24
 
23
- - `quality-tiers.yml` at repo root maps every project to one tier.
24
- - The CI pipeline's `tier-classification` stage validates that every project entry has a tier and that no unclassified project exists. Adding a project without a tier classification fails CI.
25
+ - When `quality-tiers.yml` exists at the repository root, it maps every project to one tier.
26
+ - In a repository that runs a `tier-classification` CI stage, that stage validates that every project entry has a tier and that no unclassified project exists, and it fails CI for an unclassified project.
25
27
 
26
28
  ## Uniform-vs-Tier-Dependent Gate Matrix
27
29
 
@@ -29,6 +31,8 @@ Per Authoritative Decision #2, line and branch coverage thresholds are uniform a
29
31
 
30
32
  ### Uniform across all tiers (T1–T4)
31
33
 
34
+ Threshold precedence: when the repository's root `AGENTS.md` states line or branch coverage thresholds, those thresholds govern; when `AGENTS.md` states none, thresholds stated in the repository's root `CLAUDE.md` govern. The 85% line and 75% branch figures are defaults that apply only when neither root `AGENTS.md` nor root `CLAUDE.md` states thresholds. This precedence applies to every restatement of these figures in other skills, agents, and rule files. Each metric falls back independently: when a root file states only a line threshold or only a branch threshold, that threshold governs its metric and the next source in this order, ending with the default, governs the other.
35
+
32
36
  - Format check: 100% pass.
33
37
  - Lint errors: 0.
34
38
  - Type errors: 0.
@@ -51,4 +55,4 @@ Per Authoritative Decision #2, line and branch coverage thresholds are uniform a
51
55
 
52
56
  ## Rationale (uniform coverage thresholds)
53
57
 
54
- High test coverage is a fundamental quality-control design choice that enables autonomous agentic development and trust in the work product. For that reason, line coverage >= 85% applies uniformly across T1–T4 to every coverage language, and branch coverage >= 75% applies uniformly across T1–T4 to every language whose coverage tooling measures branch coverage; tier-specific lower coverage floors are not used in this repository. The branch threshold is not applied to PowerShell or bash because Pester and kcov do not measure branch coverage. That exemption is a capability limit on an unevaluable threshold, not a licence to exclude files from measurement: PowerShell and bash production files remain in the coverage denominator under the Coverage Exclusion Policy in `.agents/skills/general-unit-test/SKILL.md`.
58
+ High test coverage is a fundamental quality-control design choice that enables autonomous agentic development and trust in the work product. For that reason, line coverage >= 85% applies uniformly across T1–T4 to every coverage language, and branch coverage >= 75% applies uniformly across T1–T4 to every language whose coverage tooling measures branch coverage; tier-specific lower coverage floors are not used. These figures are defaults under the threshold precedence stated above: a root `AGENTS.md` or root `CLAUDE.md` that states coverage thresholds overrides them. Each metric falls back independently, so a root file that states only one of the two thresholds overrides only that one. The branch threshold is not applied to PowerShell or bash because Pester and kcov do not measure branch coverage. That exemption is a capability limit on an unevaluable threshold, not a licence to exclude files from measurement: PowerShell and bash production files remain in the coverage denominator under the Coverage Exclusion Policy in `.agents/skills/general-unit-test/SKILL.md`.
@@ -282,7 +282,7 @@ Every completion response must include:
282
282
  | `.claude/agents/<name>.md` | `.codex/agents/<name>.toml` | model + sandbox OS-enforced; tools allowlist re-grounded |
283
283
  | `.claude/settings.json` `permissions` | `[permissions.<name>]` in `config.toml` | OS-enforced via sandbox; more expressive than Claude |
284
284
  | `.claude/hooks/*.ps1` (PreToolUse) | `[hooks] PreToolUse` + script | direct equivalent; exit 2 / permissionDecision deny |
285
- | `.claude/hooks/*.ps1` (SubagentStop, exit 1) | `[hooks] SubagentStop` + required CI check | degraded; CI status check is the hard gate |
285
+ | `.claude/hooks/*.ps1` (SubagentStop, exit 2) | `[hooks] SubagentStop` + required CI check | degraded; CI status check is the hard gate |
286
286
  | `permissions.deny` (secrets) | `[permissions.<name>.filesystem]` deny | OS-enforced |
287
287
 
288
288
  ## Invocation Examples