@polymorphism-tech/morph-spec 4.7.2 → 4.8.1

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 (346) hide show
  1. package/.morph/analytics/threads-log.jsonl +54 -5
  2. package/.morph/state.json +152 -2
  3. package/LICENSE +1 -2
  4. package/README.md +379 -414
  5. package/bin/morph-spec.js +57 -394
  6. package/bin/validate.js +2 -26
  7. package/claude-plugin.json +2 -2
  8. package/docs/ARCHITECTURE.md +43 -46
  9. package/docs/CHEATSHEET.md +203 -221
  10. package/docs/COMMAND-FLOWS.md +319 -289
  11. package/docs/QUICKSTART.md +2 -8
  12. package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +2 -0
  13. package/docs/plans/2026-02-22-claude-settings.md +2 -0
  14. package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +2 -0
  15. package/docs/plans/2026-02-22-morph-spec-next.md +2 -0
  16. package/docs/plans/2026-02-22-native-alignment-design.md +2 -0
  17. package/docs/plans/2026-02-22-native-alignment-impl.md +2 -0
  18. package/docs/plans/2026-02-22-native-enrichment-design.md +2 -0
  19. package/docs/plans/2026-02-22-native-enrichment.md +2 -0
  20. package/docs/plans/2026-02-23-ddd-architecture-refactor.md +2 -0
  21. package/docs/plans/2026-02-23-ddd-nextsteps.md +2 -0
  22. package/docs/plans/2026-02-23-infra-architect-refactor.md +2 -0
  23. package/docs/plans/2026-02-23-nextjs-code-review-design.md +2 -1
  24. package/docs/plans/2026-02-23-nextjs-code-review-impl.md +2 -0
  25. package/docs/plans/2026-02-23-nextjs-standards-design.md +2 -1
  26. package/docs/plans/2026-02-23-nextjs-standards-impl.md +2 -0
  27. package/docs/plans/2026-02-24-cli-radical-simplification.md +592 -0
  28. package/docs/plans/2026-02-24-framework-failure-points.md +125 -0
  29. package/docs/plans/2026-02-24-morph-init-design.md +337 -0
  30. package/docs/plans/2026-02-24-morph-init-impl.md +1269 -0
  31. package/docs/plans/2026-02-24-tutorial-command-design.md +71 -0
  32. package/docs/plans/2026-02-24-tutorial-command.md +298 -0
  33. package/framework/CLAUDE.md +1 -1
  34. package/framework/commands/morph-proposal.md +3 -3
  35. package/framework/hooks/README.md +2 -5
  36. package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +4 -55
  37. package/framework/hooks/claude-code/session-start/inject-morph-context.js +20 -5
  38. package/framework/hooks/claude-code/statusline.py +6 -1
  39. package/framework/hooks/dev/check-sync-health.js +117 -0
  40. package/framework/hooks/dev/guard-version-numbers.js +57 -0
  41. package/framework/hooks/dev/sync-standards-registry.js +60 -0
  42. package/framework/hooks/dev/sync-template-registry.js +60 -0
  43. package/framework/hooks/dev/validate-skill-format.js +70 -0
  44. package/framework/hooks/dev/validate-standard-format.js +73 -0
  45. package/framework/hooks/shared/payload-utils.js +39 -0
  46. package/framework/hooks/shared/state-reader.js +25 -1
  47. package/framework/rules/morph-workflow.md +1 -1
  48. package/framework/skills/level-0-meta/morph-init/SKILL.md +216 -0
  49. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +4 -4
  50. package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +4 -4
  51. package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +1 -1
  52. package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +192 -191
  53. package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +181 -180
  54. package/framework/skills/level-1-workflows/phase-design/SKILL.md +339 -338
  55. package/framework/skills/level-1-workflows/phase-implement/SKILL.md +254 -253
  56. package/framework/skills/level-1-workflows/phase-setup/SKILL.md +168 -170
  57. package/framework/skills/level-1-workflows/phase-tasks/SKILL.md +284 -283
  58. package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +246 -245
  59. package/framework/templates/examples/design-system-examples.md +1 -1
  60. package/framework/templates/ui/FluentDesignTheme.cs +1 -1
  61. package/framework/templates/ui/MudTheme.cs +1 -1
  62. package/framework/templates/ui/design-system.css +1 -1
  63. package/package.json +4 -2
  64. package/scripts/bump-version.js +248 -0
  65. package/scripts/install-dev-hooks.js +138 -0
  66. package/src/commands/agents/index.js +1 -2
  67. package/src/commands/index.js +13 -16
  68. package/src/commands/project/doctor.js +100 -14
  69. package/src/commands/project/index.js +7 -10
  70. package/src/commands/project/init.js +398 -528
  71. package/src/commands/project/install-plugin-cmd.js +28 -0
  72. package/src/commands/project/setup-infra-cmd.js +12 -0
  73. package/src/commands/project/tutorial.js +115 -0
  74. package/src/commands/state/approve.js +213 -221
  75. package/src/commands/state/index.js +0 -1
  76. package/src/commands/state/state.js +337 -365
  77. package/src/commands/templates/index.js +0 -4
  78. package/src/commands/trust/trust.js +1 -93
  79. package/src/commands/utils/index.js +1 -5
  80. package/src/commands/validation/index.js +1 -5
  81. package/src/core/registry/command-registry.js +11 -285
  82. package/src/core/state/state-manager.js +5 -2
  83. package/src/lib/detectors/index.js +81 -87
  84. package/src/lib/detectors/structure-detector.js +275 -273
  85. package/src/lib/generators/recap-generator.js +232 -225
  86. package/src/scripts/global-install.js +34 -0
  87. package/src/scripts/install-plugin.js +126 -0
  88. package/src/scripts/setup-infra.js +203 -0
  89. package/src/utils/agents-installer.js +10 -1
  90. package/src/utils/hooks-installer.js +66 -3
  91. package/.morph/.morphversion +0 -5
  92. package/.morph/config/config.json +0 -8
  93. package/.morph/framework/agents.json +0 -1815
  94. package/.morph/framework/hooks/README.md +0 -205
  95. package/.morph/framework/hooks/claude-code/notification/approval-reminder.js +0 -54
  96. package/.morph/framework/hooks/claude-code/post-tool-use/dispatch.js +0 -83
  97. package/.morph/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +0 -42
  98. package/.morph/framework/hooks/claude-code/pre-compact/save-morph-context.js +0 -61
  99. package/.morph/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +0 -71
  100. package/.morph/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +0 -58
  101. package/.morph/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +0 -64
  102. package/.morph/framework/hooks/claude-code/session-start/inject-morph-context.js +0 -94
  103. package/.morph/framework/hooks/claude-code/statusline.py +0 -538
  104. package/.morph/framework/hooks/claude-code/statusline.sh +0 -7
  105. package/.morph/framework/hooks/claude-code/stop/validate-completion.js +0 -88
  106. package/.morph/framework/hooks/claude-code/user-prompt/enrich-prompt.js +0 -91
  107. package/.morph/framework/hooks/git/commit-msg/conventional-commits.sh +0 -33
  108. package/.morph/framework/hooks/git/pre-commit/agents.sh +0 -25
  109. package/.morph/framework/hooks/git/pre-commit/orchestrator.sh +0 -64
  110. package/.morph/framework/hooks/git/pre-commit/specs.sh +0 -50
  111. package/.morph/framework/hooks/git/pre-push/run-tests.sh +0 -44
  112. package/.morph/framework/hooks/shared/hook-response.js +0 -45
  113. package/.morph/framework/hooks/shared/phase-utils.js +0 -129
  114. package/.morph/framework/hooks/shared/state-reader.js +0 -138
  115. package/.morph/framework/hooks/shared/stdin-reader.js +0 -26
  116. package/.morph/framework/standards/STANDARDS.json +0 -933
  117. package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
  118. package/.morph/framework/standards/ai-agents/production.md +0 -415
  119. package/.morph/framework/standards/ai-agents/setup.md +0 -418
  120. package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
  121. package/.morph/framework/standards/ai-agents/workflows.md +0 -354
  122. package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
  123. package/.morph/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  124. package/.morph/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  125. package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
  126. package/.morph/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  127. package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
  128. package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
  129. package/.morph/framework/standards/backend/api/rest.md +0 -492
  130. package/.morph/framework/standards/backend/api/validation.md +0 -88
  131. package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
  132. package/.morph/framework/standards/backend/database/ef-core.md +0 -199
  133. package/.morph/framework/standards/backend/database/migrations.md +0 -393
  134. package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
  135. package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
  136. package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
  137. package/.morph/framework/standards/backend/dotnet/async.md +0 -366
  138. package/.morph/framework/standards/backend/dotnet/core.md +0 -117
  139. package/.morph/framework/standards/backend/dotnet/di.md +0 -439
  140. package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  141. package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
  142. package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
  143. package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
  144. package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
  145. package/.morph/framework/standards/context/analytics.md +0 -96
  146. package/.morph/framework/standards/context/bundles.md +0 -110
  147. package/.morph/framework/standards/context/priming.md +0 -78
  148. package/.morph/framework/standards/core/architecture.md +0 -185
  149. package/.morph/framework/standards/core/coding.md +0 -214
  150. package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
  151. package/.morph/framework/standards/core/git.md +0 -185
  152. package/.morph/framework/standards/core/testing.md +0 -295
  153. package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
  154. package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
  155. package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
  156. package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  157. package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
  158. package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
  159. package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  160. package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  161. package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
  162. package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
  163. package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
  164. package/.morph/framework/standards/frontend/blazor/state.md +0 -191
  165. package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
  166. package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
  167. package/.morph/framework/standards/frontend/nextjs/app-router.md +0 -123
  168. package/.morph/framework/standards/frontend/nextjs/components.md +0 -132
  169. package/.morph/framework/standards/frontend/nextjs/data-fetching.md +0 -126
  170. package/.morph/framework/standards/frontend/nextjs/forms.md +0 -128
  171. package/.morph/framework/standards/frontend/nextjs/naming-conventions.md +0 -67
  172. package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -215
  173. package/.morph/framework/standards/frontend/nextjs/project-structure.md +0 -102
  174. package/.morph/framework/standards/frontend/nextjs/state-management.md +0 -72
  175. package/.morph/framework/standards/frontend/nextjs/testing.md +0 -111
  176. package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
  177. package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  178. package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  179. package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  180. package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
  181. package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  182. package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
  183. package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
  184. package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
  185. package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
  186. package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
  187. package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
  188. package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
  189. package/.morph/framework/standards/integration/api/graphql.md +0 -91
  190. package/.morph/framework/standards/integration/api/grpc.md +0 -114
  191. package/.morph/framework/standards/integration/api/rest-design.md +0 -95
  192. package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
  193. package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  194. package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
  195. package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
  196. package/.morph/framework/standards/observability/logging.md +0 -131
  197. package/.morph/framework/standards/observability/metrics.md +0 -121
  198. package/.morph/framework/standards/observability/monitoring.md +0 -114
  199. package/.morph/framework/standards/observability/tracing.md +0 -132
  200. package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
  201. package/.morph/framework/standards/workflows/thread-management.md +0 -113
  202. package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
  203. package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
  204. package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
  205. package/.morph/framework/templates/README.md +0 -814
  206. package/.morph/framework/templates/REGISTRY.json +0 -1888
  207. package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
  208. package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
  209. package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  210. package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  211. package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  212. package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
  213. package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  214. package/.morph/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  215. package/.morph/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  216. package/.morph/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  217. package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
  218. package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
  219. package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
  220. package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
  221. package/.morph/framework/templates/code/dotnet/test.cs +0 -239
  222. package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
  223. package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
  224. package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
  225. package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
  226. package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
  227. package/.morph/framework/templates/context/CONTEXT.md +0 -181
  228. package/.morph/framework/templates/docs/clarifications.md +0 -253
  229. package/.morph/framework/templates/docs/onboarding.md +0 -123
  230. package/.morph/framework/templates/docs/proposal.md +0 -182
  231. package/.morph/framework/templates/docs/schema-analysis.md +0 -119
  232. package/.morph/framework/templates/docs/spec.md +0 -198
  233. package/.morph/framework/templates/docs/ui-components.md +0 -124
  234. package/.morph/framework/templates/docs/ui-design-system.md +0 -76
  235. package/.morph/framework/templates/docs/ui-flows.md +0 -167
  236. package/.morph/framework/templates/docs/ui-mockups.md +0 -98
  237. package/.morph/framework/templates/docs/user-stories.md +0 -34
  238. package/.morph/framework/templates/examples/design-system-examples.md +0 -357
  239. package/.morph/framework/templates/examples/spec-examples.md +0 -90
  240. package/.morph/framework/templates/feature/decisions.md +0 -187
  241. package/.morph/framework/templates/feature/recap.md +0 -146
  242. package/.morph/framework/templates/feature/tasks.md +0 -199
  243. package/.morph/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +0 -43
  244. package/.morph/framework/templates/frontend/nextjs/client-component.tsx.hbs +0 -26
  245. package/.morph/framework/templates/frontend/nextjs/env.mjs.hbs +0 -32
  246. package/.morph/framework/templates/frontend/nextjs/feature-form.tsx.hbs +0 -56
  247. package/.morph/framework/templates/frontend/nextjs/page.tsx.hbs +0 -22
  248. package/.morph/framework/templates/frontend/nextjs/tsconfig.json.hbs +0 -26
  249. package/.morph/framework/templates/frontend/nextjs/use-feature.ts.hbs +0 -54
  250. package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  251. package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
  252. package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  253. package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  254. package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  255. package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  256. package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  257. package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  258. package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
  259. package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  260. package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
  261. package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  262. package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  263. package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  264. package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  265. package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
  266. package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
  267. package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
  268. package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
  269. package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
  270. package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
  271. package/.morph/framework/templates/infrastructure/github/README.md +0 -593
  272. package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  273. package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
  274. package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
  275. package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  276. package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
  277. package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
  278. package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
  279. package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
  280. package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
  281. package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
  282. package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
  283. package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
  284. package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
  285. package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
  286. package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
  287. package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
  288. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
  289. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
  290. package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
  291. package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
  292. package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
  293. package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
  294. package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
  295. package/.morph/framework/templates/project-structure/dotnet-ddd.md +0 -70
  296. package/.morph/framework/templates/saas/subscription.cs +0 -347
  297. package/.morph/framework/templates/saas/tenant.cs +0 -338
  298. package/.morph/framework/templates/state.template.json +0 -17
  299. package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
  300. package/.morph/framework/templates/ui/MudTheme.cs +0 -281
  301. package/.morph/framework/templates/ui/design-system.css +0 -226
  302. package/.morph/logs/tool-failures.log +0 -17
  303. package/.morph/memory/pre-compact-2026-02-24T17-43-30-049Z.json +0 -16
  304. package/.morph/plans/eager-watching-bunny.md +0 -105
  305. package/.morph/plans/temporal-seeking-nebula.md +0 -45
  306. package/CLAUDE.md +0 -77
  307. package/docs/claude-alignment-report.md +0 -137
  308. package/docs/examples/order-management/contracts.cs +0 -84
  309. package/docs/examples/order-management/proposal.md +0 -24
  310. package/docs/examples/order-management/spec.md +0 -162
  311. package/src/commands/feature/create-story.js +0 -362
  312. package/src/commands/feature/index.js +0 -6
  313. package/src/commands/feature/shard-spec.js +0 -225
  314. package/src/commands/feature/sprint-status.js +0 -250
  315. package/src/commands/generation/generate-onboarding.js +0 -169
  316. package/src/commands/generation/generate.js +0 -276
  317. package/src/commands/generation/index.js +0 -5
  318. package/src/commands/learning/capture-pattern.js +0 -121
  319. package/src/commands/learning/index.js +0 -5
  320. package/src/commands/learning/search-patterns.js +0 -126
  321. package/src/commands/mcp/mcp.js +0 -102
  322. package/src/commands/project/changes.js +0 -66
  323. package/src/commands/project/cost.js +0 -179
  324. package/src/commands/project/diff.js +0 -278
  325. package/src/commands/project/revert.js +0 -173
  326. package/src/commands/project/standards.js +0 -80
  327. package/src/commands/project/sync.js +0 -167
  328. package/src/commands/project/update-agents.js +0 -23
  329. package/src/commands/state/rollback-phase.js +0 -185
  330. package/src/commands/templates/template-customize.js +0 -87
  331. package/src/commands/templates/template-list.js +0 -114
  332. package/src/commands/templates/template-show.js +0 -129
  333. package/src/commands/templates/template-validate.js +0 -91
  334. package/src/commands/utils/troubleshoot.js +0 -222
  335. package/src/commands/validation/analyze-blazor-concurrency.js +0 -193
  336. package/src/commands/validation/lint-fluent.js +0 -352
  337. package/src/commands/validation/validate-blazor-state.js +0 -210
  338. package/src/commands/validation/validate-blazor.js +0 -156
  339. package/src/commands/validation/validate-css.js +0 -84
  340. package/src/lib/detectors/conversation-analyzer.js +0 -163
  341. package/src/lib/learning/index.js +0 -7
  342. package/src/lib/learning/learning-system.js +0 -520
  343. package/src/lib/troubleshooting/index.js +0 -8
  344. package/src/lib/troubleshooting/troubleshoot-grep.js +0 -198
  345. package/src/lib/troubleshooting/troubleshoot-index.js +0 -144
  346. package/src/llm/environment-detector.js +0 -43
