@danmoisan/drm-copilot-mcp 1.1.26 → 1.1.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/out/mcp-server.js +170 -52
  2. package/package.json +1 -1
  3. package/resources/claude-customizations/.claude/agents/atomic-executor.md +3 -3
  4. package/resources/claude-customizations/.claude/agents/atomic-planner.md +2 -2
  5. package/resources/claude-customizations/.claude/agents/csharp-typed-engineer.md +7 -7
  6. package/resources/claude-customizations/.claude/agents/feature-review.md +6 -3
  7. package/resources/claude-customizations/.claude/agents/orchestrator.md +11 -7
  8. package/resources/claude-customizations/.claude/agents/powershell-typed-engineer.md +7 -7
  9. package/resources/claude-customizations/.claude/agents/python-typed-engineer.md +6 -6
  10. package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate-review.ps1 +699 -0
  11. package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate.ps1 +16 -1
  12. package/resources/claude-customizations/.claude/hooks/validate-feature-review-coverage-rules.ps1 +50 -16
  13. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorState.psm1 +6 -1
  14. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateCompletion.psm1 +4 -2
  15. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateCompletionChecks.psm1 +51 -2
  16. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateReceipts.psm1 +5 -2
  17. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateRemediationAccounting.psm1 +116 -4
  18. package/resources/claude-customizations/.claude/rules/csharp.md +8 -8
  19. package/resources/claude-customizations/.claude/rules/orchestrator-state.md +28 -2
  20. package/resources/claude-customizations/.claude/rules/powershell.md +2 -2
  21. package/resources/claude-customizations/.claude/skills/atomic-plan-contract/SKILL.md +8 -12
  22. package/resources/claude-customizations/.claude/skills/csharp-qa-gate/SKILL.md +14 -15
  23. package/resources/claude-customizations/.claude/skills/epic-progress-report/SKILL.md +338 -0
  24. package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.Logic.ps1 +248 -0
  25. package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.Metrics.ps1 +232 -0
  26. package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.Render.ps1 +196 -0
  27. package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.State.ps1 +286 -0
  28. package/resources/claude-customizations/.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.ps1 +475 -0
  29. package/resources/claude-customizations/.claude/skills/execution-environment/SKILL.md +18 -13
  30. package/resources/claude-customizations/.claude/skills/feature-review-workflow/SKILL.md +21 -9
  31. package/resources/claude-customizations/.claude/skills/invoke-csharp-engineer/SKILL.md +5 -5
  32. package/resources/claude-customizations/.claude/skills/invoke-powershell-engineer/SKILL.md +4 -4
  33. package/resources/claude-customizations/.claude/skills/invoke-python-engineer/SKILL.md +4 -4
  34. package/resources/claude-customizations/.claude/skills/orchestrate/SKILL.md +24 -2
  35. package/resources/claude-customizations/.claude/skills/parallel-orchestrate/SKILL.md +8 -0
  36. package/resources/claude-customizations/.claude/skills/powershell-qa-gate/SKILL.md +16 -17
  37. package/resources/claude-customizations/.claude/skills/python-qa-gate/SKILL.md +15 -16
  38. package/resources/claude-customizations/.claude/skills/remediation-handoff-atomic-planner/SKILL.md +1 -1
  39. package/resources/claude-customizations/.claude-variants/csharp-legacy/agents/csharp-typed-engineer.md +6 -6
  40. package/resources/claude-customizations/.claude-variants/csharp-legacy/skills/csharp-qa-gate/SKILL.md +13 -14
  41. package/resources/claude-customizations/.claude-variants/csharp-legacy/skills/invoke-csharp-engineer/SKILL.md +4 -4
  42. package/resources/claude-customizations/pack-manifests/core.json +7 -0
  43. package/resources/codex-and-agents-customizations/.agents/skills/atomic-plan-contract/SKILL.md +8 -12
  44. package/resources/codex-and-agents-customizations/.agents/skills/atomic-planner/SKILL.md +1 -1
  45. package/resources/codex-and-agents-customizations/.agents/skills/csharp-qa-gate/SKILL.md +13 -14
  46. package/resources/codex-and-agents-customizations/.agents/skills/execution-environment/SKILL.md +18 -13
  47. package/resources/codex-and-agents-customizations/.agents/skills/feature-review/SKILL.md +5 -1
  48. package/resources/codex-and-agents-customizations/.agents/skills/feature-review-workflow/SKILL.md +18 -5
  49. package/resources/codex-and-agents-customizations/.agents/skills/invoke-csharp-engineer/SKILL.md +4 -4
  50. package/resources/codex-and-agents-customizations/.agents/skills/invoke-powershell-engineer/SKILL.md +4 -4
  51. package/resources/codex-and-agents-customizations/.agents/skills/invoke-python-engineer/SKILL.md +4 -4
  52. package/resources/codex-and-agents-customizations/.agents/skills/orchestrate/SKILL.md +24 -2
  53. package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-state/SKILL.md +16 -1
  54. package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-workflow/SKILL.md +3 -3
  55. package/resources/codex-and-agents-customizations/.agents/skills/powershell/SKILL.md +2 -2
  56. package/resources/codex-and-agents-customizations/.agents/skills/powershell-qa-gate/SKILL.md +15 -16
  57. package/resources/codex-and-agents-customizations/.agents/skills/python-qa-gate/SKILL.md +14 -15
  58. package/resources/codex-and-agents-customizations/.agents/skills/repo-automation-adapter/SKILL.md +2 -0
  59. package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/csharp-qa-gate/SKILL.md +13 -14
  60. package/resources/codex-and-agents-customizations/.agents-variants/csharp-legacy/skills/invoke-csharp-engineer/SKILL.md +4 -4
  61. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c1.toml +3 -3
  62. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c2.toml +3 -3
  63. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3-elevated.toml +3 -3
  64. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c3.toml +3 -3
  65. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor-c4.toml +3 -3
  66. package/resources/codex-and-agents-customizations/.codex/agents/atomic-executor.toml +3 -3
  67. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c1.toml +2 -2
  68. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c2.toml +2 -2
  69. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3-elevated.toml +2 -2
  70. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c3.toml +2 -2
  71. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner-c4.toml +2 -2
  72. package/resources/codex-and-agents-customizations/.codex/agents/atomic-planner.toml +2 -2
  73. package/resources/codex-and-agents-customizations/.codex/agents/csharp-atomic-executor.toml +2 -2
  74. package/resources/codex-and-agents-customizations/.codex/agents/csharp-atomic-planning.toml +1 -1
  75. package/resources/codex-and-agents-customizations/.codex/agents/csharp-orchestrator.toml +1 -1
  76. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c1.toml +6 -6
  77. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c2.toml +6 -6
  78. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c3-elevated.toml +6 -6
  79. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c3.toml +6 -6
  80. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer-c4.toml +6 -6
  81. package/resources/codex-and-agents-customizations/.codex/agents/csharp-typed-engineer.toml +6 -6
  82. package/resources/codex-and-agents-customizations/.codex/agents/feature-review.toml +2 -2
  83. package/resources/codex-and-agents-customizations/.codex/agents/powershell-atomic-executor.toml +2 -2
  84. package/resources/codex-and-agents-customizations/.codex/agents/powershell-atomic-planning.toml +1 -1
  85. package/resources/codex-and-agents-customizations/.codex/agents/powershell-di-unit-test-engineer.toml +1 -1
  86. package/resources/codex-and-agents-customizations/.codex/agents/powershell-orchestrator.toml +1 -1
  87. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c1.toml +7 -7
  88. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c2.toml +7 -7
  89. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c3-elevated.toml +7 -7
  90. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c3.toml +7 -7
  91. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer-c4.toml +7 -7
  92. package/resources/codex-and-agents-customizations/.codex/agents/powershell-typed-engineer.toml +7 -7
  93. package/resources/codex-and-agents-customizations/.codex/agents/pytest-unit-test-coding.toml +1 -1
  94. package/resources/codex-and-agents-customizations/.codex/agents/python-atomic-executor.toml +2 -2
  95. package/resources/codex-and-agents-customizations/.codex/agents/python-atomic-planning.toml +1 -1
  96. package/resources/codex-and-agents-customizations/.codex/agents/python-execution-only-typed.toml +1 -1
  97. package/resources/codex-and-agents-customizations/.codex/agents/python-orchestrator.toml +1 -1
  98. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c1.toml +6 -6
  99. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c2.toml +6 -6
  100. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c3-elevated.toml +6 -6
  101. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c3.toml +6 -6
  102. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer-c4.toml +6 -6
  103. package/resources/codex-and-agents-customizations/.codex/agents/python-typed-engineer.toml +6 -6
  104. package/resources/codex-and-agents-customizations/.codex/config.toml +1 -1
  105. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-merge-gate-review.ps1 +699 -0
  106. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-merge-gate.ps1 +29 -2
  107. package/resources/codex-and-agents-customizations/.codex/hooks/validate-feature-review-coverage.ps1 +51 -4
  108. package/resources/codex-and-agents-customizations/.codex-variants/csharp-legacy/agents/csharp-typed-engineer.toml +6 -6
  109. package/resources/codex-and-agents-customizations/pack-manifests/core.json +1 -0
  110. package/resources/customizations/.github/agents/5.1-Beast-adjusted.agent.md +1 -1
  111. package/resources/customizations/.github/agents/Powershell DI Unit Test Engineer.agent.md +20 -26
  112. package/resources/customizations/.github/agents/atomic_executor.agent.md +4 -4
  113. package/resources/customizations/.github/agents/atomic_planning.agent.md +4 -4
  114. package/resources/customizations/.github/agents/commentary-remediation.agent.md +1 -1
  115. package/resources/customizations/.github/agents/commit-steward.agent.md +1 -1
  116. package/resources/customizations/.github/agents/csharp-atomic-executor.agent.md +14 -14
  117. package/resources/customizations/.github/agents/csharp-atomic-planning.agent.md +2 -2
  118. package/resources/customizations/.github/agents/csharp-orchestrator.agent.md +4 -4
  119. package/resources/customizations/.github/agents/csharp-typed-engineer.agent.md +19 -22
  120. package/resources/customizations/.github/agents/epic-review.agent.md +1 -1
  121. package/resources/customizations/.github/agents/gpt-5-beast-mode.agent.md +3 -3
  122. package/resources/customizations/.github/agents/orchestrator.agent.md +8 -8
  123. package/resources/customizations/.github/agents/powershell-atomic-executor.agent.md +12 -12
  124. package/resources/customizations/.github/agents/powershell-atomic-planning.agent.md +4 -4
  125. package/resources/customizations/.github/agents/powershell-orchestrator.agent.md +6 -6
  126. package/resources/customizations/.github/agents/powershell-typed-engineer.agent.md +21 -24
  127. package/resources/customizations/.github/agents/pytest-unit-test-coding.agent.md +13 -17
  128. package/resources/customizations/.github/agents/python-atomic-executor.agent.md +11 -11
  129. package/resources/customizations/.github/agents/python-atomic-planning.agent.md +2 -2
  130. package/resources/customizations/.github/agents/python-execution-only-typed.agent.md +14 -17
  131. package/resources/customizations/.github/agents/python-orchestrator.agent.md +7 -7
  132. package/resources/customizations/.github/agents/python-typed-engineer.agent.md +17 -20
  133. package/resources/customizations/.github/agents/staged-review.agent.md +2 -2
  134. package/resources/customizations/.github/agents/tdd-green.agent.md +1 -1
  135. package/resources/customizations/.github/agents/tdd-red.agent.md +3 -3
  136. package/resources/customizations/.github/agents/tdd-refactor.agent.md +2 -2
  137. package/resources/customizations/.github/agents/typescript-engineer.agent.md +3 -3
  138. package/resources/customizations/.github/codex/execute-hard-lock.prompt.md +3 -3
  139. package/resources/customizations/.github/instructions/general-code-change.instructions.md +1 -1
  140. package/resources/customizations/.github/instructions/powershell-unit-test.instructions.md +1 -1
  141. package/resources/customizations/.github/instructions/python-code-change.instructions.md +5 -5
  142. package/resources/customizations/.github/instructions/python-suppressions.instructions.md +3 -3
  143. package/resources/customizations/.github/instructions/python-unit-test.instructions.md +1 -1
  144. package/resources/customizations/.github/prompts/execute-hard-lock.prompt.md +2 -2
  145. package/resources/customizations/.github/prompts/generate-commit-message-repo.prompt.md +2 -2
  146. package/resources/customizations/.github/prompts/remediate-comments.prompt.md +2 -2
  147. package/resources/customizations/.github/prompts/review-feature.prompt.md +1 -1
  148. package/resources/customizations/.github/skills/atomic-plan-contract/SKILL.md +8 -12
  149. package/resources/customizations/.github/skills/execution-environment/SKILL.md +18 -13
  150. package/resources/customizations/.github/skills/feature-review-workflow/SKILL.md +15 -2
  151. package/resources/feature-templates/bug/plan.yyyy-MM-ddTHH-mm.md +4 -4
  152. package/resources/feature-templates/feature/plan.yyyy-MM-ddTHH-mm.md +3 -3
  153. package/resources/feature-templates/refactor/plan.yyyy-MM-ddTHH-mm.md +2 -2
  154. package/resources/powershell/PoshQC/PoshQC.Testing.psm1 +2 -2
  155. package/resources/powershell/PoshQC/PoshQC.psm1 +3 -3
  156. package/resources/powershell/PoshQC/README.md +8 -8
  157. package/resources/powershell/PoshQC/settings/pester.runsettings.psd1 +2 -2
  158. package/resources/templates/policy_audit/AGENTS.md +9 -10
  159. package/resources/templates/policy_audit/policy-audit.yyyy-MM-ddTHH-mm.md +19 -20
