@polymorphism-tech/morph-spec 6.0.0 → 7.1.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 +367 -366
- package/docs/CHEATSHEET.md +3 -3
- package/docs/QUICKSTART.md +4 -4
- package/framework/CLAUDE.md +13 -0
- package/framework/MORPH.md +57 -36
- package/framework/agents.json +132 -127
- package/framework/commands/morph-apply.md +4 -21
- package/framework/commands/morph-archive.md +1 -1
- package/framework/commands/morph-proposal.md +2 -0
- package/framework/hooks/claude-code/core/enforce-phase-writes.js +1 -1
- package/framework/hooks/claude-code/core/protect-spec-files.js +1 -1
- package/framework/hooks/claude-code/core/state-sync.js +212 -0
- package/framework/hooks/shared/phase-utils.js +5 -4
- package/framework/hooks/shared/state-reader.js +1 -1
- package/framework/phases.json +1 -1
- package/framework/rubrics/backend.json +41 -36
- package/framework/rules/ai-agents-standards.md +45 -15
- package/framework/rules/morph-workflow.md +15 -34
- package/framework/rules/neon-standards.md +25 -26
- package/framework/schemas/tasks.schema.json +35 -0
- package/framework/skills/core/morph-apply/SKILL.md +154 -0
- package/framework/skills/core/morph-brainstorming/SKILL.md +53 -30
- package/framework/skills/core/morph-implement/SKILL.md +25 -14
- package/framework/skills/core/morph-plan/SKILL.md +91 -23
- package/framework/skills/core/morph-proposal/SKILL.md +137 -0
- package/framework/skills/core/morph-review/SKILL.md +43 -7
- package/framework/skills/core/morph-stack-scan/SKILL.md +40 -1
- package/framework/standards/STANDARDS.json +1729 -1134
- package/framework/standards/ai-agents/agent-session.md +160 -0
- package/framework/standards/ai-agents/batching.md +193 -0
- package/framework/standards/ai-agents/context-providers.md +188 -0
- package/framework/standards/ai-agents/mcp-server.md +250 -0
- package/framework/standards/ai-agents/mcp-tools.md +197 -0
- package/framework/standards/ai-agents/middleware-patterns.md +207 -0
- package/framework/standards/ai-agents/modalities-image-gen.md +173 -0
- package/framework/standards/ai-agents/modalities-speech-to-text.md +171 -0
- package/framework/standards/ai-agents/modalities-text-to-speech.md +181 -0
- package/framework/standards/ai-agents/modalities-vision.md +201 -0
- package/framework/standards/ai-agents/multi-agent-patterns.md +155 -0
- package/framework/standards/ai-agents/production.md +114 -258
- package/framework/standards/ai-agents/prompts-in-db.md +214 -0
- package/framework/standards/ai-agents/providers/model-registry.md +158 -0
- package/framework/standards/ai-agents/rag-custom-pgvector.md +243 -0
- package/framework/standards/ai-agents/service-tier-flex.md +135 -0
- package/framework/standards/ai-agents/setup.md +142 -316
- package/framework/standards/ai-agents/structured-output.md +249 -0
- package/framework/standards/ai-agents/sweet-spot.md +109 -0
- package/framework/standards/ai-agents/workflows.md +114 -284
- package/framework/standards/architecture/vertical-slice/vertical-slice.md +433 -429
- package/framework/standards/backend/api/validation.md +92 -88
- package/framework/standards/backend/database/postgresql/database.md +336 -332
- package/framework/standards/backend/database/vector-search-rag.md +599 -541
- package/framework/standards/backend/dotnet/fluent-validation-vsa.md +4 -0
- package/framework/standards/backend/dotnet/result-pattern.md +4 -0
- package/framework/standards/backend/dotnet/scalar-ui.md +176 -172
- package/framework/standards/backend/dotnet/scrutor.md +4 -0
- package/framework/standards/backend/dotnet/vsa-handler-patterns.md +278 -274
- package/framework/standards/backend/integrations/asaas/asaas-api.md +260 -216
- package/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +354 -350
- package/framework/standards/backend/integrations/neon-auth/neon-auth.md +30 -19
- package/framework/standards/backend/integrations/resend/resend-email.md +400 -385
- package/framework/standards/data/nosql/cache/redis.md +106 -97
- package/framework/standards/data/nosql/cosmos-db.md +127 -118
- package/framework/standards/data/vector-search/rag-chunking.md +113 -104
- package/framework/standards/frontend/design-system/ai-image-generation.md +4 -0
- package/framework/standards/frontend/design-system/animations.md +164 -160
- package/framework/standards/frontend/design-system/naming.md +68 -64
- package/framework/standards/frontend/gsap/gsap-core.md +14 -8
- package/framework/standards/frontend/gsap/gsap-plugins.md +26 -21
- package/framework/standards/frontend/gsap/gsap-scrolltrigger.md +9 -7
- package/framework/standards/frontend/nextjs/app-router.md +127 -123
- package/framework/standards/frontend/nextjs/components.md +136 -132
- package/framework/standards/frontend/nextjs/data-fetching.md +130 -126
- package/framework/standards/frontend/nextjs/forms.md +134 -128
- package/framework/standards/frontend/nextjs/motion-patterns.md +328 -322
- package/framework/standards/frontend/nextjs/naming-conventions.md +71 -67
- package/framework/standards/frontend/nextjs/nextjs-patterns.md +229 -225
- package/framework/standards/frontend/nextjs/project-structure.md +106 -102
- package/framework/standards/frontend/nextjs/state-management.md +76 -72
- package/framework/standards/frontend/nextjs/testing.md +115 -111
- package/framework/standards/infrastructure/docker/easypanel-deploy.md +196 -192
- package/framework/standards/infrastructure/neon/neon-pgrag.md +6 -2
- package/framework/standards/infrastructure/neon/neon-pgvector.md +4 -0
- package/framework/standards/infrastructure/neon/neon-setup.md +5 -1
- package/framework/standards/integration/mcp/mcp-tools.md +471 -462
- package/framework/templates/REGISTRY.json +1745 -1239
- package/framework/templates/code/dotnet/ai-agents/AgentBootstrap.cs.template +39 -0
- package/framework/templates/code/dotnet/ai-agents/EmbeddingService.cs.template +68 -0
- package/framework/templates/code/dotnet/ai-agents/ModelRegistry.cs.template +117 -0
- package/framework/templates/code/dotnet/ai-agents/PromptRepository.cs.template +95 -0
- package/framework/templates/code/dotnet/ai-agents/ResilientToolMiddleware.cs.template +61 -0
- package/framework/templates/code/dotnet/ai-agents/VectorSearchTool.cs.template +107 -0
- package/framework/templates/code/dotnet/ai-agents/model-registry.json.template +58 -0
- package/framework/templates/code/sql/ai-agents/agent-prompts-migration.sql.template +58 -0
- package/framework/templates/code/sql/ai-agents/pgvector-embeddings-migration.sql.template +91 -0
- package/framework/templates/docs/onboarding.md +4 -4
- package/framework/templates/tasks.template.json +17 -0
- package/package.json +89 -83
- package/src/commands/project/init.js +16 -0
- package/src/commands/validation/validate-feature.js +1 -1
- package/src/core/paths/output-schema.js +6 -6
- package/src/core/state/state-manager.js +1 -1
- package/src/core/templates/template-registry.js +289 -256
- package/src/lib/detectors/design-system-detector.js +1 -1
- package/src/lib/generators/context-generator.js +516 -518
- package/src/lib/generators/scaffold-generator.js +23 -26
- package/src/lib/installers/memory-installer.js +138 -0
- package/src/lib/phase-chain/phase-validator.js +4 -4
- package/src/lib/risk-detector.js +80 -0
- package/src/lib/tasks/tasks-json-parser.js +185 -0
- package/src/scripts/setup-infra.js +25 -0
- package/src/utils/hooks-installer.js +59 -10
- package/framework/standards/infrastructure/neon/neon-semantic-kernel.md +0 -310
- package/framework/templates/integrations/semantic-kernel-neon.cs +0 -125
package/docs/CHEATSHEET.md
CHANGED
|
@@ -25,11 +25,11 @@ Phases in brackets are optional.
|
|
|
25
25
|
| Phase | Directory | Output files | Gate |
|
|
26
26
|
|-------|-----------|--------------|------|
|
|
27
27
|
| proposal | `0-proposal/` | `proposal.md` | ✅ Approval |
|
|
28
|
-
| uiux *(optional)* | `1-
|
|
28
|
+
| uiux *(optional)* | `1-design/` | `design-system.md`, `mockups.md`, `components.md`, `flows.md` | ✅ Approval |
|
|
29
29
|
| design | `2-design/` | `spec.md`, `contracts.cs`, `decisions.md` | ✅ Approval |
|
|
30
30
|
| plan | `3-plan/` | `plan.md` | ✅ Approval |
|
|
31
31
|
| tasks | `4-tasks/` | `tasks.md` | ✅ Approval |
|
|
32
|
-
| implement | `
|
|
32
|
+
| implement | `3-implement/` | code + `recap.md` | — |
|
|
33
33
|
| sync *(optional)* | — | standards updated | — |
|
|
34
34
|
|
|
35
35
|
---
|
|
@@ -154,7 +154,7 @@ morph-spec approval-status {feature} # show gate status
|
|
|
154
154
|
├── features/
|
|
155
155
|
│ └── {feature}/
|
|
156
156
|
│ ├── 0-proposal/proposal.md
|
|
157
|
-
│ ├── 1-
|
|
157
|
+
│ ├── 1-design/design-system.md, mockups.md, components.md, flows.md
|
|
158
158
|
│ ├── 2-design/spec.md, contracts.cs, decisions.md
|
|
159
159
|
│ ├── 3-tasks/tasks.md
|
|
160
160
|
│ └── 4-implement/recap.md
|
package/docs/QUICKSTART.md
CHANGED
|
@@ -57,10 +57,10 @@ Loads project context from `.morph/context/`, confirms stack and active agents.
|
|
|
57
57
|
### Phase 2 — UI/UX (conditional)
|
|
58
58
|
|
|
59
59
|
Only runs if frontend agents are active. Claude generates:
|
|
60
|
-
- `1-
|
|
61
|
-
- `1-
|
|
62
|
-
- `1-
|
|
63
|
-
- `1-
|
|
60
|
+
- `1-design/design-system.md` — colors, typography, spacing
|
|
61
|
+
- `1-design/mockups.md` — ASCII wireframes
|
|
62
|
+
- `1-design/components.md` — component specs
|
|
63
|
+
- `1-design/flows.md` — user flows and edge cases
|
|
64
64
|
|
|
65
65
|
You approve the UI design before design phase begins.
|
|
66
66
|
|
package/framework/CLAUDE.md
CHANGED
|
@@ -52,4 +52,17 @@ Se não houver feature ativa, pergunte ao usuário qual feature trabalhar.
|
|
|
52
52
|
7 personas de domínio dispatchávels via Agent tool:
|
|
53
53
|
`dotnet-senior`, `ef-modeler`, `maf-expert`, `nextjs-expert`, `ui-designer`, `infra-engineer`, `evaluator`.
|
|
54
54
|
|
|
55
|
+
## Regra de precedência de skills
|
|
56
|
+
|
|
57
|
+
Em projetos morph-spec, prefira as skills `morph-*` sobre as equivalentes `superpowers:*`:
|
|
58
|
+
|
|
59
|
+
| Em vez de | Use |
|
|
60
|
+
|-----------|-----|
|
|
61
|
+
| `superpowers:brainstorming` | `morph-brainstorming` |
|
|
62
|
+
| `superpowers:writing-plans` | `morph-plan` |
|
|
63
|
+
| `superpowers:executing-plans` | `morph-apply` |
|
|
64
|
+
| `superpowers:test-driven-development` | seguir `mandate.md` (TDD está embutido) |
|
|
65
|
+
|
|
66
|
+
As skills `morph-*` aplicam Gates, leem o estado da feature em `.morph/` e produzem outputs com os paths corretos. As `superpowers:*` são genéricas e não conhecem o contexto morph-spec.
|
|
67
|
+
|
|
55
68
|
*MORPH-SPEC v5 by Polymorphism Tech*
|
package/framework/MORPH.md
CHANGED
|
@@ -15,7 +15,7 @@ Entre gates, você opera com autonomia total. O dev valida. Você executa.
|
|
|
15
15
|
| Situação | O que você faz |
|
|
16
16
|
|-----------------------------------------------------------------------|-------------------------------------------------------------------------------|
|
|
17
17
|
| Gate 1 / 2 / 3 aprovado | Avançar para próxima fase imediatamente |
|
|
18
|
-
| Tarefa completada na fase implement | Iniciar a próxima
|
|
18
|
+
| Tarefa completada na fase implement | Iniciar a próxima task do tasks.json sem aguardar instrução |
|
|
19
19
|
| Ambiguidade de escopo coberta pelo mandate | Resolver conservadoramente e registrar em decisions.md |
|
|
20
20
|
| Ambiguidade bloqueante (requisito ausente ou contraditório) | UMA pergunta via AskUserQuestion |
|
|
21
21
|
| Sub-agent com auto-score ≥ 7 | Integrar ao recap.md e continuar |
|
|
@@ -76,14 +76,14 @@ Os papéis não são exclusivos — numa sessão longa você transita entre Orch
|
|
|
76
76
|
|
|
77
77
|
O fluxo padrão de uma feature tem quatro fases. Cada fase tem uma pasta dedicada em `.morph/features/{feature}/`.
|
|
78
78
|
|
|
79
|
-
| Fase | Pasta | Gate
|
|
80
|
-
|
|
81
|
-
| proposal | `0-proposal/` |
|
|
82
|
-
| plan | `2-plan/` |
|
|
83
|
-
| implement | `3-implement/` | Nenhum
|
|
84
|
-
| review | `4-review/` |
|
|
79
|
+
| Fase | Pasta | Gate | O que termina a fase |
|
|
80
|
+
|-------------|----------------|-----------------------|-------------------------------------------------|
|
|
81
|
+
| proposal | `0-proposal/` | Gate 1 (trust-aware) | `proposal.md` aprovado e commitado |
|
|
82
|
+
| plan | `2-plan/` | Gate 2 (trust-aware) | `spec.md`, `mandate.md`, `tasks.json` aprovados |
|
|
83
|
+
| implement | `3-implement/` | Nenhum | Todas as tasks do tasks.json com status `done` |
|
|
84
|
+
| review | `4-review/` | Gate 3 (trust-aware) | `review-report.md` aprovado e commitado |
|
|
85
85
|
|
|
86
|
-
A fase `1-
|
|
86
|
+
A fase `1-design/` (design system, mockups, flows) é opcional — aplica-se apenas a features com componentes de UI novos e deve ser explicitamente requisitada pelo usuário.
|
|
87
87
|
|
|
88
88
|
Não avance de fase sem o gate correspondente ter sido confirmado.
|
|
89
89
|
|
|
@@ -104,7 +104,7 @@ Não invente caminhos alternativos.
|
|
|
104
104
|
|
|
105
105
|
- `mandate.md` — contrato de implementação: stack exata, standards obrigatórios (com links), patterns explicitamente proibidos, checklist de done com critérios verificáveis. O mandate.md é lido no início de cada tarefa de implementação — deve ser específico o suficiente para resolver ambiguidades sem consultar o Orchestrator.
|
|
106
106
|
|
|
107
|
-
- `tasks.
|
|
107
|
+
- `tasks.json` — task list estruturada validada contra `framework/schemas/tasks.schema.json`. Cada task tem `id` (T1, T2...), `title`, `description`, `dependencies` (array de IDs), `effort` (S/M/L/XL), `doneCriteria`, `status` (pending/in_progress/done/skipped/blocked) e `outputs` (paths esperados). Cada entrada no recap.md deve referenciar um ID do tasks.json.
|
|
108
108
|
|
|
109
109
|
- `decisions.md` — log de decisões técnicas: qual era a alternativa, por que foi descartada, quem decidiu. Criado quando surgir a primeira decisão não trivial. Não é obrigatório — só existe se houver decisões que precisam de rastreabilidade.
|
|
110
110
|
|
|
@@ -148,29 +148,42 @@ O agente responsável por um domínio está listado em `framework/agents.json`.
|
|
|
148
148
|
|
|
149
149
|
---
|
|
150
150
|
|
|
151
|
-
## 5. Gates de Aprovação
|
|
151
|
+
## 5. Gates de Aprovação (Trust Mode)
|
|
152
152
|
|
|
153
|
-
Gates são pontos
|
|
153
|
+
Gates são pontos de **pausa potencial**. Em `trust: "auto"` (default), gates **auto-passam** se nenhum sinal de risco for detectado — apenas exibem um summary curto. Em `trust: "manual"` OU se um sinal de risco fizer fire, o gate pausa via `AskUserQuestion` com options padrão:
|
|
154
154
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
155
|
+
```
|
|
156
|
+
- "aprovado, prosseguir"
|
|
157
|
+
- "preciso ajustar"
|
|
158
|
+
- "cancelar feature" (Gate 3 usa "rollback" em vez de "cancelar")
|
|
159
|
+
```
|
|
160
160
|
|
|
161
|
-
**
|
|
162
|
-
Condição: o usuário leu e aprovou `spec.md`, `mandate.md` e `tasks.md`.
|
|
163
|
-
Como ativar: use o template de apresentação do Gate 2 em `framework/skills/core/morph-plan/SKILL.md` passo 5. Apresente o gate completo — spec em uma frase, mandate resumido, tasks com estimativa, decisões de arquitetura se houver.
|
|
164
|
-
Se o usuário pedir ajustes, aplique e reapresente o gate completo antes de avançar.
|
|
165
|
-
Sinal de gate aberto: aprovação explícita de todos os três artefatos, ou "pode implementar".
|
|
166
|
-
Atenção: aprovação parcial ("o spec está bom") não abre o gate — todos os três precisam ser confirmados.
|
|
161
|
+
**Sinais de risco que forçam pausa em auto** (detectados via `src/lib/risk-detector.js`):
|
|
167
162
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
163
|
+
| Sinal | Threshold | Quando aplica |
|
|
164
|
+
|-------|-----------|---------------|
|
|
165
|
+
| `designSystemDivergence` | true | Brainstorming detecta fontes conflitantes (spec antigo vs bundle local) |
|
|
166
|
+
| `standardsViolations` | array.length > 0 | Mandate ou implementation viola padrões proibidos |
|
|
167
|
+
| `evalScore` | < 8 | morph-eval/morph-review produz score abaixo do mínimo |
|
|
168
|
+
| `taskCount` | > 20 | Escopo grande — provavelmente vale revisar antes de implementar |
|
|
172
169
|
|
|
173
|
-
**
|
|
170
|
+
**Gate 1 — Proposta**
|
|
171
|
+
- Sinais: `designSystemDivergence`, `standardsViolations` (improvável).
|
|
172
|
+
- Skill responsável: `morph-brainstorming`.
|
|
173
|
+
|
|
174
|
+
**Gate 2 — Plano**
|
|
175
|
+
- Sinais: todos do Gate 1 + `taskCount`, `standardsViolations` em mandate.
|
|
176
|
+
- Skill responsável: `morph-plan`.
|
|
177
|
+
|
|
178
|
+
**Gate 3 — Review**
|
|
179
|
+
- Sinais: `evalScore` composite, `standardsViolations` detectadas em implementation.
|
|
180
|
+
- Skill responsável: `morph-review`.
|
|
181
|
+
|
|
182
|
+
Para alterar o modo: editar `.morph/config/config.json → trust` (`"auto"` ou `"manual"`). Configs sem o campo `trust` defaultam para `"auto"`.
|
|
183
|
+
|
|
184
|
+
**Comportamento padrão fora de gate:** trabalhe com autonomia total. Gates só existem nestes três pontos. Não pause para confirmação no meio de implementação a menos que encontre uma ambiguidade de escopo que o mandate não cobre — nesse caso, registre a ambiguidade no decisions.md, resolva da forma mais conservadora possível, e sinalize na entrega da task.
|
|
185
|
+
|
|
186
|
+
**O hook state-sync.js** detecta as respostas dos Gates automaticamente: quando uma `AskUserQuestion` é respondida com label começando em "aprovado", marca o gate correspondente em `.morph/state.json`. Em modo auto sem AskUserQuestion, a skill atualiza state.json diretamente (allowlist permite Edit em `.morph/state.json`).
|
|
174
187
|
|
|
175
188
|
---
|
|
176
189
|
|
|
@@ -219,15 +232,23 @@ O padrão de dispatch e o template de prompt para sub-agents estão detalhados e
|
|
|
219
232
|
Skills são documentos de instrução que você invoca sob demanda. Eles ficam em `framework/skills/core/`.
|
|
220
233
|
Não invoque uma skill fora do momento indicado.
|
|
221
234
|
|
|
222
|
-
| Skill | Path | Quando invocar
|
|
223
|
-
|
|
224
|
-
| morph-
|
|
225
|
-
| morph-
|
|
226
|
-
| morph-
|
|
227
|
-
| morph-
|
|
228
|
-
| morph-
|
|
229
|
-
| morph-
|
|
230
|
-
| morph-
|
|
235
|
+
| Skill | Path | Quando invocar |
|
|
236
|
+
|-----------------------|----------------------------------------------------|-------------------------------------------------------------------------|
|
|
237
|
+
| **morph-proposal** | `framework/skills/core/morph-proposal/SKILL.md` | **Orquestrador**: brainstorming → Gate 1 → plan → Gate 2 (entry point) |
|
|
238
|
+
| **morph-apply** | `framework/skills/core/morph-apply/SKILL.md` | **Orquestrador**: DAG-adaptive implement loop → review → Gate 3 |
|
|
239
|
+
| morph-brainstorming | `framework/skills/core/morph-brainstorming/SKILL.md` | Invocada pela morph-proposal — entendimento de negócio + stack-scan |
|
|
240
|
+
| morph-stack-scan | `framework/skills/core/morph-stack-scan/SKILL.md` | Detecta stack atual; curto-circuita em greenfield |
|
|
241
|
+
| morph-plan | `framework/skills/core/morph-plan/SKILL.md` | Invocada pela morph-proposal — produz spec/mandate/tasks.json |
|
|
242
|
+
| morph-implement | `framework/skills/core/morph-implement/SKILL.md` | Invocada pela morph-apply — executa cada task |
|
|
243
|
+
| morph-eval | `framework/skills/core/morph-eval/SKILL.md` | Após concluir uma task ou fase |
|
|
244
|
+
| morph-review | `framework/skills/core/morph-review/SKILL.md` | Invocada pela morph-apply — produz review-report + Gate 3 |
|
|
245
|
+
| morph-standards | `framework/skills/core/morph-standards/SKILL.md` | Quando precisar localizar ou aplicar um standard específico |
|
|
246
|
+
|
|
247
|
+
**Entry points** para o usuário:
|
|
248
|
+
- `/morph-proposal {feature}` → invoca `Skill(morph-proposal)`, que orquestra brainstorming + plan
|
|
249
|
+
- `/morph-apply {feature}` → invoca `Skill(morph-apply)`, que orquestra implement + review
|
|
250
|
+
|
|
251
|
+
Os slash commands são atalhos: o agente pode chamar `Skill(morph-proposal)` diretamente quando o usuário pede "use /morph-proposal".
|
|
231
252
|
|
|
232
253
|
Cada skill contém instruções de execução passo a passo. Leia, siga, não desvie sem justificativa registrada no recap.md.
|
|
233
254
|
|
package/framework/agents.json
CHANGED
|
@@ -1,127 +1,132 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": "5.0.0",
|
|
3
|
-
"schema": "domain-personas",
|
|
4
|
-
"total_agents": 7,
|
|
5
|
-
"description": "Domain personas dispatched per task by the morph-implement skill. The 3 roles (Orchestrator/Specialist/Evaluator) are assumed by Claude itself per MORPH.md — these are domain personas the Specialist consults when working in a specific area.",
|
|
6
|
-
"agents": {
|
|
7
|
-
"dotnet-senior": {
|
|
8
|
-
"title": ".NET Senior Engineer",
|
|
9
|
-
"icon": "🔷",
|
|
10
|
-
"color": "blue",
|
|
11
|
-
"domains": ["backend", "backend-api", "architecture"],
|
|
12
|
-
"keywords": [
|
|
13
|
-
"backend", "api", "dotnet", ".net", "csharp", "c#",
|
|
14
|
-
"minimal api", "vertical slice", "vsa", "result pattern",
|
|
15
|
-
"feature slice", "endpoint", "handler", "validator"
|
|
16
|
-
],
|
|
17
|
-
"stack": ["dotnet"],
|
|
18
|
-
"standards": [
|
|
19
|
-
"architecture-vertical-slice-vertical-slice",
|
|
20
|
-
"backend-dotnet-result-pattern",
|
|
21
|
-
"backend-dotnet-vsa-handler-patterns",
|
|
22
|
-
"backend-dotnet-fluent-validation-vsa"
|
|
23
|
-
],
|
|
24
|
-
"persona": "Você é um engenheiro .NET sênior. Pensa em VSA com handlers diretos, result pattern, sealed classes, Guid.CreateVersion7(). Não usa Repository pattern, não usa exceptions como fluxo. Consulta o standard antes de escrever cada slice. Nomeia tudo em PascalCase para tipos, camelCase para parâmetros."
|
|
25
|
-
},
|
|
26
|
-
"ef-modeler": {
|
|
27
|
-
"title": "EF Core / Database Modeler",
|
|
28
|
-
"icon": "🗄️",
|
|
29
|
-
"color": "cyan",
|
|
30
|
-
"domains": ["database", "data-modeling", "migrations"],
|
|
31
|
-
"keywords": [
|
|
32
|
-
"ef core", "entity framework", "neon", "postgres", "postgresql",
|
|
33
|
-
"migration", "dbcontext", "navigation property", "configuration"
|
|
34
|
-
],
|
|
35
|
-
"stack": ["dotnet"],
|
|
36
|
-
"standards": [
|
|
37
|
-
"backend-database-postgresql-database",
|
|
38
|
-
"infrastructure-neon-setup",
|
|
39
|
-
"infrastructure-neon-pgvector"
|
|
40
|
-
],
|
|
41
|
-
"persona": "Você é um especialista em EF Core sobre Neon (Postgres). Pensa em migrations explícitas, configurações fluentes, navigation properties bem nomeadas, índices intencionais. Sempre Guid.CreateVersion7() para PKs. Sealed entities. Nunca leak de DbContext fora do handler."
|
|
42
|
-
},
|
|
43
|
-
"maf-expert": {
|
|
44
|
-
"title": "Microsoft Agent Framework Expert",
|
|
45
|
-
"icon": "🤖",
|
|
46
|
-
"color": "purple",
|
|
47
|
-
"domains": ["ai-agents", "ai-orchestration"],
|
|
48
|
-
"keywords": [
|
|
49
|
-
"agent", "ai agent", "maf", "microsoft agent framework",
|
|
50
|
-
"tool", "tool calling", "rag", "vector search", "llm",
|
|
51
|
-
"orchestration", "multi-agent"
|
|
52
|
-
],
|
|
53
|
-
"stack": ["dotnet"],
|
|
54
|
-
"standards": [
|
|
55
|
-
"ai-agents-setup",
|
|
56
|
-
"ai-agents-
|
|
57
|
-
"ai-agents-
|
|
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
|
-
|
|
1
|
+
{
|
|
2
|
+
"version": "5.0.0",
|
|
3
|
+
"schema": "domain-personas",
|
|
4
|
+
"total_agents": 7,
|
|
5
|
+
"description": "Domain personas dispatched per task by the morph-implement skill. The 3 roles (Orchestrator/Specialist/Evaluator) are assumed by Claude itself per MORPH.md — these are domain personas the Specialist consults when working in a specific area.",
|
|
6
|
+
"agents": {
|
|
7
|
+
"dotnet-senior": {
|
|
8
|
+
"title": ".NET Senior Engineer",
|
|
9
|
+
"icon": "🔷",
|
|
10
|
+
"color": "blue",
|
|
11
|
+
"domains": ["backend", "backend-api", "architecture"],
|
|
12
|
+
"keywords": [
|
|
13
|
+
"backend", "api", "dotnet", ".net", "csharp", "c#",
|
|
14
|
+
"minimal api", "vertical slice", "vsa", "result pattern",
|
|
15
|
+
"feature slice", "endpoint", "handler", "validator"
|
|
16
|
+
],
|
|
17
|
+
"stack": ["dotnet"],
|
|
18
|
+
"standards": [
|
|
19
|
+
"architecture-vertical-slice-vertical-slice",
|
|
20
|
+
"backend-dotnet-result-pattern",
|
|
21
|
+
"backend-dotnet-vsa-handler-patterns",
|
|
22
|
+
"backend-dotnet-fluent-validation-vsa"
|
|
23
|
+
],
|
|
24
|
+
"persona": "Você é um engenheiro .NET sênior. Pensa em VSA com handlers diretos, result pattern, sealed classes, Guid.CreateVersion7(). Não usa Repository pattern, não usa exceptions como fluxo. Consulta o standard antes de escrever cada slice. Nomeia tudo em PascalCase para tipos, camelCase para parâmetros."
|
|
25
|
+
},
|
|
26
|
+
"ef-modeler": {
|
|
27
|
+
"title": "EF Core / Database Modeler",
|
|
28
|
+
"icon": "🗄️",
|
|
29
|
+
"color": "cyan",
|
|
30
|
+
"domains": ["database", "data-modeling", "migrations"],
|
|
31
|
+
"keywords": [
|
|
32
|
+
"ef core", "entity framework", "neon", "postgres", "postgresql",
|
|
33
|
+
"migration", "dbcontext", "navigation property", "configuration"
|
|
34
|
+
],
|
|
35
|
+
"stack": ["dotnet"],
|
|
36
|
+
"standards": [
|
|
37
|
+
"backend-database-postgresql-database",
|
|
38
|
+
"infrastructure-neon-setup",
|
|
39
|
+
"infrastructure-neon-pgvector"
|
|
40
|
+
],
|
|
41
|
+
"persona": "Você é um especialista em EF Core sobre Neon (Postgres). Pensa em migrations explícitas, configurações fluentes, navigation properties bem nomeadas, índices intencionais. Sempre Guid.CreateVersion7() para PKs. Sealed entities. Nunca leak de DbContext fora do handler."
|
|
42
|
+
},
|
|
43
|
+
"maf-expert": {
|
|
44
|
+
"title": "Microsoft Agent Framework Expert",
|
|
45
|
+
"icon": "🤖",
|
|
46
|
+
"color": "purple",
|
|
47
|
+
"domains": ["ai-agents", "ai-orchestration"],
|
|
48
|
+
"keywords": [
|
|
49
|
+
"agent", "ai agent", "maf", "microsoft agent framework",
|
|
50
|
+
"tool", "tool calling", "rag", "vector search", "llm",
|
|
51
|
+
"orchestration", "multi-agent"
|
|
52
|
+
],
|
|
53
|
+
"stack": ["dotnet"],
|
|
54
|
+
"standards": [
|
|
55
|
+
"ai-agents-setup",
|
|
56
|
+
"ai-agents-sweet-spot",
|
|
57
|
+
"ai-agents-providers-model-registry",
|
|
58
|
+
"ai-agents-structured-output",
|
|
59
|
+
"ai-agents-prompts-in-db",
|
|
60
|
+
"ai-agents-rag-custom-pgvector",
|
|
61
|
+
"ai-agents-middleware-patterns",
|
|
62
|
+
"ai-agents-multi-agent-patterns"
|
|
63
|
+
],
|
|
64
|
+
"persona": "Você é especialista no Microsoft Agent Framework (MAF 1.0 GA). Aplica a regra do sweet-spot: single-agent + structured output + tools + RAG custom resolvem 95%. Refere alias do Model Registry, nunca model hardcoded. Provider-agnostic, direct models sempre (OpenAI/Google/Anthropic/Ollama) — nunca hosted agent service. Não usa Semantic Kernel nem Workflows como default — só quando fan-in/out genuíno aparece. Telemetria via AgentOpenTelemetryConsts.DefaultSourceName."
|
|
65
|
+
},
|
|
66
|
+
"nextjs-expert": {
|
|
67
|
+
"title": "Next.js / React Expert",
|
|
68
|
+
"icon": "⚛️",
|
|
69
|
+
"color": "green",
|
|
70
|
+
"domains": ["frontend", "ui", "react", "nextjs"],
|
|
71
|
+
"keywords": [
|
|
72
|
+
"nextjs", "next.js", "react", "app router", "server component",
|
|
73
|
+
"client component", "tailwind", "framer motion", "shadcn"
|
|
74
|
+
],
|
|
75
|
+
"stack": ["nextjs"],
|
|
76
|
+
"standards": [
|
|
77
|
+
"frontend-nextjs-app-router",
|
|
78
|
+
"frontend-nextjs-components",
|
|
79
|
+
"frontend-nextjs-data-fetching",
|
|
80
|
+
"frontend-nextjs-naming-conventions",
|
|
81
|
+
"frontend-nextjs-state-management"
|
|
82
|
+
],
|
|
83
|
+
"persona": "Você escreve Next.js App Router idiomático. Server Components por padrão, Client Components apenas quando há interatividade real. Tailwind + Shadcn + Framer Motion. Tipos via Zod. Nada de getServerSideProps. RSC streaming quando faz sentido."
|
|
84
|
+
},
|
|
85
|
+
"ui-designer": {
|
|
86
|
+
"title": "UI/UX Designer",
|
|
87
|
+
"icon": "🎨",
|
|
88
|
+
"color": "magenta",
|
|
89
|
+
"domains": ["ui", "ux", "design-system", "accessibility"],
|
|
90
|
+
"keywords": [
|
|
91
|
+
"design", "ui", "ux", "design system", "tokens", "wcag",
|
|
92
|
+
"accessibility", "mockup", "flow", "shadcn", "tailwind"
|
|
93
|
+
],
|
|
94
|
+
"stack": ["nextjs"],
|
|
95
|
+
"standards": [
|
|
96
|
+
"frontend-design-system-naming",
|
|
97
|
+
"frontend-design-system-animations",
|
|
98
|
+
"frontend-nextjs-motion-patterns"
|
|
99
|
+
],
|
|
100
|
+
"persona": "Você desenha sistemas, não telas isoladas. Pensa em tokens (cor, espaço, tipografia), componentes reutilizáveis, estados (default/hover/focus/disabled/loading/error), acessibilidade WCAG AA. Mockups em Tailwind direto, sem Figma intermediário."
|
|
101
|
+
},
|
|
102
|
+
"infra-engineer": {
|
|
103
|
+
"title": "Infrastructure / Jobs Engineer",
|
|
104
|
+
"icon": "⚙️",
|
|
105
|
+
"color": "yellow",
|
|
106
|
+
"domains": ["infrastructure", "jobs", "deployment", "observability"],
|
|
107
|
+
"keywords": [
|
|
108
|
+
"hangfire", "background job", "queue", "deployment",
|
|
109
|
+
"docker", "ci/cd", "telemetry", "logging", "monitoring"
|
|
110
|
+
],
|
|
111
|
+
"stack": ["dotnet"],
|
|
112
|
+
"standards": [
|
|
113
|
+
"backend-integrations-hangfire-hangfire-jobs",
|
|
114
|
+
"infrastructure-docker-easypanel-deploy",
|
|
115
|
+
"backend-dotnet-scrutor"
|
|
116
|
+
],
|
|
117
|
+
"persona": "Você cuida de infra: jobs assíncronos com Hangfire (apenas quando há razão real), deployment, observabilidade. Pensa em retry, idempotência, dead-letter, métricas. Não inventa infra — usa o que o stack já oferece."
|
|
118
|
+
},
|
|
119
|
+
"evaluator": {
|
|
120
|
+
"title": "Code & Architecture Evaluator",
|
|
121
|
+
"icon": "🔍",
|
|
122
|
+
"color": "red",
|
|
123
|
+
"domains": ["evaluation", "review", "quality"],
|
|
124
|
+
"keywords": [
|
|
125
|
+
"review", "eval", "score", "rubric", "audit", "quality"
|
|
126
|
+
],
|
|
127
|
+
"stack": ["*"],
|
|
128
|
+
"standards": [],
|
|
129
|
+
"persona": "Você aplica as rubricas em framework/evals/rubrics/. Não reescreve código — produz scores 0-10 por dimensão (architecture, contracts, code-quality, test-coverage), feedback priorizado, e ação clara (aprovado/feedback/escalar). Silêncio em scores ≥ 8 é o sinal correto."
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -6,7 +6,9 @@ allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Agent, AskUserQuestion, Skil
|
|
|
6
6
|
|
|
7
7
|
# /morph-apply — NLH Implementation
|
|
8
8
|
|
|
9
|
-
Executa as
|
|
9
|
+
Executa as tasks de uma feature até o Gate 3.
|
|
10
|
+
|
|
11
|
+
**Implementação:** este slash command é um atalho. O agente deve invocar `Skill(morph-apply)` com o nome da feature. A skill decide adaptativamente entre execução sequencial (auto-advance entre tasks) ou paralela (Agent dispatch para tasks independentes) baseado no DAG do `tasks.json`. Termina com `morph-review` + Gate 3 trust-aware.
|
|
10
12
|
|
|
11
13
|
## Argumentos
|
|
12
14
|
|
|
@@ -17,29 +19,10 @@ Executa as tarefas do `tasks.md` em sequência sem pausa, depois apresenta o Gat
|
|
|
17
19
|
Antes de começar, verifique:
|
|
18
20
|
- `.morph/features/{feature-name}/2-plan/spec.md` existe
|
|
19
21
|
- `.morph/features/{feature-name}/2-plan/mandate.md` existe
|
|
20
|
-
- `.morph/features/{feature-name}/2-plan/tasks.
|
|
21
|
-
- `.morph/features/{feature-name}/3-implement/recap.md` existe ou pode ser criado
|
|
22
|
+
- `.morph/features/{feature-name}/2-plan/tasks.json` existe e é válido contra o schema
|
|
22
23
|
|
|
23
24
|
Se algum estiver faltando, abortar e pedir ao usuário para rodar `/morph-proposal {feature-name}` primeiro.
|
|
24
25
|
|
|
25
|
-
## Fluxo
|
|
26
|
-
|
|
27
|
-
1. **Loop de tarefas** — para cada tarefa pendente em `tasks.md`:
|
|
28
|
-
- Invocar a skill `morph-implement` em `framework/skills/core/morph-implement/`.
|
|
29
|
-
- A skill executa a tarefa, registra em `recap.md`, atualiza o trace.
|
|
30
|
-
- **Auto-advance:** ao concluir uma tarefa, passar imediatamente para a próxima sem aguardar instrução do usuário.
|
|
31
|
-
- Pausar apenas se encontrar ambiguidade bloqueante não coberta pelo `mandate.md`.
|
|
32
|
-
|
|
33
|
-
2. **Após todas as tarefas concluídas, invocar `morph-review`** (skill em `framework/skills/core/morph-review/`):
|
|
34
|
-
- Lê `mandate.md` e `recap.md`.
|
|
35
|
-
- Aplica `morph-eval` para gerar scores por dimensão.
|
|
36
|
-
- Produz `review-report.md` em `.morph/features/{feature-name}/4-review/`.
|
|
37
|
-
- Apresenta o **Gate 3**.
|
|
38
|
-
|
|
39
|
-
3. **Aguardar aprovação do Gate 3.**
|
|
40
|
-
- Resposta válida: "aprovado", "merge".
|
|
41
|
-
- Se houver itens bloqueantes (score < 6): corrija antes de apresentar o gate.
|
|
42
|
-
|
|
43
26
|
## Anti-padrões
|
|
44
27
|
|
|
45
28
|
- Não pausar entre tarefas para confirmação — o tasks.md já foi aprovado no Gate 2.
|
|
@@ -30,7 +30,7 @@ If any precondition fails, stop and report what is missing instead of archiving.
|
|
|
30
30
|
.morph/features/{feature}/ → .morph/archive/{feature}/
|
|
31
31
|
```
|
|
32
32
|
Use `Bash` (`mv` on POSIX, `Move-Item` on Windows). Preserve all phase subfolders
|
|
33
|
-
(`0-proposal/`, `1-
|
|
33
|
+
(`0-proposal/`, `1-design/`, `2-plan/`, `3-implement/`, `4-review/`).
|
|
34
34
|
|
|
35
35
|
3. **Update state.json**:
|
|
36
36
|
- Set `features[name].status = 'completed'`
|
|
@@ -8,6 +8,8 @@ allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Agent, AskUserQuestion, Skil
|
|
|
8
8
|
|
|
9
9
|
Conduz a feature do request inicial até o Gate 2 (plano aprovado), sem intervenção do usuário entre os gates.
|
|
10
10
|
|
|
11
|
+
**Implementação:** este slash command é um atalho. O agente deve invocar `Skill(morph-proposal)` com o nome da feature como argumento. A skill encadeia automaticamente `morph-brainstorming` → Gate 1 → `morph-plan` → Gate 2. Em `trust: "auto"` (default), gates auto-passam sem sinais de risco.
|
|
12
|
+
|
|
11
13
|
## Argumentos
|
|
12
14
|
|
|
13
15
|
`{feature-name}` — nome em kebab-case da feature.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Ensures writes to .morph/features/{feature}/ go to the current phase's subfolder:
|
|
9
9
|
* proposal → only 0-proposal/
|
|
10
|
-
* uiux → only 1-
|
|
10
|
+
* uiux → only 1-design/
|
|
11
11
|
* plan → only 2-plan/
|
|
12
12
|
* implement → 3-implement/ + any source code (unrestricted)
|
|
13
13
|
* review → only 4-review/
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Blocks Write/Edit to spec artifacts after their approval gate has passed:
|
|
9
9
|
* - 2-plan/spec.md, contracts.cs, tasks.md, etc. → blocked if 'plan' gate approved
|
|
10
|
-
* - 1-
|
|
10
|
+
* - 1-design/design-system.md, etc. → blocked if 'uiux' gate approved
|
|
11
11
|
*
|
|
12
12
|
* Fail-open: exits 0 on any error.
|
|
13
13
|
*/
|