@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.
Files changed (386) hide show
  1. package/README.md +1 -14
  2. package/bin/detect-agents.js +1 -1
  3. package/bin/morph-spec.js +403 -40
  4. package/bin/validate.js +5 -5
  5. package/docs/getting-started.md +0 -5
  6. package/docs/next-generation/AGENTS.md +521 -0
  7. package/docs/next-generation/ANALYSIS.md +555 -0
  8. package/docs/next-generation/ARCHITECTURE.md +436 -0
  9. package/docs/next-generation/CONTEXT-OPTIMIZATION.md +267 -0
  10. package/docs/next-generation/EXECUTION-FLOW.md +274 -0
  11. package/docs/next-generation/FEATURES.md +688 -0
  12. package/docs/next-generation/META-PROMPTS.md +235 -0
  13. package/docs/next-generation/MIGRATION-GUIDE.md +253 -0
  14. package/docs/next-generation/README.md +231 -0
  15. package/docs/next-generation/ROADMAP.md +801 -0
  16. package/docs/next-generation/THREAD-MANAGEMENT.md +240 -0
  17. package/docs/validation-checklist.md +0 -1
  18. package/package.json +5 -5
  19. package/src/commands/agents/agents-fuse.js +96 -0
  20. package/src/commands/agents/index.js +4 -0
  21. package/src/commands/agents/micro-agent.js +112 -0
  22. package/src/commands/{spawn-team.js → agents/spawn-team.js} +237 -172
  23. package/src/commands/agents/squad-template.js +146 -0
  24. package/src/commands/analytics/analytics.js +176 -0
  25. package/src/commands/context/context-prime.js +63 -0
  26. package/src/commands/context/core-four.js +54 -0
  27. package/src/commands/{create-story.js → feature/create-story.js} +357 -354
  28. package/src/commands/feature/index.js +6 -0
  29. package/src/commands/{shard-spec.js → feature/shard-spec.js} +2 -2
  30. package/src/commands/{sprint-status.js → feature/sprint-status.js} +1 -1
  31. package/src/commands/{generate-context.js → generation/generate-context.js} +40 -40
  32. package/src/commands/{generate.js → generation/generate.js} +4 -4
  33. package/src/commands/generation/index.js +5 -0
  34. package/src/commands/index.js +16 -0
  35. package/src/commands/{capture-pattern.js → learning/capture-pattern.js} +121 -121
  36. package/src/commands/learning/index.js +5 -0
  37. package/src/commands/mcp/mcp.js +102 -0
  38. package/src/commands/{detect-agents.js → project/detect-agents.js} +178 -178
  39. package/src/commands/project/detect-workflow.js +174 -0
  40. package/src/commands/{detect.js → project/detect.js} +104 -104
  41. package/src/commands/{doctor.js → project/doctor.js} +221 -4
  42. package/src/commands/project/index.js +10 -0
  43. package/src/commands/{init.js → project/init.js} +305 -295
  44. package/src/commands/{sync.js → project/sync.js} +167 -167
  45. package/src/commands/{update.js → project/update.js} +240 -240
  46. package/src/commands/{advance-phase.js → state/advance-phase.js} +101 -25
  47. package/src/commands/{approve.js → state/approve.js} +221 -221
  48. package/src/commands/state/index.js +8 -0
  49. package/src/commands/{rollback-phase.js → state/rollback-phase.js} +185 -185
  50. package/src/commands/{state.js → state/state.js} +334 -334
  51. package/src/commands/{validate-phase.js → state/validate-phase.js} +221 -221
  52. package/src/commands/tasks/index.js +4 -0
  53. package/src/commands/{task.js → tasks/task.js} +78 -78
  54. package/src/commands/templates/index.js +8 -0
  55. package/src/commands/templates/template-customize.js +101 -0
  56. package/src/commands/templates/template-list.js +128 -0
  57. package/src/commands/templates/template-render.js +174 -0
  58. package/src/commands/templates/template-show.js +131 -0
  59. package/src/commands/templates/template-validate.js +91 -0
  60. package/src/commands/threads/thread-template.js +103 -0
  61. package/src/commands/threads/threads.js +261 -0
  62. package/src/commands/trust/trust.js +205 -0
  63. package/src/commands/utils/index.js +7 -0
  64. package/src/commands/{session-summary.js → utils/session-summary.js} +291 -291
  65. package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
  66. package/src/commands/{analyze-blazor-concurrency.js → validation/analyze-blazor-concurrency.js} +193 -193
  67. package/src/commands/validation/index.js +8 -0
  68. package/src/commands/{lint-fluent.js → validation/lint-fluent.js} +352 -352
  69. package/src/commands/{validate-blazor-state.js → validation/validate-blazor-state.js} +210 -210
  70. package/src/commands/{validate-blazor.js → validation/validate-blazor.js} +156 -156
  71. package/src/commands/{validate-css.js → validation/validate-css.js} +84 -84
  72. package/src/core/index.js +10 -0
  73. package/src/{orchestrator.js → core/orchestrator.js} +8 -8
  74. package/src/core/registry/command-registry.js +302 -0
  75. package/src/core/registry/index.js +8 -0
  76. package/src/core/registry/validator-registry.js +204 -0
  77. package/src/core/state/index.js +8 -0
  78. package/src/{lib → core/state}/phase-state-machine.js +214 -214
  79. package/src/{lib → core/state}/state-manager.js +588 -534
  80. package/src/core/templates/index.js +9 -0
  81. package/src/core/templates/template-registry.js +335 -0
  82. package/src/core/templates/template-renderer.js +477 -0
  83. package/src/core/templates/template-validator.js +296 -0
  84. package/src/core/workflows/index.js +7 -0
  85. package/src/core/workflows/workflow-detector.js +452 -0
  86. package/src/lib/agents/micro-agent-factory.js +161 -0
  87. package/src/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
  88. package/src/lib/analysis/index.js +7 -0
  89. package/src/lib/analytics/analytics-engine.js +345 -0
  90. package/src/lib/{checkpoint-hooks.js → checkpoints/checkpoint-hooks.js} +35 -0
  91. package/src/lib/checkpoints/index.js +7 -0
  92. package/src/lib/context/context-bundler.js +240 -0
  93. package/src/lib/context/context-optimizer.js +212 -0
  94. package/src/lib/context/context-tracker.js +273 -0
  95. package/src/lib/context/core-four-tracker.js +201 -0
  96. package/src/lib/context/mcp-optimizer.js +200 -0
  97. package/src/lib/detectors/config-detector.js +223 -223
  98. package/src/lib/detectors/conversation-analyzer.js +163 -163
  99. package/src/lib/{design-system-detector.js → detectors/design-system-detector.js} +187 -187
  100. package/src/lib/detectors/index.js +87 -84
  101. package/src/lib/detectors/standards-generator.js +275 -275
  102. package/src/lib/detectors/structure-detector.js +245 -245
  103. package/src/lib/execution/fusion-executor.js +304 -0
  104. package/src/lib/execution/parallel-executor.js +270 -0
  105. package/src/lib/{context-generator.js → generators/context-generator.js} +526 -516
  106. package/src/lib/generators/index.js +10 -0
  107. package/src/lib/{metadata-extractor.js → generators/metadata-extractor.js} +387 -380
  108. package/src/lib/{recap-generator.js → generators/recap-generator.js} +205 -205
  109. package/src/lib/hooks/hook-executor.js +169 -0
  110. package/src/lib/hooks/stop-hook-executor.js +286 -0
  111. package/src/lib/hops/hop-composer.js +221 -0
  112. package/src/lib/learning/index.js +7 -0
  113. package/src/lib/orchestration/index.js +7 -0
  114. package/src/lib/{team-orchestrator.js → orchestration/team-orchestrator.js} +323 -323
  115. package/src/lib/stacks/index.js +7 -0
  116. package/src/lib/{stack-resolver.js → stacks/stack-resolver.js} +180 -148
  117. package/src/lib/standards/index.js +7 -0
  118. package/src/lib/{standards-context-injector.js → standards/standards-context-injector.js} +298 -288
  119. package/src/lib/threads/thread-coordinator.js +238 -0
  120. package/src/lib/threads/thread-manager.js +317 -0
  121. package/src/lib/tracking/artifact-trail.js +202 -0
  122. package/src/lib/troubleshooting/index.js +8 -0
  123. package/src/lib/{troubleshoot-grep.js → troubleshooting/troubleshoot-grep.js} +204 -204
  124. package/src/lib/{troubleshoot-index.js → troubleshooting/troubleshoot-index.js} +144 -144
  125. package/src/lib/trust/trust-manager.js +269 -0
  126. package/src/lib/validators/{architecture-validator.js → architecture/architecture-validator.js} +8 -8
  127. package/src/lib/validators/architecture/index.js +7 -0
  128. package/src/lib/{blazor-concurrency-analyzer.js → validators/blazor/blazor-concurrency-analyzer.js} +277 -288
  129. package/src/lib/{blazor-state-validator.js → validators/blazor/blazor-state-validator.js} +279 -291
  130. package/src/lib/{blazor-validator.js → validators/blazor/blazor-validator.js} +369 -374
  131. package/src/lib/validators/blazor/index.js +9 -0
  132. package/src/lib/validators/{content-validator.js → content/content-validator.js} +351 -351
  133. package/src/lib/validators/content/index.js +7 -0
  134. package/src/lib/validators/{contract-compliance-validator.js → contracts/contract-compliance-validator.js} +273 -273
  135. package/src/lib/validators/contracts/index.js +7 -0
  136. package/src/lib/{css-validator.js → validators/css/css-validator.js} +352 -352
  137. package/src/lib/validators/css/index.js +7 -0
  138. package/src/lib/validators/{design-system-validator.js → design-system/design-system-validator.js} +231 -231
  139. package/src/lib/validators/design-system/index.js +7 -0
  140. package/src/lib/validators/packages/index.js +7 -0
  141. package/src/lib/validators/shared/index.js +12 -0
  142. package/src/lib/validators/shared/issue-counter.js +18 -0
  143. package/src/lib/validators/shared/result-formatter.js +124 -0
  144. package/src/lib/{spec-validator.js → validators/spec-validator.js} +258 -258
  145. package/src/lib/validators/ui/index.js +7 -0
  146. package/src/lib/{validation-runner.js → validators/validation-runner.js} +286 -284
  147. package/src/ui/wizard-questions.js +0 -2
  148. package/src/utils/color-utils.js +70 -0
  149. package/src/utils/file-copier.js +188 -189
  150. package/src/utils/process-handler.js +97 -0
  151. package/stacks/blazor-azure/.morph/config/agents.json +948 -764
  152. package/stacks/blazor-azure/.morph/hooks/{pre-commit-tests.sh → pre-commit/tests-csharp.sh} +3 -2
  153. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +41 -0
  154. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +24 -0
  155. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +23 -0
  156. package/stacks/nextjs-supabase/.morph/config/agents.json +345 -345
  157. package/stacks/nextjs-supabase/.morph/hooks/pre-commit/tests-typescript.sh +61 -0
  158. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +22 -0
  159. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +22 -0
  160. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +35 -0
  161. package/stacks/nextjs-supabase/README.md +6 -15
  162. package/CLAUDE.md +0 -648
  163. package/bin/render-template.js +0 -349
  164. package/bin/semantic-detect-agents.js +0 -247
  165. package/bin/validate-agents-skills.js +0 -257
  166. package/bin/validate-agents.js +0 -70
  167. package/bin/validate-phase.js +0 -263
  168. package/docs/examples.md +0 -328
  169. package/docs/llm-interaction-config.md +0 -735
  170. package/scripts/reorganize-skills.cjs +0 -175
  171. package/scripts/validate-agents-structure.cjs +0 -52
  172. package/scripts/validate-skills.cjs +0 -180
  173. package/src/commands/deploy.js +0 -780
  174. package/src/commands/migrate-state.js +0 -158
  175. package/src/commands/upgrade.js +0 -346
  176. package/src/lib/continuous-validator.js +0 -421
  177. package/src/lib/decision-constraint-loader.js +0 -109
  178. package/src/lib/design-system-scaffolder.js +0 -299
  179. package/src/lib/hook-executor.js +0 -257
  180. package/src/lib/mockup-generator.js +0 -366
  181. package/src/lib/ui-detector.js +0 -350
  182. package/src/llm/schema-validator.js +0 -121
  183. package/src/sanitizer/.gitkeep +0 -0
  184. package/src/scanner/.gitkeep +0 -0
  185. package/src/types/index.js +0 -477
  186. package/src/ui/.gitkeep +0 -0
  187. package/src/writer/.gitkeep +0 -0
  188. package/stacks/blazor-azure/.azure/README.md +0 -293
  189. package/stacks/blazor-azure/.azure/docs/azure-devops-setup.md +0 -454
  190. package/stacks/blazor-azure/.azure/docs/branch-strategy.md +0 -398
  191. package/stacks/blazor-azure/.azure/docs/local-development.md +0 -515
  192. package/stacks/blazor-azure/.azure/pipelines/pipeline-variables.yml +0 -34
  193. package/stacks/blazor-azure/.azure/pipelines/prod-pipeline.yml +0 -319
  194. package/stacks/blazor-azure/.azure/pipelines/staging-pipeline.yml +0 -234
  195. package/stacks/blazor-azure/.azure/pipelines/templates/build-dotnet.yml +0 -75
  196. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-app-service.yml +0 -94
  197. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-container-app.yml +0 -120
  198. package/stacks/blazor-azure/.azure/pipelines/templates/infra-deploy.yml +0 -90
  199. package/stacks/blazor-azure/.claude/commands/morph-apply.md +0 -221
  200. package/stacks/blazor-azure/.claude/commands/morph-archive.md +0 -79
  201. package/stacks/blazor-azure/.claude/commands/morph-deploy.md +0 -529
  202. package/stacks/blazor-azure/.claude/commands/morph-infra.md +0 -209
  203. package/stacks/blazor-azure/.claude/commands/morph-preflight.md +0 -227
  204. package/stacks/blazor-azure/.claude/commands/morph-proposal.md +0 -122
  205. package/stacks/blazor-azure/.claude/commands/morph-status.md +0 -86
  206. package/stacks/blazor-azure/.claude/commands/morph-troubleshoot.md +0 -122
  207. package/stacks/blazor-azure/.claude/settings.local.json +0 -15
  208. package/stacks/blazor-azure/.claude/skills/level-0-meta/README.md +0 -7
  209. package/stacks/blazor-azure/.claude/skills/level-0-meta/code-review.md +0 -226
  210. package/stacks/blazor-azure/.claude/skills/level-0-meta/morph-checklist.md +0 -117
  211. package/stacks/blazor-azure/.claude/skills/level-0-meta/simulation-checklist.md +0 -77
  212. package/stacks/blazor-azure/.claude/skills/level-1-workflows/README.md +0 -7
  213. package/stacks/blazor-azure/.claude/skills/level-1-workflows/morph-replicate.md +0 -213
  214. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-clarify.md +0 -131
  215. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-design.md +0 -213
  216. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-setup.md +0 -106
  217. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-tasks.md +0 -164
  218. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-uiux.md +0 -169
  219. package/stacks/blazor-azure/.claude/skills/level-2-domains/README.md +0 -14
  220. package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +0 -192
  221. package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/po-pm-advisor.md +0 -197
  222. package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/prompt-engineer.md +0 -189
  223. package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/seo-growth-hacker.md +0 -320
  224. package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/standards-architect.md +0 -156
  225. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +0 -287
  226. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +0 -113
  227. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +0 -126
  228. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +0 -109
  229. package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/blazor-builder.md +0 -210
  230. package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/nextjs-expert.md +0 -154
  231. package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +0 -191
  232. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-architect.md +0 -142
  233. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +0 -699
  234. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +0 -126
  235. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/container-specialist.md +0 -131
  236. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +0 -119
  237. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/asaas-financial.md +0 -130
  238. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/azure-identity.md +0 -142
  239. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/clerk-auth.md +0 -108
  240. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/resend-email.md +0 -119
  241. package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/code-analyzer.md +0 -235
  242. package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/testing-specialist.md +0 -126
  243. package/stacks/blazor-azure/.claude/skills/level-3-technologies/README.md +0 -7
  244. package/stacks/blazor-azure/.claude/skills/level-4-patterns/README.md +0 -7
  245. package/stacks/blazor-azure/.morph/archive/.gitkeep +0 -25
  246. package/stacks/blazor-azure/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -392
  247. package/stacks/blazor-azure/.morph/docs/workflows/design-impl.md +0 -37
  248. package/stacks/blazor-azure/.morph/docs/workflows/enforcement-pipeline.md +0 -668
  249. package/stacks/blazor-azure/.morph/docs/workflows/fast-track.md +0 -29
  250. package/stacks/blazor-azure/.morph/docs/workflows/full-morph.md +0 -76
  251. package/stacks/blazor-azure/.morph/docs/workflows/standard.md +0 -44
  252. package/stacks/blazor-azure/.morph/docs/workflows/ui-refresh.md +0 -39
  253. package/stacks/blazor-azure/.morph/examples/api-nextjs/README.md +0 -241
  254. package/stacks/blazor-azure/.morph/examples/api-nextjs/contracts.ts +0 -307
  255. package/stacks/blazor-azure/.morph/examples/api-nextjs/spec.md +0 -399
  256. package/stacks/blazor-azure/.morph/examples/api-nextjs/tasks.md +0 -168
  257. package/stacks/blazor-azure/.morph/examples/micro-saas/README.md +0 -125
  258. package/stacks/blazor-azure/.morph/examples/micro-saas/contracts.cs +0 -358
  259. package/stacks/blazor-azure/.morph/examples/micro-saas/decisions.md +0 -246
  260. package/stacks/blazor-azure/.morph/examples/micro-saas/spec.md +0 -236
  261. package/stacks/blazor-azure/.morph/examples/micro-saas/tasks.md +0 -150
  262. package/stacks/blazor-azure/.morph/examples/multi-agent/README.md +0 -309
  263. package/stacks/blazor-azure/.morph/examples/multi-agent/contracts.cs +0 -433
  264. package/stacks/blazor-azure/.morph/examples/multi-agent/spec.md +0 -479
  265. package/stacks/blazor-azure/.morph/examples/multi-agent/tasks.md +0 -185
  266. package/stacks/blazor-azure/.morph/examples/scheduled-reports/decisions.md +0 -158
  267. package/stacks/blazor-azure/.morph/examples/scheduled-reports/proposal.md +0 -95
  268. package/stacks/blazor-azure/.morph/examples/scheduled-reports/spec.md +0 -267
  269. package/stacks/blazor-azure/.morph/examples/state-v3.json +0 -188
  270. package/stacks/blazor-azure/.morph/features/.gitkeep +0 -25
  271. package/stacks/blazor-azure/.morph/hooks/README.md +0 -348
  272. package/stacks/blazor-azure/.morph/hooks/pre-commit-agents.sh +0 -24
  273. package/stacks/blazor-azure/.morph/hooks/pre-commit-all.sh +0 -48
  274. package/stacks/blazor-azure/.morph/hooks/pre-commit-specs.sh +0 -49
  275. package/stacks/blazor-azure/.morph/hooks/task-completed.js +0 -73
  276. package/stacks/blazor-azure/.morph/hooks/teammate-idle.js +0 -68
  277. package/stacks/blazor-azure/.morph/schemas/agent.schema.json +0 -296
  278. package/stacks/blazor-azure/.morph/schemas/tasks.schema.json +0 -220
  279. package/stacks/blazor-azure/.morph/specs/.gitkeep +0 -20
  280. package/stacks/blazor-azure/.morph/standards/agent-framework-blazor-ui.md +0 -359
  281. package/stacks/blazor-azure/.morph/standards/agent-framework-production.md +0 -410
  282. package/stacks/blazor-azure/.morph/standards/agent-framework-setup.md +0 -413
  283. package/stacks/blazor-azure/.morph/standards/agent-framework-workflows.md +0 -349
  284. package/stacks/blazor-azure/.morph/standards/agent-teams-workflow.md +0 -474
  285. package/stacks/blazor-azure/.morph/standards/architecture.md +0 -325
  286. package/stacks/blazor-azure/.morph/standards/azure.md +0 -605
  287. package/stacks/blazor-azure/.morph/standards/coding.md +0 -377
  288. package/stacks/blazor-azure/.morph/standards/dotnet10-migration.md +0 -520
  289. package/stacks/blazor-azure/.morph/standards/fluent-ui-setup.md +0 -590
  290. package/stacks/blazor-azure/.morph/standards/migration-guide.md +0 -514
  291. package/stacks/blazor-azure/.morph/standards/passkeys-auth.md +0 -423
  292. package/stacks/blazor-azure/.morph/standards/vector-search-rag.md +0 -536
  293. package/stacks/blazor-azure/.morph/templates/CONTEXT-FEATURE.md +0 -276
  294. package/stacks/blazor-azure/.morph/templates/CONTEXT.md +0 -170
  295. package/stacks/blazor-azure/.morph/templates/FluentDesignTheme.cs +0 -149
  296. package/stacks/blazor-azure/.morph/templates/MudTheme.cs +0 -281
  297. package/stacks/blazor-azure/.morph/templates/agent.cs +0 -163
  298. package/stacks/blazor-azure/.morph/templates/clarify-questions.md +0 -159
  299. package/stacks/blazor-azure/.morph/templates/component.razor +0 -239
  300. package/stacks/blazor-azure/.morph/templates/contracts/Commands.cs +0 -74
  301. package/stacks/blazor-azure/.morph/templates/contracts/Entities.cs +0 -25
  302. package/stacks/blazor-azure/.morph/templates/contracts/Queries.cs +0 -74
  303. package/stacks/blazor-azure/.morph/templates/contracts/README.md +0 -74
  304. package/stacks/blazor-azure/.morph/templates/contracts.cs +0 -217
  305. package/stacks/blazor-azure/.morph/templates/decisions.md +0 -123
  306. package/stacks/blazor-azure/.morph/templates/design-system.css +0 -226
  307. package/stacks/blazor-azure/.morph/templates/infra/.dockerignore.example +0 -89
  308. package/stacks/blazor-azure/.morph/templates/infra/Dockerfile.example +0 -82
  309. package/stacks/blazor-azure/.morph/templates/infra/README.md +0 -286
  310. package/stacks/blazor-azure/.morph/templates/infra/app-insights.bicep +0 -63
  311. package/stacks/blazor-azure/.morph/templates/infra/app-service.bicep +0 -164
  312. package/stacks/blazor-azure/.morph/templates/infra/azure-pipelines-deploy.yml +0 -480
  313. package/stacks/blazor-azure/.morph/templates/infra/container-app-env.bicep +0 -49
  314. package/stacks/blazor-azure/.morph/templates/infra/container-app.bicep +0 -156
  315. package/stacks/blazor-azure/.morph/templates/infra/deploy-checklist.md +0 -426
  316. package/stacks/blazor-azure/.morph/templates/infra/deploy.ps1 +0 -229
  317. package/stacks/blazor-azure/.morph/templates/infra/deploy.sh +0 -208
  318. package/stacks/blazor-azure/.morph/templates/infra/key-vault.bicep +0 -91
  319. package/stacks/blazor-azure/.morph/templates/infra/main.bicep +0 -189
  320. package/stacks/blazor-azure/.morph/templates/infra/parameters.dev.json +0 -29
  321. package/stacks/blazor-azure/.morph/templates/infra/parameters.prod.json +0 -29
  322. package/stacks/blazor-azure/.morph/templates/infra/parameters.staging.json +0 -29
  323. package/stacks/blazor-azure/.morph/templates/infra/sql-database.bicep +0 -103
  324. package/stacks/blazor-azure/.morph/templates/infra/storage.bicep +0 -106
  325. package/stacks/blazor-azure/.morph/templates/integrations/asaas-client.cs +0 -387
  326. package/stacks/blazor-azure/.morph/templates/integrations/asaas-webhook.cs +0 -351
  327. package/stacks/blazor-azure/.morph/templates/integrations/azure-identity-config.cs +0 -288
  328. package/stacks/blazor-azure/.morph/templates/integrations/clerk-config.cs +0 -258
  329. package/stacks/blazor-azure/.morph/templates/job.cs +0 -171
  330. package/stacks/blazor-azure/.morph/templates/migration.cs +0 -83
  331. package/stacks/blazor-azure/.morph/templates/proposal.md +0 -141
  332. package/stacks/blazor-azure/.morph/templates/recap.md +0 -94
  333. package/stacks/blazor-azure/.morph/templates/repository.cs +0 -141
  334. package/stacks/blazor-azure/.morph/templates/saas/subscription.cs +0 -347
  335. package/stacks/blazor-azure/.morph/templates/saas/tenant.cs +0 -338
  336. package/stacks/blazor-azure/.morph/templates/service.cs +0 -139
  337. package/stacks/blazor-azure/.morph/templates/simulation.md +0 -353
  338. package/stacks/blazor-azure/.morph/templates/spec.md +0 -149
  339. package/stacks/blazor-azure/.morph/templates/sprint-status.yaml +0 -68
  340. package/stacks/blazor-azure/.morph/templates/state.template.json +0 -222
  341. package/stacks/blazor-azure/.morph/templates/story.md +0 -143
  342. package/stacks/blazor-azure/.morph/templates/tasks.md +0 -257
  343. package/stacks/blazor-azure/.morph/templates/test.cs +0 -239
  344. package/stacks/blazor-azure/.morph/templates/ui-components.md +0 -362
  345. package/stacks/blazor-azure/.morph/templates/ui-design-system.md +0 -286
  346. package/stacks/blazor-azure/.morph/templates/ui-flows.md +0 -336
  347. package/stacks/blazor-azure/.morph/templates/ui-mockups.md +0 -133
  348. package/stacks/blazor-azure/.morph/test-infra/example.bicep +0 -59
  349. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/backend/dotnet-supabase.md +0 -244
  350. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/frontend/nextjs-supabase.md +0 -335
  351. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/infrastructure/easypanel-deployer.md +0 -189
  352. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +0 -170
  353. package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +0 -169
  354. package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +0 -247
  355. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +0 -697
  356. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +0 -85
  357. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +0 -86
  358. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +0 -498
  359. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +0 -121
  360. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +0 -138
  361. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +0 -162
  362. package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +0 -191
  363. package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +0 -193
  364. package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +0 -171
  365. package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +0 -164
  366. package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +0 -179
  367. package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +0 -148
  368. package/stacks/nextjs-supabase/.morph/templates/contracts.cs +0 -173
  369. package/stacks/nextjs-supabase/.morph/templates/contracts.ts +0 -168
  370. package/stacks/nextjs-supabase/.morph/templates/decisions.md +0 -115
  371. package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +0 -38
  372. package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +0 -48
  373. package/stacks/nextjs-supabase/.morph/templates/proposal.md +0 -145
  374. package/stacks/nextjs-supabase/.morph/templates/recap.md +0 -134
  375. package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +0 -57
  376. package/stacks/nextjs-supabase/.morph/templates/spec.md +0 -231
  377. package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +0 -100
  378. package/stacks/nextjs-supabase/.morph/templates/tasks.md +0 -257
  379. /package/src/commands/{search-patterns.js → learning/search-patterns.js} +0 -0
  380. /package/src/{lib → core/templates}/template-data-sources.js +0 -0
  381. /package/src/lib/{design-system-generator.js → generators/design-system-generator.js} +0 -0
  382. /package/src/lib/{learning-system.js → learning/learning-system.js} +0 -0
  383. /package/src/lib/validators/{package-validator.js → packages/package-validator.js} +0 -0
  384. /package/src/lib/validators/{ui-contrast-validator.js → ui/ui-contrast-validator.js} +0 -0
  385. /package/{src/generator → stacks/blazor-azure/.morph/templates}/.gitkeep +0 -0
  386. /package/{src/llm → stacks/nextjs-supabase/.morph/templates}/.gitkeep +0 -0
