@danmoisan/drm-copilot-mcp 1.1.9 → 1.1.11

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 (46) hide show
  1. package/out/mcp-server.js +3526 -1037
  2. package/package.json +1 -1
  3. package/resources/claude-customizations/.claude/agents/parallel-orchestrator.md +15 -2
  4. package/resources/claude-customizations/.claude/agents/parallel-planner.md +3 -0
  5. package/resources/claude-customizations/.claude/hooks/enforce-epic-merge-gate.ps1 +49 -14
  6. package/resources/claude-customizations/.claude/hooks/enforce-epic-worktree-removal-gate.ps1 +52 -3
  7. package/resources/claude-customizations/.claude/hooks/enforce-orchestration-preimplementation-gate.ps1 +7 -1
  8. package/resources/claude-customizations/.claude/hooks/enforce-parallel-abandon-gate.ps1 +103 -6
  9. package/resources/claude-customizations/.claude/hooks/enforce-parallel-worktree-removal-gate.ps1 +58 -3
  10. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill-helpers.ps1 +37 -5
  11. package/resources/claude-customizations/.claude/hooks/enforce-pr-author-skill.epic-base-branch.ps1 +13 -2
  12. package/resources/claude-customizations/.claude/hooks/enforce-promotion-mcp-only.ps1 +35 -7
  13. package/resources/claude-customizations/.claude/hooks/hook-command-invocation.ps1 +483 -0
  14. package/resources/claude-customizations/.claude/hooks/hook-command-scanner.ps1 +483 -0
  15. package/resources/claude-customizations/.claude/hooks/validate-bash.ps1 +254 -5
  16. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadius.psm1 +18 -75
  17. package/resources/claude-customizations/.claude/lib/blast-radius/BlastRadiusConflict.psm1 +290 -0
  18. package/resources/claude-customizations/.claude/lib/cleanup-manifest/CleanupWorktreeManifest.psm1 +415 -0
  19. package/resources/claude-customizations/.claude/lib/project-file-merge/ProjectFileMerge.psm1 +355 -0
  20. package/resources/claude-customizations/.claude/lib/project-file-merge/ProjectFileMergeGrammar.psm1 +318 -0
  21. package/resources/claude-customizations/.claude/lib/project-file-merge/Resolve-MergeableConflict.ps1 +229 -0
  22. package/resources/claude-customizations/.claude/rules/parallel-orchestration.md +66 -2
  23. package/resources/claude-customizations/.claude/skills/cleanup-merged-worktrees/SKILL.md +311 -16
  24. package/resources/claude-customizations/.claude/skills/orchestrate/SKILL.md +42 -0
  25. package/resources/claude-customizations/.claude/skills/parallel-add/SKILL.md +3 -1
  26. package/resources/claude-customizations/.claude/skills/parallel-orchestrate/SKILL.md +36 -2
  27. package/resources/claude-customizations/.claude/skills/parallel-plan/SKILL.md +6 -0
  28. package/resources/claude-customizations/.claude/skills/powershell-orchestration-state-machine/SKILL.md +29 -1
  29. package/resources/claude-customizations/config/blast-radius.json +7 -0
  30. package/resources/claude-customizations/pack-manifests/core.json +7 -0
  31. package/resources/codex-and-agents-customizations/.agents/skills/orchestrate/SKILL.md +41 -0
  32. package/resources/codex-and-agents-customizations/.agents/skills/orchestrator-state/SKILL.md +41 -0
  33. package/resources/codex-and-agents-customizations/.agents/skills/repo-automation-adapter/SKILL.md +26 -0
  34. package/resources/codex-and-agents-customizations/.codex/config.toml +1 -1
  35. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-merge-gate.ps1 +49 -3
  36. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-planning-only.ps1 +57 -12
  37. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-epic-worktree-removal-gate.ps1 +34 -8
  38. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-orchestration-preimplementation-gate.ps1 +6 -1
  39. package/resources/codex-and-agents-customizations/.codex/hooks/enforce-promotion-mcp-only.ps1 +34 -7
  40. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-invocation.ps1 +483 -0
  41. package/resources/codex-and-agents-customizations/.codex/hooks/hook-command-scanner.ps1 +483 -0
  42. package/resources/codex-and-agents-customizations/.codex/hooks/validate-bash.ps1 +130 -2
  43. package/resources/codex-and-agents-customizations/pack-manifests/core.json +6 -1
  44. package/resources/config/orchestration-handoff-registry.json +138 -0
  45. package/resources/config/orchestration-handoff.schema.json +472 -0
  46. package/resources/powershell/PoshQC/settings/pester.runsettings.psd1 +38 -0
