@danmoisan/drm-copilot-mcp 1.0.24 → 1.0.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 (68) hide show
  1. package/out/mcp-server.js +1045 -214
  2. package/package.json +1 -1
  3. package/resources/claude-customizations/.claude/agents/feature-review.md +5 -3
  4. package/resources/claude-customizations/.claude/agents/parallel-orchestrator.md +11 -4
  5. package/resources/claude-customizations/.claude/agents/parallel-planner.md +5 -2
  6. package/resources/claude-customizations/.claude/hooks/enforce-discovery-artifact-gate.ps1 +28 -8
  7. package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate.ps1 +109 -5
  8. package/resources/claude-customizations/.claude/hooks/enforce-mermaid-validation.ps1 +390 -0
  9. package/resources/claude-customizations/.claude/hooks/validate-discovery-artifact-gate.ps1 +28 -8
  10. package/resources/claude-customizations/.claude/hooks/validate-orchestrator-output.ps1 +117 -46
  11. package/resources/claude-customizations/.claude/lib/bash/parallel-manifest-validate.sh +115 -3
  12. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadius.psm1 +105 -2
  13. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusConfig.psm1 +32 -52
  14. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusExtraction.psm1 +107 -99
  15. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusNormalization.psm1 +295 -0
  16. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusValidation.psm1 +9 -3
  17. package/resources/claude-customizations/.claude/lib/codex-routing/CodexDeployment.psm1 +312 -0
  18. package/resources/claude-customizations/.claude/lib/codex-routing/CodexTopology.psm1 +392 -0
  19. package/resources/claude-customizations/.claude/lib/discovery-validation/DiscoveryValidation.psm1 +500 -0
  20. package/resources/claude-customizations/.claude/lib/mermaid/MermaidGrammar.psm1 +491 -0
  21. package/resources/claude-customizations/.claude/lib/mermaid/MermaidLineScanner.psm1 +488 -0
  22. package/resources/claude-customizations/.claude/lib/mermaid/MermaidMarkdownFences.psm1 +298 -0
  23. package/resources/claude-customizations/.claude/lib/mermaid/MermaidValidation.psm1 +496 -0
  24. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorState.psm1 +58 -67
  25. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateCheckpointValue.psm1 +383 -0
  26. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateCodexModelReceipts.psm1 +297 -0
  27. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateCodexTopologyReceipts.psm1 +298 -0
  28. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateCompletion.psm1 +232 -43
  29. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateCompletionChecks.psm1 +416 -0
  30. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateModelReceipts.psm1 +366 -0
  31. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateReceipts.psm1 +408 -0
  32. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateRoutingContract.psm1 +428 -0
  33. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateRoutingMatrix.psm1 +377 -0
  34. package/resources/claude-customizations/.claude/lib/orchestrator-state/OrchestratorStateUnconditional.psm1 +166 -0
  35. package/resources/claude-customizations/.claude/rules/general-unit-test.md +1 -1
  36. package/resources/claude-customizations/.claude/rules/mermaid.md +142 -0
  37. package/resources/claude-customizations/.claude/rules/parallel-orchestration.md +88 -3
  38. package/resources/claude-customizations/.claude/rules/plan-acceptance-gates.md +116 -0
  39. package/resources/claude-customizations/.claude/rules/powershell.md +1 -1
  40. package/resources/claude-customizations/.claude/rules/quality-tiers.md +3 -3
  41. package/resources/claude-customizations/.claude/settings.json +5 -0
  42. package/resources/claude-customizations/.claude/skills/atomic-plan-contract/SKILL.md +15 -0
  43. package/resources/claude-customizations/.claude/skills/evidence-and-timestamp-conventions/SKILL.md +13 -0
  44. package/resources/claude-customizations/.claude/skills/feature-promotion-lifecycle/SKILL.md +6 -0
  45. package/resources/claude-customizations/.claude/skills/feature-review-workflow/SKILL.md +4 -4
  46. package/resources/claude-customizations/.claude/skills/mermaid-diagram/SKILL.md +184 -0
  47. package/resources/claude-customizations/.claude/skills/mermaid-diagram/references/c4.md +50 -0
  48. package/resources/claude-customizations/.claude/skills/mermaid-diagram/references/class.md +63 -0
  49. package/resources/claude-customizations/.claude/skills/mermaid-diagram/references/er.md +56 -0
  50. package/resources/claude-customizations/.claude/skills/mermaid-diagram/references/flowchart.md +68 -0
  51. package/resources/claude-customizations/.claude/skills/mermaid-diagram/references/gantt.md +51 -0
  52. package/resources/claude-customizations/.claude/skills/mermaid-diagram/references/other-types.md +82 -0
  53. package/resources/claude-customizations/.claude/skills/mermaid-diagram/references/pie.md +32 -0
  54. package/resources/claude-customizations/.claude/skills/mermaid-diagram/references/sequence.md +63 -0
  55. package/resources/claude-customizations/.claude/skills/mermaid-diagram/references/state.md +49 -0
  56. package/resources/claude-customizations/.claude/skills/parallel-add/SKILL.md +10 -5
  57. package/resources/claude-customizations/.claude/skills/parallel-orchestrate/SKILL.md +116 -41
  58. package/resources/claude-customizations/.claude/skills/parallel-plan/SKILL.md +95 -13
  59. package/resources/claude-customizations/.claude/skills/parallel-remove/SKILL.md +7 -3
  60. package/resources/claude-customizations/.claude/skills/powershell-qa-gate/SKILL.md +1 -1
  61. package/resources/claude-customizations/config/blast-radius.json +9 -3
  62. package/resources/claude-customizations/pack-manifests/core.json +31 -1
  63. package/resources/codex-and-agents-customizations/.agents/skills/evidence-and-timestamp-conventions/SKILL.md +13 -0
  64. package/resources/codex-and-agents-customizations/.agents/skills/general-unit-test/SKILL.md +1 -1
  65. package/resources/codex-and-agents-customizations/.agents/skills/quality-tiers/SKILL.md +3 -3
  66. package/resources/codex-and-agents-customizations/.codex/config.toml +1 -1
  67. package/resources/customizations/.github/skills/evidence-and-timestamp-conventions/SKILL.md +13 -0
  68. package/resources/powershell/PoshQC/settings/pester.runsettings.psd1 +37 -1