@@ -32,7 +32,7 @@ Rules:
32
32
  - **Tool routes are not restated.** Tool routes, launchers, wrapper scripts, command-text restrictions, the batch budget, hook context, and CI shape are owned by the `execution-environment` skill. A plan references that skill instead of restating its content.
33
33
  - **Changed existing behavior names its asserting tests.** A task that changes the observable behavior of an existing function, script, fixture, or test stub (its signature, argv, output, exit status, or the files it writes) names every existing test that asserts that behavior and states each test's disposition: unchanged because it is unaffected, or updated, with the reason for the update. The tests are found by searching the test tree for the symbol, the file name, and the asserted output. A test that asserts the current behavior and is outside the task's file set fails once the change lands, and the plan's own acceptance condition then cannot be met. The planner's adversarial self-review includes this search for every task that changes existing behavior.
34
34
  - **Size guideline.** A plan stays within 40 canonical tasks and 400 physical lines. A plan that needs more carries a `## Size Justification` section with at least one line stating why the size is necessary (validator rule G13). Files produced by one generator run count as one generator task.
35
- - **Pre-Mortem.** Every plan carries a `## Pre-Mortem` section with one bullet beginning with each of the seven labels `Review checklists`, `Coverage`, `Mirror parity`, `File size`, `Test isolation`, `CI-only behavior`, and `Evidence`. Each bullet states how the plan prevents that failure class, or states "not applicable" followed by the reason. The `Test isolation` bullet names the isolation runs the plan performs: a seeded shuffled Jest run with the seed recorded, a reversed-order run of the new or changed Python test modules, and a seeded shuffled file-order run of the touched Pester suites with at least three seeds, each seed recorded. The `Mirror parity` bullet also covers the execution-environment brief: a plan that alters a fact the brief states (for example, it adds or renames a CI job, changes a required status context, a tool route, or a batch-budget rule) includes a task that updates the brief in the same change, in all six byte-identical copies, and the bullet names that task. Without that task the brief states a superseded fact once the change lands, which breaks the brief's own maintenance rule. The planner SubagentStop hook blocks a plan without a complete section.
35
+ - **Pre-Mortem.** Every plan carries a `## Pre-Mortem` section with one bullet beginning with each of the seven labels `Review checklists`, `Coverage`, `Mirror parity`, `File size`, `Test isolation`, `CI-only behavior`, and `Evidence`. Each bullet states how the plan prevents that failure class, or states "not applicable" followed by the reason. The `Test isolation` bullet names the parallel gates the plan uses: one `Invoke-PoshQCParallelTest` run, one `pytest -n auto` run, and Jest through its normal parallel workers, each re-run only after a fix. The `Mirror parity` bullet also covers the execution-environment brief: a plan that alters a fact the brief states (for example, it adds or renames a CI job, changes a required status context, a tool route, or a batch-budget rule) includes a task that updates the brief in the same change, in all six byte-identical copies, and the bullet names that task. Without that task the brief states a superseded fact once the change lands, which breaks the brief's own maintenance rule. The planner SubagentStop hook blocks a plan without a complete section.
36
36
  - **Final-phase self-review.** The final phase of every plan contains a self-review task that walks the policy-audit, code-review, and feature-audit templates under `docs/features/templates/policy_audit/` against the branch diff from the merge base and writes `<FEATURE>/evidence/qa-gates/self-review.<timestamp>.md` with one PASS, FAIL, or N/A row per checklist item. A FAIL row is fixed and the QA loop is re-run before the self-review is rewritten; the plan does not complete with a FAIL row.
