@polymorphism-tech/morph-spec 8.25.0 → 8.26.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.
Files changed (43) hide show
  1. package/README.md +2 -2
  2. package/bin/morph-spec.js +2 -1
  3. package/claude-plugin.json +1 -1
  4. package/docs/CHEATSHEET.md +1 -1
  5. package/docs/QUICKSTART.md +1 -1
  6. package/framework/CLAUDE.md +2 -2
  7. package/framework/MORPH.md +22 -21
  8. package/framework/agents.json +1 -1
  9. package/framework/commands/create-umbraco-lp.md +1 -1
  10. package/framework/commands/migrate-lp-to-umbraco.md +1 -1
  11. package/framework/commands/morph-apply.md +4 -4
  12. package/framework/commands/morph-hotfix.md +3 -3
  13. package/framework/commands/morph-proposal.md +5 -5
  14. package/framework/docs/CLI.md +3 -3
  15. package/framework/evals/rubrics/condensed.md +2 -2
  16. package/framework/evals/rubrics/test-coverage.md +7 -0
  17. package/framework/hooks/claude-code/core/protect-spec-files.js +115 -4
  18. package/framework/hooks/shared/payload-utils.js +19 -4
  19. package/framework/rules/dotnet-templates.md +2 -1
  20. package/framework/rules/morph-workflow.md +42 -29
  21. package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
  22. package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
  23. package/framework/skills/core/morph-apply/SKILL.md +6 -6
  24. package/framework/skills/core/morph-brainstorming/SKILL.md +2 -2
  25. package/framework/skills/core/morph-eval/SKILL.md +1 -1
  26. package/framework/skills/core/morph-hotfix/SKILL.md +7 -7
  27. package/framework/skills/core/morph-implement/SKILL.md +21 -6
  28. package/framework/skills/core/morph-plan/SKILL.md +15 -3
  29. package/framework/skills/core/morph-proposal/SKILL.md +7 -7
  30. package/framework/skills/core/morph-review/SKILL.md +10 -3
  31. package/framework/skills/core/morph-stack-scan/SKILL.md +3 -3
  32. package/framework/skills/core/morph-standards/SKILL.md +4 -4
  33. package/framework/skills/core/morph-uiux/SKILL.md +3 -3
  34. package/framework/templates/README.md +72 -643
  35. package/framework/templates/examples/spec-examples.md +2 -1
  36. package/package.json +1 -1
  37. package/src/commands/project/claim.js +19 -3
  38. package/src/commands/state/approve.js +17 -3
  39. package/src/commands/state/finish.js +11 -1
  40. package/src/commands/state/gate-check.js +9 -20
  41. package/src/commands/state/report-check.js +157 -5
  42. package/src/lib/evaluator-report.js +72 -0
  43. package/src/lib/risk-detector.js +35 -0
@@ -14,7 +14,7 @@ stacks:
14
14
  **NEVER skip to code without a specification.** Every feature must progress through phases:
15
15
 
16
16
  1. **Proposal** — Problem statement + scope + risks (`0-proposal/proposal.md`). No acceptance criteria: verifiable behaviour lives in the use cases.
17
- 2. **Design** (optional, UI-heavy) — Design system + mockups + flows (`1-design/`)
17
+ 2. **UI/UX Design** (optional, UI-heavy) — Design system + mockups + flows. The phase id is `uiux` (that is the gate name); the folder is `1-design/`
18
18
  3. **Plan** — Use cases first, then technical spec + mandate + tasks (`2-plan/usecases/UC-{nn}-{slug}.md`, `spec.md`, `mandate.md`, `tasks.json`). Each use case post-condition must be observable in a test and reaches the task's `doneCriteria` verbatim.
19
19
  4. **Implement** — Code + recap (`3-implement/recap.md`)
20
20
  5. **Review** — Review report + Gate 3 (`4-review/review-report.md`)
@@ -24,7 +24,7 @@ stacks:
24
24
  ## Phase Sequence
25
25
 
26
26
  ```
27
- proposal → [design] → plan → implement → review
27
+ proposal → [uiux] → plan → implement → review
28
28
  ```
29
29
 
30
30
  Use `morph-spec status {feature}` to see current phase and pending approval gates.
@@ -35,26 +35,32 @@ Use `morph-spec status {feature}` to see current phase and pending approval gate
35
35
 
36
36
  | Command | Purpose |
37
37
  |---------|---------|
38
- | `/morph-proposal {feature}` | Full spec pipeline (phases 1-4, pauses for approval) |
39
- | `/morph-apply {feature}` | Implement feature (phase 5) |
38
+ | `/morph-proposal {feature}` | Business understanding + plan — pauses at Gate 1 and Gate 2 |
39
+ | `/morph-apply {feature}` | Autonomous execution + review — pauses at Gate 3 |
40
40
  | `/morph-status` | Feature dashboard |
41
41
 
42
+ The full slash-command and CLI surface lives in the resident `.claude/CLAUDE.md` and in
43
+ `.morph/framework/CLI.md` — this table only carries the three phase entry points.
44
+
42
45
  ---
43
46
 
44
47
  ## State & Outputs
45
48
 
46
49
  | Path | Notes |
47
50
  |------|-------|
48
- | `.morph/state.json` | **READ-ONLY** — updated automatically by the `state-sync` hook |
51
+ | `.morph/features/{feature}/feature.json` | **Authoritative + committed** feature state. Write it through the CLI (`create`, `score`, `gate-check`, `approve`) — a hand Edit collides with the `state-sync` hook |
52
+ | `.morph/state.json` | **READ-ONLY** — thin, gitignored index rebuilt from `feature.json` on load; kept in sync by the `state-sync` hook |
49
53
  | `.morph/features/{feature}/{phase}/` | Feature outputs organized by phase |
50
54
  | `.morph/framework/` | **READ-ONLY** — framework files managed by morph-spec |
51
55
  | `.morph/config/config.json` | Project configuration (editable) |
52
56
 
53
57
  ### output types
54
58
 