@@ -27,7 +27,7 @@ This rule defines the T1–T4 module rigor tier system used by all CI gates in t
27
27
 
28
28
  ## Uniform-vs-Tier-Dependent Gate Matrix
29
29
 
30
- Per Authoritative Decision #2, line and branch coverage thresholds are uniform across all tiers. Other gates remain tier-dependent.
30
+ Per Authoritative Decision #2, line and branch coverage thresholds are uniform across all tiers. The line threshold applies to every coverage language; the branch threshold applies to languages whose coverage tooling measures branch coverage. Other gates remain tier-dependent.
31
31
 
32
32
  ### Uniform across all tiers (T1–T4)
33
33
 
@@ -36,7 +36,7 @@ Per Authoritative Decision #2, line and branch coverage thresholds are uniform a
36
36
  - Type errors: 0.
37
37
  - Architecture violations: 0.
38
38
  - Line coverage: >= 85%.
39
- - Branch coverage: >= 75%.
39
+ - Branch coverage: >= 75% for languages whose coverage tooling measures branch coverage. PowerShell (Pester) and bash (kcov) are exempt from this threshold because neither tool measures branch coverage; no branch-coverage gate applies to them.
40
40
  - No regression on changed lines.
41
41
 
42
42
  ### Tier-dependent
@@ -53,4 +53,4 @@ Per Authoritative Decision #2, line and branch coverage thresholds are uniform a
53
53
 
54
54
  ## Rationale (uniform coverage thresholds)
55
55
 
