@polymorphism-tech/morph-spec 7.9.3 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +2 -2
- package/README.md +31 -2
- package/bin/morph-spec.js +50 -2
- package/bin/validate.js +379 -379
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +38 -1
- package/docs/QUICKSTART.md +60 -1
- package/framework/CLAUDE.md +13 -2
- package/framework/MORPH.md +38 -2
- package/framework/agents.json +22 -3
- package/framework/commands/commit.md +166 -166
- package/framework/commands/morph-hotfix.md +39 -0
- package/framework/commands/morph-infra.md +215 -215
- package/framework/commands/morph-preflight.md +205 -205
- package/framework/commands/morph-troubleshoot.md +124 -124
- package/framework/hooks/README.md +25 -10
- package/framework/hooks/claude-code/core/gate-guard.js +4 -2
- package/framework/hooks/claude-code/core/loop-detect.js +2 -1
- package/framework/hooks/claude-code/core/post-edit-typecheck.js +14 -5
- package/framework/hooks/claude-code/core/tasks-json-guard.js +4 -2
- package/framework/hooks/claude-code/core/validate-completion.js +1 -1
- package/framework/hooks/claude-code/core/worktree-context.js +160 -0
- package/framework/hooks/claude-code/statusline.py +679 -679
- package/framework/hooks/claude-code/statusline.sh +11 -11
- package/framework/hooks/git/commit-msg/conventional-commits.sh +33 -33
- package/framework/hooks/git/pre-commit/agents.sh +25 -25
- package/framework/hooks/git/pre-commit/orchestrator.sh +64 -64
- package/framework/hooks/git/pre-commit/specs.sh +50 -50
- package/framework/hooks/git/pre-push/run-tests.sh +44 -44
- package/framework/hooks/shared/activity-logger.js +160 -160
- package/framework/hooks/shared/build-check.js +2 -2
- package/framework/hooks/shared/hook-response.js +17 -5
- package/framework/hooks/shared/payload-utils.js +42 -0
- package/framework/hooks/shared/state-reader.js +22 -2
- package/framework/hooks/shared/stdin-reader.js +26 -26
- package/framework/rubrics/backend.json +41 -41
- package/framework/rules/ai-agents-standards.md +45 -45
- package/framework/rules/dotnet-templates.md +86 -86
- package/framework/rules/frontend-standards.md +13 -13
- package/framework/rules/infrastructure-standards.md +27 -27
- package/framework/rules/neon-standards.md +25 -25
- package/framework/rules/nextjs-standards.md +20 -20
- package/framework/rules/nextjs-templates.md +40 -40
- package/framework/schemas/feature.schema.json +95 -1
- package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
- package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
- package/framework/skills/core/morph-apply/SKILL.md +39 -8
- package/framework/skills/core/morph-brainstorming/SKILL.md +9 -1
- package/framework/skills/core/morph-eval/SKILL.md +6 -1
- package/framework/skills/core/morph-hotfix/SKILL.md +136 -0
- package/framework/skills/core/morph-implement/SKILL.md +8 -4
- package/framework/skills/core/morph-plan/SKILL.md +5 -1
- package/framework/skills/core/morph-proposal/SKILL.md +24 -1
- package/framework/skills/core/morph-review/SKILL.md +3 -2
- package/framework/skills/core/morph-stack-scan/SKILL.md +1 -1
- package/framework/skills/core/morph-standards/SKILL.md +1 -1
- package/framework/standards/STANDARDS.json +7 -2
- package/framework/standards/ai-agents/agent-session.md +160 -160
- package/framework/standards/ai-agents/batching.md +193 -193
- package/framework/standards/ai-agents/context-providers.md +188 -188
- package/framework/standards/ai-agents/mcp-server.md +250 -250
- package/framework/standards/ai-agents/mcp-tools.md +197 -197
- package/framework/standards/ai-agents/middleware-patterns.md +207 -207
- package/framework/standards/ai-agents/modalities-image-gen.md +173 -173
- package/framework/standards/ai-agents/modalities-speech-to-text.md +171 -171
- package/framework/standards/ai-agents/modalities-text-to-speech.md +181 -181
- package/framework/standards/ai-agents/modalities-vision.md +201 -201
- package/framework/standards/ai-agents/multi-agent-patterns.md +155 -155
- package/framework/standards/ai-agents/production.md +275 -275
- package/framework/standards/ai-agents/prompts-in-db.md +214 -214
- package/framework/standards/ai-agents/providers/model-registry.md +158 -158
- package/framework/standards/ai-agents/service-tier-flex.md +135 -135
- package/framework/standards/ai-agents/structured-output.md +249 -249
- package/framework/standards/ai-agents/sweet-spot.md +109 -109
- package/framework/standards/backend/integrations/neon-auth/neon-auth.md +45 -3
- package/framework/templates/.idea/morph-templates.xml +92 -0
- package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
- package/framework/templates/IDE-SNIPPETS.md +262 -262
- package/framework/templates/REGISTRY.json +0 -62
- package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -7
- package/framework/templates/code/dotnet/ai-agents/AgentBootstrap.cs.template +39 -39
- package/framework/templates/code/dotnet/ai-agents/EmbeddingService.cs.template +68 -68
- package/framework/templates/code/dotnet/ai-agents/ModelRegistry.cs.template +117 -117
- package/framework/templates/code/dotnet/ai-agents/PromptRepository.cs.template +95 -95
- package/framework/templates/code/dotnet/ai-agents/ResilientToolMiddleware.cs.template +61 -61
- package/framework/templates/code/dotnet/ai-agents/VectorSearchTool.cs.template +107 -107
- package/framework/templates/code/dotnet/ai-agents/model-registry.json.template +58 -58
- package/framework/templates/code/dotnet/contracts/contracts-vsa.cs +281 -281
- package/framework/templates/code/dotnet/database/migration.cs +83 -83
- package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -21
- package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -4
- package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -4
- package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -15
- package/framework/templates/code/sql/ai-agents/agent-prompts-migration.sql.template +58 -58
- package/framework/templates/code/sql/ai-agents/pgvector-embeddings-migration.sql.template +91 -91
- package/framework/templates/code/typescript/contracts.ts +167 -167
- package/framework/templates/docs/clarifications.md +253 -253
- package/framework/templates/docs/schema-analysis.md +119 -119
- package/framework/templates/docs/ui-components.md +52 -52
- package/framework/templates/docs/ui-design-system.md +76 -76
- package/framework/templates/docs/ui-flows.md +167 -167
- package/framework/templates/docs/ui-mockups.md +98 -98
- package/framework/templates/feature/decisions.md +122 -122
- package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -43
- package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -26
- package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -32
- package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -56
- package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -22
- package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -26
- package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -54
- package/framework/templates/infrastructure/docker/Dockerfile.template +58 -58
- package/framework/templates/infrastructure/docker/docker-compose.template.yml +50 -50
- package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
- package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
- package/framework/templates/infrastructure/github/README.md +56 -56
- package/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -45
- package/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -27
- package/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -59
- package/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -39
- package/framework/templates/integrations/asaas-client.cs +387 -387
- package/framework/templates/integrations/asaas-webhook.cs +351 -351
- package/framework/templates/meta-prompts/fusion/fusion-agent.md +76 -76
- package/framework/templates/meta-prompts/fusion/fusion-aggregator.md +100 -100
- package/framework/templates/meta-prompts/validators/pre-commit-validator.md +95 -95
- package/framework/templates/project/validate.js +120 -120
- package/framework/templates/state.template.json +17 -17
- package/framework/templates/ui/design-system.css +226 -226
- package/package.json +1 -1
- package/src/commands/dashboard/dashboard.js +53 -53
- package/src/commands/index.js +13 -13
- package/src/commands/mcp/mcp-setup.js +519 -519
- package/src/commands/project/checkpoint.js +209 -209
- package/src/commands/project/doctor.js +4 -2
- package/src/commands/project/init.js +46 -2
- package/src/commands/project/update.js +5 -3
- package/src/commands/project/worktree.js +1005 -46
- package/src/commands/state/advance.js +17 -2
- package/src/commands/state/approve.js +18 -1
- package/src/commands/state/create.js +158 -14
- package/src/commands/state/retype.js +126 -0
- package/src/commands/state/score.js +4 -0
- package/src/commands/tasks/dag.js +32 -0
- package/src/commands/validation/index.js +1 -0
- package/src/commands/validation/validate-feature.js +33 -5
- package/src/commands/validation/verify.js +190 -0
- package/src/core/state/phase-state-machine.js +197 -197
- package/src/core/state/state-manager.js +35 -10
- package/src/core/templates/template-renderer.js +477 -477
- package/src/core/work-types.js +79 -0
- package/src/dashboard/app/components/DetailPanel.jsx +11 -11
- package/src/dashboard/app/components/FlowGraph.jsx +17 -17
- package/src/dashboard/app/components/SearchFilter.jsx +22 -22
- package/src/dashboard/app/hooks/useDetailPanel.js +15 -15
- package/src/dashboard/app/main.jsx +13 -13
- package/src/dashboard/app/pages/AgentMap.jsx +370 -370
- package/src/dashboard/app/pages/HookInspector.jsx +418 -418
- package/src/dashboard/app/pages/LiveState.jsx +11 -1
- package/src/dashboard/app/pages/PhasePipeline.jsx +408 -408
- package/src/dashboard/app/pages/RulesMap.jsx +273 -273
- package/src/dashboard/app/pages/SkillsLibrary.jsx +366 -366
- package/src/dashboard/app/pages/Standards.jsx +332 -332
- package/src/dashboard/app/styles/index.css +47 -47
- package/src/dashboard/index.html +12 -12
- package/src/dashboard/package.json +24 -24
- package/src/dashboard/scanner/hooks-scanner.js +41 -41
- package/src/dashboard/scanner/phases-scanner.js +15 -15
- package/src/dashboard/scanner/rubrics-scanner.js +12 -12
- package/src/dashboard/scanner/rules-scanner.js +37 -37
- package/src/dashboard/scanner/skills-scanner.js +43 -43
- package/src/dashboard/scanner/squads-scanner.js +13 -13
- package/src/dashboard/scanner/standards-scanner.js +26 -26
- package/src/dashboard/scanner/state-scanner.js +42 -0
- package/src/dashboard/vite-plugin-morph-data.js +17 -17
- package/src/dashboard/vite.config.js +24 -24
- package/src/lib/agents/metrics-aggregator.js +56 -56
- package/src/lib/agents/metrics-calculator.js +125 -125
- package/src/lib/agents/output-collector.js +73 -73
- package/src/lib/detectors/claude-config-detector.js +152 -152
- package/src/lib/detectors/design-system-detector.js +231 -231
- package/src/lib/detectors/index.js +217 -217
- package/src/lib/generators/architecture-scanner.js +639 -639
- package/src/lib/generators/design-system-generator.js +508 -508
- package/src/lib/generators/index.js +13 -13
- package/src/lib/generators/settings-generator.js +209 -209
- package/src/lib/hooks/hook-executor.js +167 -167
- package/src/lib/installers/mcp-installer.js +719 -719
- package/src/lib/installers/memory-installer.js +1 -1
- package/src/lib/risk-detector.js +16 -0
- package/src/lib/tasks/dispatch-planner.js +122 -4
- package/src/lib/tasks/mermaid-renderer.js +132 -0
- package/src/lib/tasks/task-classifier.js +30 -30
- package/src/lib/tasks/task-parser.js +209 -209
- package/src/lib/tasks/test-runner.js +27 -6
- package/src/lib/validators/architecture/architecture-validator.js +259 -259
- package/src/lib/validators/checkpoint-persistence.js +39 -39
- package/src/lib/validators/contracts/contract-compliance-validator.js +274 -274
- package/src/lib/validators/css/css-validator.js +340 -340
- package/src/lib/validators/packages/package-validator.js +347 -347
- package/src/lib/validators/shared/emit-validator-dispatch.js +14 -14
- package/src/lib/validators/shared/issue-counter.js +14 -14
- package/src/lib/validators/validation-runner.js +349 -349
- package/src/lib/validators/verify-runner.js +322 -0
- package/src/lib/work-type-detector.js +143 -0
- package/src/scripts/setup-infra.js +32 -5
- package/src/utils/agent-id-mapper.js +11 -11
- package/src/utils/agents-installer.js +10 -6
- package/src/utils/claude-settings-manager.js +300 -300
- package/src/utils/file-copier.js +43 -0
- package/src/utils/hooks-installer.js +41 -11
- package/src/utils/skills-installer.js +174 -174
- package/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
- package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
- package/src/lib/tasks/wave-resolver.js +0 -353
package/claude-plugin.json
CHANGED
package/docs/CHEATSHEET.md
CHANGED
|
@@ -44,6 +44,7 @@ Phases in brackets are optional.
|
|
|
44
44
|
|---------|-------------|
|
|
45
45
|
| `/morph-proposal {feature}` | Full spec pipeline — phases 0–4 with approval gates |
|
|
46
46
|
| `/morph-apply {feature}` | Implement approved feature — phase 5 |
|
|
47
|
+
| `/morph-hotfix {feature}` | Surgical hotfix ADW — scout → fix → human Gate 3 → ship |
|
|
47
48
|
| `/morph-status` | Project-wide feature status dashboard |
|
|
48
49
|
| `/morph-preflight` | Pre-implementation validation (7 checks) |
|
|
49
50
|
|
|
@@ -81,6 +82,42 @@ morph-spec validate architecture
|
|
|
81
82
|
morph-spec validate packages
|
|
82
83
|
morph-spec validate contrast [--wcag-aaa]
|
|
83
84
|
morph-spec validate-feature {feature} [--phase {phase}] [--json]
|
|
85
|
+
morph-spec verify {feature} [task] [--json] # deterministic build+tests+validators chain, before the LLM judge
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## CLI — work-type routing
|
|
91
|
+
|
|
92
|
+
Every feature is born with a **work type** that dimensions its pipeline: `feature` (full proposal → [uiux] → plan → implement → review), `bug` (lean), `chore` (fast-track straight to implement), `hotfix` (scout → surgical fix → human Gate 3 always, even under `trust: auto`).
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
morph-spec create {feature} --type feature|bug|chore|hotfix
|
|
96
|
+
morph-spec create {feature} --request "<free text>" # deterministic detector classifies the type
|
|
97
|
+
morph-spec retype {feature} {newType} # change type mid-flight (blocked after Gate 3)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## CLI — worktrees (parallel development)
|
|
103
|
+
|
|
104
|
+
One feature = one git worktree = one Claude Code instance. Independent features run side by side without stepping on each other's state; a SessionStart hook injects each worktree's feature identity into context.
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
morph-spec create {feature} --worktree # birth the feature already isolated in its own worktree
|
|
108
|
+
morph-spec worktree setup {feature} # create .worktrees/{feature}/ on branch morph/{feature}
|
|
109
|
+
morph-spec worktree link [--all] # relink shared infra (node_modules, .claude, .morph/framework)
|
|
110
|
+
morph-spec worktree finish {feature} # merge --no-ff back to the primary root, clean up (requires Gate 3)
|
|
111
|
+
morph-spec worktree list [--json] # active feature worktrees with phase/gate status
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## CLI — DAG
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
morph-spec dag {feature} [--json] # sequential vs parallel dispatch decision (effort-weighted)
|
|
120
|
+
morph-spec dag {feature} --mermaid # emit the tasks.json DAG as a Mermaid flowchart
|
|
84
121
|
```
|
|
85
122
|
|
|
86
123
|
---
|
|
@@ -200,4 +237,4 @@ These files are never edited directly. Use CLI commands or `morph-spec update` i
|
|
|
200
237
|
|
|
201
238
|
---
|
|
202
239
|
|
|
203
|
-
*morph-spec
|
|
240
|
+
*morph-spec v8.0.0 by Polymorphism Tech*
|
package/docs/QUICKSTART.md
CHANGED
|
@@ -132,6 +132,65 @@ morph-spec validate architecture # specific validator
|
|
|
132
132
|
morph-spec validate packages
|
|
133
133
|
```
|
|
134
134
|
|
|
135
|
+
Run the deterministic verification chain (build + tests + validators) before trusting an LLM judge score:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
morph-spec verify my-feature # whole feature
|
|
139
|
+
morph-spec verify my-feature T001 # scoped to one task
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Work-type routing
|
|
145
|
+
|
|
146
|
+
Not every change needs the full pipeline walked above. Every feature is born with a **work type** that dimensions its pipeline:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
morph-spec create my-feature --type feature # default: full proposal → [uiux] → plan → implement → review
|
|
150
|
+
morph-spec create my-fix --type bug # lean proposal/plan
|
|
151
|
+
morph-spec create my-chore --type chore # skips straight to implement (Gates 1/2 stamped by policy)
|
|
152
|
+
morph-spec create my-hotfix --type hotfix # scout → surgical fix → test loop; Gate 3 always pauses for a human
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
You can also let the deterministic detector classify a free-text request instead of picking a type by hand:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
morph-spec create my-feature --request "produção caiu, corrigir urgente"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Change the type later if it turns out to be wrong (blocked after Gate 3):
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
morph-spec retype my-feature hotfix --reason "escalated to production incident"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Production incidents run through the dedicated `/morph-hotfix my-feature` slash command instead of `/morph-proposal`.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Parallel development with worktrees
|
|
172
|
+
|
|
173
|
+
Independent features can be developed in parallel, each isolated in its own git worktree — one feature, one worktree, one Claude Code instance:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
morph-spec create my-feature --worktree # birth the feature already isolated
|
|
177
|
+
# or, for an existing feature:
|
|
178
|
+
morph-spec worktree setup my-feature # creates .worktrees/my-feature/ on branch morph/my-feature
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Open the new worktree directory in its own Claude Code instance and work normally — a SessionStart hook injects the worktree's feature identity into context automatically. When the feature is done:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
morph-spec worktree finish my-feature # merges --no-ff back into the primary root, then cleans up
|
|
185
|
+
morph-spec archive my-feature # run at the primary root afterward
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
List every active worktree with its phase and gate status:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
morph-spec worktree list
|
|
192
|
+
```
|
|
193
|
+
|
|
135
194
|
---
|
|
136
195
|
|
|
137
196
|
## Multiple features
|
|
@@ -197,4 +256,4 @@ morph-spec doctor
|
|
|
197
256
|
|
|
198
257
|
---
|
|
199
258
|
|
|
200
|
-
*morph-spec
|
|
259
|
+
*morph-spec v8.0.0 by Polymorphism Tech*
|
package/framework/CLAUDE.md
CHANGED
|
@@ -31,7 +31,8 @@ Se não houver feature ativa, pergunte ao usuário qual feature trabalhar.
|
|
|
31
31
|
|
|
32
32
|
| Comando | Propósito |
|
|
33
33
|
|---------|-----------|
|
|
34
|
-
| `/morph-proposal {feature}` | Entendimento de negócio + plano (Gates 1 e 2) |
|
|
34
|
+
| `/morph-proposal {feature}` | Entendimento de negócio + plano (Gates 1 e 2). Passo 0 roteia por tipo de trabalho (`feature`/`bug`/`chore`/`hotfix`) |
|
|
35
|
+
| `/morph-hotfix {feature}` | ADW cirúrgico de hotfix (scout → fix → gate humano → ship) |
|
|
35
36
|
| `/morph-apply {feature}` | Execução autônoma + review (Gate 3) |
|
|
36
37
|
| `/morph-status [feature]` | Status da feature ativa (ou a especificada) |
|
|
37
38
|
| `/morph-archive {feature}` | Arquiva feature concluída (após Gate 3) — wrapper de `morph-spec archive` (atômico, git-aware) |
|
|
@@ -45,7 +46,10 @@ Se não houver feature ativa, pergunte ao usuário qual feature trabalhar.
|
|
|
45
46
|
- `morph-spec dag <feature>` — análise do DAG de tasks.json com decisão sequencial vs paralelo **ponderada por effort** (raízes S vão inline, nunca ganham agente próprio).
|
|
46
47
|
- `morph-spec score <feature> <task> <score> [--dims a,c,q,t]` — grava `taskScores` no feature.json com timestamp server-side; **nunca edite taskScores à mão**.
|
|
47
48
|
- `morph-spec gate-decision <feature> <gate> --pause <bool> [--reason <txt>] [--signals <json>]` — grava `gateDecisions` no feature.json com timestamp server-side (shape em `framework/schemas/feature.schema.json`); **nunca edite gateDecisions à mão** — o Edit manual colide com o hook state-sync.
|
|
48
|
-
- `morph-spec create <feature
|
|
49
|
+
- `morph-spec create <feature> --type <feature|bug|chore|hotfix> [--request "<txt>"] [--worktree]` — cria a estrutura da feature + `feature.json` canônico explicitamente (nascimento explícito no início da proposal; o hook state-sync continua cobrindo o caminho implícito como fallback). `--type` classifica direto; `--request "<pedido>"` roda o detector determinístico (empate/sem sinal sai com exit 2 e candidatos — a LLM decide e re-roda com `--type`); `--worktree` já nasce a feature no seu worktree próprio.
|
|
50
|
+
- `morph-spec retype <feature> <newType>` — muda o tipo de trabalho mid-flight; desfaz só os gates carimbados por política, preserva aprovações humanas; bloqueado após o Gate 3.
|
|
51
|
+
- `morph-spec verify <feature> [task] [--json]` — cadeia determinística build+testes+validadores (código antes do juiz LLM); escopo de task quando informado, senão a feature inteira.
|
|
52
|
+
- `morph-spec worktree setup|link|finish|list` — gerencia o ciclo do worktree por feature (`setup` cria `.worktrees/{f}/` na branch `morph/{f}`; `link` religa infra compartilhada; `finish` faz merge `--no-ff` e limpa; `list` mostra fase/gate de cada worktree ativo).
|
|
49
53
|
|
|
50
54
|
## Skills core (em `.claude/skills/`)
|
|
51
55
|
|
|
@@ -57,8 +61,15 @@ Se não houver feature ativa, pergunte ao usuário qual feature trabalhar.
|
|
|
57
61
|
| `morph-implement` | Executar uma tarefa com auto-advance entre tasks |
|
|
58
62
|
| `morph-eval` | Aplicar rubricas e produzir score 0-10 |
|
|
59
63
|
| `morph-review` | Produzir review-report.md (Gate 3) |
|
|
64
|
+
| `morph-hotfix` | ADW cirúrgico de hotfix — scout → fix → gate humano → ship |
|
|
60
65
|
| `morph-standards` | Localizar standard sob demanda |
|
|
61
66
|
|
|
67
|
+
## Roteamento por tipo de trabalho
|
|
68
|
+
|
|
69
|
+
Toda feature nasce com um `workType` (`morph-spec create <f> --type <tipo>` ou classificado de `--request "<pedido>"`) que dimensiona o pipeline: `feature` roda o fluxo completo (proposal → [uiux] → plan → implement → review); `bug` roda uma versão enxuta (proposal/plan lean); `chore` pula direto para implement (Gates 1/2 carimbados por política no nascimento); `hotfix` roda scout → fix cirúrgico → test loop → ship. O Gate 3 do `hotfix` **pausa sempre para um humano**, mesmo em `trust: auto` — o CLI recusa `morph-spec approve <f> review --mode auto` nesse tipo. Detalhes em `.morph/framework/MORPH.md` §2.1 e §5.
|
|
70
|
+
|
|
71
|
+
Features independentes podem rodar em paralelo, cada uma isolada num git worktree (`morph-spec create <f> --worktree` ou `morph-spec worktree setup <f>`) — uma feature por worktree, uma instância de Claude Code por worktree. `feature.json` viaja commitado na branch `morph/{f}`; ao fechar, aprove o Gate 3 dentro do worktree e rode `morph-spec worktree finish <f>` seguido de `morph-spec archive <f>` na raiz. Detalhes em `.morph/framework/MORPH.md` §2.2.
|
|
72
|
+
|
|
62
73
|
## Personas (em `.claude/agents/`)
|
|
63
74
|
|
|
64
75
|
Despache tasks de domínio com `subagent_type: "morph-{id}"` — a persona é o **system prompt** do subagent registrado (gerado de `agents.json`, a fonte única). Se o tipo não estiver na sua lista de subagents (stack não instalado neste projeto), use o fallback documentado em `morph-apply` §3b: `general-purpose` + campo `persona` de `agents.json` colado no prompt, **registrando o fallback nas `notes` da task**.
|
package/framework/MORPH.md
CHANGED
|
@@ -21,12 +21,15 @@ Entre gates, você opera com autonomia total. O dev valida. Você executa.
|
|
|
21
21
|
| Sub-agent retornou relatório (qualquer auto-score) | Auto-score é triagem, não aprovação: a task só avança com morph-eval ≥ 9 |
|
|
22
22
|
| Sub-agent com auto-score < 7 | Re-despachar com feedback específico (ou corrigir inline) antes do morph-eval |
|
|
23
23
|
| Build/typecheck quebra | Corrigir antes de marcar tarefa como done |
|
|
24
|
+
| Task implementada (código escrito) na fase implement | Rodar `morph-spec verify <feature> <task>` (build+testes+validadores determinísticos) ANTES do juiz: verify vermelho = feedback direto ao loop de correção, sem gastar o morph-eval; verify verde → morph-eval avalia o que o código não pega (arquitetura, contratos, qualidade) |
|
|
24
25
|
| Score morph-eval ≥ 9 | Silêncio (aprovação implícita), próxima tarefa |
|
|
25
26
|
| Score morph-eval < 9 numa task | Loop de correção autônomo: re-implementar com o feedback priorizado, até 3 tentativas, sem pausa humana |
|
|
26
27
|
| Score morph-eval < 9 após 3 tentativas | Escalar ao usuário (aceitar / continuar tentando / pular) — único ponto de pausa do loop de implement |
|
|
27
28
|
|
|
28
29
|
**Regra de ouro:** Dúvida que não bloqueia o progresso → resolver e registrar. Dúvida que bloqueia → uma pergunta, máximo.
|
|
29
30
|
|
|
31
|
+
**Código antes do juiz:** o `morph-spec verify` é a barreira determinística e barata — build, testes e validadores estáticos rodam primeiro, sempre igual, sem custo de tokens. O juiz LLM (morph-eval) só é acionado quando o verify passa. Código é o herói não-celebrado do loop: ele pega o que pega de graça; o juiz gasta tokens só no que o código não consegue ver.
|
|
32
|
+
|
|
30
33
|
---
|
|
31
34
|
|
|
32
35
|
## Stack baked-in
|
|
@@ -92,6 +95,32 @@ A fase `1-design/` (design system, mockups, flows) é opcional — aplica-se ape
|
|
|
92
95
|
|
|
93
96
|
Não avance de fase sem o gate correspondente ter sido confirmado.
|
|
94
97
|
|
|
98
|
+
### 2.1 Roteamento por tipo de trabalho
|
|
99
|
+
|
|
100
|
+
Nem todo trabalho merece o pipeline completo. Cada feature nasce com um **workType** (`morph-spec create <f> --type <tipo>` ou classificado de `--request "<pedido>"`), e o tipo dimensiona o pipeline:
|
|
101
|
+
|
|
102
|
+
| Tipo | Pipeline | Gates |
|
|
103
|
+
|------|----------|-------|
|
|
104
|
+
| `feature` | proposal → [uiux] → plan → implement → review (completo) | 1, 2, 3 |
|
|
105
|
+
| `bug` | repro+diagnóstico enxuto (proposal lean) → plan enxuto → implement → review | 1, 2, 3 |
|
|
106
|
+
| `chore` | fast-track: direto para implement (Gates 1/2 carimbados por política no nascimento) → review leve | só 3 |
|
|
107
|
+
| `hotfix` | scout (diagnóstico read-only) → fix cirúrgico → **aprovação humana obrigatória** → test loop → ship | 3 (humano sempre) |
|
|
108
|
+
|
|
109
|
+
**Como classificar (router):** sinais determinísticos primeiro — o `morph-spec create --request "<texto>"` roda o detector por keywords (hotfix: "produção caiu/urgente/incident/p0"; bug: "bug/corrigir/exception/regressão"; chore: "typo/rename/bump/config/docs/cleanup"). As keywords casam como **palavra inteira**, nunca como pedaço de outra palavra ("group0" não é `p0`, "prefix" não é `fix`, "debug" não é `bug`) — casar demais faria um pedido inócuo pular gates sem humano nem router. Por isso plural e flexão são listados explicitamente ("bugs", "erros", "incidentes", "configs"): o recall mora no vocabulário, não num matcher que dispara em fragmento. Confiança `high` → usa o tipo. Empate (`tie`) ou nenhum sinal (`none`) → o comando sai com código 2 e os candidatos; **você decide como roteador** e re-roda com `--type`. Só há ambiguidade real que valha uma `AskUserQuestion` quando o pedido do usuário é genuinamente indeterminado.
|
|
110
|
+
|
|
111
|
+
**Como o skip funciona (sem variantes de pipeline):** `chore`/`hotfix` têm os gates `proposal` e `plan` carimbados no nascimento com `approvedBy: "policy:{tipo}"`. Como a fase derivada avança com gate aprovado (`derivePhase` é gate-aware), o trabalho já nasce em `implement` — sem tocar `phases.json`. Os artefatos de fase reutilizam os nomes canônicos (o hotfix escreve um brief curto no `proposal.md`; ambos escrevem um `2-plan/tasks.json` mínimo de 1-3 tasks para ligar trace/score/dag).
|
|
112
|
+
|
|
113
|
+
**Compat:** uma feature sem `workType` (criada antes do v8) é tratada como `feature`. Mudança de tipo mid-flight: `morph-spec retype <f> <tipo>` (desfaz só carimbos de política, preserva aprovações humanas; bloqueado após o Gate 3).
|
|
114
|
+
|
|
115
|
+
### 2.2 Desenvolvimento paralelo por worktree
|
|
116
|
+
|
|
117
|
+
Features independentes podem ser desenvolvidas **em paralelo, cada uma no seu git worktree**, com uma instância de Claude Code por worktree. `morph-spec create <f> --worktree` (ou `morph-spec worktree setup <f>`) cria `.worktrees/{f}/` na branch `morph/{f}`. Contrato:
|
|
118
|
+
|
|
119
|
+
- **Uma feature = um worktree = uma instância.** Nunca abra duas instâncias na mesma feature (o setup recusa com exit 3).
|
|
120
|
+
- O estado autoritativo (`feature.json`) viaja **commitado na branch** `morph/{f}`. O `state.json` local do worktree é um índice derivável — materializado por self-heal, nunca sincronizado à mão.
|
|
121
|
+
- Infra compartilhada (`node_modules`, `.claude`, `.morph/framework`) é linkada por junction; `memory/` e `logs/` são locais de cada worktree (isolamento correto). Se faltar infra num worktree (aberto com `git worktree add` puro), rode `morph-spec worktree link --all`.
|
|
122
|
+
- **Fechamento:** aprove o Gate 3 dentro do worktree, depois `morph-spec worktree finish <f>` (merge `--no-ff` da branch na raiz primária limpa; recusa se worktree ou raiz estiverem sujos; aborta em conflito) e por fim `morph-spec archive <f>` na raiz. `morph-spec worktree list` mostra os worktrees ativos com fase e gate.
|
|
123
|
+
|
|
95
124
|
---
|
|
96
125
|
|
|
97
126
|
## 3. Contratos de Output
|
|
@@ -172,6 +201,7 @@ Gates são pontos de **pausa potencial**. Em `trust: "auto"` (default), gates **
|
|
|
172
201
|
| `standardsViolations` | array.length > 0 | Mandate ou implementation viola padrões proibidos |
|
|
173
202
|
| `evalScore` | < 9 | morph-review produz score composto da feature abaixo do mínimo (o loop de correção intra-task já buscou 9 por task antes daqui) |
|
|
174
203
|
| `taskCount` | > 20 | Escopo grande — provavelmente vale revisar antes de implementar |
|
|
204
|
+
| `workType` | === 'hotfix' | Gate 3 pausa SEMPRE para aprovação humana, mesmo em `trust: auto` — o CLI recusa `morph-spec approve <f> review --mode auto` num hotfix |
|
|
175
205
|
|
|
176
206
|
**Gate 1 — Proposta**
|
|
177
207
|
- Sinais: `designSystemDivergence`, `standardsViolations` (improvável).
|
|
@@ -185,6 +215,8 @@ Gates são pontos de **pausa potencial**. Em `trust: "auto"` (default), gates **
|
|
|
185
215
|
- Sinais: `evalScore` composite, `standardsViolations` detectadas em implementation.
|
|
186
216
|
- Skill responsável: `morph-review`.
|
|
187
217
|
|
|
218
|
+
**Gates por tipo de trabalho:** `chore` e `hotfix` não passam pelos Gates 1 e 2 — eles são carimbados por política no nascimento (`approvedBy: "policy:{tipo}"`, nunca `"auto"`, para não colidir com o gate-guard). A barra de qualidade do morph-eval e o Gate 3 continuam valendo para todos os tipos. Para `hotfix`, o Gate 3 é **sempre humano**: mesmo em `trust: auto` a `morph-hotfix` apresenta o review via `AskUserQuestion` e o `risk-detector` força a pausa; o backstop server-side (`morph-spec approve ... review --mode auto` recusa) garante que nenhum caminho auto passe por cima.
|
|
219
|
+
|
|
188
220
|
Para alterar o modo: editar `.morph/config/config.json → trust` (`"auto"` ou `"manual"`). Configs sem o campo `trust` defaultam para `"auto"`.
|
|
189
221
|
|
|
190
222
|
**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.
|
|
@@ -218,6 +250,8 @@ Inline (sem dispatch) é aceitável para tasks curtas (effort S/M) **dentro do d
|
|
|
218
250
|
|
|
219
251
|
**Mecanismo de dispatch:** os agents de domínio são subagents **registrados** (`.claude/agents/morph-{id}.md`, gerados de `agents.json` — a fonte única — na instalação). Despache com `subagent_type: "morph-{id}"` (ex.: `morph-dotnet-senior`): a persona é o **system prompt** do subagent, com tools, model e MCPs definidos por domínio no próprio `agents.json` (ex.: `context7` para docs vivas nos implementadores; Stitch/Gemini/Playwright no `morph-ui-designer`; o `morph-evaluator` é read-only). **Fallback** quando o tipo não está registrado (stack não instalado neste projeto): `general-purpose` com o campo `persona` de `agents.json` colado no prompt, **registrado nas `notes` da task**. O `**Persona:**` do recap registra sempre o mecanismo real usado — nunca uma auto-declaração.
|
|
220
252
|
|
|
253
|
+
**Persona de estágio — scout:** além das personas de domínio, existe o `morph-scout` (read-only: Read/Glob/Grep/Bash somente-leitura). Despache-o quando precisar de um mapa do território sem contaminar a thread principal — obrigatoriamente no início de um hotfix (localizar root cause + blast radius) e opcionalmente antes do plan de uma feature grande (buscar código, docs e specs anteriores relevantes). Ele devolve um mapa curto via SendMessage e encerra; não escreve código.
|
|
254
|
+
|
|
221
255
|
**O que passar ao sub-agent:**
|
|
222
256
|
- Especificação da tarefa (do tasks.json)
|
|
223
257
|
- Path do standard relevante (apenas um)
|
|
@@ -238,7 +272,7 @@ Inline (sem dispatch) é aceitável para tasks curtas (effort S/M) **dentro do d
|
|
|
238
272
|
**Protocolo obrigatório do sub-agent** (cláusulas que todo prompt de dispatch inclui — ver templates em `morph-implement` §4 e `morph-apply` §3b):
|
|
239
273
|
1. **ATO FINAL: enviar o relatório completo via `SendMessage` para `main` como a ÚLTIMA tool call do turno, e encerrar IMEDIATAMENTE depois** — a última mensagem em texto NÃO chega ao orquestrador; só SendMessage chega. Zero texto adicional, zero nova tool call, zero "aguardando confirmação" depois do SendMessage: é o encerramento, não um passo intermediário. Terminar idle sem SendMessage, ou continuar agindo depois dele, é **falha de protocolo**: o hook `subagent-report-guard` bloqueia o encerramento uma vez com a instrução, e a cobrança do orquestrador via SendMessage é apenas o fallback (registrada como falha no recap). Os templates trazem o exemplo literal da chamada.
|
|
240
274
|
2. Não tocar em `tasks.json`, `feature.json`, `state.json` nem no board de sessão (TaskCreate/TaskUpdate) — todo estado é gravado exclusivamente pelo orquestrador.
|
|
241
|
-
3.
|
|
275
|
+
3. **Verificação em batch paralelo — condicional ao isolamento:** em batch **sem isolamento** (agentes na mesma working tree), não rode build/test da suíte compartilhada — a verificação (`morph-spec verify`) é do orquestrador, uma vez, pós-batch. Em batch **com `isolation: "worktree"`** (quando o `morph-spec dag` recomenda, por colisão de `outputs` entre fluxos), a regra se inverte: rode build/test **dentro do seu worktree**, commite o trabalho na branch do worktree como penúltimo ato (antes do SendMessage), reporte a branch + status de build, e **nunca** faça merge nem toque na árvore principal — a integração é do orquestrador.
|
|
242
276
|
|
|
243
277
|
O sub-agent deve ser autossuficiente com o que você passou. Se precisar de mais contexto para começar, a tarefa não estava bem especificada — refine antes de despachar.
|
|
244
278
|
|
|
@@ -251,7 +285,7 @@ O sub-agent deve ser autossuficiente com o que você passou. Se precisar de mais
|
|
|
251
285
|
|
|
252
286
|
> **Anti-padrão a evitar:** implementar múltiplas tasks de domínios diferentes inline, em sequência, na thread principal — "eu já sei o padrão de cada uma". Isso é exatamente o sinal de que o sistema de delegação foi ignorado. Quando uma feature cruza ≥2 domínios, o caminho default é o Orchestrator despachando especialistas, não o Orchestrator virando faz-tudo.
|
|
253
287
|
|
|
254
|
-
**Dispatch em paralelo (multi-agent):** quando há fluxos de trabalho **genuinamente independentes** (ex: a cadeia de backend e a cadeia de frontend de uma mesma feature, que só convergem no fim), despache múltiplos sub-agents **ao mesmo tempo** — um por fluxo — em vez de processá-los em série. O orquestrador roda `morph-spec dag {feature}` — o comando analisa o DAG de `tasks.json` (por `dependencies` e por `group`), **pondera o esforço** (raízes e fluxos só de tasks S não ganham dispatch próprio: vão inline ou agrupados num único agente) e imprime a decisão pronta. As regras concretas e o cap de agentes simultâneos vivem na skill `morph-apply` (seção "Análise de DAG"). A thread principal coordena; os especialistas executam — inclusive em paralelo.
|
|
288
|
+
**Dispatch em paralelo (multi-agent):** quando há fluxos de trabalho **genuinamente independentes** (ex: a cadeia de backend e a cadeia de frontend de uma mesma feature, que só convergem no fim), despache múltiplos sub-agents **ao mesmo tempo** — um por fluxo — em vez de processá-los em série. O orquestrador roda `morph-spec dag {feature}` — o comando analisa o DAG de `tasks.json` (por `dependencies` e por `group`), **pondera o esforço** (raízes e fluxos só de tasks S não ganham dispatch próprio: vão inline ou agrupados num único agente) e imprime a decisão pronta. As regras concretas e o cap de agentes simultâneos vivem na skill `morph-apply` (seção "Análise de DAG"). A thread principal coordena; os especialistas executam — inclusive em paralelo. O `morph-spec dag` também detecta colisão de arquivos entre os fluxos paralelos (via os `outputs` planejados no tasks.json) e, quando dois fluxos escreveriam no mesmo path, recomenda `isolation: "worktree"` — nesse caso cada agente trabalha num worktree próprio e o orquestrador integra por merge ao final (protocolo detalhado na `morph-apply` §3b-w). Sem colisão, o batch roda na working tree compartilhada com verificação única pós-batch.
|
|
255
289
|
|
|
256
290
|
O padrão de dispatch e o template de prompt para sub-agents estão detalhados em `framework/skills/core/morph-implement/SKILL.md`.
|
|
257
291
|
|
|
@@ -272,11 +306,13 @@ Não invoque uma skill fora do momento indicado.
|
|
|
272
306
|
| morph-implement | `framework/skills/core/morph-implement/SKILL.md` | Invocada pela morph-apply — executa cada task |
|
|
273
307
|
| morph-eval | `framework/skills/core/morph-eval/SKILL.md` | Após concluir uma task ou fase |
|
|
274
308
|
| morph-review | `framework/skills/core/morph-review/SKILL.md` | Invocada pela morph-apply — produz review-report + Gate 3 |
|
|
309
|
+
| morph-hotfix | `framework/skills/core/morph-hotfix/SKILL.md` | **Orquestrador**: ADW cirúrgico de hotfix (scout → fix → gate humano → ship) |
|
|
275
310
|
| morph-standards | `framework/skills/core/morph-standards/SKILL.md` | Quando precisar localizar ou aplicar um standard específico |
|
|
276
311
|
|
|
277
312
|
**Entry points** para o usuário:
|
|
278
313
|
- `/morph-proposal {feature}` → invoca `Skill(morph-proposal)`, que orquestra brainstorming + plan
|
|
279
314
|
- `/morph-apply {feature}` → invoca `Skill(morph-apply)`, que orquestra implement + review
|
|
315
|
+
- `/morph-hotfix {feature}` → invoca `Skill(morph-hotfix)`, o pipeline cirúrgico de correção em produção
|
|
280
316
|
|
|
281
317
|
Os slash commands são atalhos: o agente pode chamar `Skill(morph-proposal)` diretamente quando o usuário pede "use /morph-proposal".
|
|
282
318
|
|
package/framework/agents.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "5.
|
|
2
|
+
"version": "5.2.0",
|
|
3
3
|
"schema": "domain-personas",
|
|
4
|
-
"total_agents":
|
|
5
|
-
"description": "Domain personas dispatched per task via subagent_type morph-{id} (.claude/agents/ generated from this file — single source of truth, ADR-001). Optional per-agent fields: `tools` (comma-separated tool scope; default Read, Write, Edit, Bash, Glob, Grep), `model` (
|
|
4
|
+
"total_agents": 8,
|
|
5
|
+
"description": "Domain personas dispatched per task via subagent_type morph-{id} (.claude/agents/ generated from this file — single source of truth, ADR-001). Two independent axes: domain (dotnet-senior, ef-modeler, maf-expert, nextjs-expert, ui-designer, infra-engineer, evaluator) and stage (scout — read-only diagnosis before implementation). Optional per-agent fields: `tools` (comma-separated tool scope; default Read, Write, Edit, Bash, Glob, Grep), `model` (dimensioned per stage/criticality — evaluator: opus, domain implementers: sonnet, scout: haiku; no longer uniformly inherit), `mcp` (registry ids from framework/mcp/registry.json, granted as mcp__{id}). The 3 roles (Orchestrator/Specialist/Evaluator) are assumed by Claude itself per MORPH.md.",
|
|
6
6
|
"agents": {
|
|
7
7
|
"dotnet-senior": {
|
|
8
8
|
"title": ".NET Senior Engineer",
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
"backend-integrations-neon-auth-neon-auth"
|
|
24
24
|
],
|
|
25
25
|
"mcp": ["context7"],
|
|
26
|
+
"model": "sonnet",
|
|
26
27
|
"persona": "Você é um engenheiro .NET sênior. Pensa em VSA com handlers diretos, result pattern, sealed classes, Guid.CreateVersion7(). Acesso a dados: ApplicationDbContext injetado direto no slice (DbSet<T> já é repository, DbContext já é unit of work); para concorrência ou SQL específico, store dedicado hand-written com justificativa em decisions.md; nunca uma camada de Service/Manager; nunca repository genérico (IRepository<T>/IUnitOfWork). Não usa exceptions como fluxo. Consulta o standard antes de escrever cada slice. Nomeia tudo em PascalCase para tipos, camelCase para parâmetros."
|
|
27
28
|
},
|
|
28
29
|
"ef-modeler": {
|
|
@@ -41,6 +42,7 @@
|
|
|
41
42
|
"infrastructure-neon-pgvector"
|
|
42
43
|
],
|
|
43
44
|
"mcp": ["context7"],
|
|
45
|
+
"model": "sonnet",
|
|
44
46
|
"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."
|
|
45
47
|
},
|
|
46
48
|
"maf-expert": {
|
|
@@ -65,6 +67,7 @@
|
|
|
65
67
|
"ai-agents-multi-agent-patterns"
|
|
66
68
|
],
|
|
67
69
|
"mcp": ["context7"],
|
|
70
|
+
"model": "sonnet",
|
|
68
71
|
"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."
|
|
69
72
|
},
|
|
70
73
|
"nextjs-expert": {
|
|
@@ -86,6 +89,7 @@
|
|
|
86
89
|
"backend-integrations-neon-auth-neon-auth"
|
|
87
90
|
],
|
|
88
91
|
"mcp": ["context7"],
|
|
92
|
+
"model": "sonnet",
|
|
89
93
|
"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."
|
|
90
94
|
},
|
|
91
95
|
"ui-designer": {
|
|
@@ -105,6 +109,7 @@
|
|
|
105
109
|
],
|
|
106
110
|
"tools": "Read, Write, Edit, Glob, Grep",
|
|
107
111
|
"mcp": ["context7", "stitch", "gemini-image", "playwright"],
|
|
112
|
+
"model": "sonnet",
|
|
108
113
|
"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."
|
|
109
114
|
},
|
|
110
115
|
"infra-engineer": {
|
|
@@ -123,6 +128,7 @@
|
|
|
123
128
|
"backend-dotnet-scrutor"
|
|
124
129
|
],
|
|
125
130
|
"mcp": ["context7"],
|
|
131
|
+
"model": "sonnet",
|
|
126
132
|
"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. Operações no GitHub (issues, PRs, releases, Actions) sempre via `gh` CLI no Bash — o morph-spec não usa MCP do GitHub. Coolify sempre via SSH + curl na API local — não há MCP nem CLI."
|
|
127
133
|
},
|
|
128
134
|
"evaluator": {
|
|
@@ -136,7 +142,20 @@
|
|
|
136
142
|
"stack": ["*"],
|
|
137
143
|
"standards": [],
|
|
138
144
|
"tools": "Read, Glob, Grep",
|
|
145
|
+
"model": "opus",
|
|
139
146
|
"persona": "Você aplica as rubricas em .morph/framework/evals/rubrics/. Você não participou da implementação — avalia apenas o mandate, o diff e a saída real dos testes que o orquestrador fornece, com contexto fresco. Não reescreve código — produz scores 0-10 por dimensão (architecture, contracts, code-quality, test-coverage), feedback priorizado acionável, e ação clara (aprovado em >=9 / feedback para o loop de correção em <9). Silêncio em scores ≥ 9 é o sinal correto."
|
|
147
|
+
},
|
|
148
|
+
"scout": {
|
|
149
|
+
"title": "Codebase Scout",
|
|
150
|
+
"icon": "🔦",
|
|
151
|
+
"color": "gray",
|
|
152
|
+
"domains": ["scouting", "diagnosis", "code-search"],
|
|
153
|
+
"keywords": ["scout", "diagnose", "root cause", "blast radius", "search", "map", "investigate", "locate", "trace"],
|
|
154
|
+
"stack": ["*"],
|
|
155
|
+
"standards": [],
|
|
156
|
+
"tools": "Read, Glob, Grep, Bash",
|
|
157
|
+
"model": "haiku",
|
|
158
|
+
"persona": "Você é um scout read-only: mapeia o território sem escrever código. Dado um sintoma ou uma feature, localiza os arquivos relevantes, o root cause provável e o blast radius (o que mais é afetado). Usa Read/Glob/Grep e Bash SOMENTE-LEITURA (git log/diff/show, ls, cat) — nunca Write/Edit, nunca comandos que mudam estado. Devolve um mapa curto e acionável (arquivos com paths, hipótese de causa, áreas de impacto) via SendMessage e encerra. Não implementa, não corrige — ilumina o caminho para quem vai."
|
|
140
159
|
}
|
|
141
160
|
}
|
|
142
161
|
}
|