37
37
 
38
38
  This section takes precedence over the literal-quoting rules of `## Wrap-Tolerant Assertion Authoring (Mandatory)`: those rules govern the asserted value of an acceptance condition, not context.
@@ -43,12 +43,11 @@ When orchestration selects short path, a minimal plan is still mandatory and mus
43
43
 
44
44
  1) Baseline capture block
45
45
  - policy reads in required order,
46
- - baseline toolchain/test state capture for each language that has explicit baseline command tasks in the plan.
46
+ - static baseline capture (format, lint, type check, and analyzer findings) for each language that has explicit baseline command tasks in the plan; no test suite runs in this block.
47
47
  - required artifacts:
48
48
  - a Phase 0 policy-read evidence artifact in the canonical evidence location defined by `evidence-and-timestamp-conventions`
49
49
  - one baseline artifact per baseline command step (no aggregate-only baseline artifact)
50
50
  - each baseline step artifact MUST include: `Timestamp:`, `Command:`, `EXIT_CODE:`, `Output Summary:`
51
- - baseline test-step artifacts for languages with mandatory coverage policy MUST include numeric coverage headline values in `Output Summary:` (baseline percent and, when applicable, targeted module/new-code percent).
52
51
 
53
52
  2) Delegated implementation block
54
53
  - explicit handoff task to the small-path implementation engineer,
@@ -59,7 +58,7 @@ When orchestration selects short path, a minimal plan is still mandatory and mus
59
58
  - rerun behavior when any step changes files or fails.
