@polymorphism-tech/morph-spec 4.2.0 → 4.3.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/bin/morph-spec.js +283 -8
- package/bin/validate.js +4 -4
- package/docs/{v3.0 → next-generation}/AGENTS.md +1 -1
- package/docs/next-generation/CONTEXT-OPTIMIZATION.md +267 -0
- package/docs/next-generation/EXECUTION-FLOW.md +274 -0
- package/docs/next-generation/META-PROMPTS.md +235 -0
- package/docs/next-generation/MIGRATION-GUIDE.md +253 -0
- package/docs/next-generation/THREAD-MANAGEMENT.md +240 -0
- package/package.json +5 -5
- package/src/commands/agents/agents-fuse.js +96 -0
- package/src/commands/agents/micro-agent.js +112 -0
- package/src/commands/agents/spawn-team.js +69 -4
- package/src/commands/agents/squad-template.js +146 -0
- package/src/commands/analytics/analytics.js +176 -0
- package/src/commands/context/context-prime.js +63 -0
- package/src/commands/context/core-four.js +54 -0
- package/src/commands/mcp/mcp.js +102 -0
- package/src/commands/project/detect-agents.js +1 -1
- package/src/commands/project/doctor.js +573 -356
- package/src/commands/project/init.js +1 -1
- package/src/commands/project/update.js +1 -1
- package/src/commands/state/advance-phase.js +433 -416
- package/src/commands/templates/template-render.js +80 -1
- package/src/commands/threads/thread-template.js +103 -0
- package/src/commands/threads/threads.js +261 -0
- package/src/commands/trust/trust.js +205 -0
- package/src/{orchestrator.js → core/orchestrator.js} +8 -8
- package/src/core/state/state-manager.js +18 -2
- package/src/core/workflows/workflow-detector.js +100 -2
- package/src/lib/agents/micro-agent-factory.js +161 -0
- package/src/lib/analytics/analytics-engine.js +345 -0
- package/src/lib/checkpoints/checkpoint-hooks.js +293 -258
- package/src/lib/context/context-bundler.js +240 -0
- package/src/lib/context/context-optimizer.js +212 -0
- package/src/lib/context/context-tracker.js +273 -0
- package/src/lib/context/core-four-tracker.js +201 -0
- package/src/lib/context/mcp-optimizer.js +200 -0
- package/src/lib/execution/fusion-executor.js +304 -0
- package/src/lib/execution/parallel-executor.js +270 -0
- package/src/lib/generators/context-generator.js +3 -3
- package/src/lib/generators/recap-generator.js +2 -2
- package/src/lib/hooks/hook-executor.js +169 -0
- package/src/lib/hooks/stop-hook-executor.js +286 -0
- package/src/lib/hops/hop-composer.js +221 -0
- package/src/lib/threads/thread-coordinator.js +238 -0
- package/src/lib/threads/thread-manager.js +317 -0
- package/src/lib/tracking/artifact-trail.js +202 -0
- package/src/lib/trust/trust-manager.js +269 -0
- package/src/lib/validators/design-system/design-system-validator.js +2 -2
- package/src/lib/validators/validation-runner.js +6 -6
- package/stacks/blazor-azure/.morph/config/agents.json +72 -3
- package/stacks/nextjs-supabase/.morph/config/agents.json +3 -3
- package/CLAUDE.md +0 -993
- package/docs/llm-interaction-config.md +0 -735
- package/docs/v3.0/EXECUTION-FLOW.md +0 -1304
- package/src/commands/utils/migrate-state.js +0 -158
- package/src/commands/utils/upgrade.js +0 -346
- package/src/lib/validators/architecture-validator.js +0 -60
- package/src/lib/validators/content-validator.js +0 -164
- package/src/lib/validators/package-validator.js +0 -61
- package/src/lib/validators/ui-contrast-validator.js +0 -44
- package/stacks/blazor-azure/.claude/commands/morph-apply.md +0 -221
- package/stacks/blazor-azure/.claude/commands/morph-archive.md +0 -79
- package/stacks/blazor-azure/.claude/commands/morph-deploy.md +0 -529
- package/stacks/blazor-azure/.claude/commands/morph-infra.md +0 -209
- package/stacks/blazor-azure/.claude/commands/morph-preflight.md +0 -227
- package/stacks/blazor-azure/.claude/commands/morph-proposal.md +0 -122
- package/stacks/blazor-azure/.claude/commands/morph-status.md +0 -86
- package/stacks/blazor-azure/.claude/commands/morph-troubleshoot.md +0 -122
- package/stacks/blazor-azure/.claude/skills/level-0-meta/README.md +0 -7
- package/stacks/blazor-azure/.claude/skills/level-0-meta/code-review.md +0 -226
- package/stacks/blazor-azure/.claude/skills/level-0-meta/morph-checklist.md +0 -117
- package/stacks/blazor-azure/.claude/skills/level-0-meta/simulation-checklist.md +0 -77
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/README.md +0 -7
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/morph-replicate.md +0 -213
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-clarify.md +0 -131
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-design.md +0 -213
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-setup.md +0 -106
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-tasks.md +0 -164
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-uiux.md +0 -169
- package/stacks/blazor-azure/.claude/skills/level-2-domains/README.md +0 -14
- package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +0 -192
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/po-pm-advisor.md +0 -197
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/prompt-engineer.md +0 -189
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/seo-growth-hacker.md +0 -320
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/standards-architect.md +0 -156
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/api-designer.md +0 -59
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +0 -77
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +0 -58
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +0 -126
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +0 -45
- package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/blazor-builder.md +0 -210
- package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/nextjs-expert.md +0 -154
- package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +0 -191
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-architect.md +0 -142
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +0 -699
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +0 -126
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/container-specialist.md +0 -131
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +0 -119
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/asaas-financial.md +0 -130
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/azure-identity.md +0 -142
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/clerk-auth.md +0 -108
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/hangfire-orchestrator.md +0 -64
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/resend-email.md +0 -119
- package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/code-analyzer.md +0 -235
- package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/testing-specialist.md +0 -126
- package/stacks/blazor-azure/.claude/skills/level-3-technologies/README.md +0 -7
- package/stacks/blazor-azure/.claude/skills/level-4-patterns/README.md +0 -7
- package/stacks/blazor-azure/.morph/archive/.gitkeep +0 -25
- package/stacks/blazor-azure/.morph/features/.gitkeep +0 -25
- package/stacks/blazor-azure/.morph/schemas/agent.schema.json +0 -296
- package/stacks/blazor-azure/.morph/schemas/tasks.schema.json +0 -220
- package/stacks/blazor-azure/.morph/specs/.gitkeep +0 -20
- package/stacks/blazor-azure/.morph/test-infra/example.bicep +0 -59
- package/stacks/nextjs-supabase/.claude/commands/morph-apply.md +0 -221
- package/stacks/nextjs-supabase/.claude/commands/morph-archive.md +0 -79
- package/stacks/nextjs-supabase/.claude/commands/morph-deploy.md +0 -529
- package/stacks/nextjs-supabase/.claude/commands/morph-infra.md +0 -209
- package/stacks/nextjs-supabase/.claude/commands/morph-preflight.md +0 -227
- package/stacks/nextjs-supabase/.claude/commands/morph-proposal.md +0 -122
- package/stacks/nextjs-supabase/.claude/commands/morph-status.md +0 -86
- package/stacks/nextjs-supabase/.claude/commands/morph-troubleshoot.md +0 -122
- package/stacks/nextjs-supabase/.claude/settings.local.json +0 -6
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/backend/dotnet-supabase.md +0 -244
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/frontend/nextjs-supabase.md +0 -335
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/infrastructure/easypanel-deployer.md +0 -189
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +0 -50
- /package/docs/{v3.0 → next-generation}/ANALYSIS.md +0 -0
- /package/docs/{v3.0 → next-generation}/ARCHITECTURE.md +0 -0
- /package/docs/{v3.0 → next-generation}/FEATURES.md +0 -0
- /package/docs/{v3.0 → next-generation}/README.md +0 -0
- /package/docs/{v3.0 → next-generation}/ROADMAP.md +0 -0
|
@@ -1,735 +0,0 @@
|
|
|
1
|
-
# LLM Interaction Configuration Guide
|
|
2
|
-
|
|
3
|
-
**MORPH-SPEC v3.0** introduces a comprehensive configuration system for controlling LLM interaction features via `.morph/config/llm-interaction.json`.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Quick Start
|
|
8
|
-
|
|
9
|
-
### 1. Default Configuration
|
|
10
|
-
|
|
11
|
-
On `morph-spec init`, a default `llm-interaction.json` is created with recommended settings:
|
|
12
|
-
|
|
13
|
-
```json
|
|
14
|
-
{
|
|
15
|
-
"$schema": "./llm-interaction-schema.json",
|
|
16
|
-
"version": "1.0.0",
|
|
17
|
-
"enabled": true,
|
|
18
|
-
|
|
19
|
-
"approvalGates": {
|
|
20
|
-
"enabled": true,
|
|
21
|
-
"required": ["design", "tasks"],
|
|
22
|
-
"optional": ["proposal", "uiux"],
|
|
23
|
-
"allowSkip": false
|
|
24
|
-
},
|
|
25
|
-
|
|
26
|
-
"checkpoints": {
|
|
27
|
-
"frequency": 3,
|
|
28
|
-
"autoValidate": true,
|
|
29
|
-
"validators": {
|
|
30
|
-
"enabled": ["architecture", "packages", "design-system", "security"]
|
|
31
|
-
},
|
|
32
|
-
"hooks": {
|
|
33
|
-
"runTests": false,
|
|
34
|
-
"runLinters": true,
|
|
35
|
-
"buildCheck": false
|
|
36
|
-
},
|
|
37
|
-
"onFailure": {
|
|
38
|
-
"blockProgress": true,
|
|
39
|
-
"maxRetries": 3
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
|
|
43
|
-
"phaseValidation": {
|
|
44
|
-
"strictTransitions": true,
|
|
45
|
-
"requireContentValidation": true,
|
|
46
|
-
"allowPhaseSkip": false,
|
|
47
|
-
"forceSequential": true
|
|
48
|
-
},
|
|
49
|
-
|
|
50
|
-
"agentSpawning": {
|
|
51
|
-
"enabled": true,
|
|
52
|
-
"autoDetect": true,
|
|
53
|
-
"spawnThreshold": {
|
|
54
|
-
"complexity": "high",
|
|
55
|
-
"fileCount": 15,
|
|
56
|
-
"multiDomain": true,
|
|
57
|
-
"agentCount": 5
|
|
58
|
-
},
|
|
59
|
-
"teamMode": "auto"
|
|
60
|
-
},
|
|
61
|
-
|
|
62
|
-
"metadata": {
|
|
63
|
-
"autoGenerate": true,
|
|
64
|
-
"updateFrequency": "on_task_done"
|
|
65
|
-
},
|
|
66
|
-
|
|
67
|
-
"patterns": {
|
|
68
|
-
"captureOnComplete": true,
|
|
69
|
-
"searchBeforeStart": true,
|
|
70
|
-
"location": ".morph/memory/patterns-learned.md"
|
|
71
|
-
},
|
|
72
|
-
|
|
73
|
-
"templates": {
|
|
74
|
-
"mcpDataInjection": true,
|
|
75
|
-
"dataSources": ["projectStructure", "complianceStatus", "recentActivity"]
|
|
76
|
-
},
|
|
77
|
-
|
|
78
|
-
"interactiveDecisions": {
|
|
79
|
-
"enabled": true,
|
|
80
|
-
"usePromptTemplates": true,
|
|
81
|
-
"requireUserInput": ["architecture-choice", "scope-change", "validator-override"]
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## Configuration Sections
|
|
89
|
-
|
|
90
|
-
### 1. Approval Gates
|
|
91
|
-
|
|
92
|
-
**Controls:** Explicit approval tracking for phase transitions.
|
|
93
|
-
|
|
94
|
-
```json
|
|
95
|
-
{
|
|
96
|
-
"approvalGates": {
|
|
97
|
-
"enabled": true, // Enable approval gate system
|
|
98
|
-
"required": ["design", "tasks"], // Required gates that block advancement
|
|
99
|
-
"optional": ["proposal", "uiux"], // Optional gates (tracked but don't block)
|
|
100
|
-
"allowSkip": false // Allow --skip-approval flag
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
**Behavior:**
|
|
106
|
-
- When `enabled: true`, phase transitions check approval status
|
|
107
|
-
- `required` gates **block** `npx morph-spec phase advance` until approved
|
|
108
|
-
- `optional` gates are tracked but don't block
|
|
109
|
-
- `allowSkip: false` prevents `--skip-approval` override (strict mode)
|
|
110
|
-
|
|
111
|
-
**Commands:**
|
|
112
|
-
```bash
|
|
113
|
-
# Approve a gate
|
|
114
|
-
npx morph-spec approve {feature} design
|
|
115
|
-
|
|
116
|
-
# Reject with reason
|
|
117
|
-
npx morph-spec reject {feature} design "Missing security considerations"
|
|
118
|
-
|
|
119
|
-
# Check status
|
|
120
|
-
npx morph-spec approval-status {feature}
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
**Use Cases:**
|
|
124
|
-
- **Strict governance:** `required: ["proposal", "design", "tasks"]`, `allowSkip: false`
|
|
125
|
-
- **Lightweight:** `required: ["design"]`, `allowSkip: true`
|
|
126
|
-
- **No gates:** `enabled: false`
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
### 2. Checkpoints
|
|
131
|
-
|
|
132
|
-
**Controls:** Automated validation at regular task intervals.
|
|
133
|
-
|
|
134
|
-
```json
|
|
135
|
-
{
|
|
136
|
-
"checkpoints": {
|
|
137
|
-
"frequency": 3, // Run checkpoint every N tasks
|
|
138
|
-
"autoValidate": true, // Auto-run validators
|
|
139
|
-
"validators": {
|
|
140
|
-
"enabled": ["architecture", "packages", "security"]
|
|
141
|
-
},
|
|
142
|
-
"hooks": {
|
|
143
|
-
"runTests": false, // Run test suite at checkpoints
|
|
144
|
-
"runLinters": true, // Run linters (eslint, dotnet format)
|
|
145
|
-
"buildCheck": false // Run build verification
|
|
146
|
-
},
|
|
147
|
-
"onFailure": {
|
|
148
|
-
"blockProgress": true, // Block task completion if checkpoint fails
|
|
149
|
-
"maxRetries": 3 // Max retries before escalation
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
**Behavior:**
|
|
156
|
-
- Every `frequency` tasks (e.g., T003, T006, T009), runs checkpoint hooks
|
|
157
|
-
- If `autoValidate: true`, runs all `enabled` validators
|
|
158
|
-
- If `onFailure.blockProgress: true`, task NOT marked done until violations fixed
|
|
159
|
-
- After `maxRetries` failures, prompts LLM to escalate or simplify
|
|
160
|
-
|
|
161
|
-
**Validators:**
|
|
162
|
-
- `architecture`: DI patterns, Blazor lifecycle, async/await anti-patterns
|
|
163
|
-
- `packages`: NuGet/npm conflicts, outdated dependencies
|
|
164
|
-
- `design-system`: CSS compliance, color palette, spacing
|
|
165
|
-
- `security`: Secrets exposed, SQL injection, XSS
|
|
166
|
-
|
|
167
|
-
**Use Cases:**
|
|
168
|
-
- **Strict:** `autoValidate: true`, `blockProgress: true`, `frequency: 3`
|
|
169
|
-
- **Lightweight:** `autoValidate: false`, `blockProgress: false`, `frequency: 5`
|
|
170
|
-
- **Manual only:** `autoValidate: false`, `hooks: {runTests: false}`
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
### 3. Phase Validation
|
|
175
|
-
|
|
176
|
-
**Controls:** State machine enforcement for phase transitions.
|
|
177
|
-
|
|
178
|
-
```json
|
|
179
|
-
{
|
|
180
|
-
"phaseValidation": {
|
|
181
|
-
"strictTransitions": true, // Enforce valid state machine transitions
|
|
182
|
-
"requireContentValidation": true, // Validate spec.md and tasks.json structure
|
|
183
|
-
"allowPhaseSkip": false, // Allow jumping phases (e.g., setup → tasks)
|
|
184
|
-
"forceSequential": true // Must go through all phases in order
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
**Behavior:**
|
|
190
|
-
- `strictTransitions: true`: Only valid transitions allowed (e.g., `proposal → setup`, NOT `proposal → implement`)
|
|
191
|
-
- `requireContentValidation: true`: Checks spec.md has required sections, tasks.json has valid structure
|
|
192
|
-
- `allowPhaseSkip: false`: Cannot skip optional phases (uiux, sync) without explicit decision
|
|
193
|
-
- `forceSequential: true`: Must complete phases in order (proposal → setup → uiux/design → clarify → tasks → implement)
|
|
194
|
-
|
|
195
|
-
**Valid Transitions (State Machine):**
|
|
196
|
-
```
|
|
197
|
-
proposal → setup
|
|
198
|
-
setup → uiux | design
|
|
199
|
-
uiux → design
|
|
200
|
-
design → clarify
|
|
201
|
-
clarify → tasks
|
|
202
|
-
tasks → implement
|
|
203
|
-
implement → sync | archived
|
|
204
|
-
sync → archived
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
**Use Cases:**
|
|
208
|
-
- **Strict:** All true (recommended for teams)
|
|
209
|
-
- **Flexible:** `allowPhaseSkip: true`, `forceSequential: false`
|
|
210
|
-
- **No validation:** `strictTransitions: false`
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
### 4. Agent Spawning
|
|
215
|
-
|
|
216
|
-
**Controls:** When to suggest Task tool agent spawning.
|
|
217
|
-
|
|
218
|
-
```json
|
|
219
|
-
{
|
|
220
|
-
"agentSpawning": {
|
|
221
|
-
"enabled": true, // Enable agent spawning suggestions
|
|
222
|
-
"autoDetect": true, // Auto-detect based on thresholds
|
|
223
|
-
"spawnThreshold": {
|
|
224
|
-
"complexity": "high", // Suggest if complexity >= high
|
|
225
|
-
"fileCount": 15, // Suggest if 15+ files to modify
|
|
226
|
-
"multiDomain": true, // Suggest if backend + frontend + infra
|
|
227
|
-
"agentCount": 5 // Suggest if 5+ agents activated
|
|
228
|
-
},
|
|
229
|
-
"teamMode": "auto" // auto | manual | always
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
**Behavior:**
|
|
235
|
-
- When ALL thresholds met, LLM suggests spawning agents via Task tool
|
|
236
|
-
- `teamMode`:
|
|
237
|
-
- `auto`: Suggest based on thresholds
|
|
238
|
-
- `manual`: Never suggest, only if user requests
|
|
239
|
-
- `always`: Always spawn for multi-agent features
|
|
240
|
-
|
|
241
|
-
**Command:**
|
|
242
|
-
```bash
|
|
243
|
-
# Get team configuration
|
|
244
|
-
npx morph-spec spawn-team {feature}
|
|
245
|
-
|
|
246
|
-
# Returns Task tool configs for:
|
|
247
|
-
# - Backend Squad (dotnet-senior, ef-modeler, api-designer)
|
|
248
|
-
# - Frontend Squad (blazor-senior, fluent-designer)
|
|
249
|
-
# - Infrastructure Squad (bicep-architect, azure-specialist)
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
**Use Cases:**
|
|
253
|
-
- **Auto-spawn:** `autoDetect: true`, `teamMode: "auto"`
|
|
254
|
-
- **Manual only:** `autoDetect: false`, `teamMode: "manual"`
|
|
255
|
-
- **Always parallel:** `teamMode: "always"` (even for simple features)
|
|
256
|
-
|
|
257
|
-
---
|
|
258
|
-
|
|
259
|
-
### 5. Metadata
|
|
260
|
-
|
|
261
|
-
**Controls:** Auto-generation of metadata.json summaries.
|
|
262
|
-
|
|
263
|
-
```json
|
|
264
|
-
{
|
|
265
|
-
"metadata": {
|
|
266
|
-
"autoGenerate": true, // Auto-generate metadata.json
|
|
267
|
-
"updateFrequency": "on_task_done" // When to update (on_task_done | on_checkpoint | on_phase_advance)
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
**Behavior:**
|
|
273
|
-
- `autoGenerate: true`: After each task completion, regenerates `metadata.json`
|
|
274
|
-
- `updateFrequency`:
|
|
275
|
-
- `on_task_done`: Update after every task (most frequent, recommended)
|
|
276
|
-
- `on_checkpoint`: Update only at checkpoints (e.g., T003, T006)
|
|
277
|
-
- `on_phase_advance`: Update only when phase changes
|
|
278
|
-
|
|
279
|
-
**metadata.json Structure:**
|
|
280
|
-
```json
|
|
281
|
-
{
|
|
282
|
-
"version": "1.0.0",
|
|
283
|
-
"feature": "user-authentication",
|
|
284
|
-
"status": "active",
|
|
285
|
-
"phase": "implement",
|
|
286
|
-
"spec": {
|
|
287
|
-
"id": "user-auth",
|
|
288
|
-
"summary": { "problem": "...", "solution": "...", "tags": [...] },
|
|
289
|
-
"requirements": [...],
|
|
290
|
-
"dataModel": [...]
|
|
291
|
-
},
|
|
292
|
-
"decisions": {
|
|
293
|
-
"decisions": [ { "id": "ADR-001", "title": "...", "fullPath": "..." } ]
|
|
294
|
-
},
|
|
295
|
-
"tasks": { "total": 12, "completed": 8, "progress": "67%" },
|
|
296
|
-
"agents": ["dotnet-senior", "ef-modeler"],
|
|
297
|
-
"checkpoints": [ { "num": 1, "passed": true } ]
|
|
298
|
-
}
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
**Use Cases:**
|
|
302
|
-
- **Always up-to-date:** `autoGenerate: true`, `updateFrequency: "on_task_done"`
|
|
303
|
-
- **Checkpoint-based:** `updateFrequency: "on_checkpoint"`
|
|
304
|
-
- **Manual only:** `autoGenerate: false`
|
|
305
|
-
|
|
306
|
-
---
|
|
307
|
-
|
|
308
|
-
### 6. Patterns
|
|
309
|
-
|
|
310
|
-
**Controls:** Learning system and pattern library.
|
|
311
|
-
|
|
312
|
-
```json
|
|
313
|
-
{
|
|
314
|
-
"patterns": {
|
|
315
|
-
"captureOnComplete": true, // Prompt to capture patterns on feature complete
|
|
316
|
-
"searchBeforeStart": true, // Search patterns before starting new feature
|
|
317
|
-
"location": ".morph/memory/patterns-learned.md"
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
**Behavior:**
|
|
323
|
-
- `searchBeforeStart: true`: LLM runs `npx morph-spec search-patterns "{keywords}"` before PROPOSAL phase
|
|
324
|
-
- `captureOnComplete: true`: After feature archived, LLM prompts to capture lessons
|
|
325
|
-
|
|
326
|
-
**Commands:**
|
|
327
|
-
```bash
|
|
328
|
-
# Search patterns
|
|
329
|
-
npx morph-spec search-patterns "blazor state"
|
|
330
|
-
npx morph-spec search-patterns "background job"
|
|
331
|
-
|
|
332
|
-
# Capture pattern
|
|
333
|
-
npx morph-spec capture-pattern {feature} success "Pattern description"
|
|
334
|
-
npx morph-spec capture-pattern {feature} avoid "Anti-pattern description"
|
|
335
|
-
npx morph-spec capture-pattern {feature} optimization "Performance improvement"
|
|
336
|
-
|
|
337
|
-
# Categories: success, avoid, optimization, security, convention, best-practice
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
**Use Cases:**
|
|
341
|
-
- **Continuous learning:** Both true (recommended)
|
|
342
|
-
- **Search only:** `searchBeforeStart: true`, `captureOnComplete: false`
|
|
343
|
-
- **No learning:** Both false
|
|
344
|
-
|
|
345
|
-
---
|
|
346
|
-
|
|
347
|
-
### 7. Templates
|
|
348
|
-
|
|
349
|
-
**Controls:** MCP data injection in templates.
|
|
350
|
-
|
|
351
|
-
```json
|
|
352
|
-
{
|
|
353
|
-
"templates": {
|
|
354
|
-
"mcpDataInjection": true, // Enable MCP data injection
|
|
355
|
-
"dataSources": [
|
|
356
|
-
"projectStructure", // File counts, language stats
|
|
357
|
-
"complianceStatus", // Validators, violations
|
|
358
|
-
"recentActivity" // Last feature, commits, branches
|
|
359
|
-
]
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
**Behavior:**
|
|
365
|
-
- When rendering templates with `--with-mcp-data`, injects live project metrics
|
|
366
|
-
- Available placeholders:
|
|
367
|
-
- `{{MCP_PROJECT_FILES}}`, `{{MCP_CS_FILES}}`, `{{MCP_TS_FILES}}`
|
|
368
|
-
- `{{MCP_TEST_COVERAGE}}`, `{{MCP_COMPLIANCE_SCORE}}`
|
|
369
|
-
- `{{MCP_ARCHITECTURE_VIOLATIONS}}`, `{{MCP_SECURITY_ISSUES}}`
|
|
370
|
-
- `{{MCP_LAST_FEATURE}}`, `{{MCP_LAST_COMMIT}}`
|
|
371
|
-
- [Full list in `.morph/templates/MCP-TEMPLATES-README.md`]
|
|
372
|
-
|
|
373
|
-
**Usage:**
|
|
374
|
-
```bash
|
|
375
|
-
# Render with MCP data
|
|
376
|
-
node bin/render-template.js \
|
|
377
|
-
.morph/templates/proposal-with-mcp.md \
|
|
378
|
-
.morph/features/{feature}/proposal.md \
|
|
379
|
-
'{"FEATURE_NAME":"{feature}"}' \
|
|
380
|
-
--with-mcp-data --verbose
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
**Use Cases:**
|
|
384
|
-
- **Context-aware docs:** `mcpDataInjection: true`, all data sources
|
|
385
|
-
- **No dynamic data:** `mcpDataInjection: false`
|
|
386
|
-
|
|
387
|
-
---
|
|
388
|
-
|
|
389
|
-
### 8. Interactive Decisions
|
|
390
|
-
|
|
391
|
-
**Controls:** When to use AskUserQuestion patterns.
|
|
392
|
-
|
|
393
|
-
```json
|
|
394
|
-
{
|
|
395
|
-
"interactiveDecisions": {
|
|
396
|
-
"enabled": true, // Enable structured decision prompts
|
|
397
|
-
"usePromptTemplates": true, // Use templates from decision-prompts.md
|
|
398
|
-
"requireUserInput": [
|
|
399
|
-
"architecture-choice", // Multiple valid approaches
|
|
400
|
-
"scope-change", // Significant scope modifications
|
|
401
|
-
"validator-override" // Skipping failed validation
|
|
402
|
-
]
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
**Behavior:**
|
|
408
|
-
- When `enabled: true`, LLM uses AskUserQuestion for key decisions
|
|
409
|
-
- `usePromptTemplates: true`: Uses templates from `.morph/templates/decision-prompts.md`
|
|
410
|
-
- `requireUserInput`: Decisions that MUST use AskUserQuestion (not free-form text)
|
|
411
|
-
|
|
412
|
-
**Templates Available:**
|
|
413
|
-
- Scope clarification (proposal phase)
|
|
414
|
-
- Architecture choice (design phase)
|
|
415
|
-
- Task ordering conflict (tasks phase)
|
|
416
|
-
- Validation failure recovery (implement phase)
|
|
417
|
-
- Breaking change approval (implement phase)
|
|
418
|
-
|
|
419
|
-
**Use Cases:**
|
|
420
|
-
- **Interactive:** All enabled (recommended for team projects)
|
|
421
|
-
- **Autonomous:** `enabled: false` (LLM makes all decisions)
|
|
422
|
-
|
|
423
|
-
---
|
|
424
|
-
|
|
425
|
-
## Configuration Presets
|
|
426
|
-
|
|
427
|
-
### Preset 1: Strict (Recommended for Teams)
|
|
428
|
-
|
|
429
|
-
```json
|
|
430
|
-
{
|
|
431
|
-
"approvalGates": { "enabled": true, "required": ["design", "tasks"], "allowSkip": false },
|
|
432
|
-
"checkpoints": { "autoValidate": true, "onFailure": { "blockProgress": true } },
|
|
433
|
-
"phaseValidation": { "strictTransitions": true, "requireContentValidation": true },
|
|
434
|
-
"agentSpawning": { "enabled": true, "teamMode": "auto" },
|
|
435
|
-
"metadata": { "autoGenerate": true },
|
|
436
|
-
"patterns": { "searchBeforeStart": true, "captureOnComplete": true },
|
|
437
|
-
"interactiveDecisions": { "enabled": true }
|
|
438
|
-
}
|
|
439
|
-
```
|
|
440
|
-
|
|
441
|
-
**Best for:**
|
|
442
|
-
- Team projects with governance
|
|
443
|
-
- Production features
|
|
444
|
-
- Learning from mistakes
|
|
445
|
-
|
|
446
|
-
---
|
|
447
|
-
|
|
448
|
-
### Preset 2: Lightweight (Solo Developers)
|
|
449
|
-
|
|
450
|
-
```json
|
|
451
|
-
{
|
|
452
|
-
"approvalGates": { "enabled": true, "required": ["design"], "allowSkip": true },
|
|
453
|
-
"checkpoints": { "autoValidate": true, "onFailure": { "blockProgress": false } },
|
|
454
|
-
"phaseValidation": { "strictTransitions": true, "allowPhaseSkip": true },
|
|
455
|
-
"agentSpawning": { "enabled": false },
|
|
456
|
-
"metadata": { "autoGenerate": false },
|
|
457
|
-
"patterns": { "searchBeforeStart": true, "captureOnComplete": false },
|
|
458
|
-
"interactiveDecisions": { "enabled": true }
|
|
459
|
-
}
|
|
460
|
-
```
|
|
461
|
-
|
|
462
|
-
**Best for:**
|
|
463
|
-
- Solo developers
|
|
464
|
-
- Rapid prototyping
|
|
465
|
-
- Experimental features
|
|
466
|
-
|
|
467
|
-
---
|
|
468
|
-
|
|
469
|
-
### Preset 3: No Guardrails (Fast Iteration)
|
|
470
|
-
|
|
471
|
-
```json
|
|
472
|
-
{
|
|
473
|
-
"approvalGates": { "enabled": false },
|
|
474
|
-
"checkpoints": { "autoValidate": false },
|
|
475
|
-
"phaseValidation": { "strictTransitions": false, "allowPhaseSkip": true },
|
|
476
|
-
"agentSpawning": { "enabled": false },
|
|
477
|
-
"metadata": { "autoGenerate": false },
|
|
478
|
-
"patterns": { "searchBeforeStart": false, "captureOnComplete": false },
|
|
479
|
-
"interactiveDecisions": { "enabled": false }
|
|
480
|
-
}
|
|
481
|
-
```
|
|
482
|
-
|
|
483
|
-
**Best for:**
|
|
484
|
-
- Spikes and experiments
|
|
485
|
-
- Throwaway code
|
|
486
|
-
- Learning the framework
|
|
487
|
-
|
|
488
|
-
**⚠️ Warning:** Not recommended for production features.
|
|
489
|
-
|
|
490
|
-
---
|
|
491
|
-
|
|
492
|
-
## Runtime Overrides
|
|
493
|
-
|
|
494
|
-
Most features can be overridden at runtime:
|
|
495
|
-
|
|
496
|
-
```bash
|
|
497
|
-
# Skip approval gate (if allowSkip: true)
|
|
498
|
-
npx morph-spec phase advance {feature} --skip-approval
|
|
499
|
-
|
|
500
|
-
# Force invalid transition
|
|
501
|
-
npx morph-spec phase advance {feature} --force
|
|
502
|
-
|
|
503
|
-
# Skip validation
|
|
504
|
-
npx morph-spec task done {feature} T001 --skip-validation
|
|
505
|
-
|
|
506
|
-
# Disable checkpoints for one task
|
|
507
|
-
# (Not available - checkpoints run based on config only)
|
|
508
|
-
```
|
|
509
|
-
|
|
510
|
-
---
|
|
511
|
-
|
|
512
|
-
## Migration & Upgrade
|
|
513
|
-
|
|
514
|
-
### Migrating Existing Projects
|
|
515
|
-
|
|
516
|
-
```bash
|
|
517
|
-
# Auto-migrate state.json to include approval gates
|
|
518
|
-
npx morph-spec migrate-state
|
|
519
|
-
|
|
520
|
-
# Creates llm-interaction.json if missing
|
|
521
|
-
npx morph-spec init --force
|
|
522
|
-
```
|
|
523
|
-
|
|
524
|
-
**Migration Behavior:**
|
|
525
|
-
- Adds `approvalGates` to all features in `state.json`
|
|
526
|
-
- Past phases auto-approved (e.g., if currently in implement, design/tasks gates approved)
|
|
527
|
-
- Creates empty `.morph/memory/patterns-learned.md`
|
|
528
|
-
- Creates default `llm-interaction.json` with conservative settings
|
|
529
|
-
|
|
530
|
-
### Upgrading Configuration
|
|
531
|
-
|
|
532
|
-
```bash
|
|
533
|
-
# Upgrade to latest schema version
|
|
534
|
-
npx morph-spec upgrade --to-version=3.0.0
|
|
535
|
-
|
|
536
|
-
# Options:
|
|
537
|
-
# [1] Full upgrade (all breaking changes)
|
|
538
|
-
# [2] Conservative (keep old behavior, opt-in to new)
|
|
539
|
-
# [3] Custom (choose per-feature)
|
|
540
|
-
```
|
|
541
|
-
|
|
542
|
-
---
|
|
543
|
-
|
|
544
|
-
## Troubleshooting
|
|
545
|
-
|
|
546
|
-
### Checkpoint Always Failing
|
|
547
|
-
|
|
548
|
-
**Problem:** Checkpoint fails every 3 tasks despite fixing issues.
|
|
549
|
-
|
|
550
|
-
**Solutions:**
|
|
551
|
-
1. Check which validator is failing:
|
|
552
|
-
```bash
|
|
553
|
-
npx morph-spec validate architecture --verbose
|
|
554
|
-
npx morph-spec validate packages --verbose
|
|
555
|
-
npx morph-spec validate security --verbose
|
|
556
|
-
```
|
|
557
|
-
|
|
558
|
-
2. Disable problematic validator temporarily:
|
|
559
|
-
```json
|
|
560
|
-
{
|
|
561
|
-
"checkpoints": {
|
|
562
|
-
"validators": {
|
|
563
|
-
"enabled": ["packages", "security"] // Removed "architecture"
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
```
|
|
568
|
-
|
|
569
|
-
3. Set `blockProgress: false` to continue despite failures:
|
|
570
|
-
```json
|
|
571
|
-
{
|
|
572
|
-
"checkpoints": {
|
|
573
|
-
"onFailure": { "blockProgress": false }
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
```
|
|
577
|
-
|
|
578
|
-
---
|
|
579
|
-
|
|
580
|
-
### Approval Gates Not Blocking
|
|
581
|
-
|
|
582
|
-
**Problem:** Can advance phase without approval.
|
|
583
|
-
|
|
584
|
-
**Solutions:**
|
|
585
|
-
1. Check `allowSkip` setting:
|
|
586
|
-
```json
|
|
587
|
-
{ "approvalGates": { "allowSkip": false } }
|
|
588
|
-
```
|
|
589
|
-
|
|
590
|
-
2. Ensure gate is in `required` list:
|
|
591
|
-
```json
|
|
592
|
-
{ "approvalGates": { "required": ["design", "tasks"] } }
|
|
593
|
-
```
|
|
594
|
-
|
|
595
|
-
3. Verify no `--force` flag used:
|
|
596
|
-
```bash
|
|
597
|
-
# DON'T use --force unless intentional
|
|
598
|
-
npx morph-spec phase advance {feature} # ✅ Correct
|
|
599
|
-
npx morph-spec phase advance {feature} --force # ❌ Bypasses gates
|
|
600
|
-
```
|
|
601
|
-
|
|
602
|
-
---
|
|
603
|
-
|
|
604
|
-
### MCP Data Not Injecting
|
|
605
|
-
|
|
606
|
-
**Problem:** `{{MCP_PROJECT_FILES}}` appears in rendered template.
|
|
607
|
-
|
|
608
|
-
**Solutions:**
|
|
609
|
-
1. Ensure `--with-mcp-data` flag used:
|
|
610
|
-
```bash
|
|
611
|
-
node bin/render-template.js template.md output.md '{}' --with-mcp-data
|
|
612
|
-
```
|
|
613
|
-
|
|
614
|
-
2. Check config:
|
|
615
|
-
```json
|
|
616
|
-
{ "templates": { "mcpDataInjection": true } }
|
|
617
|
-
```
|
|
618
|
-
|
|
619
|
-
3. Verify data sources available:
|
|
620
|
-
- Git repo initialized (`git log` works)
|
|
621
|
-
- Coverage file exists (`coverage/coverage-summary.json`)
|
|
622
|
-
- `.morph/state.json` exists
|
|
623
|
-
|
|
624
|
-
---
|
|
625
|
-
|
|
626
|
-
## Best Practices
|
|
627
|
-
|
|
628
|
-
### 1. Start Strict, Relax Later
|
|
629
|
-
|
|
630
|
-
Begin with **Preset 1: Strict** for first 2-3 features. Once comfortable, adjust:
|
|
631
|
-
- Reduce checkpoint frequency (3 → 5)
|
|
632
|
-
- Make some gates optional
|
|
633
|
-
- Disable MCP data if not useful
|
|
634
|
-
|
|
635
|
-
### 2. Use Approval Gates for Critical Decisions
|
|
636
|
-
|
|
637
|
-
**ALWAYS require approval for:**
|
|
638
|
-
- Design phase (spec + contracts)
|
|
639
|
-
- Tasks phase (breakdown + estimates)
|
|
640
|
-
|
|
641
|
-
**Optional approval for:**
|
|
642
|
-
- Proposal (if quick iteration needed)
|
|
643
|
-
- UI/UX (if design-heavy feature)
|
|
644
|
-
|
|
645
|
-
### 3. Checkpoint Frequency
|
|
646
|
-
|
|
647
|
-
- **High-risk features:** `frequency: 3` (every 3 tasks)
|
|
648
|
-
- **Standard features:** `frequency: 5`
|
|
649
|
-
- **Low-risk features:** `frequency: 10` or `autoValidate: false`
|
|
650
|
-
|
|
651
|
-
### 4. Pattern Library
|
|
652
|
-
|
|
653
|
-
**Day 1-30:** Focus on `searchBeforeStart: true` (leverage pre-seeded patterns)
|
|
654
|
-
**Day 30+:** Enable `captureOnComplete: true` (build your own library)
|
|
655
|
-
|
|
656
|
-
### 5. Metadata
|
|
657
|
-
|
|
658
|
-
**Always enable** `autoGenerate: true` for features with:
|
|
659
|
-
- 10+ tasks
|
|
660
|
-
- Multiple agents
|
|
661
|
-
- Complex decision history
|
|
662
|
-
|
|
663
|
-
**Skip for:**
|
|
664
|
-
- Spike/POC features
|
|
665
|
-
- 1-2 task features
|
|
666
|
-
|
|
667
|
-
---
|
|
668
|
-
|
|
669
|
-
## Schema Reference
|
|
670
|
-
|
|
671
|
-
Full JSON schema: `.morph/config/llm-interaction-schema.json`
|
|
672
|
-
|
|
673
|
-
Validate config:
|
|
674
|
-
```bash
|
|
675
|
-
# Auto-validates on phase advance, checkpoint, etc.
|
|
676
|
-
# Manual validation:
|
|
677
|
-
node -e "require('ajv')().validate(require('.morph/config/llm-interaction-schema.json'), require('.morph/config/llm-interaction.json'))"
|
|
678
|
-
```
|
|
679
|
-
|
|
680
|
-
---
|
|
681
|
-
|
|
682
|
-
## Examples
|
|
683
|
-
|
|
684
|
-
### Example 1: Enable Strict Mode Mid-Project
|
|
685
|
-
|
|
686
|
-
```bash
|
|
687
|
-
# Edit .morph/config/llm-interaction.json
|
|
688
|
-
{
|
|
689
|
-
"checkpoints": {
|
|
690
|
-
"onFailure": { "blockProgress": true } // Changed from false
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
# Next task will block on checkpoint failure
|
|
695
|
-
npx morph-spec task done my-feature T007
|
|
696
|
-
```
|
|
697
|
-
|
|
698
|
-
---
|
|
699
|
-
|
|
700
|
-
### Example 2: Disable Agent Spawning Suggestions
|
|
701
|
-
|
|
702
|
-
```bash
|
|
703
|
-
# Edit .morph/config/llm-interaction.json
|
|
704
|
-
{
|
|
705
|
-
"agentSpawning": { "enabled": false }
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
# LLM will never suggest spawning agents, even if thresholds met
|
|
709
|
-
```
|
|
710
|
-
|
|
711
|
-
---
|
|
712
|
-
|
|
713
|
-
### Example 3: Custom Checkpoint Frequency
|
|
714
|
-
|
|
715
|
-
```bash
|
|
716
|
-
# Edit .morph/config/llm-interaction.json
|
|
717
|
-
{
|
|
718
|
-
"checkpoints": { "frequency": 5 }
|
|
719
|
-
}
|
|
720
|
-
|
|
721
|
-
# Checkpoints now at T005, T010, T015 instead of T003, T006, T009
|
|
722
|
-
```
|
|
723
|
-
|
|
724
|
-
---
|
|
725
|
-
|
|
726
|
-
## See Also
|
|
727
|
-
|
|
728
|
-
- [CLAUDE.md](../CLAUDE.md) - LLM instructions for using these features
|
|
729
|
-
- [.morph/templates/MCP-TEMPLATES-README.md](.morph/templates/MCP-TEMPLATES-README.md) - MCP data placeholders
|
|
730
|
-
- [.morph/templates/decision-prompts.md](.morph/templates/decision-prompts.md) - Decision templates
|
|
731
|
-
- [.morph/memory/patterns-learned.md](.morph/memory/patterns-learned.md) - Pattern library
|
|
732
|
-
|
|
733
|
-
---
|
|
734
|
-
|
|
735
|
-
*MORPH-SPEC v3.0 - LLM Interaction Configuration Guide*
|