@polymorphism-tech/morph-spec 8.26.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/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +1 -1
- package/docs/QUICKSTART.md +3 -3
- package/framework/rules/morph-task-tracking.md +11 -34
- package/framework/rules/morph-workflow.md +1 -1
- package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
- package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
- package/framework/skills/core/morph-apply/SKILL.md +3 -3
- package/framework/skills/core/morph-brainstorming/SKILL.md +1 -1
- 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 +1 -1
- 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 +1 -1
- package/framework/skills/core/morph-standards/SKILL.md +1 -1
- package/framework/skills/core/morph-uiux/SKILL.md +1 -1
- package/framework/templates/docs/onboarding.md +4 -4
- package/package.json +1 -1
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.27.0
|
|
7
7
|
**Requires:** Node.js 22+, Claude Code
|
|
8
8
|
|
|
9
9
|
---
|
|
@@ -173,7 +173,7 @@ morph-spec archive {feature} # Archive WITHOUT integrating (le
|
|
|
173
173
|
|
|
174
174
|
`finish` is the normal close for both flows: it archives (committing the move inside `morph/{feature}`), then integrates — `--merge` merges `--no-ff` into the default branch locally; `--pr` pushes the branch and runs `gh pr create` (needs `origin` + authenticated `gh`) — and tears down the worktree if there is one. Plain `archive` is reserved for legacy features (born before every feature had a `morph/{feature}` branch) and cleanup.
|
|
175
175
|
|
|
176
|
-
Task progress within a feature is
|
|
176
|
+
Task progress within a feature is recorded in `tasks.json` — Claude writes the mutable `status`/`outputs`/`notes` fields as it goes, and there is no separate CLI command for starting or finishing a task.
|
|
177
177
|
|
|
178
178
|
### Validation
|
|
179
179
|
|
|
@@ -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.27.0 by [Polymorphism Tech](https://polymorphism.tech)*
|
package/claude-plugin.json
CHANGED
package/docs/CHEATSHEET.md
CHANGED
package/docs/QUICKSTART.md
CHANGED
|
@@ -85,7 +85,7 @@ At this point, planning is complete:
|
|
|
85
85
|
```
|
|
86
86
|
|
|
87
87
|
Claude reads `spec.md`, `mandate.md`, and `tasks.json`, then implements task by task with auto-advance (no pause between tasks unless there's a blocking ambiguity):
|
|
88
|
-
-
|
|
88
|
+
- Records task progress in `tasks.json`, writing the mutable `status`/`outputs`/`notes` fields
|
|
89
89
|
- Runs the validators relevant to your stack after each task (e.g. `architecture`/`packages`/`contract-compliance` for .NET, `nextjs-component`/`css`/`design-system` for Next.js) via `morph-spec verify`
|
|
90
90
|
- Applies `morph-eval` after each task — a score below 9 triggers an autonomous correction loop, not a pause
|
|
91
91
|
- Generates `3-implement/recap.md` on completion, then Gate 3 review (`4-review/`)
|
|
@@ -106,7 +106,7 @@ Approve the current gate and scaffold the next phase folder in one step:
|
|
|
106
106
|
morph-spec advance my-feature
|
|
107
107
|
```
|
|
108
108
|
|
|
109
|
-
Task progress is
|
|
109
|
+
Task progress is recorded in `tasks.json` — Claude writes the mutable `status`/`outputs`/`notes` fields directly, and there is no separate CLI command for marking a task done.
|
|
110
110
|
|
|
111
111
|
Run validators at any time:
|
|
112
112
|
|
|
@@ -249,4 +249,4 @@ morph-spec doctor
|
|
|
249
249
|
|
|
250
250
|
---
|
|
251
251
|
|
|
252
|
-
*morph-spec v8.
|
|
252
|
+
*morph-spec v8.27.0 by Polymorphism Tech*
|
|
@@ -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
|
|
@@ -215,7 +215,7 @@ task turns out to be bigger than estimated, three different situations resolve t
|
|
|
215
215
|
|
|
216
216
|
| Situation | Path |
|
|
217
217
|
|-----------|------|
|
|
218
|
-
| **Small addition**, still inside the task's scope | Record it in the task's `notes` (a mutable field)
|
|
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
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
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
221
|
|
|
@@ -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;
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -76,10 +76,10 @@ morph-spec archive <feature>
|
|
|
76
76
|
morph-spec doctor
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
> **Task tracking
|
|
80
|
-
>
|
|
81
|
-
>
|
|
82
|
-
>
|
|
79
|
+
> **Task tracking lives in `tasks.json`.** During the implement phase Claude records
|
|
80
|
+
> progress by writing `tasks.json` directly (only the `status`, `outputs`, and `notes`
|
|
81
|
+
> fields). State is synced automatically by the `state-sync` hook — there is no CLI
|
|
82
|
+
> command to mark a task done.
|
|
83
83
|
|
|
84
84
|
---
|
|
85
85
|
|