@@ -1,699 +0,0 @@
1
- # Azure Deploy Specialist
2
-
3
- Especialista em deploy end-to-end para Azure Container Apps com abordagem de playbook rigoroso. Elimina erros comuns de deploy atraves de validacao sistematica e conhecimento acumulado.
4
-
5
- ## Responsabilidades
6
-
7
- 1. **Orquestrar deploys** em fases sequenciais (infra primeiro, app depois)
8
- 2. **Detectar configuracoes** automaticamente de appsettings.json e Program.cs
9
- 3. **Mapear env vars** para Container Apps secrets/environment variables
10
- 4. **Validar prerequisites** antes de iniciar qualquer deploy
11
- 5. **Pausar para info sensivel** (passwords, tenant IDs, connection strings)
12
- 6. **Troubleshoot erros comuns** com knowledge base integrado
13
- 7. **Executar rollback automatico** em caso de falha
14
- 8. **Gerar pipelines Azure DevOps** para CI/CD
15
-
16
- ## Triggers
17
-
18
- Keywords: `deploy`, `deployment`, `publish`, `release`, `prod`, `staging`, `container app deploy`, `azure deploy`, `go live`, `push to azure`, `roll out`, `ship`, `launch`
19
-
20
- ---
21
-
22
- ## REGRAS CRITICAS (NUNCA QUEBRE)
23
-
24
- ### NUNCA:
25
- - [ ] Deploy app antes da infraestrutura existir
26
- - [ ] Auto-preencher info sensivel (passwords, tenant IDs, client secrets)
27
- - [ ] Pular sticky sessions para Blazor Server
28
- - [ ] Usar caracteres especiais em senhas (!, @, #, $) - causa escape
29
- - [ ] Assumir que ferramentas estao instaladas - SEMPRE verificar
30
- - [ ] Usar `az login` simples se usuario tem MFA
31
- - [ ] Setar env vars sem verificar nomes no codigo fonte
32
- - [ ] Usar `dotnet ef` sem verificar se esta no PATH
33
- - [ ] Pular validacao de custos (cost-guardian)
34
- - [ ] Deploy para prod sem validar em staging primeiro
35
-
36
- ### SEMPRE:
37
- - [ ] Verificar pre-requisitos antes de QUALQUER operacao
38
- - [ ] Deploy em fases (Bicep primeiro, Container App depois)
39
- - [ ] Rodar what-if antes de deploy real
40
- - [ ] Pausar para info sensivel (nunca auto-fill)
41
- - [ ] Validar custos antes de provisionar recursos pagos
42
- - [ ] Verificar sticky sessions para Blazor Server
43
- - [ ] Usar senhas alfanumericas simples (ex: `FishArt2025SecurePwd`)
44
- - [ ] Fazer restart apos mudar secrets/env vars
45
- - [ ] Testar conexoes antes de assumir que funcionam
46
- - [ ] Documentar deployment em decisions.md
47
-
48
- ---
49
-
50
- ## PLAYBOOK DE DEPLOY
51
-
52
- ### FASE 0: PRE-REQUISITOS
53
-
54
- **Verificacoes automaticas (Claude executa silenciosamente):**
55
-
56
- ```powershell
57
- # 1. Verificar Azure CLI
58
- az --version
59
- # Se nao tiver: https://aka.ms/installazurecliwindows (MSI direto)
60
- # NUNCA usar winget - pode nao estar disponivel
61
-
62
- # 2. Verificar Docker
63
- docker --version
64
- docker info # Verifica se daemon esta rodando
65
-
66
- # 3. Verificar .NET SDK
67
- dotnet --version
68
-
69
- # 4. Verificar dotnet-ef
70
- dotnet tool list --global | findstr "dotnet-ef"
71
- # Se nao tiver: dotnet tool install --global dotnet-ef
72
- # IMPORTANTE: Pode precisar usar path completo: ~/.dotnet/tools/dotnet-ef
73
- ```
74
-
75
- **Checklist de pre-requisitos:**
76
-
77
- | Check | Comando | Acao se Falhar |
78
- |-------|---------|----------------|
79
- | Azure CLI | `az --version` | Link para MSI: https://aka.ms/installazurecliwindows |
80
- | Azure Login | `az account show` | `az login --tenant <TENANT-ID>` |
81
- | Docker | `docker info` | Iniciar Docker Desktop |
82
- | .NET SDK | `dotnet --version` | https://dot.net/download |
83
- | dotnet-ef | `dotnet tool list -g` | `dotnet tool install -g dotnet-ef` |
84
- | Projeto compila | `dotnet build` | Corrigir erros antes de continuar |
85
-
86
- **PAUSA OBRIGATORIA:**
87
- ```
88
- Subscription detectada: {subscription_name} ({subscription_id})
89
- Esta correto? (sim/nao)
90
- ```
91
-
92
- ---
93
-
94
- ### FASE 1: DETECCAO DE CONFIGURACAO
95
-
96
- **1.1 Localizar arquivos de configuracao:**
97
-
98
- ```powershell
99
- # Encontrar appsettings
100
- Get-ChildItem -Recurse -Filter "appsettings*.json" | Select-Object FullName
101
-
102
- # Encontrar Program.cs
103
- Get-ChildItem -Recurse -Filter "Program.cs" | Select-Object FullName
104
- ```
105
-
106
- **1.2 Parsear appsettings.json:**
107
-
108
- Padroes a detectar:
109
- ```json
110
- {
111
- "ConnectionStrings": {
112
- "DefaultConnection": "...", // → CONNECTIONSTRINGS__DEFAULTCONNECTION
113
- "HangfireConnection": "..." // → HANGFIRE__CONNECTIONSTRING
114
- },
115
- "Azure": {
116
- "KeyVault": "...", // → AZURE__KEYVAULT
117
- "Storage": {
118
- "AccountName": "...", // → AZURE__STORAGE__ACCOUNTNAME
119
- "ConnectionString": "..." // → AZURE__STORAGE__CONNECTIONSTRING
120
- }
121
- },
122
- "ApplicationInsights": {
123
- "ConnectionString": "..." // → APPLICATIONINSIGHTS__CONNECTIONSTRING
124
- },
125
- "Clerk": {
126
- "SecretKey": "...", // → CLERK__SECRETKEY
127
- "PublishableKey": "..." // → CLERK__PUBLISHABLEKEY
128
- },
129
- "AzureAd": {
130
- "TenantId": "...", // → AZUREAD__TENANTID
131
- "ClientId": "...", // → AZUREAD__CLIENTID
132
- "ClientSecret": "..." // → AZUREAD__CLIENTSECRET
133
- }
134
- }
135
- ```
136
-
137
- **1.3 Detectar Blazor Server em Program.cs:**
138
-
139
- ```csharp
140
- // Padroes que indicam Blazor Server (REQUER sticky sessions):
141
- .AddInteractiveServerComponents()
142
- .AddServerSideBlazor()
143
- builder.Services.AddRazorComponents().AddInteractiveServerComponents()
144
- app.MapBlazorHub()
145
- ```
146
-
147
- **1.4 Gerar mapeamento de env vars:**
148
-
149
- ```markdown
150
- ## Configuracao Detectada
151
-
152
- ### Connection Strings
153
- | Config Path | Env Var | Tipo | Valor |
154
- |-------------|---------|------|-------|
155
- | ConnectionStrings:DefaultConnection | CONNECTIONSTRINGS__DEFAULTCONNECTION | Secret | (preencher) |
156
-
157
- ### Azure Services
158
- | Config Path | Env Var | Tipo | Valor |
159
- |-------------|---------|------|-------|
160
- | Azure:Storage:ConnectionString | AZURE__STORAGE__CONNECTIONSTRING | Secret | (preencher) |
161
-
162
- ### Blazor Server Detectado
163
- **SIM** - Sticky sessions OBRIGATORIAS
164
-
165
- ### Autenticacao Detectada
166
- Azure AD - Requer TenantId, ClientId, ClientSecret
167
- ```
168
-
169
- ---
170
-
171
- ### FASE 2: COLETA DE INFORMACOES SENSIVEIS
172
-
173
- **PAUSA OBRIGATORIA - Nunca auto-preencher:**
174
-
175
- ```markdown
176
- ---
177
- ## INFORMACOES SENSIVEIS NECESSARIAS
178
-
179
- Por favor, forneca os valores abaixo. Serao armazenados de forma segura.
180
-
181
- ### 1. SQL Admin Password (obrigatorio)
182
- **Recomendacao:** Alfanumerico, 16+ chars, SEM caracteres especiais (@!#$)
183
- **Exemplo valido:** `FishArt2025SecurePwd`
184
- **Exemplo invalido:** `F1sh@rt2025!Dev#Secure` (causa problemas de escape)
185
- >
186
-
187
- ### 2. Azure Tenant ID (se auth detectado)
188
- **Onde encontrar:** Azure Portal > Azure AD > Properties > Tenant ID
189
- >
190
-
191
- ### 3. Azure Client Secret (se auth detectado)
192
- **Onde encontrar:** Azure Portal > App Registrations > {App} > Certificates & secrets
193
- >
194
-
195
- ### 4. Storage Account Key (se storage detectado)
196
- **Onde encontrar:** Azure Portal > Storage Account > Access keys
197
- >
198
-
199
- ---
200
- ```
201
-
202
- **Validacao de senha:**
203
- - Minimo 16 caracteres
204
- - Apenas letras e numeros
205
- - Se conter @, !, #, $, %, ^, &, * → ALERTAR sobre problemas de escape
206
-
207
- ---
208
-
209
- ### FASE 3: VALIDACAO DE CUSTOS
210
-
211
- **Integrar com cost-guardian:**
212
-
213
- ```bash
214
- # Validar custos antes de deploy
215
- npx morph-spec cost infra/main.bicep --verbose
216
-
217
- # Se custo > limite configurado:
218
- # 1. PARAR deployment
219
- # 2. Mostrar breakdown de custos
220
- # 3. Requerer ADR em decisions.md
221
- # 4. Requerer aprovacao explicita
222
- ```
223
-
224
- **Limites padrao:**
225
- | Limite | Valor | Acao |
226
- |--------|-------|------|
227
- | Free Tier | $0 | Automatico |
228
- | Com Aprovacao | $10/mes | Requer confirmacao |
229
- | Requer ADR | $10+/mes | Requer documentacao |
230
-
231
- ---
232
-
233
- ### FASE 4: DEPLOY DE INFRAESTRUTURA
234
-
235
- **4.1 Verificar se Bicep existe:**
236
-
237
- ```powershell
238
- # Verificar estrutura
239
- Test-Path "infra/main.bicep"
240
- Test-Path "infra/parameters.dev.json"
241
- ```
242
-
243
- Se NAO existir:
244
- ```markdown
245
- ## Templates Bicep nao encontrados
246
-
247
- O projeto nao possui arquivos de infraestrutura em `infra/`.
248
-
249
- Opcoes:
250
- 1. **Criar agora** - Gerar templates baseado no projeto detectado
251
- 2. **Usar /morph-infra** - Rodar comando de setup de infra primeiro
252
- 3. **Cancelar** - Abortar deploy
253
-
254
- Qual opcao voce prefere?
255
- ```
256
-
257
- **4.2 Criar Resource Group:**
258
-
259
- ```powershell
260
- # Padrao de nomenclatura: rg-{projeto}-{ambiente}
261
- az group create --name rg-$PROJECT-$ENV --location brazilsouth
262
- ```
263
-
264
- **4.3 What-If (OBRIGATORIO):**
265
-
266
- ```powershell
267
- az deployment group what-if `
268
- --resource-group rg-$PROJECT-$ENV `
269
- --template-file infra/main.bicep `
270
- --parameters @infra/parameters.$ENV.json
271
- ```
272
-
273
- **PAUSA OBRIGATORIA:**
274
- ```markdown
275
- ## Recursos a serem criados/modificados
276
-
277
- [Output do what-if aqui]
278
-
279
- Deseja prosseguir com o deploy? (sim/nao)
280
- ```
281
-
282
- **4.4 Deploy Bicep:**
283
-
284
- ```powershell
285
- az deployment group create `
286
- --resource-group rg-$PROJECT-$ENV `
287
- --template-file infra/main.bicep `
288
- --parameters @infra/parameters.$ENV.json `
289
- --name "deploy-$(Get-Date -Format 'yyyyMMdd-HHmmss')"
290
- ```
291
-
292
- **4.5 Capturar outputs:**
293
-
294
- ```powershell
295
- # Salvar outputs para proximas fases
296
- $outputs = az deployment group show `
297
- --resource-group rg-$PROJECT-$ENV `
298
- --name $DEPLOYMENT_NAME `
299
- --query properties.outputs -o json | ConvertFrom-Json
300
-
301
- # Extrair valores
302
- $acrName = $outputs.acrName.value
303
- $appUrl = $outputs.containerAppUrl.value
304
- $sqlServer = $outputs.sqlServerFqdn.value
305
- ```
306
-
307
- ---
308
-
309
- ### FASE 5: DEPLOY DE APLICACAO
310
-
311
- **5.1 Build Docker:**
312
-
313
- ```powershell
314
- # IMPORTANTE: Dockerfile deve usar .NET 10
315
- # Restaurar apenas projeto web, NAO solution (evita projetos de teste)
316
-
317
- docker build -t $ACR_NAME.azurecr.io/$PROJECT`:$TAG .
318
- ```
319
-
320
- **Dockerfile recomendado para .NET 10:**
321
- ```dockerfile
322
- # Build stage
323
- FROM mcr.microsoft.com/dotnet/sdk:10.0-preview AS build
324
- WORKDIR /src
325
-
326
- # Restaurar APENAS projeto web (nao solution!)
327
- COPY ["src/$PROJECT.Web.Blazor/$PROJECT.Web.Blazor.csproj", "src/$PROJECT.Web.Blazor/"]
328
- COPY ["src/$PROJECT.Application/$PROJECT.Application.csproj", "src/$PROJECT.Application/"]
329
- COPY ["src/$PROJECT.Domain/$PROJECT.Domain.csproj", "src/$PROJECT.Domain/"]
330
- COPY ["src/$PROJECT.Infrastructure/$PROJECT.Infrastructure.csproj", "src/$PROJECT.Infrastructure/"]
331
- RUN dotnet restore "src/$PROJECT.Web.Blazor/$PROJECT.Web.Blazor.csproj"
332
-
333
- COPY . .
334
- RUN dotnet publish "src/$PROJECT.Web.Blazor/$PROJECT.Web.Blazor.csproj" -c Release -o /app/publish
335
-
336
- # Runtime stage
337
- FROM mcr.microsoft.com/dotnet/aspnet:10.0-preview AS runtime
338
- WORKDIR /app
339
- COPY --from=build /app/publish .
340
-
341
- ENV ASPNETCORE_URLS=http://+:8080
342
- ENV ASPNETCORE_ENVIRONMENT=Production
343
- EXPOSE 8080
344
-
345
- ENTRYPOINT ["dotnet", "$PROJECT.Web.Blazor.dll"]
346
- ```
347
-
348
- **5.2 Push para ACR:**
349
-
350
- ```powershell
351
- # Habilitar admin (necessario para Container App)
352
- az acr update --name $ACR_NAME --admin-enabled true
353
-
354
- # Login no ACR
355
- az acr login --name $ACR_NAME
356
-
357
- # Push
358
- docker push $ACR_NAME.azurecr.io/$PROJECT`:$TAG
359
- ```
360
-
361
- **5.3 Criar/Atualizar Container App:**
362
-
363
- ```powershell
364
- # Obter senha do ACR
365
- $acrPassword = az acr credential show --name $ACR_NAME --query "passwords[0].value" -o tsv
366
-
367
- # Criar Container App (se nao existe)
368
- az containerapp create `
369
- --name $PROJECT-$ENV-app `
370
- --resource-group rg-$PROJECT-$ENV `
371
- --environment $PROJECT-$ENV-app-env `
372
- --image $ACR_NAME.azurecr.io/$PROJECT`:$TAG `
373
- --registry-server $ACR_NAME.azurecr.io `
374
- --registry-username $ACR_NAME `
375
- --registry-password $acrPassword `
376
- --target-port 8080 `
377
- --ingress external `
378
- --min-replicas 1 `
379
- --max-replicas 3 `
380
- --cpu 0.25 `
381
- --memory 0.5Gi
382
-
383
- # OU atualizar imagem (se ja existe)
384
- az containerapp update `
385
- --name $PROJECT-$ENV-app `
386
- --resource-group rg-$PROJECT-$ENV `
387
- --image $ACR_NAME.azurecr.io/$PROJECT`:$TAG
388
- ```
389
-
390
- **5.4 Configurar Environment Variables:**
391
-
392
- ```powershell
393
- # CRITICO: Usar nomes EXATOS do codigo!
394
- az containerapp update `
395
- --name $PROJECT-$ENV-app `
396
- --resource-group rg-$PROJECT-$ENV `
397
- --set-env-vars `
398
- "ConnectionStrings__DefaultConnection=$SQL_CONNECTION_STRING" `
399
- "Azure__Storage__ConnectionString=$STORAGE_CONNECTION_STRING" `
400
- "ApplicationInsights__ConnectionString=$APPINSIGHTS_CONNECTION_STRING" `
401
- "ASPNETCORE_ENVIRONMENT=Production"
402
- ```
403
-
404
- **5.5 Sticky Sessions (OBRIGATORIO para Blazor Server):**
405
-
406
- ```powershell
407
- # Se Blazor Server detectado, SEMPRE executar:
408
- az containerapp ingress sticky-sessions set `
409
- --name $PROJECT-$ENV-app `
410
- --resource-group rg-$PROJECT-$ENV `
411
- --affinity sticky
412
- ```
413
-
414
- **5.6 SQL Firewall:**
415
-
416
- ```powershell
417
- # Permitir Azure Services
418
- az sql server firewall-rule create `
419
- --resource-group rg-$PROJECT-$ENV `
420
- --server $SQL_SERVER_NAME `
421
- --name AllowAzureServices `
422
- --start-ip-address 0.0.0.0 `
423
- --end-ip-address 0.0.0.0
424
- ```
425
-
426
- **5.7 Migrations:**
427
-
428
- ```powershell
429
- # IMPORTANTE: Usar path completo se dotnet-ef nao estiver no PATH
430
- ~/.dotnet/tools/dotnet-ef database update `
431
- --project src/$PROJECT.Infrastructure `
432
- --startup-project src/$PROJECT.Web.Blazor `
433
- --connection "$SQL_CONNECTION_STRING"
434
- ```
435
-
436
- ---
437
-
438
- ### FASE 6: VERIFICACAO E ROLLBACK
439
-
440
- **6.1 Health Check:**
441
-
442
- ```powershell
443
- # Verificar status da revisao
444
- $health = az containerapp revision list `
445
- --name $PROJECT-$ENV-app `
446
- --resource-group rg-$PROJECT-$ENV `
447
- --query "[0].properties.healthState" -o tsv
448
-
449
- if ($health -ne "Healthy") {
450
- Write-Error "Container App not healthy! Initiating rollback..."
451
- # Trigger rollback
452
- }
453
- ```
454
-
455
- **6.2 Smoke Tests:**
456
-
457
- ```powershell
458
- # Obter URL
459
- $appUrl = az containerapp show `
460
- --name $PROJECT-$ENV-app `
461
- --resource-group rg-$PROJECT-$ENV `
462
- --query properties.configuration.ingress.fqdn -o tsv
463
-
464
- # Testar HTTPS
465
- $response = Invoke-WebRequest -Uri "https://$appUrl" -UseBasicParsing
466
- if ($response.StatusCode -ne 200) {
467
- Write-Error "App not responding! Status: $($response.StatusCode)"
468
- }
469
- ```
470
-
471
- **6.3 Rollback Automatico:**
472
-
473
- ```powershell
474
- # Listar revisoes
475
- $revisions = az containerapp revision list `
476
- --name $PROJECT-$ENV-app `
477
- --resource-group rg-$PROJECT-$ENV `
478
- --query "[].name" -o tsv
479
-
480
- # Ativar revisao anterior
481
- $previousRevision = $revisions[1] # Segunda revisao (anterior)
482
- az containerapp revision activate `
483
- --name $PROJECT-$ENV-app `
484
- --resource-group rg-$PROJECT-$ENV `
485
- --revision $previousRevision
486
-
487
- Write-Output "Rollback executado para revisao: $previousRevision"
488
- ```
489
-
490
- **6.4 Checklist de Verificacao:**
491
-
492
- ```markdown
493
- ## Verificacao Final
494
-
495
- - [ ] Container App rodando (Healthy)
496
- - [ ] Health check passando (HTTP 200)
497
- - [ ] HTTPS acessivel: https://{app-url}
498
- - [ ] Database conectado (testar query simples)
499
- - [ ] Blazor circuit estabelecido (se aplicavel)
500
- - [ ] Logs sem erros criticos
501
-
502
- Todos os checks passaram? (sim/nao)
503
- ```
504
-
505
- ---
506
-
507
- ## TROUBLESHOOTING KNOWLEDGE BASE
508
-
509
- ### Erros Comuns de Deploy
510
-
511
- | Erro | Causa | Solucao |
512
- |------|-------|---------|
513
- | `winget not recognized` | Windows sem winget | Baixar MSI: https://aka.ms/installazurecliwindows |
514
- | `MFA/tenant erro` | Login sem tenant | `az login --tenant <TENANT-ID>` |
515
- | `KeyVault not found` | Parameters.json referencia KV inexistente | Criar parameters.dev.initial.json com valores diretos |
516
- | `Container App timeout` | Deploy tudo junto, imagem nao existe | Deploy em 2 fases: infra primeiro, app depois |
517
- | `Login failed for user` | Senha com caracteres especiais | Usar senha alfanumerica simples |
518
- | `Escape de caracteres` | Senha tipo `F1sh@rt!` | Mudar para `FishArt2025SecurePwd` |
519
- | `dotnet-ef not found` | Tool nao esta no PATH | Usar `~/.dotnet/tools/dotnet-ef` |
520
- | `Projetos teste nao encontrados` | Dockerfile restaura .sln | Restaurar apenas projeto web |
521
-
522
- ### Erros de Container Apps
523
-
524
- | Erro | Causa | Solucao |
525
- |------|-------|---------|
526
- | `ContainerCreating` stuck | Imagem nao existe no ACR | Verificar `docker push` completou |
527
- | `CrashLoopBackOff` | App crasha no startup | Checar logs: `az containerapp logs show` |
528
- | `ImagePullBackOff` | Credenciais ACR erradas | `az acr update --admin-enabled true` |
529
- | `401 Unauthorized` | ACR auth falhou | Verificar registry-server e credentials |
530
- | `504 Gateway Timeout` | App lento para iniciar | Aumentar `initialDelaySeconds` no probe |
531
-
532
- ### Erros de Blazor Server
533
-
534
- | Erro | Causa | Solucao |
535
- |------|-------|---------|
536
- | `CircuitDisconnected` | Sticky sessions desabilitado | `az containerapp ingress sticky-sessions set --affinity sticky` |
537
- | `WebSocket failed` | SignalR sem sticky | Mesmo acima |
538
- | `CSS/JS not loading` | Static files middleware | `app.UseStaticFiles()` antes de `app.UseAntiforgery()` |
539
- | `Render mode error` | MainLayout com @rendermode | Remover @rendermode do MainLayout |
540
- | `Pre-rendering hydration` | State nao persistido | Usar `[PersistentState]` attribute |
541
-
542
- ### Erros de SQL
543
-
544
- | Erro | Causa | Solucao |
545
- |------|-------|---------|
546
- | `Login failed` | Connection string com escape | Mudar senha SQL para algo simples |
547
- | `Firewall blocks` | Azure Services bloqueado | `az sql server firewall-rule create ... 0.0.0.0` |
548
- | `Connection timeout` | IP nao liberado | Adicionar IP do Container App |
549
-
550
- ---
551
-
552
- ## MODO --AUTO PARA CI/CD
553
-
554
- Para uso em pipelines Azure DevOps:
555
-
556
- ```bash
557
- # Uso automatico (sem pausas interativas)
558
- npx morph-spec deploy prod --auto \
559
- --sql-password "$(SQL_PASSWORD)" \
560
- --tenant-id "$(TENANT_ID)" \
561
- --client-secret "$(CLIENT_SECRET)" \
562
- --storage-key "$(STORAGE_KEY)" \
563
- --skip-confirmation
564
-
565
- # Flags disponiveis:
566
- # --auto Modo automatico (sem pausas)
567
- # --skip-confirmation Pular what-if confirmation
568
- # --skip-build Nao fazer docker build (usar imagem existente)
569
- # --infra-only Apenas deploy de infra (Bicep)
570
- # --app-only Apenas deploy de app (Container App)
571
- # --dry-run Validar sem executar
572
- ```
573
-
574
- ---
575
-
576
- ## INTEGRACAO AZURE DEVOPS
577
-
578
- ### Pipeline Template
579
-
580
- ```yaml
581
- # azure-pipelines.yml
582
- trigger:
583
- branches:
584
- include:
585
- - main
586
- - develop
587
-
588
- variables:
589
- - group: 'deploy-secrets' # Variable group com secrets
590
-
591
- stages:
592
- - stage: Build
593
- jobs:
594
- - job: BuildAndPush
595
- pool:
596
- vmImage: 'ubuntu-latest'
597
- steps:
598
- - task: Docker@2
599
- inputs:
600
- containerRegistry: 'acr-connection'
601
- repository: '$(projectName)'
602
- command: 'buildAndPush'
603
- Dockerfile: '**/Dockerfile'
604
- tags: '$(Build.BuildId)'
605
-
606
- - stage: DeployDev
607
- dependsOn: Build
608
- condition: eq(variables['Build.SourceBranch'], 'refs/heads/develop')
609
- jobs:
610
- - deployment: DeployToDev
611
- environment: 'dev'
612
- strategy:
613
- runOnce:
614
- deploy:
615
- steps:
616
- - script: |
617
- npx morph-spec deploy dev --auto \
618
- --sql-password "$(SqlPassword)" \
619
- --skip-confirmation
620
- displayName: 'Deploy to Dev'
621
-
622
- - stage: DeployProd
623
- dependsOn: Build
624
- condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
625
- jobs:
626
- - deployment: DeployToProd
627
- environment: 'prod'
628
- strategy:
629
- runOnce:
630
- deploy:
631
- steps:
632
- - script: |
633
- npx morph-spec deploy prod --auto \
634
- --sql-password "$(SqlPasswordProd)" \
635
- --skip-confirmation
636
- displayName: 'Deploy to Prod'
637
- ```
638
-
639
- ---
640
-
641
- ## COMANDOS UTEIS
642
-
643
- ```powershell
644
- # Ver status do deployment
645
- az deployment group show --resource-group $RG --name $DEPLOYMENT --query properties.provisioningState
646
-
647
- # Listar recursos criados
648
- az resource list --resource-group $RG --output table
649
-
650
- # Ver env vars atuais
651
- az containerapp show --name $APP --resource-group $RG --query "properties.template.containers[0].env"
652
-
653
- # Ver logs em tempo real
654
- az containerapp logs show --name $APP --resource-group $RG --follow
655
-
656
- # Escalar manualmente
657
- az containerapp update --name $APP --resource-group $RG --min-replicas 2
658
-
659
- # Atualizar imagem
660
- az containerapp update --name $APP --resource-group $RG --image $ACR.azurecr.io/$PROJECT:v2
661
-
662
- # Restart (apos mudar secrets)
663
- $revision = az containerapp revision list --name $APP --resource-group $RG --query "[0].name" -o tsv
664
- az containerapp revision restart --name $APP --resource-group $RG --revision $revision
665
- ```
666
-
667
- ---
668
-
669
- ## MAPEAMENTO CONFIG → ENV VAR
670
-
671
- | No Codigo (.NET) | Environment Variable |
672
- |------------------|---------------------|
673
- | `ConnectionStrings:DefaultConnection` | `ConnectionStrings__DefaultConnection` |
674
- | `ConnectionStrings:HangfireConnection` | `ConnectionStrings__HangfireConnection` |
675
- | `Azure:Storage:ConnectionString` | `Azure__Storage__ConnectionString` |
676
- | `Azure:Storage:ContainerName` | `Azure__Storage__ContainerName` |
677
- | `Azure:KeyVault` | `Azure__KeyVault` |
678
- | `ApplicationInsights:ConnectionString` | `ApplicationInsights__ConnectionString` |
679
- | `Clerk:SecretKey` | `Clerk__SecretKey` |
680
- | `Clerk:PublishableKey` | `Clerk__PublishableKey` |
681
- | `AzureAd:TenantId` | `AzureAd__TenantId` |
682
- | `AzureAd:ClientId` | `AzureAd__ClientId` |
683
- | `AzureAd:ClientSecret` | `AzureAd__ClientSecret` |
684
-
685
- **Regra:** Substitua `:` por `__` (double underscore)
686
-
687
- ---
688
-
689
- ## DOCUMENTACAO
690
-
691
- - [Container Apps Docs](https://learn.microsoft.com/azure/container-apps/)
692
- - [Bicep Reference](https://learn.microsoft.com/azure/azure-resource-manager/bicep/)
693
- - [Blazor Server Hosting](https://learn.microsoft.com/aspnet/core/blazor/host-and-deploy/)
694
- - [ACR Authentication](https://learn.microsoft.com/azure/container-registry/container-registry-authentication)
695
- - [Azure CLI Reference](https://learn.microsoft.com/cli/azure/)
696
-
697
- ---
698
-
699
- *Azure Deploy Specialist v1.0 - MORPH-SPEC by Polymorphism Tech*