@@ -1,624 +0,0 @@
1
- # Padrões Azure - MORPH Framework
2
-
3
- > **Scope:** blazor-azure
4
- > **Layer:** 2 (on keyword)
5
- > **Keywords:** azure, identity, keyvault, credential, managed identity
6
- > **Load When:** azure keywords detected
7
-
8
- ## 💰 Filosofia de Custos
9
-
10
- **Free tier primeiro. Aprovação explícita para upgrade.**
11
-
12
- | Nível | Limite | Requer |
13
- |-------|--------|--------|
14
- | Sem aprovação | Free tier apenas | Nada |
15
- | Com aprovação | Até $10/mês | Confirmação |
16
- | Acima de $10 | Justificativa detalhada | ADR |
17
-
18
- ---
19
-
20
- ## 🌐 Hosting: App Service vs Container Apps
21
-
22
- ### Matriz de Decisão
23
-
24
- | Critério | App Service (Free F1) | Container Apps (Consumption) |
25
- |----------|----------------------|------------------------------|
26
- | **Custo** | ✅ $0/mês | ⚠️ ~$5/mês |
27
- | **RAM** | 1GB | Configurável (0.5Gi min) |
28
- | **Storage** | 1GB | Ephemeral |
29
- | **CPU** | ⚠️ 60 min/dia | ✅ Ilimitado |
30
- | **Disponibilidade** | ⚠️ Sleep após 20min | ✅ Scale-to-zero sem sleep |
31
- | **SSL Customizado** | ❌ Não (apenas *.azurewebsites.net) | ✅ Sim, gratuito |
32
- | **Scale Out** | ❌ Não | ✅ Auto-scaling |
33
- | **Blazor Server** | ✅ Suporte nativo | ✅ Via Docker |
34
- | **Deploy** | ✅ Direto (ZIP, Git) | ⚠️ Requer container |
35
-
36
- ### Quando Usar App Service Free
37
-
38
- **✅ Cenários Ideais:**
39
- - Protótipos e MVPs de baixo tráfego
40
- - Aplicações de uso interno (horário comercial)
41
- - Demos e POCs
42
- - Apps que toleram cold start (20 min sleep)
43
- - Orçamento zero absoluto
44
-
45
- **❌ Não Usar Quando:**
46
- - Necessita estar sempre disponível (24/7)
47
- - Tráfego imprevisível ou spikes
48
- - Mais de 60 min de CPU/dia
49
- - Precisa de SSL customizado
50
- - Requer auto-scaling
51
-
52
- ### Quando Usar Container Apps
53
-
54
- **✅ Cenários Ideais:**
55
- - Produção com disponibilidade 24/7
56
- - Auto-scaling baseado em demanda
57
- - SSL customizado necessário
58
- - Arquitetura microserviços
59
- - Background jobs com Hangfire (minReplicas: 1)
60
- - Apps que precisam estar sempre "quentes"
61
-
62
- **❌ Não Usar Quando:**
63
- - Orçamento zero obrigatório
64
- - Tráfego extremamente baixo (< 100 req/dia)
65
- - MVP simples sem requisitos de SLA
66
-
67
- ### Estratégia Híbrida
68
-
69
- ```
70
- Dev/Staging: App Service Free F1
71
- Production: Container Apps Consumption
72
- ```
73
-
74
- **Benefícios:**
75
- - 💰 Economia em ambientes não críticos
76
- - 🚀 Performance garantida em produção
77
- - 🔄 Fácil migração (mesma stack .NET)
78
-
79
- ---
80
-
81
- ## 📋 Stack Padrão Aprovado
82
-
83
- | Recurso | Tier | Custo | Quando Usar |
84
- |---------|------|-------|-------------|
85
- | **App Service** | Free F1 | $0 | MVP, protótipos, dev/staging |
86
- | **Container Apps** | Consumption | ~$0-5/mês | Produção, auto-scaling |
87
- | **Azure SQL** | Free 32GB | $0 | Database |
88
- | **ACR** | Basic | ~$5/mês | Container registry (apenas com CA) |
89
- | **App Insights** | Free 5GB | $0 | Logs e métricas |
90
- | **Azure OpenAI** | gpt-4o-mini | ~$2-10/mês | Análises AI |
91
-
92
- **Custo total típico:**
93
- - **App Service Stack:** $0-2/mês (sem ACR)
94
- - **Container Apps Stack:** $7-20/mês (com ACR)
95
-
96
- ### ⚠️ Requer Aprovação
97
-
98
- | Recurso | Custo | Alternativa Free |
99
- |---------|-------|------------------|
100
- | Azure Functions | ~$0-5/mês | Hangfire |
101
- | Service Bus | ~$10/mês | Queue em SQL |
102
- | Cosmos DB | ~$25/mês | Azure SQL JSON |
103
- | Redis Cache | ~$15/mês | In-memory |
104
-
105
- ---
106
-
107
- ## 🌐 App Service Free Tier
108
-
109
- ### Configuração Obrigatória
110
- ```bicep
111
- resource appService 'Microsoft.Web/sites@2022-03-01' = {
112
- name: 'app-${projectName}-${environment}'
113
- location: location
114
- properties: {
115
- serverFarmId: appServicePlan.id
116
- httpsOnly: true
117
- siteConfig: {
118
- netFrameworkVersion: 'v8.0'
119
- alwaysOn: false # ⚠️ OBRIGATÓRIO no Free tier
120
- minTlsVersion: '1.2'
121
- }
122
- }
123
- }
124
-
125
- resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
126
- name: 'plan-${projectName}-${environment}'
127
- location: location
128
- sku: {
129
- name: 'F1' # Free tier
130
- tier: 'Free'
131
- }
132
- }
133
- ```
134
-
135
- ### Limitações Importantes
136
- - ⚠️ **CPU**: Apenas 60 minutos/dia (não contínuos)
137
- - ⚠️ **Sleep**: App dorme após 20 minutos de inatividade
138
- - ⚠️ **SSL**: Apenas `*.azurewebsites.net` (sem domínio customizado)
139
- - ⚠️ **Escala**: Sem scale-out (apenas 1 instância)
140
- - ✅ **Memória**: 1GB RAM
141
- - ✅ **Storage**: 1GB disco
142
-
143
- ### Deploy
144
- ```bash
145
- # Via Azure CLI
146
- az webapp up --name app-myproject-dev --runtime "DOTNET:8.0"
147
-
148
- # Via GitHub Actions
149
- - task: AzureWebApp@1
150
- inputs:
151
- azureSubscription: 'Azure-Connection'
152
- appName: 'app-myproject-dev'
153
- package: '$(Build.ArtifactStagingDirectory)/**/*.zip'
154
- ```
155
-
156
- ### Quando Migrar para Container Apps
157
- Se você observar:
158
- - 🔴 CPU quota esgotada frequentemente
159
- - 🔴 Cold starts afetando UX
160
- - 🔴 Necessidade de SSL customizado
161
- - 🔴 Tráfego crescendo (>1000 req/dia)
162
-
163
- **→ Considere migrar para Container Apps Consumption**
164
-
165
- ---
166
-
167
- ## 🐳 Container Apps
168
-
169
- ### Configuração Obrigatória
170
- ```yaml
171
- properties:
172
- template:
173
- scale:
174
- minReplicas: 0 # ⚠️ OBRIGATÓRIO: scale-to-zero
175
- maxReplicas: 2
176
- containers:
177
- - name: app
178
- resources:
179
- cpu: 0.25 # Mínimo
180
- memory: 0.5Gi # Mínimo
181
- ```
182
-
183
- ### Scale-to-Zero
184
- - ✅ **OBRIGATÓRIO** para dev/staging
185
- - ⚠️ Em prod com Hangfire: `minReplicas: 1`
186
- - 💰 Economia: ~80% vs always-on
187
-
188
- ---
189
-
190
- ## 🗄️ Azure SQL Free Tier
191
-
192
- ```
193
- - 32 GB storage
194
- - 100,000 vCore seconds/month
195
- - Serverless compute
196
- - Auto-pause after 1 hour idle
197
- ```
198
-
199
- ### Práticas
200
- - ✅ Usar Managed Identity
201
- - ✅ TDE habilitado (default)
202
- - ❌ Não criar índices em excesso
203
-
204
- ---
205
-
206
- ## 🤖 Azure OpenAI
207
-
208
- ### Modelo Padrão: gpt-4o-mini
209
-
210
- | Modelo | Custo Input | Custo Output | Usar |
211
- |--------|-------------|--------------|------|
212
- | **gpt-4o-mini** | $0.15/1M | $0.60/1M | ✅ PADRÃO |
213
- | gpt-4o | $2.50/1M | $10/1M | Com aprovação |
214
- | gpt-4 | $30/1M | $60/1M | ❌ NUNCA |
215
-
216
- ### Otimização
217
- ```csharp
218
- var settings = new OpenAIPromptExecutionSettings
219
- {
220
- MaxTokens = 500, // Limitar resposta
221
- Temperature = 0.3 // Mais determinístico
222
- };
223
- ```
224
-
225
- ---
226
-
227
- ## 🔐 Segurança
228
-
229
- ### Managed Identity (Preferido)
230
- ```csharp
231
- // Para Azure SQL
232
- "Authentication=Active Directory Managed Identity;"
233
-
234
- // Para Azure OpenAI
235
- var credential = new DefaultAzureCredential();
236
- ```
237
-
238
- ### Key Vault
239
- Usar apenas para:
240
- - Secrets de serviços externos
241
- - API keys de terceiros
242
-
243
- ---
244
-
245
- ## 📛 Naming Conventions
246
-
247
- ```
248
- {tipo}-{projeto}-{ambiente}
249
-
250
- Exemplos:
251
- - rg-myproject-dev # Resource Group
252
- - app-myproject-dev # App Service
253
- - plan-myproject-dev # App Service Plan
254
- - ca-myproject-dev # Container App
255
- - sql-myproject-dev # SQL Server
256
- - sqldb-myproject-dev # SQL Database
257
- - acr-myproject # Container Registry
258
- - appi-myproject-dev # App Insights
259
- - kv-myproject-dev # Key Vault
260
- ```
261
-
262
- | Ambiente | Sufixo | Características |
263
- |----------|--------|-----------------|
264
- | Development | -dev | Scale-to-zero, free tier |
265
- | Staging | -stg | Scale-to-zero, free tier |
266
- | Production | -prod | Min 1 replica |
267
-
268
- ---
269
-
270
- ## 🚀 Azure DevOps Pipelines
271
-
272
- ### Estratégia de Ambientes
273
-
274
- **2 ambientes:**
275
- - **Staging**: Desenvolvimento + QA (branch: `staging`)
276
- - Developers rodam projeto LOCAL
277
- - Acessam recursos REMOTOS staging
278
- - Deploy automático via pipeline
279
-
280
- - **Produção**: Ambiente crítico (branch: `main`/`master`)
281
- - Deploy via pipeline com aprovação manual
282
- - Always-on, monitoramento 24/7
283
-
284
- ### Estrutura de Pipelines
285
-
286
- **Stack Configuration** (`.azure/pipelines/`):
287
- ```
288
- stacks/blazor-azure/.azure/pipelines/
289
- ├── staging-pipeline.yml # Branch: staging
290
- ├── prod-pipeline.yml # Branch: main/master
291
- └── pipeline-variables.yml # Variáveis compartilhadas
292
- ```
293
-
294
- **Framework Templates** (`framework/templates/infrastructure/azure/pipelines/`):
295
- ```
296
- framework/templates/infrastructure/azure/pipelines/templates/
297
- ├── build-dotnet.yml # Build .NET projects
298
- ├── deploy-container-app.yml # Deploy to Azure Container Apps
299
- ├── deploy-app-service.yml # Deploy to Azure App Service
300
- └── infra-deploy.yml # Deploy Bicep infrastructure
301
- ```
302
-
303
- **Usage in Pipelines:**
304
- ```yaml
305
- # Reference framework templates with relative path
306
- - template: ../../../../framework/templates/infrastructure/azure/pipelines/templates/build-dotnet.yml
307
- parameters:
308
- dotnetVersion: '8.x'
309
- ```
310
-
311
- ### Pipeline Staging
312
-
313
- ```yaml
314
- # staging-pipeline.yml
315
- trigger:
316
- branches:
317
- include: [staging]
318
-
319
- variables:
320
- - template: pipeline-variables.yml
321
- - name: environment
322
- value: 'staging'
323
- - name: hostingType
324
- value: 'containerapp'
325
-
326
- stages:
327
- - stage: Build
328
- - stage: DeployInfra
329
- - stage: BuildContainer
330
- - stage: DeployApp
331
- jobs:
332
- - deployment: DeployAppJob
333
- environment: 'staging' # No approval
334
- ```
335
-
336
- ### Pipeline Production
337
-
338
- ```yaml
339
- # prod-pipeline.yml
340
- trigger:
341
- branches:
342
- include: [main, master]
343
-
344
- variables:
345
- - template: pipeline-variables.yml
346
- - name: environment
347
- value: 'prod'
348
- - name: hostingType
349
- value: 'containerapp'
350
-
351
- stages:
352
- - stage: Build
353
- - stage: SecurityScan
354
- - stage: DeployInfra
355
- - stage: BuildContainer
356
- - stage: DeployApp
357
- jobs:
358
- - deployment: DeployAppJob
359
- environment: 'production' # Approval required
360
- ```
361
-
362
- ### Workload Identity (Sem Secrets)
363
-
364
- Ao invés de Service Principals com secrets, use Workload Identity Federation:
365
-
366
- ```bash
367
- # Criar App Registration com Federated Credential
368
- az ad app create --display-name "myapp-prod-pipeline"
369
-
370
- # Configurar federated credential
371
- az ad app federated-credential create \
372
- --id <APP_ID> \
373
- --parameters @federated-credential.json
374
- ```
375
-
376
- **Vantagens:**
377
- - ✅ Sem secrets para gerenciar
378
- - ✅ Rotação automática de tokens
379
- - ✅ Mais seguro
380
- - ✅ Auditoria melhorada
381
-
382
- **Documentação completa:** `.azure/docs/azure-devops-setup.md`
383
-
384
- ---
385
-
386
- ## ✅ Checklist de Deploy
387
-
388
- ### Antes
389
- - [ ] Testes passando
390
- - [ ] Migrations aplicadas
391
- - [ ] Secrets no Key Vault
392
- - [ ] Managed Identity configurada
393
-
394
- ### Após
395
- - [ ] Health check OK
396
- - [ ] Logs no App Insights
397
- - [ ] Funcionalidade testada
398
- - [ ] Custos verificados
399
-
400
- ---
401
-
402
- ## ⚠️ Package Version Conflicts
403
-
404
- ### Azure.Identity Downgrade Error
405
-
406
- **Error:**
407
- ```
408
- NU1605: Detected package downgrade: Azure.Identity from 1.14.2 to 1.13.2
409
- ```
410
-
411
- **Cause:** `Microsoft.Data.SqlClient` or other packages require a newer version.
412
-
413
- **Solution:** Always specify `Azure.Identity` explicitly in your `.csproj`:
414
-
415
- ```xml
416
- <!-- Prevent version conflicts -->
417
- <PackageReference Include="Azure.Identity" Version="1.14.2" />
418
- ```
419
-
420
- **Why this happens:**
421
- - Transitive dependencies pull different versions
422
- - NuGet picks the lowest common version
423
- - This causes runtime failures with newer APIs
424
-
425
- ---
426
-
427
- ## 🔑 Key Vault Configuration
428
-
429
- ### Critical Rule
430
-
431
- **NEVER condition Key Vault loading on environment. Load whenever URI is configured.**
432
-
433
- **❌ WRONG:**
434
- ```csharp
435
- // This breaks DI in development!
436
- if (!string.IsNullOrEmpty(keyVaultUri) && !builder.Environment.IsDevelopment())
437
- {
438
- builder.Configuration.AddAzureKeyVault(...);
439
- }
440
- ```
441
-
442
- **✅ CORRECT:**
443
- ```csharp
444
- // Load Key Vault in ALL environments where URI exists
445
- if (!string.IsNullOrEmpty(keyVaultUri))
446
- {
447
- builder.Configuration.AddAzureKeyVault(
448
- new Uri(keyVaultUri),
449
- new DefaultAzureCredential());
450
- }
451
- ```
452
-
453
- **Why:**
454
- - Services registered via DI may depend on Key Vault secrets
455
- - `IBlobStorageService`, `IPaymentService`, etc. fail if secrets not loaded
456
- - Development can use Azure Key Vault with developer credentials
457
- - Or use `appsettings.Development.json` to override secrets locally
458
-
459
- ---
460
-
461
- ## 🚀 DefaultAzureCredential Optimization
462
-
463
- ### Problem
464
-
465
- `DefaultAzureCredential` is **slow in containers** because it tries multiple authentication methods sequentially (environment, workload identity, managed identity, Visual Studio, CLI, etc.).
466
-
467
- **Symptom:** Startup takes 30+ seconds, or times out.
468
-
469
- ### Solution: Disable Unused Credential Types
470
-
471
- ```csharp
472
- // For Container Apps / AKS with Managed Identity ONLY
473
- var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions
474
- {
475
- // Disable all except Managed Identity
476
- ExcludeEnvironmentCredential = true,
477
- ExcludeWorkloadIdentityCredential = true,
478
- ExcludeSharedTokenCacheCredential = true,
479
- ExcludeVisualStudioCredential = true,
480
- ExcludeVisualStudioCodeCredential = true,
481
- ExcludeAzureCliCredential = true,
482
- ExcludeAzurePowerShellCredential = true,
483
- ExcludeAzureDeveloperCliCredential = true,
484
- ExcludeInteractiveBrowserCredential = true,
485
- ExcludeManagedIdentityCredential = false // Keep this one!
486
- });
487
- ```
488
-
489
- ### Environment-Specific Configuration
490
-
491
- ```csharp
492
- // Program.cs - Smart credential selection
493
- DefaultAzureCredential CreateCredential(IHostEnvironment env)
494
- {
495
- if (env.IsDevelopment())
496
- {
497
- // Development: Allow CLI, VS, VS Code
498
- return new DefaultAzureCredential();
499
- }
500
-
501
- // Production: Only Managed Identity (fast!)
502
- return new DefaultAzureCredential(new DefaultAzureCredentialOptions
503
- {
504
- ExcludeEnvironmentCredential = true,
505
- ExcludeWorkloadIdentityCredential = true,
506
- ExcludeSharedTokenCacheCredential = true,
507
- ExcludeVisualStudioCredential = true,
508
- ExcludeVisualStudioCodeCredential = true,
509
- ExcludeAzureCliCredential = true,
510
- ExcludeAzurePowerShellCredential = true,
511
- ExcludeAzureDeveloperCliCredential = true,
512
- ExcludeInteractiveBrowserCredential = true,
513
- ExcludeManagedIdentityCredential = false
514
- });
515
- }
516
- ```
517
-
518
- ---
519
-
520
- ## 🐳 Container App Deployment Issues
521
-
522
- ### Problem: Container App Not Updating
523
-
524
- After pushing a new image, Container App continues running the old version.
525
-
526
- **Cause:** Same image digest doesn't trigger a new revision.
527
-
528
- **Solution:** Force a new revision with a timestamp:
529
-
530
- ```bash
531
- # Force new revision with environment variable
532
- az containerapp update \
533
- --name ca-myapp-prod \
534
- --resource-group rg-myapp-prod \
535
- --set-env-vars "DEPLOY_TIMESTAMP=$(date +%s)"
536
- ```
537
-
538
- ### Complete Deploy Script
539
-
540
- ```bash
541
- #!/bin/bash
542
- # deploy-container-app.sh
543
-
544
- APP_NAME="ca-myapp-prod"
545
- RG_NAME="rg-myapp-prod"
546
- ACR_NAME="acrmyapp"
547
- IMAGE_TAG="latest"
548
-
549
- # 1. Build and push
550
- docker build --no-cache -t $ACR_NAME.azurecr.io/myapp:$IMAGE_TAG .
551
- docker push $ACR_NAME.azurecr.io/myapp:$IMAGE_TAG
552
-
553
- # 2. Update with timestamp (forces new revision)
554
- az containerapp update \
555
- --name $APP_NAME \
556
- --resource-group $RG_NAME \
557
- --set-env-vars "DEPLOY_TIMESTAMP=$(date +%s)"
558
-
559
- # 3. Verify
560
- az containerapp show \
561
- --name $APP_NAME \
562
- --resource-group $RG_NAME \
563
- --query "properties.runningStatus"
564
-
565
- # 4. Check logs
566
- az containerapp logs show \
567
- --name $APP_NAME \
568
- --resource-group $RG_NAME \
569
- --follow
570
- ```
571
-
572
- ---
573
-
574
- ## 🔧 Troubleshooting Azure
575
-
576
- Quick reference for common Azure issues:
577
-
578
- ### Key Vault access denied
579
- → Verify RBAC role assignment (Key Vault Secrets User)
580
- → Check Managed Identity is enabled on the resource
581
- → Verify Key Vault firewall allows the resource's IP/VNet
582
-
583
- ### Container App 404
584
- → Check ingress configuration (external/internal)
585
- → Verify health probe endpoint exists and returns 200
586
- → Check container is actually running (logs)
587
-
588
- ### Managed Identity not working
589
- → Verify identity is assigned to the resource
590
- → Check RBAC scope (subscription vs resource group vs resource)
591
- → Allow 5-10 minutes for propagation after assignment
592
-
593
- ### blazor.web.js 404 (.NET 10)
594
- → Add to `.csproj`:
595
- ```xml
596
- <RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>
597
- ```
598
-
599
- ### DefaultAzureCredential slow/timeout
600
- → Disable unused credential types (see section above)
601
- → Check network connectivity to Azure AD
602
-
603
- ### Container App not updating
604
- → Use `DEPLOY_TIMESTAMP` to force new revision (see section above)
605
- → Verify image was actually pushed to ACR
606
- → Check ACR webhook/event subscription
607
-
608
- ### EF Core migrations not applied
609
- → Add auto-migration to startup (dev/staging only)
610
- → Or run migration in pipeline before deploy
611
-
612
- ---
613
-
614
- ## 📚 Lessons Learned - Deploy
615
-
616
- Key insights from production deployments:
617
-
618
- 1. **`docker build --no-cache`** is essential when debugging image issues
619
- 2. **`DEPLOY_TIMESTAMP`** forces new revision in Container Apps
620
- 3. **.NET 10 Preview** has undocumented breaking changes - check GitHub Issues
621
- 4. **GitHub Issues** are more effective than official docs for edge cases
622
- 5. **Auto-migration** simplifies deploy but has risks in production
623
- 6. **Key Vault in dev** needs developer credentials, not just prod Managed Identity
624
- 7. **Document while solving** - saves time later (hence this document!)