@@ -0,0 +1,138 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "version": "1.0.0",
4
+ "lifecycle_ids": [
5
+ "intake",
6
+ "promotion",
7
+ "research",
8
+ "feature_documents",
9
+ "atomic_planning",
10
+ "preflight",
11
+ "atomic_execution",
12
+ "qa",
13
+ "feature_review",
14
+ "pr_creation",
15
+ "ci_verification",
16
+ "completion"
17
+ ],
18
+ "semantic_tools": {
19
+ "drm-copilot.validate_orchestration_artifacts": {
20
+ "operation": "validate_orchestration_artifacts",
21
+ "transport_aliases": [
22
+ "mcp__drm-copilot__validate_orchestration_artifacts",
23
+ "mcp__drm_copilot__validate_orchestration_artifacts"
24
+ ],
25
+ "mutating": false
26
+ },
27
+ "drm-copilot.resolve_orchestration_topology": {
28
+ "operation": "resolve_orchestration_topology",
29
+ "transport_aliases": [
30
+ "mcp__drm-copilot__resolve_orchestration_topology",
31
+ "mcp__drm_copilot__resolve_orchestration_topology"
32
+ ],
33
+ "mutating": false
34
+ },
35
+ "drm-copilot.resolve_provider_routing": {
36
+ "operation": "resolve_provider_routing",
37
+ "transport_aliases": [
38
+ "mcp__drm-copilot__resolve_provider_routing",
39
+ "mcp__drm_copilot__resolve_provider_routing"
40
+ ],
41
+ "mutating": false
42
+ },
43
+ "drm-copilot.transition_prepared_orchestration": {
44
+ "operation": "transition_prepared_orchestration",
45
+ "transport_aliases": [
46
+ "mcp__drm-copilot__transition_prepared_orchestration",
47
+ "mcp__drm_copilot__transition_prepared_orchestration"
48
+ ],
49
+ "mutating": true
50
+ }
51
+ },
52
+ "provider_adapters": {
53
+ "claude": {
54
+ "checkpoint_expression": "claude.orchestrator-state",
55
+ "source_validator": "claude-source-v1",
56
+ "destination_projector": "portable-to-claude-v1",
57
+ "routing_policy": "model_policy"
58
+ },
59
+ "codex": {
60
+ "checkpoint_expression": "codex.orchestrator-state",
61
+ "source_validator": "codex-source-v1",
62
+ "destination_projector": "portable-to-codex-v1",
63
+ "routing_policy": "codex_model_policy",
64
+ "topology_policy": "codex_topology_policy"
65
+ }
66
+ },
67
+ "transitions": {
68
+ "migrate_legacy": {
69
+ "from": ["legacy_v1"],
70
+ "to": "preparation_complete",
71
+ "required_capabilities": ["handoff-schema:2", "plan-contract:atomic-plan-v1"]
72
+ },
73
+ "prepared_to_atomic_execution": {
74
+ "from": ["preparation_complete"],
75
+ "to": "validated",
76
+ "required_capabilities": [
77
+ "handoff-schema:2",
78
+ "transition:prepared_to_atomic_execution",
79
+ "workspace-explicit-validation"
80
+ ]
81
+ },
82
+ "materialize_destination": {
83
+ "from": ["validated"],
84
+ "to": "materialized",
85
+ "required_capabilities": [
86
+ "atomic-checkpoint-materialization",
87
+ "semantic-tool:drm-copilot.transition_prepared_orchestration"
88
+ ]
89
+ },
90
+ "atomic_execution": {
91
+ "from": ["materialized"],
92
+ "to": "atomic_execution",
93
+ "required_capabilities": ["workspace-explicit-routing"]
94
+ },
95
+ "return_to_scheduler": {
96
+ "from": ["atomic_execution", "qa", "feature_review", "completion"],
97
+ "to": "scheduler_result",
98
+ "required_capabilities": ["scheduler-return:portable_child_result-v1"]
99
+ }
100
+ },
101
+ "capabilities": {
102
+ "supported_vocabularies": ["portable-orchestration-handoff-core-v1"],
103
+ "supported": [
104
+ "handoff-schema:2",
105
+ "transition:prepared_to_atomic_execution",
106
+ "plan-contract:atomic-plan-v1",
107
+ "semantic-tool:drm-copilot.validate_orchestration_artifacts",
108
+ "semantic-tool:drm-copilot.resolve_orchestration_topology",
109
+ "semantic-tool:drm-copilot.resolve_provider_routing",
110
+ "semantic-tool:drm-copilot.transition_prepared_orchestration",
111
+ "workspace-explicit-validation",
112
+ "workspace-explicit-routing",
113
+ "atomic-checkpoint-materialization",
114
+ "scheduler-context:ordinary",
115
+ "scheduler-context:parallel-child",
116
+ "scheduler-context:epic-child",
117
+ "scheduler-return:portable_child_result-v1"
118
+ ]
119
+ },
120
+ "failure_precedence": [
121
+ "HANDOFF_UNSUPPORTED_VERSION",
122
+ "HANDOFF_SOURCE_HASH_MISMATCH",
123
+ "HANDOFF_HISTORY_INVALID",
124
+ "HANDOFF_REPOSITORY_MISMATCH",
125
+ "HANDOFF_WORKSPACE_MISMATCH",
126
+ "HANDOFF_ISSUE_FEATURE_MISMATCH",
127
+ "HANDOFF_BRANCH_LINEAGE_MISMATCH",
128
+ "HANDOFF_PLAN_PATH_INVALID",
129
+ "HANDOFF_PLAN_HASH_MISMATCH",
130
+ "HANDOFF_SCHEDULER_BINDING_MISMATCH",
131
+ "HANDOFF_TRANSITION_NOT_ALLOWED",
132
+ "HANDOFF_CAPABILITY_UNAVAILABLE",
133
+ "HANDOFF_VALIDATOR_UNAVAILABLE",
134
+ "HANDOFF_TOPOLOGY_RESOLVER_UNAVAILABLE",
135
+ "HANDOFF_PROVIDER_ROUTING_UNAVAILABLE",
136
+ "HANDOFF_DIRTY_WORKTREE"
137
+ ]
138
+ }
@@ -0,0 +1,472 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://drm-copilot.dev/schemas/orchestration-handoff/2.0.0/schema.json",
4
+ "title": "Portable prepared orchestration handoff",
5
+ "description": "Provider-neutral identity, provenance, lifecycle, plan, capability, scheduler, and history contract for a prepared orchestration handoff.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["$schema", "schema_version", "kind", "handoff_id", "identity", "binding", "source", "destination", "plan", "lifecycle", "capabilities", "scheduler_context", "handoff_history"],
9
+ "properties": {
10
+ "$schema": {
11
+ "const": "https://drm-copilot.dev/schemas/orchestration-handoff/2.0.0/schema.json"
12
+ },
13
+ "schema_version": {
14
+ "$ref": "#/$defs/schemaVersion"
15
+ },
16
+ "kind": {
17
+ "const": "portable_orchestration_handoff"
18
+ },
19
+ "handoff_id": {
20
+ "type": "string",
21
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{2,127}$"
22
+ },
23
+ "identity": {
24
+ "$ref": "#/$defs/identity"
25
+ },
26
+ "binding": {
27
+ "$ref": "#/$defs/binding"
28
+ },
29
+ "source": {
30
+ "$ref": "#/$defs/source"
31
+ },
32
+ "destination": {
33
+ "$ref": "#/$defs/destination"
34
+ },
35
+ "plan": {
36
+ "$ref": "#/$defs/plan"
37
+ },
38
+ "lifecycle": {
39
+ "$ref": "#/$defs/lifecycle"
40
+ },
41
+ "capabilities": {
42
+ "$ref": "#/$defs/capabilities"
43
+ },
44
+ "scheduler_context": {
45
+ "$ref": "#/$defs/schedulerContext"
46
+ },
47
+ "handoff_history": {
48
+ "type": "array",
49
+ "minItems": 1,
50
+ "items": {
51
+ "$ref": "#/$defs/historyEntry"
52
+ }
53
+ }
54
+ },
55
+ "$defs": {
56
+ "schemaVersion": {
57
+ "type": "string",
58
+ "pattern": "^2\\.[0-9]+\\.[0-9]+$"
59
+ },
60
+ "sha256": {
61
+ "type": "string",
62
+ "pattern": "^[a-f0-9]{64}$"
63
+ },
64
+ "gitSha": {
65
+ "type": "string",
66
+ "pattern": "^[a-f0-9]{40}$"
67
+ },
68
+ "provider": {
69
+ "type": "string",
70
+ "enum": ["claude", "codex"]
71
+ },
72
+ "repositoryRelativePath": {
73
+ "type": "string",
74
+ "minLength": 1,
75
+ "pattern": "^(?!/)(?![A-Za-z]:)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\).+$"
76
+ },
77
+ "identity": {
78
+ "type": "object",
79
+ "additionalProperties": false,
80
+ "required": ["objective_id", "issue_number", "feature_folder", "work_mode"],
81
+ "properties": {
82
+ "objective_id": {
83
+ "type": "string",
84
+ "minLength": 1
85
+ },
86
+ "issue_number": {
87
+ "type": "integer",
88
+ "minimum": 1
89
+ },
90
+ "feature_folder": {
91
+ "$ref": "#/$defs/repositoryRelativePath"
92
+ },
93
+ "work_mode": {
94
+ "type": "string",
95
+ "enum": ["minor-audit", "full-feature", "full-bug"]
96
+ }
97
+ }
98
+ },
99
+ "binding": {
100
+ "type": "object",
101
+ "additionalProperties": false,
102
+ "required": ["repository_id", "workspace_root", "branch", "source_head_sha", "allowed_head_relationship"],
103
+ "properties": {
104
+ "repository_id": {
105
+ "type": "string",
106
+ "minLength": 1
107
+ },
108
+ "workspace_root": {
109
+ "type": "string",
110
+ "minLength": 1
111
+ },
112
+ "branch": {
113
+ "type": "string",
114
+ "minLength": 1
115
+ },
116
+ "source_head_sha": {
117
+ "$ref": "#/$defs/gitSha"
118
+ },
119
+ "allowed_head_relationship": {
120
+ "type": "string",
121
+ "enum": ["equal", "equal_or_descendant"]
122
+ }
123
+ }
124
+ },
125
+ "source": {
126
+ "type": "object",
127
+ "additionalProperties": false,
128
+ "required": ["provider", "checkpoint", "expression"],
129
+ "properties": {
130
+ "provider": {
131
+ "$ref": "#/$defs/provider"
132
+ },
133
+ "checkpoint": {
134
+ "type": "object",
135
+ "additionalProperties": false,
136
+ "required": ["path", "sha256", "archive_path"],
137
+ "properties": {
138
+ "path": {
139
+ "$ref": "#/$defs/repositoryRelativePath"
140
+ },
141
+ "sha256": {
142
+ "$ref": "#/$defs/sha256"
143
+ },
144
+ "archive_path": {
145
+ "type": "string",
146
+ "pattern": "^artifacts/orchestration/handoffs/sources/sha256/[a-f0-9]{64}\\.json$"
147
+ }
148
+ }
149
+ },
150
+ "expression": {
151
+ "type": "object",
152
+ "additionalProperties": false,
153
+ "required": ["schema_id", "schema_version", "historical_receipts"],
154
+ "properties": {
155
+ "schema_id": {
156
+ "type": "string",
157
+ "minLength": 1
158
+ },
159
+ "schema_version": {
160
+ "type": "string",
161
+ "minLength": 1
162
+ },
163
+ "historical_receipts": {
164
+ "type": "object",
165
+ "additionalProperties": false,
166
+ "required": ["mode", "references"],
167
+ "properties": {
168
+ "mode": {
169
+ "const": "opaque"
170
+ },
171
+ "references": {
172
+ "type": "array",
173
+ "items": {
174
+ "type": "object",
175
+ "additionalProperties": false,
176
+ "required": ["path", "sha256"],
177
+ "properties": {
178
+ "path": {
179
+ "$ref": "#/$defs/repositoryRelativePath"
180
+ },
181
+ "sha256": {
182
+ "$ref": "#/$defs/sha256"
183
+ }
184
+ }
185
+ }
186
+ }
187
+ }
188
+ }
189
+ }
190
+ }
191
+ }
192
+ },
193
+ "destination": {
194
+ "type": "object",
195
+ "additionalProperties": false,
196
+ "required": ["provider", "checkpoint_path"],
197
+ "properties": {
198
+ "provider": {
199
+ "$ref": "#/$defs/provider"
200
+ },
201
+ "checkpoint_path": {
202
+ "const": "artifacts/orchestration/orchestrator-state.json"
203
+ }
204
+ }
205
+ },
206
+ "plan": {
207
+ "type": "object",
208
+ "additionalProperties": false,
209
+ "required": ["path", "sha256", "contract_version"],
210
+ "properties": {
211
+ "path": {
212
+ "$ref": "#/$defs/repositoryRelativePath"
213
+ },
214
+ "sha256": {
215
+ "$ref": "#/$defs/sha256"
216
+ },
217
+ "contract_version": {
218
+ "type": "string",
219
+ "pattern": "^atomic-plan-v[0-9]+$"
220
+ }
221
+ }
222
+ },
223
+ "phase": {
224
+ "type": "string",
225
+ "enum": [
226
+ "intake",
227
+ "promotion",
228
+ "research",
229
+ "feature_documents",
230
+ "atomic_planning",
231
+ "preflight",
232
+ "atomic_execution",
233
+ "qa",
234
+ "feature_review",
235
+ "pr_creation",
236
+ "ci_verification",
237
+ "completion"
238
+ ]
239
+ },
240
+ "lifecycle": {
241
+ "type": "object",
242
+ "additionalProperties": false,
243
+ "required": [
244
+ "logical_complexity",
245
+ "route_intent",
246
+ "completed_phases",
247
+ "next_transition",
248
+ "replay_policy"
249
+ ],
250
+ "properties": {
251
+ "logical_complexity": {
252
+ "type": "string",
253
+ "enum": [
254
+ "C1",
255
+ "C2",
256
+ "C3",
257
+ "C4"
258
+ ]
259
+ },
260
+ "route_intent": {
261
+ "type": "string",
262
+ "enum": [
263
+ "prepared_to_ordinary_execution",
264
+ "prepared_child_to_ordinary_execution"
265
+ ]
266
+ },
267
+ "completed_phases": {
268
+ "type": "array",
269
+ "uniqueItems": true,
270
+ "items": {
271
+ "$ref": "#/$defs/phase"
272
+ }
273
+ },
274
+ "next_transition": {
275
+ "$ref": "#/$defs/phase"
276
+ },
277
+ "replay_policy": {
278
+ "const": "forbid_completed_phases"
279
+ }
280
+ }
281
+ },
282
+ "capabilities": {
283
+ "type": "object",
284
+ "additionalProperties": false,
285
+ "required": [
286
+ "vocabularies",
287
+ "required"
288
+ ],
289
+ "properties": {
290
+ "vocabularies": {
291
+ "type": "array",
292
+ "minItems": 1,
293
+ "uniqueItems": true,
294
+ "items": {
295
+ "type": "string",
296
+ "minLength": 1
297
+ }
298
+ },
299
+ "required": {
300
+ "type": "array",
301
+ "minItems": 1,
302
+ "uniqueItems": true,
303
+ "items": {
304
+ "type": "string",
305
+ "minLength": 1
306
+ }
307
+ }
308
+ }
309
+ },
310
+ "schedulerContext": {
311
+ "oneOf": [
312
+ {
313
+ "type": "object",
314
+ "additionalProperties": false,
315
+ "required": [
316
+ "kind"
317
+ ],
318
+ "properties": {
319
+ "kind": {
320
+ "const": "ordinary"
321
+ }
322
+ }
323
+ },
324
+ {
325
+ "$ref": "#/$defs/scheduledChildContext"
326
+ }
327
+ ]
328
+ },
329
+ "scheduledChildContext": {
330
+ "type": "object",
331
+ "additionalProperties": false,
332
+ "required": [
333
+ "kind",
334
+ "run_id",
335
+ "item_id",
336
+ "kickoff_or_manifest_path",
337
+ "kickoff_or_manifest_sha256",
338
+ "parent_checkpoint_path",
339
+ "parent_checkpoint_sha256",
340
+ "cohort_or_wave",
341
+ "scheduler_owner",
342
+ "child_execution_owner",
343
+ "return_contract"
344
+ ],
345
+ "properties": {
346
+ "kind": {
347
+ "type": "string",
348
+ "enum": [
349
+ "parallel",
350
+ "epic"
351
+ ]
352
+ },
353
+ "run_id": {
354
+ "type": "string",
355
+ "minLength": 1
356
+ },
357
+ "item_id": {
358
+ "type": "string",
359
+ "minLength": 1
360
+ },
361
+ "kickoff_or_manifest_path": {
362
+ "$ref": "#/$defs/repositoryRelativePath"
363
+ },
364
+ "kickoff_or_manifest_sha256": {
365
+ "$ref": "#/$defs/sha256"
366
+ },
367
+ "parent_checkpoint_path": {
368
+ "$ref": "#/$defs/repositoryRelativePath"
369
+ },
370
+ "parent_checkpoint_sha256": {
371
+ "$ref": "#/$defs/sha256"
372
+ },
373
+ "cohort_or_wave": {
374
+ "type": [
375
+ "string",
376
+ "integer"
377
+ ]
378
+ },
379
+ "scheduler_owner": {
380
+ "type": "string",
381
+ "enum": [
382
+ "parallel_orchestrator",
383
+ "epic_orchestrator"
384
+ ]
385
+ },
386
+ "child_execution_owner": {
387
+ "const": "ordinary_orchestrator"
388
+ },
389
+ "return_contract": {
390
+ "const": "portable_child_result-v1"
391
+ }
392
+ }
393
+ },
394
+ "historyEntry": {
395
+ "type": "object",
396
+ "additionalProperties": false,
397
+ "required": [
398
+ "sequence",
399
+ "from_provider",
400
+ "to_provider",
401
+ "source_checkpoint_sha256",
402
+ "envelope_sha256",
403
+ "requested_at",
404
+ "previous_entry_sha256",
405
+ "entry_sha256",
406
+ "status",
407
+ "adapter_id",
408
+ "adapter_version"
409
+ ],
410
+ "properties": {
411
+ "sequence": {
412
+ "type": "integer",
413
+ "minimum": 1
414
+ },
415
+ "from_provider": {
416
+ "$ref": "#/$defs/provider"
417
+ },
418
+ "to_provider": {
419
+ "$ref": "#/$defs/provider"
420
+ },
421
+ "source_checkpoint_sha256": {
422
+ "$ref": "#/$defs/sha256"
423
+ },
424
+ "envelope_sha256": {
425
+ "$ref": "#/$defs/sha256"
426
+ },
427
+ "target_checkpoint_sha256": {
428
+ "$ref": "#/$defs/sha256"
429
+ },
430
+ "requested_at": {
431
+ "type": "string",
432
+ "format": "date-time"
433
+ },
434
+ "previous_entry_sha256": {
435
+ "oneOf": [
436
+ {
437
+ "$ref": "#/$defs/sha256"
438
+ },
439
+ {
440
+ "type": "null"
441
+ }
442
+ ]
443
+ },
444
+ "entry_sha256": {
445
+ "$ref": "#/$defs/sha256"
446
+ },
447
+ "status": {
448
+ "type": "string",
449
+ "enum": [
450
+ "requested",
451
+ "validated",
452
+ "materialized",
453
+ "blocked",
454
+ "returned"
455
+ ]
456
+ },
457
+ "adapter_id": {
458
+ "type": "string",
459
+ "minLength": 1
460
+ },
461
+ "adapter_version": {
462
+ "type": "string",
463
+ "minLength": 1
464
+ },
465
+ "failure_code": {
466
+ "type": "string",
467
+ "pattern": "^HANDOFF_[A-Z0-9_]+$"
468
+ }
469
+ }
470
+ }
471
+ }
472
+ }
@@ -167,6 +167,19 @@
167
167
  '.claude/lib/blast-radius/BlastRadius.psm1'