56
- 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% and branch coverage >= 75% apply uniformly across T1–T4; tier-specific lower coverage floors are not used in this repository.
56
+ 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`.
@@ -2,7 +2,7 @@ default_permissions = ":danger-full-access"
2
2
 
3
3
  [mcp_servers.drm-copilot]
4
4
  command = "npx"
5
- args = ["-y", "@danmoisan/drm-copilot-mcp@1.0.24"]
5
+ args = ["-y", "@danmoisan/drm-copilot-mcp@1.0.27"]
6
6
  required = true
7
7
  enabled_tools = [
8
8
  "collect_commit_context",
@@ -83,6 +83,19 @@ When evidence artifacts are used for automated checking or plan reconciliation,
83
83
  - `Command: <exact command>`
84
84
  - `EXIT_CODE: <int>`
85
85
 
86
+ One optional field may also be declared:
87
+ - `ExpectedExitCode: <int>` — the exit code the gate is expected to produce.
88
+
89
+ Rules for the optional expectation field:
90
+ - The spelling is exact and case-sensitive: `ExpectedExitCode`. `expectedexitcode` and `Expected Exit Code` do not match the accept-list and are discarded as unrecognized rows.
91
+ - The value is a single integer. A leading sign is accepted and no range check is applied; the value is used for an equality comparison only.
92
+ - When the field is absent the expectation defaults to `0`, so every artifact that omits it keeps its existing result. Writing `ExpectedExitCode: 0` explicitly renders identically to omitting the field.
93
+ - A present but non-integer value (including an empty value) makes the WHOLE artifact `unparseable`. An unparseable artifact is dropped by the collector filter, so a typo in the expectation removes the row from the PR body rather than degrading it to `fail`.
94
+ - When the field is duplicated, the FIRST occurrence wins in both the Python and the TypeScript parser; later occurrences are ignored.
95
+ - The field is per-FILE, not per-gate: one artifact carries exactly one expectation, so an artifact recording several gates cannot express a different expectation for each. Record a gate that needs a non-zero expectation in its own artifact file.
96
+
97
+ A gate whose observed `EXIT_CODE` equals its declared expectation is normalized to `pass`. The observed exit code is still displayed, and the rendered row additionally carries ` - Expected EXIT_CODE: <int>` between the `EXIT_CODE` and `Normalized result` lines when the expectation is non-zero.
98
+
86
99
  ### Baseline Evidence Output Summary (Required)
87
100
 
88
101
  For baseline evidence artifacts stored under `evidence/baseline/`, include an output summary in addition to the schema fields above:
@@ -90,6 +90,27 @@
90
90
  # coverage.
91
91
  '.claude/hooks/enforce-discovery-artifact-gate.ps1'
92
92
  '.claude/hooks/validate-discovery-artifact-gate.ps1'
93
+ # Issue #475 added the portable discovery-validation module so both discovery
94
+ # hooks stop invoking a Python interpreter; measured here so the new production
95
+ # module is not excluded from coverage.
96
+ '.claude/lib/discovery-validation/DiscoveryValidation.psm1'
97
+ # Issue #475 added the portable orchestrator-state parity modules so the
98
+ # completion hook validates the checkpoint without a Python interpreter;
99
+ # measured here so the new production modules are not excluded from coverage.
100
+ '.claude/lib/orchestrator-state/OrchestratorStateCheckpointValue.psm1'
101
+ '.claude/lib/orchestrator-state/OrchestratorStateReceipts.psm1'
102
+ '.claude/lib/orchestrator-state/OrchestratorStateModelReceipts.psm1'
103
+ # Issue #475 added the portable Codex routing resolvers so the U6.X and U6.T
104
+ # checkpoint checks resolve deployments and topologies without a Python
105
+ # interpreter; measured here so the new production modules are not excluded.
106
+ '.claude/lib/codex-routing/CodexDeployment.psm1'
107
+ '.claude/lib/codex-routing/CodexTopology.psm1'
108
+ '.claude/lib/orchestrator-state/OrchestratorStateCodexModelReceipts.psm1'
109
+ '.claude/lib/orchestrator-state/OrchestratorStateCodexTopologyReceipts.psm1'
110
+ '.claude/lib/orchestrator-state/OrchestratorStateRoutingMatrix.psm1'
111
+ '.claude/lib/orchestrator-state/OrchestratorStateCompletionChecks.psm1'
112
+ '.claude/lib/orchestrator-state/OrchestratorStateRoutingContract.psm1'
113
+ '.claude/lib/orchestrator-state/OrchestratorStateUnconditional.psm1'
93
114
  # Issue #392 changed the Invoke-PoshQCTest default seams ($EnsureModule -Global
94
115
  # import and the global-session-state $InvokePester trampoline) so the bundled
95
116
  # entry path hosts the Pester run in the global session state; measured here so
@@ -116,14 +137,20 @@
116
137
  '.codex/hooks/enforce-epic-planning-only.ps1'
117
138
  # Issue #447 added the .claude-resident PowerShell blast-radius library, the
118
139
  # two-language mirror of scripts/dev_tools/compute_blast_radius.py and its
119
- # helper modules. The set is split across five files only to satisfy the
140
+ # helper modules. The set is split across six files only to satisfy the
120
141
  # 500-line limit; measured here so no new production module is excluded from
121
142
  # coverage.
143
+ # Issue #489 added BlastRadiusNormalization.psm1, which holds the
144
+ # read-by-mandate exclusion plus Get-ContractIdentifier and
145
+ # Resolve-BlastRadiusModule relocated out of the two modules that had run
146
+ # out of headroom. The relocation moves already-measured lines, so the new
147
+ # file is registered here to keep them in the coverage denominator.
122
148
  '.claude/lib/blast-radius/BlastRadiusExtraction.psm1'
123
149
  '.claude/lib/blast-radius/BlastRadiusGlob.psm1'
124
150
  '.claude/lib/blast-radius/BlastRadiusConfig.psm1'
125
151
  '.claude/lib/blast-radius/BlastRadiusValidation.psm1'
126
152
  '.claude/lib/blast-radius/BlastRadius.psm1'
153
+ '.claude/lib/blast-radius/BlastRadiusNormalization.psm1'
127
154
  # Issue #440 added the two parallel enforcement hooks (the Layer 1 cohort
128
155
  # barrier and the worktree removal gate) and extended the invocation-origin
129
156
  # hook with the parallel-agent family; measured here so no new or changed
@@ -143,6 +170,15 @@
143
170
  # excluded from coverage. The test suite dot-sources the file (guarded body) so
144
171
  # line attribution is valid.
145
172
  '.claude/hooks/enforce-parallel-abandon-gate.ps1'
173
+ # Issue #491 added the Mermaid validation PreToolUse hook and its dependency-free
174
+ # validator library; measured here so the new production files are not excluded from
175
+ # coverage. The hook's test suite dot-sources the file (guarded body) and the library
176
+ # suites import the modules, so line attribution is valid.
177
+ '.claude/hooks/enforce-mermaid-validation.ps1'
178
+ '.claude/lib/mermaid/MermaidGrammar.psm1'
179
+ '.claude/lib/mermaid/MermaidLineScanner.psm1'
180
+ '.claude/lib/mermaid/MermaidMarkdownFences.psm1'
181
+ '.claude/lib/mermaid/MermaidValidation.psm1'
146
182
  )
147
183
  # Optional: don't fail the run on coverage percentage
148
184
  CoveragePercentTarget = 0