55
- Output types are defined in `src/core/paths/output-schema.js`. State sync is
56
- handled automatically by the `state-sync.js` PostToolUse hook — the agent
57
- does not need to record outputs through any CLI call.
59
+ The canonical filename and phase folder of every output type are fixed by
60
+ morph-spec itself — the concrete paths are in the table below. State sync is
61
+ handled automatically by the `state-sync.js` PostToolUse hook: write the file
62
+ at the right path and it is recorded; the agent does not call any CLI to
63
+ register an output.
58
64
 
59
65
  ---
60
66
 
@@ -183,35 +189,42 @@ Every task in `tasks.json` MUST reference its FR(s) in the `description` field s
183
189
 
184
190
  ---
185
191
 
186
- ## Mandatory Skills per Phase
187
-
188
- During implementation, these skills MUST be invoked at the specified triggers:
192
+ ## Debugging
189
193
 
190
- ### Implement Phase
191
- | Trigger | Skill | When |
192
- |---------|-------|------|
193
- | Before each task | `superpowers:test-driven-development` | Invoke BEFORE writing any code for a task |
194
- | Before marking a task complete | `morph-verification-before-completion` | Invoke BEFORE setting a task's `status` to `done` in `tasks.json` |
195
- | On bug/unexpected | `superpowers:systematic-debugging` | Invoke IF a bug or unexpected behavior is encountered |
196
- | After all tasks | `morph-post-implementation` | Invoke AFTER all tasks completed |
197
- | Before PR | `morph-checklist` | Invoke BEFORE creating pull request |
194
+ When a bug or unexpected behavior shows up mid-task, invoke `superpowers:systematic-debugging`
195
+ with the `Skill()` tool **before proposing a fix** — root cause first, never a patch on the
196
+ symptom. This is MANDATORY; do NOT skip it.
198
197
 
199
- ### Tasks Phase
200
- | Trigger | Skill | When |
201
- |---------|-------|------|
202
- | On parallel tasks | `superpowers:dispatching-parallel-agents` | When parallel task groups are identified |
203
- | Before completion | `morph-verification-before-completion` | Before completing the tasks phase |
198
+ Everything else that a rule like this might list is owned by the flow itself, and duplicating it
199
+ here would put a second, staler copy in permanent context:
204
200
 
205
- These are MANDATORY. Use the `Skill()` tool. Do NOT skip.
201
+ | Concern | Where it actually lives |
202
+ |---------|-------------------------|
203
+ | TDD before writing code | The feature's `mandate.md` (TDD is built in) — the resident `.claude/CLAUDE.md` says to prefer `morph-*` over the generic `superpowers:*` equivalents |
204
+ | Verifying a task before `status: "done"` | `morph-spec verify {feature} [task]` (build + tests + validators + e2e), then the `morph-eval` skill for the 0-10 score |
205
+ | Parallel dispatch | `morph-spec dag {feature}` decides sequential vs parallel; execution and isolation rules are in `morph-apply` §2/§3b |
206
+ | Closing the phase / opening the PR | `morph-review` for Gate 3, then `morph-spec finish {feature} --pr\|--merge` |
206
207
 
207
208
  ---
208
209
 
209
210
  ## Scope Escalation
210
211
 
211
- If during implementation a task reveals significantly more complexity than estimated:
212
- - **Low impact:** record the added scope in the task's `notes` field (in `tasks.json`) and track the sub-steps with native `TaskCreate`/`TaskUpdate` for the current session
213
- - **Medium/High impact:** `/morph-scope-escalation <feature>` — re-opens the plan so the frozen contract (`title`/`description`/`dependencies`/`doneCriteria`) can be amended through the gate
214
- - **Never** implement extra functionality within a task without registering it — in `notes` for small additions, or via scope escalation for anything that changes the plan contract
212
+ The plan contract frozen at Gate 2 — `spec.md`, `mandate.md`, and the immutable `tasks.json`
213
+ fields listed in `morph-task-tracking.md` — is enforced by the `protect-spec-files` hook. When a
214
+ task turns out to be bigger than estimated, three different situations resolve three different ways:
215
+
216
+ | Situation | Path |
217
+ |-----------|------|
218
+ | **Small addition**, still inside the task's scope | Record it in the task's `notes` (a mutable field) and track the sub-steps with native `TaskCreate`/`TaskUpdate` for this session |
219
+ | **Error of fact**: the spec asserts something about the code that the code contradicts, with no scope change | Append an `## Errata` block at the END of the file. Body untouched, append-only, accepted by `protect-spec-files` **without revoking the gate** — freezing the CONTRACT is not freezing an ERROR OF FACT (MORPH.md §3) |
220
+ | **The scope itself changed**: the contract no longer describes the work | `morph-spec unapprove {feature} plan --reason "..."`, amend the plan, then re-approve. There is no shortcut around the gate for this one |
221
+
222
+ Scope ambiguity the `mandate.md` does not cover is **not** an escalation: record it in
223
+ `decisions.md`, resolve it the conservative way, and keep going — only pause if it is genuinely
224
+ blocking (`morph-implement` §5).
225
+
226
+ **Never** implement extra functionality within a task without registering it — `notes` for small
227
+ additions, gate revocation for anything that changes the plan contract.
215
228
 
216
229
  ---
217
230
 
@@ -4,7 +4,7 @@ description: Guia a criação de uma landing page nova ponta-a-ponta a partir do
4
4
  version: core
5
5
  when-to-invoke: ao iniciar um novo projeto de LP com o template Umbraco genérico
6
6
  user-invokable: true
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  stacks:
9
9
  - umbraco
10
10
  ---