168
168
  '.claude/lib/blast-radius/BlastRadiusNormalization.psm1'
169
169
  '.claude/lib/blast-radius/BlastRadiusTokenShape.psm1'
170
+ # Issue #643 added the eighth file below. It holds the mechanically-mergeable
171
+ # path exclusion plus the two overlap helpers relocated out of
172
+ # BlastRadius.psm1. CodeCoverage.Path is an explicit per-file allow-list, so
173
+ # the new module must be named here to be measured.
174
+ '.claude/lib/blast-radius/BlastRadiusConflict.psm1'
175
+ # Issue #643 also added the merge library below: the line grammar, the
176
+ # keyed-union merge, and the entry script. The entry script is measured
177
+ # like the two modules because its Pester suite dot-sources it behind a
178
+ # guarded entry-point body, so every line it attributes was executed by a
179
+ # test rather than by a run of the step itself.
180
+ '.claude/lib/project-file-merge/ProjectFileMergeGrammar.psm1'
181
+ '.claude/lib/project-file-merge/ProjectFileMerge.psm1'
182
+ '.claude/lib/project-file-merge/Resolve-MergeableConflict.ps1'
170
183
  # Issue #440 added the two parallel enforcement hooks (the Layer 1 cohort
171
184
  # barrier and the worktree removal gate) and extended the invocation-origin
