@polymorphism-tech/morph-spec 4.9.0 → 4.10.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/README.md +2 -2
- package/bin/morph-spec.js +30 -0
- package/bin/task-manager.js +34 -22
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +1 -1
- package/docs/QUICKSTART.md +1 -1
- package/framework/CLAUDE.md +99 -98
- package/framework/agents.json +37 -7
- package/framework/commands/commit.md +166 -0
- package/framework/commands/morph-apply.md +13 -2
- package/framework/commands/morph-archive.md +8 -2
- package/framework/commands/morph-infra.md +6 -0
- package/framework/commands/morph-preflight.md +6 -0
- package/framework/commands/morph-proposal.md +56 -7
- package/framework/commands/morph-status.md +6 -0
- package/framework/commands/morph-troubleshoot.md +6 -0
- package/framework/hooks/claude-code/notification/approval-reminder.js +3 -2
- package/framework/hooks/claude-code/post-tool-use/dispatch.js +154 -31
- package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +7 -84
- package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +8 -17
- package/framework/hooks/claude-code/pre-compact/save-morph-context.js +16 -3
- package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +4 -3
- package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +3 -2
- package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +60 -0
- package/framework/hooks/claude-code/session-start/inject-morph-context.js +55 -2
- package/framework/hooks/claude-code/session-start/post-compact-restore.js +41 -0
- package/framework/hooks/claude-code/stop/validate-completion.js +2 -15
- package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +23 -5
- package/framework/hooks/shared/compact-restore.js +100 -0
- package/framework/hooks/shared/dispatch-helpers.js +116 -0
- package/framework/hooks/shared/phase-utils.js +9 -5
- package/framework/hooks/shared/state-reader.js +27 -3
- package/framework/phases.json +30 -7
- package/framework/rules/morph-workflow.md +88 -86
- package/framework/skills/level-0-meta/mcp-registry.json +86 -51
- package/framework/skills/level-0-meta/{brainstorming → morph-brainstorming}/SKILL.md +13 -16
- package/framework/skills/level-0-meta/{code-review → morph-code-review}/SKILL.md +1 -1
- package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/SKILL.md +2 -2
- package/framework/skills/level-0-meta/{frontend-review → morph-frontend-review}/SKILL.md +5 -5
- package/framework/skills/level-0-meta/morph-init/SKILL.md +72 -7
- package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/SKILL.md +9 -9
- package/framework/skills/level-0-meta/morph-replicate/SKILL.md +1 -1
- package/framework/skills/level-0-meta/{terminal-title → morph-terminal-title}/SKILL.md +1 -1
- package/framework/skills/level-0-meta/{tool-usage-guide → morph-tool-usage-guide}/SKILL.md +2 -3
- package/framework/skills/level-0-meta/{tool-usage-guide → morph-tool-usage-guide}/references/tools-per-phase.md +1 -2
- package/framework/skills/level-0-meta/{verification-before-completion → morph-verification-before-completion}/SKILL.md +1 -1
- package/framework/skills/level-0-meta/{verification-before-completion → morph-verification-before-completion}/scripts/check-phase-outputs.mjs +2 -2
- package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +238 -0
- package/framework/skills/level-1-workflows/{phase-codebase-analysis → morph-phase-codebase-analysis}/SKILL.md +251 -251
- package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +507 -0
- package/framework/skills/level-1-workflows/{phase-implement → morph-phase-implement}/SKILL.md +590 -491
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/code-quality-reviewer-prompt.md +50 -0
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +45 -0
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +47 -0
- package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +254 -0
- package/framework/skills/level-1-workflows/{phase-setup → morph-phase-setup}/SKILL.md +237 -194
- package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/SKILL.md +307 -270
- package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/scripts/validate-tasks.mjs +3 -3
- package/framework/skills/level-1-workflows/{phase-uiux → morph-phase-uiux}/SKILL.md +320 -285
- package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +97 -0
- package/framework/standards/integration/mcp/mcp-tools.md +25 -7
- package/framework/templates/docs/onboarding.md +2 -2
- package/package.json +1 -2
- package/src/commands/agents/dispatch-agents.js +50 -3
- package/src/commands/mcp/mcp-setup.js +39 -2
- package/src/commands/phase/phase-reset.js +74 -0
- package/src/commands/project/doctor.js +19 -5
- package/src/commands/scope/escalate.js +215 -0
- package/src/commands/state/advance-phase.js +27 -53
- package/src/commands/state/state.js +1 -1
- package/src/commands/task/expand.js +100 -0
- package/src/core/paths/output-schema.js +4 -3
- package/src/core/state/phase-state-machine.js +7 -4
- package/src/core/state/state-manager.js +4 -3
- package/src/lib/detectors/claude-config-detector.js +93 -347
- package/src/lib/detectors/design-system-detector.js +189 -189
- package/src/lib/detectors/index.js +155 -57
- package/src/lib/generators/context-generator.js +2 -2
- package/src/lib/installers/mcp-installer.js +37 -5
- package/src/lib/phase-chain/phase-validator.js +22 -16
- package/src/lib/scope/impact-analyzer.js +106 -0
- package/src/lib/tasks/task-parser.js +1 -1
- package/src/lib/validators/shared/emit-validator-dispatch.js +64 -0
- package/src/scripts/setup-infra.js +15 -0
- package/src/utils/agents-installer.js +32 -12
- package/src/utils/file-copier.js +0 -1
- package/src/utils/hooks-installer.js +15 -1
- package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +0 -216
- package/framework/skills/level-1-workflows/phase-design/SKILL.md +0 -383
- package/src/commands/project/index.js +0 -8
- package/src/core/index.js +0 -10
- package/src/core/state/index.js +0 -8
- package/src/core/templates/index.js +0 -9
- package/src/core/templates/template-data-sources.js +0 -325
- package/src/core/workflows/index.js +0 -7
- package/src/lib/detectors/config-detector.js +0 -223
- package/src/lib/detectors/standards-generator.js +0 -335
- package/src/lib/detectors/structure-detector.js +0 -275
- package/src/lib/monitor/agent-resolver.js +0 -144
- package/src/lib/monitor/renderer.js +0 -230
- package/src/lib/orchestration/index.js +0 -7
- package/src/lib/orchestration/team-orchestrator.js +0 -404
- package/src/sanitizer/context-sanitizer.js +0 -221
- package/src/sanitizer/patterns.js +0 -163
- package/src/writer/file-writer.js +0 -86
- /package/framework/skills/level-0-meta/{brainstorming → morph-brainstorming}/references/proposal-example.md +0 -0
- /package/framework/skills/level-0-meta/{code-review → morph-code-review}/references/review-example.md +0 -0
- /package/framework/skills/level-0-meta/{code-review → morph-code-review}/references/review-guidelines.md +0 -0
- /package/framework/skills/level-0-meta/{code-review → morph-code-review}/scripts/scan-csharp.mjs +0 -0
- /package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/references/review-example-nextjs.md +0 -0
- /package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/scripts/scan-nextjs.mjs +0 -0
- /package/framework/skills/level-0-meta/{frontend-review → morph-frontend-review}/scripts/scan-accessibility.mjs +0 -0
- /package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/scripts/detect-dev-server.mjs +0 -0
- /package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/scripts/detect-stack.mjs +0 -0
- /package/framework/skills/level-0-meta/{simulation-checklist → morph-simulation-checklist}/SKILL.md +0 -0
- /package/framework/skills/level-0-meta/{terminal-title → morph-terminal-title}/scripts/set_title.sh +0 -0
- /package/framework/skills/level-1-workflows/{phase-clarify → morph-phase-clarify}/references/clarifications-example.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-design → morph-phase-design}/references/architecture-analysis-guide.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-design → morph-phase-design}/references/spec-authoring-guide.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-design → morph-phase-design}/references/spec-example.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-implement → morph-phase-implement}/references/recap-example.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-implement → morph-phase-implement}/references/vsa-implementation-guide.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/references/task-planning-patterns.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/references/tasks-example.md +0 -0
|
@@ -0,0 +1,238 @@
|
|
|
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 "Encerrar 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
|
|
7
|
+
cliVersion: "4.10.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# MORPH Clarify - FASE 3
|
|
11
|
+
|
|
12
|
+
> INTERNAL: Workflow skill used by /morph-proposal during automated phase orchestration. Not a user command.
|
|
13
|
+
|
|
14
|
+
Elimine ambiguidades da especificação através de um loop iterativo de perguntas até que o spec tenha qualidade suficiente para gerar tasks.
|
|
15
|
+
|
|
16
|
+
## Pré-requisitos
|
|
17
|
+
|
|
18
|
+
- [ ] FASE 2 (Design) concluída
|
|
19
|
+
- [ ] `spec.md` aprovado pelo usuário
|
|
20
|
+
- [ ] `contracts.cs` definidos
|
|
21
|
+
|
|
22
|
+
## Ferramentas Recomendadas
|
|
23
|
+
|
|
24
|
+
> **Ref:** `framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md` para guia completo.
|
|
25
|
+
> **Example:** `references/clarifications-example.md` — filled-in clarifications.md showing expected Q&A format.
|
|
26
|
+
|
|
27
|
+
| Ação | Ferramenta |
|
|
28
|
+
|------|------------|
|
|
29
|
+
| Ler spec.md + contracts.cs | **Read** |
|
|
30
|
+
| Verificar viabilidade técnica | **Context7 MCP** `query_docs()` |
|
|
31
|
+
| Verificar issues/limitações externas | **GitHub MCP** `search_issues()` |
|
|
32
|
+
| Atualizar spec com clarificações | **Edit** spec.md |
|
|
33
|
+
| Criar clarifications.md | **Write** |
|
|
34
|
+
| Atualizar state | **Bash** `npx morph-spec state mark-output $ARGUMENTS clarifications` |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Sistema de Pontuação de Satisfação
|
|
39
|
+
|
|
40
|
+
Antes de cada round, calcule o **Satisfaction Score (0–100)** avaliando o spec atual:
|
|
41
|
+
|
|
42
|
+
| Dimensão | Pts | Critério de máxima pontuação |
|
|
43
|
+
|----------|-----|------------------------------|
|
|
44
|
+
| **Completude funcional** | 25 | Todos os requisitos têm critérios de aceitação mensuráveis (sem "deve", "pode", "em geral") |
|
|
45
|
+
| **Cobertura de falhas** | 20 | Todos os caminhos de erro têm comportamento definido (invalid input, not found, timeout, unauthorized) |
|
|
46
|
+
| **Edge cases** | 20 | Limites, estados concorrentes, inputs vazios/extremos documentados |
|
|
47
|
+
| **Clareza definitória** | 20 | Nenhum termo crítico sem definição, nenhum "TBD", nenhum "a definir" |
|
|
48
|
+
| **Contratos de integração** | 15 | Dependências externas têm formato de payload, erros e retry policy definidos |
|
|
49
|
+
|
|
50
|
+
**Thresholds:**
|
|
51
|
+
|
|
52
|
+
| Score | Ação |
|
|
53
|
+
|-------|------|
|
|
54
|
+
| ≥ 85 | Claude está satisfeito. Apresentar resultado e oferecer "Encerrar" como opção principal |
|
|
55
|
+
| 70–84 | Continuar. Focar perguntas nas dimensões com menor pontuação |
|
|
56
|
+
| < 70 | Continuar. Perguntas amplas cobrindo as maiores lacunas |
|
|
57
|
+
|
|
58
|
+
> O score sobe conforme as respostas são incorporadas. Não há número máximo fixo de rounds — o loop para quando o score ≥ 85 **ou** quando o usuário escolhe encerrar.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Workflow
|
|
63
|
+
|
|
64
|
+
### Inicialização
|
|
65
|
+
|
|
66
|
+
**PASSO 0 (ANTES de qualquer escrita) — Garantir fase clarify:**
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
npx morph-spec state get $ARGUMENTS
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Verifique o campo `"phase"` no output:
|
|
73
|
+
|
|
74
|
+
**Se `"phase": "clarify"`** → ✅ fase correta, prossiga.
|
|
75
|
+
|
|
76
|
+
**Se `"phase": "design"`** → execute em sequência:
|
|
77
|
+
1. `npx morph-spec approve $ARGUMENTS design`
|
|
78
|
+
2. `npx morph-spec phase advance $ARGUMENTS` (→ clarify)
|
|
79
|
+
|
|
80
|
+
**Qualquer outro valor** → ⛔ não prossiga — estado inconsistente, reporte ao usuário.
|
|
81
|
+
|
|
82
|
+
> **Regra:** Nunca escreva `clarifications.md` ou atualize `spec.md` enquanto a fase não for `clarify`.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
Leia os arquivos base:
|
|
87
|
+
- `.morph/features/$ARGUMENTS/1-design/spec.md`
|
|
88
|
+
- `.morph/features/$ARGUMENTS/1-design/contracts.cs`
|
|
89
|
+
- `.morph/features/$ARGUMENTS/1-design/schema-analysis.md` (se existir)
|
|
90
|
+
|
|
91
|
+
Calcule o score inicial. Registre mentalmente as respostas acumuladas de rounds anteriores para não repetir perguntas já respondidas.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### Loop Principal
|
|
96
|
+
|
|
97
|
+
**Repita até: score ≥ 85 OU usuário escolhe encerrar.**
|
|
98
|
+
|
|
99
|
+
#### A. Calcular Score do Round Atual
|
|
100
|
+
|
|
101
|
+
Pontue cada dimensão com base no spec + respostas acumuladas. Anote quais dimensões estão mais fracas — elas guiam as perguntas deste round.
|
|
102
|
+
|
|
103
|
+
#### B. Identificar Questões Novas
|
|
104
|
+
|
|
105
|
+
Analise apenas o que **ainda não foi respondido**. Categorize por dimensão:
|
|
106
|
+
|
|
107
|
+
| Categoria | Exemplos de questões |
|
|
108
|
+
|-----------|----------------------|
|
|
109
|
+
| **Validação** | Limites de campo, formatos aceitos, regras de negócio |
|
|
110
|
+
| **Comportamento** | O que acontece quando X falha? Estado vazio? Loading? |
|
|
111
|
+
| **Prioridade** | Must-have vs nice-to-have? MVP vs v2? |
|
|
112
|
+
| **Integração** | Webhook vs polling? Retry policy? Timeout? |
|
|
113
|
+
| **Performance** | Volume esperado? SLA de resposta? |
|
|
114
|
+
| **UX** | Mensagem de erro exibida ao usuário? Feedback visual? |
|
|
115
|
+
|
|
116
|
+
#### C. Apresentar Perguntas via `AskUserQuestion`
|
|
117
|
+
|
|
118
|
+
**Regras obrigatórias:**
|
|
119
|
+
|
|
120
|
+
1. Use `AskUserQuestion` — **NUNCA liste perguntas como texto simples**
|
|
121
|
+
2. Máximo **4 perguntas por chamada** (incluindo a opção de encerrar)
|
|
122
|
+
3. Se houver mais de 3 questões novas, faça chamadas sequenciais — mas a **opção de encerrar aparece SEMPRE na última chamada de cada round**
|
|
123
|
+
4. **SEMPRE inclua a seguinte pergunta como última do último batch de cada round:**
|
|
124
|
+
|
|
125
|
+
```json
|
|
126
|
+
{
|
|
127
|
+
"header": "Encerrar?",
|
|
128
|
+
"question": "Deseja encerrar a fase Clarify agora ou continuar refinando o spec?",
|
|
129
|
+
"multiSelect": false,
|
|
130
|
+
"options": [
|
|
131
|
+
{
|
|
132
|
+
"label": "Continuar refinando",
|
|
133
|
+
"description": "Claude identificou mais questões abertas neste round"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"label": "Encerrar Clarify",
|
|
137
|
+
"description": "Prosseguir para fase Tasks com o spec no estado atual"
|
|
138
|
+
}
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
> Se score ≥ 85, ajuste o label da primeira opção para: `"Continuar (opcional)"` com description: `"Score ${score}/100 — spec está satisfatório, mas você pode refinar mais"`
|
|
144
|
+
|
|
145
|
+
#### D. Aguardar e Incorporar Respostas
|
|
146
|
+
|
|
147
|
+
**Não avance antes de receber todas as respostas.**
|
|
148
|
+
|
|
149
|
+
Após receber:
|
|
150
|
+
1. Verifique se a resposta é consistente com `contracts.cs` e `schema-analysis.md`
|
|
151
|
+
2. Se alguma resposta for ambígua ou contraditória → peça esclarecimento antes de atualizar
|
|
152
|
+
3. Atualize `spec.md` com:
|
|
153
|
+
- Seção `## Clarifications (FASE 3)` com Q&A estruturado
|
|
154
|
+
- Atualização das seções funcionais afetadas
|
|
155
|
+
- Novos edge cases em `## Edge Cases`
|
|
156
|
+
|
|
157
|
+
#### E. Verificar Condição de Saída
|
|
158
|
+
|
|
159
|
+
- Usuário escolheu **"Encerrar Clarify"** → sair do loop
|
|
160
|
+
- Score ≥ 85 E nenhuma questão nova identificada → sair do loop
|
|
161
|
+
- Caso contrário → voltar para A
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
### Pós-Loop: Gerar Outputs
|
|
166
|
+
|
|
167
|
+
**Passo 1: Criar `clarifications.md`**
|
|
168
|
+
|
|
169
|
+
Escreva em `.morph/features/$ARGUMENTS/1-design/clarifications.md`:
|
|
170
|
+
|
|
171
|
+
```markdown
|
|
172
|
+
# Clarifications — {Feature Name}
|
|
173
|
+
|
|
174
|
+
**Fase:** CLARIFY (Fase 3)
|
|
175
|
+
**Rounds realizados:** {N}
|
|
176
|
+
**Score final:** {score}/100
|
|
177
|
+
**Status:** Resolvido — incorporado em spec.md
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Questions & Answers
|
|
182
|
+
|
|
183
|
+
### Q{N}: {Título}
|
|
184
|
+
**Question:** {pergunta}
|
|
185
|
+
**Answer:** {resposta do usuário}
|
|
186
|
+
**Spec Updates:** {quais seções foram atualizadas}
|
|
187
|
+
**Priority:** High/Medium/Low
|
|
188
|
+
**Resolved:** ✅ Yes
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Edge Cases
|
|
193
|
+
|
|
194
|
+
### EC{N}: {Nome}
|
|
195
|
+
**Scenario:** {quando acontece}
|
|
196
|
+
**Expected Behavior:** {como o sistema reage}
|
|
197
|
+
**Implementation Notes:** {dicas}
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Summary
|
|
202
|
+
|
|
203
|
+
| | Count |
|
|
204
|
+
|---|---|
|
|
205
|
+
| Questions Answered | {N} |
|
|
206
|
+
| Edge Cases Documented | {N} |
|
|
207
|
+
| Spec Sections Updated | {N} |
|
|
208
|
+
| Score Final | {score}/100 |
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Passo 2: Atualizar State**
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
npx morph-spec state mark-output $ARGUMENTS clarifications
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Outputs Gerados/Atualizados
|
|
220
|
+
|
|
221
|
+
- `.morph/features/$ARGUMENTS/1-design/spec.md` — Seção "Clarifications", edge cases, requisitos refinados
|
|
222
|
+
- `.morph/features/$ARGUMENTS/1-design/clarifications.md` — Q&A estruturado com score final
|
|
223
|
+
|
|
224
|
+
## Critérios de Avanço
|
|
225
|
+
|
|
226
|
+
- [x] Score de satisfação ≥ 85 OU usuário optou por encerrar
|
|
227
|
+
- [x] Todas as respostas são consistentes com `contracts.cs`
|
|
228
|
+
- [x] `spec.md` atualizado com clarificações e edge cases
|
|
229
|
+
- [x] `clarifications.md` criado com Q&A e score final
|
|
230
|
+
- [x] State atualizado (`mark-output clarifications`)
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
npx morph-spec phase advance $ARGUMENTS
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Continuar automaticamente para FASE 4 (Plan) após clarifications.md gerado.
|