@polymorphism-tech/morph-spec 4.12.0 → 4.14.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/CLAUDE.md +7 -7
- package/README.md +28 -34
- package/bin/morph-spec.js +41 -24
- package/bin/task-manager.js +962 -1341
- package/bin/validate.js +1 -1
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +14 -16
- package/docs/QUICKSTART.md +15 -15
- package/framework/CLAUDE.md +5 -2
- package/framework/agents/README.md +3 -4
- package/framework/agents/ai-agents/ai-system-architect.md +6 -10
- package/framework/agents/architecture/seo-growth-hacker.md +166 -326
- package/framework/agents/architecture/standards-architect.md +21 -31
- package/framework/agents/backend/dotnet-senior.md +160 -86
- package/framework/agents/backend/ef-modeler.md +2 -6
- package/framework/agents/backend/hangfire-orchestrator.md +8 -9
- package/framework/agents/backend/ms-agent-expert.md +1 -1
- package/framework/agents/frontend/nextjs-expert.md +198 -133
- package/framework/agents/frontend/ui-ux-designer.md +226 -267
- package/framework/agents/infrastructure/infra-architect.md +191 -27
- package/framework/agents/integrations/clerk-auth.md +19 -26
- package/framework/agents/integrations/hangfire-integration.md +1 -4
- package/framework/agents.json +1084 -2278
- package/framework/commands/morph-apply.md +4 -6
- package/framework/commands/morph-preflight.md +192 -269
- package/framework/commands/morph-proposal.md +210 -238
- package/framework/commands/morph-status.md +72 -92
- package/framework/commands/morph-troubleshoot.md +6 -13
- package/framework/hooks/README.md +1 -6
- package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +4 -6
- package/framework/hooks/claude-code/pre-compact/save-morph-context.js +12 -7
- package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +2 -2
- package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +2 -2
- package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +5 -10
- package/framework/hooks/claude-code/session-start/inject-morph-context.js +63 -30
- package/framework/hooks/claude-code/session-start/resume-context.js +77 -0
- package/framework/hooks/claude-code/statusline.py +4 -5
- package/framework/hooks/claude-code/stop/validate-completion.js +4 -4
- package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +8 -8
- package/framework/hooks/shared/compact-restore.js +28 -5
- package/framework/hooks/shared/phase-utils.js +4 -8
- package/framework/hooks/shared/state-reader.js +34 -3
- package/framework/phases.json +162 -200
- package/framework/rules/ai-agents-standards.md +15 -0
- package/framework/rules/asaas-standards.md +13 -0
- package/framework/rules/clerk-standards.md +13 -0
- package/framework/rules/csharp-standards.md +8 -4
- package/framework/rules/data-standards.md +18 -0
- package/framework/rules/dotnet-templates.md +87 -0
- package/framework/rules/frontend-standards.md +13 -13
- package/framework/rules/hangfire-standards.md +13 -0
- package/framework/rules/infrastructure-standards.md +27 -16
- package/framework/rules/morph-workflow.md +73 -13
- package/framework/rules/nextjs-standards.md +1 -0
- package/framework/rules/nextjs-templates.md +40 -0
- package/framework/rules/resend-standards.md +12 -0
- package/framework/rules/supabase-standards.md +29 -0
- package/framework/skills/README.md +6 -8
- package/framework/skills/level-0-meta/mcp-registry.json +21 -99
- package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
- package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
- package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
- package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
- package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
- package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
- package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
- package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
- package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
- package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
- package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
- package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
- package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
- package/framework/skills/level-1-workflows/README.md +1 -1
- package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
- package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +57 -123
- package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
- package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
- package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/code-quality-reviewer-prompt.md +1 -1
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -3
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +2 -2
- package/framework/skills/level-1-workflows/morph-phase-implement/references/recap-example.md +1 -1
- package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +17 -13
- package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +22 -40
- package/framework/skills/level-1-workflows/morph-phase-tasks/references/task-planning-patterns.md +143 -172
- package/framework/skills/level-1-workflows/morph-phase-tasks/references/tasks-example.md +5 -5
- package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +57 -77
- package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
- package/framework/squad-templates/backend-only.json +6 -6
- package/framework/squad-templates/frontend-only.json +17 -8
- package/framework/squad-templates/full-stack.json +29 -24
- package/framework/standards/STANDARDS.json +1021 -2369
- package/framework/standards/backend/dotnet/fluent-validation-vsa.md +200 -0
- package/framework/standards/backend/dotnet/result-pattern.md +213 -0
- package/framework/standards/backend/dotnet/scalar-ui.md +172 -0
- package/framework/standards/backend/dotnet/scrutor.md +158 -0
- package/framework/standards/backend/dotnet/vsa-handler-patterns.md +274 -0
- package/framework/standards/frontend/nextjs/motion-patterns.md +1 -1
- package/framework/standards/infrastructure/supabase/mcp-setup.md +83 -193
- package/framework/standards/integration/mcp/mcp-tools.md +91 -77
- package/framework/templates/IDE-SNIPPETS.md +2 -6
- package/framework/templates/README.md +709 -814
- package/framework/templates/REGISTRY.json +223 -762
- package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -0
- package/framework/templates/code/dotnet/abstractions/error.cs +60 -0
- package/framework/templates/code/dotnet/abstractions/handler.cs +12 -0
- package/framework/templates/code/dotnet/abstractions/result.cs +74 -0
- package/framework/templates/code/dotnet/backend/repository.cs +148 -141
- package/framework/templates/code/dotnet/constants/api-tags.cs +6 -0
- package/framework/templates/code/dotnet/exceptions/exception-handler.cs +32 -0
- package/framework/templates/code/dotnet/extensions/database-extensions.cs +20 -0
- package/framework/templates/code/dotnet/extensions/handler-registration.cs +38 -0
- package/framework/templates/code/dotnet/extensions/health-checks.cs +24 -0
- package/framework/templates/code/dotnet/extensions/map-endpoints.cs +35 -0
- package/framework/templates/code/dotnet/extensions/result-extensions.cs +29 -0
- package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -0
- package/framework/templates/code/dotnet/feature/entity.cs.hbs +8 -0
- package/framework/templates/code/dotnet/feature/errors.cs.hbs +8 -0
- package/framework/templates/code/dotnet/feature/handler.cs.hbs +24 -0
- package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -0
- package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -0
- package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -0
- package/framework/templates/code/dotnet/jobs/job.cs +21 -17
- package/framework/templates/code/dotnet/pipelines/logging-decorator.cs +31 -0
- package/framework/templates/code/dotnet/pipelines/validation-decorator.cs +97 -0
- package/framework/templates/code/dotnet/test.cs +192 -106
- package/framework/templates/context/ARCHITECTURE.md +89 -0
- package/framework/templates/context/CONTEXT-FEATURE.md +2 -2
- package/framework/templates/context/CONTEXT.md +180 -181
- package/framework/templates/context/design-system.md +1 -5
- package/framework/templates/docs/onboarding.md +2 -3
- package/framework/templates/docs/proposal.md +171 -182
- package/framework/templates/docs/spec.md +1 -3
- package/framework/templates/docs/ui-components.md +0 -72
- package/framework/templates/examples/design-system-examples.md +4 -4
- package/framework/templates/feature/decisions.md +0 -66
- package/framework/templates/feature/recap.md +1 -2
- package/framework/templates/infrastructure/github/README.md +56 -593
- package/framework/templates/integrations/clerk-config.cs +0 -41
- package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
- package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -2
- package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +83 -126
- package/framework/templates/meta-prompts/validators/pre-commit-validator.md +2 -2
- package/framework/templates/project/validate.js +2 -4
- package/framework/templates/ui/design-system.css +1 -1
- package/framework/workflows/README.md +8 -8
- package/framework/workflows/configs/fast-track.json +51 -0
- package/framework/workflows/configs/full.json +68 -0
- package/framework/workflows/configs/standard.json +7 -3
- package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +1 -1
- package/framework/workflows/docs/enforcement-pipeline.md +18 -19
- package/framework/workflows/docs/full-morph.md +69 -76
- package/framework/workflows/docs/standard.md +49 -44
- package/framework/workflows/docs/ui-refresh.md +1 -1
- package/package.json +3 -3
- package/src/commands/agents/dispatch-agents.js +55 -116
- package/src/commands/context/context-refresh.js +79 -0
- package/src/commands/phase/phase-reset.js +1 -1
- package/src/commands/project/doctor.js +10 -32
- package/src/commands/project/init.js +12 -0
- package/src/commands/project/status.js +6 -12
- package/src/commands/scaffold/scaffold.js +131 -0
- package/src/commands/scope/escalate.js +1 -1
- package/src/commands/state/advance-phase.js +15 -29
- package/src/commands/state/state.js +20 -5
- package/src/commands/tasks/task.js +0 -30
- package/src/commands/validation/validate-feature.js +3 -10
- package/src/core/paths/output-schema.js +12 -13
- package/src/core/state/phase-state-machine.js +211 -217
- package/src/core/state/state-manager.js +9 -9
- package/src/lib/agents/agents-manager.js +2 -2
- package/src/lib/agents/output-collector.js +1 -2
- package/src/lib/detectors/design-system-detector.js +4 -4
- package/src/lib/detectors/index.js +1 -11
- package/src/lib/generators/architecture-scanner.js +640 -0
- package/src/lib/generators/context-generator.js +3 -3
- package/src/lib/generators/design-system-generator.js +508 -587
- package/src/lib/generators/index.js +12 -10
- package/src/lib/generators/metadata-extractor.js +386 -387
- package/src/lib/generators/recap-generator.js +4 -4
- package/src/lib/generators/scaffold-generator.js +317 -0
- package/src/lib/generators/settings-generator.js +0 -1
- package/src/lib/phase-chain/phase-validator.js +64 -42
- package/src/lib/stack/stack-profile.js +2 -2
- package/src/lib/standards/digest-builder.js +72 -285
- package/src/lib/tasks/task-parser.js +11 -5
- package/src/lib/validators/architecture/architecture-validator.js +259 -387
- package/src/lib/validators/content/content-validator.js +287 -287
- package/src/lib/validators/css/css-validator.js +340 -352
- package/src/lib/validators/packages/package-validator.js +347 -360
- package/src/lib/validators/shared/issue-counter.js +14 -18
- package/src/lib/validators/validation-runner.js +3 -19
- package/src/scripts/setup-infra.js +1 -1
- package/src/utils/agents-installer.js +61 -10
- package/src/utils/file-copier.js +1 -0
- package/src/utils/hooks-installer.js +11 -19
- package/src/utils/skills-installer.js +178 -178
- package/framework/agents/architecture/prompt-engineer.md +0 -195
- package/framework/agents/backend/api-designer.md +0 -106
- package/framework/agents/frontend/blazor-builder.md +0 -229
- package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
- package/framework/agents/infrastructure/azure-architect.md +0 -150
- package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
- package/framework/agents/infrastructure/bicep-architect.md +0 -132
- package/framework/agents/infrastructure/container-specialist.md +0 -137
- package/framework/agents/infrastructure/devops-engineer.md +0 -126
- package/framework/agents/integrations/azure-identity.md +0 -148
- package/framework/agents/quality/code-analyzer.md +0 -239
- package/framework/agents/quality/testing-specialist.md +0 -130
- package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
- package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
- package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
- package/framework/index/troubleshooting-index.json +0 -184
- package/framework/rules/testing-standards.md +0 -14
- package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
- package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
- package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
- package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
- package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
- package/framework/standards/ai-agents/blazor-ui.md +0 -364
- package/framework/standards/architecture/ddd/aggregates.md +0 -120
- package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
- package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
- package/framework/standards/architecture/ddd/entities.md +0 -99
- package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
- package/framework/standards/architecture/ddd/value-objects.md +0 -124
- package/framework/standards/backend/api/minimal-api.md +0 -494
- package/framework/standards/backend/api/rest.md +0 -492
- package/framework/standards/backend/authentication/passkeys.md +0 -428
- package/framework/standards/backend/database/ef-core.md +0 -199
- package/framework/standards/backend/database/migrations.md +0 -393
- package/framework/standards/backend/database/repository-patterns.md +0 -528
- package/framework/standards/backend/dotnet/async.md +0 -366
- package/framework/standards/backend/dotnet/core.md +0 -117
- package/framework/standards/backend/dotnet/di.md +0 -439
- package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
- package/framework/standards/context/analytics.md +0 -96
- package/framework/standards/context/bundles.md +0 -110
- package/framework/standards/context/priming.md +0 -78
- package/framework/standards/core/architecture.md +0 -185
- package/framework/standards/core/coding.md +0 -214
- package/framework/standards/core/git-branching-strategy.md +0 -403
- package/framework/standards/core/git.md +0 -185
- package/framework/standards/core/testing.md +0 -295
- package/framework/standards/data/nosql/blob-storage.md +0 -102
- package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
- package/framework/standards/frontend/blazor/design-checklist.md +0 -222
- package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
- package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
- package/framework/standards/frontend/blazor/html-conversion.md +0 -184
- package/framework/standards/frontend/blazor/lifecycle.md +0 -195
- package/framework/standards/frontend/blazor/pitfalls.md +0 -198
- package/framework/standards/frontend/blazor/state.md +0 -191
- package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -266
- package/framework/standards/frontend/design-system/design-trends.md +0 -171
- package/framework/standards/infrastructure/azure/azure.md +0 -624
- package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
- package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
- package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
- package/framework/standards/infrastructure/azure/services/functions.md +0 -486
- package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
- package/framework/standards/infrastructure/azure/services/storage.md +0 -407
- package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
- package/framework/standards/integration/api/graphql.md +0 -91
- package/framework/standards/integration/api/grpc.md +0 -114
- package/framework/standards/integration/api/rest-design.md +0 -95
- package/framework/standards/integration/event-driven/cqrs.md +0 -101
- package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
- package/framework/standards/integration/event-driven/service-bus.md +0 -95
- package/framework/standards/observability/logging.md +0 -131
- package/framework/standards/observability/metrics.md +0 -121
- package/framework/standards/observability/monitoring.md +0 -114
- package/framework/standards/observability/tracing.md +0 -132
- package/framework/standards/workflows/parallel-execution.md +0 -112
- package/framework/standards/workflows/thread-management.md +0 -113
- package/framework/templates/code/dotnet/backend/service.cs +0 -139
- package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
- package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
- package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
- package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
- package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
- package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
- package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
- package/framework/templates/code/dotnet/frontend/component.razor +0 -239
- package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
- package/framework/templates/infrastructure/azure/README.md +0 -286
- package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
- package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
- package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
- package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
- package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
- package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
- package/framework/templates/infrastructure/azure/deploy.sh +0 -208
- package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
- package/framework/templates/infrastructure/azure/main.bicep +0 -189
- package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
- package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
- package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
- package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
- package/framework/templates/infrastructure/azure/storage.bicep +0 -106
- package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
- package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
- package/framework/templates/integrations/azure-identity-config.cs +0 -288
- package/framework/templates/project-structure/dotnet-ddd.md +0 -70
- package/framework/templates/saas/subscription.cs +0 -347
- package/framework/templates/saas/tenant.cs +0 -338
- package/framework/templates/ui/FluentDesignTheme.cs +0 -149
- package/framework/templates/ui/MudTheme.cs +0 -281
- package/framework/workflows/configs/nodejs-cli.json +0 -40
- package/src/commands/standards/context-budget.js +0 -89
- package/src/lib/standards/index.js +0 -7
- package/src/lib/standards/standards-context-injector.js +0 -302
- package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
- package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
- package/src/lib/validators/blazor/blazor-validator.js +0 -369
- package/src/lib/validators/blazor/index.js +0 -9
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: morph-phase-clarify
|
|
3
|
-
description: MORPH-SPEC Phase 3 (Clarify). Iterative clarification loop driven by a satisfaction score (0-100). Generates targeted questions per round, always presents "End Clarify" as exit option, and stops when score >= 85 or user exits. Use after design approval to eliminate spec ambiguities before task breakdown begins.
|
|
4
|
-
argument-hint: "[feature-name]"
|
|
5
|
-
user-invocable: false
|
|
6
|
-
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
|
|
7
|
-
cliVersion: "4.12.0"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# MORPH Clarify — Phase 3
|
|
11
|
-
|
|
12
|
-
> INTERNAL: Workflow skill used by /morph-proposal during automated phase orchestration. Not a user command.
|
|
13
|
-
|
|
14
|
-
Eliminate spec ambiguities through an iterative question loop until the spec has sufficient quality to generate tasks.
|
|
15
|
-
|
|
16
|
-
## Prerequisites
|
|
17
|
-
|
|
18
|
-
- [ ] Phase 2 (Design) completed
|
|
19
|
-
- [ ] `spec.md` approved by user
|
|
20
|
-
- [ ] `contracts.cs` (or `contracts.ts`) defined
|
|
21
|
-
|
|
22
|
-
## Recommended Tools
|
|
23
|
-
|
|
24
|
-
> **Ref:** `framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md` for complete guide.
|
|
25
|
-
> **Example:** `references/clarifications-example.md` — filled-in clarifications.md showing expected Q&A format.
|
|
26
|
-
|
|
27
|
-
| Action | Tool | Alternative |
|
|
28
|
-
|--------|------|-------------|
|
|
29
|
-
| Read spec + contracts | **Read** all design outputs | — |
|
|
30
|
-
| Verify technical feasibility | **Context7 MCP** `query_docs()` | **WebSearch** |
|
|
31
|
-
| Check external issues/limitations | **GitHub MCP** `search_issues()` | — |
|
|
32
|
-
| Ask clarifying questions | **AskUserQuestion** (never plain text) | — |
|
|
33
|
-
| Update spec with clarifications | **Edit** spec.md | — |
|
|
34
|
-
| Create clarifications.md | **Write** | — |
|
|
35
|
-
| Update state | **Bash** `morph-spec state mark-output $ARGUMENTS clarifications` | — |
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## Satisfaction Scoring System
|
|
40
|
-
|
|
41
|
-
Before each round, calculate the **Satisfaction Score (0-100)** by evaluating the current spec:
|
|
42
|
-
|
|
43
|
-
| Dimension | Pts | Maximum Score Criteria |
|
|
44
|
-
|-----------|-----|----------------------|
|
|
45
|
-
| **Functional completeness** | 25 | All requirements have measurable acceptance criteria (no vague "should", "may", "generally") |
|
|
46
|
-
| **Failure coverage** | 20 | All error paths have defined behavior (invalid input, not found, timeout, unauthorized) |
|
|
47
|
-
| **Edge cases** | 20 | Boundaries, concurrent states, empty/extreme inputs documented |
|
|
48
|
-
| **Definitional clarity** | 20 | No critical term undefined, no "TBD", no "to be defined" |
|
|
49
|
-
| **Integration contracts** | 15 | External dependencies have payload format, errors, and retry policy defined |
|
|
50
|
-
|
|
51
|
-
**Thresholds:**
|
|
52
|
-
|
|
53
|
-
| Score | Action |
|
|
54
|
-
|-------|--------|
|
|
55
|
-
| >= 85 | Satisfied. Present results and offer "End Clarify" as the primary option |
|
|
56
|
-
| 70-84 | Continue. Focus questions on the lowest-scoring dimensions |
|
|
57
|
-
| < 70 | Continue. Broad questions covering the largest gaps |
|
|
58
|
-
|
|
59
|
-
> The score rises as answers are incorporated. There's no fixed maximum rounds — the loop ends when score >= 85 **or** the user chooses to end.
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## Workflow
|
|
64
|
-
|
|
65
|
-
### Initialization
|
|
66
|
-
|
|
67
|
-
**Step 0 (BEFORE any writing) — Ensure clarify phase:**
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
morph-spec state get $ARGUMENTS
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
Check the `"phase"` field in the output:
|
|
74
|
-
|
|
75
|
-
**If `"phase": "clarify"`** → correct phase, proceed.
|
|
76
|
-
|
|
77
|
-
**If `"phase": "design"`** → run in sequence:
|
|
78
|
-
1. `morph-spec approve $ARGUMENTS design`
|
|
79
|
-
2. `morph-spec phase advance $ARGUMENTS` (→ clarify)
|
|
80
|
-
|
|
81
|
-
**Any other value** → STOP — inconsistent state, report to user.
|
|
82
|
-
|
|
83
|
-
> **Rule:** Never write `clarifications.md` or update `spec.md` until the phase is `clarify`.
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
Read the base files in PARALLEL:
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
Read: .morph/features/$ARGUMENTS/1-design/spec.md
|
|
91
|
-
+ Read: .morph/features/$ARGUMENTS/1-design/contracts.cs (or contracts.ts for TypeScript)
|
|
92
|
-
+ Read: .morph/features/$ARGUMENTS/1-design/schema-analysis.md (if exists)
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Calculate the initial score. Track accumulated answers from prior rounds to avoid repeating already-answered questions.
|
|
96
|
-
|
|
97
|
-
## MANDATORY: Session Tasks
|
|
98
|
-
|
|
99
|
-
> **BEFORE starting clarification work**, analyze the spec quality and create session tasks.
|
|
100
|
-
>
|
|
101
|
-
> **Rules:** Minimum 2 tasks, typically 2-4. Mark `in_progress` before starting, `completed` after.
|
|
102
|
-
> For the clarification loop, update the task `subject` with round and score progress.
|
|
103
|
-
>
|
|
104
|
-
> **Typical tasks:** initial score calculation, clarification rounds (iterative), output generation
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
### Main Loop
|
|
109
|
-
|
|
110
|
-
**Repeat until: score >= 85 OR user chooses to end.**
|
|
111
|
-
|
|
112
|
-
#### A. Calculate Current Round Score
|
|
113
|
-
|
|
114
|
-
Score each dimension based on the spec + accumulated answers. Note which dimensions are weakest — they guide this round's questions.
|
|
115
|
-
|
|
116
|
-
#### B. Identify New Questions
|
|
117
|
-
|
|
118
|
-
Analyze only what **hasn't been answered yet**. Categorize by dimension:
|
|
119
|
-
|
|
120
|
-
| Category | Example Questions |
|
|
121
|
-
|----------|-------------------|
|
|
122
|
-
| **Validation** | Field limits, accepted formats, business rules |
|
|
123
|
-
| **Behavior** | What happens when X fails? Empty state? Loading state? |
|
|
124
|
-
| **Priority** | Must-have vs nice-to-have? MVP vs v2? |
|
|
125
|
-
| **Integration** | Webhook vs polling? Retry policy? Timeout? |
|
|
126
|
-
| **Performance** | Expected volume? Response SLA? |
|
|
127
|
-
| **UX** | Error message shown to user? Visual feedback? |
|
|
128
|
-
|
|
129
|
-
#### C. Present Questions via `AskUserQuestion`
|
|
130
|
-
|
|
131
|
-
**Why this matters:** AskUserQuestion gives structured options the user can click — far better UX than walls of text. It also captures answers programmatically for the clarifications.md output.
|
|
132
|
-
|
|
133
|
-
**Rules:**
|
|
134
|
-
|
|
135
|
-
1. Use `AskUserQuestion` — **NEVER list questions as plain text**
|
|
136
|
-
2. Maximum **4 questions per call** (tool limit)
|
|
137
|
-
3. If there are more than 3 new questions, make sequential calls — the **exit option always appears in the last call of each round**
|
|
138
|
-
4. **Always include the following question as the last in the final batch of each round:**
|
|
139
|
-
|
|
140
|
-
```json
|
|
141
|
-
{
|
|
142
|
-
"header": "End Clarify?",
|
|
143
|
-
"question": "End the Clarify phase now or continue refining the spec?",
|
|
144
|
-
"multiSelect": false,
|
|
145
|
-
"options": [
|
|
146
|
-
{
|
|
147
|
-
"label": "Continue refining",
|
|
148
|
-
"description": "There are still open questions identified in this round"
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
"label": "End Clarify",
|
|
152
|
-
"description": "Proceed to Plan phase with the spec in its current state"
|
|
153
|
-
}
|
|
154
|
-
]
|
|
155
|
-
}
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
> If score >= 85, adjust the first option label to: `"Continue (optional)"` with description: `"Score ${score}/100 — spec is satisfactory, but you can refine further"`
|
|
159
|
-
|
|
160
|
-
#### D. Wait and Incorporate Answers
|
|
161
|
-
|
|
162
|
-
**Do not proceed before receiving all responses.**
|
|
163
|
-
|
|
164
|
-
After receiving answers:
|
|
165
|
-
1. Check if the answer is consistent with `contracts.cs` and `schema-analysis.md`
|
|
166
|
-
2. If any answer is ambiguous or contradictory → ask for clarification before updating
|
|
167
|
-
3. Update `spec.md` with:
|
|
168
|
-
- Section `## Clarifications (Phase 3)` with structured Q&A
|
|
169
|
-
- Updates to affected functional sections
|
|
170
|
-
- New edge cases in `## Edge Cases`
|
|
171
|
-
|
|
172
|
-
#### E. Check Exit Condition
|
|
173
|
-
|
|
174
|
-
- User chose **"End Clarify"** → exit loop
|
|
175
|
-
- Score >= 85 AND no new questions identified → exit loop
|
|
176
|
-
- Otherwise → return to A
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
### Post-Loop: Generate Outputs
|
|
181
|
-
|
|
182
|
-
**Step 1: Create `clarifications.md`**
|
|
183
|
-
|
|
184
|
-
Write to `.morph/features/$ARGUMENTS/1-design/clarifications.md`:
|
|
185
|
-
|
|
186
|
-
```markdown
|
|
187
|
-
# Clarifications — {Feature Name}
|
|
188
|
-
|
|
189
|
-
**Phase:** Clarify (Phase 3)
|
|
190
|
-
**Rounds completed:** {N}
|
|
191
|
-
**Final score:** {score}/100
|
|
192
|
-
**Status:** Resolved — incorporated into spec.md
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## Questions & Answers
|
|
197
|
-
|
|
198
|
-
### Q{N}: {Title}
|
|
199
|
-
**Question:** {question}
|
|
200
|
-
**Answer:** {user's answer}
|
|
201
|
-
**Spec Updates:** {which sections were updated}
|
|
202
|
-
**Priority:** High/Medium/Low
|
|
203
|
-
**Resolved:** Yes
|
|
204
|
-
|
|
205
|
-
---
|
|
206
|
-
|
|
207
|
-
## Edge Cases
|
|
208
|
-
|
|
209
|
-
### EC{N}: {Name}
|
|
210
|
-
**Scenario:** {when it happens}
|
|
211
|
-
**Expected Behavior:** {how the system reacts}
|
|
212
|
-
**Implementation Notes:** {tips}
|
|
213
|
-
|
|
214
|
-
---
|
|
215
|
-
|
|
216
|
-
## Summary
|
|
217
|
-
|
|
218
|
-
| | Count |
|
|
219
|
-
|---|---|
|
|
220
|
-
| Questions Answered | {N} |
|
|
221
|
-
| Edge Cases Documented | {N} |
|
|
222
|
-
| Spec Sections Updated | {N} |
|
|
223
|
-
| Final Score | {score}/100 |
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
**Step 2: Update State**
|
|
227
|
-
|
|
228
|
-
```bash
|
|
229
|
-
morph-spec state mark-output $ARGUMENTS clarifications
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## Phase Outputs
|
|
235
|
-
|
|
236
|
-
<!-- morph-outputs:clarify -->
|
|
237
|
-
| Output | Path |
|
|
238
|
-
|--------|------|
|
|
239
|
-
| `clarifications` | `.morph/features/{feature}/1-design/clarifications.md` |
|
|
240
|
-
<!-- /morph-outputs -->
|
|
241
|
-
|
|
242
|
-
## Advancement Criteria
|
|
243
|
-
|
|
244
|
-
- [x] Satisfaction score >= 85 OR user opted to end
|
|
245
|
-
- [x] All answers are consistent with `contracts.cs`
|
|
246
|
-
- [x] `spec.md` updated with clarifications and edge cases
|
|
247
|
-
- [x] `clarifications.md` created with Q&A and final score
|
|
248
|
-
- [x] State updated (`mark-output clarifications`)
|
|
249
|
-
|
|
250
|
-
---
|
|
251
|
-
|
|
252
|
-
```bash
|
|
253
|
-
morph-spec phase advance $ARGUMENTS
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
Continue automatically to Phase 4 (Plan) after clarifications.md is generated.
|
package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
# Clarifications - Photo Processing Pipeline
|
|
2
|
-
|
|
3
|
-
> Example of a well-structured clarifications.md. Filled-in reference — not a template.
|
|
4
|
-
> Each Q&A is concise: question raised during design review → answer → spec update.
|
|
5
|
-
|
|
6
|
-
**Feature**: photo-processing
|
|
7
|
-
**Phase**: CLARIFY (Phase 3)
|
|
8
|
-
**Status**: Resolved — all items incorporated into spec.md
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Questions & Answers
|
|
13
|
-
|
|
14
|
-
### Q1: File size limit — 10MB for all users or tiered?
|
|
15
|
-
|
|
16
|
-
**Question:** The spec says max 10MB but the proposal mentioned "higher for pro users." Should we implement tiered limits now?
|
|
17
|
-
|
|
18
|
-
**Answer:** Free tier: 10MB. Pro tier: 50MB. Enforce via `[Authorize]` + claims check in the upload endpoint. YAGNI — don't build a generic tier system, just check the plan claim directly.
|
|
19
|
-
|
|
20
|
-
**Spec Updates:**
|
|
21
|
-
- Updated `spec.md` FR1 to specify tiered limits
|
|
22
|
-
- Added `CanUploadLargeFile` policy to Security section
|
|
23
|
-
- Updated `UploadPhotoCommand` to accept `userPlan` claim
|
|
24
|
-
|
|
25
|
-
**Priority:** High — affects contracts
|
|
26
|
-
**Resolved:** ✅ Yes
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
### Q2: Processed photo retention — indefinite or expiring?
|
|
31
|
-
|
|
32
|
-
**Question:** Should processed photos in Blob Storage be kept forever, or do they expire?
|
|
33
|
-
|
|
34
|
-
**Answer:** Auto-delete after 30 days via Blob lifecycle policy (no code needed, configured in Azure). Free tier: 7 days. Pro tier: 30 days. This is infrastructure-only — `ProcessingJob.ProcessedPhotoUrl` stays in DB but becomes a dead link after expiry.
|
|
35
|
-
|
|
36
|
-
**Spec Updates:**
|
|
37
|
-
- Added ADR-003 (Blob lifecycle policy over code-based cleanup)
|
|
38
|
-
- Added note to `AzureBlobStorageService` about lifecycle dependency
|
|
39
|
-
|
|
40
|
-
**Priority:** Low — no code change
|
|
41
|
-
**Resolved:** ✅ Yes
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
### Q3: AI API — async webhook or polling?
|
|
46
|
-
|
|
47
|
-
**Question:** spec.md assumed Hangfire polls job completion, but the AI vendor docs mention a webhook callback option.
|
|
48
|
-
|
|
49
|
-
**Answer:** Use fire-and-forget HTTP call + Hangfire continuation (not webhook). The AI API's webhook requires a public URL we don't have in dev. Fire-and-forget is simpler and testable. If the vendor SLA changes, we can swap to webhook via `IPhotoProcessingJob` interface — no consumer changes needed.
|
|
50
|
-
|
|
51
|
-
**Spec Updates:**
|
|
52
|
-
- Clarified Processing Flow in spec.md to show fire-and-forget + await pattern
|
|
53
|
-
- Added to Risks: "AI API webhook migration path if needed"
|
|
54
|
-
|
|
55
|
-
**Priority:** High — affects job implementation
|
|
56
|
-
**Resolved:** ✅ Yes
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## Edge Cases
|
|
61
|
-
|
|
62
|
-
### EC1: Upload during Hangfire downtime
|
|
63
|
-
|
|
64
|
-
**Scenario:** User uploads successfully but Hangfire server is stopped — job never executes.
|
|
65
|
-
|
|
66
|
-
**Expected Behavior:** Job stays in `Pending` indefinitely. On next Hangfire server start, job auto-resumes (Hangfire persistent storage).
|
|
67
|
-
|
|
68
|
-
**Solution:** No code change. Add monitoring alert if job stays Pending > 10 minutes.
|
|
69
|
-
|
|
70
|
-
**Acceptance Criteria:**
|
|
71
|
-
- [ ] `ProcessingJob` with status `Pending` survives Hangfire restart
|
|
72
|
-
- [ ] Hangfire picks up orphaned jobs on startup (built-in behavior, covered by docs)
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
### EC2: Concurrent uploads of same file
|
|
77
|
-
|
|
78
|
-
**Scenario:** User double-clicks Upload button, sending two identical requests simultaneously.
|
|
79
|
-
|
|
80
|
-
**Expected Behavior:** Two separate `ProcessingJob` records created. Both process independently. No deduplication (not required at MVP scale).
|
|
81
|
-
|
|
82
|
-
**Solution:** No code change. Each request gets a fresh GUID. If deduplication becomes needed, add idempotency key header in v2.
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## Business Rules Clarified
|
|
87
|
-
|
|
88
|
-
### BR1: Only the uploading user can download their processed photo
|
|
89
|
-
|
|
90
|
-
**Rule:** `GET /api/download/{jobId}` must check `job.UserId == currentUserId`. Return 403 if mismatch.
|
|
91
|
-
|
|
92
|
-
**Rationale:** Users might guess sequential GUIDs (they can't since we use random GUIDs, but defense in depth).
|
|
93
|
-
|
|
94
|
-
**Implementation:** Add `[Authorize]` + ownership check to download endpoint. Already in Security section of spec.md.
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## Summary
|
|
99
|
-
|
|
100
|
-
| | Count |
|
|
101
|
-
|---|---|
|
|
102
|
-
| Questions Answered | 3 / 3 |
|
|
103
|
-
| Edge Cases Documented | 2 |
|
|
104
|
-
| Business Rules Clarified | 1 |
|
|
105
|
-
| Spec Updates Made | 6 |
|
|
106
|
-
|
|
107
|
-
## Next Steps
|
|
108
|
-
|
|
109
|
-
1. [x] All questions resolved
|
|
110
|
-
2. [x] `spec.md` updated with all clarifications
|
|
111
|
-
3. [x] `contracts.cs` updated (`UploadPhotoCommand` + plan claim)
|
|
112
|
-
4. [x] Stakeholder approval received
|
|
113
|
-
5. [ ] Advance to Phase 4 (Tasks)
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
*MORPH-SPEC by Polymorphism Tech*
|
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: morph-phase-setup
|
|
3
|
-
description: MORPH-SPEC Phase 1 (Setup). Reads project context, detects tech stack, activates relevant agents by reading agents.json, and confirms the feature environment. Use at the start of every MORPH-SPEC feature workflow after proposal approval to load standards and initialize the context.
|
|
4
|
-
argument-hint: "[feature-name]"
|
|
5
|
-
user-invocable: false
|
|
6
|
-
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
|
|
7
|
-
cliVersion: "4.12.0"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# MORPH Setup — Phase 1
|
|
11
|
-
|
|
12
|
-
> INTERNAL: Workflow skill used by /morph-proposal during automated phase orchestration. Not a user command.
|
|
13
|
-
|
|
14
|
-
Initialize the context and prepare the environment for an approved feature.
|
|
15
|
-
|
|
16
|
-
## Prerequisites
|
|
17
|
-
|
|
18
|
-
- [ ] Feature has `proposal.md` created (Phase 0 complete)
|
|
19
|
-
- [ ] Proposal was approved by the user
|
|
20
|
-
- [ ] Agents were detected and registered in state
|
|
21
|
-
|
|
22
|
-
## Recommended Tools
|
|
23
|
-
|
|
24
|
-
> **Ref:** `framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md` for full guide.
|
|
25
|
-
> **Ref:** `framework/standards/integration/mcp/mcp-tools.md` for MCP reference.
|
|
26
|
-
|
|
27
|
-
| Action | Tool | Alternative |
|
|
28
|
-
|--------|------|-------------|
|
|
29
|
-
| Verify state | **Bash** `morph-spec state get` | — |
|
|
30
|
-
| Detect agents + standards | **Bash** `morph-spec detect-agents $ARGUMENTS --json` → parse → **Bash** `morph-spec state add-agent` | **Read** agents.json manually |
|
|
31
|
-
| Read project context | **Read** `.morph/context/README.md` | — |
|
|
32
|
-
| Read config | **Read** `.morph/config/config.json` | — |
|
|
33
|
-
| Detect VSA architecture | **Read** `.morph/config/config.json` → check `config.architecture.style` | — |
|
|
34
|
-
| Scan project structure | **Glob** `src/**/*.{ts,tsx,cs}` | — |
|
|
35
|
-
| Repository metadata | **GitHub MCP** `get_repo()` | **Bash** `gh repo view --json` |
|
|
36
|
-
| Update state | **Bash** `morph-spec state set` | — |
|
|
37
|
-
|
|
38
|
-
**MCPs for this phase:** GitHub (optional — repo metadata).
|
|
39
|
-
|
|
40
|
-
**Anti-patterns:**
|
|
41
|
-
- Do not read agents.json manually for keyword matching — use `morph-spec detect-agents` CLI
|
|
42
|
-
- Do not use a Task agent for agent detection (CLI is faster and consistent)
|
|
43
|
-
- Do not use WebSearch for local project info (use Read/Glob)
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## Workflow
|
|
48
|
-
|
|
49
|
-
### ENTRY CHECKPOINT: Verify Prerequisites
|
|
50
|
-
|
|
51
|
-
Before proceeding with setup:
|
|
52
|
-
|
|
53
|
-
- [ ] Does `proposal.md` exist in `.morph/features/$ARGUMENTS/0-proposal/`?
|
|
54
|
-
- [ ] Was the proposal presented and approved by the user?
|
|
55
|
-
- [ ] Is the feature registered in state?
|
|
56
|
-
|
|
57
|
-
If any checkbox is NOT checked → go back to Phase 0 (Proposal).
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
## MANDATORY: Session Tasks
|
|
62
|
-
|
|
63
|
-
> **BEFORE starting any setup work**, analyze the steps below and create session tasks.
|
|
64
|
-
>
|
|
65
|
-
> **Rules:** Minimum 2 tasks, typically 3-5. Mark `in_progress` before starting, `completed` after.
|
|
66
|
-
>
|
|
67
|
-
> **Typical tasks:** agent detection, MCP validation, stack confirmation, state configuration
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
### Step 1: Load Project Context
|
|
72
|
-
|
|
73
|
-
Read these files first — they inform all subsequent decisions:
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
morph-spec state get $ARGUMENTS
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
If the feature doesn't exist in state, go back to Phase 0.
|
|
80
|
-
|
|
81
|
-
Then read:
|
|
82
|
-
- `.morph/context/README.md` — project overview, tech stack, architecture
|
|
83
|
-
- `.morph/config/config.json` — project configuration
|
|
84
|
-
|
|
85
|
-
### Step 2: Detect Agents and Load Standards
|
|
86
|
-
|
|
87
|
-
#### Step 2.0: Detect Architecture Style and Activate Architect
|
|
88
|
-
|
|
89
|
-
Read `.morph/config/config.json` and check `config.architecture.style`:
|
|
90
|
-
|
|
91
|
-
| Value | Action |
|
|
92
|
-
|-------|--------|
|
|
93
|
-
| `"vertical-slice"` | `morph-spec state add-agent $ARGUMENTS vsa-architect` |
|
|
94
|
-
| absent / any other value | `morph-spec state add-agent $ARGUMENTS domain-architect` |
|
|
95
|
-
|
|
96
|
-
Proceed with normal keyword detection for all other agents. The architect was already added above — skip it during keyword matching to avoid duplication.
|
|
97
|
-
|
|
98
|
-
#### Step 2.1: Keyword Detection
|
|
99
|
-
|
|
100
|
-
Use the `detect-agents` CLI to match agent keywords against the proposal (excludes architects already handled in Step 2.0):
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
morph-spec detect-agents $ARGUMENTS --exclude domain-architect,vsa-architect --json
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
This reads the proposal from `.morph/features/$ARGUMENTS/0-proposal/proposal.md` and agents.json, returning JSON with `detected[]` and `skipped[]` arrays. Agents with `active_phases: ['*']` are always included.
|
|
107
|
-
|
|
108
|
-
Parse the JSON output and add each detected agent to state:
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
morph-spec state add-agent $ARGUMENTS {agent-id}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
Run `add-agent` once per detected agent ID from the `detected[]` array.
|
|
115
|
-
|
|
116
|
-
**To load standards for detected agents:**
|
|
117
|
-
- For each active agent, read the standards referenced by the `standards[]` field in `agents.json`
|
|
118
|
-
- Standard files are located at `.morph/framework/standards/{path}`
|
|
119
|
-
|
|
120
|
-
**Standards resolution order:**
|
|
121
|
-
1. `.morph/context/*.md` — project overrides (highest priority)
|
|
122
|
-
2. `.morph/framework/standards/` — standards installed by morph-spec
|
|
123
|
-
3. `framework/standards/` — npm package standards (fallback)
|
|
124
|
-
|
|
125
|
-
### Step 2.5: Validate MCP Connections
|
|
126
|
-
|
|
127
|
-
Check that configured MCPs are working before proceeding.
|
|
128
|
-
|
|
129
|
-
**1. Collect recommended MCPs:**
|
|
130
|
-
- Read `framework/phases.json` → for each phase in the feature's workflow, collect `recommendedMCPs[]`
|
|
131
|
-
- Read `framework/skills/level-0-meta/mcp-registry.json` → get `healthCheck` for each MCP
|
|
132
|
-
|
|
133
|
-
**2. Identify configured MCPs:**
|
|
134
|
-
- Read `.claude/settings.local.json` → identify which MCPs are in `mcpServers`
|
|
135
|
-
|
|
136
|
-
**3. For each MCP that is CONFIGURED AND RECOMMENDED:**
|
|
137
|
-
1. Search your available tools for one containing `healthCheck.toolPattern` in the name
|
|
138
|
-
2. If the tool exists → execute the `healthCheck.testCall` with `healthCheck.testParams`
|
|
139
|
-
3. Evaluate the result:
|
|
140
|
-
|
|
141
|
-
| Result | Action |
|
|
142
|
-
|--------|--------|
|
|
143
|
-
| **Success** | `✓ {MCP} — connection verified` |
|
|
144
|
-
| **Tool not found** | `○ {MCP} — needs restart to activate` |
|
|
145
|
-
| **Error** | → Use `AskUserQuestion` with 3 options (below) |
|
|
146
|
-
|
|
147
|
-
**On error — ask the user:**
|
|
148
|
-
|
|
149
|
-
Use `AskUserQuestion` with header `"{MCP}"` and options:
|
|
150
|
-
- **Continue without {MCP}** — show the `fallback` field from the registry and proceed
|
|
151
|
-
- **Reconfigure credentials** — collect new credentials and update `.claude/settings.local.json`
|
|
152
|
-
- **Stop setup** — abort and report what needs to be fixed
|
|
153
|
-
|
|
154
|
-
**4. For MCPs RECOMMENDED but NOT CONFIGURED:**
|
|
155
|
-
- Print `△ {MCP} — not configured (fallback: {registry.fallback})`
|
|
156
|
-
- Suggestion: `Tip: configure with /morph-init refresh or morph-spec mcp setup`
|
|
157
|
-
|
|
158
|
-
**Summary:** Show a status table for each MCP before proceeding:
|
|
159
|
-
```
|
|
160
|
-
MCP Readiness:
|
|
161
|
-
✓ context7 — connection verified
|
|
162
|
-
○ playwright — needs restart
|
|
163
|
-
△ supabase — not configured (fallback: Grep + Read for schema)
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
### Step 2.9: Check for Missing Agents
|
|
169
|
-
|
|
170
|
-
Run a quick check to verify all expected agents are installed for this project's stack:
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
morph-spec doctor 2>&1 | grep -A 1 "agents completeness"
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
If the output shows **missing agents**, inform the user:
|
|
177
|
-
|
|
178
|
-
> ⚠ Some agents for your stack are not installed. Run `morph-spec setup-infra` to install them.
|
|
179
|
-
|
|
180
|
-
Use `AskUserQuestion` with header `"Agents"` and options:
|
|
181
|
-
- **Install now** — run `morph-spec setup-infra` to reinstall with current stack tags
|
|
182
|
-
- **Continue without** — proceed with available agents (may lack specialized support)
|
|
183
|
-
|
|
184
|
-
If "Install now" is selected, run the command and continue.
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
### Step 3: Confirm Stack
|
|
189
|
-
|
|
190
|
-
Based on the proposal and context, confirm:
|
|
191
|
-
- Tech stack (Blazor Server, Next.js, .NET API, Node.js CLI, etc.)
|
|
192
|
-
- Applicable architectural patterns
|
|
193
|
-
- Existing reusable components
|
|
194
|
-
|
|
195
|
-
### Step 4: List Active Agents and Dispatch Preview
|
|
196
|
-
|
|
197
|
-
Show the agents detected from the proposal:
|
|
198
|
-
|
|
199
|
-
```bash
|
|
200
|
-
morph-spec state get $ARGUMENTS
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
Parse the JSON and list `activeAgents` with their emojis/icons and responsibilities (look up each agent in `.morph/framework/agents.json` for the `icon` field).
|
|
204
|
-
|
|
205
|
-
**If there are 2+ specialist agents active**, show the dispatch plan for the next phase:
|
|
206
|
-
|
|
207
|
-
```bash
|
|
208
|
-
morph-spec dispatch-agents $ARGUMENTS design
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
This shows which agents will be dispatched in parallel during the design phase and which tasks they'll execute.
|
|
212
|
-
|
|
213
|
-
> **Important mapping:** `agents[].id` from the dispatch config = `subagent_type` in the `Agent` tool.
|
|
214
|
-
> Example: `id: "nextjs-expert"` → `Agent(subagent_type=nextjs-expert, prompt=agent.taskPrompt)`.
|
|
215
|
-
> Each `id` corresponds to the `name:` field in the frontmatter of the file in `.claude/agents/`.
|
|
216
|
-
|
|
217
|
-
### Step 5: Update State and Determine Next Phase
|
|
218
|
-
|
|
219
|
-
Update the feature state:
|
|
220
|
-
|
|
221
|
-
```bash
|
|
222
|
-
morph-spec state set $ARGUMENTS status in_progress
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
**Determine the next phase** based on active agents:
|
|
226
|
-
|
|
227
|
-
| Condition | Next Phase |
|
|
228
|
-
|-----------|------------|
|
|
229
|
-
| `ui-designer` is in activeAgents | **uiux** (UI/UX phase) |
|
|
230
|
-
| `ui-designer` is NOT in activeAgents | **design** (skip uiux) |
|
|
231
|
-
|
|
232
|
-
Announce the next phase clearly to the user.
|
|
233
|
-
|
|
234
|
-
## Outputs
|
|
235
|
-
|
|
236
|
-
Present to the user:
|
|
237
|
-
|
|
238
|
-
1. **Context loaded**:
|
|
239
|
-
- Project name
|
|
240
|
-
- Confirmed stack
|
|
241
|
-
- Applicable standards
|
|
242
|
-
|
|
243
|
-
2. **Active agents**:
|
|
244
|
-
- Agent list with emojis/icons and tier
|
|
245
|
-
- Responsibilities of each agent
|
|
246
|
-
|
|
247
|
-
3. **Next phase**:
|
|
248
|
-
- Which phase comes next (uiux or design)
|
|
249
|
-
- Why (ui-designer presence or absence)
|
|
250
|
-
|
|
251
|
-
## Advancement Criteria
|
|
252
|
-
|
|
253
|
-
- [x] Project context loaded
|
|
254
|
-
- [x] Standards identified (framework + project)
|
|
255
|
-
- [x] Stack confirmed
|
|
256
|
-
- [x] Agents listed with icons
|
|
257
|
-
- [x] State updated to in_progress
|
|
258
|
-
- [x] Next phase determined
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## Worktree Note
|
|
263
|
-
|
|
264
|
-
Worktree isolation is handled automatically by `/morph-proposal` Step 0 and `/morph-apply` Step 0.
|
|
265
|
-
If a worktree is active, all file operations MUST use the worktree path (injected in session context as `WORKTREE_PATH`).
|
|
266
|
-
|
|
267
|
-
---
|
|
268
|
-
|
|
269
|
-
Continue automatically to the next phase (UI/UX if ui-designer detected, otherwise Design).
|