172
185
  # hook with the parallel-agent family; measured here so no new or changed
@@ -195,6 +208,12 @@
195
208
  '.claude/lib/mermaid/MermaidLineScanner.psm1'
196
209
  '.claude/lib/mermaid/MermaidMarkdownFences.psm1'
197
210
  '.claude/lib/mermaid/MermaidValidation.psm1'
211
+ # Issue #635 added the sanctioned-removal manifest module read by both worktree
212
+ # removal gate hooks. CodeCoverage.Path is an explicit per-file allow-list, so an
213
+ # unregistered production file would sit outside the coverage denominator, which
214
+ # the Coverage Exclusion Policy forbids. Registered here beside the other
215
+ # .claude/lib modules.
216
+ '.claude/lib/cleanup-manifest/CleanupWorktreeManifest.psm1'
198
217
  # Issue #501 fixed the PreToolUse payload transport and shape across the whole
199
218
  # hook surface. CodeCoverage.Path is an explicit per-file allow-list, so the new
200
219
  # shared payload module, the six hooks that were changed but never registered,
@@ -242,6 +261,25 @@
242
261
  'scripts/dev-tools/Invoke-ReleaseReconciliation.ps1'
243
262
  # Issue #552 validates start-time routing attestation coverage for this hook.
244
263
  '.codex/hooks/record-subagent-routing-attestation.ps1'
