@polymorphism-tech/morph-spec 4.10.6 → 4.10.8

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 (149) hide show
  1. package/CLAUDE.md +3 -0
  2. package/LICENSE +71 -71
  3. package/README.md +379 -379
  4. package/bin/morph-spec.js +89 -0
  5. package/bin/task-manager.js +59 -6
  6. package/claude-plugin.json +14 -14
  7. package/docs/CHEATSHEET.md +1 -1
  8. package/docs/QUICKSTART.md +206 -206
  9. package/framework/agents/README.md +14 -14
  10. package/framework/agents/architecture/standards-architect.md +159 -159
  11. package/framework/agents/frontend/blazor-builder.md +13 -0
  12. package/framework/agents/frontend/css-specialist.md +87 -0
  13. package/framework/agents/frontend/nextjs-expert.md +13 -0
  14. package/framework/agents/frontend/nextjs-ui-specialist.md +218 -0
  15. package/framework/agents/frontend/ui-ux-designer.md +80 -10
  16. package/framework/agents/infrastructure/azure-architect.md +149 -149
  17. package/framework/agents/infrastructure/infra-architect.md +48 -48
  18. package/framework/agents.json +2268 -2567
  19. package/framework/hooks/README.md +204 -204
  20. package/framework/hooks/claude-code/post-tool-use/dispatch.js +10 -5
  21. package/framework/hooks/claude-code/session-start/inject-morph-context.js +10 -24
  22. package/framework/hooks/shared/phase-utils.js +139 -139
  23. package/framework/hooks/shared/worktree-helpers.js +30 -8
  24. package/framework/rules/csharp-standards.md +13 -13
  25. package/framework/rules/frontend-standards.md +13 -13
  26. package/framework/rules/infrastructure-standards.md +16 -16
  27. package/framework/rules/testing-standards.md +14 -14
  28. package/framework/skills/README.md +0 -1
  29. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +12 -0
  30. package/framework/skills/level-0-meta/morph-code-review-nextjs/references/review-example-nextjs.md +254 -254
  31. package/framework/skills/level-0-meta/morph-init/SKILL.md +88 -3
  32. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +247 -247
  33. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +270 -270
  34. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +515 -499
  35. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +508 -471
  36. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +12 -1
  37. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +272 -258
  38. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +317 -311
  39. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +424 -323
  40. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
  41. package/framework/standards/STANDARDS.json +2040 -2040
  42. package/framework/standards/frontend/nextjs/motion-patterns.md +321 -0
  43. package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -17
  44. package/framework/templates/README.md +814 -814
  45. package/framework/templates/code/dotnet/contracts/Commands.cs +74 -74
  46. package/framework/templates/code/dotnet/contracts/Entities.cs +25 -25
  47. package/framework/templates/code/dotnet/contracts/Queries.cs +74 -74
  48. package/framework/templates/code/dotnet/contracts/README.md +74 -74
  49. package/framework/templates/code/dotnet/contracts/api-contracts.cs +173 -173
  50. package/framework/templates/code/dotnet/frontend/component.razor +239 -239
  51. package/framework/templates/code/dotnet/jobs/agent.cs +163 -163
  52. package/framework/templates/code/dotnet/jobs/job.cs +171 -171
  53. package/framework/templates/code/dotnet/test.cs +239 -239
  54. package/framework/templates/code/sql/rls-policy.sql +57 -57
  55. package/framework/templates/code/sql/supabase-migration.sql +100 -100
  56. package/framework/templates/code/sql/supabase-migration.template.sql +113 -113
  57. package/framework/templates/code/typescript/contracts.ts +168 -168
  58. package/framework/templates/context/CONTEXT.md +181 -181
  59. package/framework/templates/context/design-system.md +211 -0
  60. package/framework/templates/docs/proposal.md +182 -182
  61. package/framework/templates/docs/user-stories.md +34 -34
  62. package/framework/templates/examples/design-system-examples.md +357 -357
  63. package/framework/templates/examples/spec-examples.md +90 -90
  64. package/framework/templates/feature/decisions.md +187 -187
  65. package/framework/templates/feature/recap.md +146 -146
  66. package/framework/templates/feature/tasks.md +199 -199
  67. package/framework/templates/infrastructure/azure/README.md +286 -286
  68. package/framework/templates/infrastructure/azure/deploy-checklist.md +426 -426
  69. package/framework/templates/infrastructure/azure/parameters.dev.json +29 -29
  70. package/framework/templates/infrastructure/azure/parameters.prod.json +29 -29
  71. package/framework/templates/infrastructure/azure/parameters.staging.json +29 -29
  72. package/framework/templates/infrastructure/docker/docker-compose.template.yml +67 -67
  73. package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
  74. package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
  75. package/framework/templates/infrastructure/docker/easypanel.template.json +54 -54
  76. package/package.json +82 -82
  77. package/src/commands/agents/agent-metrics.js +174 -0
  78. package/src/commands/agents/audit-dispatch.js +82 -0
  79. package/src/commands/agents/detect-agents.js +275 -0
  80. package/src/commands/agents/dispatch-agents.js +41 -135
  81. package/src/commands/agents/index.js +13 -4
  82. package/src/commands/agents/manage-agents.js +352 -0
  83. package/src/commands/project/doctor.js +59 -0
  84. package/src/commands/project/install-plugin-cmd.js +28 -28
  85. package/src/commands/project/setup-infra-cmd.js +12 -12
  86. package/src/commands/project/update.js +1 -17
  87. package/src/commands/project/worktree.js +58 -2
  88. package/src/commands/state/advance-phase.js +11 -3
  89. package/src/commands/tasks/index.js +4 -4
  90. package/src/commands/templates/index.js +5 -5
  91. package/src/commands/utils/index.js +3 -3
  92. package/src/commands/validation/index.js +4 -4
  93. package/src/core/state/phase-state-machine.js +217 -217
  94. package/src/core/state/state-manager.js +81 -0
  95. package/src/lib/agents/agents-manager.js +349 -0
  96. package/src/lib/agents/metrics-calculator.js +125 -0
  97. package/src/lib/agents/output-collector.js +75 -0
  98. package/src/lib/generators/context-generator.js +8 -7
  99. package/src/lib/generators/design-system-generator.js +298 -298
  100. package/src/lib/generators/index.js +10 -10
  101. package/src/lib/generators/metadata-extractor.js +387 -387
  102. package/src/lib/stack-filter.js +65 -65
  103. package/src/lib/standards/index.js +7 -7
  104. package/src/lib/standards/standards-context-injector.js +302 -302
  105. package/src/lib/tasks/task-parser.js +94 -3
  106. package/src/lib/validators/architecture/architecture-validator.js +387 -387
  107. package/src/lib/validators/architecture/index.js +7 -7
  108. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +316 -316
  109. package/src/lib/validators/blazor/blazor-state-validator.js +279 -279
  110. package/src/lib/validators/blazor/blazor-validator.js +369 -369
  111. package/src/lib/validators/blazor/index.js +9 -9
  112. package/src/lib/validators/checkpoint-persistence.js +39 -0
  113. package/src/lib/validators/content/content-validator.js +287 -279
  114. package/src/lib/validators/content/index.js +7 -7
  115. package/src/lib/validators/contracts/index.js +7 -7
  116. package/src/lib/validators/css/css-validator.js +352 -352
  117. package/src/lib/validators/css/index.js +7 -7
  118. package/src/lib/validators/design-system/design-system-validator.js +231 -231
  119. package/src/lib/validators/design-system/index.js +7 -7
  120. package/src/lib/validators/nextjs/index.js +6 -6
  121. package/src/lib/validators/nextjs/next-component-validator.js +183 -183
  122. package/src/lib/validators/packages/index.js +7 -7
  123. package/src/lib/validators/packages/package-validator.js +360 -360
  124. package/src/lib/validators/shared/index.js +12 -12
  125. package/src/lib/validators/shared/issue-counter.js +18 -18
  126. package/src/lib/validators/shared/result-formatter.js +124 -124
  127. package/src/lib/validators/spec-validator.js +2 -2
  128. package/src/lib/validators/ui/index.js +7 -7
  129. package/src/lib/validators/ui/ui-contrast-validator.js +422 -422
  130. package/src/lib/validators/validation-runner.js +20 -0
  131. package/src/scripts/global-install.js +58 -58
  132. package/src/scripts/install-plugin.js +126 -126
  133. package/src/scripts/setup-infra.js +1 -17
  134. package/src/utils/agent-id-mapper.js +11 -0
  135. package/src/utils/agents-installer.js +40 -8
  136. package/src/utils/claude-md-injector.js +90 -90
  137. package/src/utils/claude-settings-manager.js +1 -1
  138. package/src/utils/file-copier.js +200 -196
  139. package/src/utils/hooks-installer.js +556 -739
  140. package/src/utils/logger.js +32 -32
  141. package/src/utils/skills-installer.js +178 -178
  142. package/src/utils/tier-helpers.js +24 -0
  143. package/src/utils/version-checker.js +175 -175
  144. package/framework/agents/architecture/po-pm-advisor.md +0 -203
  145. package/framework/hooks/claude-code/user-prompt/set-terminal-title.js +0 -68
  146. package/framework/skills/level-1-workflows/morph-phase-implement/.morph/logs/activity.json +0 -38
  147. package/framework/skills/level-1-workflows/morph-phase-tasks/.morph/logs/activity.json +0 -14
  148. package/framework/templates/.idea/morph-templates.xml +0 -92
  149. package/framework/templates/.vscode/morph-templates.code-snippets +0 -186
