@polymorphism-tech/morph-spec 3.0.1 → 3.2.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 +561 -63
- package/LICENSE +72 -72
- package/README.md +275 -79
- package/bin/detect-agents.js +3 -1
- package/bin/morph-spec.js +60 -1
- package/bin/render-template.js +61 -14
- package/bin/semantic-detect-agents.js +2 -1
- package/bin/{task-manager.js → task-manager.cjs} +113 -8
- package/bin/validate-agents-skills.js +10 -4
- package/bin/validate-agents.js +4 -3
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +977 -977
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1048 -1048
- package/docs/api/scripts/collapse.js +38 -38
- package/docs/api/scripts/commonNav.js +28 -28
- package/docs/api/scripts/linenumber.js +25 -25
- package/docs/api/scripts/nav.js +12 -12
- package/docs/api/scripts/polyfill.js +3 -3
- package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -202
- package/docs/api/scripts/prettify/lang-css.js +2 -2
- package/docs/api/scripts/prettify/prettify.js +28 -28
- package/docs/api/scripts/search.js +98 -98
- package/docs/api/styles/jsdoc.css +776 -776
- package/docs/api/styles/prettify.css +80 -80
- package/docs/cli-auto-detection.md +219 -0
- package/docs/examples.md +328 -328
- package/docs/getting-started.md +3 -3
- package/docs/llm-interaction-config.md +735 -0
- package/docs/templates.md +418 -418
- package/docs/troubleshooting.md +269 -0
- package/package.json +7 -3
- package/scripts/postinstall.js +132 -132
- package/scripts/reorganize-skills.cjs +1 -1
- package/scripts/validate-agents-structure.cjs +1 -1
- package/scripts/validate-skills.cjs +2 -2
- package/src/commands/advance-phase.js +93 -2
- package/src/commands/analyze-blazor-concurrency.js +193 -193
- package/src/commands/approve.js +221 -0
- package/src/commands/capture-pattern.js +121 -0
- package/src/commands/create-story.js +5 -2
- package/src/commands/deploy.js +780 -780
- package/src/commands/detect-agents.js +4 -2
- package/src/commands/generate.js +276 -149
- package/src/commands/init.js +37 -0
- package/src/commands/lint-fluent.js +352 -352
- package/src/commands/migrate-state.js +158 -0
- package/src/commands/rollback-phase.js +185 -185
- package/src/commands/search-patterns.js +126 -0
- package/src/commands/session-summary.js +291 -291
- package/src/commands/shard-spec.js +224 -224
- package/src/commands/spawn-team.js +172 -0
- package/src/commands/sprint-status.js +250 -250
- package/src/commands/task.js +3 -3
- package/src/commands/troubleshoot.js +222 -222
- package/src/commands/update.js +36 -0
- package/src/commands/upgrade.js +346 -0
- package/src/commands/validate-blazor-state.js +210 -210
- package/src/commands/validate-blazor.js +156 -156
- package/src/commands/validate-css.js +84 -84
- package/src/commands/validate-phase.js +221 -221
- package/src/generator/.gitkeep +0 -0
- package/src/generator/config-generator.js +206 -0
- package/src/generator/templates/config.json.template +40 -0
- package/src/generator/templates/project.md.template +67 -0
- package/src/lib/blazor-concurrency-analyzer.js +288 -288
- package/src/lib/blazor-state-validator.js +291 -291
- package/src/lib/blazor-validator.js +374 -374
- package/src/lib/checkpoint-hooks.js +258 -0
- package/src/lib/context-generator.js +7 -4
- package/src/lib/css-validator.js +352 -352
- package/src/lib/design-system-generator.js +298 -298
- package/src/lib/hook-executor.js +2 -1
- package/src/lib/learning-system.js +520 -520
- package/src/lib/metadata-extractor.js +380 -0
- package/src/lib/mockup-generator.js +366 -366
- package/src/lib/phase-state-machine.js +214 -0
- package/src/lib/stack-resolver.js +148 -0
- package/src/lib/standards-context-injector.js +4 -3
- package/src/lib/state-manager.js +120 -0
- package/src/lib/team-orchestrator.js +2 -1
- package/src/lib/template-data-sources.js +325 -0
- package/src/lib/troubleshoot-grep.js +204 -194
- package/src/lib/troubleshoot-index.js +144 -144
- package/src/lib/ui-detector.js +350 -350
- package/src/lib/validation-runner.js +2 -1
- package/src/lib/validators/architecture-validator.js +387 -387
- package/src/lib/validators/content-validator.js +351 -0
- package/src/lib/validators/package-validator.js +360 -360
- package/src/lib/validators/ui-contrast-validator.js +422 -422
- package/src/llm/.gitkeep +0 -0
- package/src/llm/analyzer.js +215 -0
- package/src/llm/environment-detector.js +43 -0
- package/src/llm/few-shot-examples.js +216 -0
- package/src/llm/project-config-schema.json +188 -0
- package/src/llm/prompt-builder.js +96 -0
- package/src/llm/schema-validator.js +121 -0
- package/src/orchestrator.js +206 -0
- package/src/sanitizer/.gitkeep +0 -0
- package/src/sanitizer/context-sanitizer.js +221 -0
- package/src/sanitizer/patterns.js +163 -0
- package/src/scanner/.gitkeep +0 -0
- package/src/scanner/project-scanner.js +242 -0
- package/src/types/index.js +477 -0
- package/src/ui/.gitkeep +0 -0
- package/src/ui/diff-display.js +91 -0
- package/src/ui/interactive-wizard.js +96 -0
- package/src/ui/user-review.js +211 -0
- package/src/ui/wizard-questions.js +190 -0
- package/src/utils/file-copier.js +3 -1
- package/src/utils/logger.js +32 -32
- package/src/utils/version-checker.js +175 -175
- package/src/writer/.gitkeep +0 -0
- package/src/writer/file-writer.js +86 -0
- package/{content → stacks/blazor-azure}/.azure/README.md +2 -2
- package/{content → stacks/blazor-azure}/.azure/pipelines/pipeline-variables.yml +1 -1
- package/{content → stacks/blazor-azure}/.azure/pipelines/prod-pipeline.yml +1 -1
- package/{content → stacks/blazor-azure}/.azure/pipelines/staging-pipeline.yml +1 -1
- package/{content → stacks/blazor-azure}/.claude/commands/morph-preflight.md +227 -227
- package/{content → stacks/blazor-azure}/.claude/commands/morph-troubleshoot.md +122 -122
- package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-setup.md +1 -1
- package/{content → stacks/blazor-azure}/.morph/docs/workflows/enforcement-pipeline.md +3 -3
- package/{content → stacks/blazor-azure}/.morph/hooks/README.md +12 -12
- package/{content → stacks/blazor-azure}/.morph/standards/agent-teams-workflow.md +2 -2
- package/{content → stacks/blazor-azure}/.morph/standards/migration-guide.md +2 -2
- package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy-checklist.md +426 -426
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/backend/dotnet-supabase.md +244 -0
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/frontend/nextjs-supabase.md +335 -0
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/infrastructure/easypanel-deployer.md +189 -0
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +170 -0
- package/stacks/nextjs-supabase/.morph/config/agents.json +345 -0
- package/stacks/nextjs-supabase/.morph/config/config.template.json +92 -0
- package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +169 -0
- package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +247 -0
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +697 -0
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +85 -0
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +86 -0
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +498 -0
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +121 -0
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +138 -0
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +162 -0
- package/stacks/nextjs-supabase/.morph/project.md +168 -0
- package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +191 -0
- package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +193 -0
- package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +171 -0
- package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +164 -0
- package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +179 -0
- package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +148 -0
- package/stacks/nextjs-supabase/.morph/templates/contracts.cs +173 -0
- package/stacks/nextjs-supabase/.morph/templates/contracts.ts +168 -0
- package/stacks/nextjs-supabase/.morph/templates/decisions.md +115 -0
- package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +38 -0
- package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +48 -0
- package/stacks/nextjs-supabase/.morph/templates/proposal.md +145 -0
- package/stacks/nextjs-supabase/.morph/templates/recap.md +134 -0
- package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +57 -0
- package/stacks/nextjs-supabase/.morph/templates/spec.md +231 -0
- package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +100 -0
- package/stacks/nextjs-supabase/.morph/templates/tasks.md +257 -0
- package/stacks/nextjs-supabase/CLAUDE.md +149 -0
- package/stacks/nextjs-supabase/README.md +112 -0
- /package/{content → stacks/blazor-azure}/.azure/docs/azure-devops-setup.md +0 -0
- /package/{content → stacks/blazor-azure}/.azure/docs/branch-strategy.md +0 -0
- /package/{content → stacks/blazor-azure}/.azure/docs/local-development.md +0 -0
- /package/{content → stacks/blazor-azure}/.azure/pipelines/templates/build-dotnet.yml +0 -0
- /package/{content → stacks/blazor-azure}/.azure/pipelines/templates/deploy-app-service.yml +0 -0
- /package/{content → stacks/blazor-azure}/.azure/pipelines/templates/deploy-container-app.yml +0 -0
- /package/{content → stacks/blazor-azure}/.azure/pipelines/templates/infra-deploy.yml +0 -0
- /package/{content → stacks/blazor-azure}/.claude/commands/morph-apply.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/commands/morph-archive.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/commands/morph-deploy.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/commands/morph-infra.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/commands/morph-proposal.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/commands/morph-status.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/settings.local.json +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/README.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/code-review.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/morph-checklist.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/simulation-checklist.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/README.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/morph-replicate.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-clarify.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-design.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-tasks.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-uiux.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/README.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/po-pm-advisor.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/prompt-engineer.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/seo-growth-hacker.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/standards-architect.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/dotnet-senior.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/ef-modeler.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/ms-agent-expert.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/blazor-builder.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/nextjs-expert.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/azure-architect.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/container-specialist.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/asaas-financial.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/azure-identity.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/clerk-auth.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/resend-email.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/quality/code-analyzer.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/quality/testing-specialist.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-3-technologies/README.md +0 -0
- /package/{content → stacks/blazor-azure}/.claude/skills/level-4-patterns/README.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/.morphversion +0 -0
- /package/{content → stacks/blazor-azure}/.morph/archive/.gitkeep +0 -0
- /package/{content → stacks/blazor-azure}/.morph/config/agents.json +0 -0
- /package/{content → stacks/blazor-azure}/.morph/config/config.template.json +0 -0
- /package/{content → stacks/blazor-azure}/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/docs/workflows/design-impl.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/docs/workflows/fast-track.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/docs/workflows/full-morph.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/docs/workflows/standard.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/docs/workflows/ui-refresh.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/README.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/contracts.ts +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/spec.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/tasks.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/README.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/contracts.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/decisions.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/spec.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/tasks.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/README.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/contracts.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/spec.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/tasks.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/decisions.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/proposal.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/spec.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/examples/state-v3.json +0 -0
- /package/{content → stacks/blazor-azure}/.morph/features/.gitkeep +0 -0
- /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-agents.sh +0 -0
- /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-all.sh +0 -0
- /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-specs.sh +0 -0
- /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-tests.sh +0 -0
- /package/{content → stacks/blazor-azure}/.morph/hooks/task-completed.js +0 -0
- /package/{content → stacks/blazor-azure}/.morph/hooks/teammate-idle.js +0 -0
- /package/{content → stacks/blazor-azure}/.morph/project.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/schemas/agent.schema.json +0 -0
- /package/{content → stacks/blazor-azure}/.morph/schemas/tasks.schema.json +0 -0
- /package/{content → stacks/blazor-azure}/.morph/specs/.gitkeep +0 -0
- /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-blazor-ui.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-production.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-setup.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-workflows.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/standards/architecture.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/standards/azure.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/standards/coding.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/standards/dotnet10-migration.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/standards/fluent-ui-setup.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/standards/passkeys-auth.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/standards/vector-search-rag.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/state.json +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/CONTEXT-FEATURE.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/CONTEXT.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/FluentDesignTheme.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/MudTheme.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/agent.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/clarify-questions.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/component.razor +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Commands.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Entities.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Queries.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/contracts/README.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/contracts.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/decisions.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/design-system.css +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/.dockerignore.example +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/Dockerfile.example +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/README.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/app-insights.bicep +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/app-service.bicep +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/azure-pipelines-deploy.yml +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/container-app-env.bicep +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/container-app.bicep +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy.ps1 +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy.sh +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/key-vault.bicep +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/main.bicep +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.dev.json +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.prod.json +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.staging.json +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/sql-database.bicep +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/infra/storage.bicep +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/integrations/asaas-client.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/integrations/asaas-webhook.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/integrations/azure-identity-config.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/integrations/clerk-config.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/job.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/migration.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/proposal.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/recap.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/repository.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/saas/subscription.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/saas/tenant.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/service.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/simulation.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/spec.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/sprint-status.yaml +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/state.template.json +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/story.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/tasks.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/test.cs +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/ui-components.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/ui-design-system.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/ui-flows.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/templates/ui-mockups.md +0 -0
- /package/{content → stacks/blazor-azure}/.morph/test-infra/example.bicep +0 -0
- /package/{content → stacks/blazor-azure}/CLAUDE.md +0 -0
- /package/{content → stacks/blazor-azure}/README.md +0 -0
package/CLAUDE.md
CHANGED
|
@@ -2,7 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
> by Polymorphism Tech
|
|
4
4
|
|
|
5
|
-
Sistema de desenvolvimento orientado por especificações. Hub de agentes especializados em multi-stack
|
|
5
|
+
Sistema de desenvolvimento orientado por especificações. Hub de agentes especializados em multi-stack com Infrastructure as Code.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## STACKS DISPONÍVEIS
|
|
10
|
+
|
|
11
|
+
| Stack | Backend | Frontend | Database | Deploy | CLAUDE.md |
|
|
12
|
+
|-------|---------|----------|----------|--------|-----------|
|
|
13
|
+
| **blazor-azure** | .NET 10 Blazor Server | Blazor (C#) | Azure SQL | Azure Container Apps (Bicep) | `stacks/blazor-azure/CLAUDE.md` |
|
|
14
|
+
| **nextjs-supabase** | .NET 10 Minimal API | Next.js 15 | Supabase (PostgreSQL) | EasyPanel (Docker) | `stacks/nextjs-supabase/CLAUDE.md` |
|
|
15
|
+
|
|
16
|
+
Para novos projetos, copie os arquivos da stack desejada:
|
|
17
|
+
```bash
|
|
18
|
+
cp -r stacks/{stack}/.morph/ seu-projeto/.morph/
|
|
19
|
+
cp -r stacks/{stack}/.claude/ seu-projeto/.claude/
|
|
20
|
+
cp stacks/{stack}/CLAUDE.md seu-projeto/CLAUDE.md
|
|
21
|
+
```
|
|
6
22
|
|
|
7
23
|
---
|
|
8
24
|
|
|
@@ -12,7 +28,7 @@ Sistema de desenvolvimento orientado por especificações. Hub de agentes especi
|
|
|
12
28
|
- Pular direto para código sem especificação
|
|
13
29
|
- Implementar sem aprovação do design
|
|
14
30
|
- Ignorar padrões em `.morph/standards/`
|
|
15
|
-
- Criar recursos
|
|
31
|
+
- Criar recursos de infra manualmente (use IaC)
|
|
16
32
|
- Gerar código sem contracts definidos
|
|
17
33
|
|
|
18
34
|
### SEMPRE:
|
|
@@ -20,7 +36,7 @@ Sistema de desenvolvimento orientado por especificações. Hub de agentes especi
|
|
|
20
36
|
- Gerar outputs em `.morph/features/{feature}/`
|
|
21
37
|
- Documentar decisões em `decisions.md`
|
|
22
38
|
- Checkpoint a cada 3 tasks implementadas
|
|
23
|
-
- Usar Infrastructure as Code
|
|
39
|
+
- Usar Infrastructure as Code
|
|
24
40
|
|
|
25
41
|
---
|
|
26
42
|
|
|
@@ -29,98 +45,567 @@ Sistema de desenvolvimento orientado por especificações. Hub de agentes especi
|
|
|
29
45
|
| Fase | Gatilho | Ações | Output | Pausa? |
|
|
30
46
|
|------|---------|-------|--------|--------|
|
|
31
47
|
| **1. SETUP** | Feature request | Ler project.md, identificar stack, ativar agentes, criar pasta | proposal.md | Não |
|
|
32
|
-
| **2. DESIGN** | Setup concluído | Spec + contracts + decisions + custos +
|
|
48
|
+
| **2. DESIGN** | Setup concluído | Spec + contracts + decisions + custos + IaC | spec.md, contracts, decisions.md | **Sim** |
|
|
33
49
|
| **3. CLARIFY** | Design aprovado | Ambiguidades, perguntas, edge cases | Spec atualizado | Não |
|
|
34
50
|
| **4. TASKS** | Clarificações resolvidas | Quebrar em tasks, ordem, checkpoints, dependências | tasks.md | **Sim** |
|
|
35
51
|
| **5. IMPLEMENT** | Tasks aprovadas | Task por task, checkpoint a cada 3, recap | Código + recap.md | Não |
|
|
36
52
|
|
|
37
53
|
---
|
|
38
54
|
|
|
39
|
-
##
|
|
55
|
+
## APPROVAL GATES (Portões de Aprovação)
|
|
56
|
+
|
|
57
|
+
O sistema agora rastreia aprovações explícitas para cada fase crítica em `state.json`.
|
|
58
|
+
|
|
59
|
+
### Gates Obrigatórios
|
|
60
|
+
|
|
61
|
+
| Gate | Quando | Bloqueio | Comando |
|
|
62
|
+
|------|--------|----------|---------|
|
|
63
|
+
| **design** | Após DESIGN concluído | Impede `design → clarify` | `npx morph-spec approve {feature} design` |
|
|
64
|
+
| **tasks** | Após TASKS concluído | Impede `tasks → implement` | `npx morph-spec approve {feature} tasks` |
|
|
65
|
+
|
|
66
|
+
### Workflow com Approval Gates
|
|
40
67
|
|
|
68
|
+
```bash
|
|
69
|
+
# 1. Completar fase DESIGN
|
|
70
|
+
# Sistema gera: spec.md, contracts, decisions.md
|
|
71
|
+
|
|
72
|
+
# 2. PAUSAR e apresentar ao usuário
|
|
73
|
+
# Use AskUserQuestion: "Approve design to proceed to clarify phase?"
|
|
74
|
+
|
|
75
|
+
# 3. Se aprovado pelo usuário:
|
|
76
|
+
npx morph-spec approve {feature} design
|
|
77
|
+
|
|
78
|
+
# 4. Avançar fase (agora permitido)
|
|
79
|
+
npx morph-spec advance-phase {feature} clarify
|
|
80
|
+
|
|
81
|
+
# 5. Mesmo processo para TASKS → IMPLEMENT
|
|
41
82
|
```
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
├── .claude/skills/ # Agent skills
|
|
55
|
-
└── infra/main.bicep + modules/ # IaC
|
|
83
|
+
|
|
84
|
+
### Comandos de Approval
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# Aprovar gate
|
|
88
|
+
npx morph-spec approve {feature} {gate}
|
|
89
|
+
|
|
90
|
+
# Rejeitar com motivo
|
|
91
|
+
npx morph-spec reject {feature} {gate} "Reason here"
|
|
92
|
+
|
|
93
|
+
# Ver status de todas as aprovações
|
|
94
|
+
npx morph-spec approval-status {feature}
|
|
56
95
|
```
|
|
57
96
|
|
|
97
|
+
### Overrides (Usar com Cuidado)
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# Pular verificação de aprovação (não recomendado)
|
|
101
|
+
npx morph-spec advance-phase {feature} {next-phase} --skip-approval
|
|
102
|
+
|
|
103
|
+
# Forçar transição inválida (emergências apenas)
|
|
104
|
+
npx morph-spec advance-phase {feature} {next-phase} --force
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**REGRA CRÍTICA:** SEMPRE apresente outputs ao usuário e obtenha aprovação explícita antes de avançar de DESIGN ou TASKS.
|
|
108
|
+
|
|
58
109
|
---
|
|
59
110
|
|
|
60
|
-
##
|
|
111
|
+
## AUTOMATIC CHECKPOINTS (Validação Automática)
|
|
112
|
+
|
|
113
|
+
A cada 3 tasks completadas, o sistema executa validação automática.
|
|
114
|
+
|
|
115
|
+
### O Que é Validado
|
|
116
|
+
|
|
117
|
+
| Validator | O Que Verifica | Falha Bloqueia? |
|
|
118
|
+
|-----------|----------------|-----------------|
|
|
119
|
+
| **architecture** | DI patterns, Blazor lifecycle, async/await | ✅ Sim |
|
|
120
|
+
| **packages** | Conflitos NuGet, versões incompatíveis | ✅ Sim |
|
|
121
|
+
| **design-system** | CSS compliance, color palette, spacing | ⚠️ Warning |
|
|
122
|
+
| **security** | Secrets expostos, SQL injection, XSS | ✅ Sim |
|
|
123
|
+
|
|
124
|
+
### Comportamento no Checkpoint
|
|
61
125
|
|
|
62
|
-
|
|
126
|
+
```bash
|
|
127
|
+
# Task 3, 6, 9, 12... completadas
|
|
128
|
+
🔍 Running CHECKPOINT 1...
|
|
129
|
+
✅ Architecture: 0 violations
|
|
130
|
+
✅ Packages: 0 conflicts
|
|
131
|
+
⚠️ Design System: 2 warnings (non-blocking)
|
|
132
|
+
✅ Security: 0 issues
|
|
133
|
+
|
|
134
|
+
✅ Checkpoint 1 passed
|
|
63
135
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
| **Cost Guardian** | Custos, alertas, bloqueios |
|
|
136
|
+
# Se checkpoint FALHAR:
|
|
137
|
+
❌ Checkpoint 2 failed!
|
|
138
|
+
- Architecture: DbContext injected directly in component
|
|
139
|
+
- Security: API key hardcoded in appsettings.json
|
|
69
140
|
|
|
70
|
-
|
|
141
|
+
❌ Task NOT marked done. Fix violations before proceeding.
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Configuração
|
|
145
|
+
|
|
146
|
+
Edite `.morph/config/llm-interaction.json`:
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"checkpoints": {
|
|
151
|
+
"frequency": 3,
|
|
152
|
+
"autoValidate": true,
|
|
153
|
+
"validators": {
|
|
154
|
+
"enabled": ["architecture", "packages", "security"]
|
|
155
|
+
},
|
|
156
|
+
"onFailure": {
|
|
157
|
+
"blockProgress": true,
|
|
158
|
+
"maxRetries": 3
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
```
|
|
71
163
|
|
|
72
|
-
|
|
164
|
+
**IMPORTANTE:** Se checkpoint falha 3 vezes, use `AskUserQuestion` para decidir: simplificar implementação, pular validador (arriscado), ou escalar para troubleshooting-expert.
|
|
73
165
|
|
|
74
166
|
---
|
|
75
167
|
|
|
76
|
-
##
|
|
168
|
+
## PHASE VALIDATION RULES (Validação Estrita)
|
|
169
|
+
|
|
170
|
+
O sistema agora impede transições de fase inválidas com **state machine**.
|
|
171
|
+
|
|
172
|
+
### Transições Válidas
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
proposal → setup
|
|
176
|
+
setup → uiux | design
|
|
177
|
+
uiux → design
|
|
178
|
+
design → clarify
|
|
179
|
+
clarify → tasks
|
|
180
|
+
tasks → implement
|
|
181
|
+
implement → sync | archived
|
|
182
|
+
sync → archived
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### 5 Gates de Validação
|
|
186
|
+
|
|
187
|
+
Ao avançar fase, o sistema verifica (em ordem):
|
|
188
|
+
|
|
189
|
+
1. **State Machine:** Transição é válida? (`proposal → implement` ❌)
|
|
190
|
+
2. **Approval Gates:** Gate foi aprovado? (`design` ou `tasks` gates)
|
|
191
|
+
3. **Output Requirements:** Arquivos obrigatórios existem? (spec.md, tasks.json)
|
|
192
|
+
4. **Spec Content:** `spec.md` tem todas as seções? (Overview, Requirements, Technical Design, Data Model, API Contracts)
|
|
193
|
+
5. **Tasks Content:** `tasks.json` tem estrutura válida? (IDs, descriptions, dependencies válidas, sem ciclos)
|
|
194
|
+
|
|
195
|
+
### Exemplo de Bloqueio
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
npx morph-spec advance-phase user-auth implement
|
|
199
|
+
|
|
200
|
+
❌ Invalid phase transition: design → implement
|
|
201
|
+
Valid next phases: clarify
|
|
202
|
+
|
|
203
|
+
❌ Approval gate 'design' not approved
|
|
204
|
+
Run: npx morph-spec approve user-auth design
|
|
205
|
+
|
|
206
|
+
❌ Spec validation failed:
|
|
207
|
+
- Missing section: ## Data Model
|
|
208
|
+
- Missing section: ## API Contracts
|
|
209
|
+
|
|
210
|
+
Fix these issues before proceeding.
|
|
211
|
+
```
|
|
77
212
|
|
|
78
|
-
|
|
79
|
-
|-------|--------|-----------|
|
|
80
|
-
| Sem aprovação | Free tier | Nenhum |
|
|
81
|
-
| Com aprovação | Até $10/mês | Confirmação |
|
|
82
|
-
| Acima de $10 | Justificativa | ADR |
|
|
213
|
+
**REGRA:** Nunca pule fases. Se precisa pular (ex: feature simples sem UIUX), documente em `decisions.md` ADR e use `--force`.
|
|
83
214
|
|
|
84
215
|
---
|
|
85
216
|
|
|
86
|
-
##
|
|
217
|
+
## AGENT INVOCATION PATTERNS (Spawning de Agentes)
|
|
218
|
+
|
|
219
|
+
Use **Task tool** para spawnar subagentes quando apropriado.
|
|
220
|
+
|
|
221
|
+
### Quando Spawnar Agentes
|
|
222
|
+
|
|
223
|
+
Spawnar subagentes quando:
|
|
224
|
+
|
|
225
|
+
- **5+ agentes ativos** (conforme state.activeAgents)
|
|
226
|
+
- **Multi-domínio** (backend + frontend + infra)
|
|
227
|
+
- **15+ arquivos** a modificar
|
|
228
|
+
- **Complexidade: high ou critical**
|
|
229
|
+
|
|
230
|
+
### Pattern 1: Squad Leader Spawning
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
// Use Task tool
|
|
234
|
+
{
|
|
235
|
+
subagent_type: "general-purpose",
|
|
236
|
+
description: "Implement backend API layer",
|
|
237
|
+
prompt: `You are the Backend Squad Leader (dotnet-senior)...
|
|
238
|
+
|
|
239
|
+
Your Domain Leaders:
|
|
240
|
+
- ef-modeler: Database/EF Core layer
|
|
241
|
+
- api-designer: REST endpoints + DTOs
|
|
242
|
+
- event-architect: Domain events + Hangfire jobs
|
|
243
|
+
|
|
244
|
+
Your Mission: Implement user authentication API
|
|
245
|
+
|
|
246
|
+
Feature Spec: [Include spec.md summary]
|
|
247
|
+
|
|
248
|
+
Standards:
|
|
249
|
+
- .morph/standards/coding.md
|
|
250
|
+
- .morph/standards/architecture.md
|
|
251
|
+
- .morph/standards/dotnet10-compatibility.md
|
|
87
252
|
|
|
88
|
-
|
|
253
|
+
Your Tasks (from tasks.json):
|
|
254
|
+
- T001: Create User entity + DbContext
|
|
255
|
+
- T002: Implement UserService with password hashing
|
|
256
|
+
- T003: Create AuthController with login/register endpoints
|
|
89
257
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
258
|
+
Deliverables:
|
|
259
|
+
- Entities/User.cs
|
|
260
|
+
- Data/AppDbContext.cs
|
|
261
|
+
- Services/UserService.cs
|
|
262
|
+
- Controllers/AuthController.cs
|
|
263
|
+
- DTOs (LoginRequest, RegisterRequest, AuthResponse)
|
|
264
|
+
- Migrations
|
|
265
|
+
|
|
266
|
+
Constraints:
|
|
267
|
+
- Use IDbContextFactory (not direct DbContext injection)
|
|
268
|
+
- BCrypt for password hashing
|
|
269
|
+
- JWT tokens (not sessions)
|
|
270
|
+
|
|
271
|
+
Report back when complete with file list + any blockers.`
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Pattern 2: Get Team Hierarchy Helper
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
# Gera configurações prontas para Task tool
|
|
279
|
+
npx morph-spec spawn-team {feature}
|
|
280
|
+
|
|
281
|
+
# Output: JSON configs para cada squadmate
|
|
282
|
+
{
|
|
283
|
+
"teammates": [
|
|
284
|
+
{
|
|
285
|
+
"agent": "dotnet-senior",
|
|
286
|
+
"role": "Backend Squad Leader",
|
|
287
|
+
"taskConfig": { ... }
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"agent": "ef-modeler",
|
|
291
|
+
"role": "Database Layer",
|
|
292
|
+
"taskConfig": { ... }
|
|
293
|
+
}
|
|
294
|
+
]
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Pattern 3: Sequential Handoff
|
|
299
|
+
|
|
300
|
+
```typescript
|
|
301
|
+
// 1. Backend squad gera API contracts
|
|
302
|
+
Task tool → dotnet-senior → generates contracts.cs
|
|
303
|
+
|
|
304
|
+
// 2. AGUARDAR conclusão (não spawnar frontend ainda)
|
|
305
|
+
|
|
306
|
+
// 3. Frontend squad usa contracts no contexto
|
|
307
|
+
Task tool → nextjs-senior → uses contracts.cs for type generation
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Agent Context Template
|
|
311
|
+
|
|
312
|
+
Use `.morph/templates/agent-context.md` para gerar contexto consistente:
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
node bin/render-template.js agent-context \
|
|
316
|
+
--feature=user-auth \
|
|
317
|
+
--agent=dotnet-senior \
|
|
318
|
+
--output=.morph/temp/agent-context.txt
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
**REGRA:** Sempre inclua spec.md summary, standards relevantes, e tasks específicas no prompt do agente.
|
|
95
322
|
|
|
96
323
|
---
|
|
97
324
|
|
|
98
|
-
##
|
|
325
|
+
## METADATA & QUICK ACCESS (Acesso Rápido)
|
|
326
|
+
|
|
327
|
+
Para features grandes, use `metadata.json` para acesso rápido (reduz uso de tokens em 60-80%).
|
|
328
|
+
|
|
329
|
+
### Quando Usar metadata.json
|
|
330
|
+
|
|
331
|
+
**USE metadata.json para:**
|
|
332
|
+
- Quick status (fase atual, progresso %)
|
|
333
|
+
- Lista de agentes ativos
|
|
334
|
+
- Resumo de decisões (ADRs com links)
|
|
335
|
+
- Histórico de checkpoints
|
|
336
|
+
|
|
337
|
+
**USE arquivos .md completos para:**
|
|
338
|
+
- Spec técnico detalhado
|
|
339
|
+
- User stories completas
|
|
340
|
+
- Diagramas e arquitetura
|
|
341
|
+
|
|
342
|
+
### Estrutura do metadata.json
|
|
343
|
+
|
|
344
|
+
```json
|
|
345
|
+
{
|
|
346
|
+
"version": "1.0.0",
|
|
347
|
+
"feature": "user-authentication",
|
|
348
|
+
"status": "active",
|
|
349
|
+
"phase": "implement",
|
|
350
|
+
|
|
351
|
+
"spec": {
|
|
352
|
+
"id": "user-auth",
|
|
353
|
+
"status": "Approved",
|
|
354
|
+
"complexity": "Medium",
|
|
355
|
+
"summary": {
|
|
356
|
+
"problem": "Users need secure login/register...",
|
|
357
|
+
"solution": "JWT-based auth with BCrypt...",
|
|
358
|
+
"tags": ["security", "authentication", "jwt"]
|
|
359
|
+
},
|
|
360
|
+
"requirements": ["REQ1: JWT tokens", "REQ2: BCrypt hashing"],
|
|
361
|
+
"dataModel": ["User entity", "RefreshToken entity"]
|
|
362
|
+
},
|
|
363
|
+
|
|
364
|
+
"decisions": {
|
|
365
|
+
"decisions": [
|
|
366
|
+
{
|
|
367
|
+
"id": "ADR-001",
|
|
368
|
+
"title": "JWT vs Sessions",
|
|
369
|
+
"summary": "Chose JWT for stateless auth...",
|
|
370
|
+
"fullPath": ".morph/features/user-auth/decisions.md#adr-001"
|
|
371
|
+
}
|
|
372
|
+
]
|
|
373
|
+
},
|
|
374
|
+
|
|
375
|
+
"tasks": {
|
|
376
|
+
"total": 12,
|
|
377
|
+
"completed": 8,
|
|
378
|
+
"progress": "67%"
|
|
379
|
+
},
|
|
380
|
+
|
|
381
|
+
"agents": ["dotnet-senior", "ef-modeler", "api-designer"],
|
|
382
|
+
|
|
383
|
+
"checkpoints": [
|
|
384
|
+
{ "num": 1, "passed": true, "timestamp": "2026-02-14T10:30:00Z" },
|
|
385
|
+
{ "num": 2, "passed": true, "timestamp": "2026-02-14T11:45:00Z" }
|
|
386
|
+
],
|
|
387
|
+
|
|
388
|
+
"quickLinks": {
|
|
389
|
+
"spec": ".morph/features/user-auth/spec.md",
|
|
390
|
+
"tasks": ".morph/features/user-auth/tasks.json",
|
|
391
|
+
"decisions": ".morph/features/user-auth/decisions.md"
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
```
|
|
99
395
|
|
|
100
|
-
|
|
396
|
+
### Workflow
|
|
101
397
|
|
|
102
|
-
|
|
398
|
+
```bash
|
|
399
|
+
# 1. Antes de trabalhar na feature, leia metadata.json
|
|
400
|
+
cat .morph/project/outputs/user-auth/metadata.json
|
|
103
401
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
| `{{DATE}}`, `{{AUTHOR}}`, `{{NAMESPACE}}` | Auto from config.json |
|
|
402
|
+
# 2. Metadata auto-atualizado após cada task
|
|
403
|
+
# (Configurado em llm-interaction.json: "updateFrequency": "on_task_done")
|
|
404
|
+
|
|
405
|
+
# 3. Ou gere manualmente
|
|
406
|
+
npx morph-spec generate metadata user-auth
|
|
407
|
+
```
|
|
111
408
|
|
|
112
|
-
###
|
|
409
|
+
### Configuração
|
|
410
|
+
|
|
411
|
+
```json
|
|
412
|
+
{
|
|
413
|
+
"metadata": {
|
|
414
|
+
"autoGenerate": true,
|
|
415
|
+
"updateFrequency": "on_task_done"
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
## LEARNING SYSTEM (Biblioteca de Patterns)
|
|
423
|
+
|
|
424
|
+
Capture e reutilize patterns bem-sucedidos em `.morph/memory/patterns-learned.md`.
|
|
425
|
+
|
|
426
|
+
### Antes de Começar Nova Feature
|
|
113
427
|
|
|
114
428
|
```bash
|
|
115
|
-
|
|
116
|
-
|
|
429
|
+
# Buscar patterns relevantes
|
|
430
|
+
npx morph-spec search-patterns "blazor state"
|
|
431
|
+
npx morph-spec search-patterns "background job"
|
|
432
|
+
npx morph-spec search-patterns "bicep naming"
|
|
433
|
+
|
|
434
|
+
# Output:
|
|
435
|
+
🔍 Found 3 pattern(s) for: "blazor state"
|
|
436
|
+
|
|
437
|
+
1. Blazor DbContext Lifecycle
|
|
438
|
+
Category: Anti-Pattern to Avoid
|
|
439
|
+
Source: Framework standard
|
|
440
|
+
|
|
441
|
+
Problem: Directly injecting DbContext in Blazor components...
|
|
442
|
+
|
|
443
|
+
Correct Approach:
|
|
444
|
+
[Inject] IDbContextFactory<AppDbContext> DbFactory { get; set; }
|
|
445
|
+
...
|
|
117
446
|
```
|
|
118
447
|
|
|
119
|
-
###
|
|
448
|
+
### Após Completar Feature
|
|
120
449
|
|
|
121
|
-
|
|
450
|
+
```bash
|
|
451
|
+
# Capturar pattern bem-sucedido
|
|
452
|
+
npx morph-spec capture-pattern user-auth success "JWT refresh token rotation"
|
|
122
453
|
|
|
123
|
-
|
|
454
|
+
# Capturar anti-pattern (o que evitar)
|
|
455
|
+
npx morph-spec capture-pattern user-auth avoid "Storing tokens in localStorage"
|
|
456
|
+
|
|
457
|
+
# Capturar otimização
|
|
458
|
+
npx morph-spec capture-pattern user-auth optimization "EF Core query splitting for N+1"
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
### Categorias de Patterns
|
|
462
|
+
|
|
463
|
+
| Categoria | Quando Usar |
|
|
464
|
+
|-----------|-------------|
|
|
465
|
+
| `success` | Abordagens comprovadas para replicar |
|
|
466
|
+
| `avoid` | Anti-patterns e erros cometidos |
|
|
467
|
+
| `optimization` | Melhorias de performance |
|
|
468
|
+
| `security` | Best practices de segurança |
|
|
469
|
+
| `convention` | Convenções do projeto (naming, estrutura) |
|
|
470
|
+
| `best-practice` | Práticas gerais recomendadas |
|
|
471
|
+
|
|
472
|
+
### Pattern Library Pré-Seeded
|
|
473
|
+
|
|
474
|
+
O framework já vem com 11 patterns em `.morph/memory/patterns-learned.md`:
|
|
475
|
+
|
|
476
|
+
- Blazor DbContext Lifecycle (anti-pattern)
|
|
477
|
+
- Background Job Retry Strategy (best practice)
|
|
478
|
+
- Azure Bicep Resource Naming (convention)
|
|
479
|
+
- API Versioning Strategy (architecture)
|
|
480
|
+
- EF Core Migration Naming (convention)
|
|
481
|
+
- Blazor DI Registration Order (best practice)
|
|
482
|
+
- Component Parameter Validation (best practice)
|
|
483
|
+
- Async Method Naming (convention)
|
|
484
|
+
- Error Handling Strategy (best practice)
|
|
485
|
+
- Bicep Output Exports (convention)
|
|
486
|
+
- Azure Key Vault Secrets (security)
|
|
487
|
+
|
|
488
|
+
**REGRA:** Sempre busque patterns antes de começar. Capture patterns após completar. Biblioteca cresce com o tempo.
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## INTERACTIVE DECISIONS (Decisões Estruturadas)
|
|
493
|
+
|
|
494
|
+
Use **AskUserQuestion** com templates estruturados em `.morph/templates/decision-prompts.md`.
|
|
495
|
+
|
|
496
|
+
### Quando Usar AskUserQuestion
|
|
497
|
+
|
|
498
|
+
**SEMPRE use para:**
|
|
499
|
+
- Escolhas arquiteturais (múltiplas abordagens válidas)
|
|
500
|
+
- Clarificação de escopo (requisitos ambíguos)
|
|
501
|
+
- Override de validators (checkpoint failures)
|
|
502
|
+
- Pular fases (features simples sem UIUX)
|
|
503
|
+
- Breaking changes (API versioning, migrations)
|
|
504
|
+
|
|
505
|
+
### Pattern 1: Arquitetura Choice
|
|
506
|
+
|
|
507
|
+
```markdown
|
|
508
|
+
I've designed two approaches for "user-authentication":
|
|
509
|
+
|
|
510
|
+
**Option A: JWT with HttpOnly Cookies**
|
|
511
|
+
- Pros: XSS protection, automatic CSRF with SameSite
|
|
512
|
+
- Cons: Harder CORS, mobile app compatibility
|
|
513
|
+
- Cost: +2 tasks (CSRF middleware)
|
|
514
|
+
|
|
515
|
+
**Option B: JWT in Authorization Header**
|
|
516
|
+
- Pros: Simpler CORS, better mobile support
|
|
517
|
+
- Cons: Requires manual XSS protection
|
|
518
|
+
- Cost: +1 task (XSS sanitization)
|
|
519
|
+
|
|
520
|
+
Recommendation: Option A (more secure for web apps)
|
|
521
|
+
|
|
522
|
+
Which approach do you prefer?
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
### Pattern 2: Scope Clarification
|
|
526
|
+
|
|
527
|
+
```markdown
|
|
528
|
+
Analyzing "scheduled-reports" feature. Need clarification:
|
|
529
|
+
|
|
530
|
+
1. **Scope:** Include email delivery or just generation?
|
|
531
|
+
2. **Users:** For admins only or all authenticated users?
|
|
532
|
+
3. **Priority:** Critical (deploy this week) or enhancement (iterate)?
|
|
533
|
+
4. **Format:** PDF only or PDF + Excel + CSV?
|
|
534
|
+
|
|
535
|
+
Please clarify so I can generate accurate spec.
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
### Pattern 3: Validator Override
|
|
539
|
+
|
|
540
|
+
```markdown
|
|
541
|
+
Checkpoint failed 3 times:
|
|
542
|
+
|
|
543
|
+
**Error:** Architecture validator - "DbContext injected directly in ReportsPage.razor"
|
|
544
|
+
|
|
545
|
+
**Attempts:**
|
|
546
|
+
1. Tried refactoring to service layer - still triggered (service was scoped)
|
|
547
|
+
2. Tried IDbContextFactory - validator didn't detect pattern
|
|
548
|
+
3. Re-read architecture.md - our implementation is correct per standard
|
|
549
|
+
|
|
550
|
+
**Options:**
|
|
551
|
+
1. Skip architecture validator for this checkpoint (risky)
|
|
552
|
+
2. Simplify implementation (use in-memory data, no DB)
|
|
553
|
+
3. Escalate to troubleshooting-expert agent
|
|
554
|
+
4. Pause for your guidance
|
|
555
|
+
|
|
556
|
+
What should I do?
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
### Pattern 4: Task Ordering
|
|
560
|
+
|
|
561
|
+
```markdown
|
|
562
|
+
Task dependency conflict detected in "user-auth":
|
|
563
|
+
|
|
564
|
+
**Circular dependency:**
|
|
565
|
+
- T003 (AuthController) depends on T005 (JWT service)
|
|
566
|
+
- T005 (JWT service) depends on T003 (AuthController contracts)
|
|
567
|
+
|
|
568
|
+
**Proposed resolution:**
|
|
569
|
+
1. Split T003 into T003a (contracts/DTOs) and T003b (controller implementation)
|
|
570
|
+
2. Order: T003a → T005 → T003b
|
|
571
|
+
|
|
572
|
+
Approve this task breakdown?
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
### Templates Disponíveis
|
|
576
|
+
|
|
577
|
+
Veja `.morph/templates/decision-prompts.md` para templates completos:
|
|
578
|
+
- Scope Clarification
|
|
579
|
+
- Architecture Choice
|
|
580
|
+
- Task Ordering Conflict
|
|
581
|
+
- Validation Failure Recovery
|
|
582
|
+
- Breaking Change Approval
|
|
583
|
+
- Phase Skip Justification
|
|
584
|
+
|
|
585
|
+
**REGRA:** Sempre forneça contexto, 2-3 opções específicas, trade-offs, e sua recomendação. Usuário decide.
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
589
|
+
## ESTRUTURA DO FRAMEWORK
|
|
590
|
+
|
|
591
|
+
```
|
|
592
|
+
morph-spec-framework/
|
|
593
|
+
├── stacks/
|
|
594
|
+
│ ├── blazor-azure/ # Stack Blazor + Azure
|
|
595
|
+
│ │ ├── CLAUDE.md
|
|
596
|
+
│ │ ├── .morph/{config, standards, templates, examples}
|
|
597
|
+
│ │ └── .claude/{skills, commands}
|
|
598
|
+
│ │
|
|
599
|
+
│ └── nextjs-supabase/ # Stack Next.js + Supabase
|
|
600
|
+
│ ├── CLAUDE.md
|
|
601
|
+
│ ├── .morph/{config, standards, templates, examples}
|
|
602
|
+
│ └── .claude/{skills}
|
|
603
|
+
│
|
|
604
|
+
├── framework/ # Compartilhado entre stacks
|
|
605
|
+
│ └── standards/{13 files} # coding, architecture, blazor-*, css-*
|
|
606
|
+
│
|
|
607
|
+
└── src/ # CLI (morph-spec)
|
|
608
|
+
```
|
|
124
609
|
|
|
125
610
|
---
|
|
126
611
|
|
|
@@ -132,18 +617,31 @@ node bin/render-template.js <template> <output> <vars-json>
|
|
|
132
617
|
| `/morph-apply {feature}` | Implementar feature (fase 5) |
|
|
133
618
|
| `/morph-status` | Dashboard |
|
|
134
619
|
| `/morph-archive {feature}` | Arquivar feature concluída |
|
|
135
|
-
| `/morph-infra {action}` | Gerenciar infra Bicep |
|
|
136
|
-
| `/morph-preflight` | Validação pre-deploy
|
|
620
|
+
| `/morph-infra {action}` | Gerenciar infra (Bicep ou Docker) |
|
|
621
|
+
| `/morph-preflight` | Validação pre-deploy |
|
|
137
622
|
| `/morph-troubleshoot {error}` | Troubleshooting de erros |
|
|
138
623
|
|
|
139
624
|
---
|
|
140
625
|
|
|
626
|
+
## TEMPLATES
|
|
627
|
+
|
|
628
|
+
> SEMPRE use `bin/render-template.js` para renderizar. NUNCA preencha placeholders manualmente.
|
|
629
|
+
|
|
630
|
+
| Placeholder | Exemplo |
|
|
631
|
+
|-------------|---------|
|
|
632
|
+
| `{{FEATURE_NAME}}` | `scheduled-reports` |
|
|
633
|
+
| `{{FEATURE_NAME_PASCAL}}` | `ScheduledReports` |
|
|
634
|
+
| `{{STACK}}` | `Blazor` ou `NextjsSupabase` |
|
|
635
|
+
| `{{DATE}}`, `{{AUTHOR}}`, `{{NAMESPACE}}` | Auto from config.json |
|
|
636
|
+
|
|
637
|
+
---
|
|
638
|
+
|
|
141
639
|
## REFERÊNCIAS
|
|
142
640
|
|
|
143
|
-
-
|
|
144
|
-
-
|
|
145
|
-
-
|
|
146
|
-
-
|
|
641
|
+
- `stacks/{stack}/CLAUDE.md` — Instruções específicas da stack
|
|
642
|
+
- `stacks/{stack}/.morph/standards/` — Standards da stack
|
|
643
|
+
- `stacks/{stack}/.morph/config/agents.json` — Agentes da stack
|
|
644
|
+
- `framework/standards/` — Standards compartilhados (coding, architecture)
|
|
147
645
|
|
|
148
646
|
---
|
|
149
647
|
|