264
+ # Issue #545 adds the shared command parser as two dot-sourced .ps1 siblings, one
265
+ # pair per runtime. CodeCoverage.Path is an explicit per-file allow-list, so each
266
+ # new production file is registered here; without it the file would sit outside
267
+ # the coverage denominator, which the Coverage Exclusion Policy forbids. Both
268
+ # files define functions only and are dot-sourced by their Pester suites, so line
269
+ # attribution is valid. No extensions/drm-copilot/resources/ path is added,
270
+ # because the list holds zero entries under that prefix and every bundle mirror is
271
+ # guarded by byte identity instead.
272
+ '.claude/hooks/hook-command-scanner.ps1'
273
+ '.claude/hooks/hook-command-invocation.ps1'
274
+ '.codex/hooks/hook-command-scanner.ps1'
275
+ '.codex/hooks/hook-command-invocation.ps1'
276
+ # Issue #545 also modifies four Codex canonical hooks that the [P0-T9] baseline
277
+ # recorded as absent from this list. They are registered here so the files this
278
+ # change edits are all inside the coverage denominator.
279
+ '.codex/hooks/enforce-promotion-mcp-only.ps1'
280
+ '.codex/hooks/enforce-epic-merge-gate.ps1'
281
+ '.codex/hooks/enforce-epic-worktree-removal-gate.ps1'
282
+ '.codex/hooks/validate-bash.ps1'
245
283
  )
246
284
  # Optional: don't fail the run on coverage percentage
247
285
  CoveragePercentTarget = 0