@polymorphism-tech/morph-spec 4.3.7 → 4.6.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/.morph/.morphversion +3 -3
- package/.morph/analytics/threads-log.jsonl +6 -9
- package/.morph/config/config.json +2 -3
- package/.morph/framework/standards/STANDARDS.json +812 -0
- package/.morph/{standards → framework/standards}/ai-agents/team-orchestration.md +3 -3
- package/.morph/{standards → framework/standards}/frontend/nextjs/nextjs-patterns.md +17 -0
- package/.morph/framework/standards/integration/mcp/mcp-tools.md +384 -0
- package/.morph/{templates → framework/templates}/README.md +17 -17
- package/.morph/{templates → framework/templates}/REGISTRY.json +48 -233
- package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
- package/.morph/{templates → framework/templates}/context/CONTEXT-FEATURE.md +1 -1
- package/.morph/{templates → framework/templates}/context/CONTEXT.md +3 -3
- package/.morph/framework/templates/docs/clarifications.md +253 -0
- package/.morph/framework/templates/docs/onboarding.md +123 -0
- package/.morph/framework/templates/docs/schema-analysis.md +119 -0
- package/.morph/{templates → framework/templates}/docs/spec.md +149 -149
- package/.morph/framework/templates/docs/ui-components.md +124 -0
- package/.morph/framework/templates/docs/ui-design-system.md +76 -0
- package/.morph/framework/templates/docs/ui-flows.md +167 -0
- package/.morph/framework/templates/docs/ui-mockups.md +98 -0
- package/.morph/framework/templates/docs/user-stories.md +34 -0
- package/.morph/{templates → framework/templates}/examples/spec-examples.md +1 -1
- package/.morph/{templates → framework/templates}/infrastructure/github/README.md +11 -11
- package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
- package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-worker.md +2 -2
- package/.morph/{templates → framework/templates}/meta-prompts/validators/pre-commit-validator.md +1 -1
- package/.morph/logs/tool-failures.log +7 -0
- package/.morph/memory/pre-compact-2026-02-23T15-43-03-521Z.json +16 -0
- package/.morph/state.json +1 -1
- package/CLAUDE.md +77 -155
- package/README.md +20 -18
- package/bin/detect-agents.js +1 -1
- package/bin/morph-spec.js +116 -266
- package/bin/task-manager.cjs +2 -2
- package/bin/validate.js +1 -1
- package/claude-plugin.json +14 -0
- package/docs/claude-alignment-report.md +137 -0
- package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +512 -0
- package/docs/plans/2026-02-22-claude-settings.md +515 -0
- package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +728 -0
- package/docs/plans/2026-02-22-morph-spec-next.md +478 -0
- package/docs/plans/2026-02-22-native-alignment-design.md +199 -0
- package/docs/plans/2026-02-22-native-alignment-impl.md +925 -0
- package/docs/plans/2026-02-22-native-enrichment-design.md +244 -0
- package/docs/plans/2026-02-22-native-enrichment.md +735 -0
- package/framework/CLAUDE.md +77 -0
- package/framework/{skills/level-2-domains → agents}/ai-agents/ai-system-architect.md +7 -3
- package/framework/{skills/level-2-domains → agents}/architecture/po-pm-advisor.md +7 -1
- package/framework/{skills/level-2-domains → agents}/architecture/prompt-engineer.md +7 -1
- package/framework/{skills/level-2-domains → agents}/architecture/seo-growth-hacker.md +7 -1
- package/framework/{skills/level-2-domains → agents}/architecture/standards-architect.md +10 -6
- package/framework/agents/backend/api-designer.md +103 -0
- package/framework/{skills/level-2-domains → agents}/backend/dotnet-senior.md +7 -1
- package/framework/agents/backend/ef-modeler.md +119 -0
- package/framework/{skills/level-2-domains → agents}/backend/hangfire-orchestrator.md +8 -4
- package/framework/{skills/level-2-domains → agents}/backend/ms-agent-expert.md +7 -3
- package/framework/{skills/level-2-domains → agents}/frontend/blazor-builder.md +7 -3
- package/framework/{skills/level-2-domains → agents}/frontend/nextjs-expert.md +7 -3
- package/framework/{skills/level-2-domains → agents}/frontend/ui-ux-designer.md +8 -2
- package/framework/{skills/level-2-domains → agents}/infrastructure/azure-architect.md +7 -1
- package/framework/{skills/level-2-domains → agents}/infrastructure/azure-deploy-specialist.md +7 -1
- package/framework/{skills/level-2-domains → agents}/infrastructure/bicep-architect.md +7 -3
- package/framework/{skills/level-2-domains → agents}/infrastructure/container-specialist.md +7 -3
- package/framework/{skills/level-2-domains → agents}/infrastructure/devops-engineer.md +7 -3
- package/framework/{skills/level-2-domains → agents}/integrations/asaas-financial.md +7 -3
- package/framework/{skills/level-2-domains → agents}/integrations/azure-identity.md +7 -3
- package/framework/{skills/level-2-domains → agents}/integrations/clerk-auth.md +7 -3
- package/framework/{skills/level-2-domains/integrations/hangfire-orchestrator.md → agents/integrations/hangfire-integration.md} +7 -1
- package/framework/{skills/level-2-domains → agents}/integrations/resend-email.md +7 -3
- package/framework/{skills/level-2-domains → agents}/quality/code-analyzer.md +9 -5
- package/framework/{skills/level-2-domains → agents}/quality/testing-specialist.md +7 -3
- package/framework/commands/morph-apply.md +9 -9
- package/framework/commands/morph-archive.md +8 -8
- package/framework/commands/morph-infra.md +1 -1
- package/framework/commands/morph-proposal.md +9 -9
- package/framework/commands/morph-status.md +3 -3
- package/framework/commands/morph-troubleshoot.md +1 -1
- package/framework/hooks/README.md +201 -282
- package/framework/hooks/claude-code/notification/approval-reminder.js +52 -0
- package/framework/hooks/claude-code/post-tool-use/dispatch.js +83 -0
- package/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +42 -0
- package/framework/hooks/claude-code/pre-compact/save-morph-context.js +61 -0
- package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +71 -0
- package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +58 -0
- package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +64 -0
- package/framework/hooks/claude-code/session-start/inject-morph-context.js +94 -0
- package/framework/hooks/claude-code/statusline.py +538 -0
- package/framework/hooks/claude-code/statusline.sh +7 -0
- package/framework/hooks/claude-code/stop/validate-completion.js +88 -0
- package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +91 -0
- package/framework/hooks/shared/hook-response.js +45 -0
- package/framework/hooks/shared/phase-utils.js +129 -0
- package/framework/hooks/shared/state-reader.js +138 -0
- package/framework/hooks/shared/stdin-reader.js +26 -0
- package/framework/phases.json +145 -0
- package/framework/rules/csharp-standards.md +10 -0
- package/framework/rules/frontend-standards.md +14 -0
- package/framework/rules/infrastructure-standards.md +13 -0
- package/framework/rules/morph-workflow.md +86 -0
- package/framework/rules/testing-standards.md +11 -0
- package/framework/skills/README.md +66 -0
- package/framework/skills/level-0-meta/brainstorming/SKILL.md +135 -0
- package/framework/skills/level-0-meta/brainstorming/references/proposal-example.md +138 -0
- package/framework/skills/level-0-meta/{code-review.md → code-review/SKILL.md} +13 -4
- package/framework/skills/level-0-meta/code-review/references/review-example.md +164 -0
- package/framework/skills/level-0-meta/code-review/scripts/scan-csharp.mjs +121 -0
- package/framework/skills/level-0-meta/mcp-registry.json +207 -0
- package/framework/skills/level-0-meta/{morph-checklist.md → morph-checklist/SKILL.md} +8 -3
- package/framework/skills/{level-1-workflows/morph-replicate.md → level-0-meta/morph-replicate/SKILL.md} +13 -6
- package/framework/skills/level-0-meta/{simulation-checklist.md → simulation-checklist/SKILL.md} +9 -4
- package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +334 -0
- package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +147 -0
- package/framework/skills/level-0-meta/verification-before-completion/scripts/check-phase-outputs.mjs +110 -0
- package/framework/skills/level-1-workflows/{phase-clarify.md → phase-clarify/SKILL.md} +65 -4
- package/framework/skills/level-1-workflows/phase-clarify/references/clarifications-example.md +117 -0
- package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +181 -0
- package/framework/skills/level-1-workflows/phase-design/SKILL.md +303 -0
- package/framework/skills/level-1-workflows/phase-design/references/spec-example.md +253 -0
- package/framework/skills/level-1-workflows/phase-implement/SKILL.md +254 -0
- package/framework/skills/level-1-workflows/phase-implement/references/recap-example.md +132 -0
- package/framework/skills/level-1-workflows/phase-setup/SKILL.md +171 -0
- package/framework/skills/level-1-workflows/{phase-tasks.md → phase-tasks/SKILL.md} +89 -7
- package/framework/skills/level-1-workflows/phase-tasks/references/tasks-example.md +231 -0
- package/framework/skills/level-1-workflows/phase-tasks/scripts/validate-tasks.mjs +112 -0
- package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +246 -0
- package/framework/standards/STANDARDS.json +812 -0
- package/framework/standards/ai-agents/team-orchestration.md +3 -3
- package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -0
- package/framework/standards/integration/mcp/mcp-tools.md +384 -0
- package/framework/templates/README.md +17 -17
- package/framework/templates/REGISTRY.json +48 -233
- package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
- package/framework/templates/context/CONTEXT-FEATURE.md +1 -1
- package/framework/templates/context/CONTEXT.md +3 -3
- package/framework/templates/docs/clarifications.md +253 -0
- package/framework/templates/docs/onboarding.md +123 -0
- package/framework/templates/docs/schema-analysis.md +119 -0
- package/framework/templates/docs/spec.md +149 -149
- package/framework/templates/docs/ui-components.md +124 -0
- package/framework/templates/docs/ui-design-system.md +76 -0
- package/framework/templates/docs/ui-flows.md +167 -0
- package/framework/templates/docs/ui-mockups.md +98 -0
- package/framework/templates/docs/user-stories.md +34 -0
- package/framework/templates/examples/spec-examples.md +1 -1
- package/framework/templates/infrastructure/github/README.md +11 -11
- package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
- package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
- package/framework/templates/meta-prompts/validators/pre-commit-validator.md +1 -1
- package/framework/workflows/configs/express.json +45 -0
- package/framework/workflows/configs/spec-only.json +43 -0
- package/framework/workflows/docs/enforcement-pipeline.md +8 -8
- package/framework/workflows/docs/full-morph.md +3 -3
- package/package.json +3 -1
- package/scripts/generate-refs.js +336 -0
- package/scripts/generate-standards-registry.js +44 -0
- package/scripts/validate-real.mjs +255 -0
- package/src/commands/feature/create-story.js +362 -361
- package/src/commands/feature/shard-spec.js +225 -224
- package/src/commands/feature/sprint-status.js +1 -1
- package/src/commands/generation/generate-onboarding.js +169 -0
- package/src/commands/generation/generate.js +2 -2
- package/src/commands/mcp/mcp-setup.js +315 -0
- package/src/commands/project/changes.js +66 -0
- package/src/commands/project/checkpoint.js +209 -0
- package/src/commands/project/cost.js +179 -0
- package/src/commands/project/diff.js +278 -0
- package/src/commands/project/doctor.js +55 -7
- package/src/commands/project/init.js +318 -136
- package/src/commands/project/revert.js +173 -0
- package/src/commands/project/standards.js +80 -0
- package/src/commands/project/status.js +376 -0
- package/src/commands/project/update-agents.js +23 -0
- package/src/commands/project/update.js +60 -88
- package/src/commands/state/advance-phase.js +4 -3
- package/src/commands/state/state.js +10 -3
- package/src/commands/state/validate-phase.js +19 -2
- package/src/commands/templates/template-customize.js +4 -4
- package/src/commands/templates/template-render.js +1 -1
- package/src/commands/templates/template-show.js +1 -1
- package/src/commands/validation/validate-feature.js +359 -0
- package/src/core/orchestrator.js +3 -38
- package/src/core/paths/output-schema.js +135 -0
- package/src/core/state/state-manager.js +831 -592
- package/src/core/templates/template-registry.js +2 -2
- package/src/core/workflows/workflow-detector.js +17 -1
- package/src/lib/agents/micro-agent-factory.js +1 -1
- package/src/lib/context/context-bundler.js +2 -1
- package/src/lib/detectors/claude-config-detector.js +390 -0
- package/src/lib/detectors/conversation-analyzer.js +4 -4
- package/src/lib/detectors/design-system-detector.js +6 -5
- package/src/lib/detectors/standards-generator.js +2 -2
- package/src/lib/generators/context-generator.js +539 -538
- package/src/lib/generators/recap-generator.js +1 -1
- package/src/lib/generators/settings-generator.js +210 -0
- package/src/lib/hooks/hook-executor.js +1 -1
- package/src/lib/installers/mcp-installer.js +299 -0
- package/src/lib/learning/learning-system.js +3 -3
- package/src/lib/orchestration/team-orchestrator.js +1 -1
- package/src/lib/standards/standards-context-injector.js +7 -7
- package/src/lib/threads/thread-coordinator.js +1 -1
- package/src/lib/troubleshooting/troubleshoot-grep.js +1 -1
- package/src/lib/validators/contracts/contract-compliance-validator.js +274 -273
- package/src/lib/validators/design-system/design-system-validator.js +1 -1
- package/src/lib/validators/spec-validator.js +258 -258
- package/src/lib/validators/validation-runner.js +270 -269
- package/src/utils/agents-installer.js +206 -0
- package/src/utils/claude-settings-manager.js +258 -0
- package/src/utils/file-copier.js +1 -1
- package/src/utils/hooks-installer.js +354 -28
- package/src/utils/skills-installer.js +118 -0
- package/.morph/project/context/README.md +0 -17
- package/.morph/project/context/detection-log.md +0 -16
- package/.morph/project/standards/inferred.md +0 -59
- package/framework/hooks/agent-stop/validate-and-continue.js +0 -96
- package/framework/hooks/agent-stop/validate-checkpoints.js +0 -101
- package/framework/hooks/agent-stop/validate-tests.js +0 -109
- package/framework/hooks/agent-teams/dispatch.js +0 -67
- package/framework/hooks/agent-teams/phase-advanced.js +0 -80
- package/framework/hooks/agent-teams/task-completed.js +0 -76
- package/framework/hooks/agent-teams/teammate-idle.js +0 -70
- package/framework/skills/level-1-workflows/phase-design.md +0 -213
- package/framework/skills/level-1-workflows/phase-setup.md +0 -106
- package/framework/skills/level-1-workflows/phase-uiux.md +0 -169
- package/framework/skills/level-2-domains/backend/api-designer.md +0 -59
- package/framework/skills/level-2-domains/backend/ef-modeler.md +0 -58
- package/framework/skills/level-3-technologies/README.md +0 -7
- package/framework/skills/level-4-patterns/README.md +0 -7
- package/src/commands/agents/agents-fuse.js +0 -97
- package/src/commands/agents/micro-agent.js +0 -112
- package/src/commands/agents/spawn-team.js +0 -237
- package/src/commands/agents/squad-template.js +0 -146
- package/src/commands/analytics/analytics.js +0 -176
- package/src/commands/context/context-prime.js +0 -63
- package/src/commands/context/core-four.js +0 -54
- package/src/commands/generation/generate-context.js +0 -40
- package/src/commands/project/detect-agents.js +0 -207
- package/src/commands/project/detect-workflow.js +0 -174
- package/src/commands/threads/thread-template.js +0 -103
- package/src/commands/threads/threads.js +0 -261
- package/src/commands/utils/session-summary.js +0 -291
- package/src/llm/analyzer.js +0 -215
- package/src/llm/few-shot-examples.js +0 -216
- package/src/llm/project-config-schema.json +0 -188
- package/src/llm/prompt-builder.js +0 -96
- /package/.morph/{config → framework}/agents.json +0 -0
- /package/.morph/{standards → framework/standards}/ai-agents/blazor-ui.md +0 -0
- /package/.morph/{standards → framework/standards}/ai-agents/production.md +0 -0
- /package/.morph/{standards → framework/standards}/ai-agents/setup.md +0 -0
- /package/.morph/{standards → framework/standards}/ai-agents/workflows.md +0 -0
- /package/.morph/{standards → framework/standards}/architecture/ddd/aggregates.md +0 -0
- /package/.morph/{standards → framework/standards}/architecture/ddd/entities.md +0 -0
- /package/.morph/{standards → framework/standards}/architecture/ddd/value-objects.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/api/minimal-api.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/api/rest.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/api/validation.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/authentication/passkeys.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/database/ef-core.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/database/migrations.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/database/postgresql/database.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/database/repository-patterns.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/database/vector-search-rag.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/dotnet/async.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/dotnet/core.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/dotnet/di.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/dotnet/program-cs-checklist.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/integrations/asaas/asaas-api.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/integrations/clerk/clerk-auth.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/integrations/hangfire/hangfire-jobs.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/integrations/resend/resend-email.md +0 -0
- /package/.morph/{standards → framework/standards}/context/analytics.md +0 -0
- /package/.morph/{standards → framework/standards}/context/bundles.md +0 -0
- /package/.morph/{standards → framework/standards}/context/priming.md +0 -0
- /package/.morph/{standards → framework/standards}/core/architecture.md +0 -0
- /package/.morph/{standards → framework/standards}/core/coding.md +0 -0
- /package/.morph/{standards → framework/standards}/core/git-branching-strategy.md +0 -0
- /package/.morph/{standards → framework/standards}/core/git.md +0 -0
- /package/.morph/{standards → framework/standards}/core/testing.md +0 -0
- /package/.morph/{standards → framework/standards}/data/nosql/blob-storage.md +0 -0
- /package/.morph/{standards → framework/standards}/data/nosql/cache/redis.md +0 -0
- /package/.morph/{standards → framework/standards}/data/nosql/cosmos-db.md +0 -0
- /package/.morph/{standards → framework/standards}/data/vector-search/azure-ai-search.md +0 -0
- /package/.morph/{standards → framework/standards}/data/vector-search/rag-chunking.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/design-checklist.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui-setup.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/html-conversion.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/lifecycle.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/pitfalls.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/state.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/design-system/animations.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/design-system/naming.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/azure.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/bicep/bicep-patterns.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/azure-devops-setup.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/local-development.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/services/functions.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/services/service-bus.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/services/storage.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/docker/easypanel-deploy.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/supabase/mcp-setup.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-auth.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-pgvector.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-rls.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-storage.md +0 -0
- /package/.morph/{standards → framework/standards}/integration/api/graphql.md +0 -0
- /package/.morph/{standards → framework/standards}/integration/api/grpc.md +0 -0
- /package/.morph/{standards → framework/standards}/integration/api/rest-design.md +0 -0
- /package/.morph/{standards → framework/standards}/integration/event-driven/cqrs.md +0 -0
- /package/.morph/{standards → framework/standards}/integration/event-driven/event-sourcing.md +0 -0
- /package/.morph/{standards → framework/standards}/integration/event-driven/service-bus.md +0 -0
- /package/.morph/{standards → framework/standards}/observability/logging.md +0 -0
- /package/.morph/{standards → framework/standards}/observability/metrics.md +0 -0
- /package/.morph/{standards → framework/standards}/observability/monitoring.md +0 -0
- /package/.morph/{standards → framework/standards}/observability/tracing.md +0 -0
- /package/.morph/{standards → framework/standards}/workflows/parallel-execution.md +0 -0
- /package/.morph/{standards → framework/standards}/workflows/thread-management.md +0 -0
- /package/.morph/{templates → framework/templates}/.idea/morph-templates.xml +0 -0
- /package/.morph/{templates → framework/templates}/.vscode/morph-templates.code-snippets +0 -0
- /package/.morph/{templates → framework/templates}/IDE-SNIPPETS.md +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/backend/repository.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/backend/service.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Commands.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Entities.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Queries.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/contracts/README.md +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/contracts/api-contracts.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/contracts/contracts.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/database/migration.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/frontend/component.razor +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/jobs/agent.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/jobs/job.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/test.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/sql/rls-policy.sql +0 -0
- /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.sql +0 -0
- /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.template.sql +0 -0
- /package/.morph/{templates → framework/templates}/code/typescript/contracts.ts +0 -0
- /package/.morph/{templates → framework/templates}/docs/proposal.md +0 -0
- /package/.morph/{templates → framework/templates}/examples/design-system-examples.md +0 -0
- /package/.morph/{templates → framework/templates}/feature/decisions.md +0 -0
- /package/.morph/{templates → framework/templates}/feature/recap.md +0 -0
- /package/.morph/{templates → framework/templates}/feature/tasks.md +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/Dockerfile.example +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/README.md +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/app-insights.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/app-service.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app-env.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy-checklist.md +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.ps1 +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.sh +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/key-vault.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/main.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.dev.json +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.prod.json +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.staging.json +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/sql-database.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/storage.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/docker/Dockerfile.template +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/docker/docker-compose.template.yml +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-api.dockerfile +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-web.dockerfile +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/docker/easypanel.template.json +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/github/actions/health-check/action.yml.hbs +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -0
- /package/.morph/{templates → framework/templates}/integrations/asaas-client.cs +0 -0
- /package/.morph/{templates → framework/templates}/integrations/asaas-webhook.cs +0 -0
- /package/.morph/{templates → framework/templates}/integrations/azure-identity-config.cs +0 -0
- /package/.morph/{templates → framework/templates}/integrations/clerk-config.cs +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-agent.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-aggregator.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-retry.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-validation.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-wrapper.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-coordinator.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/backend-squad.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/frontend-squad.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/squad-leader.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/validators/checkpoint-validator.md +0 -0
- /package/.morph/{templates → framework/templates}/saas/subscription.cs +0 -0
- /package/.morph/{templates → framework/templates}/saas/tenant.cs +0 -0
- /package/.morph/{templates → framework/templates}/state.template.json +0 -0
- /package/.morph/{templates → framework/templates}/ui/FluentDesignTheme.cs +0 -0
- /package/.morph/{templates → framework/templates}/ui/MudTheme.cs +0 -0
- /package/.morph/{templates → framework/templates}/ui/design-system.css +0 -0
- /package/framework/{skills/level-2-domains → agents}/README.md +0 -0
- /package/framework/hooks/{commit-msg → git/commit-msg}/conventional-commits.sh +0 -0
- /package/framework/hooks/{pre-commit → git/pre-commit}/agents.sh +0 -0
- /package/framework/hooks/{pre-commit → git/pre-commit}/orchestrator.sh +0 -0
- /package/framework/hooks/{pre-commit → git/pre-commit}/specs.sh +0 -0
- /package/framework/hooks/{pre-push → git/pre-push}/run-tests.sh +0 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: phase-implement
|
|
3
|
+
description: MORPH-SPEC Phase 5 (Implement). Executes feature tasks using TDD with checkpoint validation every 3 tasks, smoke tests via Playwright, and generates code + recap.md. Use after task list approval when starting feature implementation.
|
|
4
|
+
argument-hint: "[feature-name]"
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
context: fork
|
|
7
|
+
agent: general-purpose
|
|
8
|
+
user-invocable: false
|
|
9
|
+
allowed-tools: Read, Write, Edit, Bash, Glob, Grep
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# MORPH Implement - FASE 5
|
|
13
|
+
|
|
14
|
+
> INTERNAL: Workflow skill used by /morph-apply during automated phase orchestration. Not a user command.
|
|
15
|
+
|
|
16
|
+
Implemente as tasks definidas na FASE 4, com checkpoints a cada 3 tasks e recap final.
|
|
17
|
+
|
|
18
|
+
## Pré-requisitos
|
|
19
|
+
|
|
20
|
+
- [ ] FASE 4 (Tasks) concluída
|
|
21
|
+
- [ ] `tasks.md` ou `tasks.json` aprovado pelo usuário
|
|
22
|
+
- [ ] Tasks gate (`morph-spec approve $ARGUMENTS tasks`) aprovado
|
|
23
|
+
- [ ] Todos os outputs de design existem (spec.md, contracts.cs, decisions.md)
|
|
24
|
+
|
|
25
|
+
## Ferramentas Recomendadas
|
|
26
|
+
|
|
27
|
+
> **Ref:** `framework/skills/level-0-meta/tool-usage-guide/SKILL.md` para guia completo.
|
|
28
|
+
> **Ref:** `framework/standards/integration/mcp/mcp-tools.md` para referência MCP.
|
|
29
|
+
> **Example:** `references/recap-example.md` — filled-in recap.md showing expected output quality.
|
|
30
|
+
|
|
31
|
+
| Ação | Ferramenta | Alternativa |
|
|
32
|
+
|------|------------|-------------|
|
|
33
|
+
| Ler task details | **Read** tasks.json, spec.md, contracts.cs | — |
|
|
34
|
+
| Criar novos arquivos | **Write** source files | — |
|
|
35
|
+
| Modificar arquivos existentes | **Edit** source files | — |
|
|
36
|
+
| Consultar API de biblioteca | **Context7 MCP** `query_docs()` | **WebSearch** + **WebFetch** |
|
|
37
|
+
| Executar migrations | **Supabase MCP** `query()` | **Bash** `npx supabase migration ...` |
|
|
38
|
+
| Build do projeto | **Bash** `dotnet build` ou `npm run build` | — |
|
|
39
|
+
| Rodar testes | **Bash** `dotnet test` ou `npm test` | — |
|
|
40
|
+
| Checkpoint validation | **Bash** `npx morph-spec validate-feature ...` | — |
|
|
41
|
+
| Marcar task concluída | **Bash** `npx morph-spec task done $ARGUMENTS T001` | — |
|
|
42
|
+
| Smoke test no browser | **Playwright MCP** `browser_navigate()` + `browser_snapshot()` | Manual |
|
|
43
|
+
| Verificar erros de console | **Playwright MCP** `browser_console_messages()` | — |
|
|
44
|
+
| Screenshot para recap | **Playwright MCP** `browser_take_screenshot()` | — |
|
|
45
|
+
| Criar PR | **Bash** `gh pr create ...` | **GitHub MCP** `create_pull_request()` |
|
|
46
|
+
| Atualizar state | **Bash** `npx morph-spec state set ...` | — |
|
|
47
|
+
|
|
48
|
+
**MCPs desta fase:** Supabase (migrations, RLS), Context7 (API lookup), Playwright (smoke test), GitHub (PRs).
|
|
49
|
+
|
|
50
|
+
**Anti-padrões:**
|
|
51
|
+
- ❌ Task agent para editar um único arquivo (use Edit direto)
|
|
52
|
+
- ✅ Task agent para implementar service layer em 5+ arquivos (multi-file legítimo)
|
|
53
|
+
- ❌ Bash `cat` para criar arquivos (use Write tool)
|
|
54
|
+
- ❌ Bash `sed` para modificar código (use Edit tool)
|
|
55
|
+
- ❌ Implementar sem ler contracts.cs primeiro (contracts são a fonte de verdade!)
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Workflow
|
|
60
|
+
|
|
61
|
+
### CHECKPOINT DE ENTRADA: Verificar Pré-requisitos
|
|
62
|
+
|
|
63
|
+
**⏸️ Antes de iniciar implementação:**
|
|
64
|
+
|
|
65
|
+
- [ ] `tasks.md` ou `tasks.json` existe e foi aprovado?
|
|
66
|
+
- [ ] Tasks gate aprovado (`morph-spec approve $ARGUMENTS tasks`)?
|
|
67
|
+
- [ ] `spec.md` atualizado com clarificações?
|
|
68
|
+
- [ ] `contracts.cs` corresponde ao schema real?
|
|
69
|
+
- [ ] Build base do projeto compila sem erros?
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npx morph-spec state get $ARGUMENTS
|
|
73
|
+
npx morph-spec approval-status $ARGUMENTS
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**❌ Se alguma checkbox NÃO estiver marcada:**
|
|
77
|
+
→ Voltar para a fase correspondente
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
### Passo 1: Carregar Contexto Completo
|
|
82
|
+
|
|
83
|
+
Leia TODOS os outputs antes de implementar:
|
|
84
|
+
|
|
85
|
+
1. `.morph/features/$ARGUMENTS/3-tasks/tasks.md` — Lista de tasks
|
|
86
|
+
2. `.morph/features/$ARGUMENTS/1-design/spec.md` — Especificação completa
|
|
87
|
+
3. `.morph/features/$ARGUMENTS/1-design/contracts.cs` — Interfaces e DTOs
|
|
88
|
+
4. `.morph/features/$ARGUMENTS/1-design/decisions.md` — ADRs
|
|
89
|
+
5. `.morph/features/$ARGUMENTS/1-design/schema-analysis.md` — Schema real (se existir)
|
|
90
|
+
6. `.morph/features/$ARGUMENTS/2-ui/design-system.md` — Design tokens (se existir)
|
|
91
|
+
|
|
92
|
+
### Passo 2: Iniciar Primeira Task
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npx morph-spec task next $ARGUMENTS
|
|
96
|
+
npx morph-spec task start $ARGUMENTS T001
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Para cada task:
|
|
100
|
+
|
|
101
|
+
1. **Ler a task description** completa
|
|
102
|
+
2. **Ler contracts.cs** para DTOs/interfaces relevantes
|
|
103
|
+
3. **Implementar** usando Write (novo) ou Edit (existente)
|
|
104
|
+
4. **Verificar** — build, lint, testes
|
|
105
|
+
5. **Marcar como done:**
|
|
106
|
+
```bash
|
|
107
|
+
npx morph-spec task done $ARGUMENTS T001
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Passo 3: Checkpoint a Cada 3 Tasks
|
|
111
|
+
|
|
112
|
+
**A cada 3 tasks completadas:**
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# Save checkpoint
|
|
116
|
+
npx morph-spec checkpoint-save $ARGUMENTS
|
|
117
|
+
|
|
118
|
+
# Run validation
|
|
119
|
+
npx morph-spec validate-feature $ARGUMENTS --phase implement
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Se validação falhar:**
|
|
123
|
+
1. NÃO avançar para próxima task
|
|
124
|
+
2. Corrigir issues reportados
|
|
125
|
+
3. Re-rodar validação
|
|
126
|
+
4. Só então prosseguir
|
|
127
|
+
|
|
128
|
+
### Passo 4: Test-Driven Development (Recomendado)
|
|
129
|
+
|
|
130
|
+
Para cada task de implementação:
|
|
131
|
+
|
|
132
|
+
1. **Escrever teste primeiro** (unit test para service/domain)
|
|
133
|
+
2. **Rodar teste** — deve falhar (RED)
|
|
134
|
+
3. **Implementar** o mínimo para passar
|
|
135
|
+
4. **Rodar teste** — deve passar (GREEN)
|
|
136
|
+
5. **Refatorar** se necessário (REFACTOR)
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# .NET
|
|
140
|
+
dotnet test --filter "FullyQualifiedName~{TestClass}"
|
|
141
|
+
|
|
142
|
+
# Node.js
|
|
143
|
+
npm test -- test/path/to/test.js
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Passo 5: Smoke Test com Playwright (se UI)
|
|
147
|
+
|
|
148
|
+
Após implementar componentes visuais:
|
|
149
|
+
|
|
150
|
+
```javascript
|
|
151
|
+
// Navegar para a página
|
|
152
|
+
await mcp__playwright__browser_navigate({ url: 'http://localhost:5000/feature-page' });
|
|
153
|
+
|
|
154
|
+
// Capturar estado da página
|
|
155
|
+
await mcp__playwright__browser_snapshot();
|
|
156
|
+
|
|
157
|
+
// Verificar erros de console
|
|
158
|
+
await mcp__playwright__browser_console_messages({ level: 'error' });
|
|
159
|
+
|
|
160
|
+
// Screenshot para recap
|
|
161
|
+
await mcp__playwright__browser_take_screenshot({ type: 'png' });
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Passo 6: Gerar `recap.md`
|
|
165
|
+
|
|
166
|
+
Após TODAS as tasks completadas:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
npx morph-spec generate recap $ARGUMENTS
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Ou crie manualmente `.morph/features/$ARGUMENTS/4-implement/recap.md`:
|
|
173
|
+
|
|
174
|
+
```markdown
|
|
175
|
+
# Recap — {Feature Name}
|
|
176
|
+
|
|
177
|
+
## Summary
|
|
178
|
+
{1-2 parágrafos descrevendo o que foi implementado}
|
|
179
|
+
|
|
180
|
+
## Tasks Completed
|
|
181
|
+
- [x] T001: {título}
|
|
182
|
+
- [x] T002: {título}
|
|
183
|
+
- ...
|
|
184
|
+
|
|
185
|
+
## Key Decisions During Implementation
|
|
186
|
+
- {Decisão 1}: {Razão}
|
|
187
|
+
- {Decisão 2}: {Razão}
|
|
188
|
+
|
|
189
|
+
## Files Created/Modified
|
|
190
|
+
{Lista de arquivos}
|
|
191
|
+
|
|
192
|
+
## Tests
|
|
193
|
+
- Unit tests: X passing
|
|
194
|
+
- Integration tests: Y passing
|
|
195
|
+
|
|
196
|
+
## Validation Results
|
|
197
|
+
{Output do morph-spec validate-feature}
|
|
198
|
+
|
|
199
|
+
## Screenshots
|
|
200
|
+
{Se UI, incluir screenshots}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Passo 7: Atualizar State
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
npx morph-spec state set $ARGUMENTS phase implement
|
|
207
|
+
npx morph-spec state set $ARGUMENTS status done
|
|
208
|
+
npx morph-spec state mark-output $ARGUMENTS recap
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Integração com Superpowers
|
|
214
|
+
|
|
215
|
+
> Disponível quando o plugin `superpowers` está instalado.
|
|
216
|
+
|
|
217
|
+
| Skill | Quando Usar | Invocação |
|
|
218
|
+
|-------|-------------|-----------|
|
|
219
|
+
| `test-driven-development` | Para cada task de implementação | `Skill(superpowers:test-driven-development)` |
|
|
220
|
+
| `systematic-debugging` | Quando testes falham ou erros inesperados | `Skill(superpowers:systematic-debugging)` |
|
|
221
|
+
| `requesting-code-review` | Após implementação completa | `Skill(superpowers:requesting-code-review)` |
|
|
222
|
+
| `verification-before-completion` | Antes de marcar feature como done | Use `verification-before-completion` (morph-spec version) |
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Outputs Gerados
|
|
227
|
+
|
|
228
|
+
- Código fonte implementado (vários arquivos)
|
|
229
|
+
- Testes unitários e de integração
|
|
230
|
+
- `.morph/features/$ARGUMENTS/4-implement/recap.md` — Resumo da implementação
|
|
231
|
+
|
|
232
|
+
## Critérios de Conclusão
|
|
233
|
+
|
|
234
|
+
- [x] Todas as tasks completadas
|
|
235
|
+
- [x] Build compila sem erros
|
|
236
|
+
- [x] Testes passando
|
|
237
|
+
- [x] Validation pipeline passa
|
|
238
|
+
- [x] `recap.md` gerado
|
|
239
|
+
- [x] State atualizado para `status: done`
|
|
240
|
+
- [x] Checkpoints salvos a cada 3 tasks
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Outputs desta Fase
|
|
245
|
+
|
|
246
|
+
<!-- morph:outputs:implement -->
|
|
247
|
+
| Output | Caminho |
|
|
248
|
+
|--------|---------|
|
|
249
|
+
| `recap` | `.morph/features/{feature}/4-implement/recap.md` |
|
|
250
|
+
<!-- /morph:outputs -->
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
Feature completa! Considere criar um PR e rodar `morph-spec session-summary $ARGUMENTS`.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Feature Recap: Photo Processing Pipeline
|
|
2
|
+
|
|
3
|
+
> Example of a well-structured recap.md. Filled-in reference — not a template.
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
| Field | Value |
|
|
8
|
+
|-------|-------|
|
|
9
|
+
| **Feature ID** | photo-processing |
|
|
10
|
+
| **Completed** | 2025-01-22 |
|
|
11
|
+
| **Total Tasks** | 11 / 11 |
|
|
12
|
+
| **Time Spent** | ~9h |
|
|
13
|
+
| **Agents Used** | dotnet-senior, azure-architect, blazor-builder |
|
|
14
|
+
| **Stack** | blazor-azure |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Tasks Completed
|
|
19
|
+
|
|
20
|
+
| ID | Title | Category | Duration |
|
|
21
|
+
|----|-------|----------|----------|
|
|
22
|
+
| T001 | Define C# contracts and interfaces | Contract | 25min |
|
|
23
|
+
| T002 | Create ProcessingJob entity and enum | Domain | 30min |
|
|
24
|
+
| T003 | EF Core migration and DbContext setup | Infrastructure | 50min |
|
|
25
|
+
| T004 | Azure Blob Storage service | Infrastructure | 45min |
|
|
26
|
+
| T005 | Implement PhotoProcessingService | Service | 65min |
|
|
27
|
+
| T006 | Implement Hangfire background job | Job | 70min |
|
|
28
|
+
| T007 | Upload and status endpoints | API | 40min |
|
|
29
|
+
| T008 | Blazor upload page component | UI | 60min |
|
|
30
|
+
| T009 | Blazor status polling page | UI | 65min |
|
|
31
|
+
| T010 | Unit tests for PhotoProcessingService | Test | 55min |
|
|
32
|
+
| T011 | Integration tests for upload + status API | Test | 70min |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## What Was Delivered
|
|
37
|
+
|
|
38
|
+
### Functionality
|
|
39
|
+
- Photo upload via Blazor form (10MB limit, .jpg/.png only)
|
|
40
|
+
- Azure Blob Storage integration with `uploads/{jobId}/original.jpg` path structure
|
|
41
|
+
- Hangfire background job with 3-retry exponential backoff (5s/30s/120s)
|
|
42
|
+
- Real-time status polling page (5s interval, stops on terminal state)
|
|
43
|
+
- Download redirect for completed jobs
|
|
44
|
+
|
|
45
|
+
### Backend (.NET)
|
|
46
|
+
- Endpoints: `POST /api/upload`, `GET /api/status/{id}`, `GET /api/download/{id}`
|
|
47
|
+
- Services: `PhotoProcessingService`, `PhotoProcessingJob`
|
|
48
|
+
- Simulation: `FakeBlobStorageService`, `FakePhotoProcessingJob` for dev mode
|
|
49
|
+
|
|
50
|
+
### Frontend (Blazor)
|
|
51
|
+
- Pages: `Upload.razor`, `ProcessingStatus.razor`
|
|
52
|
+
- Polling via `PeriodicTimer` — no SignalR dependency
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Files Created
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
src/Domain/Entities/ProcessingJob.cs
|
|
60
|
+
src/Domain/Enums/ProcessingStatus.cs
|
|
61
|
+
src/Application/PhotoProcessing/Interfaces/IPhotoProcessingService.cs
|
|
62
|
+
src/Application/PhotoProcessing/Commands/UploadPhotoCommand.cs
|
|
63
|
+
src/Application/PhotoProcessing/Queries/GetJobStatusQuery.cs
|
|
64
|
+
src/Application/PhotoProcessing/DTOs/JobStatusDto.cs
|
|
65
|
+
src/Application/PhotoProcessing/PhotoProcessingService.cs
|
|
66
|
+
src/Application/PhotoProcessing/PhotoProcessingJob.cs
|
|
67
|
+
src/Application/PhotoProcessing/FakePhotoProcessingJob.cs
|
|
68
|
+
src/Infrastructure/Storage/IBlobStorageService.cs
|
|
69
|
+
src/Infrastructure/Storage/AzureBlobStorageService.cs
|
|
70
|
+
src/Infrastructure/Storage/FakeBlobStorageService.cs
|
|
71
|
+
src/Infrastructure/Persistence/Configurations/ProcessingJobConfiguration.cs
|
|
72
|
+
src/Web/Endpoints/PhotoProcessingEndpoints.cs
|
|
73
|
+
src/Web/Pages/Upload.razor + .cs
|
|
74
|
+
src/Web/Pages/ProcessingStatus.razor + .cs
|
|
75
|
+
tests/Unit/Application/PhotoProcessing/PhotoProcessingServiceTests.cs
|
|
76
|
+
tests/Integration/Api/PhotoProcessingEndpointTests.cs
|
|
77
|
+
tests/Integration/Fixtures/PhotoProcessingApiFixture.cs
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Files Modified
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
src/Infrastructure/Persistence/AppDbContext.cs
|
|
84
|
+
src/Infrastructure/DependencyInjection.cs
|
|
85
|
+
src/Application/DependencyInjection.cs
|
|
86
|
+
src/Web/Program.cs
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Architecture Decisions
|
|
92
|
+
|
|
93
|
+
| Decision | Rationale |
|
|
94
|
+
|----------|-----------|
|
|
95
|
+
| PeriodicTimer for polling (not SignalR) | Simpler, no hub overhead, sufficient at MVP scale |
|
|
96
|
+
| FakeBlobStorageService as Singleton | Stores in-memory dict; Scoped would lose state between requests |
|
|
97
|
+
| Hangfire RetryCount on entity (not Hangfire built-in) | Domain owns retry state; allows custom error messages per attempt |
|
|
98
|
+
|
|
99
|
+
See full ADRs in `decisions.md`
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Test Coverage
|
|
104
|
+
|
|
105
|
+
| Type | Files | Notes |
|
|
106
|
+
|------|-------|-------|
|
|
107
|
+
| Unit | `PhotoProcessingServiceTests.cs` | Happy path, invalid type, size limit, 404, all statuses |
|
|
108
|
+
| Integration | `PhotoProcessingEndpointTests.cs` | POST /upload, GET /status, GET /download (completed + pending) |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Issues Encountered
|
|
113
|
+
|
|
114
|
+
| Issue | Resolution |
|
|
115
|
+
|-------|-----------|
|
|
116
|
+
| `FakeBlobStorageService` registered as `Scoped` — lost uploads between requests | Changed to `Singleton` per simulation-checklist.md |
|
|
117
|
+
| `PeriodicTimer` not stopping on component dispose | Added `CancellationTokenSource` + dispose pattern in `ProcessingStatus.razor.cs` |
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Metrics
|
|
122
|
+
|
|
123
|
+
| Metric | Value |
|
|
124
|
+
|--------|-------|
|
|
125
|
+
| Tasks Completed | 11 / 11 |
|
|
126
|
+
| Checkpoints Passed | 3 (after T003, T006, T009) |
|
|
127
|
+
| Bugs Found | 2 |
|
|
128
|
+
| Bugs Fixed | 2 |
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
*MORPH-SPEC by Polymorphism Tech*
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: phase-setup
|
|
3
|
+
description: MORPH-SPEC Phase 1 (Setup). Reads project context, detects tech stack, activates relevant agents via detect-agents, 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
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# MORPH Setup - FASE 1
|
|
10
|
+
|
|
11
|
+
> INTERNAL: Workflow skill used by /morph-proposal during automated phase orchestration. Not a user command.
|
|
12
|
+
|
|
13
|
+
Inicialize o contexto e prepare o ambiente para uma feature aprovada.
|
|
14
|
+
|
|
15
|
+
## Pré-requisitos
|
|
16
|
+
|
|
17
|
+
- [ ] Feature tem `proposal.md` criado (FASE 0 concluída)
|
|
18
|
+
- [ ] Proposal foi aprovado pelo usuário
|
|
19
|
+
- [ ] Agentes foram detectados e registrados no state
|
|
20
|
+
|
|
21
|
+
## Ferramentas Recomendadas
|
|
22
|
+
|
|
23
|
+
> **Ref:** `framework/skills/level-0-meta/tool-usage-guide/SKILL.md` para guia completo.
|
|
24
|
+
> **Ref:** `framework/standards/integration/mcp/mcp-tools.md` para referência MCP.
|
|
25
|
+
|
|
26
|
+
| Ação | Ferramenta | Alternativa |
|
|
27
|
+
|------|------------|-------------|
|
|
28
|
+
| Verificar state | **Bash** `npx morph-spec state get` | — |
|
|
29
|
+
| Detectar agentes + standards | **Bash** `npx morph-spec detect-agents --json` | — |
|
|
30
|
+
| Ler contexto do projeto | **Read** `.morph/context/README.md` | — |
|
|
31
|
+
| Ler config | **Read** `.morph/config.json` | — |
|
|
32
|
+
| Escanear estrutura do projeto | **Glob** `src/**/*.{ts,tsx,cs}` | — |
|
|
33
|
+
| Metadata do repositório | **GitHub MCP** `get_repo()` | **Bash** `gh repo view --json` |
|
|
34
|
+
| Atualizar state | **Bash** `npx morph-spec state set` | — |
|
|
35
|
+
|
|
36
|
+
**MCPs desta fase:** GitHub (opcional — metadata do repo).
|
|
37
|
+
|
|
38
|
+
**Anti-padrões:**
|
|
39
|
+
- ❌ Task agent para detectar stack (detect-agents CLI já faz isso)
|
|
40
|
+
- ❌ WebSearch para info local do projeto (use Read/Glob)
|
|
41
|
+
- ❌ Ler agents.json manualmente (detect-agents retorna standards processados)
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Workflow
|
|
46
|
+
|
|
47
|
+
### CHECKPOINT DE ENTRADA: Verificar Pré-requisitos
|
|
48
|
+
|
|
49
|
+
**⏸️ Antes de prosseguir com setup:**
|
|
50
|
+
|
|
51
|
+
- [ ] `proposal.md` existe em `.morph/features/$ARGUMENTS/`?
|
|
52
|
+
- [ ] Proposal foi apresentado e aprovado pelo usuário?
|
|
53
|
+
- [ ] Feature foi registrada no state?
|
|
54
|
+
|
|
55
|
+
**❌ Se alguma checkbox NÃO estiver marcada:**
|
|
56
|
+
→ Voltar para FASE 0 (Proposal)
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
### Passo 1: Verificar State
|
|
61
|
+
|
|
62
|
+
Confirme que a feature existe no state:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
npx morph-spec state get $ARGUMENTS
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Se não existir, volte para FASE 0 (proposal).
|
|
69
|
+
|
|
70
|
+
### Passo 2: Carregar Contexto e Standards Automaticamente
|
|
71
|
+
|
|
72
|
+
**Use detect-agents --json para obter standards context:**
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npx morph-spec detect-agents --json "{feature description from proposal}"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
O output JSON contém `standardsSummary` com todos os standards relevantes para cada agente ativo:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"standardsSummary": {
|
|
83
|
+
"blazor-builder": {
|
|
84
|
+
"standards": ["blazor-lifecycle", "blazor-state", "coding", ...],
|
|
85
|
+
"fullContent": "# blazor-lifecycle\n\n...", // Full standards text
|
|
86
|
+
"count": 10
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Standards resolution order** (automático):
|
|
93
|
+
1. `.morph/context/*.md` (project overrides - highest priority)
|
|
94
|
+
2. `.morph/framework/standards/*.md` (AI Agent Framework, Azure)
|
|
95
|
+
3. `framework/standards/*.md` (Blazor, CSS, .NET)
|
|
96
|
+
4. `.morph/context/inferred.md` (always loaded if exists)
|
|
97
|
+
|
|
98
|
+
**Contexto geral** (leia manualmente):
|
|
99
|
+
- `.morph/context/README.md` - Overview do projeto
|
|
100
|
+
- `.morph/config.json` - Configurações
|
|
101
|
+
|
|
102
|
+
### Passo 3: Confirmar Stack
|
|
103
|
+
|
|
104
|
+
Baseado no proposal e contexto, confirme:
|
|
105
|
+
- Stack tecnológica (Blazor Server, Next.js, etc.)
|
|
106
|
+
- Padrões arquiteturais aplicáveis
|
|
107
|
+
- Componentes reutilizáveis existentes
|
|
108
|
+
|
|
109
|
+
### Passo 4: Listar Agentes Ativos
|
|
110
|
+
|
|
111
|
+
Mostre os agentes detectados no proposal:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
npx morph-spec state get $ARGUMENTS
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Parse o JSON e liste os `activeAgents` com seus emojis e responsabilidades (consulte `.morph/framework/agents.json`).
|
|
118
|
+
|
|
119
|
+
### Passo 5: Atualizar State
|
|
120
|
+
|
|
121
|
+
Marque a feature como na fase SETUP:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
npx morph-spec state set $ARGUMENTS phase setup
|
|
125
|
+
npx morph-spec state set $ARGUMENTS status in_progress
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Outputs
|
|
129
|
+
|
|
130
|
+
**Apresente ao usuário:**
|
|
131
|
+
|
|
132
|
+
1. **Contexto carregado**:
|
|
133
|
+
- Nome do projeto
|
|
134
|
+
- Stack confirmado
|
|
135
|
+
- Standards aplicáveis
|
|
136
|
+
|
|
137
|
+
2. **Agentes ativos**:
|
|
138
|
+
- Lista de agentes com emojis
|
|
139
|
+
- Responsabilidades de cada um
|
|
140
|
+
|
|
141
|
+
## Critérios de Avanço
|
|
142
|
+
|
|
143
|
+
- [x] Contexto do projeto carregado
|
|
144
|
+
- [x] Standards identificados (framework + project)
|
|
145
|
+
- [x] Stack confirmado
|
|
146
|
+
- [x] Agentes listados
|
|
147
|
+
- [x] State atualizado para phase: setup
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Integração com Superpowers
|
|
152
|
+
|
|
153
|
+
> Disponível quando o plugin `superpowers` está instalado.
|
|
154
|
+
|
|
155
|
+
| Skill | Quando Usar | Invocação |
|
|
156
|
+
|-------|-------------|-----------|
|
|
157
|
+
| `using-git-worktrees` | Se feature requer isolamento do workspace | `Skill(superpowers:using-git-worktrees)` |
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Outputs desta Fase
|
|
162
|
+
|
|
163
|
+
<!-- morph:outputs:proposal -->
|
|
164
|
+
| Output | Caminho |
|
|
165
|
+
|--------|---------|
|
|
166
|
+
| `proposal` | `.morph/features/{feature}/0-proposal/proposal.md` |
|
|
167
|
+
<!-- /morph:outputs -->
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
Continuar automaticamente para próxima fase (UI/UX se detectado, ou Design).
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: phase-tasks
|
|
3
|
+
description: MORPH-SPEC Phase 4 (Tasks). Breaks approved spec into bottom-up ordered implementation tasks (T001...TXXX) with dependencies, checkpoints every 3 tasks, and effort estimates, producing tasks.md. Use after design and clarification phases to create a structured implementation plan before coding starts.
|
|
4
|
+
argument-hint: "[feature-name]"
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
user-invocable: false
|
|
7
|
+
allowed-tools: Read, Write, Edit, Bash, Glob, Grep
|
|
8
|
+
---
|
|
9
|
+
|
|
1
10
|
# MORPH Tasks - FASE 4
|
|
2
11
|
|
|
3
12
|
> INTERNAL: Workflow skill used by /morph-proposal during automated phase orchestration. Not a user command.
|
|
@@ -10,11 +19,63 @@ Quebre a especificação em tasks executáveis, defina ordem de execução e est
|
|
|
10
19
|
- [ ] `spec.md` atualizado com clarificações
|
|
11
20
|
- [ ] Todos os edge cases documentados
|
|
12
21
|
|
|
22
|
+
## Ferramentas Recomendadas
|
|
23
|
+
|
|
24
|
+
> **Ref:** `framework/skills/level-0-meta/tool-usage-guide/SKILL.md` para guia completo.
|
|
25
|
+
> **Ref:** `framework/standards/integration/mcp/mcp-tools.md` para referência MCP.
|
|
26
|
+
> **Example:** `references/tasks-example.md` — filled-in tasks.md showing expected granularity and format.
|
|
27
|
+
> **Script:** `scripts/validate-tasks.mjs` — validates tasks.md structure, T### IDs, and required fields.
|
|
28
|
+
|
|
29
|
+
| Ação | Ferramenta | Alternativa |
|
|
30
|
+
|------|------------|-------------|
|
|
31
|
+
| Ler spec + contracts + decisions | **Read** todos os outputs | — |
|
|
32
|
+
| Analisar complexidade de implementação | **Grep** padrões no código existente | — |
|
|
33
|
+
| Contar padrões similares existentes | **Glob** `**/Services/**/*.cs` | — |
|
|
34
|
+
| Consultar padrões de implementação | **Context7 MCP** `query_docs()` | **WebSearch** |
|
|
35
|
+
| Criar issues no GitHub a partir das tasks | **GitHub MCP** `create_issue()` | **Bash** `gh issue create ...` |
|
|
36
|
+
| Renderizar template de tasks | **Bash** `npx morph-spec template render docs/tasks ...` | — |
|
|
37
|
+
| Atualizar state com total de tasks | **Bash** `npx morph-spec state set ... tasks.total N` | — |
|
|
38
|
+
|
|
39
|
+
**MCPs desta fase:** Context7 (estimar complexidade), GitHub (criar issues).
|
|
40
|
+
|
|
41
|
+
**Anti-padrões:**
|
|
42
|
+
- ❌ Task agent para quebrar spec simples (faça diretamente)
|
|
43
|
+
- ✅ Task agent para specs complexos com 50+ requisitos (análise legítima multi-step)
|
|
44
|
+
- ❌ Criar tasks.json sem ler todos os outputs primeiro
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
13
48
|
## Workflow
|
|
14
49
|
|
|
50
|
+
### CHECKPOINT DE ENTRADA: Verificar Pré-requisitos
|
|
51
|
+
|
|
52
|
+
**⏸️ PAUSE - Antes de iniciar o breakdown de tasks:**
|
|
53
|
+
|
|
54
|
+
- [ ] `spec.md` existe e foi aprovado pelo usuário?
|
|
55
|
+
- [ ] `contracts.cs` existe e corresponde ao schema real?
|
|
56
|
+
- [ ] `schema-analysis.md` foi validado (se aplicável)?
|
|
57
|
+
- [ ] `decisions.md` contém ADRs para todas as escolhas críticas?
|
|
58
|
+
- [ ] Design gate (`morph-spec approve $ARGUMENTS design`) foi aprovado?
|
|
59
|
+
- [ ] Clarificações (FASE 3) foram resolvidas e spec atualizado?
|
|
60
|
+
|
|
61
|
+
**❌ Se alguma checkbox NÃO estiver marcada:**
|
|
62
|
+
→ Voltar para a fase correspondente e resolver
|
|
63
|
+
|
|
64
|
+
**✅ Se TODAS as checkboxes estiverem marcadas:**
|
|
65
|
+
→ Prosseguir para análise e breakdown
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Verificar estado atual:
|
|
69
|
+
npx morph-spec state get $ARGUMENTS
|
|
70
|
+
# Verificar se design foi aprovado:
|
|
71
|
+
npx morph-spec approval get $ARGUMENTS design
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
15
76
|
### Passo 1: Analisar Spec
|
|
16
77
|
|
|
17
|
-
Leia `.morph/
|
|
78
|
+
Leia `.morph/features/$ARGUMENTS/1-design/spec.md` e identifique:
|
|
18
79
|
|
|
19
80
|
1. **Requisitos funcionais** (FR001, FR002, ...)
|
|
20
81
|
2. **Componentes técnicos** (Entities, Services, Controllers, Pages)
|
|
@@ -121,7 +182,7 @@ Para cada task, estime tempo em minutos:
|
|
|
121
182
|
|
|
122
183
|
### Passo 6: Gerar `tasks.json`
|
|
123
184
|
|
|
124
|
-
Crie `.morph/
|
|
185
|
+
Crie `.morph/features/$ARGUMENTS/3-tasks/tasks.md` com a estrutura completa de tasks, checkpoints e estimativas.
|
|
125
186
|
|
|
126
187
|
### Passo 7: Incluir Tasks de IaC (se necessário)
|
|
127
188
|
|
|
@@ -130,14 +191,14 @@ Se houver recursos Azure, adicionar tasks de Bicep e migrations.
|
|
|
130
191
|
### Passo 8: Atualizar State
|
|
131
192
|
|
|
132
193
|
```bash
|
|
133
|
-
npx morph-spec state set
|
|
134
|
-
npx morph-spec state set
|
|
135
|
-
npx morph-spec state mark-output
|
|
194
|
+
npx morph-spec state set $ARGUMENTS phase tasks
|
|
195
|
+
npx morph-spec state set $ARGUMENTS tasks.total {N}
|
|
196
|
+
npx morph-spec state mark-output $ARGUMENTS tasks
|
|
136
197
|
```
|
|
137
198
|
|
|
138
199
|
## Outputs Gerados
|
|
139
200
|
|
|
140
|
-
- `.morph/
|
|
201
|
+
- `.morph/features/$ARGUMENTS/3-tasks/tasks.md` - Breakdown completo de tasks
|
|
141
202
|
|
|
142
203
|
## PAUSA OBRIGATÓRIA
|
|
143
204
|
|
|
@@ -161,4 +222,25 @@ Apresente ao usuário 3 ações sugeridas:
|
|
|
161
222
|
|
|
162
223
|
---
|
|
163
224
|
|
|
164
|
-
|
|
225
|
+
## Integração com Superpowers
|
|
226
|
+
|
|
227
|
+
> Disponível quando o plugin `superpowers` está instalado.
|
|
228
|
+
|
|
229
|
+
| Skill | Quando Usar | Invocação |
|
|
230
|
+
|-------|-------------|-----------|
|
|
231
|
+
| `writing-plans` | Após breakdown de tasks, para planejar sequência de implementação | `Skill(superpowers:writing-plans)` |
|
|
232
|
+
| `executing-plans` | Para executar o plano de tasks em sessão separada | `Skill(superpowers:executing-plans)` |
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Outputs desta Fase
|
|
237
|
+
|
|
238
|
+
<!-- morph:outputs:tasks -->
|
|
239
|
+
| Output | Caminho |
|
|
240
|
+
|--------|---------|
|
|
241
|
+
| `tasks` | `.morph/features/{feature}/3-tasks/tasks.md` |
|
|
242
|
+
<!-- /morph:outputs -->
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
Após aprovação: "Planejamento completo! Execute `/morph-apply $ARGUMENTS` para iniciar implementação."
|