@polymorphism-tech/morph-spec 8.17.0 → 8.18.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/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +1 -1
- package/docs/QUICKSTART.md +1 -1
- package/framework/CLAUDE.md +45 -43
- package/framework/MORPH.md +119 -167
- package/framework/docs/CLI.md +40 -0
- package/framework/skills/core/create-umbraco-lp/SKILL.md +3 -1
- package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +3 -1
- package/framework/skills/core/morph-apply/SKILL.md +3 -7
- package/framework/skills/core/morph-brainstorming/SKILL.md +2 -12
- package/framework/skills/core/morph-eval/SKILL.md +1 -1
- package/framework/skills/core/morph-hotfix/SKILL.md +1 -1
- package/framework/skills/core/morph-implement/SKILL.md +1 -1
- package/framework/skills/core/morph-plan/SKILL.md +2 -8
- package/framework/skills/core/morph-proposal/SKILL.md +1 -1
- package/framework/skills/core/morph-review/SKILL.md +1 -1
- package/framework/skills/core/morph-stack-scan/SKILL.md +2 -14
- package/framework/skills/core/morph-standards/SKILL.md +1 -1
- package/package.json +1 -1
- package/src/commands/project/doctor.js +11 -4
- package/src/commands/project/init.js +1 -1
- package/src/commands/project/update.js +91 -7
- package/src/lib/stack-filter.js +7 -2
- package/src/scripts/setup-infra.js +27 -8
- package/src/utils/skills-installer.js +28 -15
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Spec-driven development framework for multi-stack projects. Turns feature requests into implementation-ready code through structured, AI-orchestrated phases.
|
|
4
4
|
|
|
5
5
|
**Package:** `@polymorphism-tech/morph-spec`
|
|
6
|
-
**Version:** 8.
|
|
6
|
+
**Version:** 8.18.0
|
|
7
7
|
**Requires:** Node.js 22+, Claude Code
|
|
8
8
|
|
|
9
9
|
---
|
|
@@ -368,4 +368,4 @@ Code generated by morph-spec (contracts, templates, implementation output) belon
|
|
|
368
368
|
|
|
369
369
|
---
|
|
370
370
|
|
|
371
|
-
*morph-spec v8.
|
|
371
|
+
*morph-spec v8.18.0 by [Polymorphism Tech](https://polymorphism.tech)*
|
package/claude-plugin.json
CHANGED
package/docs/CHEATSHEET.md
CHANGED
package/docs/QUICKSTART.md
CHANGED
package/framework/CLAUDE.md
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
## Como começar cada sessão
|
|
6
6
|
|
|
7
7
|
1. Leia `.morph/framework/MORPH.md` — o charter NLH com papéis, fases, gates e skills.
|
|
8
|
-
2. Leia `.morph/state.json` — índice fino e gitignored (
|
|
9
|
-
3. Se existir `.morph/features/{feature}/handoff.md` para a feature ativa, **leia-o antes de re-derivar contexto à mão** —
|
|
8
|
+
2. Leia `.morph/state.json` — índice fino e gitignored (status + updatedAt por feature), reconstruído a cada load. **Não o edite à mão.** Estado autoritativo e commitado de cada feature: `.morph/features/{feature}/feature.json`.
|
|
9
|
+
3. Se existir `.morph/features/{feature}/handoff.md` para a feature ativa, **leia-o antes de re-derivar contexto à mão** — documento de retomada comprimido (regenere com `morph-spec handoff <f>` se parecer velho).
|
|
10
10
|
4. Assuma o papel correspondente (Orchestrator/Specialist/Evaluator) e continue o trabalho. Não aguarde instrução do usuário se há trabalho pendente entre gates.
|
|
11
11
|
|
|
12
12
|
Se não houver feature ativa, pergunte ao usuário qual feature trabalhar.
|
|
@@ -15,26 +15,23 @@ Se não houver feature ativa, pergunte ao usuário qual feature trabalhar.
|
|
|
15
15
|
|
|
16
16
|
**NUNCA:**
|
|
17
17
|
- Pular para código sem proposal aprovado (Gate 1) e plano aprovado (Gate 2).
|
|
18
|
-
- Modificar o contrato do plano depois do Gate 2
|
|
19
|
-
- Escrever critérios de aceite no `proposal.md
|
|
20
|
-
- Editar `.morph/specs/usecases/` à mão
|
|
21
|
-
-
|
|
22
|
-
- Listar perguntas em texto simples — sempre use a tool `AskUserQuestion` (1-4 perguntas por chamada).
|
|
18
|
+
- Modificar o contrato do plano depois do Gate 2 — `spec.md`, `mandate.md`, e os campos `title`/`description`/`dependencies`/`effort`/`doneCriteria`/`group`/`agent`/`standards` de `tasks.json` ficam congelados (`protect-spec-files` bloqueia via `Write` ou `Edit`). Campos mutáveis `status`/`outputs`/`notes` continuam graváveis (ver SEMPRE). **Use cases (`2-plan/usecases/UC-*.md`) NÃO estão congelados** — editáveis por design, é assim que se muda o comportamento e se re-roda `implement`.
|
|
19
|
+
- Escrever critérios de aceite no `proposal.md` — pertencem aos use cases (pós-condição **observável em teste**, chega **literal** ao `doneCriteria`).
|
|
20
|
+
- Editar `.morph/specs/usecases/` à mão — só o `finish` escreve lá (lê de `2-plan/usecases/`, carimba `status: implemented`, sobrescreve por ID). Mudar um UC existente (caso `bug`): copie para `2-plan/usecases/` da feature e corrija lá.
|
|
21
|
+
- Listar perguntas em texto simples — sempre `AskUserQuestion` (1-4 perguntas por chamada).
|
|
23
22
|
- Usar `Guid.NewGuid()`, classes não-sealed sem justificativa, exceptions como fluxo de controle, camada de Service/Manager entre handler e dados, repository genérico (`IRepository<T>`/`IUnitOfWork`), ou SQL cru sem justificativa.
|
|
23
|
+
- Editar `taskScores`, `gateDecisions` ou gates de `feature.json` à mão — sempre via `morph-spec score`/`gate-decision`/`approve` (timestamps server-side; Edit manual colide com o hook `state-sync`).
|
|
24
24
|
|
|
25
25
|
**SEMPRE:**
|
|
26
26
|
- Auto-advance entre tarefas durante a fase implement — não pause sem ambiguidade bloqueante.
|
|
27
|
-
- Abrir toda feature `feature`/`bug` com a escolha de **modo de descoberta** (entrevista ou automático), depois de varrer o ambiente
|
|
28
|
-
- Atualizar
|
|
29
|
-
- Apresentar gates com o template fixo
|
|
27
|
+
- Abrir toda feature `feature`/`bug` com a escolha de **modo de descoberta** (entrevista ou automático), depois de varrer o ambiente. **No modo entrevista, uma pergunta por chamada de `AskUserQuestion`** — o "1-4 por chamada" não é licença para agrupar a entrevista. O Gate 1 pausa sempre nesse modo.
|
|
28
|
+
- Atualizar `tasks.json` ao concluir cada task gravando só os campos mutáveis `status`/`outputs`/`notes` — via `Write` OU `Edit`.
|
|
29
|
+
- Apresentar gates com o template fixo (MORPH.md/morph-plan). **A pergunta PRECISA nomear a feature** ("Gate 2 — Plano de {feature} aprovado?") — é por esse nome que `state-sync` atribui a aprovação ao `feature.json` certo. Sem nome, com mais de uma feature na árvore, ele **recusa gravar** — aprove com `morph-spec approve <feature> <gate>`.
|
|
30
30
|
- Registrar decisões não triviais em `decisions.md`.
|
|
31
|
-
- Aplicar `morph-eval` após cada tarefa; silêncio em score ≥ 9 é o sinal correto. Score < 9 dispara o loop de correção autônomo
|
|
32
|
-
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
3. Sem build/test da suíte compartilhada em batch paralelo sem isolamento (verificação é do orquestrador, pós-batch).
|
|
36
|
-
|
|
37
|
-
Racional completo: `MORPH.md` §6. Templates curtos: `morph-implement` §4, `morph-apply` §3b. **O orquestrador lê o arquivo ao retomar controle** — nunca confia só na mensagem de retorno da tool.
|
|
31
|
+
- Aplicar `morph-eval` após cada tarefa; silêncio em score ≥ 9 é o sinal correto. Score < 9 dispara o loop de correção autônomo, sem escalar ao humano entre tarefas. No Gate 3, o score composto vem do **avaliador independente** despachado pela `morph-review` — nunca de auto-avaliação de quem implementou.
|
|
32
|
+
- Em `hotfix`, o Gate 3 pausa **sempre** para um humano, mesmo em `trust: auto` — `approve ... review --mode auto` é recusado; aprove com `--approver`.
|
|
33
|
+
- Confirmar antes de `finish`/`archive`/`delete` se o SessionStart avisar que outra sessão tem claim vivo na mesma feature.
|
|
34
|
+
- **Contrato do relatório final** em todo dispatch de sub-agent: (1) grava o relatório em arquivo canônico ANTES de encerrar — `.morph/features/{f}/3-implement/reports/{taskId}.md` (avaliador: `4-review/evaluator-report.md`) — com os 4 itens obrigatórios (o quê / arquivos / problemas / auto-score 0-10); é o retorno autoritativo, nunca chamar `SendMessage`; (2) não tocar `tasks.json`/`feature.json`/`state.json` nem o board de sessão; (3) sem build/test compartilhado em batch paralelo sem isolamento. Racional completo: `MORPH.md` §6. Templates: `morph-implement` §4, `morph-apply` §3b. **O orquestrador lê o arquivo ao retomar controle** — nunca confia só na mensagem de retorno da tool.
|
|
38
35
|
|
|
39
36
|
## Slash commands
|
|
40
37
|
|
|
@@ -44,31 +41,36 @@ Se não houver feature ativa, pergunte ao usuário qual feature trabalhar.
|
|
|
44
41
|
| `/morph-hotfix {feature}` | ADW cirúrgico de hotfix (scout → fix → gate humano → ship) |
|
|
45
42
|
| `/morph-apply {feature}` | Execução autônoma + review (Gate 3) |
|
|
46
43
|
| `/morph-status [feature]` | Status da feature ativa (ou a especificada) |
|
|
47
|
-
| `/morph-archive {feature}` | Arquiva-**sem-integrar** (
|
|
44
|
+
| `/morph-archive {feature}` | Arquiva-**sem-integrar** (legadas/faxina) — wrapper de `archive`. Fechamento normal = `finish --pr\|--merge` |
|
|
48
45
|
| `/morph-preflight` | Validação pré-deploy (specs, contratos, testes, infra) |
|
|
49
46
|
| `/morph-troubleshoot [erro]` | Diagnóstico de erros .NET/Next.js com root-cause analysis |
|
|
50
47
|
|
|
51
48
|
**Comandos CLI de gate e de estado** (a LLM os usa em vez de editar o estado à mão):
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
49
|
+
|
|
50
|
+
| Comando | Propósito |
|
|
51
|
+
|---------|-----------|
|
|
52
|
+
| `approve <f> <gate> --mode auto` | Aprova gate em `trust:auto`. Gate 3 exige `evaluator-report.md` (ou `--self-assessed`); `hotfix` nunca aceita `--mode auto` — use `--approver` |
|
|
53
|
+
| `advance <f>` | Aprova o gate corrente + já cria a pasta da próxima fase |
|
|
54
|
+
| `score <f> <task> <n> [--dims a,c,q,t]` | Grava `taskScores` server-side — nunca edite à mão |
|
|
55
|
+
| `gate-decision <f> <gate> --pause <bool>` | Grava `gateDecisions` server-side — nunca edite à mão |
|
|
56
|
+
| `create <f> --description "..." --type <t>` | Nasce a feature + `feature.json`; `--worktree` já isola |
|
|
57
|
+
| `list [--all] [--json]` | Quadro de auditoria: feature × workType × status × gates |
|
|
58
|
+
| `delete <f> [--archive] [--force]` | Remove feature; recusa se gate aprovado sem `--force` |
|
|
59
|
+
| `retype <f> <tipo>` | Muda o workType mid-flight; bloqueado após o Gate 3 |
|
|
60
|
+
| `finish <f> --pr\|--merge` | Encerramento único: arquiva, promove use cases, integra, desmonta worktree |
|
|
61
|
+
| `archive <f>` | Arquiva sem integrar (legadas/faxina) |
|
|
62
|
+
| `worktree setup\|link\|list` | Ciclo do worktree (fechamento é `finish`, não aqui) |
|
|
63
|
+
| `handoff <f>` | Regenera o documento de retomada da feature |
|
|
64
|
+
| `fleet` | Visão agregada de toda feature ativa (raiz + worktrees) |
|
|
65
|
+
| `claim [f] [--release] [--list]` | Posse advisory — confirme antes de `finish`/`archive`/`delete` se outra sessão tiver claim vivo |
|
|
66
|
+
| `dag <f>` | DAG de `tasks.json`: sequencial/paralelo, recomenda isolamento |
|
|
67
|
+
| `verify <f> [task] [--json]` | Build+testes+validadores, antes do juiz LLM |
|
|
68
|
+
| `doctor --worktrees [--prune]` | Reconcilia git × disco × features; só `--prune` remove algo |
|
|
69
|
+
| `report-check <f> [task] [--json]` | Audita relatório de sub-agent vs. trabalho entregue |
|
|
70
|
+
| `telemetry [--feature] [--limit]` | Caminho de execução da sessão a partir de `events.jsonl` |
|
|
71
|
+
| `cost [f] [--by task\|phase]` | Custo (bytes/duração) a partir do mesmo log |
|
|
72
|
+
|
|
73
|
+
Todo comando é `morph-spec <comando>`. Referência completa (flags, semântica, exemplos): `.morph/framework/CLI.md`.
|
|
72
74
|
|
|
73
75
|
## Skills core (em `.claude/skills/`)
|
|
74
76
|
|
|
@@ -76,7 +78,7 @@ Se não houver feature ativa, pergunte ao usuário qual feature trabalhar.
|
|
|
76
78
|
|-------|-------------|
|
|
77
79
|
| `morph-brainstorming` | Entender negócio, escanear stack, produzir proposal.md |
|
|
78
80
|
| `morph-stack-scan` | Detectar desvios de stack em projeto brownfield |
|
|
79
|
-
| `morph-plan` | Destilar
|
|
81
|
+
| `morph-plan` | Destilar use cases e produzir spec.md + mandate.md + tasks.json |
|
|
80
82
|
| `morph-implement` | Executar uma tarefa com auto-advance entre tasks |
|
|
81
83
|
| `morph-eval` | Aplicar rubricas e produzir score 0-10 |
|
|
82
84
|
| `morph-review` | Produzir review-report.md (Gate 3) |
|
|
@@ -85,13 +87,13 @@ Se não houver feature ativa, pergunte ao usuário qual feature trabalhar.
|
|
|
85
87
|
|
|
86
88
|
## Roteamento por tipo de trabalho
|
|
87
89
|
|
|
88
|
-
|
|
90
|
+
`workType` (`create --type <tipo>` ou classificado de `--request`) dimensiona o pipeline: `feature` completo, `bug` enxuto, `chore` fast-track (Gates 1/2 por política), `hotfix` scout→fix→gate humano→ship. Canônico: `MORPH.md` §2.1/§5.
|
|
89
91
|
|
|
90
|
-
Features independentes
|
|
92
|
+
Features independentes rodam em paralelo, uma por git worktree (`create --worktree`/`worktree setup`), bloco de portas próprio + handoff.md. Fechamento: `finish <f> --pr|--merge`; agregado: `fleet`. Canônico: `MORPH.md` §2.2.
|
|
91
93
|
|
|
92
94
|
## Personas (em `.claude/agents/`)
|
|
93
95
|
|
|
94
|
-
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).
|
|
96
|
+
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). Tipo não registrado (stack não instalado): fallback `general-purpose` + campo `persona` colado no prompt, **registrando nas `notes` da task** (detalhe: `morph-apply` §3b).
|
|
95
97
|
|
|
96
98
|
<!-- morph-agents:start -->
|
|
97
99
|
_Lista derivada na instalação (`morph-spec setup-infra`). Se este bloco está vazio, rode `morph-spec setup-infra --reinstall`._
|
|
@@ -110,6 +112,6 @@ Em projetos morph-spec, prefira as skills `morph-*` sobre as equivalentes `super
|
|
|
110
112
|
| `superpowers:executing-plans` | `morph-apply` |
|
|
111
113
|
| `superpowers:test-driven-development` | seguir `mandate.md` (TDD está embutido) |
|
|
112
114
|
|
|
113
|
-
As skills `morph-*` aplicam Gates
|
|
115
|
+
As skills `morph-*` aplicam Gates e leem/produzem outputs nos paths corretos de `.morph/`. As `superpowers:*` são genéricas e não conhecem o contexto morph-spec.
|
|
114
116
|
|
|
115
117
|
*MORPH-SPEC v5 by Polymorphism Tech*
|