@polymorphism-tech/morph-spec 4.3.3 → 4.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.morph/analytics/threads-log.jsonl +9 -0
- package/{stacks/blazor-azure/.morph → .morph}/config/config.json +9 -9
- package/.morph/state.json +48 -0
- package/bin/detect-agents.js +1 -2
- package/bin/morph-spec.js +2 -15
- package/{stacks/blazor-azure/.morph/config → framework}/agents.json +948 -948
- package/{stacks/nextjs-supabase/.claude → framework}/commands/morph-infra.md +1 -1
- package/framework/hooks/README.md +282 -0
- package/framework/hooks/agent-stop/validate-and-continue.js +96 -0
- package/framework/hooks/agent-stop/validate-checkpoints.js +101 -0
- package/framework/hooks/agent-stop/validate-tests.js +109 -0
- package/framework/hooks/agent-teams/dispatch.js +67 -0
- package/framework/hooks/agent-teams/phase-advanced.js +80 -0
- package/framework/hooks/agent-teams/task-completed.js +76 -0
- package/framework/hooks/agent-teams/teammate-idle.js +70 -0
- package/framework/hooks/commit-msg/conventional-commits.sh +33 -0
- package/framework/hooks/pre-commit/agents.sh +25 -0
- package/framework/hooks/pre-commit/orchestrator.sh +64 -0
- package/framework/hooks/pre-commit/specs.sh +50 -0
- package/framework/hooks/pre-push/run-tests.sh +44 -0
- package/framework/index/troubleshooting-index.json +184 -0
- package/framework/memory/patterns-learned.md +766 -0
- package/framework/skills/level-0-meta/README.md +7 -0
- package/framework/skills/level-0-meta/code-review.md +226 -0
- package/framework/skills/level-0-meta/morph-checklist.md +117 -0
- package/framework/skills/level-0-meta/simulation-checklist.md +77 -0
- package/framework/skills/level-1-workflows/README.md +7 -0
- package/framework/skills/level-1-workflows/morph-replicate.md +213 -0
- package/framework/skills/level-1-workflows/phase-clarify.md +131 -0
- package/framework/skills/level-1-workflows/phase-design.md +213 -0
- package/framework/skills/level-1-workflows/phase-setup.md +106 -0
- package/framework/skills/level-1-workflows/phase-tasks.md +164 -0
- package/framework/skills/level-1-workflows/phase-uiux.md +169 -0
- package/framework/skills/level-2-domains/README.md +14 -0
- package/framework/skills/level-2-domains/ai-agents/ai-system-architect.md +192 -0
- package/framework/skills/level-2-domains/architecture/po-pm-advisor.md +197 -0
- package/framework/skills/level-2-domains/architecture/prompt-engineer.md +189 -0
- package/framework/skills/level-2-domains/architecture/seo-growth-hacker.md +320 -0
- package/framework/skills/level-2-domains/architecture/standards-architect.md +156 -0
- package/framework/skills/level-2-domains/backend/api-designer.md +59 -0
- package/framework/skills/level-2-domains/backend/dotnet-senior.md +77 -0
- package/framework/skills/level-2-domains/backend/ef-modeler.md +58 -0
- package/framework/skills/level-2-domains/backend/hangfire-orchestrator.md +126 -0
- package/framework/skills/level-2-domains/backend/ms-agent-expert.md +45 -0
- package/framework/skills/level-2-domains/frontend/blazor-builder.md +210 -0
- package/framework/skills/level-2-domains/frontend/nextjs-expert.md +154 -0
- package/framework/skills/level-2-domains/frontend/ui-ux-designer.md +191 -0
- package/framework/skills/level-2-domains/infrastructure/azure-architect.md +142 -0
- package/framework/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +699 -0
- package/framework/skills/level-2-domains/infrastructure/bicep-architect.md +126 -0
- package/framework/skills/level-2-domains/infrastructure/container-specialist.md +131 -0
- package/framework/skills/level-2-domains/infrastructure/devops-engineer.md +119 -0
- package/framework/skills/level-2-domains/integrations/asaas-financial.md +130 -0
- package/framework/skills/level-2-domains/integrations/azure-identity.md +142 -0
- package/framework/skills/level-2-domains/integrations/clerk-auth.md +108 -0
- package/framework/skills/level-2-domains/integrations/hangfire-orchestrator.md +64 -0
- package/framework/skills/level-2-domains/integrations/resend-email.md +119 -0
- package/framework/skills/level-2-domains/quality/code-analyzer.md +235 -0
- package/framework/skills/level-2-domains/quality/testing-specialist.md +126 -0
- package/framework/skills/level-3-technologies/README.md +7 -0
- package/framework/skills/level-4-patterns/README.md +7 -0
- package/framework/squad-templates/backend-only.json +34 -0
- package/framework/squad-templates/frontend-only.json +34 -0
- package/framework/squad-templates/full-stack.json +52 -0
- package/framework/templates/.idea/morph-templates.xml +92 -0
- package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
- package/framework/templates/IDE-SNIPPETS.md +266 -0
- package/framework/templates/README.md +814 -0
- package/framework/templates/REGISTRY.json +1677 -0
- package/framework/templates/code/dotnet/backend/repository.cs +141 -0
- package/framework/templates/code/dotnet/backend/service.cs +139 -0
- package/framework/templates/code/dotnet/contracts/Commands.cs +74 -0
- package/framework/templates/code/dotnet/contracts/Entities.cs +25 -0
- package/framework/templates/code/dotnet/contracts/Queries.cs +74 -0
- package/framework/templates/code/dotnet/contracts/README.md +74 -0
- package/framework/templates/code/dotnet/contracts/api-contracts.cs +173 -0
- package/framework/templates/code/dotnet/contracts/contracts.cs +217 -0
- package/framework/templates/code/dotnet/database/migration.cs +83 -0
- package/framework/templates/code/dotnet/frontend/component.razor +239 -0
- package/framework/templates/code/dotnet/jobs/agent.cs +163 -0
- package/framework/templates/code/dotnet/jobs/job.cs +171 -0
- package/framework/templates/code/dotnet/test.cs +239 -0
- package/framework/templates/code/sql/rls-policy.sql +57 -0
- package/framework/templates/code/sql/supabase-migration.sql +100 -0
- package/framework/templates/code/sql/supabase-migration.template.sql +113 -0
- package/framework/templates/code/typescript/contracts.ts +168 -0
- package/framework/templates/context/CONTEXT-FEATURE.md +276 -0
- package/framework/templates/context/CONTEXT.md +181 -0
- package/framework/templates/docs/proposal.md +182 -0
- package/framework/templates/docs/spec.md +149 -0
- package/framework/templates/examples/design-system-examples.md +357 -0
- package/framework/templates/examples/spec-examples.md +90 -0
- package/framework/templates/feature/decisions.md +187 -0
- package/framework/templates/feature/recap.md +146 -0
- package/framework/templates/feature/tasks.md +199 -0
- package/framework/templates/infrastructure/azure/Dockerfile.example +82 -0
- package/framework/templates/infrastructure/azure/README.md +286 -0
- package/framework/templates/infrastructure/azure/app-insights.bicep +63 -0
- package/framework/templates/infrastructure/azure/app-service.bicep +164 -0
- package/framework/templates/infrastructure/azure/container-app-env.bicep +49 -0
- package/framework/templates/infrastructure/azure/container-app.bicep +156 -0
- package/framework/templates/infrastructure/azure/deploy-checklist.md +426 -0
- package/framework/templates/infrastructure/azure/deploy.ps1 +229 -0
- package/framework/templates/infrastructure/azure/deploy.sh +208 -0
- package/framework/templates/infrastructure/azure/key-vault.bicep +91 -0
- package/framework/templates/infrastructure/azure/main.bicep +189 -0
- package/framework/templates/infrastructure/azure/parameters.dev.json +29 -0
- package/framework/templates/infrastructure/azure/parameters.prod.json +29 -0
- package/framework/templates/infrastructure/azure/parameters.staging.json +29 -0
- package/framework/templates/infrastructure/azure/sql-database.bicep +103 -0
- package/framework/templates/infrastructure/azure/storage.bicep +106 -0
- package/framework/templates/infrastructure/docker/Dockerfile.template +58 -0
- package/framework/templates/infrastructure/docker/docker-compose.template.yml +67 -0
- package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -0
- package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -0
- package/framework/templates/infrastructure/docker/easypanel.template.json +54 -0
- package/framework/templates/infrastructure/github/README.md +593 -0
- package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +22 -0
- package/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -0
- package/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -0
- package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +61 -0
- package/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +31 -0
- package/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -0
- package/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -0
- package/framework/templates/integrations/asaas-client.cs +387 -0
- package/framework/templates/integrations/asaas-webhook.cs +351 -0
- package/framework/templates/integrations/azure-identity-config.cs +288 -0
- package/framework/templates/integrations/clerk-config.cs +258 -0
- package/framework/templates/meta-prompts/fusion/fusion-agent.md +76 -0
- package/framework/templates/meta-prompts/fusion/fusion-aggregator.md +100 -0
- package/framework/templates/meta-prompts/hops/hop-retry.md +78 -0
- package/framework/templates/meta-prompts/hops/hop-validation.md +97 -0
- package/framework/templates/meta-prompts/hops/hop-wrapper.md +36 -0
- package/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +113 -0
- package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +80 -0
- package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +90 -0
- package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +126 -0
- package/framework/templates/meta-prompts/squad-leaders/squad-leader.md +43 -0
- package/framework/templates/meta-prompts/validators/checkpoint-validator.md +107 -0
- package/framework/templates/meta-prompts/validators/pre-commit-validator.md +95 -0
- package/framework/templates/saas/subscription.cs +347 -0
- package/framework/templates/saas/tenant.cs +338 -0
- package/framework/templates/state.template.json +17 -0
- package/framework/templates/ui/FluentDesignTheme.cs +149 -0
- package/framework/templates/ui/MudTheme.cs +281 -0
- package/framework/templates/ui/design-system.css +226 -0
- package/framework/workflows/README.md +1041 -0
- package/framework/workflows/configs/design-impl.json +49 -0
- package/framework/workflows/configs/fast-track.json +42 -0
- package/framework/workflows/configs/full-morph.json +79 -0
- package/framework/workflows/configs/fusion.json +39 -0
- package/framework/workflows/configs/long-running.json +33 -0
- package/framework/workflows/configs/standard.json +60 -0
- package/framework/workflows/configs/ui-refresh.json +49 -0
- package/framework/workflows/configs/zero-touch.json +75 -0
- package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -0
- package/framework/workflows/docs/design-impl.md +37 -0
- package/framework/workflows/docs/enforcement-pipeline.md +668 -0
- package/framework/workflows/docs/fast-track.md +29 -0
- package/framework/workflows/docs/full-morph.md +76 -0
- package/framework/workflows/docs/standard.md +44 -0
- package/framework/workflows/docs/ui-refresh.md +39 -0
- package/package.json +3 -3
- package/src/commands/feature/create-story.js +11 -7
- package/src/commands/project/detect-agents.js +1 -2
- package/src/commands/project/init.js +69 -32
- package/src/commands/project/update.js +2 -2
- package/src/commands/templates/template-customize.js +3 -17
- package/src/commands/templates/template-list.js +1 -15
- package/src/commands/templates/template-render.js +2 -3
- package/src/commands/templates/template-show.js +3 -5
- package/src/core/templates/template-registry.js +9 -23
- package/src/lib/detectors/structure-detector.js +3 -3
- package/src/lib/generators/context-generator.js +18 -6
- package/src/lib/hooks/hook-executor.js +0 -2
- package/src/lib/orchestration/team-orchestrator.js +1 -2
- package/src/lib/standards/standards-context-injector.js +3 -4
- package/src/lib/troubleshooting/troubleshoot-grep.js +3 -9
- package/src/lib/validators/validation-runner.js +1 -2
- package/src/utils/file-copier.js +1 -2
- package/docs/README.md +0 -144
- package/docs/api/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -978
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -1049
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/api/scripts/collapse.js +0 -39
- package/docs/api/scripts/commonNav.js +0 -28
- package/docs/api/scripts/linenumber.js +0 -25
- package/docs/api/scripts/nav.js +0 -12
- package/docs/api/scripts/polyfill.js +0 -4
- package/docs/api/scripts/prettify/Apache-License-2.0.txt +0 -202
- package/docs/api/scripts/prettify/lang-css.js +0 -2
- package/docs/api/scripts/prettify/prettify.js +0 -28
- package/docs/api/scripts/search.js +0 -99
- package/docs/api/styles/jsdoc.css +0 -776
- package/docs/api/styles/prettify.css +0 -80
- package/docs/cli-auto-detection.md +0 -219
- package/docs/getting-started.md +0 -296
- package/docs/installation.md +0 -361
- package/docs/next-generation/AGENTS.md +0 -521
- package/docs/next-generation/ANALYSIS.md +0 -555
- package/docs/next-generation/ARCHITECTURE.md +0 -436
- package/docs/next-generation/CONTEXT-OPTIMIZATION.md +0 -267
- package/docs/next-generation/EXECUTION-FLOW.md +0 -274
- package/docs/next-generation/FEATURES.md +0 -688
- package/docs/next-generation/META-PROMPTS.md +0 -235
- package/docs/next-generation/MIGRATION-GUIDE.md +0 -253
- package/docs/next-generation/README.md +0 -231
- package/docs/next-generation/ROADMAP.md +0 -801
- package/docs/next-generation/THREAD-MANAGEMENT.md +0 -240
- package/docs/templates.md +0 -418
- package/docs/troubleshooting.md +0 -269
- package/docs/validation-checklist.md +0 -264
- package/scripts/postinstall.js +0 -132
- package/src/lib/stacks/index.js +0 -7
- package/src/lib/stacks/stack-resolver.js +0 -180
- 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/.morph/.morphversion +0 -5
- package/stacks/blazor-azure/.morph/project/context/README.md +0 -17
- package/stacks/blazor-azure/CLAUDE.md +0 -155
- package/stacks/blazor-azure/README.md +0 -79
- package/stacks/nextjs-supabase/.claude/commands/morph-apply.md +0 -221
- package/stacks/nextjs-supabase/.claude/commands/morph-archive.md +0 -79
- package/stacks/nextjs-supabase/.claude/commands/morph-deploy.md +0 -529
- package/stacks/nextjs-supabase/.claude/commands/morph-preflight.md +0 -227
- package/stacks/nextjs-supabase/.claude/commands/morph-proposal.md +0 -122
- package/stacks/nextjs-supabase/.claude/commands/morph-status.md +0 -86
- package/stacks/nextjs-supabase/.claude/commands/morph-troubleshoot.md +0 -122
- package/stacks/nextjs-supabase/.morph/.morphversion +0 -5
- package/stacks/nextjs-supabase/.morph/config/agents.json +0 -345
- package/stacks/nextjs-supabase/.morph/config/config.json +0 -9
- package/stacks/nextjs-supabase/.morph/project/context/README.md +0 -17
- package/stacks/nextjs-supabase/.morph/standards/ai-agents/blazor-ui.md +0 -364
- package/stacks/nextjs-supabase/.morph/standards/ai-agents/production.md +0 -415
- package/stacks/nextjs-supabase/.morph/standards/ai-agents/setup.md +0 -418
- package/stacks/nextjs-supabase/.morph/standards/ai-agents/team-orchestration.md +0 -479
- package/stacks/nextjs-supabase/.morph/standards/ai-agents/workflows.md +0 -354
- package/stacks/nextjs-supabase/.morph/standards/architecture/ddd/aggregates.md +0 -120
- package/stacks/nextjs-supabase/.morph/standards/architecture/ddd/entities.md +0 -99
- package/stacks/nextjs-supabase/.morph/standards/architecture/ddd/value-objects.md +0 -124
- package/stacks/nextjs-supabase/.morph/standards/backend/api/minimal-api.md +0 -494
- package/stacks/nextjs-supabase/.morph/standards/backend/api/rest.md +0 -492
- package/stacks/nextjs-supabase/.morph/standards/backend/api/validation.md +0 -88
- package/stacks/nextjs-supabase/.morph/standards/backend/authentication/passkeys.md +0 -428
- package/stacks/nextjs-supabase/.morph/standards/backend/database/ef-core.md +0 -199
- package/stacks/nextjs-supabase/.morph/standards/backend/database/migrations.md +0 -393
- package/stacks/nextjs-supabase/.morph/standards/backend/database/postgresql/database.md +0 -352
- package/stacks/nextjs-supabase/.morph/standards/backend/database/repository-patterns.md +0 -528
- package/stacks/nextjs-supabase/.morph/standards/backend/database/vector-search-rag.md +0 -541
- package/stacks/nextjs-supabase/.morph/standards/backend/dotnet/async.md +0 -366
- package/stacks/nextjs-supabase/.morph/standards/backend/dotnet/core.md +0 -117
- package/stacks/nextjs-supabase/.morph/standards/backend/dotnet/di.md +0 -439
- package/stacks/nextjs-supabase/.morph/standards/backend/dotnet/program-cs-checklist.md +0 -92
- package/stacks/nextjs-supabase/.morph/standards/backend/integrations/asaas/asaas-api.md +0 -216
- package/stacks/nextjs-supabase/.morph/standards/backend/integrations/clerk/clerk-auth.md +0 -290
- package/stacks/nextjs-supabase/.morph/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
- package/stacks/nextjs-supabase/.morph/standards/backend/integrations/resend/resend-email.md +0 -385
- package/stacks/nextjs-supabase/.morph/standards/context/analytics.md +0 -96
- package/stacks/nextjs-supabase/.morph/standards/context/bundles.md +0 -110
- package/stacks/nextjs-supabase/.morph/standards/context/priming.md +0 -78
- package/stacks/nextjs-supabase/.morph/standards/core/architecture.md +0 -185
- package/stacks/nextjs-supabase/.morph/standards/core/coding.md +0 -214
- package/stacks/nextjs-supabase/.morph/standards/core/git-branching-strategy.md +0 -403
- package/stacks/nextjs-supabase/.morph/standards/core/git.md +0 -185
- package/stacks/nextjs-supabase/.morph/standards/core/testing.md +0 -295
- package/stacks/nextjs-supabase/.morph/standards/data/nosql/blob-storage.md +0 -102
- package/stacks/nextjs-supabase/.morph/standards/data/nosql/cache/redis.md +0 -97
- package/stacks/nextjs-supabase/.morph/standards/data/nosql/cosmos-db.md +0 -118
- package/stacks/nextjs-supabase/.morph/standards/data/vector-search/azure-ai-search.md +0 -121
- package/stacks/nextjs-supabase/.morph/standards/data/vector-search/rag-chunking.md +0 -104
- package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/design-checklist.md +0 -222
- package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/fluent-ui-setup.md +0 -595
- package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/fluent-ui.md +0 -137
- package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/html-conversion.md +0 -184
- package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/lifecycle.md +0 -195
- package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/pitfalls.md +0 -198
- package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/state.md +0 -191
- package/stacks/nextjs-supabase/.morph/standards/frontend/design-system/animations.md +0 -151
- package/stacks/nextjs-supabase/.morph/standards/frontend/design-system/naming.md +0 -64
- package/stacks/nextjs-supabase/.morph/standards/frontend/nextjs/nextjs-patterns.md +0 -198
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/azure.md +0 -624
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/devops/local-development.md +0 -520
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/services/functions.md +0 -486
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/services/service-bus.md +0 -459
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/services/storage.md +0 -407
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/docker/easypanel-deploy.md +0 -196
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/supabase/mcp-setup.md +0 -252
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/supabase/supabase-auth.md +0 -176
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/supabase/supabase-rls.md +0 -184
- package/stacks/nextjs-supabase/.morph/standards/infrastructure/supabase/supabase-storage.md +0 -153
- package/stacks/nextjs-supabase/.morph/standards/integration/api/graphql.md +0 -91
- package/stacks/nextjs-supabase/.morph/standards/integration/api/grpc.md +0 -114
- package/stacks/nextjs-supabase/.morph/standards/integration/api/rest-design.md +0 -95
- package/stacks/nextjs-supabase/.morph/standards/integration/event-driven/cqrs.md +0 -101
- package/stacks/nextjs-supabase/.morph/standards/integration/event-driven/event-sourcing.md +0 -124
- package/stacks/nextjs-supabase/.morph/standards/integration/event-driven/service-bus.md +0 -95
- package/stacks/nextjs-supabase/.morph/standards/observability/logging.md +0 -131
- package/stacks/nextjs-supabase/.morph/standards/observability/metrics.md +0 -121
- package/stacks/nextjs-supabase/.morph/standards/observability/monitoring.md +0 -114
- package/stacks/nextjs-supabase/.morph/standards/observability/tracing.md +0 -132
- package/stacks/nextjs-supabase/.morph/standards/workflows/parallel-execution.md +0 -112
- package/stacks/nextjs-supabase/.morph/standards/workflows/thread-management.md +0 -113
- package/stacks/nextjs-supabase/CLAUDE.md +0 -155
- package/stacks/nextjs-supabase/README.md +0 -103
- /package/{stacks/blazor-azure/.claude → framework}/commands/morph-apply.md +0 -0
- /package/{stacks/blazor-azure/.claude → framework}/commands/morph-archive.md +0 -0
- /package/{stacks/blazor-azure/.claude → framework}/commands/morph-preflight.md +0 -0
- /package/{stacks/blazor-azure/.claude → framework}/commands/morph-proposal.md +0 -0
- /package/{stacks/blazor-azure/.claude → framework}/commands/morph-status.md +0 -0
- /package/{stacks/blazor-azure/.claude → framework}/commands/morph-troubleshoot.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/ai-agents/blazor-ui.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/ai-agents/production.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/ai-agents/setup.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/ai-agents/team-orchestration.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/ai-agents/workflows.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/architecture/ddd/aggregates.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/architecture/ddd/entities.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/architecture/ddd/value-objects.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/api/minimal-api.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/api/rest.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/api/validation.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/authentication/passkeys.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/database/ef-core.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/database/migrations.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/database/postgresql/database.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/database/repository-patterns.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/database/vector-search-rag.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/dotnet/async.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/dotnet/core.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/dotnet/di.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/dotnet/program-cs-checklist.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/integrations/asaas/asaas-api.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/integrations/clerk/clerk-auth.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/backend/integrations/resend/resend-email.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/context/analytics.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/context/bundles.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/context/priming.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/core/architecture.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/core/coding.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/core/git-branching-strategy.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/core/git.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/core/testing.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/data/nosql/blob-storage.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/data/nosql/cache/redis.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/data/nosql/cosmos-db.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/data/vector-search/azure-ai-search.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/data/vector-search/rag-chunking.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/design-checklist.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/fluent-ui-setup.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/fluent-ui.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/html-conversion.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/lifecycle.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/pitfalls.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/state.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/design-system/animations.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/design-system/naming.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/nextjs/nextjs-patterns.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/azure.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/devops/local-development.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/services/functions.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/services/service-bus.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/services/storage.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/docker/easypanel-deploy.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/supabase/mcp-setup.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/supabase/supabase-auth.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/supabase/supabase-pgvector.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/supabase/supabase-rls.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/supabase/supabase-storage.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/integration/api/graphql.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/integration/api/grpc.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/integration/api/rest-design.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/integration/event-driven/cqrs.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/integration/event-driven/event-sourcing.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/integration/event-driven/service-bus.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/observability/logging.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/observability/metrics.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/observability/monitoring.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/observability/tracing.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/workflows/parallel-execution.md +0 -0
- /package/{stacks/blazor-azure/.morph → framework}/standards/workflows/thread-management.md +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# API Designer
|
|
2
|
+
|
|
3
|
+
**Tier:** 3 (Specialist)
|
|
4
|
+
**Always Active:** No
|
|
5
|
+
**Keywords:** api, endpoint, controller, rest, http, route, dto, request, response
|
|
6
|
+
**Reports to:** dotnet-senior
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Role
|
|
11
|
+
|
|
12
|
+
REST API design specialist for .NET Minimal API and controllers, focusing on clean endpoint design and DTO contracts.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Standards Applied
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
framework/standards/core/coding.md
|
|
20
|
+
framework/standards/backend/dotnet/core.md
|
|
21
|
+
framework/standards/backend/dotnet/async.md
|
|
22
|
+
framework/standards/backend/api/rest.md
|
|
23
|
+
framework/standards/backend/api/validation.md
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Responsibilities
|
|
29
|
+
|
|
30
|
+
- Design REST API endpoints following conventions
|
|
31
|
+
- Create request/response DTOs
|
|
32
|
+
- Implement API controllers or Minimal API endpoints
|
|
33
|
+
- Apply proper HTTP status codes (200, 201, 400, 404, etc.)
|
|
34
|
+
- Implement input validation with FluentValidation
|
|
35
|
+
- Design API versioning strategy
|
|
36
|
+
- Create error response formats
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## When to Use
|
|
41
|
+
|
|
42
|
+
- Creating new API endpoints
|
|
43
|
+
- Designing DTO contracts
|
|
44
|
+
- API refactoring
|
|
45
|
+
- Implementing validation logic
|
|
46
|
+
- Designing error responses
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Collaborates With
|
|
51
|
+
|
|
52
|
+
- **dotnet-senior** - Service layer consumed by endpoints
|
|
53
|
+
- **ef-modeler** - Entity → DTO mapping
|
|
54
|
+
- **blazor-builder** - Frontend consuming API
|
|
55
|
+
- **testing-specialist** - API integration tests
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
*MORPH-SPEC by Polymorphism Tech*
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# .NET Senior Engineer
|
|
2
|
+
|
|
3
|
+
**Tier:** 2 (Domain Leader)
|
|
4
|
+
**Always Active:** Yes
|
|
5
|
+
**Reports to:** standards-architect
|
|
6
|
+
**Coordinates:** ef-modeler, api-designer, event-architect, hangfire-orchestrator, ms-agent-expert, ddd-expert, nosql-cache-expert
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Role
|
|
11
|
+
|
|
12
|
+
Senior .NET engineer and Backend Squad Leader. Writes production-quality C# code and coordinates backend domain specialists for all .NET implementation tasks.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Standards Applied
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
framework/standards/core/coding.md
|
|
20
|
+
framework/standards/core/architecture.md
|
|
21
|
+
framework/standards/core/testing.md
|
|
22
|
+
framework/standards/backend/dotnet/core.md
|
|
23
|
+
framework/standards/backend/dotnet/async.md
|
|
24
|
+
framework/standards/backend/dotnet/di.md
|
|
25
|
+
framework/standards/backend/database/ef-core.md
|
|
26
|
+
framework/standards/backend/api/rest.md
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Responsibilities
|
|
32
|
+
|
|
33
|
+
- Lead backend implementation (services, controllers, business logic)
|
|
34
|
+
- Coordinate backend squad (ef-modeler, api-designer, etc.)
|
|
35
|
+
- Ensure code follows all .NET standards
|
|
36
|
+
- Design service layer architecture
|
|
37
|
+
- Implement async patterns with CancellationToken
|
|
38
|
+
- Apply dependency injection correctly
|
|
39
|
+
- Write unit and integration tests
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## When to Use
|
|
44
|
+
|
|
45
|
+
- Any .NET/C# code implementation
|
|
46
|
+
- Backend service layer development
|
|
47
|
+
- API controller implementation
|
|
48
|
+
- Business logic implementation
|
|
49
|
+
- Complex architectural decisions (Ultrathink mode)
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Ultrathink Mode
|
|
54
|
+
|
|
55
|
+
**Trigger:** Keywords like "ultrathink", "deep-think", "analyze deeply", "complex decision"
|
|
56
|
+
|
|
57
|
+
**Use for:**
|
|
58
|
+
- Technology/library selection
|
|
59
|
+
- Architecture pattern decisions (CQRS vs simple)
|
|
60
|
+
- Performance optimization strategy
|
|
61
|
+
- Migration planning
|
|
62
|
+
- Multi-system integration design
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Collaborates With
|
|
67
|
+
|
|
68
|
+
- **ef-modeler** - Database/EF Core layer
|
|
69
|
+
- **api-designer** - REST API contracts and endpoints
|
|
70
|
+
- **azure-architect** - Infrastructure provisioning
|
|
71
|
+
- **blazor-builder** - Backend API consumed by frontend
|
|
72
|
+
- **hangfire-orchestrator** - Background job coordination
|
|
73
|
+
- **testing-specialist** - Test coverage and quality
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
*MORPH-SPEC by Polymorphism Tech*
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# EF Modeler
|
|
2
|
+
|
|
3
|
+
**Tier:** 3 (Specialist)
|
|
4
|
+
**Always Active:** No
|
|
5
|
+
**Keywords:** entity, database, migration, ef core, dbcontext, table, column, relationship, query
|
|
6
|
+
**Reports to:** dotnet-senior
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Role
|
|
11
|
+
|
|
12
|
+
Entity Framework Core specialist for database modeling, entities, configurations, and migrations.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Standards Applied
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
framework/standards/core/coding.md
|
|
20
|
+
framework/standards/backend/dotnet/core.md
|
|
21
|
+
framework/standards/backend/database/ef-core.md
|
|
22
|
+
framework/standards/backend/database/migrations.md
|
|
23
|
+
framework/standards/backend/database/repository-patterns.md
|
|
24
|
+
framework/standards/backend/database/performance.md
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Responsibilities
|
|
30
|
+
|
|
31
|
+
- Design entity models with private setters and factory methods
|
|
32
|
+
- Create IEntityTypeConfiguration for each entity
|
|
33
|
+
- Configure relationships, indexes, and constraints
|
|
34
|
+
- Generate and review EF Core migrations
|
|
35
|
+
- Optimize database queries (avoid N+1, use proper includes)
|
|
36
|
+
- Implement repository patterns with IDbContextFactory
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## When to Use
|
|
41
|
+
|
|
42
|
+
- Creating/modifying entity classes
|
|
43
|
+
- Database schema changes
|
|
44
|
+
- Migration creation/review
|
|
45
|
+
- Query optimization
|
|
46
|
+
- DbContext configuration
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Collaborates With
|
|
51
|
+
|
|
52
|
+
- **dotnet-senior** - Service layer consuming repositories
|
|
53
|
+
- **api-designer** - DTO mapping from entities
|
|
54
|
+
- **azure-architect** - Database provisioning (Azure SQL, Cosmos DB)
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
*MORPH-SPEC by Polymorphism Tech*
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Hangfire Orchestrator
|
|
2
|
+
|
|
3
|
+
> **Layer:** 2 | **Load:** on-keyword | **Keywords:** scheduled, job, background, cron, recurring, batch, queue, hangfire
|
|
4
|
+
|
|
5
|
+
Especialista em background jobs, tarefas agendadas e processamento assíncrono com Hangfire.
|
|
6
|
+
|
|
7
|
+
## .NET 10 Compatibility
|
|
8
|
+
- Hangfire.AspNetCore: **>= 1.8.22** (required for .NET 10)
|
|
9
|
+
|
|
10
|
+
## Why Hangfire (not Azure Functions)
|
|
11
|
+
|
|
12
|
+
| Aspect | Hangfire | Azure Functions |
|
|
13
|
+
|--------|----------|-----------------|
|
|
14
|
+
| Cost | Free (in-process) | Pay per execution |
|
|
15
|
+
| Dashboard | Built-in | App Insights separate |
|
|
16
|
+
| Debugging | Local easy | Emulator needed |
|
|
17
|
+
| Complexity | Low | Medium-High |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Setup
|
|
22
|
+
|
|
23
|
+
```csharp
|
|
24
|
+
// Program.cs
|
|
25
|
+
builder.Services.AddHangfire(config => config
|
|
26
|
+
.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
|
|
27
|
+
.UseSimpleAssemblyNameTypeSerializer()
|
|
28
|
+
.UseRecommendedSerializerSettings()
|
|
29
|
+
.UseSqlServerStorage(connString, new SqlServerStorageOptions
|
|
30
|
+
{
|
|
31
|
+
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
|
|
32
|
+
QueuePollInterval = TimeSpan.Zero,
|
|
33
|
+
UseRecommendedIsolationLevel = true,
|
|
34
|
+
DisableGlobalLocks = true
|
|
35
|
+
}));
|
|
36
|
+
|
|
37
|
+
builder.Services.AddHangfireServer(options =>
|
|
38
|
+
{
|
|
39
|
+
options.WorkerCount = Environment.ProcessorCount * 2;
|
|
40
|
+
options.Queues = new[] { "critical", "default", "low" };
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
app.UseHangfireDashboard("/hangfire", new DashboardOptions
|
|
44
|
+
{
|
|
45
|
+
Authorization = new[] { new HangfireAuthorizationFilter() }
|
|
46
|
+
});
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Job Types
|
|
50
|
+
|
|
51
|
+
| Type | API | Example |
|
|
52
|
+
|------|-----|---------|
|
|
53
|
+
| **Fire-and-Forget** | `BackgroundJob.Enqueue<T>(...)` | Send email |
|
|
54
|
+
| **Delayed** | `BackgroundJob.Schedule<T>(..., TimeSpan)` | Abandoned cart check |
|
|
55
|
+
| **Recurring** | `RecurringJob.AddOrUpdate<T>(..., cron)` | Daily report |
|
|
56
|
+
| **Continuation** | `BackgroundJob.ContinueJobWith(id, ...)` | Post-import notify |
|
|
57
|
+
|
|
58
|
+
### Common Cron Expressions
|
|
59
|
+
`"0 * * * *"` hourly | `"*/5 * * * *"` every 5m | `"0 8 * * 1-5"` 8am weekdays | `"0 0 1 * *"` monthly
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## CRITICAL: Scoped Repository Pattern
|
|
64
|
+
|
|
65
|
+
> **Ref:** `framework/standards/blazor-efcore.md` — Repository Factory pattern
|
|
66
|
+
|
|
67
|
+
**Hangfire jobs run OUTSIDE the HTTP request.** The scoped DbContext does NOT exist.
|
|
68
|
+
|
|
69
|
+
```csharp
|
|
70
|
+
// ✅ ALWAYS use Factory
|
|
71
|
+
public class OrderProcessorJob(IOrderRepositoryFactory repoFactory, ILogger<OrderProcessorJob> logger)
|
|
72
|
+
{
|
|
73
|
+
[AutomaticRetry(Attempts = 3, DelaysInSeconds = new[] { 60, 300, 900 })]
|
|
74
|
+
public async Task ProcessAsync(Guid orderId, CancellationToken ct)
|
|
75
|
+
{
|
|
76
|
+
await using var repo = repoFactory.CreateScoped(); // Isolated DbContext
|
|
77
|
+
var order = await repo.GetByIdAsync(orderId, ct);
|
|
78
|
+
if (order == null || order.Status >= OrderStatus.Completed) return; // Idempotent
|
|
79
|
+
order.MarkAsProcessed();
|
|
80
|
+
await repo.UpdateAsync(order, ct);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// ❌ NEVER inject repository directly — DbContext will be disposed
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Retry & Error Handling
|
|
88
|
+
|
|
89
|
+
```csharp
|
|
90
|
+
[AutomaticRetry(Attempts = 5, DelaysInSeconds = new[] { 60, 300, 900, 3600, 7200 })]
|
|
91
|
+
[Queue("critical")]
|
|
92
|
+
public async Task ProcessPaymentAsync(int orderId)
|
|
93
|
+
{
|
|
94
|
+
try { await _paymentService.ProcessAsync(orderId); }
|
|
95
|
+
catch (PaymentGatewayException ex) { _logger.LogWarning(ex, "..."); throw; } // Rethrow for retry
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Dashboard Authorization
|
|
100
|
+
|
|
101
|
+
```csharp
|
|
102
|
+
public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter
|
|
103
|
+
{
|
|
104
|
+
public bool Authorize(DashboardContext context)
|
|
105
|
+
{
|
|
106
|
+
var http = context.GetHttpContext();
|
|
107
|
+
return http.User.Identity?.IsAuthenticated == true && http.User.IsInRole("Admin");
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Checklist
|
|
115
|
+
- [ ] Uses `IRepositoryFactory` (NOT direct repository)
|
|
116
|
+
- [ ] `await using` for dispose
|
|
117
|
+
- [ ] Job is idempotent (safe to retry)
|
|
118
|
+
- [ ] AutomaticRetry configured
|
|
119
|
+
- [ ] Queue defined (critical/default/low)
|
|
120
|
+
- [ ] CancellationToken propagated
|
|
121
|
+
- [ ] Dashboard protected with auth
|
|
122
|
+
- [ ] Timezone set for recurring jobs
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
*MORPH-SPEC by Polymorphism Tech*
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Agent Framework Expert
|
|
2
|
+
|
|
3
|
+
> **Layer:** 2 | **Load:** on-keyword | **Keywords:** agent, ai, llm, openai, chat, prompt, tool, function calling, rag, embedding, workflow, orchestration, mcp, a2a, middleware
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
|
|
7
|
+
Microsoft Agent Framework specialist for .NET 10. Implements AI agents, tools, workflows, and middleware.
|
|
8
|
+
|
|
9
|
+
## Knowledge Base (Consult These)
|
|
10
|
+
|
|
11
|
+
- `framework/standards/ai-agents/setup.md` - Agent configuration, DI, tools, streaming
|
|
12
|
+
- `framework/standards/ai-agents/workflows.md` - Sequential, parallel, conditional workflows
|
|
13
|
+
- `framework/standards/ai-agents/production.md` - Middleware, A2A, MCP, caching, observability
|
|
14
|
+
|
|
15
|
+
## Responsibilities
|
|
16
|
+
|
|
17
|
+
- Configure agents per setup.md patterns (ChatClientAgent, keyed services)
|
|
18
|
+
- Design workflows per workflows.md orchestration patterns
|
|
19
|
+
- Implement middleware per production.md (error handling, logging, retry)
|
|
20
|
+
- Use recommended models from setup.md (gpt-4o-mini default)
|
|
21
|
+
|
|
22
|
+
## Prompt Template
|
|
23
|
+
|
|
24
|
+
When working on AI agent tasks:
|
|
25
|
+
1. Consult `setup.md` for agent configuration, tools, and DI registration
|
|
26
|
+
2. Follow `workflows.md` for orchestration (sequential, parallel, conditional)
|
|
27
|
+
3. Apply `production.md` for middleware, observability, and production patterns
|
|
28
|
+
4. NEVER use Semantic Kernel - use Microsoft.Agents.AI exclusively
|
|
29
|
+
|
|
30
|
+
## When to Use
|
|
31
|
+
|
|
32
|
+
- AI/LLM integration requests
|
|
33
|
+
- Agent workflow design
|
|
34
|
+
- Tool/function calling implementation
|
|
35
|
+
- Agent middleware and observability
|
|
36
|
+
|
|
37
|
+
## Collaborates With
|
|
38
|
+
|
|
39
|
+
- ai-system-architect - Overall AI strategy
|
|
40
|
+
- dotnet-senior - Backend integration
|
|
41
|
+
- azure-architect - Azure OpenAI provisioning
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
*MORPH-SPEC by Polymorphism Tech*
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# .NET + Blazor Stack
|
|
2
|
+
|
|
3
|
+
Stack principal para aplicações web com .NET e Blazor Server.
|
|
4
|
+
|
|
5
|
+
| Aspecto | Tecnologia |
|
|
6
|
+
|---------|------------|
|
|
7
|
+
| **Backend** | .NET 10 / C# 14 |
|
|
8
|
+
| **Frontend** | Blazor Server |
|
|
9
|
+
| **Database** | EF Core 10 + Azure SQL |
|
|
10
|
+
| **Hosting** | Azure Container Apps |
|
|
11
|
+
| **Background** | Hangfire |
|
|
12
|
+
| **AI** | Microsoft Agent Framework |
|
|
13
|
+
|
|
14
|
+
**Triggers:** `blazor`, `razor`, `server-side`, `.net`, `csharp`, `dotnet`
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Critical Standards (Read FIRST)
|
|
19
|
+
|
|
20
|
+
| Standard | What |
|
|
21
|
+
|----------|------|
|
|
22
|
+
| `framework/standards/coding.md` | **C# naming conventions, code style, .editorconfig template** |
|
|
23
|
+
| `framework/standards/architecture.md` | **Clean Architecture layers, SOLID, service patterns** |
|
|
24
|
+
| `framework/standards/blazor-efcore.md` | DbContext concurrency, Repository Factory, background ops, migrations |
|
|
25
|
+
| `framework/standards/blazor-pitfalls.md` | Common Blazor issues & solutions |
|
|
26
|
+
| `framework/standards/fluent-ui-blazor.md` | Fluent UI APIs, icon sizes, dialog patterns |
|
|
27
|
+
| `framework/standards/blazor-lifecycle.md` | Component lifecycle patterns |
|
|
28
|
+
| `framework/standards/program-cs-checklist.md` | Required Program.cs setup |
|
|
29
|
+
|
|
30
|
+
### Quick Checklist
|
|
31
|
+
- [ ] Background ops: Use `IDbContextFactory` / Repository Factory (ref: blazor-efcore.md)
|
|
32
|
+
- [ ] JSRuntime: ONLY in `OnAfterRenderAsync(firstRender)`
|
|
33
|
+
- [ ] Program.cs: `UseStaticFiles()` BEFORE `UseAntiforgery()`
|
|
34
|
+
- [ ] File Upload: Specify `maxAllowedSize` in `OpenReadStream()`
|
|
35
|
+
- [ ] RenderMode: NO `@rendermode` on MainLayout
|
|
36
|
+
- [ ] Package Versions: MudBlazor >= 8.15.0 for .NET 10
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Mandatory Code Patterns
|
|
41
|
+
|
|
42
|
+
### Status Validation
|
|
43
|
+
|
|
44
|
+
```csharp
|
|
45
|
+
// ✅ Validate INVALID states (allows future extensions)
|
|
46
|
+
if (order.Status >= OrderStatus.Completed || order.Status == OrderStatus.Failed)
|
|
47
|
+
throw new InvalidOperationException("Cannot process completed or failed order");
|
|
48
|
+
|
|
49
|
+
// ❌ Never assume single valid flow
|
|
50
|
+
if (order.Status != OrderStatus.PendingPayment)
|
|
51
|
+
throw new InvalidOperationException("Invalid status");
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Enums with Logical Order
|
|
55
|
+
|
|
56
|
+
```csharp
|
|
57
|
+
public enum OrderStatus
|
|
58
|
+
{
|
|
59
|
+
Created = 0, PendingPayment = 1, Processing = 2, Completed = 3, // Normal flow
|
|
60
|
+
Failed = 100, Cancelled = 101, Refunded = 102 // Error states (high values)
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Service Pattern
|
|
65
|
+
|
|
66
|
+
```csharp
|
|
67
|
+
public async Task<Result<Order>> ProcessAsync(Guid orderId, CancellationToken ct)
|
|
68
|
+
{
|
|
69
|
+
_logger.LogInformation("Processing order {OrderId}", orderId);
|
|
70
|
+
var order = await _repository.GetByIdAsync(orderId, ct);
|
|
71
|
+
if (order == null) return Result.Failure<Order>("Order not found");
|
|
72
|
+
if (order.Status >= OrderStatus.Completed)
|
|
73
|
+
return Result.Failure<Order>("Order already completed");
|
|
74
|
+
// ... process ...
|
|
75
|
+
return Result.Success(order);
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Rules:** Logging at critical points, CancellationToken propagated, Result pattern for business errors, exceptions for infrastructure.
|
|
80
|
+
|
|
81
|
+
**More patterns:** See `code-review.md` for DTOs/contracts naming and service checklists.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Project Structure
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
src/
|
|
89
|
+
├── {App}.Domain/ # Entities, Value Objects, Enums, Exceptions
|
|
90
|
+
├── {App}.Application/ # Services, DTOs, Interfaces, Validators
|
|
91
|
+
├── {App}.Infrastructure/ # EF Core (DbContext, Configs, Migrations), External Services
|
|
92
|
+
├── {App}.Web/ # Blazor Server (Program.cs, Components, Pages, wwwroot)
|
|
93
|
+
└── tests/ # UnitTests, IntegrationTests
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Program.cs Essentials
|
|
97
|
+
|
|
98
|
+
```csharp
|
|
99
|
+
var builder = WebApplication.CreateBuilder(args);
|
|
100
|
+
builder.Services.AddRazorComponents().AddInteractiveServerComponents();
|
|
101
|
+
builder.Services.AddDbContext<AppDbContext>(o => o.UseSqlServer(connString));
|
|
102
|
+
builder.Services.AddDbContextFactory<AppDbContext>(o => o.UseSqlServer(connString));
|
|
103
|
+
// Register services, factories, Hangfire...
|
|
104
|
+
|
|
105
|
+
var app = builder.Build();
|
|
106
|
+
app.UseHttpsRedirection();
|
|
107
|
+
app.UseStaticFiles(); // BEFORE UseAntiforgery!
|
|
108
|
+
app.UseAntiforgery();
|
|
109
|
+
app.MapRazorComponents<App>().AddInteractiveServerRenderMode();
|
|
110
|
+
app.Run();
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Blazor Component Patterns
|
|
116
|
+
|
|
117
|
+
### Page with List
|
|
118
|
+
|
|
119
|
+
```razor
|
|
120
|
+
@page "/orders"
|
|
121
|
+
@inject IOrderService OrderService
|
|
122
|
+
|
|
123
|
+
@if (_orders is null) { <Loading /> }
|
|
124
|
+
else if (!_orders.Any()) { <EmptyState Message="No orders found" /> }
|
|
125
|
+
else
|
|
126
|
+
{
|
|
127
|
+
@foreach (var order in _orders)
|
|
128
|
+
{
|
|
129
|
+
<FluentCard>@order.OrderNumber - @order.Total.ToString("C")</FluentCard>
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
@code {
|
|
134
|
+
private List<OrderDto>? _orders;
|
|
135
|
+
protected override async Task OnInitializedAsync()
|
|
136
|
+
=> _orders = await OrderService.GetAllAsync();
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Form with Validation
|
|
141
|
+
|
|
142
|
+
```razor
|
|
143
|
+
@page "/orders/new"
|
|
144
|
+
<EditForm Model="_model" OnValidSubmit="HandleSubmit">
|
|
145
|
+
<DataAnnotationsValidator />
|
|
146
|
+
<InputSelect @bind-Value="_model.CustomerId">...</InputSelect>
|
|
147
|
+
<ValidationMessage For="() => _model.CustomerId" />
|
|
148
|
+
<button type="submit" disabled="@_isSubmitting">Save</button>
|
|
149
|
+
</EditForm>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## UI Libraries
|
|
155
|
+
|
|
156
|
+
> **Decision matrix:** See `ui-ux-designer.md` skill for full comparison.
|
|
157
|
+
|
|
158
|
+
| Library | When | Key Advantage |
|
|
159
|
+
|---------|------|---------------|
|
|
160
|
+
| **Fluent UI** | AI-first, Microsoft stack | Performance (~200KB), AI components |
|
|
161
|
+
| **MudBlazor** | Complex dashboards | 140+ components, charts |
|
|
162
|
+
| **Hybrid** | SaaS with AI + analytics | Best of both |
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## .NET 10 Features
|
|
167
|
+
|
|
168
|
+
### PersistentState (new)
|
|
169
|
+
```razor
|
|
170
|
+
@code {
|
|
171
|
+
[PersistentState]
|
|
172
|
+
private int Count { get; set; } = 0; // Survives pre-rendering & circuit disconnections
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Circuit Pause/Resume (new)
|
|
177
|
+
```javascript
|
|
178
|
+
document.addEventListener('visibilitychange', () => {
|
|
179
|
+
document.hidden ? Blazor.pauseCircuit() : Blazor.resumeCircuit();
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Nested Model Validation (new)
|
|
184
|
+
```csharp
|
|
185
|
+
builder.Services.AddValidation(); // Enables automatic nested model validation
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Blazor Metrics
|
|
189
|
+
```csharp
|
|
190
|
+
builder.Services.AddOpenTelemetry()
|
|
191
|
+
.WithTracing(t => t.AddSource("Microsoft.AspNetCore.Components.Server"))
|
|
192
|
+
.WithMetrics(m => m.AddMeter("Microsoft.AspNetCore.Components.Server"));
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Project Checklist
|
|
198
|
+
|
|
199
|
+
- [ ] Clean Architecture layers (Domain, Application, Infrastructure, Web)
|
|
200
|
+
- [ ] EF Core with migrations + IDbContextFactory
|
|
201
|
+
- [ ] Repository Factory for background ops (ref: blazor-efcore.md)
|
|
202
|
+
- [ ] Blazor Server with reusable components
|
|
203
|
+
- [ ] Services with DI + structured logging
|
|
204
|
+
- [ ] Validation (FluentValidation or DataAnnotations)
|
|
205
|
+
- [ ] Hangfire for background jobs
|
|
206
|
+
- [ ] Dockerfile for containerization
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
*MORPH-SPEC by Polymorphism Tech*
|