@@ -1,247 +1,247 @@
1
- ---
2
- name: morph-phase-clarify
3
- description: MORPH-SPEC Phase 3 (Clarify). Iterative clarification loop driven by a satisfaction score (0-100). Generates targeted questions per round, always presents "End Clarify" as exit option, and stops when score >= 85 or user exits. Use after design approval to eliminate spec ambiguities before task breakdown begins.
4
- argument-hint: "[feature-name]"
5
- user-invocable: false
6
- allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
7
- cliVersion: "4.10.6"
8
- ---
9
-
10
- # MORPH Clarify — Phase 3
11
-
12
- > INTERNAL: Workflow skill used by /morph-proposal during automated phase orchestration. Not a user command.
13
-
14
- Eliminate spec ambiguities through an iterative question loop until the spec has sufficient quality to generate tasks.
15
-
16
- ## Prerequisites
17
-
18
- - [ ] Phase 2 (Design) completed
19
- - [ ] `spec.md` approved by user
20
- - [ ] `contracts.cs` (or `contracts.ts`) defined
21
-
22
- ## Recommended Tools
23
-
24
- > **Ref:** `framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md` for complete guide.
25
- > **Example:** `references/clarifications-example.md` — filled-in clarifications.md showing expected Q&A format.
26
-
27
- | Action | Tool | Alternative |
28
- |--------|------|-------------|
29
- | Read spec + contracts | **Read** all design outputs | — |
30
- | Verify technical feasibility | **Context7 MCP** `query_docs()` | **WebSearch** |
31
- | Check external issues/limitations | **GitHub MCP** `search_issues()` | — |
32
- | Ask clarifying questions | **AskUserQuestion** (never plain text) | — |
33
- | Update spec with clarifications | **Edit** spec.md | — |
34
- | Create clarifications.md | **Write** | — |
35
- | Update state | **Bash** `npx morph-spec state mark-output $ARGUMENTS clarifications` | — |
36
-
37
- ---
38
-
39
- ## Satisfaction Scoring System
40
-
41
- Before each round, calculate the **Satisfaction Score (0-100)** by evaluating the current spec:
42
-
43
- | Dimension | Pts | Maximum Score Criteria |
44
- |-----------|-----|----------------------|
45
- | **Functional completeness** | 25 | All requirements have measurable acceptance criteria (no vague "should", "may", "generally") |
46
- | **Failure coverage** | 20 | All error paths have defined behavior (invalid input, not found, timeout, unauthorized) |
47
- | **Edge cases** | 20 | Boundaries, concurrent states, empty/extreme inputs documented |
48
- | **Definitional clarity** | 20 | No critical term undefined, no "TBD", no "to be defined" |
49
- | **Integration contracts** | 15 | External dependencies have payload format, errors, and retry policy defined |
50
-
51
- **Thresholds:**
52
-
53
- | Score | Action |
54
- |-------|--------|
55
- | >= 85 | Satisfied. Present results and offer "End Clarify" as the primary option |
56
- | 70-84 | Continue. Focus questions on the lowest-scoring dimensions |
57
- | < 70 | Continue. Broad questions covering the largest gaps |
58
-
59
- > The score rises as answers are incorporated. There's no fixed maximum rounds — the loop ends when score >= 85 **or** the user chooses to end.
60
-
61
- ---
62
-
63
- ## Workflow
64
-
65
- ### Initialization
66
-
67
- **Step 0 (BEFORE any writing) — Ensure clarify phase:**
68
-
69
- ```bash
70
- npx morph-spec state get $ARGUMENTS
71
- ```
72
-
73
- Check the `"phase"` field in the output:
74
-
75
- **If `"phase": "clarify"`** → correct phase, proceed.
76
-
77
- **If `"phase": "design"`** → run in sequence:
78
- 1. `npx morph-spec approve $ARGUMENTS design`
79
- 2. `npx morph-spec phase advance $ARGUMENTS` (→ clarify)
80
-
81
- **Any other value** → STOP — inconsistent state, report to user.
82
-
83
- > **Rule:** Never write `clarifications.md` or update `spec.md` until the phase is `clarify`.
84
-
85
- ---
86
-
87
- Read the base files in PARALLEL:
88
-
89
- ```
90
- Read: .morph/features/$ARGUMENTS/1-design/spec.md
91
- + Read: .morph/features/$ARGUMENTS/1-design/contracts.cs (or contracts.ts for TypeScript)
92
- + Read: .morph/features/$ARGUMENTS/1-design/schema-analysis.md (if exists)
93
- ```
94
-
95
- Calculate the initial score. Track accumulated answers from prior rounds to avoid repeating already-answered questions.
96
-
97
- ---
98
-
99
- ### Main Loop
100
-
101
- **Repeat until: score >= 85 OR user chooses to end.**
102
-
103
- #### A. Calculate Current Round Score
104
-
105
- Score each dimension based on the spec + accumulated answers. Note which dimensions are weakest — they guide this round's questions.
106
-
107
- #### B. Identify New Questions
108
-
109
- Analyze only what **hasn't been answered yet**. Categorize by dimension:
110
-
111
- | Category | Example Questions |
112
- |----------|-------------------|
113
- | **Validation** | Field limits, accepted formats, business rules |
114
- | **Behavior** | What happens when X fails? Empty state? Loading state? |
115
- | **Priority** | Must-have vs nice-to-have? MVP vs v2? |
116
- | **Integration** | Webhook vs polling? Retry policy? Timeout? |
117
- | **Performance** | Expected volume? Response SLA? |
118
- | **UX** | Error message shown to user? Visual feedback? |
119
-
120
- #### C. Present Questions via `AskUserQuestion`
121
-
122
- **Why this matters:** AskUserQuestion gives structured options the user can click — far better UX than walls of text. It also captures answers programmatically for the clarifications.md output.
123
-
124
- **Rules:**
125
-
126
- 1. Use `AskUserQuestion` — **NEVER list questions as plain text**
127
- 2. Maximum **4 questions per call** (tool limit)
128
- 3. If there are more than 3 new questions, make sequential calls — the **exit option always appears in the last call of each round**
129
- 4. **Always include the following question as the last in the final batch of each round:**
130
-
131
- ```json
132
- {
133
- "header": "End Clarify?",
134
- "question": "End the Clarify phase now or continue refining the spec?",
135
- "multiSelect": false,
136
- "options": [
137
- {
138
- "label": "Continue refining",
139
- "description": "There are still open questions identified in this round"
140
- },
141
- {
142
- "label": "End Clarify",
143
- "description": "Proceed to Plan phase with the spec in its current state"
144
- }
145
- ]
146
- }
147
- ```
148
-
149
- > If score >= 85, adjust the first option label to: `"Continue (optional)"` with description: `"Score ${score}/100 — spec is satisfactory, but you can refine further"`
150
-
151
- #### D. Wait and Incorporate Answers
152
-
153
- **Do not proceed before receiving all responses.**
154
-
155
- After receiving answers:
156
- 1. Check if the answer is consistent with `contracts.cs` and `schema-analysis.md`
157
- 2. If any answer is ambiguous or contradictory → ask for clarification before updating
158
- 3. Update `spec.md` with:
159
- - Section `## Clarifications (Phase 3)` with structured Q&A
160
- - Updates to affected functional sections
161
- - New edge cases in `## Edge Cases`
162
-
163
- #### E. Check Exit Condition
164
-
165
- - User chose **"End Clarify"** → exit loop
166
- - Score >= 85 AND no new questions identified → exit loop
167
- - Otherwise → return to A
168
-
169
- ---
170
-
171
- ### Post-Loop: Generate Outputs
172
-
173
- **Step 1: Create `clarifications.md`**
174
-
175
- Write to `.morph/features/$ARGUMENTS/1-design/clarifications.md`:
176
-
177
- ```markdown
178
- # Clarifications — {Feature Name}
179
-
180
- **Phase:** Clarify (Phase 3)
181
- **Rounds completed:** {N}
182
- **Final score:** {score}/100
183
- **Status:** Resolved — incorporated into spec.md
184
-
185
- ---
186
-
187
- ## Questions & Answers
188
-
189
- ### Q{N}: {Title}
190
- **Question:** {question}
191
- **Answer:** {user's answer}
192
- **Spec Updates:** {which sections were updated}
193
- **Priority:** High/Medium/Low
194
- **Resolved:** Yes
195
-
196
- ---
197
-
198
- ## Edge Cases
199
-
200
- ### EC{N}: {Name}
201
- **Scenario:** {when it happens}
202
- **Expected Behavior:** {how the system reacts}
203
- **Implementation Notes:** {tips}
204
-
205
- ---
206
-
207
- ## Summary
208
-
209
- | | Count |
210
- |---|---|
211
- | Questions Answered | {N} |
212
- | Edge Cases Documented | {N} |
213
- | Spec Sections Updated | {N} |
214
- | Final Score | {score}/100 |
215
- ```
216
-
217
- **Step 2: Update State**
218
-
219
- ```bash
220
- npx morph-spec state mark-output $ARGUMENTS clarifications
221
- ```
222
-
223
- ---
224
-
225
- ## Phase Outputs
226
-
227
- <!-- morph-outputs:clarify -->
228
- | Output | Path |
229
- |--------|------|
230
- | `clarifications` | `.morph/features/{feature}/1-design/clarifications.md` |
231
- <!-- /morph-outputs -->
232
-
233
- ## Advancement Criteria
234
-
235
- - [x] Satisfaction score >= 85 OR user opted to end
236
- - [x] All answers are consistent with `contracts.cs`
237
- - [x] `spec.md` updated with clarifications and edge cases
238
- - [x] `clarifications.md` created with Q&A and final score
239
- - [x] State updated (`mark-output clarifications`)
240
-
241
- ---
242
-
243
- ```bash
244
- npx morph-spec phase advance $ARGUMENTS
245
- ```
246
-
247
- Continue automatically to Phase 4 (Plan) after clarifications.md is generated.
1
+ ---
2
+ name: morph-phase-clarify
3
+ description: MORPH-SPEC Phase 3 (Clarify). Iterative clarification loop driven by a satisfaction score (0-100). Generates targeted questions per round, always presents "End Clarify" as exit option, and stops when score >= 85 or user exits. Use after design approval to eliminate spec ambiguities before task breakdown begins.
4
+ argument-hint: "[feature-name]"
5
+ user-invocable: false
6
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
7
+ cliVersion: "4.10.8"
8
+ ---
9
+
10
+ # MORPH Clarify — Phase 3
11
+
12
+ > INTERNAL: Workflow skill used by /morph-proposal during automated phase orchestration. Not a user command.
13
+
14
+ Eliminate spec ambiguities through an iterative question loop until the spec has sufficient quality to generate tasks.
15
+
16
+ ## Prerequisites
17
+
18
+ - [ ] Phase 2 (Design) completed
19
+ - [ ] `spec.md` approved by user
20
+ - [ ] `contracts.cs` (or `contracts.ts`) defined
21
+
22
+ ## Recommended Tools
23
+
24
+ > **Ref:** `framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md` for complete guide.
25
+ > **Example:** `references/clarifications-example.md` — filled-in clarifications.md showing expected Q&A format.
26
+
27
+ | Action | Tool | Alternative |
28
+ |--------|------|-------------|
29
+ | Read spec + contracts | **Read** all design outputs | — |
30
+ | Verify technical feasibility | **Context7 MCP** `query_docs()` | **WebSearch** |
31
+ | Check external issues/limitations | **GitHub MCP** `search_issues()` | — |
32
+ | Ask clarifying questions | **AskUserQuestion** (never plain text) | — |
33
+ | Update spec with clarifications | **Edit** spec.md | — |
34
+ | Create clarifications.md | **Write** | — |
35
+ | Update state | **Bash** `npx morph-spec state mark-output $ARGUMENTS clarifications` | — |
36
+
37
+ ---
38
+
39
+ ## Satisfaction Scoring System
40
+
41
+ Before each round, calculate the **Satisfaction Score (0-100)** by evaluating the current spec:
42
+
43
+ | Dimension | Pts | Maximum Score Criteria |
44
+ |-----------|-----|----------------------|
45
+ | **Functional completeness** | 25 | All requirements have measurable acceptance criteria (no vague "should", "may", "generally") |
46
+ | **Failure coverage** | 20 | All error paths have defined behavior (invalid input, not found, timeout, unauthorized) |
47
+ | **Edge cases** | 20 | Boundaries, concurrent states, empty/extreme inputs documented |
48
+ | **Definitional clarity** | 20 | No critical term undefined, no "TBD", no "to be defined" |
49
+ | **Integration contracts** | 15 | External dependencies have payload format, errors, and retry policy defined |
50
+
51
+ **Thresholds:**
52
+
53
+ | Score | Action |
54
+ |-------|--------|
55
+ | >= 85 | Satisfied. Present results and offer "End Clarify" as the primary option |
56
+ | 70-84 | Continue. Focus questions on the lowest-scoring dimensions |
57
+ | < 70 | Continue. Broad questions covering the largest gaps |
58
+
59
+ > The score rises as answers are incorporated. There's no fixed maximum rounds — the loop ends when score >= 85 **or** the user chooses to end.
60
+
61
+ ---
62
+
63
+ ## Workflow
64
+
65
+ ### Initialization
66
+
67
+ **Step 0 (BEFORE any writing) — Ensure clarify phase:**
68
+
69
+ ```bash
70
+ npx morph-spec state get $ARGUMENTS
71
+ ```
72
+
73
+ Check the `"phase"` field in the output:
74
+
75
+ **If `"phase": "clarify"`** → correct phase, proceed.
76
+
77
+ **If `"phase": "design"`** → run in sequence:
78
+ 1. `npx morph-spec approve $ARGUMENTS design`
79
+ 2. `npx morph-spec phase advance $ARGUMENTS` (→ clarify)
80
+
81
+ **Any other value** → STOP — inconsistent state, report to user.
82
+
83
+ > **Rule:** Never write `clarifications.md` or update `spec.md` until the phase is `clarify`.
84
+
85
+ ---
86
+
87
+ Read the base files in PARALLEL:
88
+
89
+ ```
90
+ Read: .morph/features/$ARGUMENTS/1-design/spec.md
91
+ + Read: .morph/features/$ARGUMENTS/1-design/contracts.cs (or contracts.ts for TypeScript)
92
+ + Read: .morph/features/$ARGUMENTS/1-design/schema-analysis.md (if exists)
93
+ ```
94
+
95
+ Calculate the initial score. Track accumulated answers from prior rounds to avoid repeating already-answered questions.
96
+
97
+ ---
98
+
99
+ ### Main Loop
100
+
101
+ **Repeat until: score >= 85 OR user chooses to end.**
102
+
103
+ #### A. Calculate Current Round Score
104
+
105
+ Score each dimension based on the spec + accumulated answers. Note which dimensions are weakest — they guide this round's questions.
106
+
107
+ #### B. Identify New Questions
108
+
109
+ Analyze only what **hasn't been answered yet**. Categorize by dimension:
110
+
111
+ | Category | Example Questions |
112
+ |----------|-------------------|
113
+ | **Validation** | Field limits, accepted formats, business rules |
114
+ | **Behavior** | What happens when X fails? Empty state? Loading state? |
115
+ | **Priority** | Must-have vs nice-to-have? MVP vs v2? |
116
+ | **Integration** | Webhook vs polling? Retry policy? Timeout? |
117
+ | **Performance** | Expected volume? Response SLA? |
118
+ | **UX** | Error message shown to user? Visual feedback? |
119
+
120
+ #### C. Present Questions via `AskUserQuestion`
121
+
122
+ **Why this matters:** AskUserQuestion gives structured options the user can click — far better UX than walls of text. It also captures answers programmatically for the clarifications.md output.
123
+
124
+ **Rules:**
125
+
126
+ 1. Use `AskUserQuestion` — **NEVER list questions as plain text**
127
+ 2. Maximum **4 questions per call** (tool limit)
128
+ 3. If there are more than 3 new questions, make sequential calls — the **exit option always appears in the last call of each round**
129
+ 4. **Always include the following question as the last in the final batch of each round:**
130
+
131
+ ```json
132
+ {
133
+ "header": "End Clarify?",
134
+ "question": "End the Clarify phase now or continue refining the spec?",
135
+ "multiSelect": false,
136
+ "options": [
137
+ {
138
+ "label": "Continue refining",
139
+ "description": "There are still open questions identified in this round"
140
+ },
141
+ {
142
+ "label": "End Clarify",
143
+ "description": "Proceed to Plan phase with the spec in its current state"
144
+ }
145
+ ]
146
+ }
147
+ ```
148
+
149
+ > If score >= 85, adjust the first option label to: `"Continue (optional)"` with description: `"Score ${score}/100 — spec is satisfactory, but you can refine further"`
150
+
151
+ #### D. Wait and Incorporate Answers
152
+
153
+ **Do not proceed before receiving all responses.**
154
+
155
+ After receiving answers:
156
+ 1. Check if the answer is consistent with `contracts.cs` and `schema-analysis.md`
157
+ 2. If any answer is ambiguous or contradictory → ask for clarification before updating
158
+ 3. Update `spec.md` with:
159
+ - Section `## Clarifications (Phase 3)` with structured Q&A
160
+ - Updates to affected functional sections
161
+ - New edge cases in `## Edge Cases`
162
+
163
+ #### E. Check Exit Condition
164
+
165
+ - User chose **"End Clarify"** → exit loop
166
+ - Score >= 85 AND no new questions identified → exit loop
167
+ - Otherwise → return to A
168
+
169
+ ---
170
+
171
+ ### Post-Loop: Generate Outputs
172
+
173
+ **Step 1: Create `clarifications.md`**
174
+
175
+ Write to `.morph/features/$ARGUMENTS/1-design/clarifications.md`:
176
+
177
+ ```markdown
178
+ # Clarifications — {Feature Name}
179
+
180
+ **Phase:** Clarify (Phase 3)
181
+ **Rounds completed:** {N}
182
+ **Final score:** {score}/100
183
+ **Status:** Resolved — incorporated into spec.md
184
+
185
+ ---
186
+
187
+ ## Questions & Answers
188
+
189
+ ### Q{N}: {Title}
190
+ **Question:** {question}
191
+ **Answer:** {user's answer}
192
+ **Spec Updates:** {which sections were updated}
193
+ **Priority:** High/Medium/Low
194
+ **Resolved:** Yes
195
+
196
+ ---
197
+
198
+ ## Edge Cases
199
+
200
+ ### EC{N}: {Name}
201
+ **Scenario:** {when it happens}
202
+ **Expected Behavior:** {how the system reacts}
203
+ **Implementation Notes:** {tips}
204
+
205
+ ---
206
+
207
+ ## Summary
208
+
209
+ | | Count |
210
+ |---|---|
211
+ | Questions Answered | {N} |
212
+ | Edge Cases Documented | {N} |
213
+ | Spec Sections Updated | {N} |
214
+ | Final Score | {score}/100 |
215
+ ```
216
+
217
+ **Step 2: Update State**
218
+
219
+ ```bash
220
+ npx morph-spec state mark-output $ARGUMENTS clarifications
221
+ ```
222
+
223
+ ---
224
+
225
+ ## Phase Outputs
226
+
227
+ <!-- morph-outputs:clarify -->
228
+ | Output | Path |
229
+ |--------|------|
230
+ | `clarifications` | `.morph/features/{feature}/1-design/clarifications.md` |
231
+ <!-- /morph-outputs -->
232
+
233
+ ## Advancement Criteria
234
+
235
+ - [x] Satisfaction score >= 85 OR user opted to end
236
+ - [x] All answers are consistent with `contracts.cs`
237
+ - [x] `spec.md` updated with clarifications and edge cases
238
+ - [x] `clarifications.md` created with Q&A and final score
239
+ - [x] State updated (`mark-output clarifications`)
240
+
241
+ ---
242
+
243
+ ```bash
244
+ npx morph-spec phase advance $ARGUMENTS
245
+ ```
246
+
247
+ Continue automatically to Phase 4 (Plan) after clarifications.md is generated.