@polymorphism-tech/morph-spec 7.8.1 → 7.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/bin/morph-spec.js +30 -1
- package/bin/validate.js +379 -379
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +1 -1
- package/docs/QUICKSTART.md +1 -1
- package/framework/CLAUDE.md +3 -1
- package/framework/MORPH.md +4 -3
- package/framework/commands/commit.md +166 -166
- package/framework/commands/morph-infra.md +215 -215
- package/framework/commands/morph-preflight.md +205 -205
- package/framework/commands/morph-troubleshoot.md +124 -124
- package/framework/evals/trace-schema.md +22 -12
- package/framework/hooks/README.md +2 -0
- package/framework/hooks/claude-code/core/subagent-report-guard.js +95 -0
- package/framework/hooks/claude-code/core/trace-autogen.js +183 -0
- package/framework/hooks/claude-code/statusline.py +679 -679
- package/framework/hooks/claude-code/statusline.sh +11 -11
- package/framework/hooks/git/commit-msg/conventional-commits.sh +33 -33
- package/framework/hooks/git/pre-commit/agents.sh +25 -25
- package/framework/hooks/git/pre-commit/orchestrator.sh +64 -64
- package/framework/hooks/git/pre-commit/specs.sh +50 -50
- package/framework/hooks/git/pre-push/run-tests.sh +44 -44
- package/framework/hooks/shared/activity-logger.js +160 -160
- package/framework/hooks/shared/hook-response.js +45 -45
- package/framework/hooks/shared/payload-utils.js +78 -78
- package/framework/hooks/shared/stdin-reader.js +26 -26
- package/framework/hooks/shared/tasks-validator.js +47 -4
- package/framework/rubrics/backend.json +41 -41
- package/framework/rules/ai-agents-standards.md +45 -45
- package/framework/rules/dotnet-templates.md +86 -86
- package/framework/rules/frontend-standards.md +13 -13
- package/framework/rules/infrastructure-standards.md +27 -27
- package/framework/rules/neon-standards.md +25 -25
- package/framework/rules/nextjs-standards.md +20 -20
- package/framework/rules/nextjs-templates.md +40 -40
- package/framework/schemas/feature.schema.json +128 -0
- 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 +23 -10
- package/framework/skills/core/morph-brainstorming/SKILL.md +1 -1
- package/framework/skills/core/morph-eval/SKILL.md +3 -6
- package/framework/skills/core/morph-implement/SKILL.md +28 -15
- package/framework/skills/core/morph-plan/SKILL.md +1 -1
- package/framework/skills/core/morph-proposal/SKILL.md +2 -2
- package/framework/skills/core/morph-review/SKILL.md +2 -6
- package/framework/skills/core/morph-stack-scan/SKILL.md +1 -1
- package/framework/skills/core/morph-standards/SKILL.md +1 -1
- package/framework/standards/ai-agents/agent-session.md +160 -160
- package/framework/standards/ai-agents/batching.md +193 -193
- package/framework/standards/ai-agents/context-providers.md +188 -188
- package/framework/standards/ai-agents/mcp-server.md +250 -250
- package/framework/standards/ai-agents/mcp-tools.md +197 -197
- package/framework/standards/ai-agents/middleware-patterns.md +207 -207
- package/framework/standards/ai-agents/modalities-image-gen.md +173 -173
- package/framework/standards/ai-agents/modalities-speech-to-text.md +171 -171
- package/framework/standards/ai-agents/modalities-text-to-speech.md +181 -181
- package/framework/standards/ai-agents/modalities-vision.md +201 -201
- package/framework/standards/ai-agents/multi-agent-patterns.md +155 -155
- package/framework/standards/ai-agents/production.md +275 -275
- package/framework/standards/ai-agents/prompts-in-db.md +214 -214
- package/framework/standards/ai-agents/providers/model-registry.md +158 -158
- package/framework/standards/ai-agents/service-tier-flex.md +135 -135
- package/framework/standards/ai-agents/structured-output.md +249 -249
- package/framework/standards/ai-agents/sweet-spot.md +109 -109
- package/framework/templates/.idea/morph-templates.xml +92 -0
- package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
- package/framework/templates/IDE-SNIPPETS.md +262 -262
- package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -7
- package/framework/templates/code/dotnet/ai-agents/AgentBootstrap.cs.template +39 -39
- package/framework/templates/code/dotnet/ai-agents/EmbeddingService.cs.template +68 -68
- package/framework/templates/code/dotnet/ai-agents/ModelRegistry.cs.template +117 -117
- package/framework/templates/code/dotnet/ai-agents/PromptRepository.cs.template +95 -95
- package/framework/templates/code/dotnet/ai-agents/ResilientToolMiddleware.cs.template +61 -61
- package/framework/templates/code/dotnet/ai-agents/VectorSearchTool.cs.template +107 -107
- package/framework/templates/code/dotnet/ai-agents/model-registry.json.template +58 -58
- package/framework/templates/code/dotnet/contracts/contracts-vsa.cs +281 -281
- package/framework/templates/code/dotnet/database/migration.cs +83 -83
- package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -21
- package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -4
- package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -4
- package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -15
- package/framework/templates/code/sql/ai-agents/agent-prompts-migration.sql.template +58 -58
- package/framework/templates/code/sql/ai-agents/pgvector-embeddings-migration.sql.template +91 -91
- package/framework/templates/code/typescript/contracts.ts +167 -167
- package/framework/templates/docs/clarifications.md +253 -253
- package/framework/templates/docs/schema-analysis.md +119 -119
- package/framework/templates/docs/ui-components.md +52 -52
- package/framework/templates/docs/ui-design-system.md +76 -76
- package/framework/templates/docs/ui-flows.md +167 -167
- package/framework/templates/docs/ui-mockups.md +98 -98
- package/framework/templates/feature/decisions.md +122 -122
- package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -43
- package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -26
- package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -32
- package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -56
- package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -22
- package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -26
- package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -54
- package/framework/templates/infrastructure/docker/Dockerfile.template +58 -58
- package/framework/templates/infrastructure/docker/docker-compose.template.yml +50 -50
- package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
- package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
- package/framework/templates/infrastructure/github/README.md +56 -56
- package/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -45
- package/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -27
- package/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -59
- package/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -39
- package/framework/templates/integrations/asaas-client.cs +387 -387
- package/framework/templates/integrations/asaas-webhook.cs +351 -351
- package/framework/templates/meta-prompts/fusion/fusion-agent.md +76 -76
- package/framework/templates/meta-prompts/fusion/fusion-aggregator.md +100 -100
- package/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +113 -113
- package/framework/templates/meta-prompts/validators/pre-commit-validator.md +95 -95
- package/framework/templates/project/validate.js +120 -120
- package/framework/templates/state.template.json +17 -17
- package/framework/templates/ui/design-system.css +226 -226
- package/package.json +1 -1
- package/src/commands/dashboard/dashboard.js +53 -53
- package/src/commands/index.js +13 -13
- package/src/commands/mcp/mcp-setup.js +519 -519
- package/src/commands/project/checkpoint.js +209 -209
- package/src/commands/project/doctor.js +23 -18
- package/src/commands/project/update.js +16 -9
- package/src/commands/state/create.js +58 -0
- package/src/commands/state/gate-decision.js +99 -0
- package/src/core/state/phase-state-machine.js +197 -197
- package/src/core/state/state-manager.js +55 -0
- package/src/core/templates/template-renderer.js +477 -477
- package/src/dashboard/app/components/DetailPanel.jsx +11 -11
- package/src/dashboard/app/components/FlowGraph.jsx +17 -17
- package/src/dashboard/app/components/SearchFilter.jsx +22 -22
- package/src/dashboard/app/hooks/useDetailPanel.js +15 -15
- package/src/dashboard/app/main.jsx +13 -13
- package/src/dashboard/app/pages/AgentMap.jsx +370 -370
- package/src/dashboard/app/pages/HookInspector.jsx +418 -418
- package/src/dashboard/app/pages/LiveState.jsx +239 -239
- package/src/dashboard/app/pages/PhasePipeline.jsx +408 -408
- package/src/dashboard/app/pages/RulesMap.jsx +273 -273
- package/src/dashboard/app/pages/SkillsLibrary.jsx +366 -366
- package/src/dashboard/app/pages/Standards.jsx +332 -332
- package/src/dashboard/app/styles/index.css +47 -47
- package/src/dashboard/index.html +12 -12
- package/src/dashboard/package.json +24 -24
- package/src/dashboard/scanner/hooks-scanner.js +41 -41
- package/src/dashboard/scanner/phases-scanner.js +15 -15
- package/src/dashboard/scanner/rubrics-scanner.js +12 -12
- package/src/dashboard/scanner/rules-scanner.js +37 -37
- package/src/dashboard/scanner/skills-scanner.js +43 -43
- package/src/dashboard/scanner/squads-scanner.js +13 -13
- package/src/dashboard/scanner/standards-scanner.js +26 -26
- package/src/dashboard/vite-plugin-morph-data.js +17 -17
- package/src/dashboard/vite.config.js +24 -24
- package/src/lib/agents/metrics-aggregator.js +56 -56
- package/src/lib/agents/metrics-calculator.js +125 -125
- package/src/lib/agents/output-collector.js +73 -73
- package/src/lib/detectors/claude-config-detector.js +152 -152
- package/src/lib/detectors/design-system-detector.js +231 -231
- package/src/lib/detectors/index.js +217 -217
- package/src/lib/generators/architecture-scanner.js +639 -639
- package/src/lib/generators/design-system-generator.js +508 -508
- package/src/lib/generators/index.js +13 -13
- package/src/lib/generators/settings-generator.js +209 -209
- package/src/lib/hooks/hook-executor.js +167 -167
- package/src/lib/installers/mcp-installer.js +719 -719
- package/src/lib/tasks/task-classifier.js +30 -30
- package/src/lib/tasks/task-parser.js +209 -209
- package/src/lib/tasks/test-runner.js +81 -81
- package/src/lib/validators/architecture/architecture-validator.js +259 -259
- package/src/lib/validators/checkpoint-persistence.js +39 -39
- package/src/lib/validators/contracts/contract-compliance-validator.js +274 -274
- package/src/lib/validators/css/css-validator.js +340 -340
- package/src/lib/validators/packages/package-validator.js +347 -347
- package/src/lib/validators/shared/emit-validator-dispatch.js +14 -14
- package/src/lib/validators/shared/issue-counter.js +14 -14
- package/src/lib/validators/validation-runner.js +349 -349
- package/src/scripts/setup-infra.js +385 -383
- package/src/utils/agent-id-mapper.js +11 -11
- package/src/utils/agents-installer.js +25 -10
- package/src/utils/banner.js +37 -4
- package/src/utils/claude-settings-manager.js +300 -300
- package/src/utils/hooks-installer.js +32 -4
- package/src/utils/skills-installer.js +174 -172
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
---
|
|
2
|
-
paths:
|
|
3
|
-
- "**/*.tsx"
|
|
4
|
-
- "**/*.ts"
|
|
5
|
-
stacks:
|
|
6
|
-
- nextjs
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Next.js Code Templates
|
|
10
|
-
|
|
11
|
-
When implementing Next.js features, use these templates as reference patterns.
|
|
12
|
-
Read the template file to see the exact pattern, then generate code following it.
|
|
13
|
-
|
|
14
|
-
## Scaffold (preferred for new features)
|
|
15
|
-
|
|
16
|
-
**Always use scaffold for new feature pages — never create feature files manually.**
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
morph-spec scaffold nextjs <feature> [--dry-run]
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Examples:
|
|
23
|
-
```bash
|
|
24
|
-
morph-spec scaffold nextjs book
|
|
25
|
-
morph-spec scaffold nextjs user-profile
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Generates 4 files: page (Server Component), list component, form component, TanStack Query hook.
|
|
29
|
-
|
|
30
|
-
**Only use `template render` for individual files when modifying an existing feature.**
|
|
31
|
-
|
|
32
|
-
| Template | Path | Purpose |
|
|
33
|
-
|----------|------|---------|
|
|
34
|
-
| Server Page | `.morph/framework/templates/frontend/nextjs/page.tsx.hbs` | App Router server component |
|
|
35
|
-
| Client Component | `.morph/framework/templates/frontend/nextjs/client-component.tsx.hbs` | `'use client'` component |
|
|
36
|
-
| Feature Form | `.morph/framework/templates/frontend/nextjs/feature-form.tsx.hbs` | react-hook-form + Zod + shadcn |
|
|
37
|
-
| Custom Hook | `.morph/framework/templates/frontend/nextjs/use-feature.ts.hbs` | TanStack Query hook |
|
|
38
|
-
| Env Config | `.morph/framework/templates/frontend/nextjs/env.mjs.hbs` | T3 Env validation |
|
|
39
|
-
| TypeScript Config | `.morph/framework/templates/frontend/nextjs/tsconfig.json.hbs` | Path aliases |
|
|
40
|
-
| Dockerfile | `.morph/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs` | Multi-stage build |
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.tsx"
|
|
4
|
+
- "**/*.ts"
|
|
5
|
+
stacks:
|
|
6
|
+
- nextjs
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Next.js Code Templates
|
|
10
|
+
|
|
11
|
+
When implementing Next.js features, use these templates as reference patterns.
|
|
12
|
+
Read the template file to see the exact pattern, then generate code following it.
|
|
13
|
+
|
|
14
|
+
## Scaffold (preferred for new features)
|
|
15
|
+
|
|
16
|
+
**Always use scaffold for new feature pages — never create feature files manually.**
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
morph-spec scaffold nextjs <feature> [--dry-run]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Examples:
|
|
23
|
+
```bash
|
|
24
|
+
morph-spec scaffold nextjs book
|
|
25
|
+
morph-spec scaffold nextjs user-profile
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Generates 4 files: page (Server Component), list component, form component, TanStack Query hook.
|
|
29
|
+
|
|
30
|
+
**Only use `template render` for individual files when modifying an existing feature.**
|
|
31
|
+
|
|
32
|
+
| Template | Path | Purpose |
|
|
33
|
+
|----------|------|---------|
|
|
34
|
+
| Server Page | `.morph/framework/templates/frontend/nextjs/page.tsx.hbs` | App Router server component |
|
|
35
|
+
| Client Component | `.morph/framework/templates/frontend/nextjs/client-component.tsx.hbs` | `'use client'` component |
|
|
36
|
+
| Feature Form | `.morph/framework/templates/frontend/nextjs/feature-form.tsx.hbs` | react-hook-form + Zod + shadcn |
|
|
37
|
+
| Custom Hook | `.morph/framework/templates/frontend/nextjs/use-feature.ts.hbs` | TanStack Query hook |
|
|
38
|
+
| Env Config | `.morph/framework/templates/frontend/nextjs/env.mjs.hbs` | T3 Env validation |
|
|
39
|
+
| TypeScript Config | `.morph/framework/templates/frontend/nextjs/tsconfig.json.hbs` | Path aliases |
|
|
40
|
+
| Dockerfile | `.morph/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs` | Multi-stage build |
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "MORPH-SPEC feature.json",
|
|
4
|
+
"description": "Canonical shape of the authoritative, committed per-feature state at .morph/features/{feature}/feature.json (v5 per-feature state model). Born via `morph-spec create` (explicit) or the state-sync hook (implicit fallback). Server-side writers: `morph-spec approve/advance` (approvalGates), `morph-spec score` (taskScores), `morph-spec gate-decision` (gateDecisions), `morph-spec archive` (status/archivedAt). Never hand-edit the CLI-owned fields — manual Edits collide with the state-sync hook. This schema is documentational: additionalProperties stays true so older/newer CLIs interoperate.",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["status", "approvalGates"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"status": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"enum": ["draft", "in_progress", "completed"],
|
|
11
|
+
"description": "Feature lifecycle status. `completed` is stamped by `morph-spec archive` together with archivedAt."
|
|
12
|
+
},
|
|
13
|
+
"createdAt": { "type": "string", "format": "date-time" },
|
|
14
|
+
"updatedAt": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"format": "date-time",
|
|
17
|
+
"description": "Stamped server-side on every CLI/hook write."
|
|
18
|
+
},
|
|
19
|
+
"archivedAt": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"format": "date-time",
|
|
22
|
+
"description": "Stamped by `morph-spec archive`."
|
|
23
|
+
},
|
|
24
|
+
"approvalGates": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"description": "One entry per gate. Written ONLY by `morph-spec approve`/`advance` (approvedBy: \"auto\") or the state-sync hook on a human \"aprovado\" answer (approvedBy: \"manual\").",
|
|
27
|
+
"properties": {
|
|
28
|
+
"proposal": { "$ref": "#/definitions/gate" },
|
|
29
|
+
"uiux": { "$ref": "#/definitions/gate" },
|
|
30
|
+
"plan": { "$ref": "#/definitions/gate" },
|
|
31
|
+
"review": { "$ref": "#/definitions/gate" }
|
|
32
|
+
},
|
|
33
|
+
"additionalProperties": false
|
|
34
|
+
},
|
|
35
|
+
"gateDecisions": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"description": "Trust decision persisted BEFORE acting on a gate, written ONLY by `morph-spec gate-decision` (decidedAt is server-side). Read by the gate-guard hook to verify the observed action matched the recorded decision.",
|
|
38
|
+
"propertyNames": { "enum": ["proposal", "uiux", "plan", "review"] },
|
|
39
|
+
"additionalProperties": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"required": ["pause", "reason", "signals", "trust", "decidedAt"],
|
|
42
|
+
"properties": {
|
|
43
|
+
"pause": { "type": "boolean", "description": "true = the gate must pause for a human (AskUserQuestion); false = auto-pass with a short summary." },
|
|
44
|
+
"reason": { "type": "string", "description": "The signal that drove the decision (or 'nenhum sinal de risco')." },
|
|
45
|
+
"signals": {
|
|
46
|
+
"type": "object",
|
|
47
|
+
"description": "Risk signals evaluated (free-form): taskCount, evalScore, standardsViolations, designSystemDivergence..."
|
|
48
|
+
},
|
|
49
|
+
"trust": { "type": "string", "enum": ["auto", "manual"] },
|
|
50
|
+
"decidedAt": { "type": "string", "format": "date-time" }
|
|
51
|
+
},
|
|
52
|
+
"additionalProperties": false
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"taskScores": {
|
|
56
|
+
"type": "object",
|
|
57
|
+
"description": "Per-task eval scores, written ONLY by `morph-spec score` (updatedAt is server-side; attempts auto-increment; bestScore is kept).",
|
|
58
|
+
"propertyNames": { "pattern": "^T\\d+$" },
|
|
59
|
+
"additionalProperties": {
|
|
60
|
+
"type": "object",
|
|
61
|
+
"required": ["lastScore", "bestScore", "attempts", "updatedAt"],
|
|
62
|
+
"properties": {
|
|
63
|
+
"lastScore": { "type": "number", "minimum": 0, "maximum": 10 },
|
|
64
|
+
"bestScore": { "type": "number", "minimum": 0, "maximum": 10 },
|
|
65
|
+
"attempts": { "type": "integer", "minimum": 1 },
|
|
66
|
+
"dimensions": {
|
|
67
|
+
"type": "object",
|
|
68
|
+
"properties": {
|
|
69
|
+
"architecture": { "type": "number", "minimum": 0, "maximum": 10 },
|
|
70
|
+
"contracts": { "type": "number", "minimum": 0, "maximum": 10 },
|
|
71
|
+
"codeQuality": { "type": "number", "minimum": 0, "maximum": 10 },
|
|
72
|
+
"testCoverage": { "type": "number", "minimum": 0, "maximum": 10 }
|
|
73
|
+
},
|
|
74
|
+
"additionalProperties": false
|
|
75
|
+
},
|
|
76
|
+
"updatedAt": { "type": "string", "format": "date-time" }
|
|
77
|
+
},
|
|
78
|
+
"additionalProperties": false
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"tasks": {
|
|
82
|
+
"type": "object",
|
|
83
|
+
"description": "Aggregate task counters (informational — the source of truth is 2-plan/tasks.json).",
|
|
84
|
+
"properties": {
|
|
85
|
+
"total": { "type": "integer", "minimum": 0 },
|
|
86
|
+
"completed": { "type": "integer", "minimum": 0 },
|
|
87
|
+
"inProgress": { "type": "integer", "minimum": 0 },
|
|
88
|
+
"pending": { "type": "integer", "minimum": 0 }
|
|
89
|
+
},
|
|
90
|
+
"additionalProperties": true
|
|
91
|
+
},
|
|
92
|
+
"outputs": {
|
|
93
|
+
"type": "object",
|
|
94
|
+
"description": "Outputs tracked by the state-sync hook: filename → { created, path }.",
|
|
95
|
+
"additionalProperties": {
|
|
96
|
+
"type": "object",
|
|
97
|
+
"properties": {
|
|
98
|
+
"created": { "type": "boolean" },
|
|
99
|
+
"path": { "type": "string" }
|
|
100
|
+
},
|
|
101
|
+
"additionalProperties": true
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"activeAgents": { "type": "array", "items": { "type": "string" } },
|
|
105
|
+
"checkpoints": { "type": "array" },
|
|
106
|
+
"dispatchLog": {
|
|
107
|
+
"type": "array",
|
|
108
|
+
"description": "Dispatch events (capped at 50). Entries: { timestamp, phase, mode, agents: [{ id, subagentType, group, tasks }] }."
|
|
109
|
+
},
|
|
110
|
+
"trustConfig": { "type": "object" },
|
|
111
|
+
"contextBundles": { "type": "array" },
|
|
112
|
+
"fileChanges": { "type": "array" },
|
|
113
|
+
"skippedPhases": { "type": "array" }
|
|
114
|
+
},
|
|
115
|
+
"additionalProperties": true,
|
|
116
|
+
"definitions": {
|
|
117
|
+
"gate": {
|
|
118
|
+
"type": "object",
|
|
119
|
+
"required": ["approved"],
|
|
120
|
+
"properties": {
|
|
121
|
+
"approved": { "type": "boolean" },
|
|
122
|
+
"timestamp": { "type": ["string", "null"], "description": "ISO timestamp of the approval/revocation, null while never evaluated." },
|
|
123
|
+
"approvedBy": { "type": ["string", "null"], "description": "\"auto\" (policy gate), \"manual\" (human in the loop), a --approver name, or null while never evaluated." }
|
|
124
|
+
},
|
|
125
|
+
"additionalProperties": true
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -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: "7.
|
|
7
|
+
cliVersion: "7.9.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# create-umbraco-lp
|
|
@@ -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: "7.
|
|
7
|
+
cliVersion: "7.9.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# migrate-lp-to-umbraco
|
|
@@ -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: "7.
|
|
7
|
+
cliVersion: "7.9.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-apply
|
|
@@ -52,6 +52,8 @@ O comando analisa `dependencies`, `group` e `effort` das tasks pendentes e impri
|
|
|
52
52
|
|
|
53
53
|
> **Peso de esforço:** a decisão é ponderada por `effort` (S=1, M=2, L=4, XL=8). **Raízes e fluxos compostos só de tasks S não ganham dispatch próprio** — overhead > trabalho. O comando os lista como `inline` (você os executa no modo sequencial) ou os agrupa num **único** agente quando são muitos. O cap de **4 agentes simultâneos** (anti-padrão abaixo) vale para ambas as formas. Se um fluxo de domínio é uma cadeia longa, despache o **fluxo inteiro** a um sub-agent (que executa a cadeia em ordem internamente) — um agente por fluxo, não um agente por task.
|
|
54
54
|
|
|
55
|
+
> **DAG × gatilho de effort — decisões ortogonais que coexistem:** a decisão deste comando governa o **paralelismo ENTRE tasks** (quantos sub-agents ao mesmo tempo: fluxos/raízes independentes em batch). O gatilho de effort/domínio de `morph-implement` §4 governa o **dispatch INDIVIDUAL** de cada task quando ela chega ao topo do loop sequencial. `DAG: sequencial` significa "uma task por vez, na ordem" — **NÃO significa "tudo inline"**. Exemplo: cadeia única backend de 12 tasks → o DAG decide sequencial; T7 tem effort L → ao chegar em T7, o orquestrador a despacha **sozinha** para `morph-dotnet-senior` e aguarda o retorno (um agente por vez); T8 (S, mesmo domínio já carregado) roda inline. As duas regras nunca conflitam: o DAG decide *quantos ao mesmo tempo*, o gatilho de effort decide *quem executa cada task*.
|
|
56
|
+
|
|
55
57
|
Registre a linha de decisão que o comando imprimiu, por exemplo:
|
|
56
58
|
```
|
|
57
59
|
DAG: 14 tasks, fluxos {backend:9, frontend:2} independentes (peso 18‖4) → 2 fluxos paralelos + T14 (integração) sequencial no fim
|
|
@@ -120,9 +122,15 @@ dispatch Agent (subagent_type: "morph-{id}") with prompt:
|
|
|
120
122
|
Não modifique spec.md, mandate.md.
|
|
121
123
|
|
|
122
124
|
Protocolo obrigatório:
|
|
123
|
-
1.
|
|
124
|
-
|
|
125
|
-
|
|
125
|
+
1. ATO FINAL OBRIGATÓRIO — relatório via SendMessage: antes de encerrar,
|
|
126
|
+
chame a tool SendMessage com to:"main" e o relatório completo no content.
|
|
127
|
+
Sua última mensagem em texto NÃO chega ao orquestrador — só SendMessage
|
|
128
|
+
chega. Não termine idle "aguardando"; o SendMessage É o encerramento.
|
|
129
|
+
Exemplo literal (última chamada de tool da sua sessão):
|
|
130
|
+
SendMessage({ to: "main", content: "Fluxo backend concluído (T2→T7).
|
|
131
|
+
Sumário: ... Arquivos: src/... Standards: vsa-handler-patterns.
|
|
132
|
+
Auto-score: 9/10" })
|
|
133
|
+
Terminar idle sem SendMessage é falha de protocolo.
|
|
126
134
|
2. NÃO toque em tasks.json, feature.json, state.json nem no board de sessão
|
|
127
135
|
(TaskCreate/TaskUpdate) — todo estado (status de task, scores, gates) é
|
|
128
136
|
gravado exclusivamente pelo orquestrador.
|
|
@@ -130,7 +138,7 @@ dispatch Agent (subagent_type: "morph-{id}") with prompt:
|
|
|
130
138
|
(dotnet test / npm test do projeto inteiro) — edições concorrentes quebram
|
|
131
139
|
o build umas das outras; a verificação é do orquestrador, pós-batch.
|
|
132
140
|
|
|
133
|
-
Retorne:
|
|
141
|
+
Retorne no content do SendMessage:
|
|
134
142
|
- sumário das mudanças
|
|
135
143
|
- arquivos modificados (paths)
|
|
136
144
|
- standard(s) consultado(s)
|
|
@@ -141,7 +149,7 @@ dispatch Agent (subagent_type: "morph-{id}") with prompt:
|
|
|
141
149
|
|
|
142
150
|
> **Alternativa quando os fluxos tocam os mesmos projetos/arquivos** (ex.: o mesmo csproj de testes compartilhado): despache com `isolation: "worktree"` — cada agente trabalha numa working tree própria e o orquestrador integra ao final. Nesse caso a cláusula 3 vira "rode build/test apenas dentro do seu worktree".
|
|
143
151
|
|
|
144
|
-
Aguardar todos os agentes terminarem. **
|
|
152
|
+
Aguardar todos os agentes terminarem. O hook `subagent-report-guard` (Stop/SubagentStop) bloqueia uma vez o encerramento de um subagent despachado que não chamou SendMessage, com a instrução da cláusula 1 — o ciclo cobrar-esperar deixa de ser o caminho normal. **Fallback: se mesmo assim um agente ficar idle sem entregar o relatório, cobre-o via SendMessage e registre a falha de protocolo no recap.** Depois, sequencialmente:
|
|
145
153
|
- **Rodar a verificação compartilhada uma única vez** (build + suíte de testes do projeto) — os agentes não a rodaram (cláusula 3 do protocolo).
|
|
146
154
|
- Para cada relatório retornado:
|
|
147
155
|
- Aplicar `Skill(morph-eval)`.
|
|
@@ -168,9 +176,13 @@ Sinais de risco para Gate 3:
|
|
|
168
176
|
|
|
169
177
|
Mesma lógica do Gate 1/Gate 2 (regras da tabela do MORPH.md §5, aplicadas em linguagem natural — sem scripts): `trust: manual` → pausa sempre; `standardsViolations` não-vazio → pausa; `evalScore < 9` → pausa; caso contrário → auto-passa.
|
|
170
178
|
|
|
171
|
-
**Persista a decisão
|
|
172
|
-
|
|
173
|
-
|
|
179
|
+
**Persista a decisão ANTES de apresentar ou auto-aprovar — via CLI, nunca editando feature.json à mão** (o Edit manual colide com o hook state-sync — erro "file modified since read"):
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
morph-spec gate-decision {feature} review --pause false --reason "score 9.2, sem violações" --signals '{"evalScore":9.2,"standardsViolations":[]}'
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
O comando grava `gateDecisions.review = { pause, reason, signals, trust, decidedAt }` no `feature.json` autoritativo com timestamp server-side (o `signals.evalScore` aqui é o score composto do review-report; shape canônico em `.morph/framework/schemas/feature.schema.json`). O hook `gate-guard.js` confere depois se a ação bateu. Sem o registro o guard não verifica.
|
|
174
186
|
|
|
175
187
|
- Pause: `AskUserQuestion` com options `["aprovado, fechar feature", "preciso ajustar", "rollback"]`.
|
|
176
188
|
- Auto: exibir summary do review-report, aprovar via `morph-spec approve {feature} review --mode auto`, e prosseguir.
|
|
@@ -189,7 +201,7 @@ Mesma lógica do Gate 1/Gate 2 (regras da tabela do MORPH.md §5, aplicadas em l
|
|
|
189
201
|
- Não dispachar mais que 4 agentes em paralelo (sobrecarga de contexto + custo).
|
|
190
202
|
- Não dispachar um agente inteiro para uma raiz de effort S — overhead > trabalho; o `morph-spec dag` já as marca como `inline`.
|
|
191
203
|
- Não deixar sub-agent tocar `tasks.json`, `feature.json` ou o board de sessão — estado é do orquestrador (cláusula 2 do protocolo).
|
|
192
|
-
- Não editar `feature.json` à mão para gravar scores — use `morph-spec score` (
|
|
204
|
+
- Não editar `feature.json` à mão para gravar scores ou decisões de gate — use `morph-spec score` e `morph-spec gate-decision` (timestamps server-side; o Edit manual colide com o hook state-sync — "file modified since read").
|
|
193
205
|
|
|
194
206
|
## Output esperado
|
|
195
207
|
|
|
@@ -207,4 +219,5 @@ Mesma lógica do Gate 1/Gate 2 (regras da tabela do MORPH.md §5, aplicadas em l
|
|
|
207
219
|
- `framework/skills/core/morph-review/SKILL.md`
|
|
208
220
|
- `morph-spec dag {feature}` — análise de DAG e decisão sequencial vs paralelo (ponderada por effort)
|
|
209
221
|
- `morph-spec score {feature} {task} {score} [--dims a,c,q,t]` — grava taskScores no feature.json com timestamp server-side
|
|
222
|
+
- `morph-spec gate-decision {feature} {gate} --pause {bool} [--reason ...] [--signals ...]` — grava gateDecisions no feature.json com timestamp server-side (shape em `.morph/framework/schemas/feature.schema.json`)
|
|
210
223
|
- `.morph/framework/MORPH.md` §5 — regras de pausa de gate (trust mode)
|
|
@@ -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: "7.
|
|
7
|
+
cliVersion: "7.9.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: "7.
|
|
7
|
+
cliVersion: "7.9.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-eval
|
|
@@ -39,16 +39,13 @@ Também invocado ao receber o retorno de um sub-agent com auto-score < 7.
|
|
|
39
39
|
|
|
40
40
|
6. Registre o score no recap.md da tarefa avaliada.
|
|
41
41
|
|
|
42
|
-
7.
|
|
43
|
-
- Encontre a entrada da task avaliada em `tasks[]` pelo `id`
|
|
44
|
-
- Preencha `eval_score` com o score composto calculado no passo 4
|
|
45
|
-
- Preencha `eval_dimensions` com os scores individuais por dimensão
|
|
42
|
+
7. **NÃO escreva o trace manualmente.** O arquivo `.morph/traces/YYYY-MM-DD-{feature}-implement.json` é gerado automaticamente pelo hook `trace-autogen` a cada write de `tasks.json`, lendo `eval_score`/`eval_dimensions` do registro `taskScores` do feature.json. Garanta apenas que o score foi persistido via `morph-spec score {feature} {task} {score} --dims {a},{c},{q},{t}` (a `morph-apply` faz esse registro no loop) — é dali que o trace lê.
|
|
46
43
|
|
|
47
44
|
## Output esperado
|
|
48
45
|
- Score composto 0-10 com scores por dimensão
|
|
49
46
|
- Ação tomada com base no score (aprovado em >=9 / feedback acionável para o loop em <9)
|
|
50
47
|
- Entrada no recap.md com scores
|
|
51
|
-
-
|
|
48
|
+
- Score persistido em `taskScores` via `morph-spec score` (o trace é gerado automaticamente pelo hook `trace-autogen`)
|
|
52
49
|
|
|
53
50
|
## Referências
|
|
54
51
|
- `.morph/framework/evals/rubrics/architecture.md` — rubrica de arquitetura (30%)
|
|
@@ -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: "7.
|
|
7
|
+
cliVersion: "7.9.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-implement
|
|
@@ -47,6 +47,8 @@ Ao iniciar cada task de `tasks.json` — antes de escrever qualquer código. Nor
|
|
|
47
47
|
|
|
48
48
|
Inline é aceitável só para tasks S/M **dentro do domínio já carregado**. Se for inline numa task que dispara um gatilho, registre a justificativa em uma linha no `decisions.md` — inline silencioso numa task pesada/multi-domínio é o anti-padrão da seção 6.
|
|
49
49
|
|
|
50
|
+
> **Relação com `morph-spec dag`:** a decisão do DAG (na `morph-apply` §2) governa o **paralelismo ENTRE tasks** — quantos sub-agents rodam ao mesmo tempo. Os gatilhos acima governam o **dispatch INDIVIDUAL desta task**. São ortogonais e coexistem: `DAG: sequencial` NÃO significa "tudo inline" — significa "uma task por vez, na ordem". Exemplo: cadeia única backend de 12 tasks (DAG: sequencial); T7 tem effort L → despache T7 sozinha para `morph-dotnet-senior` e aguarde o retorno antes de seguir; T8 (S, mesmo domínio) roda inline.
|
|
51
|
+
|
|
50
52
|
**Se for despachar — use `subagent_type: "morph-{id}"` do agente identificado no passo 3.** Os subagents são gerados de `agents.json` na instalação (`.claude/agents/morph-{id}.md`) e a persona é o **system prompt** deles — não a cole no prompt. **Fallback:** se `morph-{id}` não estiver na sua lista de subagent types (stack não instalado), use `general-purpose` colando o campo `persona` no prompt e registre nas `notes` da task: `dispatch-fallback: general-purpose ({id} não registrado)`. Template do prompt:
|
|
51
53
|
```
|
|
52
54
|
Implementar [ID]: [title da task]
|
|
@@ -57,17 +59,24 @@ Ao iniciar cada task de `tasks.json` — antes de escrever qualquer código. Nor
|
|
|
57
59
|
Done quando: [doneCriteria do tasks.json]
|
|
58
60
|
|
|
59
61
|
Protocolo obrigatório:
|
|
60
|
-
1.
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
1. ATO FINAL OBRIGATÓRIO — relatório via SendMessage: antes de encerrar,
|
|
63
|
+
chame a tool SendMessage com to:"main" e o relatório completo no content.
|
|
64
|
+
Sua última mensagem em texto NÃO chega ao orquestrador — só SendMessage
|
|
65
|
+
chega. Não termine idle "aguardando"; o SendMessage É o encerramento.
|
|
66
|
+
Exemplo literal (última chamada de tool da sua sessão):
|
|
67
|
+
SendMessage({ to: "main", content: "T{N} concluída. (1) O que foi feito:
|
|
68
|
+
handler + validator do slice X. (2) Arquivos: src/Features/X/Handler.cs,
|
|
69
|
+
tests/X/HandlerTests.cs. (3) Problemas: nenhum. (4) Auto-score: 9/10" })
|
|
70
|
+
Terminar idle sem SendMessage é falha de protocolo.
|
|
63
71
|
2. NÃO toque em tasks.json, feature.json, state.json nem no board de sessão
|
|
64
72
|
(TaskCreate/TaskUpdate) — todo estado é gravado exclusivamente pelo
|
|
65
73
|
orquestrador.
|
|
66
74
|
3. Se você faz parte de um batch paralelo, NÃO rode build/test da suíte
|
|
67
75
|
compartilhada — a verificação é do orquestrador, pós-batch.
|
|
68
76
|
|
|
69
|
-
Retorne APENAS: (1) o que foi feito em 2-3 frases,
|
|
70
|
-
(3) problemas encontrados e como foram resolvidos,
|
|
77
|
+
Retorne no content do SendMessage APENAS: (1) o que foi feito em 2-3 frases,
|
|
78
|
+
(2) arquivos modificados, (3) problemas encontrados e como foram resolvidos,
|
|
79
|
+
(4) auto-score 0-10.
|
|
71
80
|
```
|
|
72
81
|
Após receber o retorno: o auto-score é **triagem, não aprovação** — se < 7, re-despache com o feedback específico (ou corrija inline) antes de prosseguir. Em qualquer caso, a task só avança quando `morph-eval` der score ≥ 9 (barra única do MORPH.md §0). Integre o relatório ao recap.md e vá para o passo 7.
|
|
73
82
|
|
|
@@ -102,31 +111,35 @@ Ao iniciar cada task de `tasks.json` — antes de escrever qualquer código. Nor
|
|
|
102
111
|
- Sem standard ⇒ a task falha no validador de Gate 3 (`validate-completion`)
|
|
103
112
|
e o reviewer não consegue auditar de onde veio a decisão técnica.
|
|
104
113
|
|
|
105
|
-
7.
|
|
106
|
-
- Crie o arquivo se não existir (use o schema em `.morph/framework/evals/trace-schema.md`)
|
|
107
|
-
- Adicione entrada em `tasks[]` com: `id`, `title`, `status`, `standards_consulted`, `agent_persona`, `files_modified`, `sub_agent_dispatched`
|
|
108
|
-
- Deixe `eval_score` e `eval_dimensions` como `null` — serão preenchidos pelo morph-eval
|
|
109
|
-
- Se esta for a última tarefa da fase, preencha `completed_at`
|
|
110
|
-
|
|
111
|
-
8. Atualizar `tasks.json` marcando a task como `done` — **direto com a tool `Edit` (ou `Write`)**, sem scripts:
|
|
114
|
+
7. Atualizar `tasks.json` marcando a task como `done` — **direto com a tool `Edit` (ou `Write`)**, sem scripts:
|
|
112
115
|
|
|
113
116
|
- Mude apenas os campos mutáveis da task: `status` (enum válido: `pending`,
|
|
114
117
|
`in_progress`, `done`, `skipped`, `blocked` — nunca invente valores como
|
|
115
118
|
`"completed"`), `outputs` (paths realmente produzidos) e `notes`.
|
|
119
|
+
- **`outputs` contém apenas paths realmente produzidos.** Deleções, remoções
|
|
120
|
+
e anotações (ex.: `"pasta/ (removido: a, b)"`) se registram em `notes`,
|
|
121
|
+
nunca em `outputs`. E `notes` é **uma string única** — não um array.
|
|
116
122
|
- **Se os `outputs` reais divergirem dos planejados**, registre o porquê em
|
|
117
|
-
`notes` na mesma edição — o hook exige a note quando há divergência
|
|
123
|
+
`notes` na mesma edição — o hook exige a note quando há divergência (e a
|
|
124
|
+
mensagem de violação aponta o campo/valor exato do problema).
|
|
118
125
|
- `tasks.json` é protegido após o Gate 2: o hook `protect-spec-files` faz diff
|
|
119
126
|
semântico e libera Write ou Edit desde que nenhum campo de contrato do plano
|
|
120
127
|
(`title`, `description`, `dependencies`, `effort`, `doneCriteria`, `group`)
|
|
121
128
|
mude e o schema continue válido.
|
|
122
129
|
|
|
123
|
-
|
|
130
|
+
> **Trace automático:** este write de `tasks.json` dispara o hook `trace-autogen`,
|
|
131
|
+
> que gera/atualiza `.morph/traces/YYYY-MM-DD-{feature}-implement.json` a partir de
|
|
132
|
+
> tasks.json + recap.md + `taskScores` do feature.json. **NÃO escreva o trace
|
|
133
|
+
> manualmente** — a escrita manual foi removida da cerimônia por task.
|
|
134
|
+
|
|
135
|
+
8. Quando invocada por `morph-apply`, retornar o controle à skill orquestradora — ela decide qual task vem em seguida via `getReadyTasks(data)`. 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.
|
|
124
136
|
|
|
125
137
|
## Output esperado
|
|
126
138
|
- Código implementado conforme o standard consultado (direto ou via sub-agent)
|
|
127
139
|
- `.morph/features/{feature}/3-implement/recap.md` atualizado com entrada da task concluída
|
|
128
140
|
- `.morph/features/{feature}/2-plan/tasks.json` com status da task atualizado para `done`
|
|
129
141
|
- `.morph/features/{feature}/2-plan/decisions.md` atualizado se houver decisão não trivial
|
|
142
|
+
- Trace em `.morph/traces/` gerado automaticamente pelo hook `trace-autogen` (a skill não o escreve)
|
|
130
143
|
|
|
131
144
|
## Referências
|
|
132
145
|
- `.morph/framework/standards/STANDARDS.json` — índice de standards (não carregue todos — filtre por task)
|
|
@@ -4,7 +4,7 @@ description: Guia a produção dos três artefatos de planejamento de uma featur
|
|
|
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: "7.
|
|
7
|
+
cliVersion: "7.9.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: "7.
|
|
7
|
+
cliVersion: "7.9.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-proposal
|
|
@@ -35,7 +35,7 @@ Conduzir uma feature do request inicial até o plano aprovado (Gate 2), sem inte
|
|
|
35
35
|
- Se argumento ausente: perguntar via `AskUserQuestion` (1 pergunta, header "Feature").
|
|
36
36
|
- Verificar `.morph/features/{feature-name}/`:
|
|
37
37
|
- Se `0-proposal/proposal.md` existe e tem conteúdo: pular para passo 3.
|
|
38
|
-
- Caso contrário:
|
|
38
|
+
- Caso contrário: rode `morph-spec create {feature-name}` — cria `.morph/features/{feature-name}/0-proposal/` e o `feature.json` canônico (shape em `.morph/framework/schemas/feature.schema.json`) num passo só, server-side. Não crie a estrutura à mão nem dependa do nascimento implícito via hook no primeiro Write. Depois siga o passo 2.
|
|
39
39
|
|
|
40
40
|
### 2. Invocar `Skill(morph-brainstorming)`
|
|
41
41
|
|
|
@@ -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: "7.
|
|
7
|
+
cliVersion: "7.9.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-review
|
|
@@ -73,11 +73,7 @@ e o `recap.md` estar atualizado. Normalmente invocada pela skill orquestradora `
|
|
|
73
73
|
(A barra de avanço por task é 9; uma dimensão individual abaixo de 8 no review da feature
|
|
74
74
|
inteira é um bloqueante crítico que o loop de correção deveria ter pego.)
|
|
75
75
|
|
|
76
|
-
7.
|
|
77
|
-
- Preencha `phase_summary.tasks_completed`, `tasks_failed`, `avg_eval_score`
|
|
78
|
-
- Calcule `standards_most_used` a partir das entradas em `tasks[].standards_consulted`
|
|
79
|
-
- Preencha `sub_agents_dispatched` com a contagem de tasks onde `sub_agent_dispatched: true`
|
|
80
|
-
- Preencha `completed_at` com o timestamp atual
|
|
76
|
+
7. **NÃO finalize o trace manualmente.** O hook `trace-autogen` gera e finaliza `.morph/traces/YYYY-MM-DD-{feature}-implement.json` automaticamente (incl. `phase_summary` e `completed_at`) no último write de `tasks.json` — quando a última task sai de `pending`/`in_progress`. Se o trace parecer desatualizado, a causa é um `morph-spec score` faltante ou um recap sem o bloco da task — corrija a fonte, não o trace.
|
|
81
77
|
|
|
82
78
|
8. Apresente o Gate 3 segundo trust mode.
|
|
83
79
|
|
|
@@ -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: "7.
|
|
7
|
+
cliVersion: "7.9.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-stack-scan
|
|
@@ -4,7 +4,7 @@ description: Localiza e carrega um standard específico do STANDARDS.json sob de
|
|
|
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: "7.
|
|
7
|
+
cliVersion: "7.9.0"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# morph-standards
|