60
59
  - one final-QC artifact per QC command step (no aggregate-only final-QC artifact)
61
60
  - each final-QC step artifact MUST include: `Timestamp:`, `Command:`, `EXIT_CODE:`, `Output Summary:`
62
- - final-QC test commands for languages with mandatory coverage policy MUST run in coverage mode and record numeric post-change coverage values in `Output Summary:`.
61
+ - final-QC test commands for languages with mandatory coverage policy MUST run in coverage mode and record numeric coverage values from the single gate run in `Output Summary:`.
63
62
  - final-QC command tasks that are present in the approved plan MUST execute their stated commands; `SKIPPED` is invalid unless the task text itself explicitly authorizes a skip condition.
64
63
 
65
64
  4) Reduced audit block
@@ -96,7 +95,7 @@ Branching after Phase 0:
96
95
 
97
96
  Phase 0 must include tasks to read policy files in the order defined in `policy-compliance-order`.
98
97
 
99
- Phase 0 must also capture baseline toolchain results for the languages touched. Baseline artifact conventions (location + required fields) are defined in `evidence-and-timestamp-conventions`.
98
+ Phase 0 must also capture static baselines (format, lint, type check, and analyzer findings) for the languages touched, and no test suite runs in it. Baseline artifact conventions (location + required fields) are defined in `evidence-and-timestamp-conventions`.
100
99
 
101
100
  For short-path/minimal-audit plans, Phase 0 evidence is incomplete unless both artifacts exist:
102
101
  - `phase0-instructions-read.md` with at least: `Timestamp:`, `Policy Order:`, and explicit list of files read.
@@ -128,12 +127,9 @@ Plans name evidence artifacts `<name>.<timestamp>.md` and never fix a plan-time
128
127
 
129
128
  For any language in scope where repository policy requires coverage validation:
130
129
 
131
- - The approved plan MUST include explicit baseline and final-QC coverage capture tasks.
132
- - Baseline and final-QC artifacts MUST record numeric coverage values (not placeholders such as `UNVERIFIED`).
133
- - Where policy requires no-regression and new-code thresholds, the plan MUST include a delta/threshold verification task that reports:
134
- - baseline coverage,
135
- - post-change coverage,
136
- - new/changed-code coverage.
130
+ - The approved plan MUST include an explicit final-QC coverage capture task.
131
+ - The final-QC artifact MUST record numeric coverage values (not placeholders such as `UNVERIFIED`).
132
+ - The plan MUST include a threshold task that reports each changed file from the single gate run against the coverage thresholds. New behavior is tested. No earlier figure is compared.
137
133
  - If required coverage values are unavailable, the plan outcome MUST be remediation-required and MUST NOT be reported as PASS.
138
134
 
139
135
  ## Final QA Loop (Required for Code/Test Changes)
@@ -275,7 +271,7 @@ When a plan is generated or validated from a feature folder, resolve selected mo
275
271
 
276
272
  ## Mode-Specific Mandatory Plan Gates
277
273
 
278
- - `minor-audit` plans MUST include baseline evidence tasks, targeted verification evidence tasks, and end-state evidence tasks.
274
+ - `minor-audit` plans MUST include static baseline evidence tasks, targeted verification evidence tasks read from the gate run, and end-state evidence tasks.
279
275
  - `minor-audit` plans MUST require `${feature-folder}/issue.md` to contain an explicit `## Acceptance Criteria` section; do not infer acceptance criteria from other `issue.md` sections.
280
276
  - `minor-audit` plans MUST NOT treat missing `spec.md` or `user-story.md` as automatic blockers.
281
277
  - `minor-audit` execution/validation/audit MUST fail closed when `spec.md` or `user-story.md` exists unexpectedly in the active folder, when the explicit `## Acceptance Criteria` section is missing from `issue.md`, when required Phase 0 artifacts are missing, or when checklist state contradicts evidence on disk.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: csharp-qa-gate
3
- description: Final QA gate for C# changes. Executes the full CSharpier -> .NET Analyzers -> Nullable Analysis -> xUnit toolchain (with architecture tests), compares against a captured baseline, enforces zero-regression deltas, and produces the required reporting block before the agent declares the change complete.
3
+ description: Final QA gate for C# changes. Executes the full CSharpier -> .NET Analyzers -> Nullable Analysis -> MSTest toolchain (with architecture tests), compares static tool results against the static baseline, reads test and coverage results from the single gate run, and produces the required reporting block before the agent declares the change complete.
4
4
  ---
5
5
 
6
6
  # C# QA Gate
@@ -12,14 +12,14 @@ Canonical procedure for the Phase D final quality gate that every C# change must
12
12
  Use this skill when:
13
13
 
14
14
  - `csharp-typed-engineer` is about to declare a change complete.
15
- - An executor has finished applying a planned batch and must verify zero regressions against the baseline captured in Phase A.
15
+ - An executor has finished applying a planned batch and must verify the static tools against the static baseline recorded in Phase A, and the tests in the single gate run.
16
16
  - A reviewer needs to confirm the toolchain was actually run and produced a clean pass.
17
17
 
18
18
  ## Required Inputs
19
19
 
20
20
  Before invoking this gate, the agent must have:
21
21
 
22
- - a baseline record produced in Phase A, containing analyzer findings, compiler/nullable diagnostics, xUnit pass/fail status, and per-file coverage status for the in-scope files,
22
+ - a static baseline record produced in Phase A, containing analyzer findings and compiler/nullable diagnostics for the in-scope files,
23
23
  - the exact list of touched production and test files,
24
24
  - a clean working tree (all planned edits committed to the working copy).
25
25
 
