@polymorphism-tech/morph-spec 3.2.0 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -14
- package/bin/detect-agents.js +1 -1
- package/bin/morph-spec.js +403 -40
- package/bin/validate.js +5 -5
- package/docs/getting-started.md +0 -5
- package/docs/next-generation/AGENTS.md +521 -0
- package/docs/next-generation/ANALYSIS.md +555 -0
- package/docs/next-generation/ARCHITECTURE.md +436 -0
- package/docs/next-generation/CONTEXT-OPTIMIZATION.md +267 -0
- package/docs/next-generation/EXECUTION-FLOW.md +274 -0
- package/docs/next-generation/FEATURES.md +688 -0
- package/docs/next-generation/META-PROMPTS.md +235 -0
- package/docs/next-generation/MIGRATION-GUIDE.md +253 -0
- package/docs/next-generation/README.md +231 -0
- package/docs/next-generation/ROADMAP.md +801 -0
- package/docs/next-generation/THREAD-MANAGEMENT.md +240 -0
- package/docs/validation-checklist.md +0 -1
- package/package.json +5 -5
- package/src/commands/agents/agents-fuse.js +96 -0
- package/src/commands/agents/index.js +4 -0
- package/src/commands/agents/micro-agent.js +112 -0
- package/src/commands/{spawn-team.js → agents/spawn-team.js} +237 -172
- package/src/commands/agents/squad-template.js +146 -0
- package/src/commands/analytics/analytics.js +176 -0
- package/src/commands/context/context-prime.js +63 -0
- package/src/commands/context/core-four.js +54 -0
- package/src/commands/{create-story.js → feature/create-story.js} +357 -354
- package/src/commands/feature/index.js +6 -0
- package/src/commands/{shard-spec.js → feature/shard-spec.js} +2 -2
- package/src/commands/{sprint-status.js → feature/sprint-status.js} +1 -1
- package/src/commands/{generate-context.js → generation/generate-context.js} +40 -40
- package/src/commands/{generate.js → generation/generate.js} +4 -4
- package/src/commands/generation/index.js +5 -0
- package/src/commands/index.js +16 -0
- package/src/commands/{capture-pattern.js → learning/capture-pattern.js} +121 -121
- package/src/commands/learning/index.js +5 -0
- package/src/commands/mcp/mcp.js +102 -0
- package/src/commands/{detect-agents.js → project/detect-agents.js} +178 -178
- package/src/commands/project/detect-workflow.js +174 -0
- package/src/commands/{detect.js → project/detect.js} +104 -104
- package/src/commands/{doctor.js → project/doctor.js} +221 -4
- package/src/commands/project/index.js +10 -0
- package/src/commands/{init.js → project/init.js} +305 -295
- package/src/commands/{sync.js → project/sync.js} +167 -167
- package/src/commands/{update.js → project/update.js} +240 -240
- package/src/commands/{advance-phase.js → state/advance-phase.js} +101 -25
- package/src/commands/{approve.js → state/approve.js} +221 -221
- package/src/commands/state/index.js +8 -0
- package/src/commands/{rollback-phase.js → state/rollback-phase.js} +185 -185
- package/src/commands/{state.js → state/state.js} +334 -334
- package/src/commands/{validate-phase.js → state/validate-phase.js} +221 -221
- package/src/commands/tasks/index.js +4 -0
- package/src/commands/{task.js → tasks/task.js} +78 -78
- package/src/commands/templates/index.js +8 -0
- package/src/commands/templates/template-customize.js +101 -0
- package/src/commands/templates/template-list.js +128 -0
- package/src/commands/templates/template-render.js +174 -0
- package/src/commands/templates/template-show.js +131 -0
- package/src/commands/templates/template-validate.js +91 -0
- package/src/commands/threads/thread-template.js +103 -0
- package/src/commands/threads/threads.js +261 -0
- package/src/commands/trust/trust.js +205 -0
- package/src/commands/utils/index.js +7 -0
- package/src/commands/{session-summary.js → utils/session-summary.js} +291 -291
- package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
- package/src/commands/{analyze-blazor-concurrency.js → validation/analyze-blazor-concurrency.js} +193 -193
- package/src/commands/validation/index.js +8 -0
- package/src/commands/{lint-fluent.js → validation/lint-fluent.js} +352 -352
- package/src/commands/{validate-blazor-state.js → validation/validate-blazor-state.js} +210 -210
- package/src/commands/{validate-blazor.js → validation/validate-blazor.js} +156 -156
- package/src/commands/{validate-css.js → validation/validate-css.js} +84 -84
- package/src/core/index.js +10 -0
- package/src/{orchestrator.js → core/orchestrator.js} +8 -8
- package/src/core/registry/command-registry.js +302 -0
- package/src/core/registry/index.js +8 -0
- package/src/core/registry/validator-registry.js +204 -0
- package/src/core/state/index.js +8 -0
- package/src/{lib → core/state}/phase-state-machine.js +214 -214
- package/src/{lib → core/state}/state-manager.js +588 -534
- package/src/core/templates/index.js +9 -0
- package/src/core/templates/template-registry.js +335 -0
- package/src/core/templates/template-renderer.js +477 -0
- package/src/core/templates/template-validator.js +296 -0
- package/src/core/workflows/index.js +7 -0
- package/src/core/workflows/workflow-detector.js +452 -0
- package/src/lib/agents/micro-agent-factory.js +161 -0
- package/src/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
- package/src/lib/analysis/index.js +7 -0
- package/src/lib/analytics/analytics-engine.js +345 -0
- package/src/lib/{checkpoint-hooks.js → checkpoints/checkpoint-hooks.js} +35 -0
- package/src/lib/checkpoints/index.js +7 -0
- package/src/lib/context/context-bundler.js +240 -0
- package/src/lib/context/context-optimizer.js +212 -0
- package/src/lib/context/context-tracker.js +273 -0
- package/src/lib/context/core-four-tracker.js +201 -0
- package/src/lib/context/mcp-optimizer.js +200 -0
- package/src/lib/detectors/config-detector.js +223 -223
- package/src/lib/detectors/conversation-analyzer.js +163 -163
- package/src/lib/{design-system-detector.js → detectors/design-system-detector.js} +187 -187
- package/src/lib/detectors/index.js +87 -84
- package/src/lib/detectors/standards-generator.js +275 -275
- package/src/lib/detectors/structure-detector.js +245 -245
- package/src/lib/execution/fusion-executor.js +304 -0
- package/src/lib/execution/parallel-executor.js +270 -0
- package/src/lib/{context-generator.js → generators/context-generator.js} +526 -516
- package/src/lib/generators/index.js +10 -0
- package/src/lib/{metadata-extractor.js → generators/metadata-extractor.js} +387 -380
- package/src/lib/{recap-generator.js → generators/recap-generator.js} +205 -205
- package/src/lib/hooks/hook-executor.js +169 -0
- package/src/lib/hooks/stop-hook-executor.js +286 -0
- package/src/lib/hops/hop-composer.js +221 -0
- package/src/lib/learning/index.js +7 -0
- package/src/lib/orchestration/index.js +7 -0
- package/src/lib/{team-orchestrator.js → orchestration/team-orchestrator.js} +323 -323
- package/src/lib/stacks/index.js +7 -0
- package/src/lib/{stack-resolver.js → stacks/stack-resolver.js} +180 -148
- package/src/lib/standards/index.js +7 -0
- package/src/lib/{standards-context-injector.js → standards/standards-context-injector.js} +298 -288
- package/src/lib/threads/thread-coordinator.js +238 -0
- package/src/lib/threads/thread-manager.js +317 -0
- package/src/lib/tracking/artifact-trail.js +202 -0
- package/src/lib/troubleshooting/index.js +8 -0
- package/src/lib/{troubleshoot-grep.js → troubleshooting/troubleshoot-grep.js} +204 -204
- package/src/lib/{troubleshoot-index.js → troubleshooting/troubleshoot-index.js} +144 -144
- package/src/lib/trust/trust-manager.js +269 -0
- package/src/lib/validators/{architecture-validator.js → architecture/architecture-validator.js} +8 -8
- package/src/lib/validators/architecture/index.js +7 -0
- package/src/lib/{blazor-concurrency-analyzer.js → validators/blazor/blazor-concurrency-analyzer.js} +277 -288
- package/src/lib/{blazor-state-validator.js → validators/blazor/blazor-state-validator.js} +279 -291
- package/src/lib/{blazor-validator.js → validators/blazor/blazor-validator.js} +369 -374
- package/src/lib/validators/blazor/index.js +9 -0
- package/src/lib/validators/{content-validator.js → content/content-validator.js} +351 -351
- package/src/lib/validators/content/index.js +7 -0
- package/src/lib/validators/{contract-compliance-validator.js → contracts/contract-compliance-validator.js} +273 -273
- package/src/lib/validators/contracts/index.js +7 -0
- package/src/lib/{css-validator.js → validators/css/css-validator.js} +352 -352
- package/src/lib/validators/css/index.js +7 -0
- package/src/lib/validators/{design-system-validator.js → design-system/design-system-validator.js} +231 -231
- package/src/lib/validators/design-system/index.js +7 -0
- package/src/lib/validators/packages/index.js +7 -0
- package/src/lib/validators/shared/index.js +12 -0
- package/src/lib/validators/shared/issue-counter.js +18 -0
- package/src/lib/validators/shared/result-formatter.js +124 -0
- package/src/lib/{spec-validator.js → validators/spec-validator.js} +258 -258
- package/src/lib/validators/ui/index.js +7 -0
- package/src/lib/{validation-runner.js → validators/validation-runner.js} +286 -284
- package/src/ui/wizard-questions.js +0 -2
- package/src/utils/color-utils.js +70 -0
- package/src/utils/file-copier.js +188 -189
- package/src/utils/process-handler.js +97 -0
- package/stacks/blazor-azure/.morph/config/agents.json +948 -764
- package/stacks/blazor-azure/.morph/hooks/{pre-commit-tests.sh → pre-commit/tests-csharp.sh} +3 -2
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +41 -0
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +24 -0
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +23 -0
- package/stacks/nextjs-supabase/.morph/config/agents.json +345 -345
- package/stacks/nextjs-supabase/.morph/hooks/pre-commit/tests-typescript.sh +61 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +22 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +22 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +35 -0
- package/stacks/nextjs-supabase/README.md +6 -15
- package/CLAUDE.md +0 -648
- package/bin/render-template.js +0 -349
- package/bin/semantic-detect-agents.js +0 -247
- package/bin/validate-agents-skills.js +0 -257
- package/bin/validate-agents.js +0 -70
- package/bin/validate-phase.js +0 -263
- package/docs/examples.md +0 -328
- package/docs/llm-interaction-config.md +0 -735
- package/scripts/reorganize-skills.cjs +0 -175
- package/scripts/validate-agents-structure.cjs +0 -52
- package/scripts/validate-skills.cjs +0 -180
- package/src/commands/deploy.js +0 -780
- package/src/commands/migrate-state.js +0 -158
- package/src/commands/upgrade.js +0 -346
- package/src/lib/continuous-validator.js +0 -421
- package/src/lib/decision-constraint-loader.js +0 -109
- package/src/lib/design-system-scaffolder.js +0 -299
- package/src/lib/hook-executor.js +0 -257
- package/src/lib/mockup-generator.js +0 -366
- package/src/lib/ui-detector.js +0 -350
- package/src/llm/schema-validator.js +0 -121
- package/src/sanitizer/.gitkeep +0 -0
- package/src/scanner/.gitkeep +0 -0
- package/src/types/index.js +0 -477
- package/src/ui/.gitkeep +0 -0
- package/src/writer/.gitkeep +0 -0
- package/stacks/blazor-azure/.azure/README.md +0 -293
- package/stacks/blazor-azure/.azure/docs/azure-devops-setup.md +0 -454
- package/stacks/blazor-azure/.azure/docs/branch-strategy.md +0 -398
- package/stacks/blazor-azure/.azure/docs/local-development.md +0 -515
- package/stacks/blazor-azure/.azure/pipelines/pipeline-variables.yml +0 -34
- package/stacks/blazor-azure/.azure/pipelines/prod-pipeline.yml +0 -319
- package/stacks/blazor-azure/.azure/pipelines/staging-pipeline.yml +0 -234
- package/stacks/blazor-azure/.azure/pipelines/templates/build-dotnet.yml +0 -75
- package/stacks/blazor-azure/.azure/pipelines/templates/deploy-app-service.yml +0 -94
- package/stacks/blazor-azure/.azure/pipelines/templates/deploy-container-app.yml +0 -120
- package/stacks/blazor-azure/.azure/pipelines/templates/infra-deploy.yml +0 -90
- package/stacks/blazor-azure/.claude/commands/morph-apply.md +0 -221
- package/stacks/blazor-azure/.claude/commands/morph-archive.md +0 -79
- package/stacks/blazor-azure/.claude/commands/morph-deploy.md +0 -529
- package/stacks/blazor-azure/.claude/commands/morph-infra.md +0 -209
- package/stacks/blazor-azure/.claude/commands/morph-preflight.md +0 -227
- package/stacks/blazor-azure/.claude/commands/morph-proposal.md +0 -122
- package/stacks/blazor-azure/.claude/commands/morph-status.md +0 -86
- package/stacks/blazor-azure/.claude/commands/morph-troubleshoot.md +0 -122
- package/stacks/blazor-azure/.claude/settings.local.json +0 -15
- package/stacks/blazor-azure/.claude/skills/level-0-meta/README.md +0 -7
- package/stacks/blazor-azure/.claude/skills/level-0-meta/code-review.md +0 -226
- package/stacks/blazor-azure/.claude/skills/level-0-meta/morph-checklist.md +0 -117
- package/stacks/blazor-azure/.claude/skills/level-0-meta/simulation-checklist.md +0 -77
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/README.md +0 -7
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/morph-replicate.md +0 -213
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-clarify.md +0 -131
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-design.md +0 -213
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-setup.md +0 -106
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-tasks.md +0 -164
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-uiux.md +0 -169
- package/stacks/blazor-azure/.claude/skills/level-2-domains/README.md +0 -14
- package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +0 -192
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/po-pm-advisor.md +0 -197
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/prompt-engineer.md +0 -189
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/seo-growth-hacker.md +0 -320
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/standards-architect.md +0 -156
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +0 -287
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +0 -113
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +0 -126
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +0 -109
- package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/blazor-builder.md +0 -210
- package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/nextjs-expert.md +0 -154
- package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +0 -191
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-architect.md +0 -142
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +0 -699
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +0 -126
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/container-specialist.md +0 -131
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +0 -119
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/asaas-financial.md +0 -130
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/azure-identity.md +0 -142
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/clerk-auth.md +0 -108
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/resend-email.md +0 -119
- package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/code-analyzer.md +0 -235
- package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/testing-specialist.md +0 -126
- package/stacks/blazor-azure/.claude/skills/level-3-technologies/README.md +0 -7
- package/stacks/blazor-azure/.claude/skills/level-4-patterns/README.md +0 -7
- package/stacks/blazor-azure/.morph/archive/.gitkeep +0 -25
- package/stacks/blazor-azure/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -392
- package/stacks/blazor-azure/.morph/docs/workflows/design-impl.md +0 -37
- package/stacks/blazor-azure/.morph/docs/workflows/enforcement-pipeline.md +0 -668
- package/stacks/blazor-azure/.morph/docs/workflows/fast-track.md +0 -29
- package/stacks/blazor-azure/.morph/docs/workflows/full-morph.md +0 -76
- package/stacks/blazor-azure/.morph/docs/workflows/standard.md +0 -44
- package/stacks/blazor-azure/.morph/docs/workflows/ui-refresh.md +0 -39
- package/stacks/blazor-azure/.morph/examples/api-nextjs/README.md +0 -241
- package/stacks/blazor-azure/.morph/examples/api-nextjs/contracts.ts +0 -307
- package/stacks/blazor-azure/.morph/examples/api-nextjs/spec.md +0 -399
- package/stacks/blazor-azure/.morph/examples/api-nextjs/tasks.md +0 -168
- package/stacks/blazor-azure/.morph/examples/micro-saas/README.md +0 -125
- package/stacks/blazor-azure/.morph/examples/micro-saas/contracts.cs +0 -358
- package/stacks/blazor-azure/.morph/examples/micro-saas/decisions.md +0 -246
- package/stacks/blazor-azure/.morph/examples/micro-saas/spec.md +0 -236
- package/stacks/blazor-azure/.morph/examples/micro-saas/tasks.md +0 -150
- package/stacks/blazor-azure/.morph/examples/multi-agent/README.md +0 -309
- package/stacks/blazor-azure/.morph/examples/multi-agent/contracts.cs +0 -433
- package/stacks/blazor-azure/.morph/examples/multi-agent/spec.md +0 -479
- package/stacks/blazor-azure/.morph/examples/multi-agent/tasks.md +0 -185
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/decisions.md +0 -158
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/proposal.md +0 -95
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/spec.md +0 -267
- package/stacks/blazor-azure/.morph/examples/state-v3.json +0 -188
- package/stacks/blazor-azure/.morph/features/.gitkeep +0 -25
- package/stacks/blazor-azure/.morph/hooks/README.md +0 -348
- package/stacks/blazor-azure/.morph/hooks/pre-commit-agents.sh +0 -24
- package/stacks/blazor-azure/.morph/hooks/pre-commit-all.sh +0 -48
- package/stacks/blazor-azure/.morph/hooks/pre-commit-specs.sh +0 -49
- package/stacks/blazor-azure/.morph/hooks/task-completed.js +0 -73
- package/stacks/blazor-azure/.morph/hooks/teammate-idle.js +0 -68
- package/stacks/blazor-azure/.morph/schemas/agent.schema.json +0 -296
- package/stacks/blazor-azure/.morph/schemas/tasks.schema.json +0 -220
- package/stacks/blazor-azure/.morph/specs/.gitkeep +0 -20
- package/stacks/blazor-azure/.morph/standards/agent-framework-blazor-ui.md +0 -359
- package/stacks/blazor-azure/.morph/standards/agent-framework-production.md +0 -410
- package/stacks/blazor-azure/.morph/standards/agent-framework-setup.md +0 -413
- package/stacks/blazor-azure/.morph/standards/agent-framework-workflows.md +0 -349
- package/stacks/blazor-azure/.morph/standards/agent-teams-workflow.md +0 -474
- package/stacks/blazor-azure/.morph/standards/architecture.md +0 -325
- package/stacks/blazor-azure/.morph/standards/azure.md +0 -605
- package/stacks/blazor-azure/.morph/standards/coding.md +0 -377
- package/stacks/blazor-azure/.morph/standards/dotnet10-migration.md +0 -520
- package/stacks/blazor-azure/.morph/standards/fluent-ui-setup.md +0 -590
- package/stacks/blazor-azure/.morph/standards/migration-guide.md +0 -514
- package/stacks/blazor-azure/.morph/standards/passkeys-auth.md +0 -423
- package/stacks/blazor-azure/.morph/standards/vector-search-rag.md +0 -536
- package/stacks/blazor-azure/.morph/templates/CONTEXT-FEATURE.md +0 -276
- package/stacks/blazor-azure/.morph/templates/CONTEXT.md +0 -170
- package/stacks/blazor-azure/.morph/templates/FluentDesignTheme.cs +0 -149
- package/stacks/blazor-azure/.morph/templates/MudTheme.cs +0 -281
- package/stacks/blazor-azure/.morph/templates/agent.cs +0 -163
- package/stacks/blazor-azure/.morph/templates/clarify-questions.md +0 -159
- package/stacks/blazor-azure/.morph/templates/component.razor +0 -239
- package/stacks/blazor-azure/.morph/templates/contracts/Commands.cs +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts/Entities.cs +0 -25
- package/stacks/blazor-azure/.morph/templates/contracts/Queries.cs +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts/README.md +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts.cs +0 -217
- package/stacks/blazor-azure/.morph/templates/decisions.md +0 -123
- package/stacks/blazor-azure/.morph/templates/design-system.css +0 -226
- package/stacks/blazor-azure/.morph/templates/infra/.dockerignore.example +0 -89
- package/stacks/blazor-azure/.morph/templates/infra/Dockerfile.example +0 -82
- package/stacks/blazor-azure/.morph/templates/infra/README.md +0 -286
- package/stacks/blazor-azure/.morph/templates/infra/app-insights.bicep +0 -63
- package/stacks/blazor-azure/.morph/templates/infra/app-service.bicep +0 -164
- package/stacks/blazor-azure/.morph/templates/infra/azure-pipelines-deploy.yml +0 -480
- package/stacks/blazor-azure/.morph/templates/infra/container-app-env.bicep +0 -49
- package/stacks/blazor-azure/.morph/templates/infra/container-app.bicep +0 -156
- package/stacks/blazor-azure/.morph/templates/infra/deploy-checklist.md +0 -426
- package/stacks/blazor-azure/.morph/templates/infra/deploy.ps1 +0 -229
- package/stacks/blazor-azure/.morph/templates/infra/deploy.sh +0 -208
- package/stacks/blazor-azure/.morph/templates/infra/key-vault.bicep +0 -91
- package/stacks/blazor-azure/.morph/templates/infra/main.bicep +0 -189
- package/stacks/blazor-azure/.morph/templates/infra/parameters.dev.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/parameters.prod.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/parameters.staging.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/sql-database.bicep +0 -103
- package/stacks/blazor-azure/.morph/templates/infra/storage.bicep +0 -106
- package/stacks/blazor-azure/.morph/templates/integrations/asaas-client.cs +0 -387
- package/stacks/blazor-azure/.morph/templates/integrations/asaas-webhook.cs +0 -351
- package/stacks/blazor-azure/.morph/templates/integrations/azure-identity-config.cs +0 -288
- package/stacks/blazor-azure/.morph/templates/integrations/clerk-config.cs +0 -258
- package/stacks/blazor-azure/.morph/templates/job.cs +0 -171
- package/stacks/blazor-azure/.morph/templates/migration.cs +0 -83
- package/stacks/blazor-azure/.morph/templates/proposal.md +0 -141
- package/stacks/blazor-azure/.morph/templates/recap.md +0 -94
- package/stacks/blazor-azure/.morph/templates/repository.cs +0 -141
- package/stacks/blazor-azure/.morph/templates/saas/subscription.cs +0 -347
- package/stacks/blazor-azure/.morph/templates/saas/tenant.cs +0 -338
- package/stacks/blazor-azure/.morph/templates/service.cs +0 -139
- package/stacks/blazor-azure/.morph/templates/simulation.md +0 -353
- package/stacks/blazor-azure/.morph/templates/spec.md +0 -149
- package/stacks/blazor-azure/.morph/templates/sprint-status.yaml +0 -68
- package/stacks/blazor-azure/.morph/templates/state.template.json +0 -222
- package/stacks/blazor-azure/.morph/templates/story.md +0 -143
- package/stacks/blazor-azure/.morph/templates/tasks.md +0 -257
- package/stacks/blazor-azure/.morph/templates/test.cs +0 -239
- package/stacks/blazor-azure/.morph/templates/ui-components.md +0 -362
- package/stacks/blazor-azure/.morph/templates/ui-design-system.md +0 -286
- package/stacks/blazor-azure/.morph/templates/ui-flows.md +0 -336
- package/stacks/blazor-azure/.morph/templates/ui-mockups.md +0 -133
- package/stacks/blazor-azure/.morph/test-infra/example.bicep +0 -59
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/backend/dotnet-supabase.md +0 -244
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/frontend/nextjs-supabase.md +0 -335
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/infrastructure/easypanel-deployer.md +0 -189
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +0 -170
- package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +0 -169
- package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +0 -247
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +0 -697
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +0 -85
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +0 -86
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +0 -498
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +0 -121
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +0 -138
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +0 -162
- package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +0 -191
- package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +0 -193
- package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +0 -171
- package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +0 -164
- package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +0 -179
- package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +0 -148
- package/stacks/nextjs-supabase/.morph/templates/contracts.cs +0 -173
- package/stacks/nextjs-supabase/.morph/templates/contracts.ts +0 -168
- package/stacks/nextjs-supabase/.morph/templates/decisions.md +0 -115
- package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +0 -38
- package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +0 -48
- package/stacks/nextjs-supabase/.morph/templates/proposal.md +0 -145
- package/stacks/nextjs-supabase/.morph/templates/recap.md +0 -134
- package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +0 -57
- package/stacks/nextjs-supabase/.morph/templates/spec.md +0 -231
- package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +0 -100
- package/stacks/nextjs-supabase/.morph/templates/tasks.md +0 -257
- /package/src/commands/{search-patterns.js → learning/search-patterns.js} +0 -0
- /package/src/{lib → core/templates}/template-data-sources.js +0 -0
- /package/src/lib/{design-system-generator.js → generators/design-system-generator.js} +0 -0
- /package/src/lib/{learning-system.js → learning/learning-system.js} +0 -0
- /package/src/lib/validators/{package-validator.js → packages/package-validator.js} +0 -0
- /package/src/lib/validators/{ui-contrast-validator.js → ui/ui-contrast-validator.js} +0 -0
- /package/{src/generator → stacks/blazor-azure/.morph/templates}/.gitkeep +0 -0
- /package/{src/llm → stacks/nextjs-supabase/.morph/templates}/.gitkeep +0 -0
|
@@ -1,353 +0,0 @@
|
|
|
1
|
-
# Template: Simulacao de Servicos Externos
|
|
2
|
-
|
|
3
|
-
> Template para configurar modo de simulacao em projetos .NET
|
|
4
|
-
|
|
5
|
-
## Configuracao
|
|
6
|
-
|
|
7
|
-
### appsettings.Development.json
|
|
8
|
-
|
|
9
|
-
```json
|
|
10
|
-
{
|
|
11
|
-
"Simulation": {
|
|
12
|
-
"Enabled": true,
|
|
13
|
-
"ImageDelayMs": 500,
|
|
14
|
-
"EmailDelayMs": 100,
|
|
15
|
-
"PaymentDelayMs": 200,
|
|
16
|
-
"PlaceholderImageUrl": "https://picsum.photos/1024/1024"
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
### SimulationOptions.cs
|
|
22
|
-
|
|
23
|
-
```csharp
|
|
24
|
-
namespace {Namespace}.Infrastructure.Options;
|
|
25
|
-
|
|
26
|
-
public class SimulationOptions
|
|
27
|
-
{
|
|
28
|
-
public bool Enabled { get; set; }
|
|
29
|
-
public int ImageDelayMs { get; set; } = 500;
|
|
30
|
-
public int EmailDelayMs { get; set; } = 100;
|
|
31
|
-
public int PaymentDelayMs { get; set; } = 200;
|
|
32
|
-
public string PlaceholderImageUrl { get; set; } = "https://picsum.photos/1024/1024";
|
|
33
|
-
}
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## DI Condicional
|
|
39
|
-
|
|
40
|
-
### Program.cs
|
|
41
|
-
|
|
42
|
-
```csharp
|
|
43
|
-
// Configurar options
|
|
44
|
-
builder.Services.Configure<SimulationOptions>(
|
|
45
|
-
builder.Configuration.GetSection("Simulation"));
|
|
46
|
-
|
|
47
|
-
// Registrar clientes baseado em modo
|
|
48
|
-
var simulationEnabled = builder.Configuration.GetValue<bool>("Simulation:Enabled");
|
|
49
|
-
|
|
50
|
-
if (simulationEnabled)
|
|
51
|
-
{
|
|
52
|
-
builder.Services.AddSimulationClients();
|
|
53
|
-
builder.Services.AddSingleton<IStartupFilter, SimulationWarningStartupFilter>();
|
|
54
|
-
}
|
|
55
|
-
else
|
|
56
|
-
{
|
|
57
|
-
builder.Services.AddProductionClients(builder.Configuration);
|
|
58
|
-
}
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### ServiceCollectionExtensions.cs
|
|
62
|
-
|
|
63
|
-
```csharp
|
|
64
|
-
namespace {Namespace}.Infrastructure.Extensions;
|
|
65
|
-
|
|
66
|
-
public static class ServiceCollectionExtensions
|
|
67
|
-
{
|
|
68
|
-
public static IServiceCollection AddSimulationClients(this IServiceCollection services)
|
|
69
|
-
{
|
|
70
|
-
// ========================================
|
|
71
|
-
// STATEFUL (mantem dados) → SINGLETON
|
|
72
|
-
// ========================================
|
|
73
|
-
services.AddSingleton<IReplicateClient, FakeReplicateClient>();
|
|
74
|
-
services.AddSingleton<IPaymentClient, FakePaymentClient>();
|
|
75
|
-
|
|
76
|
-
// ========================================
|
|
77
|
-
// STATELESS → SCOPED
|
|
78
|
-
// ========================================
|
|
79
|
-
services.AddScoped<IEmailClient, FakeEmailClient>();
|
|
80
|
-
|
|
81
|
-
// ========================================
|
|
82
|
-
// DEPENDENCIAS TRANSITIVAS - NAO ESQUECER!
|
|
83
|
-
// ========================================
|
|
84
|
-
services.AddHttpClient("FakeImageDownloader");
|
|
85
|
-
services.AddScoped<IImageDownloader>(sp =>
|
|
86
|
-
{
|
|
87
|
-
var httpClientFactory = sp.GetRequiredService<IHttpClientFactory>();
|
|
88
|
-
var httpClient = httpClientFactory.CreateClient("FakeImageDownloader");
|
|
89
|
-
var logger = sp.GetRequiredService<ILogger<FakeImageDownloader>>();
|
|
90
|
-
var options = sp.GetRequiredService<IOptions<SimulationOptions>>();
|
|
91
|
-
return new FakeImageDownloader(httpClient, logger, options);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
return services;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
public static IServiceCollection AddProductionClients(
|
|
98
|
-
this IServiceCollection services,
|
|
99
|
-
IConfiguration configuration)
|
|
100
|
-
{
|
|
101
|
-
// Clientes reais com HttpClient tipado
|
|
102
|
-
services.AddHttpClient<IReplicateClient, ReplicateClient>();
|
|
103
|
-
services.AddHttpClient<IPaymentClient, AsaasClient>();
|
|
104
|
-
services.AddHttpClient<IEmailClient, ResendClient>();
|
|
105
|
-
services.AddHttpClient<IImageDownloader, HttpImageDownloader>();
|
|
106
|
-
|
|
107
|
-
return services;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## Exemplos de Fake Clients
|
|
115
|
-
|
|
116
|
-
### FakeReplicateClient (Stateful → Singleton)
|
|
117
|
-
|
|
118
|
-
```csharp
|
|
119
|
-
public class FakeReplicateClient : IReplicateClient
|
|
120
|
-
{
|
|
121
|
-
// Stateful - REQUER Singleton
|
|
122
|
-
private readonly Dictionary<string, FakePrediction> _predictions = new();
|
|
123
|
-
private readonly ILogger<FakeReplicateClient> _logger;
|
|
124
|
-
private readonly SimulationOptions _options;
|
|
125
|
-
|
|
126
|
-
public FakeReplicateClient(
|
|
127
|
-
ILogger<FakeReplicateClient> logger,
|
|
128
|
-
IOptions<SimulationOptions> options)
|
|
129
|
-
{
|
|
130
|
-
_logger = logger;
|
|
131
|
-
_options = options.Value;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
public Task<string> CreatePredictionAsync(CreatePredictionRequest request, CancellationToken ct)
|
|
135
|
-
{
|
|
136
|
-
var id = Guid.NewGuid().ToString();
|
|
137
|
-
_predictions[id] = new FakePrediction
|
|
138
|
-
{
|
|
139
|
-
Id = id,
|
|
140
|
-
Status = "processing",
|
|
141
|
-
Prompt = request.Input.Prompt,
|
|
142
|
-
CreatedAt = DateTime.UtcNow
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
_logger.LogInformation(
|
|
146
|
-
"[SIMULATED] Created prediction {Id} with prompt: {Prompt}",
|
|
147
|
-
id, request.Input.Prompt?.Substring(0, Math.Min(50, request.Input.Prompt.Length)));
|
|
148
|
-
|
|
149
|
-
return Task.FromResult(id);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
public async Task<PredictionResult> WaitForPredictionAsync(string id, CancellationToken ct)
|
|
153
|
-
{
|
|
154
|
-
if (!_predictions.TryGetValue(id, out var prediction))
|
|
155
|
-
throw new InvalidOperationException($"Prediction {id} not found");
|
|
156
|
-
|
|
157
|
-
// Simular delay de processamento
|
|
158
|
-
await Task.Delay(_options.ImageDelayMs, ct);
|
|
159
|
-
|
|
160
|
-
var style = ExtractStyleFromPrompt(prediction.Prompt);
|
|
161
|
-
|
|
162
|
-
_logger.LogInformation(
|
|
163
|
-
"[SIMULATED] Prediction {Id} completed. Style: {Style}",
|
|
164
|
-
id, style);
|
|
165
|
-
|
|
166
|
-
return new PredictionResult
|
|
167
|
-
{
|
|
168
|
-
Id = id,
|
|
169
|
-
Status = "succeeded",
|
|
170
|
-
Output = _options.PlaceholderImageUrl
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
private static string ExtractStyleFromPrompt(string? prompt)
|
|
175
|
-
{
|
|
176
|
-
if (string.IsNullOrEmpty(prompt)) return "Default";
|
|
177
|
-
|
|
178
|
-
var lowerPrompt = prompt.ToLowerInvariant();
|
|
179
|
-
|
|
180
|
-
// IMPORTANTE: Atualizar conforme prompts REAIS do projeto
|
|
181
|
-
if (lowerPrompt.Contains("movie poster")) return "MoviePoster";
|
|
182
|
-
if (lowerPrompt.Contains("impressionist")) return "Impressionist";
|
|
183
|
-
if (lowerPrompt.Contains("baroque")) return "Baroque";
|
|
184
|
-
if (lowerPrompt.Contains("watercolor")) return "Watercolor";
|
|
185
|
-
|
|
186
|
-
return "Default";
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
private class FakePrediction
|
|
190
|
-
{
|
|
191
|
-
public string Id { get; init; } = "";
|
|
192
|
-
public string Status { get; set; } = "";
|
|
193
|
-
public string? Prompt { get; init; }
|
|
194
|
-
public DateTime CreatedAt { get; init; }
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
### FakeEmailClient (Stateless → Scoped)
|
|
200
|
-
|
|
201
|
-
```csharp
|
|
202
|
-
public class FakeEmailClient : IEmailClient
|
|
203
|
-
{
|
|
204
|
-
private readonly ILogger<FakeEmailClient> _logger;
|
|
205
|
-
private readonly SimulationOptions _options;
|
|
206
|
-
|
|
207
|
-
public FakeEmailClient(
|
|
208
|
-
ILogger<FakeEmailClient> logger,
|
|
209
|
-
IOptions<SimulationOptions> options)
|
|
210
|
-
{
|
|
211
|
-
_logger = logger;
|
|
212
|
-
_options = options.Value;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
public async Task<string?> SendEmailAsync(
|
|
216
|
-
string to,
|
|
217
|
-
string subject,
|
|
218
|
-
string htmlBody,
|
|
219
|
-
IReadOnlyList<EmailAttachment>? attachments = null,
|
|
220
|
-
CancellationToken ct = default)
|
|
221
|
-
{
|
|
222
|
-
await Task.Delay(_options.EmailDelayMs, ct);
|
|
223
|
-
|
|
224
|
-
var attachmentCount = attachments?.Count ?? 0;
|
|
225
|
-
|
|
226
|
-
_logger.LogInformation(
|
|
227
|
-
"[SIMULATED] Email sent to {To}. Subject: {Subject}. Attachments: {Count}",
|
|
228
|
-
to, subject, attachmentCount);
|
|
229
|
-
|
|
230
|
-
return $"fake-message-{Guid.NewGuid():N}";
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
### FakeImageDownloader (Stateless → Scoped)
|
|
236
|
-
|
|
237
|
-
```csharp
|
|
238
|
-
public class FakeImageDownloader : IImageDownloader
|
|
239
|
-
{
|
|
240
|
-
private readonly HttpClient _httpClient;
|
|
241
|
-
private readonly ILogger<FakeImageDownloader> _logger;
|
|
242
|
-
private readonly SimulationOptions _options;
|
|
243
|
-
|
|
244
|
-
public FakeImageDownloader(
|
|
245
|
-
HttpClient httpClient,
|
|
246
|
-
ILogger<FakeImageDownloader> logger,
|
|
247
|
-
IOptions<SimulationOptions> options)
|
|
248
|
-
{
|
|
249
|
-
_httpClient = httpClient;
|
|
250
|
-
_logger = logger;
|
|
251
|
-
_options = options.Value;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
public async Task<byte[]> DownloadAsync(string url, CancellationToken ct)
|
|
255
|
-
{
|
|
256
|
-
_logger.LogInformation(
|
|
257
|
-
"[SIMULATED] Downloading image from placeholder instead of {Url}",
|
|
258
|
-
url);
|
|
259
|
-
|
|
260
|
-
// Baixa imagem real do placeholder
|
|
261
|
-
var response = await _httpClient.GetAsync(_options.PlaceholderImageUrl, ct);
|
|
262
|
-
response.EnsureSuccessStatusCode();
|
|
263
|
-
|
|
264
|
-
return await response.Content.ReadAsByteArrayAsync(ct);
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
---
|
|
270
|
-
|
|
271
|
-
## Startup Warning
|
|
272
|
-
|
|
273
|
-
```csharp
|
|
274
|
-
public class SimulationWarningStartupFilter : IStartupFilter
|
|
275
|
-
{
|
|
276
|
-
private readonly ILogger<SimulationWarningStartupFilter> _logger;
|
|
277
|
-
|
|
278
|
-
public SimulationWarningStartupFilter(ILogger<SimulationWarningStartupFilter> logger)
|
|
279
|
-
{
|
|
280
|
-
_logger = logger;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
|
|
284
|
-
{
|
|
285
|
-
_logger.LogWarning(
|
|
286
|
-
"⚠️ SIMULATION MODE ENABLED - External services are being simulated!");
|
|
287
|
-
|
|
288
|
-
return next;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
---
|
|
294
|
-
|
|
295
|
-
## Dependency Trace Template
|
|
296
|
-
|
|
297
|
-
Antes de implementar, preencher este trace:
|
|
298
|
-
|
|
299
|
-
```markdown
|
|
300
|
-
## Dependency Trace para Simulacao
|
|
301
|
-
|
|
302
|
-
### Feature: {Nome da Feature}
|
|
303
|
-
|
|
304
|
-
### Fluxo Principal:
|
|
305
|
-
1. Controller/Page chama {ServiceA}
|
|
306
|
-
2. {ServiceA} chama {IExternalClient}
|
|
307
|
-
3. {IExternalClient} retorna dados
|
|
308
|
-
4. {ServiceA} chama {IDependenciaTransitiva} ← NAO ESQUECER!
|
|
309
|
-
|
|
310
|
-
### Servicos a Mockar:
|
|
311
|
-
| Interface | Fake | Lifetime | Motivo |
|
|
312
|
-
|-----------|------|----------|--------|
|
|
313
|
-
| IReplicateClient | FakeReplicateClient | Singleton | Stateful (Dictionary) |
|
|
314
|
-
| IEmailClient | FakeEmailClient | Scoped | Stateless |
|
|
315
|
-
| IImageDownloader | FakeImageDownloader | Scoped | Stateless |
|
|
316
|
-
|
|
317
|
-
### Checklist:
|
|
318
|
-
- [ ] Todas as interfaces mapeadas
|
|
319
|
-
- [ ] Lifetimes definidos corretamente
|
|
320
|
-
- [ ] Dependencias transitivas identificadas
|
|
321
|
-
- [ ] Assinaturas de metodos verificadas
|
|
322
|
-
- [ ] Prompts/payloads atuais lidos (se IA)
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
---
|
|
326
|
-
|
|
327
|
-
## Checklist Rapido
|
|
328
|
-
|
|
329
|
-
```markdown
|
|
330
|
-
### Pre-Implementacao:
|
|
331
|
-
- [ ] Listar TODAS as interfaces envolvidas no fluxo
|
|
332
|
-
- [ ] Verificar dependencias transitivas (DI graph)
|
|
333
|
-
- [ ] Ler assinaturas COMPLETAS das interfaces
|
|
334
|
-
- [ ] Verificar lifetimes necessarios (Singleton vs Scoped)
|
|
335
|
-
|
|
336
|
-
### Para mocks de IA:
|
|
337
|
-
- [ ] Ler prompts/payloads ATUAIS do codigo
|
|
338
|
-
- [ ] Verificar formato de response da API real
|
|
339
|
-
- [ ] Testar com dados reais primeiro (1 chamada) antes de mockar
|
|
340
|
-
|
|
341
|
-
### Para mocks de Email:
|
|
342
|
-
- [ ] Verificar se ha attachments/inline images
|
|
343
|
-
- [ ] Testar renderizacao do template separadamente
|
|
344
|
-
|
|
345
|
-
### Pos-Implementacao:
|
|
346
|
-
- [ ] Build passa: `dotnet build`
|
|
347
|
-
- [ ] DI valido: `dotnet run` sem erros
|
|
348
|
-
- [ ] Fluxo funciona em modo simulacao
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
---
|
|
352
|
-
|
|
353
|
-
*MORPH-SPEC Simulation Template*
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
# Feature Specification: {{FEATURE_NAME_TITLE}}
|
|
2
|
-
|
|
3
|
-
| Field | Value |
|
|
4
|
-
|-------|-------|
|
|
5
|
-
| **ID** | {{FEATURE_NAME}} |
|
|
6
|
-
| **Status** | Draft / In Review / Approved / In Progress / Done |
|
|
7
|
-
| **Created** | {{DATE}} |
|
|
8
|
-
| **Stack** | {{STACK}} |
|
|
9
|
-
| **Complexity** | Low / Medium / High |
|
|
10
|
-
| **Estimated Cost** | $X/month |
|
|
11
|
-
| **Agents** | Core: All / Specialists: {list} |
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Overview
|
|
16
|
-
|
|
17
|
-
**Problem:** {What problem this feature solves}
|
|
18
|
-
|
|
19
|
-
**Solution:** {High-level solution}
|
|
20
|
-
|
|
21
|
-
**Success Criteria:**
|
|
22
|
-
- [ ] {Criterion 1}
|
|
23
|
-
- [ ] {Criterion 2}
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Requirements
|
|
28
|
-
|
|
29
|
-
**Functional:** FR1: {desc} | FR2: {desc} | FR3: {desc}
|
|
30
|
-
|
|
31
|
-
**Non-Functional:** NFR1: Performance - {target} | NFR2: Reliability - {target}
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## User Stories
|
|
36
|
-
|
|
37
|
-
### US001: {Title}
|
|
38
|
-
**As** {user type} **I want** {feature} **so that** {benefit}
|
|
39
|
-
|
|
40
|
-
**Acceptance Criteria:** 1. {criterion} 2. {criterion}
|
|
41
|
-
|
|
42
|
-
**Edge Cases:** {edge case}: {handling}
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## Technical Design
|
|
47
|
-
|
|
48
|
-
### Stack
|
|
49
|
-
| Component | Technology |
|
|
50
|
-
|-----------|------------|
|
|
51
|
-
| Frontend | {Blazor Server / Next.js} |
|
|
52
|
-
| Backend | .NET 10 / C# 14 |
|
|
53
|
-
| Database | {Azure SQL / Cosmos DB} |
|
|
54
|
-
|
|
55
|
-
### Data Model
|
|
56
|
-
|
|
57
|
-
#### {EntityName}
|
|
58
|
-
| Column | Type | Constraints |
|
|
59
|
-
|--------|------|-------------|
|
|
60
|
-
| Id | Guid | PK |
|
|
61
|
-
| {Property} | {Type} | {Constraints} |
|
|
62
|
-
| CreatedAt | datetime2 | Default: GETUTCDATE() |
|
|
63
|
-
|
|
64
|
-
### Contracts
|
|
65
|
-
|
|
66
|
-
> **Ref:** `framework/standards/blazor-efcore.md` for background operations
|
|
67
|
-
|
|
68
|
-
```csharp
|
|
69
|
-
public interface I{{FEATURE_NAME_PASCAL}}Service
|
|
70
|
-
{
|
|
71
|
-
Task<{{FEATURE_NAME_PASCAL}}Dto> GetByIdAsync(int id);
|
|
72
|
-
Task<{{FEATURE_NAME_PASCAL}}Dto> CreateAsync(Create{{FEATURE_NAME_PASCAL}}Request request);
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
**Contracts Workflow:** Generate `contracts.cs` FIRST → validate names → reference in spec → approve with user.
|
|
77
|
-
|
|
78
|
-
**Validation Checklist:**
|
|
79
|
-
- [ ] Property names are descriptive (not generic "Data", "Value")
|
|
80
|
-
- [ ] Records use correct types (Stream vs byte[], Guid vs string)
|
|
81
|
-
- [ ] Response DTOs have all properties needed for UI
|
|
82
|
-
- [ ] Request DTOs have implicit validations (required, nullable)
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## UI/UX Design (if front-end)
|
|
87
|
-
|
|
88
|
-
### Wireframes
|
|
89
|
-
```
|
|
90
|
-
{ASCII wireframe per screen - include states: loading, error, empty}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### User Flow
|
|
94
|
-
1. {Step} → {System response}
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## Flows
|
|
99
|
-
|
|
100
|
-
### {Flow Name}
|
|
101
|
-
**Trigger:** {what starts this flow}
|
|
102
|
-
1. {Actor} {action} → {system response}
|
|
103
|
-
2. If {condition}: Path A / Else: Path B
|
|
104
|
-
**End State:** {final state}
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## Cost Estimate
|
|
109
|
-
|
|
110
|
-
| Resource | SKU | Monthly Cost | Justification |
|
|
111
|
-
|----------|-----|--------------|---------------|
|
|
112
|
-
| {Resource} | {SKU} | ${X} | {Why} |
|
|
113
|
-
| **Total** | | **${X}/month** | |
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
## ADRs (Architectural Decision Records)
|
|
118
|
-
|
|
119
|
-
### ADR-001: {Decision Title}
|
|
120
|
-
**Status:** Proposed / Accepted
|
|
121
|
-
**Context:** {Why decide now}
|
|
122
|
-
**Decision:** {What we chose}
|
|
123
|
-
**Alternatives:** 1. {Alt} (pros/cons) 2. {Alt} (pros/cons)
|
|
124
|
-
**Trade-offs:** {key trade-offs}
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## Security
|
|
129
|
-
|
|
130
|
-
| Action | Required Policy |
|
|
131
|
-
|--------|-----------------|
|
|
132
|
-
| View | CanView{Feature} |
|
|
133
|
-
| Create | CanManage{Feature} |
|
|
134
|
-
|
|
135
|
-
## Risks
|
|
136
|
-
|
|
137
|
-
| Risk | Impact | Mitigation |
|
|
138
|
-
|------|--------|------------|
|
|
139
|
-
| {Risk} | {H/M/L} | {Mitigation} |
|
|
140
|
-
|
|
141
|
-
## Out of Scope
|
|
142
|
-
- {Item}
|
|
143
|
-
|
|
144
|
-
## Definition of Done
|
|
145
|
-
- [ ] Code implemented
|
|
146
|
-
- [ ] Tests >80% coverage
|
|
147
|
-
- [ ] Code review approved
|
|
148
|
-
- [ ] Deploy to staging
|
|
149
|
-
- [ ] Recap.md generated
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# MORPH-SPEC Sprint Status
|
|
2
|
-
# Auto-updated by create-story.js and update-sprint-status.js
|
|
3
|
-
# Tracks story-level progress within a feature/epic
|
|
4
|
-
|
|
5
|
-
feature: {{FEATURE_NAME}}
|
|
6
|
-
epic: {{EPIC_NAME}}
|
|
7
|
-
sprint: {{SPRINT_NUMBER}}
|
|
8
|
-
created: {{DATE}}
|
|
9
|
-
updated: {{DATE}}
|
|
10
|
-
|
|
11
|
-
# Story progression
|
|
12
|
-
stories:
|
|
13
|
-
- id: {{STORY_ID_1}}
|
|
14
|
-
title: {{STORY_TITLE_1}}
|
|
15
|
-
file: .morph/project/outputs/{{FEATURE_NAME}}/stories/{{STORY_ID_1}}.md
|
|
16
|
-
status: ready # ready | in_progress | ready_for_qa | done
|
|
17
|
-
assigned: {{AGENT}} # sm | dev | qa
|
|
18
|
-
created: {{DATE}}
|
|
19
|
-
started: null
|
|
20
|
-
completed: null
|
|
21
|
-
|
|
22
|
-
- id: {{STORY_ID_2}}
|
|
23
|
-
title: {{STORY_TITLE_2}}
|
|
24
|
-
file: .morph/project/outputs/{{FEATURE_NAME}}/stories/{{STORY_ID_2}}.md
|
|
25
|
-
status: pending
|
|
26
|
-
assigned: sm
|
|
27
|
-
created: {{DATE}}
|
|
28
|
-
started: null
|
|
29
|
-
completed: null
|
|
30
|
-
|
|
31
|
-
# Progress metrics
|
|
32
|
-
metrics:
|
|
33
|
-
total_stories: {{TOTAL_STORIES}}
|
|
34
|
-
ready: {{READY_COUNT}}
|
|
35
|
-
in_progress: {{IN_PROGRESS_COUNT}}
|
|
36
|
-
ready_for_qa: {{QA_COUNT}}
|
|
37
|
-
done: {{DONE_COUNT}}
|
|
38
|
-
completion_percent: {{COMPLETION_PERCENT}}
|
|
39
|
-
|
|
40
|
-
# Current focus
|
|
41
|
-
current:
|
|
42
|
-
story_id: {{CURRENT_STORY_ID}}
|
|
43
|
-
agent: {{CURRENT_AGENT}}
|
|
44
|
-
phase: implementation # planning | implementation | review
|
|
45
|
-
|
|
46
|
-
# Next story to work on
|
|
47
|
-
next:
|
|
48
|
-
story_id: {{NEXT_STORY_ID}}
|
|
49
|
-
recommendation: "Story {{NEXT_STORY_ID}} is ready for development"
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
# Usage Notes:
|
|
53
|
-
#
|
|
54
|
-
# Status Transitions:
|
|
55
|
-
# pending → ready (SM creates story with full context)
|
|
56
|
-
# ready → in_progress (Dev starts implementation)
|
|
57
|
-
# in_progress → ready_for_qa (Dev completes, adds Dev Notes)
|
|
58
|
-
# ready_for_qa → done (QA approves, adds QA Notes)
|
|
59
|
-
#
|
|
60
|
-
# Fresh Chat Pattern (BMAD-inspired):
|
|
61
|
-
# Each story should run in a FRESH Claude session to avoid context pollution
|
|
62
|
-
#
|
|
63
|
-
# Example workflow:
|
|
64
|
-
# 1. SM: node bin/create-story.js scheduled-reports SR-001
|
|
65
|
-
# 2. Dev: Open NEW chat → /dev → Implement SR-001
|
|
66
|
-
# 3. QA: Open NEW chat → /qa → Review SR-001
|
|
67
|
-
#
|
|
68
|
-
# This prevents token bloat and reduces hallucinations
|