@polymorphism-tech/morph-spec 2.3.0 → 3.0.0
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.
- package/CLAUDE.md +446 -1730
- package/README.md +515 -516
- package/bin/morph-spec.js +366 -294
- package/bin/task-manager.js +429 -368
- package/bin/validate.js +369 -268
- package/content/.claude/commands/morph-apply.md +221 -158
- package/content/.claude/commands/morph-deploy.md +529 -0
- package/content/.claude/commands/morph-preflight.md +227 -0
- package/content/.claude/commands/morph-proposal.md +122 -101
- package/content/.claude/commands/morph-status.md +86 -86
- package/content/.claude/commands/morph-troubleshoot.md +122 -0
- package/content/.claude/skills/infra/azure-deploy-specialist.md +699 -0
- package/content/.claude/skills/level-0-meta/README.md +7 -0
- package/content/.claude/skills/level-0-meta/code-review.md +226 -0
- package/content/.claude/skills/level-0-meta/morph-checklist.md +117 -0
- package/content/.claude/skills/level-0-meta/simulation-checklist.md +77 -0
- package/content/.claude/skills/level-1-workflows/README.md +7 -0
- package/content/.claude/skills/level-1-workflows/morph-replicate.md +213 -0
- package/content/.claude/{commands/morph-clarify.md → skills/level-1-workflows/phase-clarify.md} +131 -184
- package/content/.claude/{commands/morph-design.md → skills/level-1-workflows/phase-design.md} +213 -275
- package/content/.claude/skills/level-1-workflows/phase-setup.md +106 -0
- package/content/.claude/skills/level-1-workflows/phase-tasks.md +164 -0
- package/content/.claude/{commands/morph-uiux.md → skills/level-1-workflows/phase-uiux.md} +169 -211
- package/content/.claude/skills/level-2-domains/README.md +14 -0
- package/content/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +192 -0
- package/content/.claude/skills/{specialists → level-2-domains/architecture}/po-pm-advisor.md +197 -197
- package/content/.claude/skills/level-2-domains/architecture/standards-architect.md +156 -0
- package/content/.claude/skills/level-2-domains/backend/dotnet-senior.md +287 -0
- package/content/.claude/skills/level-2-domains/backend/ef-modeler.md +113 -0
- package/content/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +126 -0
- package/content/.claude/skills/level-2-domains/backend/ms-agent-expert.md +109 -0
- package/content/.claude/skills/level-2-domains/frontend/blazor-builder.md +210 -0
- package/content/.claude/skills/level-2-domains/frontend/nextjs-expert.md +154 -0
- package/content/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +191 -0
- package/content/.claude/skills/{specialists → level-2-domains/infrastructure}/azure-architect.md +142 -142
- package/content/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +126 -0
- package/content/.claude/skills/level-2-domains/infrastructure/container-specialist.md +131 -0
- package/content/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +119 -0
- package/content/.claude/skills/level-2-domains/integrations/asaas-financial.md +130 -0
- package/content/.claude/skills/level-2-domains/integrations/azure-identity.md +142 -0
- package/content/.claude/skills/level-2-domains/integrations/clerk-auth.md +108 -0
- package/content/.claude/skills/level-2-domains/integrations/resend-email.md +119 -0
- package/content/.claude/skills/level-2-domains/quality/code-analyzer.md +235 -0
- package/content/.claude/skills/level-2-domains/quality/testing-specialist.md +126 -0
- package/content/.claude/skills/level-3-technologies/README.md +7 -0
- package/content/.claude/skills/level-4-patterns/README.md +7 -0
- package/content/.claude/skills/specialists/prompt-engineer.md +189 -0
- package/content/.claude/skills/specialists/seo-growth-hacker.md +320 -0
- package/content/.morph/config/agents.json +762 -242
- package/content/.morph/config/config.template.json +122 -108
- package/content/.morph/docs/workflows/design-impl.md +37 -0
- package/content/.morph/docs/workflows/enforcement-pipeline.md +668 -0
- package/content/.morph/docs/workflows/fast-track.md +29 -0
- package/content/.morph/docs/workflows/full-morph.md +76 -0
- package/content/.morph/docs/workflows/standard.md +44 -0
- package/content/.morph/docs/workflows/ui-refresh.md +39 -0
- package/content/.morph/examples/scheduled-reports/decisions.md +158 -0
- package/content/.morph/examples/scheduled-reports/proposal.md +95 -0
- package/content/.morph/examples/scheduled-reports/spec.md +267 -0
- package/content/.morph/hooks/README.md +348 -239
- package/content/.morph/hooks/pre-commit-agents.sh +24 -24
- package/content/.morph/hooks/task-completed.js +73 -0
- package/content/.morph/hooks/teammate-idle.js +68 -0
- package/content/.morph/schemas/tasks.schema.json +220 -0
- package/content/.morph/standards/agent-framework-blazor-ui.md +359 -0
- package/content/.morph/standards/agent-framework-production.md +410 -0
- package/content/.morph/standards/agent-framework-setup.md +413 -453
- package/content/.morph/standards/agent-framework-workflows.md +349 -0
- package/content/.morph/standards/agent-teams-workflow.md +474 -0
- package/content/.morph/standards/architecture.md +325 -325
- package/content/.morph/standards/azure.md +605 -379
- package/content/.morph/standards/dotnet10-migration.md +520 -494
- package/content/.morph/templates/CONTEXT-FEATURE.md +276 -0
- package/content/.morph/templates/CONTEXT.md +170 -0
- package/content/.morph/templates/agent.cs +163 -172
- package/content/.morph/templates/clarify-questions.md +159 -0
- package/content/.morph/templates/contracts/Commands.cs +74 -0
- package/content/.morph/templates/contracts/Entities.cs +25 -0
- package/content/.morph/templates/contracts/Queries.cs +74 -0
- package/content/.morph/templates/contracts/README.md +74 -0
- package/content/.morph/templates/decisions.md +123 -106
- package/content/.morph/templates/infra/azure-pipelines-deploy.yml +480 -0
- package/content/.morph/templates/infra/deploy-checklist.md +426 -0
- package/content/.morph/templates/proposal.md +141 -155
- package/content/.morph/templates/recap.md +94 -105
- package/content/.morph/templates/simulation.md +353 -0
- package/content/.morph/templates/spec.md +149 -148
- package/content/.morph/templates/state.template.json +222 -222
- package/content/.morph/templates/tasks.md +257 -235
- package/content/.morph/templates/ui-components.md +362 -276
- package/content/CLAUDE.md +150 -442
- package/detectors/structure-detector.js +245 -250
- package/docs/README.md +144 -149
- package/docs/getting-started.md +301 -302
- package/docs/installation.md +361 -361
- package/docs/validation-checklist.md +265 -266
- package/package.json +80 -80
- package/src/commands/advance-phase.js +266 -0
- package/src/commands/analyze-blazor-concurrency.js +193 -0
- package/src/commands/deploy.js +780 -0
- package/src/commands/detect-agents.js +167 -0
- package/src/commands/doctor.js +356 -280
- package/src/commands/generate-context.js +40 -0
- package/src/commands/init.js +258 -245
- package/src/commands/lint-fluent.js +352 -0
- package/src/commands/rollback-phase.js +185 -0
- package/src/commands/session-summary.js +291 -0
- package/src/commands/task.js +78 -75
- package/src/commands/troubleshoot.js +222 -0
- package/src/commands/update.js +192 -159
- package/src/commands/validate-blazor-state.js +210 -0
- package/src/commands/validate-blazor.js +156 -0
- package/src/commands/validate-css.js +84 -0
- package/src/commands/validate-phase.js +221 -0
- package/src/lib/blazor-concurrency-analyzer.js +288 -0
- package/src/lib/blazor-state-validator.js +291 -0
- package/src/lib/blazor-validator.js +374 -0
- package/src/lib/complexity-analyzer.js +441 -292
- package/src/lib/context-generator.js +513 -0
- package/src/lib/continuous-validator.js +421 -440
- package/src/lib/css-validator.js +352 -0
- package/src/lib/decision-constraint-loader.js +109 -0
- package/src/lib/design-system-detector.js +187 -0
- package/src/lib/design-system-scaffolder.js +299 -0
- package/src/lib/hook-executor.js +256 -0
- package/src/lib/recap-generator.js +205 -0
- package/src/lib/spec-validator.js +258 -0
- package/src/lib/standards-context-injector.js +287 -0
- package/src/lib/state-manager.js +397 -340
- package/src/lib/team-orchestrator.js +322 -0
- package/src/lib/troubleshoot-grep.js +194 -0
- package/src/lib/troubleshoot-index.js +144 -0
- package/src/lib/validation-runner.js +283 -0
- package/src/lib/validators/contract-compliance-validator.js +273 -0
- package/src/lib/validators/design-system-validator.js +231 -0
- package/src/utils/file-copier.js +187 -139
- package/content/.claude/commands/morph-costs.md +0 -206
- package/content/.claude/commands/morph-setup.md +0 -100
- package/content/.claude/commands/morph-tasks.md +0 -319
- package/content/.claude/skills/infra/bicep-architect.md +0 -419
- package/content/.claude/skills/infra/container-specialist.md +0 -437
- package/content/.claude/skills/infra/devops-engineer.md +0 -405
- package/content/.claude/skills/integrations/asaas-financial.md +0 -333
- package/content/.claude/skills/integrations/azure-identity.md +0 -309
- package/content/.claude/skills/integrations/clerk-auth.md +0 -290
- package/content/.claude/skills/specialists/ai-system-architect.md +0 -604
- package/content/.claude/skills/specialists/cost-guardian.md +0 -110
- package/content/.claude/skills/specialists/ef-modeler.md +0 -211
- package/content/.claude/skills/specialists/hangfire-orchestrator.md +0 -255
- package/content/.claude/skills/specialists/ms-agent-expert.md +0 -263
- package/content/.claude/skills/specialists/standards-architect.md +0 -78
- package/content/.claude/skills/specialists/ui-ux-designer.md +0 -1100
- package/content/.claude/skills/stacks/dotnet-blazor.md +0 -606
- package/content/.claude/skills/stacks/dotnet-nextjs.md +0 -402
- package/content/.claude/skills/stacks/shopify.md +0 -445
- package/content/.morph/config/azure-pricing.json +0 -70
- package/content/.morph/config/azure-pricing.schema.json +0 -50
- package/content/.morph/hooks/pre-commit-costs.sh +0 -91
- package/docs/api/cost-calculator.js.html +0 -513
- package/docs/api/design-system-generator.js.html +0 -382
- package/docs/api/global.html +0 -5263
- package/docs/api/index.html +0 -96
- package/docs/api/state-manager.js.html +0 -423
- package/src/commands/cost.js +0 -181
- package/src/commands/update-pricing.js +0 -206
- package/src/lib/cost-calculator.js +0 -429
|
@@ -1,239 +1,348 @@
|
|
|
1
|
-
# MORPH-SPEC Git Hooks
|
|
2
|
-
|
|
3
|
-
Pre-commit hooks for automatic validation before committing.
|
|
4
|
-
|
|
5
|
-
## Available Hooks
|
|
6
|
-
|
|
7
|
-
| Hook | Description | Action |
|
|
8
|
-
|------|-------------|--------|
|
|
9
|
-
| `pre-commit-agents.sh` | Validates agents.json with JSON Schema | ❌ Blocks commit |
|
|
10
|
-
| `pre-commit-
|
|
11
|
-
| `pre-commit-
|
|
12
|
-
| `pre-commit-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
```bash
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
1
|
+
# MORPH-SPEC Git Hooks
|
|
2
|
+
|
|
3
|
+
Pre-commit hooks for automatic validation before committing.
|
|
4
|
+
|
|
5
|
+
## Available Hooks
|
|
6
|
+
|
|
7
|
+
| Hook | Description | Action |
|
|
8
|
+
|------|-------------|--------|
|
|
9
|
+
| `pre-commit-agents.sh` | Validates agents.json with JSON Schema | ❌ Blocks commit |
|
|
10
|
+
| `pre-commit-specs.sh` | Validates spec.md has required sections | ❌ Blocks commit |
|
|
11
|
+
| `pre-commit-tests.sh` | Checks if new code has tests | ⚠️ Warns only |
|
|
12
|
+
| `pre-commit-all.sh` | Runs all hooks in sequence | ❌ Blocks if any fail |
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
### Option 1: Install Individual Hooks
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Symlink all hooks at once
|
|
20
|
+
ln -s ../../content/.morph/hooks/pre-commit-all.sh .git/hooks/pre-commit
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Option 2: Copy Hooks
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Copy master hook
|
|
27
|
+
cp content/.morph/hooks/pre-commit-all.sh .git/hooks/pre-commit
|
|
28
|
+
chmod +x .git/hooks/pre-commit
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Option 3: Use Existing Hooks
|
|
32
|
+
|
|
33
|
+
If you already have `.git/hooks/pre-commit`, add this to the end:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Run MORPH-SPEC validations
|
|
37
|
+
bash content/.morph/hooks/pre-commit-all.sh || exit 1
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## What Each Hook Does
|
|
41
|
+
|
|
42
|
+
### pre-commit-agents.sh
|
|
43
|
+
|
|
44
|
+
**Validates:** `agents.json` configuration
|
|
45
|
+
|
|
46
|
+
**Checks:**
|
|
47
|
+
- JSON Schema compliance
|
|
48
|
+
- Required fields (id, name, emoji, type, etc.)
|
|
49
|
+
- Keyword patterns (alphanumeric + hyphens/underscores)
|
|
50
|
+
- No duplicate keywords
|
|
51
|
+
- autoActivation for specialist agents
|
|
52
|
+
|
|
53
|
+
**Example Output:**
|
|
54
|
+
```
|
|
55
|
+
🤖 Validating agent configuration...
|
|
56
|
+
Detected changes to agents.json
|
|
57
|
+
|
|
58
|
+
=== MORPH-SPEC Agent Validator ===
|
|
59
|
+
|
|
60
|
+
Version: 1.0.0
|
|
61
|
+
Core Agents: 6
|
|
62
|
+
Specialist Agents: 4
|
|
63
|
+
|
|
64
|
+
✓ Validation PASSED
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### pre-commit-specs.sh
|
|
68
|
+
|
|
69
|
+
**Validates:** `spec.md` files have required sections
|
|
70
|
+
|
|
71
|
+
**Checks:**
|
|
72
|
+
- `## 📋 Metadata`
|
|
73
|
+
- `## 🎯 Overview`
|
|
74
|
+
- `## 🏗️ Technical Design`
|
|
75
|
+
- `## ✅ Acceptance Criteria`
|
|
76
|
+
- Warns if no user stories found
|
|
77
|
+
|
|
78
|
+
**Example Output:**
|
|
79
|
+
```
|
|
80
|
+
🔍 Validating spec files...
|
|
81
|
+
Checking: .morph/outputs/my-feature/spec.md
|
|
82
|
+
✓ All required sections found
|
|
83
|
+
✓ All spec files are valid
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### pre-commit-tests.sh
|
|
87
|
+
|
|
88
|
+
**Validates:** New C# code has corresponding tests
|
|
89
|
+
|
|
90
|
+
**Checks:**
|
|
91
|
+
- Finds modified `.cs` files (excluding tests)
|
|
92
|
+
- Looks for `*Tests.cs` or `Test*.cs`
|
|
93
|
+
- Skips trivial files (DTOs, records, models)
|
|
94
|
+
- **Warns only, doesn't block**
|
|
95
|
+
|
|
96
|
+
**Example Output:**
|
|
97
|
+
```
|
|
98
|
+
🧪 Checking test coverage...
|
|
99
|
+
✓ Test found for: Services/UserService.cs
|
|
100
|
+
⚠️ No test found for: Services/PaymentService.cs
|
|
101
|
+
|
|
102
|
+
⚠️ WARNING: Some files don't have tests
|
|
103
|
+
Override with: git commit --no-verify
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### pre-commit-all.sh (Master Hook)
|
|
107
|
+
|
|
108
|
+
**Runs:** All hooks in sequence
|
|
109
|
+
|
|
110
|
+
**Output:**
|
|
111
|
+
```
|
|
112
|
+
╔════════════════════════════════════════════════╗
|
|
113
|
+
║ MORPH-SPEC PRE-COMMIT VALIDATION ║
|
|
114
|
+
╚════════════════════════════════════════════════╝
|
|
115
|
+
|
|
116
|
+
─────────────────────────────────────────────────
|
|
117
|
+
🤖 Validating agent configuration...
|
|
118
|
+
✓ No changes to agents.json
|
|
119
|
+
|
|
120
|
+
─────────────────────────────────────────────────
|
|
121
|
+
🔍 Validating spec files...
|
|
122
|
+
✓ No spec files modified
|
|
123
|
+
|
|
124
|
+
─────────────────────────────────────────────────
|
|
125
|
+
🧪 Checking test coverage...
|
|
126
|
+
✓ Test found for: Services/UserService.cs
|
|
127
|
+
|
|
128
|
+
═════════════════════════════════════════════════
|
|
129
|
+
✅ ALL PRE-COMMIT VALIDATIONS PASSED
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Bypassing Hooks
|
|
133
|
+
|
|
134
|
+
If you need to commit without validation (e.g., WIP commit):
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
git commit --no-verify -m "WIP: work in progress"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**⚠️ Use sparingly** - hooks exist to prevent errors.
|
|
141
|
+
|
|
142
|
+
## Customizing Hooks
|
|
143
|
+
|
|
144
|
+
### Disable Specific Hooks
|
|
145
|
+
|
|
146
|
+
Edit `.git/hooks/pre-commit` and comment out unwanted hooks:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
HOOKS=(
|
|
150
|
+
"pre-commit-agents.sh"
|
|
151
|
+
"pre-commit-specs.sh"
|
|
152
|
+
"pre-commit-tests.sh"
|
|
153
|
+
)
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Troubleshooting
|
|
157
|
+
|
|
158
|
+
### Hook Not Running
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Check if hook exists
|
|
162
|
+
ls -la .git/hooks/pre-commit
|
|
163
|
+
|
|
164
|
+
# Check if executable
|
|
165
|
+
chmod +x .git/hooks/pre-commit
|
|
166
|
+
|
|
167
|
+
# Test manually
|
|
168
|
+
bash .git/hooks/pre-commit
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Hook Fails Unexpectedly
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# Run individual hook for debugging
|
|
175
|
+
bash content/.morph/hooks/pre-commit-costs.sh
|
|
176
|
+
|
|
177
|
+
# Check hook output
|
|
178
|
+
bash -x content/.morph/hooks/pre-commit-costs.sh
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Benefits
|
|
182
|
+
|
|
183
|
+
- ✅ **Prevents Errors:** Catches issues before commit
|
|
184
|
+
- ✅ **Enforces Quality:** Requires tests, specs, ADRs
|
|
185
|
+
- ✅ **Fast Feedback:** Fails early in dev workflow
|
|
186
|
+
- ✅ **Consistent:** Same validation for entire team
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Agent Teams Hooks (Claude Code)
|
|
191
|
+
|
|
192
|
+
**New in MORPH 3.0:** Hooks for Claude Code's experimental Agent Teams feature.
|
|
193
|
+
|
|
194
|
+
### Available Agent Teams Hooks
|
|
195
|
+
|
|
196
|
+
| Hook | Event | Description | Action |
|
|
197
|
+
|------|-------|-------------|--------|
|
|
198
|
+
| `teammate-idle.js` | TeammateIdle | Validates teammate's work before proceeding | ❌ Blocks if errors |
|
|
199
|
+
| `task-completed.js` | TaskCompleted | Validates task deliverables on completion | ❌ Blocks if errors |
|
|
200
|
+
|
|
201
|
+
### teammate-idle.js
|
|
202
|
+
|
|
203
|
+
**Triggered:** When a teammate in Agent Teams is idle and waiting for instructions
|
|
204
|
+
**Purpose:** Quality gate to validate recent work before allowing teammate to proceed
|
|
205
|
+
**Validates:** Security, code quality, standards compliance
|
|
206
|
+
|
|
207
|
+
**Usage:**
|
|
208
|
+
```bash
|
|
209
|
+
node content/.morph/hooks/teammate-idle.js <feature-name> [--dry-run] [--verbose]
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**Example:**
|
|
213
|
+
```bash
|
|
214
|
+
node content/.morph/hooks/teammate-idle.js user-authentication --verbose
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Output:**
|
|
218
|
+
```
|
|
219
|
+
🔔 TeammateIdle Hook Triggered
|
|
220
|
+
Feature: user-authentication
|
|
221
|
+
Event: Teammate is idle, validating recent work...
|
|
222
|
+
|
|
223
|
+
🎯 Executing TeammateIdle hook for feature: user-authentication
|
|
224
|
+
Validators: security-expert
|
|
225
|
+
|
|
226
|
+
🔍 Running security-expert validators...
|
|
227
|
+
|
|
228
|
+
✅ TeammateIdle hook: All validators passed
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Configuration:**
|
|
232
|
+
|
|
233
|
+
Validators are configured in `agents.json` for Tier 4 agents:
|
|
234
|
+
|
|
235
|
+
```json
|
|
236
|
+
{
|
|
237
|
+
"security-expert": {
|
|
238
|
+
"tier": 4,
|
|
239
|
+
"role": "validator",
|
|
240
|
+
"relationships": {
|
|
241
|
+
"runs_in": "hooks",
|
|
242
|
+
"hook_triggers": ["TeammateIdle", "TaskCompleted"]
|
|
243
|
+
},
|
|
244
|
+
"hook_behavior": {
|
|
245
|
+
"validates": [
|
|
246
|
+
"SQL injection (string concatenation in queries)",
|
|
247
|
+
"Hardcoded secrets (API keys, passwords, connection strings)",
|
|
248
|
+
"XSS (@Html.Raw usage in Razor/Blazor)"
|
|
249
|
+
],
|
|
250
|
+
"severity": "error",
|
|
251
|
+
"blocks_on_fail": true
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### task-completed.js
|
|
258
|
+
|
|
259
|
+
**Triggered:** When a task is marked as completed
|
|
260
|
+
**Purpose:** Quality gate to validate task deliverables before marking done
|
|
261
|
+
**Validates:** All active validators for the feature
|
|
262
|
+
|
|
263
|
+
**Usage:**
|
|
264
|
+
```bash
|
|
265
|
+
node content/.morph/hooks/task-completed.js <feature-name> <task-id> [--dry-run] [--verbose]
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
**Example:**
|
|
269
|
+
```bash
|
|
270
|
+
node content/.morph/hooks/task-completed.js user-authentication T003 --verbose
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Output:**
|
|
274
|
+
```
|
|
275
|
+
🔔 TaskCompleted Hook Triggered
|
|
276
|
+
Feature: user-authentication
|
|
277
|
+
Task: T003
|
|
278
|
+
Event: Task marked complete, validating deliverables...
|
|
279
|
+
|
|
280
|
+
🎯 Executing TaskCompleted hook for feature: user-authentication
|
|
281
|
+
Validators: security-expert
|
|
282
|
+
|
|
283
|
+
🔍 Running security-expert validators...
|
|
284
|
+
|
|
285
|
+
❌ TaskCompleted hook: Validation FAILED
|
|
286
|
+
|
|
287
|
+
🚫 ERRORS (blocking):
|
|
288
|
+
security-expert → security
|
|
289
|
+
• Hardcoded secret detected: API key in appsettings.json (appsettings.json:15)
|
|
290
|
+
• SQL injection risk: String concatenation in UserService.cs (UserService.cs:42)
|
|
291
|
+
|
|
292
|
+
⛔ Hook execution BLOCKED - fix errors before proceeding
|
|
293
|
+
|
|
294
|
+
💡 TIP: Fix the errors above before the task can be marked complete.
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Integration with Claude Code
|
|
298
|
+
|
|
299
|
+
When Agent Teams is enabled (`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`), these hooks run automatically:
|
|
300
|
+
|
|
301
|
+
1. **TeammateIdle**: When a teammate finishes work and waits
|
|
302
|
+
2. **TaskCompleted**: When `morph-spec task done` is called
|
|
303
|
+
|
|
304
|
+
**Claude Code Settings:**
|
|
305
|
+
```json
|
|
306
|
+
{
|
|
307
|
+
"hooks": {
|
|
308
|
+
"TeammateIdle": "node content/.morph/hooks/teammate-idle.js {feature}",
|
|
309
|
+
"TaskCompleted": "node content/.morph/hooks/task-completed.js {feature} {taskId}"
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Dry Run Mode
|
|
315
|
+
|
|
316
|
+
Test hooks without blocking:
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
# See what would run without executing
|
|
320
|
+
node content/.morph/hooks/teammate-idle.js my-feature --dry-run
|
|
321
|
+
|
|
322
|
+
# Output:
|
|
323
|
+
# 🔍 DRY RUN - Would execute:
|
|
324
|
+
# - security-expert (severity: error)
|
|
325
|
+
# • SQL injection (string concatenation in queries)
|
|
326
|
+
# • Hardcoded secrets (API keys, passwords, connection strings)
|
|
327
|
+
# • XSS (@Html.Raw usage in Razor/Blazor)
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Hook Behavior Configuration
|
|
331
|
+
|
|
332
|
+
| Field | Description | Values |
|
|
333
|
+
|-------|-------------|--------|
|
|
334
|
+
| `validates` | Array of validation checks | Descriptive strings |
|
|
335
|
+
| `severity` | Error level | `"error"` (blocks) \| `"warning"` (warns only) |
|
|
336
|
+
| `blocks_on_fail` | Block on failure | `true` (default) \| `false` |
|
|
337
|
+
|
|
338
|
+
### Exit Codes
|
|
339
|
+
|
|
340
|
+
| Code | Meaning |
|
|
341
|
+
|------|---------|
|
|
342
|
+
| 0 | All validators passed |
|
|
343
|
+
| 1 | Validation failed and blocked |
|
|
344
|
+
| 2 | Configuration error (missing feature, etc.) |
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
*MORPH-SPEC Framework - Git Hooks*
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# MORPH-SPEC Pre-Commit Hook: Agent Configuration Validation
|
|
3
|
-
# Uses validate-agents.js to check agents.json
|
|
4
|
-
|
|
5
|
-
echo "🤖 Validating agent configuration..."
|
|
6
|
-
|
|
7
|
-
# Check if agents.json is being modified
|
|
8
|
-
if git diff --cached --name-only | grep -q 'agents\.json$'; then
|
|
9
|
-
echo "Detected changes to agents.json"
|
|
10
|
-
|
|
11
|
-
# Run validator
|
|
12
|
-
if !
|
|
13
|
-
echo ""
|
|
14
|
-
echo "❌ COMMIT BLOCKED: agents.json validation failed"
|
|
15
|
-
echo " Fix errors above before committing"
|
|
16
|
-
exit 1
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
echo "✓ agents.json is valid"
|
|
20
|
-
else
|
|
21
|
-
echo "✓ No changes to agents.json"
|
|
22
|
-
fi
|
|
23
|
-
|
|
24
|
-
exit 0
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# MORPH-SPEC Pre-Commit Hook: Agent Configuration Validation
|
|
3
|
+
# Uses validate-agents.js to check agents.json
|
|
4
|
+
|
|
5
|
+
echo "🤖 Validating agent configuration..."
|
|
6
|
+
|
|
7
|
+
# Check if agents.json is being modified
|
|
8
|
+
if git diff --cached --name-only | grep -q 'agents\.json$'; then
|
|
9
|
+
echo "Detected changes to agents.json"
|
|
10
|
+
|
|
11
|
+
# Run validator
|
|
12
|
+
if ! npx morph-spec validate-agents-skills; then
|
|
13
|
+
echo ""
|
|
14
|
+
echo "❌ COMMIT BLOCKED: agents.json validation failed"
|
|
15
|
+
echo " Fix errors above before committing"
|
|
16
|
+
exit 1
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
echo "✓ agents.json is valid"
|
|
20
|
+
else
|
|
21
|
+
echo "✓ No changes to agents.json"
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
exit 0
|