@@ -48,36 +48,35 @@ Analyzer settings (`AnalysisLevel`, `AnalysisMode`, `TreatWarningsAsErrors`, `Nu
48
48
 
49
49
  If the environment prevents running any tool, stop and report the change as **unverified**. Do not declare completion.
50
50
 
51
- ## Delta Requirements (Zero-Regression Hard Gate)
51
+ ## Gate Requirements (Hard Gate)
52
52
 
53
- Compare the final results to the Phase A baseline. All of the following must hold:
53
+ Compare the final static tool results to the static baseline recorded in Phase A, and read test and coverage results from the single gate run. All of the following must hold:
54
54
 
55
55
  - **Analyzer delta**: 0 new findings across the repository.
56
56
  - **Compiler / nullable delta**: 0 new diagnostics across the repository.
57
- - **xUnit delta**: 0 new failing tests.
58
- - **Architecture-test delta**: 0 new failing facts in the `*.ArchitectureTests` project.
59
- - **Per-file coverage delta**: coverage for every touched file is greater than or equal to the baseline for that file.
60
- - **Overall coverage delta** (when the repo enforces it): overall coverage is greater than or equal to the baseline.
57
+ - **MSTest gate**: zero failures in the single gate run.
58
+ - **Architecture tests**: zero failures in the `*.ArchitectureTests` project.
59
+ - **Per-file coverage**: every changed file meets the coverage thresholds, read from the single gate run, and new behavior is tested.
61
60
  - **New modules, classes, or methods**: coverage >= 90% for each new unit introduced in the batch.
62
61
 
63
- If any delta check fails, the agent must revert or fix immediately and rerun the full toolchain. Do not proceed to reporting until all deltas are clean.
62
+ If any check fails, the agent must revert or fix immediately and rerun the full toolchain. Do not proceed to reporting until all checks are clean.
64
63
 
65
64
  ## Required Reporting Block
66
65
 
67
66
  Every completion response must include the following sections:
68
67
 
69
68
  1. **Scope** — exact file list touched in this change.
70
- 2. **Baseline** — analyzer, compiler/nullable, xUnit, and coverage status recorded in Phase A.
69
+ 2. **Baseline** — analyzer and compiler/nullable findings recorded in Phase A.
71
70
  3. **Plan** — design and test-strategy summary, referencing the approved plan.
72
71
  4. **Diffs** — patch-style or full-file replacements for scoped files only.
73
- 5. **QA Gate Results** — analyzer, compiler/nullable, xUnit, architecture-test, and coverage deltas. If any step could not be run, mark the corresponding line **unverified** and state why.
72
+ 5. **QA Gate Results** — analyzer and compiler/nullable deltas, failures in the single gate run and the architecture tests, and per-file coverage against the thresholds. If any step could not be run, mark the corresponding line **unverified** and state why.
74
73
 
75
74
  ## Evidence Storage
76
75
 
77
76
  Persist toolchain output according to `evidence-and-timestamp-conventions`:
78
77
 
79
- - store baseline outputs under `<FEATURE>/evidence/baseline/<timestamp>/`,
80
- - store post-change outputs under `<FEATURE>/evidence/qa-gates/<timestamp>/`,
78
+ - store static baseline outputs under `<FEATURE>/evidence/baseline/<timestamp>/`,
79
+ - store final gate outputs under `<FEATURE>/evidence/qa-gates/<timestamp>/`,
81
80
  - use ISO-8601 UTC timestamps in folder names.
82
81
 
83
82
  This location is canonical per evidence-and-timestamp-conventions and is not overridable.
@@ -89,4 +88,4 @@ The evidence paths must be referenced in the agent's completion message to satis
89
88
 
90
89
  - Do not disable, skip, or narrow any step of the toolchain to reach a clean result.
91
90
  - Do not add analyzer suppressions, `#pragma warning disable`, `#nullable disable`, or test `[Ignore]` attributes to suppress new findings introduced by the change.
92
- - Do not report success based on partial or targeted runs alone. Targeted runs are allowed mid-batch, but the final gate requires a full-solution pass.
91
+ - Do not report success based on partial or targeted runs. A focused run of one test file to debug a specific failure is debugging only; it is never a gate or evidence, and the final gate is the single gate run.
@@ -0,0 +1,338 @@
1
+ ---
2
+ name: epic-progress-report
3
+ description: 'Post recurring epic progress reports from the coordinator session: a four-line TL;DR every 10 minutes and an hourly full status update with a push notification. Use when an epic is running and the owner wants scheduled progress, velocity, and time-remaining reports, or when the reports must be started, reset after a pause, moved to a new cadence, stopped, or recreated after a restart.'
4
+ argument-hint: "[epic-folder]"
5
+ allowed-tools:
6
+ - Read
7
+ - Glob
8
+ - "Bash(pwsh -NoProfile -File .claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.ps1 *)"
9
+ - "Bash(cswap list*)"
10
+ - CronCreate
11
+ - CronList
12
+ - CronDelete
13
+ - PushNotification
14
+ ---
15
+
16
+ # Epic Progress Report
17
+
18
+ This skill runs the epic progress report script and schedules two recurring reports in the
19
+ coordinator's main session: a four-line TL;DR and an hourly full status update. The script is
20
+ `.claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.ps1`. It reads the epic
21
+ kickoff, the feature plans, the epic checkpoint, the pull-request state, and the weekly quota,
22
+ prints the report, and keeps its samples and baseline in a state file.
23
+
24
+ ## When to Use This Skill
25
+
26
+ - An epic is running and the owner wants scheduled progress reports.
27
+ - The reports must be started for an epic, or recreated after the session restarted.
28
+ - Work resumed after a pause or an outage and the velocity baseline must be reset.
29
+ - The TL;DR cadence changes (for example from 5 to 10 minutes).
30
+ - The epic is finished and the reports must be stopped.
31
+
32
+ ## Prerequisites
33
+
34
+ - PowerShell 7 and `git`. `gh` and `cswap` are optional: without `gh` the pull-request state
35
+ is empty, and without `cswap` (or without parseable output) the weekly quota prints `n/a`.
36
+ - The epic kickoff at `docs/features/epics/<epic-folder>/epic-kickoff.md` on
37
+ `origin/epic/<epic-folder>-integration`, with a feature-summary table (header first cell
38
+ `issue_num` or `Issue`) and an `Epic issue: #<n>` line. Pass `-EpicIssue` when the line
39
+ is missing.
40
+ - The epic checkpoint `artifacts/orchestration/epic-orchestrator-state.json` under the
41
+ repository root (optional; without it every feature is classified from its plan and PR).
42
+ - Run from the repository root in the coordinator's main session. An agent-isolated worktree
43
+ refuses command text containing `pwsh`, and the scheduled jobs and notifications belong to
44
+ the main session.
45
+
46
+ ## Inputs
47
+
48
+ | Parameter | Default | Meaning |
49
+ |---|---|---|
50
+ | `-EpicFolder` | (mandatory) | Epic folder name under `docs/features/epics/`; also the epic name in the status heading. |
51
+ | `-StartUtc` | stored start | Start of the measurement. Resolution: the passed value, else now with `-ResetBaseline`, else the stored start. With none of these the script stops before any git call with an error naming `-StartUtc` and `-ResetBaseline`. |
52
+ | `-BaselineDone` | stored value, else 0 | Tasks already complete at the start. With `-ResetBaseline` and no passed value, the current done count. |
53
+ | `-BaselineWeeklyPct` | stored value, else 0 | Weekly quota percentage at the start. `-ResetBaseline` does not change it. |
54
+ | `-EpicIssue` | the kickoff's `Epic issue: #<n>` line | Epic issue number printed in the report. |
55
+ | `-IntegrationBranch` | `origin/epic/<epic-folder>-integration` | Branch that holds the kickoff and the plans. |
56
+ | `-KickoffPath` | `docs/features/epics/<epic-folder>/epic-kickoff.md` | Kickoff path on the integration branch. |
57
+ | `-RepositoryRoot` | current location | Repository root in which git runs. |
58
+ | `-CheckpointPath` | `artifacts/orchestration/epic-orchestrator-state.json` | Epic checkpoint under the repository root. |
59
+ | `-StatePath` | `.claude/state/epic-progress-<epic-folder>.json` | State file under the repository root; the directory is created when missing. |
60
+ | `-WaveOverheadHours` | 1.25 | Review and CI hours added per open wave. |
61
+ | `-SampleCap` | 14 | Maximum number of samples kept. |
62
+ | `-Mode` | `Full` | `TLDR` prints the four TL;DR lines; `Full` prints them followed by the full report. |
63
+ | `-ResetBaseline` | off | Discards the stored samples and restarts the baseline now (see the reset section). |
64
+ | `-PairSamples` | off | One-shot: pairs the stored samples for a cadence change (see the cadence section). Cannot be combined with `-ResetBaseline`. |
65
+
66
+ A passed `-StartUtc`, `-BaselineDone`, or `-BaselineWeeklyPct` overrides the stored value and
67
+ is persisted with the next state write.
68
+
69
+ ## Report Formats
70
+
71
+ The wording, order, and punctuation below are the script's output and do not change. Values in
72
+ angle brackets are placeholders; the examples use the fictional epic folder `example-epic` and
73
+ epic issue `42`.
74
+
75
+ TL;DR (both modes print these four lines first):
76
+
77
+ ```text
78
+ **TL;DR:** Epic #<issue> is at <done> of <total> tasks (<pct>%). <done-sentence> <running-sentence>
79
+ **Elapsed:** <H h MM min>, with about <hours> hours left on the wave-parallel estimate. **Weekly** quota is at <weekly>.
80
+ **Avg Velocity:** <avg> tasks / hr. **Recent Velocity:** <recent> tasks / hr since last check-in. (SD of recent velocity: <sd>, from <n> intervals)
81
+ **Estimated time remaining:** <range>
82
+ ```
83
+
84
+ Variants:
85
+
86
+ - done-sentence: `None of the <N> features is done yet.` or `<K> of <N> features are done.`
87
+ - running-sentence: `No feature is running.`, `#<i> is running (<d> of <t>).`, or
88
+ `#<a> (<d> of <t>), #<b> (<d> of <t>) are running.`
89
+ - range: `<HH:MM> hrs (range needs 3 or more check-in intervals)`, `<HH:MM> hrs to <HH:MM> hrs`,
90
+ or `<HH:MM> hrs to no upper bound (average velocity minus 2.05 SD is at or below 0.5 tasks / hr)`.
91
+ - `<pct>`, `<avg>`, `<recent>`, and `<sd>` are rounded to one decimal and `<hours>` to zero
92
+ decimals, with invariant culture and default (to-even) rounding; an integral value prints
93
+ without a decimal (`1`, not `1.0`). `<weekly>` is `<value>%` or `n/a`.
94
+ - Any non-finite value prints `n/a`; no report prints `NaN` or `Infinity`.
95
+
96
+ Example (fictional):
97
+
98
+ ```text
99
+ **TL;DR:** Epic #42 is at 3 of 10 tasks (30%). 1 of 3 features are done. #12345 is running (1 of 5).
100
+ **Elapsed:** 3 h 00 min, with about 10 hours left on the wave-parallel estimate. **Weekly** quota is at 42.5%.
101
+ **Avg Velocity:** 1 tasks / hr. **Recent Velocity:** 1 tasks / hr since last check-in. (SD of recent velocity: 0, from 3 intervals)
102
+ **Estimated time remaining:** 09:22 hrs to 09:39 hrs
103
+ ```
104
+
105
+ Full mode prints the TL;DR lines, then these lines:
106
+
107
+ ```text
108
+
109
+ ## Epic #<issue> <epic-folder>: status at <HH:mm> UTC, <MMM d>
110
+
111
+ **Elapsed:** <H h MM min> since <HH:mm> UTC. **Progress:** <done> of <total> tasks complete, **<pct>%**.
112
+
113
+ | State | Features |
114
+ |---|---|
115
+ | Completed | <completed> |
116
+ | Running | #<i> (wave <w>, <band>): <d> of <t> tasks (<share>%).<phase><pr> |
117
+ | Pending, wave <w> | #<i> (<t>), #<j> (<t>) |
118
+
119
+ | Wave | Children | Tasks | Done |
120
+ |---|---|---|---|
121
+ | <w> | <count> | <tasks> | <done> |
122
+ | **Total** | **<features>** | **<total>** | **<done>** |
123
+
124
+ **Velocity:** <avg> tasks per hour (one child's pace). **Remaining:** <remaining> tasks.
125
+ - Straight line, no parallelism: about <H h MM min> (upper bound).
126
+ - Wave-parallel (longest chain <tasks> tasks plus about <overhead> h per open wave for review and CI): about **<H h MM min>**.
127
+ **Weekly quota (active account):** <weekly> used, <delta> points since the epic started. This pool also covers the other runs in this session, so it is not the epic's cost alone.
128
+ ```
129
+
130
+ Full report contents:
131
+
132
+ - `<completed>` is `None yet` or the completed issues as `#<i>` joined with `, `.
133
+ - One `Running` row per running feature. `<phase>` is ` Now at: <phase>.` when a current
134
+ phase exists, else empty; `<pr>` is ` PR <state>.` when a pull request exists, else empty;
135
+ `<share>` is the feature percentage rounded to zero decimals.
136
+ - One `Pending, wave <w>` row per wave that holds pending features, in ascending wave order.
137
+ - One Wave-table row per wave in ascending order, then the bold Total row.
138
+ - `<overhead>` is `-WaveOverheadHours` unrounded. `<delta>` is the weekly percentage minus
139
+ the weekly baseline, with a leading `+` when it is finite and not negative, else `n/a`.
140
+ - Times use invariant culture and UTC.
141
+
142
+ ## Calculation Rules
143
+
144
+ - Task counts: plan checkboxes `- [ ] [P#-T#]` and `- [x] [P#-T#]` of each feature, read from
145
+ the feature's worktree when its branch has one, otherwise from the plan on the integration
146
+ branch. The feature list, waves, bands, and plan paths come from the kickoff's
147
+ feature-summary table.
148
+ - Feature state: Completed when the checkpoint's `merge_status` is `merged` or
149
+ `worktree_removed`, or the feature PR is merged; Running when any task is done, the
150
+ checkpoint status is past `not_started`, or a PR exists; otherwise Pending.
151
+ - Elapsed: from the start instant to now, clamped at 0; printed as `H h MM min` from rounded
152
+ total minutes.
153
+ - Average velocity: (done now - baseline done) / elapsed hours; 0 when elapsed is not above 0.
154
+ - Straight-line estimate: remaining tasks / average velocity; `n/a` when the average is not
155
+ above 0.
156
+ - Wave-parallel estimate: the sum, over every wave with a non-completed feature, of the largest
157
+ remaining task count among that wave's non-completed features, divided by the average
158
+ velocity, plus `-WaveOverheadHours` (default 1.25 hours) per open wave; `n/a` when the
159
+ average is not above 0.
160
+ - Samples: a check-in sample (Unix epoch seconds, done count) is added when there is no
161
+ previous sample or the previous one is at least 90 seconds old; the newest `-SampleCap`
162
+ (default 14) samples are kept. Epoch seconds are used because `ConvertFrom-Json` converts ISO
163
+ date strings into local-time values.
164
+ - Interval velocity: max(0, change in done) / change in hours, for consecutive samples at
165
+ least 2 minutes apart; closer pairs are skipped.
166
+ - Recent velocity: the latest interval's value; `n/a` without intervals.
167
+ - SD: the sample standard deviation (n-1 denominator) of the interval velocities; `n/a` below
168
+ 3 intervals. The report prints the interval count.
169
+ - Range: below 3 intervals, the wave-parallel estimate followed by
170
+ `(range needs 3 or more check-in intervals)`. With 3 or more intervals the range is the
171
+ average velocity plus and minus 2.05 SD: fast end = critical-path tasks /
172
+ (average + 2.05 x SD) + overhead; slow velocity = average - 2.05 x SD; when the slow
173
+ velocity is above 0.5 tasks per hour the slow end = critical-path tasks / slow velocity +
174
+ overhead, otherwise the slow end prints the no-upper-bound text. Hours print as `HH:MM`.
175
+ - Weekly quota: the seven-day percentage of the active account in `cswap list --json`;
176
+ `n/a` when `cswap` is missing or prints nothing parseable.
177
+ - `n/a`: every printed number passes through a formatter that returns `n/a` for NaN or
178
+ infinity.
179
+
180
+ ## Starting the Reports
181
+
182
+ 1. Run the script once from the repository root to set the baseline. Either pass the start
183
+ and the tasks already done at that start:
184
+
185
+ ```text
186
+ pwsh -NoProfile -File .claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.ps1 -EpicFolder example-epic -StartUtc 2026-01-05T09:00:00Z -BaselineDone 40 -Mode TLDR
187
+ ```
188
+
189
+ or start the measurement now:
190
+
191
+ ```text
192
+ pwsh -NoProfile -File .claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.ps1 -EpicFolder example-epic -ResetBaseline
193
+ ```
194
+
195
+ The start and baseline are stored in the state file, so later runs need no `-StartUtc`.
196
+ 2. Create the two recurring jobs with `CronCreate`, using the prompts below with
197
+ `<epic-folder>` replaced by the epic folder name.
198
+ 3. Confirm both jobs with `CronList`.
199
+
200
+ ## Scheduling Prompts
201
+
202
+ TL;DR job: cron `*/10 * * * *`, recurring.
203
+
204
+ ```text
205
+ Run `pwsh -NoProfile -File .claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.ps1 -EpicFolder <epic-folder> -Mode TLDR` from the repository root and post its output verbatim as the TL;DR epic update (no push notification). Do not add commentary unless a run is blocked or a child has finished and needs relaying.
206
+ ```
207
+
208
+ Hourly job: cron `7 * * * *`, recurring.
209
+
210
+ ```text
211
+ Run `pwsh -NoProfile -File .claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.ps1 -EpicFolder <epic-folder>` (full mode) from the repository root and post its output as the hourly epic update, then send a PushNotification with the TL;DR line (under 200 characters). Check `cswap list` for the weekly pool; stop and commit at 93%.
212
+ ```
213
+
214
+ Notes on the prompts:
215
+
216
+ - Push-notification text: the first TL;DR output line with every `**` removed. When that text
217
+ is 200 characters or longer, drop the running-features sentence; the remaining text (prefix,
218
+ task counts, percentage, and done-sentence) is well under 200 characters.
219
+ - The prompts omit `-StartUtc`, `-BaselineDone`, `-ResetBaseline`, and `-PairSamples`. The
220
+ baseline is read from the state file, so a later reset is never overridden by a stale
221
+ scheduled argument, and pairing is never repeated by a recurring job.
222
+ - Cron times are local time, not UTC.
223
+ - Jitter: a 10-minute job fires up to 5 minutes late and an hourly job up to 30 minutes late,
224
+ by a constant delay per job.
225
+
226
+ ## Resetting the Baseline After a Pause
227
+
228
+ Whenever work resumes after a pause or an outage, run the script once with `-ResetBaseline`:
229
+
230
+ ```text
231
+ pwsh -NoProfile -File .claude/skills/epic-progress-report/scripts/Get-EpicProgressReport.ps1 -EpicFolder example-epic -ResetBaseline
232
+ ```
233
+
234
+ - The stored samples are discarded, the start becomes now, and the baseline done count becomes
235
+ the current done count. Pass `-StartUtc` and `-BaselineDone` with `-ResetBaseline` when the
236
+ resume instant is in the past.
237
+ - The weekly-quota baseline is kept, so the Full report's points since the epic started stay
238
+ accurate.
239
+ - The scheduled prompts are not changed.
240
+ - The first reports after a reset show `0 h 00 min` elapsed and `n/a` estimates, and the
241
+ estimates are unreliable for about two hours.
242
+ - Reason: earlier measures include the paused time. A 9-hour outage once distorted the averages
243
+ until the baseline was reset.
244
+
245
+ ## Changing the Cadence
246
+
247
+ To move the TL;DR job to a new interval (for example from 5 to 10 minutes):
248
+
249
+ 1. Run the script once with `-PairSamples`. It keeps the newest sample and every second older
250
+ sample, so the stored intervals match the doubled cadence. 14 samples become 7.
251
+ 2. Delete the TL;DR job with `CronDelete` and create it again with `CronCreate` at the new
252
+ interval.
253
+
254
+ `-PairSamples` is a one-shot command: each run halves the samples again. Never put it in a
255
+ scheduled prompt.
256
+
257
+ Worked example from recorded samples: thirteen 5-minute intervals gave mean 26.2 and SD 31.4
258
+ tasks per hour; after pairing, six 10-minute intervals give mean 27.3 and SD 23.2. The
259
+ conversation that defined the reports quoted 31.5 for the 5-minute SD; the recorded samples
260
+ give 31.4 (unrounded 31.4495).
261
+
262
+ ## Stopping the Reports
263
+
264
+ 1. Run `CronList` and note the IDs of the TL;DR and hourly jobs.
265
+ 2. Run `CronDelete` for each report job ID.
266
+ 3. Keep the state file for a later restart of the reports, or delete it.
267
+
268
+ ## After a Restart
269
+
270
+ - `CronCreate` jobs are session-only: they fire only while the session runs and is idle, and a
271
+ missed run fires once when the session becomes idle again.
272
+ - `claude --resume` or `claude --continue` restores jobs that have not expired.
273
+ - Recurring jobs expire 7 days after creation; recreate both before the 7-day expiry.
274
+ - Run `CronList` and recreate only the missing jobs with the prompts above.
275
+ - If work paused during the restart, reset the baseline first.
276
+ - The state file survives under `.claude/state/` wherever the checkout persists, so the
277
+ baseline and samples are kept.
278
+
279
+ ## State File
280
+
281
+ - Location: `.claude/state/epic-progress-<epic-folder>.json` under the repository root.
282
+ `-StatePath` overrides it.
283
+ - The state is never committed: `.claude/state/` is gitignored in this repository and the
284
+ push-down adds it to a destination's `.gitignore`.
285
+ - The state is per checkout: a different worktree or `-RepositoryRoot` starts a separate
286
+ history. Run from the same root, or pass `-StatePath`.
287
+ - `git clean -fdX` deletes it.
288
+ - A state file under the system temporary directory, written by an earlier version, is not
289
+ migrated: pass its path once with `-StatePath`, or reset the baseline.
290
+ - The legacy format (a JSON array of samples) is still read. The current document is:
291
+
292
+ ```json
293
+ {
294
+ "version": 1,
295
+ "startUnixSeconds": 1767603600,
296
+ "baselineDone": 0,
297
+ "baselineWeeklyPct": 0,
298
+ "samples": [ { "ts": 1767614400, "done": 3 } ]
299
+ }
300
+ ```
301
+
302
+ - Blank text, unparseable text, or a version other than 1 is read as empty state; a missing
303
+ field is absent.
304
+ - The state is written when a sample is added, or when `-ResetBaseline` or `-PairSamples` is
305
+ given. A run within 90 seconds of the last sample with neither switch writes nothing.
306
+
307
+ ## Known Behaviors and Measured Rates
308
+
309
+ - Plan checkboxes tick at batch boundaries, so 5-minute interval velocity is bursty: 0 to
310
+ about 150 tasks per hour, with an SD of about 30 to 45 around a mean near 26.
311
+ - Aggregate throughput with three or four features in parallel is about 25 to 30 tasks per
312
+ hour. Per-feature pace is about 9 to 13 tasks per hour; a lone feature, including its review
313
+ and PR tail, about 4.
314
+ - The wave-parallel estimate is unreliable for about two hours after a baseline: it swung
315
+ between 35 and 110 hours in the first hour, and once estimated 26 to 30 hours for about 10
316
+ active hours.
317
+ - Task totals drift when planners revise plans, so read the percentage against the live total.
318
+ - Flat stretches of 20 to 60 minutes are normal during review, PR, CI, and merge.
319
+ - The tail from plan complete to merge is 0.8 to 4 hours per feature, and each remediation
320
+ cycle adds 45 to 90 minutes.
321
+ - Weekly quota burn is 3 to 7 points per hour (4.3 to 7.6 tasks per point).
322
+ - The hourly Full run also records a sample when it runs more than 90 seconds after the
323
+ previous one. This adds a shorter interval about once an hour and raises the SD.
324
+ - A negative average (done below the baseline after a plan revision) makes the straight-line
325
+ and wave-parallel estimates `n/a`, while the range can print negative or very large values.
326
+ - Integral velocities print without a decimal (`1`, not `1.0`).
327
+
328
+ ## Notes
329
+
330
+ - Delivery: the push-down serves the installed extension payload, so this skill reaches a
331
+ destination repository only after the extension is rebuilt and reinstalled.
332
+ - Quota: the 93% stop in the hourly prompt is coordinator policy. The commit-before-the-wall
333
+ procedure is governed by `.claude/skills/quota-throttling/SKILL.md`.
334
+ - The script is read-only toward git and GitHub: it runs only `git fetch`, `git show`,
335
+ `git worktree list`, `gh pr list`, and `cswap list --json`, and the only file it writes is
336
+ the state file.
337
+ - In this repository, `scripts/dev-tools/Get-EpicProgressReport.ps1` forwards every argument
338
+ to the canonical script; the skill always invokes the canonical script.