@@ -4,7 +4,7 @@ description: Migra uma landing page existente (React/Vite, Next.js estático ou
4
4
  version: core
5
5
  when-to-invoke: ao receber instrução "use /migrate-lp-to-umbraco {projeto}" do usuário, ou quando o usuário descrever necessidade de migrar uma LP para Umbraco
6
6
  user-invokable: true
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  stacks:
9
9
  - umbraco
10
10
  ---
@@ -4,7 +4,7 @@ description: Orquestra a execução autônoma de tasks de uma feature morph-spec
4
4
  version: core
5
5
  when-to-invoke: após Gate 2 aprovado, ao receber instrução "use /morph-apply" ou "implementar feature"
6
6
  user-invokable: true
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  ---
9
9
 
10
10
  # morph-apply
@@ -179,7 +179,7 @@ dispatch Agent (subagent_type: "morph-{id}") with prompt:
179
179
 
180
180
  > **Alternativa quando os fluxos tocam os mesmos projetos/arquivos** (ex.: o mesmo csproj de testes compartilhado): siga a §3b-w abaixo em vez desta seção — despache com `isolation: "worktree"`, cada agente trabalha numa working tree própria e o orquestrador integra ao final.
181
181
 
182
- Aguardar todos os agentes terminarem, depois **ler primeiro** `.morph/features/{feature}/3-implement/reports/{taskId}.md` de cada task — é o valor de retorno autoritativo; a mensagem de texto do dispatch, se chegou inteira, é só um atalho que economiza essa leitura. Se um arquivo vier ausente, oco, ou sem os itens da cláusula 1, registre a falha de protocolo no recap. Depois, sequencialmente:
182
+ Aguardar todos os agentes terminarem, depois **auditar os relatórios contra o trabalho** com `morph-spec report-check {feature} --json` — determinístico e independente da palavra dos agentes; é o passo que pega tanto o relatório ausente quanto o `report-stale` (completo, porém gravado antes do fim do trabalho: o agente relatou cedo e continuou escrevendo). Em `report-stale`, **não re-despache** — leia o campo `observed` (writes reais do `events.jsonl`) e atualize o relatório a partir dele. Vereditos e ações: `MORPH.md` §6. Em seguida **ler** `.morph/features/{feature}/3-implement/reports/{taskId}.md` de cada task — é o valor de retorno autoritativo; a mensagem de texto do dispatch, se chegou inteira, é só um atalho que economiza essa leitura. Depois, sequencialmente:
183
183
  - **Rodar `morph-spec verify {feature} --json` uma única vez, pós-batch** (escopo feature) — os agentes não a rodaram (cláusula 3). Vermelho: use `verify.feedback` para corrigir/redespachar ANTES de qualquer morph-eval. (Com isolamento por worktree, cada agente já rodou o verify dentro do seu worktree; o orquestrador roda o verify compartilhado UMA vez após o merge — ver §3b-w.)
184
184
  - Para cada relatório retornado:
185
185
  - Aplicar `Skill(morph-eval)`.
@@ -241,10 +241,10 @@ re-apresente o gate**: siga direto para o encerramento (§6) conforme a decisão
241
241
  ## Referências
242
242
 
243
243
  - `.morph/framework/MORPH.md` — charter NLH; §6 tem o racional completo do contrato do relatório final (aqui e no `morph-implement` §4 estão só as versões curtas coladas no dispatch)
244
- - `framework/skills/core/morph-implement/SKILL.md` — §4 tem o template sequencial paritário a este §3b
245
- - `framework/skills/core/morph-eval/SKILL.md`
246
- - `framework/skills/core/morph-review/SKILL.md`
247
- - `framework/skills/core/morph-plan/SKILL.md` §5a — resolve e carimba `task.agent`/`task.standards` no plano; fonte primária deste §3b
244
+ - `.claude/skills/morph-implement/SKILL.md` — §4 tem o template sequencial paritário a este §3b
245
+ - `.claude/skills/morph-eval/SKILL.md`
246
+ - `.claude/skills/morph-review/SKILL.md`
247
+ - `.claude/skills/morph-plan/SKILL.md` §5a — resolve e carimba `task.agent`/`task.standards` no plano; fonte primária deste §3b
248
248
  - `morph-spec dag {feature}` — análise de DAG e decisão sequencial vs paralelo (ponderada por effort), incluindo recomendação de isolamento (`isolation.recommended: "worktree"`)
249
249
  - `morph-spec verify {feature} [task] --json` — cadeia determinística build+testes+validadores+e2e (código antes do juiz)
250
250
  - `morph-spec score {feature} {task} {score} [--dims a,c,q,t]` — grava taskScores no feature.json com timestamp server-side
@@ -4,7 +4,7 @@ description: Entende o negócio, os usuários e a arquitetura antes de qualquer
4
4
  version: core
5
5
  when-to-invoke: ao receber um novo request de feature, antes de morph-plan
6
6
  user-invokable: true
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  ---
9
9
 
10
10
  # morph-brainstorming
@@ -148,5 +148,5 @@ options:
148
148
  ## Referências
149
149
  - `.morph/framework/MORPH.md` — seções 1 (Papéis), 2 (Fases), 5 (Gates), Trust Mode
150
150
  - `morph-spec standards --find "<query>"` — para referência de standards relevantes à stack (ver `morph-standards`)
151
- - `framework/skills/core/morph-stack-scan/SKILL.md` — invocada na Parte 0 (varredura), antes de qualquer pergunta
151
+ - `.claude/skills/morph-stack-scan/SKILL.md` — invocada na Parte 0 (varredura), antes de qualquer pergunta
152
152
  - `.morph/framework/MORPH.md` §5 — regras de pausa do Gate 1 (trust mode)
@@ -4,7 +4,7 @@ description: Avalia a qualidade de uma tarefa ou fase com rubricas graduadas 0-1
4
4
  version: core
5
5
  when-to-invoke: ao completar uma tarefa ou ao finalizar uma fase de implementação
6
6
  user-invokable: false
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  ---
9
9
 
10
10
  # morph-eval
@@ -4,7 +4,7 @@ description: ADW cirúrgico de hotfix — resolve uma queda/bug crítico de prod
4
4
  version: core
5
5
  when-to-invoke: ao receber "/morph-hotfix {feature}", quando a morph-proposal classifica o pedido como workType hotfix (Passo 0), ou o usuário diz "produção caiu / hotfix / urgente"
6
6
  user-invokable: true
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  ---
9
9
 
10
10
  # morph-hotfix
@@ -56,7 +56,7 @@ Escreva o brief curto (~20 linhas) reutilizando o nome canônico `proposal.md`:
56
56
 
57
57
  ### 4. Plano mínimo (`2-plan/tasks.json`)
58
58
 
59
- Escreva um `tasks.json` mínimo validado contra `framework/schemas/tasks.schema.json`:
59
+ Escreva um `tasks.json` mínimo validado contra `.morph/framework/schemas/tasks.schema.json`:
60
60
 
61
61
  - `T1` — o fix.
62
62
  - `T2` — verify/regressão do blast radius.
@@ -81,7 +81,7 @@ Use `--skip-tests`/`--skip-build` quando fizer sentido para velocidade (ex.: ite
81
81
 
82
82
  ### 7. Gate 3 — SEMPRE humano
83
83
 
84
- O hotfix tem `forcedPauseGates: ['review']` (`src/core/work-types.js`) — o Gate 3 pausa **sempre**, mesmo em `trust: auto`. `gate-check` já sabe disso: lê `workType` do disco e `shouldPauseGate` força a pausa antes de checar qualquer outro sinal — rode direto, sem `--signals`:
84
+ O hotfix nasce com o Gate 3 em `forcedPauseGates` — o Gate 3 pausa **sempre**, mesmo em `trust: auto`. `gate-check` já sabe disso: lê `workType` do disco e `shouldPauseGate` força a pausa antes de checar qualquer outro sinal — rode direto, sem `--signals`:
85
85
 
86
86
  ```
87
87
  morph-spec gate-check {feature} review [--json]
@@ -98,7 +98,7 @@ options:
98
98
  - { label: "rollback", description: "Desfazer o fix — voltar ao estado anterior" }
99
99
  ```
100
100
 
101
- **NUNCA `morph-spec approve {feature} review --mode auto`** — o CLI recusa explicitamente essa combinação (`src/commands/state/approve.js`: `gateName === 'review' && feature.workType === 'hotfix' && approvedBy === 'auto'` é bloqueado) porque `forcedPauseGates` sobrepõe qualquer trust mode. Em contexto headless (sem `AskUserQuestion` disponível), **o `state-sync` NÃO cobre este caso**: ele é um hook `PostToolUse` com matcher `Write|Edit|AskUserQuestion`, e uma resposta em texto puro do usuário não é tool call — não gera evento e não grava gate nenhum. Esperar por ele deixa o Gate 3 por aprovar em silêncio. O caminho é registrar a aprovação humana explicitamente:
101
+ **NUNCA `morph-spec approve {feature} review --mode auto`** — o CLI recusa explicitamente essa combinação (gate `review` + `workType: hotfix` + aprovador `auto`) porque `forcedPauseGates` sobrepõe qualquer trust mode. Em contexto headless (sem `AskUserQuestion` disponível), **o `state-sync` NÃO cobre este caso**: ele é um hook `PostToolUse` com matcher `Write|Edit|AskUserQuestion`, e uma resposta em texto puro do usuário não é tool call — não gera evento e não grava gate nenhum. Esperar por ele deixa o Gate 3 por aprovar em silêncio. O caminho é registrar a aprovação humana explicitamente:
102
102
 
103
103
  ```
104
104
  morph-spec approve {feature} review --approver "<nome de quem aprovou>"
@@ -132,9 +132,9 @@ morph-spec approve {feature} review --approver "<nome de quem aprovou>"
132
132
  - `.morph/framework/MORPH.md` §2.1 — roteamento por tipo de trabalho
133
133
  - `.morph/framework/MORPH.md` §5 — Gates de aprovação, gate humano forçado no hotfix
134
134
  - `.morph/framework/MORPH.md` §6 — Sub-agents, persona de estágio scout, protocolo obrigatório
135
- - `framework/skills/core/morph-proposal/SKILL.md` — Passo 0, roteamento que invoca esta skill
136
- - `framework/skills/core/morph-implement/SKILL.md` §4 — template de dispatch e protocolo
137
- - `src/core/work-types.js` — `scaffold`/`skippedGates`/`forcedPauseGates` do tipo `hotfix`
135
+ - `.claude/skills/morph-proposal/SKILL.md` — Passo 0, roteamento que invoca esta skill
136
+ - `.claude/skills/morph-implement/SKILL.md` §4 — template de dispatch e protocolo
137
+ - `morph-spec create {feature} --type hotfix --json` — mostra a política do tipo (`scaffold`, `skippedGates`, `forcedPauseGates`) como o CLI a aplicou
138
138
  - `morph-spec create {feature} --type hotfix` — nascimento com política de gates
139
139
  - `morph-spec verify {feature} [task] --json` — cadeia determinística build+testes+validadores
140
140
  - `morph-spec gate-check {feature} review [--json]` — persiste a decisão de pausa (forçada por `workType: hotfix`) antes do Gate 3
@@ -4,7 +4,7 @@ description: Guia a execução de cada tarefa de implementação com standard e
4
4
  version: core
5
5
  when-to-invoke: ao iniciar cada task de implementação listada em tasks.json
6
6
  user-invokable: false
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  ---
9
9
 
10
10
  # morph-implement
@@ -31,9 +31,9 @@ Ao iniciar cada task de `tasks.json` — antes de escrever qualquer código. Nor
31
31
  **Se a `morph-apply` passou `feedback` de uma tentativa anterior** (loop de correção — a task foi implementada mas o `morph-eval` deu score < 9): isto NÃO é uma implementação do zero. Leia o feedback priorizado, identifique os pontos bloqueantes listados, e **corrija especificamente esses pontos** no código já existente. Não reescreva o que já passou; foque no que o eval apontou. Registre no recap qual feedback foi endereçado em qual tentativa.
32
32
 
33
33
  2. Identifique o standard mais relevante para a tarefa atual:
34
- - Rode `morph-spec standards --find "<domínio/tecnologia da task>"` (filtros opcionais `--category`, `--tags`, `--json`) — o comando busca em `framework/standards/STANDARDS.json` e devolve o top 3 candidatos como `id · path · digest`, sem você abrir o index inteiro.
34
+ - Rode `morph-spec standards --find "<domínio/tecnologia da task>"` (filtros opcionais `--category`, `--tags`, `--json`) — o comando busca em `.morph/framework/standards/STANDARDS.json` e devolve o top 3 candidatos como `id · path · digest`, sem você abrir o index inteiro.
35
35
  - **O digest decide a escolha.** Escolha 1-3 standards pelo `digest` retornado. Depois, **use a tool Read APENAS no(s) arquivo(s) `.md` escolhido(s)** (campo `path` do resultado) — o digest te diz qual candidato é o certo; o arquivo escolhido se lê inteiro, porque é onde vivem as convenções aplicáveis.
36
- - **Tarefas de agente de IA (MAF):** Read os `framework/standards/ai-agents/*.md` relevantes para a task. Mesmo que você consulte docs externas (context7) para a superfície da API do `Microsoft.Agents.AI`, as **convenções de projeto** (single-agent por padrão, provider/caching/observability, A2A, middleware) vêm desses standards. Uma fonte externa não as conhece.
36
+ - **Tarefas de agente de IA (MAF):** Read os `.morph/framework/standards/ai-agents/*.md` relevantes para a task. Mesmo que você consulte docs externas (context7) para a superfície da API do `Microsoft.Agents.AI`, as **convenções de projeto** (single-agent por padrão, provider/caching/observability, A2A, middleware) vêm desses standards. Uma fonte externa não as conhece.
37
37
  - Se nenhum standard cobrir o caso, registre no decisions.md e adote o critério mais conservador.
38
38
 
39
39
  3. Identifique a persona de agente adequada para a tarefa:
@@ -115,13 +115,28 @@ Ao iniciar cada task de `tasks.json` — antes de escrever qualquer código. Nor
115
115
 
116
116
  Regras:
117
117
  - **Standard é obrigatório** — sempre referenciar pelo menos um standard de
118
- `framework/standards/STANDARDS.json` que justificou as escolhas de implementação.
118
+ `.morph/framework/standards/STANDARDS.json` que justificou as escolhas de implementação.
119
119
  Se nenhum standard existente cobre, registre a decisão em `decisions.md` E cite
120
120
  `Standard: ad-hoc (see decisions.md ADR-{N})` no recap.
121
121
  - Sem standard ⇒ a task falha no validador de Gate 3 (`validate-completion`)
122
122
  e o reviewer não consegue auditar de onde veio a decisão técnica.
123
123
 
124
- 7. Atualizar `tasks.json` marcando a task como `done` — **direto com a tool `Edit` (ou `Write`)**, sem scripts:
124
+ 7. **Antes de marcar a task como `done`, audite o relatório contra o trabalho:**
125
+
126
+ ```
127
+ morph-spec report-check {feature} {taskId} --json
128
+ ```
129
+
130
+ Não é burocracia — é a única checagem que não depende da palavra do agente. Veredito
131
+ `report-stale` significa **relatório completo e VELHO**: a task seguiu escrevendo arquivos depois
132
+ que ele foi gravado, então o texto descreve um estado já ultrapassado. Aconteceu de verdade: o
133
+ sub-agent gravou o esqueleto dizendo "teste ainda não escrito — em andamento", escreveu os 9
134
+ testes, e foi cortado antes de atualizar. Quem leu o relatório quase marcou a task como
135
+ incompleta e re-despachou trabalho pronto. **Nesse caso não re-despache**: leia `observed`
136
+ (arquivos realmente escritos, do `events.jsonl`, não auto-declarados) e atualize o relatório a
137
+ partir dessa evidência. Demais vereditos: tabela em `MORPH.md` §6.
138
+
139
+ 8. Atualizar `tasks.json` marcando a task como `done` — **direto com a tool `Edit` (ou `Write`)**, sem scripts:
125
140
 
126
141
  - Mude apenas os campos mutáveis da task: `status` (enum válido: `pending`,
127
142
  `in_progress`, `done`, `skipped`, `blocked` — nunca invente valores como
@@ -154,7 +169,7 @@ Ao iniciar cada task de `tasks.json` — antes de escrever qualquer código. Nor
154
169
  > tasks.json + recap.md + `taskScores` do feature.json. **NÃO escreva o trace
155
170
  > manualmente** — a escrita manual foi removida da cerimônia por task.
156
171
 
157
- 8. Quando invocada por `morph-apply`, retornar o controle à skill orquestradora — ela decide qual task vem em seguida via `getReadyTasks(data)`. Não rode a suíte de testes inteira do projeto por conta própria ao fim da task quando invocada pela `morph-apply` — a verificação determinística (`morph-spec verify {feature} {task}`) é do orquestrador, logo após seu retorno (ver morph-apply §3a). Quando invocada manualmente, verificar se há próxima task ready e iniciá-la imediatamente aplicando esta skill desde o passo 1 (auto-advance). Pause apenas se encontrar ambiguidade bloqueante não coberta pelo mandate.
172
+ 9. Quando invocada por `morph-apply`, retornar o controle à skill orquestradora — ela decide qual task vem em seguida via `getReadyTasks(data)`. Não rode a suíte de testes inteira do projeto por conta própria ao fim da task quando invocada pela `morph-apply` — a verificação determinística (`morph-spec verify {feature} {task}`) é do orquestrador, logo após seu retorno (ver morph-apply §3a). Quando invocada manualmente, verificar se há próxima task ready e iniciá-la imediatamente aplicando esta skill desde o passo 1 (auto-advance). Pause apenas se encontrar ambiguidade bloqueante não coberta pelo mandate.
158
173
 
159
174
  ## Output esperado
160
175
  - Código implementado conforme o standard consultado (direto ou via sub-agent)
@@ -4,7 +4,7 @@ description: Guia a produção dos artefatos de planejamento de uma feature (use
4
4
  version: core
5
5
  when-to-invoke: ao iniciar a fase plan de uma feature, após o Gate 1 (proposal aprovado)
6
6
  user-invokable: true
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  ---
9
9
 
10
10
  # morph-plan
@@ -89,7 +89,7 @@ Ao iniciar a fase plan — após o `proposal.md` ser aprovado e antes de qualque
89
89
  - Standards obrigatórios: descubra-os com `morph-spec standards --find "<domínio/tecnologia>"` (top 3 `id · path · digest` — o digest decide) por domínio tocado; liste os IDs escolhidos.
90
90
  - Patterns proibidos — **copie por extenso no mandate.md** a lista canônica de `MORPH.md` § "Stack baked-in" (`Guid.NewGuid()`→`Guid.CreateVersion7()`, 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`, SQL cru sem justificativa) mais qualquer proibição específica da feature. Copie o texto completo — o mandate.md é lido por implementadores em contexto fresco, sem `MORPH.md` carregado, então um ponteiro sozinho não basta aqui.
91
91
  - Política de acesso a dados (registre no mandate): `ApplicationDbContext` injetado direto no slice — para CRUD e para queries específicas (joins, projeção, paginação). Para concorrência ou SQL específico, store dedicado hand-written com justificativa em `decisions.md`.
92
- - **Features com agentes de IA (MAF):** se a feature envolve um agente (Microsoft Agent Framework), **use a tool Read** nos standards relevantes de `framework/standards/ai-agents/*.md` (ex.: `setup`, `agent-session`, `middleware-patterns`, `mcp-server`, `mcp-tools`, `multi-agent-patterns`, `production`) — filtre pelo que a feature exige via `morph-spec standards --find "<tema>" --category ai-agents`. Esses standards carregam as **convenções de projeto** (single-agent por padrão — Workflows só para fan-in/out real; provider, caching, observability, A2A) que uma fonte externa de docs (ex.: context7) não conhece. Padrão de divisão: **superfície da API** pode vir de docs ao vivo/context7 (mais frescas para um SDK em evolução), mas **as convenções vêm dos standards** — registre ambas no mandate. Não pule os `ai-agents/*.md` só porque o STANDARDS.json index lista que eles existem.
92
+ - **Features com agentes de IA (MAF):** se a feature envolve um agente (Microsoft Agent Framework), **use a tool Read** nos standards relevantes de `.morph/framework/standards/ai-agents/*.md` (ex.: `setup`, `agent-session`, `middleware-patterns`, `mcp-server`, `mcp-tools`, `multi-agent-patterns`, `production`) — filtre pelo que a feature exige via `morph-spec standards --find "<tema>" --category ai-agents`. Esses standards carregam as **convenções de projeto** (single-agent por padrão — Workflows só para fan-in/out real; provider, caching, observability, A2A) que uma fonte externa de docs (ex.: context7) não conhece. Padrão de divisão: **superfície da API** pode vir de docs ao vivo/context7 (mais frescas para um SDK em evolução), mas **as convenções vêm dos standards** — registre ambas no mandate. Não pule os `ai-agents/*.md` só porque o STANDARDS.json index lista que eles existem.
93
93
  - **Verificação de runtime** — como se PROVA que a feature funciona rodando, não só compilando.
94
94
  Compilar não é subir: um serviço injetado sem registro em `Program.cs` passa no build e derruba
95
95
  a aplicação no startup. Registre no mandate:
@@ -112,6 +112,18 @@ Ao iniciar a fase plan — após o `proposal.md` ser aprovado e antes de qualque
112
112
  verificação de runtime vira teatro. É gap de Gate 2, não dispensa de Gate 3.
113
113
  - **Quando não se aplica** (biblioteca pura, chore sem runtime), registre a dispensa e o porquê.
114
114
  - Checklist de done com critérios verificáveis por tarefa.
115
+ - **Baseline é um COMANDO, nunca um número.** O mandate congela no Gate 2 e é lido por
116
+ implementadores durante dias — todo número cravado nele (`Suíte: 2366 passando`, cobertura,
117
+ contagem de arquivos) está errado a partir da primeira task, e um agente que confia nele
118
+ "conserta" um baseline que nunca esteve quebrado. Registre **como medir** (`npm test`,
119
+ `dotnet test`) e mande comparar com o resultado do momento, não com um valor histórico.
120
+ Aconteceu de verdade: mandate afirmando 2366 quando já eram 2375, e um ADR escrito só para
121
+ desmentir o próprio mandate.
122
+ - **Pré-requisito é um PREDICADO, nunca um SHA literal.** "`git merge-base --is-ancestor
123
+ origin/main HEAD` sai 0" ou "a branch da feature X está integrada" — não "confirme que
124
+ origin/master contém `49dfba2`". SHA cravado envelhece na primeira rebase/squash: o merge sai
125
+ com outro hash e o sub-agent mandado verificá-lo ou queima turnos procurando o que não existe,
126
+ ou declara que verificou sem ter verificado.
115
127
 
116
128
  5. Produza `tasks.json` em `.morph/features/{feature}/2-plan/` seguindo o schema em `.morph/framework/schemas/tasks.schema.json`.
117
129
 
@@ -149,7 +161,7 @@ Ao iniciar a fase plan — após o `proposal.md` ser aprovado e antes de qualque
149
161
  - `outputs` (opcional): array de paths que serão criados/modificados.
150
162
  - `usecase` (opcional): o **ID** do use case que a task realiza — `UC-07`, nunca o nome do arquivo. Task puramente técnica (build, config, migração) não tem.
151
163
  - `agent` (opcional): o `id` da persona de `agents.json` responsável pelo domínio da task — **sem** o prefixo `morph-` (ex.: `"dotnet-senior"`, não `"morph-dotnet-senior"`). Carimbado no passo 5a abaixo; ausente numa task sem domínio de agente claro (config/docs) ou num plano legado.
152
- - `standards` (opcional): array de paths relativos de `framework/standards/` (ex.: `["standards/backend/dotnet/vsa-handler-patterns.md"]`) — os standards da persona resolvida em `agent`, mais qualquer standard específico que a task exija.
164
+ - `standards` (opcional): array de paths relativos de `.morph/framework/standards/` (ex.: `["standards/backend/dotnet/vsa-handler-patterns.md"]`) — os standards da persona resolvida em `agent`, mais qualquer standard específico que a task exija.
153
165
 
154
166
  **5a. Carimbe `agent` e `standards` — uma leitura de `agents.json`, N tasks.** Antes de fechar o array `tasks`, **use a tool Read UMA VEZ** em `.morph/framework/agents.json` (não releia por task — é essa releitura repetida por task, hoje feita em `morph-implement`/`morph-apply` a cada dispatch, que este passo existe para eliminar). Para cada task do plano, resolva:
155
167
  - `agent`: o `id` da persona (chave do objeto `agents`, sem prefixo `morph-`) cujo `domains` cobre o `group`/domínio da task — o mesmo casamento que `morph-implement` §3 e `morph-apply` §3b fariam manualmente a cada dispatch; aqui você faz uma vez, no plano.
@@ -4,7 +4,7 @@ description: Orquestra a fase de proposta+plano de uma feature morph-spec. Encad
4
4
  version: core
5
5
  when-to-invoke: ao receber instrução "use /morph-proposal" do usuário, ou ao iniciar uma nova feature
6
6
  user-invokable: true
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  ---
9
9
 
10
10
  # morph-proposal
@@ -59,7 +59,7 @@ morph-spec create {feature-name} --request "<pedido do usuário>"
59
59
 
60
60
  ### 2. Invocar `Skill(morph-brainstorming)`
61
61
 
62
- Passa o nome da feature. A skill é a **dona da fase de entendimento** — não re-descreva o comportamento dela aqui. Em resumo: varre o ambiente antes de perguntar qualquer coisa (`Skill(morph-stack-scan)` + contexto do projeto + acervo de use cases), monta a **árvore de decisões abertas**, abre com a escolha de **modo de descoberta** (entrevista ou automático — só `feature` e `bug`), detecta divergência entre fontes de design-system (`signals.designSystemDivergence`) e produz `proposal.md` em `.morph/features/{feature}/0-proposal/`. Detalhes em `framework/skills/core/morph-brainstorming/SKILL.md`.
62
+ Passa o nome da feature. A skill é a **dona da fase de entendimento** — não re-descreva o comportamento dela aqui. Em resumo: varre o ambiente antes de perguntar qualquer coisa (`Skill(morph-stack-scan)` + contexto do projeto + acervo de use cases), monta a **árvore de decisões abertas**, abre com a escolha de **modo de descoberta** (entrevista ou automático — só `feature` e `bug`), detecta divergência entre fontes de design-system (`signals.designSystemDivergence`) e produz `proposal.md` em `.morph/features/{feature}/0-proposal/`. Detalhes em `.claude/skills/morph-brainstorming/SKILL.md`.
63
63
 
64
64
  No **modo entrevista** o Gate 1 pausa sempre — a confirmação do entendimento compartilhado é o gate. O modo escolhido chega ao passo 3 em `gateDecisions.proposal.signals.discoveryMode`.
65
65
 
@@ -114,7 +114,7 @@ Critério objetivo em `MORPH.md` §2.1: a mudança cria ou altera superfície de
114
114
  A skill lê `proposal.md` e produz:
115
115
  - `spec.md` — especificação técnica detalhada
116
116
  - `mandate.md` — contrato de implementação (stack defaults + padrões proibidos)
117
- - `tasks.json` — task breakdown estruturado validado contra `framework/schemas/tasks.schema.json`
117
+ - `tasks.json` — task breakdown estruturado validado contra `.morph/framework/schemas/tasks.schema.json`
118
118
  - `decisions.md` — apenas se houver decisões não triviais
119
119
 
120
120
  ### 6. Gate 2 (trust-aware)
@@ -146,8 +146,8 @@ Mesma mecânica do passo 3: a decisão já foi tomada e persistida pela `morph-p
146
146
 
147
147
  - `.morph/framework/MORPH.md` — charter NLH completo
148
148
  - `.morph/framework/MORPH.md` §2.1 — roteamento por tipo de trabalho (Passo 0)
149
- - `framework/skills/core/morph-brainstorming/SKILL.md`
150
- - `framework/skills/core/morph-uiux/SKILL.md` — invocada no passo 3a quando a feature toma o ramo uiux
151
- - `framework/skills/core/morph-plan/SKILL.md`
152
- - `framework/skills/core/morph-hotfix/SKILL.md` — pipeline invocado pelo branch `hotfix` do Passo 0
149
+ - `.claude/skills/morph-brainstorming/SKILL.md`
150
+ - `.claude/skills/morph-uiux/SKILL.md` — invocada no passo 3a quando a feature toma o ramo uiux
151
+ - `.claude/skills/morph-plan/SKILL.md`
152
+ - `.claude/skills/morph-hotfix/SKILL.md` — pipeline invocado pelo branch `hotfix` do Passo 0
153
153
  - `.morph/framework/MORPH.md` §5 — regras de pausa de gate (trust mode)
@@ -4,7 +4,7 @@ description: Conduz a fase de revisão e produz o review-report.md para o Gate 3
4
4
  version: core
5
5
  when-to-invoke: ao iniciar a fase review, após todas as tasks de tasks.json estarem com status `done`
6
6
  user-invokable: true
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  ---
9
9
 
10
10
  # morph-review
@@ -34,7 +34,7 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
34
34
  - Se parcialmente atendido: registre como "pendência" com o que falta.
35
35
 
36
36
  **Verificações mecânicas sempre-rodar** (independente do mandate mencionar ou não — cobrem bugs
37
- reais já vistos em produção, ver `framework/evals/rubrics/architecture.md` → "Verificações
37
+ reais já vistos em produção, ver `.morph/framework/evals/rubrics/architecture.md` → "Verificações
38
38
  mecânicas obrigatórias"), quando o diff tocar endpoints minimal API ou fetch cross-camada:
39
39
  - Todo serviço injetado numa lambda de endpoint tem `AddScoped`/`AddSingleton`/`AddTransient`
40
40
  correspondente em `Program.cs`. Falha aqui é bloqueante — a app não sobe.
@@ -104,6 +104,13 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
104
104
  reportar, não defeito de implementação a pontuar.
105
105
  NÃO reescreva código. NÃO toque em tasks.json, feature.json nem no board
106
106
  de sessão — Bash é só para verificação, nunca para mudar estado.
107
+ Se o que você avalia é uma CORREÇÃO (rodada do loop, fix de achado
108
+ anterior), responda no relatório: O QUE ESTA CORREÇÃO ABRIU? Que
109
+ comportamento antes correto pode ter regredido, e há teste que
110
+ pegaria? Um fix que fecha um defeito e abre outro pontua alto em toda
111
+ dimensão e ainda assim piorou o produto — e essa pergunta é a única
112
+ que o score não faz sozinho. Não aceite "agora tem teste" como
113
+ fechamento: RE-EXECUTE os probes da rodada anterior.
107
114
  Contrato do relatório final: GRAVE seu relatório em
108
115
  `.morph/features/{feature}/4-review/evaluator-report.md` ANTES de
109
116
  encerrar — esse arquivo é o valor de retorno autoritativo desta
@@ -202,7 +209,7 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
202
209
  - `morph-spec verify {feature} [task] --json` — cadeia determinística build+testes+validadores+e2e anexada ao prompt do avaliador (passo 4)
203
210
  - `.morph/framework/MORPH.md` — seção 5 (Gate 3 + regras de pausa), seção 1 (papel Evaluator), Trust Mode
204
211
  - `.claude/agents/morph-evaluator.md` — subagent do avaliador (gerado de `.morph/framework/agents.json`), despachado no passo 4
205
- - `framework/skills/core/morph-eval/SKILL.md` — rubricas e bandas que o avaliador aplica
212
+ - `.claude/skills/morph-eval/SKILL.md` — rubricas e bandas que o avaliador aplica
206
213
  - `.morph/framework/evals/trace-schema.md` — formato canônico do trace
207
214
  - `.morph/features/{feature}/2-plan/mandate.md` — critérios de done da feature
208
215
  - `.morph/features/{feature}/2-plan/spec.md` — arquitetura e contratos
@@ -4,7 +4,7 @@ description: Varre o codebase existente, detecta stack atual, compara com o stac
4
4
  version: core
5
5
  when-to-invoke: ao iniciar uma feature em projeto brownfield (codebase já existente)
6
6
  user-invokable: true
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  ---
9
9
 
10
10
  # morph-stack-scan
@@ -129,5 +129,5 @@ Antes de despachar Explore, verifique se o projeto é greenfield:
129
129
  - Decisão documentada: incluir migração nesta feature ou separar (registrada no proposal.md pela morph-brainstorming)
130
130
 
131
131
  ## Referências
132
- - `framework/MORPH.md` — seção 4 (Standards), seção 2 (Fases)
133
- - `framework/skills/core/morph-brainstorming/SKILL.md` — fluxo greenfield/brownfield
132
+ - `.morph/framework/MORPH.md` — seção 4 (Standards), seção 2 (Fases)
133
+ - `.claude/skills/morph-brainstorming/SKILL.md` — fluxo greenfield/brownfield
@@ -4,7 +4,7 @@ description: Localiza um standard específico via busca server-side (morph-spec
4
4
  version: core
5
5
  when-to-invoke: quando precisar consultar um standard específico durante a implementação
6
6
  user-invokable: true
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  ---
9
9
 
10
10
  # morph-standards
@@ -45,7 +45,7 @@ pra categoria X?", sem um termo de busca claro), nesta ordem:
45
45
 
46
46
  1. `morph-spec standards` sem `--find` — lista categorias + contagem, custo mínimo, o suficiente
47
47
  pra decidir qual `--category` usar num `--find` em seguida.
48
- 2. Só se isso não bastar, abra `framework/standards/STANDARDS.json` inteiro — último recurso,
48
+ 2. Só se isso não bastar, abra `.morph/framework/standards/STANDARDS.json` inteiro — último recurso,
49
49
  nunca o primeiro passo.
50
50
 
51
51
  ## Quando não há standard adequado
@@ -60,5 +60,5 @@ Não invente um standard — padrões não documentados são dívida técnica.
60
60
 
61
61
  ## Referências
62
62
  - `morph-spec standards --find "<query>" [--category] [--tags] [--json]` — busca server-side, top 3 `id · path · digest`
63
- - `framework/standards/STANDARDS.json` — índice completo; abrir só como fallback exploratório (ver acima)
64
- - `framework/MORPH.md` — seção 4 (Como consultar Standards)
63
+ - `.morph/framework/standards/STANDARDS.json` — índice completo; abrir só como fallback exploratório (ver acima)
64
+ - `.morph/framework/MORPH.md` — seção 4 (Como consultar Standards)
@@ -4,7 +4,7 @@ description: Conduz a fase opcional de UI/UX — design system, mockups, compone
4
4
  version: core
5
5
  when-to-invoke: ao tomar o ramo uiux (morph-spec advance --design), depois do Gate 1 e antes do morph-plan
6
6
  user-invokable: true
7
- cliVersion: "8.25.0"
7
+ cliVersion: "8.26.0"
8
8
  ---
9
9
 
10
10
  # morph-uiux
@@ -131,5 +131,5 @@ Ao tomar o ramo opcional uiux: feature/bug cuja mudança cria ou altera superfí
131
131
  - `.morph/framework/MORPH.md` §5 — regras de pausa de gate (trust mode)
132
132
  - `.morph/framework/agents.json` — persona `ui-designer` (tools, MCPs, standards)
133
133
  - `.morph/framework/templates/context/design-system.md` — forma de partida quando o projeto não tem design system vivo
134
- - `framework/skills/core/morph-brainstorming/SKILL.md` — protocolo de reconciliação/changelog do design-system vivo (Parte 0), reaplicado no passo 4
135
- - `framework/skills/core/morph-plan/SKILL.md` — consome os artefatos desta fase por path
134
+ - `.claude/skills/morph-brainstorming/SKILL.md` — protocolo de reconciliação/changelog do design-system vivo (Parte 0), reaplicado no passo 4
135
+ - `.claude/skills/morph-plan/SKILL.md` — consome os artefatos desta fase por path