@polymorphism-tech/morph-spec 8.25.0 → 8.27.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 +3 -3
- package/bin/morph-spec.js +2 -1
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +1 -1
- package/docs/QUICKSTART.md +3 -3
- package/framework/CLAUDE.md +2 -2
- package/framework/MORPH.md +22 -21
- package/framework/agents.json +1 -1
- package/framework/commands/create-umbraco-lp.md +1 -1
- package/framework/commands/migrate-lp-to-umbraco.md +1 -1
- package/framework/commands/morph-apply.md +4 -4
- package/framework/commands/morph-hotfix.md +3 -3
- package/framework/commands/morph-proposal.md +5 -5
- package/framework/docs/CLI.md +3 -3
- package/framework/evals/rubrics/condensed.md +2 -2
- package/framework/evals/rubrics/test-coverage.md +7 -0
- package/framework/hooks/claude-code/core/protect-spec-files.js +115 -4
- package/framework/hooks/shared/payload-utils.js +19 -4
- package/framework/rules/dotnet-templates.md +2 -1
- package/framework/rules/morph-task-tracking.md +11 -34
- package/framework/rules/morph-workflow.md +42 -29
- 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 +8 -8
- package/framework/skills/core/morph-brainstorming/SKILL.md +2 -2
- package/framework/skills/core/morph-eval/SKILL.md +1 -1
- package/framework/skills/core/morph-hotfix/SKILL.md +7 -7
- package/framework/skills/core/morph-implement/SKILL.md +21 -6
- package/framework/skills/core/morph-plan/SKILL.md +15 -3
- package/framework/skills/core/morph-proposal/SKILL.md +7 -7
- package/framework/skills/core/morph-review/SKILL.md +10 -3
- package/framework/skills/core/morph-stack-scan/SKILL.md +3 -3
- package/framework/skills/core/morph-standards/SKILL.md +4 -4
- package/framework/skills/core/morph-uiux/SKILL.md +3 -3
- package/framework/templates/README.md +72 -643
- package/framework/templates/docs/onboarding.md +4 -4
- package/framework/templates/examples/spec-examples.md +2 -1
- package/package.json +1 -1
- package/src/commands/project/claim.js +19 -3
- package/src/commands/state/approve.js +17 -3
- package/src/commands/state/finish.js +11 -1
- package/src/commands/state/gate-check.js +9 -20
- package/src/commands/state/report-check.js +157 -5
- package/src/lib/evaluator-report.js +72 -0
- package/src/lib/risk-detector.js +35 -0
|
@@ -5,49 +5,22 @@ stacks:
|
|
|
5
5
|
|
|
6
6
|
# MORPH-SPEC Task Tracking
|
|
7
7
|
|
|
8
|
-
>
|
|
9
|
-
>
|
|
10
|
-
|
|
11
|
-
## Rules
|
|
12
|
-
|
|
13
|
-
1. **Every phase skill MUST create session tasks** using `TaskCreate` before reading files or generating outputs
|
|
14
|
-
2. **Tasks are dynamic** — analyze the phase workflow and create tasks that reflect YOUR actual planned actions for this session
|
|
15
|
-
3. **Every task MUST be updated**: `in_progress` before starting, `completed` after finishing
|
|
16
|
-
4. **Pipeline orchestrators** (`/morph-proposal`, `/morph-apply`) MUST create master tasks for each phase
|
|
17
|
-
5. **Never skip task creation** — even if resuming mid-phase, create tasks for remaining steps
|
|
18
|
-
6. **Granularity**: minimum 2, typically 3-7 tasks per phase — adjust to complexity
|
|
19
|
-
7. **For iterative work** (clarification rounds, quality loops): update task `subject` with round/score progress
|
|
20
|
-
|
|
21
|
-
## Task Update Pattern
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
TaskUpdate(taskId, status="in_progress") // before starting the step
|
|
25
|
-
// ... do the work ...
|
|
26
|
-
TaskUpdate(taskId, status="completed") // after step finishes
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
For iterative tasks:
|
|
30
|
-
```
|
|
31
|
-
TaskUpdate(taskId, subject="Round 3 — score 82/100")
|
|
32
|
-
```
|
|
8
|
+
> Progress lives in `tasks.json` — nowhere else. There is no CLI command to mark a task done and
|
|
9
|
+
> no session-level checklist to keep in sync: this file IS the record of what happened.
|
|
33
10
|
|
|
34
11
|
## Persisting Progress to `tasks.json`
|
|
35
12
|
|
|
36
|
-
|
|
37
|
-
> tasks* nativas do Claude Code (`TaskCreate`/`TaskUpdate`), cujo status terminal é
|
|
38
|
-
> `completed`. Tudo abaixo é sobre o `tasks.json` do morph-spec, governado por
|
|
39
|
-
> `.morph/framework/schemas/tasks.schema.json`, cujo status terminal é `done` —
|
|
40
|
-
> **`completed` não existe nesse enum** e o hook `protect-spec-files` rejeita a
|
|
41
|
-
> gravação. Não misture os dois.
|
|
42
|
-
|
|
43
|
-
Native session tasks (`TaskCreate`/`TaskUpdate`) track your live work. To persist
|
|
44
|
-
task progress for the feature, write `.morph/features/{feature}/2-plan/tasks.json`,
|
|
13
|
+
To record task progress for the feature, write `.morph/features/{feature}/2-plan/tasks.json`,
|
|
45
14
|
touching ONLY the mutable fields:
|
|
46
15
|
|
|
47
16
|
- `status` — `pending` → `in_progress` → `done` (também: `skipped`, `blocked`)
|
|
48
17
|
- `outputs` — the files the task produced
|
|
49
18
|
- `notes` — free-text record (deviations, context, resolved blockers)
|
|
50
19
|
|
|
20
|
+
> **O status terminal é `done`.** `completed` **não existe** no enum de
|
|
21
|
+
> `.morph/framework/schemas/tasks.schema.json` — é vocabulário de outro sistema, e o hook
|
|
22
|
+
> `protect-spec-files` rejeita a gravação.
|
|
23
|
+
|
|
51
24
|
The plan contract — `title`, `description`, `dependencies`, `effort`, `doneCriteria`,
|
|
52
25
|
`group`, `agent`, `standards` — is frozen after Gate 2. Any attempt to change it is
|
|
53
26
|
blocked by the `protect-spec-files` hook. `agent` (persona id, no `morph-` prefix)
|
|
@@ -59,6 +32,10 @@ as long as it touches only `status`, `outputs`, and `notes`. State is then synce
|
|
|
59
32
|
automatically by the `state-sync` PostToolUse hook; you do not call a CLI to mark
|
|
60
33
|
output.
|
|
61
34
|
|
|
35
|
+
Update each task as you go — `in_progress` when you pick it up, `done` when it is finished —
|
|
36
|
+
rather than batching every write to the end of the phase. `morph-spec status`, `dag`, `verify`
|
|
37
|
+
and the dashboard all read this file, so a stale `tasks.json` is a blind orchestrator.
|
|
38
|
+
|
|
62
39
|
## Deviation Tracking
|
|
63
40
|
|
|
64
41
|
When completing a task differently than originally planned, record the reason in the
|
|
@@ -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 → [
|
|
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}` |
|
|
39
|
-
| `/morph-apply {feature}` |
|
|
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/
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
##
|
|
187
|
-
|
|
188
|
-
During implementation, these skills MUST be invoked at the specified triggers:
|
|
192
|
+
## Debugging
|
|
189
193
|
|
|
190
|
-
|
|
191
|
-
|
|
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
|
-
|
|
200
|
-
|
|
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
|
-
|
|
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
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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) — no gate to revoke, no contract to amend |
|
|
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.
|
|
7
|
+
cliVersion: "8.27.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.
|
|
7
|
+
cliVersion: "8.27.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.
|
|
7
|
+
cliVersion: "8.27.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-apply
|
|
@@ -158,8 +158,8 @@ dispatch Agent (subagent_type: "morph-{id}") with prompt:
|
|
|
158
158
|
(que é cortesia best-effort e pode não chegar inteira). NÃO chame
|
|
159
159
|
SendMessage.
|
|
160
160
|
2. NÃO toque em tasks.json, feature.json, state.json nem no board de
|
|
161
|
-
sessão
|
|
162
|
-
|
|
161
|
+
sessão — todo estado (status de task, scores, gates) é gravado
|
|
162
|
+
exclusivamente pelo orquestrador.
|
|
163
163
|
3. Verificação condicional ao isolamento:
|
|
164
164
|
- Batch SEM isolamento (working tree compartilhada): NÃO rode build/test da
|
|
165
165
|
suíte compartilhada — edições concorrentes quebram o build umas das outras;
|
|
@@ -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 **
|
|
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
|
-
-
|
|
245
|
-
-
|
|
246
|
-
-
|
|
247
|
-
-
|
|
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.
|
|
7
|
+
cliVersion: "8.27.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
|
-
-
|
|
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.
|
|
7
|
+
cliVersion: "8.27.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.
|
|
7
|
+
cliVersion: "8.27.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
|
|
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
|
|
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 (
|
|
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
|
-
-
|
|
136
|
-
-
|
|
137
|
-
- `
|
|
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.
|
|
7
|
+
cliVersion: "8.27.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
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
7
|
+
cliVersion: "8.27.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
|
|
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
|
|
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.
|
|
7
|
+
cliVersion: "8.27.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
|
|
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
|
|
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
|
-
-
|
|
150
|
-
-
|
|
151
|
-
-
|
|
152
|
-
-
|
|
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.
|
|
7
|
+
cliVersion: "8.27.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
|
|
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
|
-
-
|
|
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.
|
|
7
|
+
cliVersion: "8.27.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
|
-
-
|
|
133
|
-
-
|
|
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.
|
|
7
|
+
cliVersion: "8.27.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
|
|
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
|
-
-
|
|
64
|
-
-
|
|
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.
|
|
7
|
+
cliVersion: "8.27.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
|
-
-
|
|
135
|
-
-
|
|
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
|