aigroup-workflow 2.1.2 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (913) hide show
  1. package/.codex/AGENTS.md +1 -1
  2. package/CLAUDE.md +1 -4
  3. package/README.md +333 -333
  4. package/cli/commands/init.mjs +20 -6
  5. package/cli/utils/scaffold.mjs +39 -9
  6. package/docs/red-flags.md +1 -1
  7. package/docs/rules/entropy.md +1 -1
  8. package/docs/rules/performance.md +1 -1
  9. package/docs/workflow-pipeline.md +1 -0
  10. package/manifests/install-modules.json +223 -133
  11. package/package.json +39 -39
  12. package/scripts/orchestration/lib/orchestrator.cjs +34 -0
  13. package/scripts/orchestration/session.cjs +24 -1
  14. package/skills/ai-ml/fine-tuning-expert/SKILL.md +162 -0
  15. package/skills/ai-ml/fine-tuning-expert/references/dataset-preparation.md +540 -0
  16. package/skills/ai-ml/fine-tuning-expert/references/deployment-optimization.md +673 -0
  17. package/skills/ai-ml/fine-tuning-expert/references/evaluation-metrics.md +597 -0
  18. package/skills/ai-ml/fine-tuning-expert/references/hyperparameter-tuning.md +565 -0
  19. package/skills/ai-ml/fine-tuning-expert/references/lora-peft.md +347 -0
  20. package/skills/ai-ml/ml-pipeline/SKILL.md +159 -0
  21. package/skills/ai-ml/ml-pipeline/references/experiment-tracking.md +833 -0
  22. package/skills/ai-ml/ml-pipeline/references/feature-engineering.md +631 -0
  23. package/skills/ai-ml/ml-pipeline/references/model-validation.md +978 -0
  24. package/skills/ai-ml/ml-pipeline/references/pipeline-orchestration.md +907 -0
  25. package/skills/ai-ml/ml-pipeline/references/training-pipelines.md +782 -0
  26. package/skills/ai-ml/rag-architect/SKILL.md +194 -0
  27. package/skills/ai-ml/rag-architect/references/chunking-strategies.md +878 -0
  28. package/skills/ai-ml/rag-architect/references/embedding-models.md +561 -0
  29. package/skills/ai-ml/rag-architect/references/rag-evaluation.md +833 -0
  30. package/skills/ai-ml/rag-architect/references/retrieval-optimization.md +795 -0
  31. package/skills/ai-ml/rag-architect/references/vector-databases.md +589 -0
  32. package/skills/ai-ml/spark-engineer/SKILL.md +148 -0
  33. package/skills/ai-ml/spark-engineer/references/partitioning-caching.md +543 -0
  34. package/skills/ai-ml/spark-engineer/references/performance-tuning.md +544 -0
  35. package/skills/ai-ml/spark-engineer/references/rdd-operations.md +599 -0
  36. package/skills/ai-ml/spark-engineer/references/spark-sql-dataframes.md +474 -0
  37. package/skills/ai-ml/spark-engineer/references/streaming-patterns.md +786 -0
  38. package/skills/backend/api-designer/SKILL.md +217 -0
  39. package/skills/backend/api-designer/references/error-handling.md +541 -0
  40. package/skills/backend/api-designer/references/openapi.md +824 -0
  41. package/skills/backend/api-designer/references/pagination.md +494 -0
  42. package/skills/backend/api-designer/references/rest-patterns.md +335 -0
  43. package/skills/backend/api-designer/references/versioning.md +391 -0
  44. package/skills/backend/architecture-designer/SKILL.md +117 -0
  45. package/skills/backend/architecture-designer/references/adr-template.md +116 -0
  46. package/skills/backend/architecture-designer/references/architecture-patterns.md +111 -0
  47. package/skills/backend/architecture-designer/references/database-selection.md +102 -0
  48. package/skills/backend/architecture-designer/references/nfr-checklist.md +112 -0
  49. package/skills/backend/architecture-designer/references/system-design.md +100 -0
  50. package/skills/backend/code-documenter/SKILL.md +147 -0
  51. package/skills/backend/code-documenter/references/api-docs-fastapi-django.md +166 -0
  52. package/skills/backend/code-documenter/references/api-docs-nestjs-express.md +220 -0
  53. package/skills/backend/code-documenter/references/coverage-reports.md +125 -0
  54. package/skills/backend/code-documenter/references/documentation-systems.md +333 -0
  55. package/skills/backend/code-documenter/references/interactive-api-docs.md +531 -0
  56. package/skills/backend/code-documenter/references/python-docstrings.md +121 -0
  57. package/skills/backend/code-documenter/references/typescript-jsdoc.md +145 -0
  58. package/skills/backend/code-documenter/references/user-guides-tutorials.md +530 -0
  59. package/skills/backend/debugging-wizard/SKILL.md +105 -0
  60. package/skills/backend/debugging-wizard/references/common-patterns.md +132 -0
  61. package/skills/backend/debugging-wizard/references/debugging-tools.md +140 -0
  62. package/skills/backend/debugging-wizard/references/quick-fixes.md +177 -0
  63. package/skills/backend/debugging-wizard/references/strategies.md +142 -0
  64. package/skills/backend/debugging-wizard/references/systematic-debugging.md +367 -0
  65. package/skills/backend/feature-forge/SKILL.md +98 -0
  66. package/skills/backend/feature-forge/references/acceptance-criteria.md +104 -0
  67. package/skills/backend/feature-forge/references/ears-syntax.md +99 -0
  68. package/skills/backend/feature-forge/references/interview-questions.md +150 -0
  69. package/skills/backend/feature-forge/references/pre-discovery-subagents.md +54 -0
  70. package/skills/backend/feature-forge/references/specification-template.md +103 -0
  71. package/skills/backend/fullstack-guardian/SKILL.md +105 -0
  72. package/skills/backend/fullstack-guardian/references/api-design-standards.md +307 -0
  73. package/skills/backend/fullstack-guardian/references/architecture-decisions.md +350 -0
  74. package/skills/backend/fullstack-guardian/references/backend-patterns.md +237 -0
  75. package/skills/backend/fullstack-guardian/references/common-patterns.md +134 -0
  76. package/skills/backend/fullstack-guardian/references/deliverables-checklist.md +354 -0
  77. package/skills/backend/fullstack-guardian/references/design-template.md +91 -0
  78. package/skills/backend/fullstack-guardian/references/error-handling.md +135 -0
  79. package/skills/backend/fullstack-guardian/references/frontend-patterns.md +340 -0
  80. package/skills/backend/fullstack-guardian/references/integration-patterns.md +333 -0
  81. package/skills/backend/fullstack-guardian/references/security-checklist.md +106 -0
  82. package/skills/backend/graphql-architect/SKILL.md +146 -0
  83. package/skills/backend/graphql-architect/references/federation.md +418 -0
  84. package/skills/backend/graphql-architect/references/migration-from-rest.md +1141 -0
  85. package/skills/backend/graphql-architect/references/resolvers.md +425 -0
  86. package/skills/backend/graphql-architect/references/schema-design.md +393 -0
  87. package/skills/backend/graphql-architect/references/security.md +569 -0
  88. package/skills/backend/graphql-architect/references/subscriptions.md +510 -0
  89. package/skills/backend/legacy-modernizer/SKILL.md +137 -0
  90. package/skills/backend/legacy-modernizer/references/legacy-testing.md +381 -0
  91. package/skills/backend/legacy-modernizer/references/migration-strategies.md +423 -0
  92. package/skills/backend/legacy-modernizer/references/refactoring-patterns.md +395 -0
  93. package/skills/backend/legacy-modernizer/references/strangler-fig-pattern.md +281 -0
  94. package/skills/backend/legacy-modernizer/references/system-assessment.md +487 -0
  95. package/skills/backend/microservices-architect/SKILL.md +164 -0
  96. package/skills/backend/microservices-architect/references/communication.md +499 -0
  97. package/skills/backend/microservices-architect/references/data.md +721 -0
  98. package/skills/backend/microservices-architect/references/decomposition.md +344 -0
  99. package/skills/backend/microservices-architect/references/observability.md +805 -0
  100. package/skills/backend/microservices-architect/references/patterns.md +603 -0
  101. package/skills/database/database-optimizer/SKILL.md +147 -0
  102. package/skills/database/database-optimizer/references/index-strategies.md +331 -0
  103. package/skills/database/database-optimizer/references/monitoring-analysis.md +501 -0
  104. package/skills/database/database-optimizer/references/mysql-tuning.md +452 -0
  105. package/skills/database/database-optimizer/references/postgresql-tuning.md +413 -0
  106. package/skills/database/database-optimizer/references/query-optimization.md +251 -0
  107. package/skills/database/postgres-pro/SKILL.md +152 -0
  108. package/skills/database/postgres-pro/references/extensions.md +404 -0
  109. package/skills/database/postgres-pro/references/jsonb.md +321 -0
  110. package/skills/database/postgres-pro/references/maintenance.md +481 -0
  111. package/skills/database/postgres-pro/references/performance.md +265 -0
  112. package/skills/database/postgres-pro/references/replication.md +446 -0
  113. package/skills/database/sql-pro/SKILL.md +129 -0
  114. package/skills/database/sql-pro/references/database-design.md +402 -0
  115. package/skills/database/sql-pro/references/dialect-differences.md +419 -0
  116. package/skills/database/sql-pro/references/optimization.md +384 -0
  117. package/skills/database/sql-pro/references/query-patterns.md +285 -0
  118. package/skills/database/sql-pro/references/window-functions.md +328 -0
  119. package/skills/dotnet/csharp-developer/SKILL.md +125 -0
  120. package/skills/dotnet/csharp-developer/references/aspnet-core.md +394 -0
  121. package/skills/dotnet/csharp-developer/references/blazor.md +553 -0
  122. package/skills/dotnet/csharp-developer/references/entity-framework.md +409 -0
  123. package/skills/dotnet/csharp-developer/references/modern-csharp.md +248 -0
  124. package/skills/dotnet/csharp-developer/references/performance.md +498 -0
  125. package/skills/dotnet/dotnet-core-expert/SKILL.md +138 -0
  126. package/skills/dotnet/dotnet-core-expert/references/authentication.md +546 -0
  127. package/skills/dotnet/dotnet-core-expert/references/clean-architecture.md +455 -0
  128. package/skills/dotnet/dotnet-core-expert/references/cloud-native.md +548 -0
  129. package/skills/dotnet/dotnet-core-expert/references/entity-framework.md +440 -0
  130. package/skills/dotnet/dotnet-core-expert/references/minimal-apis.md +319 -0
  131. package/skills/frontend/angular-architect/SKILL.md +152 -0
  132. package/skills/frontend/angular-architect/references/components.md +297 -0
  133. package/skills/frontend/angular-architect/references/ngrx.md +401 -0
  134. package/skills/frontend/angular-architect/references/routing.md +361 -0
  135. package/skills/frontend/angular-architect/references/rxjs.md +319 -0
  136. package/skills/frontend/angular-architect/references/testing.md +405 -0
  137. package/skills/frontend/flutter-expert/SKILL.md +138 -0
  138. package/skills/frontend/flutter-expert/references/bloc-state.md +259 -0
  139. package/skills/frontend/flutter-expert/references/gorouter-navigation.md +119 -0
  140. package/skills/frontend/flutter-expert/references/performance.md +99 -0
  141. package/skills/frontend/flutter-expert/references/project-structure.md +118 -0
  142. package/skills/frontend/flutter-expert/references/riverpod-state.md +130 -0
  143. package/skills/frontend/flutter-expert/references/widget-patterns.md +123 -0
  144. package/skills/frontend/nextjs-developer/SKILL.md +143 -0
  145. package/skills/frontend/nextjs-developer/references/app-router.md +311 -0
  146. package/skills/frontend/nextjs-developer/references/data-fetching.md +482 -0
  147. package/skills/frontend/nextjs-developer/references/deployment.md +545 -0
  148. package/skills/frontend/nextjs-developer/references/server-actions.md +462 -0
  149. package/skills/frontend/nextjs-developer/references/server-components.md +384 -0
  150. package/skills/frontend/react-expert/SKILL.md +149 -0
  151. package/skills/frontend/react-expert/references/hooks-patterns.md +162 -0
  152. package/skills/frontend/react-expert/references/migration-class-to-modern.md +1119 -0
  153. package/skills/frontend/react-expert/references/performance.md +168 -0
  154. package/skills/frontend/react-expert/references/react-19-features.md +174 -0
  155. package/skills/frontend/react-expert/references/server-components.md +143 -0
  156. package/skills/frontend/react-expert/references/state-management.md +171 -0
  157. package/skills/frontend/react-expert/references/testing-react.md +174 -0
  158. package/skills/frontend/react-native-expert/SKILL.md +185 -0
  159. package/skills/frontend/react-native-expert/references/expo-router.md +187 -0
  160. package/skills/frontend/react-native-expert/references/list-optimization.md +204 -0
  161. package/skills/frontend/react-native-expert/references/platform-handling.md +188 -0
  162. package/skills/frontend/react-native-expert/references/project-structure.md +171 -0
  163. package/skills/frontend/react-native-expert/references/storage-hooks.md +173 -0
  164. package/skills/frontend/vue-expert/SKILL.md +98 -0
  165. package/skills/frontend/vue-expert/references/build-tooling.md +480 -0
  166. package/skills/frontend/vue-expert/references/components.md +448 -0
  167. package/skills/frontend/vue-expert/references/composition-api.md +299 -0
  168. package/skills/frontend/vue-expert/references/mobile-hybrid.md +636 -0
  169. package/skills/frontend/vue-expert/references/nuxt.md +669 -0
  170. package/skills/frontend/vue-expert/references/state-management.md +449 -0
  171. package/skills/frontend/vue-expert/references/typescript.md +584 -0
  172. package/skills/frontend/vue-expert-js/SKILL.md +167 -0
  173. package/skills/frontend/vue-expert-js/references/component-architecture.md +219 -0
  174. package/skills/frontend/vue-expert-js/references/composables-patterns.md +183 -0
  175. package/skills/frontend/vue-expert-js/references/jsdoc-typing.md +535 -0
  176. package/skills/frontend/vue-expert-js/references/state-management.md +249 -0
  177. package/skills/frontend/vue-expert-js/references/testing-patterns.md +237 -0
  178. package/skills/go-rust-cpp/cpp-pro/SKILL.md +115 -0
  179. package/skills/go-rust-cpp/cpp-pro/references/build-tooling.md +440 -0
  180. package/skills/go-rust-cpp/cpp-pro/references/concurrency.md +437 -0
  181. package/skills/go-rust-cpp/cpp-pro/references/memory-performance.md +397 -0
  182. package/skills/go-rust-cpp/cpp-pro/references/modern-cpp.md +304 -0
  183. package/skills/go-rust-cpp/cpp-pro/references/templates.md +357 -0
  184. package/skills/go-rust-cpp/golang-pro/SKILL.md +122 -0
  185. package/skills/go-rust-cpp/golang-pro/references/concurrency.md +329 -0
  186. package/skills/go-rust-cpp/golang-pro/references/generics.md +442 -0
  187. package/skills/go-rust-cpp/golang-pro/references/interfaces.md +432 -0
  188. package/skills/go-rust-cpp/golang-pro/references/project-structure.md +477 -0
  189. package/skills/go-rust-cpp/golang-pro/references/testing.md +451 -0
  190. package/skills/go-rust-cpp/rust-engineer/SKILL.md +167 -0
  191. package/skills/go-rust-cpp/rust-engineer/references/async.md +458 -0
  192. package/skills/go-rust-cpp/rust-engineer/references/error-handling.md +334 -0
  193. package/skills/go-rust-cpp/rust-engineer/references/ownership.md +278 -0
  194. package/skills/go-rust-cpp/rust-engineer/references/testing.md +470 -0
  195. package/skills/go-rust-cpp/rust-engineer/references/traits.md +413 -0
  196. package/skills/infra/cli-developer/SKILL.md +113 -0
  197. package/skills/infra/cli-developer/references/design-patterns.md +221 -0
  198. package/skills/infra/cli-developer/references/go-cli.md +540 -0
  199. package/skills/infra/cli-developer/references/node-cli.md +383 -0
  200. package/skills/infra/cli-developer/references/python-cli.md +422 -0
  201. package/skills/infra/cli-developer/references/ux-patterns.md +448 -0
  202. package/skills/infra/cloud-architect/SKILL.md +216 -0
  203. package/skills/infra/cloud-architect/references/aws.md +394 -0
  204. package/skills/infra/cloud-architect/references/azure.md +562 -0
  205. package/skills/infra/cloud-architect/references/cost.md +582 -0
  206. package/skills/infra/cloud-architect/references/gcp.md +633 -0
  207. package/skills/infra/cloud-architect/references/multi-cloud.md +483 -0
  208. package/skills/infra/devops-engineer/SKILL.md +144 -0
  209. package/skills/infra/devops-engineer/references/deployment-strategies.md +241 -0
  210. package/skills/infra/devops-engineer/references/docker-patterns.md +113 -0
  211. package/skills/infra/devops-engineer/references/github-actions.md +139 -0
  212. package/skills/infra/devops-engineer/references/incident-response.md +331 -0
  213. package/skills/infra/devops-engineer/references/kubernetes.md +154 -0
  214. package/skills/infra/devops-engineer/references/platform-engineering.md +417 -0
  215. package/skills/infra/devops-engineer/references/release-automation.md +527 -0
  216. package/skills/infra/devops-engineer/references/terraform-iac.md +141 -0
  217. package/skills/infra/kubernetes-specialist/SKILL.md +241 -0
  218. package/skills/infra/kubernetes-specialist/references/configuration.md +452 -0
  219. package/skills/infra/kubernetes-specialist/references/cost-optimization.md +458 -0
  220. package/skills/infra/kubernetes-specialist/references/custom-operators.md +563 -0
  221. package/skills/infra/kubernetes-specialist/references/gitops.md +530 -0
  222. package/skills/infra/kubernetes-specialist/references/helm-charts.md +912 -0
  223. package/skills/infra/kubernetes-specialist/references/multi-cluster.md +507 -0
  224. package/skills/infra/kubernetes-specialist/references/networking.md +447 -0
  225. package/skills/infra/kubernetes-specialist/references/service-mesh.md +459 -0
  226. package/skills/infra/kubernetes-specialist/references/storage.md +535 -0
  227. package/skills/infra/kubernetes-specialist/references/troubleshooting.md +414 -0
  228. package/skills/infra/kubernetes-specialist/references/workloads.md +377 -0
  229. package/skills/infra/mcp-developer/SKILL.md +143 -0
  230. package/skills/infra/mcp-developer/references/protocol.md +244 -0
  231. package/skills/infra/mcp-developer/references/python-sdk.md +367 -0
  232. package/skills/infra/mcp-developer/references/resources.md +554 -0
  233. package/skills/infra/mcp-developer/references/tools.md +480 -0
  234. package/skills/infra/mcp-developer/references/typescript-sdk.md +350 -0
  235. package/skills/infra/monitoring-expert/SKILL.md +176 -0
  236. package/skills/infra/monitoring-expert/references/alerting-rules.md +141 -0
  237. package/skills/infra/monitoring-expert/references/application-profiling.md +331 -0
  238. package/skills/infra/monitoring-expert/references/capacity-planning.md +344 -0
  239. package/skills/infra/monitoring-expert/references/dashboards.md +126 -0
  240. package/skills/infra/monitoring-expert/references/opentelemetry.md +123 -0
  241. package/skills/infra/monitoring-expert/references/performance-testing.md +269 -0
  242. package/skills/infra/monitoring-expert/references/prometheus-metrics.md +136 -0
  243. package/skills/infra/monitoring-expert/references/structured-logging.md +142 -0
  244. package/skills/infra/sre-engineer/SKILL.md +181 -0
  245. package/skills/infra/sre-engineer/references/automation-toil.md +492 -0
  246. package/skills/infra/sre-engineer/references/error-budget-policy.md +334 -0
  247. package/skills/infra/sre-engineer/references/incident-chaos.md +576 -0
  248. package/skills/infra/sre-engineer/references/monitoring-alerting.md +424 -0
  249. package/skills/infra/sre-engineer/references/slo-sli-management.md +238 -0
  250. package/skills/infra/terraform-engineer/SKILL.md +143 -0
  251. package/skills/infra/terraform-engineer/references/best-practices.md +583 -0
  252. package/skills/infra/terraform-engineer/references/module-patterns.md +297 -0
  253. package/skills/infra/terraform-engineer/references/providers.md +452 -0
  254. package/skills/infra/terraform-engineer/references/state-management.md +371 -0
  255. package/skills/infra/terraform-engineer/references/testing.md +486 -0
  256. package/skills/infra/websocket-engineer/SKILL.md +168 -0
  257. package/skills/infra/websocket-engineer/references/alternatives.md +391 -0
  258. package/skills/infra/websocket-engineer/references/patterns.md +400 -0
  259. package/skills/infra/websocket-engineer/references/protocol.md +195 -0
  260. package/skills/infra/websocket-engineer/references/scaling.md +333 -0
  261. package/skills/infra/websocket-engineer/references/security.md +474 -0
  262. package/skills/java/java-architect/SKILL.md +132 -0
  263. package/skills/java/java-architect/references/jpa-optimization.md +393 -0
  264. package/skills/java/java-architect/references/reactive-webflux.md +356 -0
  265. package/skills/java/java-architect/references/spring-boot-setup.md +269 -0
  266. package/skills/java/java-architect/references/spring-security.md +445 -0
  267. package/skills/java/java-architect/references/testing-patterns.md +500 -0
  268. package/skills/java/kotlin-specialist/SKILL.md +147 -0
  269. package/skills/java/kotlin-specialist/references/android-compose.md +419 -0
  270. package/skills/java/kotlin-specialist/references/coroutines-flow.md +276 -0
  271. package/skills/java/kotlin-specialist/references/dsl-idioms.md +421 -0
  272. package/skills/java/kotlin-specialist/references/ktor-server.md +426 -0
  273. package/skills/java/kotlin-specialist/references/multiplatform-kmp.md +380 -0
  274. package/skills/java/spring-boot-engineer/SKILL.md +195 -0
  275. package/skills/java/spring-boot-engineer/references/cloud.md +498 -0
  276. package/skills/java/spring-boot-engineer/references/data.md +381 -0
  277. package/skills/java/spring-boot-engineer/references/security.md +459 -0
  278. package/skills/java/spring-boot-engineer/references/testing.md +545 -0
  279. package/skills/java/spring-boot-engineer/references/web.md +295 -0
  280. package/skills/javascript/javascript-pro/SKILL.md +132 -0
  281. package/skills/javascript/javascript-pro/references/async-patterns.md +334 -0
  282. package/skills/javascript/javascript-pro/references/browser-apis.md +398 -0
  283. package/skills/javascript/javascript-pro/references/modern-syntax.md +272 -0
  284. package/skills/javascript/javascript-pro/references/modules.md +357 -0
  285. package/skills/javascript/javascript-pro/references/node-essentials.md +471 -0
  286. package/skills/javascript/nestjs-expert/SKILL.md +206 -0
  287. package/skills/javascript/nestjs-expert/references/authentication.md +166 -0
  288. package/skills/javascript/nestjs-expert/references/controllers-routing.md +111 -0
  289. package/skills/javascript/nestjs-expert/references/dtos-validation.md +153 -0
  290. package/skills/javascript/nestjs-expert/references/migration-from-express.md +1237 -0
  291. package/skills/javascript/nestjs-expert/references/services-di.md +140 -0
  292. package/skills/javascript/nestjs-expert/references/testing-patterns.md +186 -0
  293. package/skills/javascript/typescript-pro/SKILL.md +145 -0
  294. package/skills/javascript/typescript-pro/references/advanced-types.md +259 -0
  295. package/skills/javascript/typescript-pro/references/configuration.md +445 -0
  296. package/skills/javascript/typescript-pro/references/patterns.md +484 -0
  297. package/skills/javascript/typescript-pro/references/type-guards.md +352 -0
  298. package/skills/javascript/typescript-pro/references/utility-types.md +329 -0
  299. package/skills/php/laravel-specialist/SKILL.md +262 -0
  300. package/skills/php/laravel-specialist/references/eloquent.md +351 -0
  301. package/skills/php/laravel-specialist/references/livewire.md +512 -0
  302. package/skills/php/laravel-specialist/references/queues.md +423 -0
  303. package/skills/php/laravel-specialist/references/routing.md +362 -0
  304. package/skills/php/laravel-specialist/references/testing.md +522 -0
  305. package/skills/php/php-pro/SKILL.md +206 -0
  306. package/skills/php/php-pro/references/async-patterns.md +412 -0
  307. package/skills/php/php-pro/references/laravel-patterns.md +377 -0
  308. package/skills/php/php-pro/references/modern-php-features.md +323 -0
  309. package/skills/php/php-pro/references/symfony-patterns.md +466 -0
  310. package/skills/php/php-pro/references/testing-quality.md +466 -0
  311. package/skills/python/django-expert/SKILL.md +162 -0
  312. package/skills/python/django-expert/references/authentication.md +145 -0
  313. package/skills/python/django-expert/references/drf-serializers.md +148 -0
  314. package/skills/python/django-expert/references/models-orm.md +151 -0
  315. package/skills/python/django-expert/references/testing-django.md +204 -0
  316. package/skills/python/django-expert/references/viewsets-views.md +153 -0
  317. package/skills/python/fastapi-expert/SKILL.md +185 -0
  318. package/skills/python/fastapi-expert/references/async-sqlalchemy.md +146 -0
  319. package/skills/python/fastapi-expert/references/authentication.md +159 -0
  320. package/skills/python/fastapi-expert/references/endpoints-routing.md +142 -0
  321. package/skills/python/fastapi-expert/references/migration-from-django.md +997 -0
  322. package/skills/python/fastapi-expert/references/pydantic-v2.md +135 -0
  323. package/skills/python/fastapi-expert/references/testing-async.md +159 -0
  324. package/skills/python/pandas-pro/SKILL.md +178 -0
  325. package/skills/python/pandas-pro/references/aggregation-groupby.md +545 -0
  326. package/skills/python/pandas-pro/references/data-cleaning.md +500 -0
  327. package/skills/python/pandas-pro/references/dataframe-operations.md +420 -0
  328. package/skills/python/pandas-pro/references/merging-joining.md +596 -0
  329. package/skills/python/pandas-pro/references/performance-optimization.md +597 -0
  330. package/skills/python/python-pro/SKILL.md +177 -0
  331. package/skills/python/python-pro/references/async-patterns.md +356 -0
  332. package/skills/python/python-pro/references/packaging.md +460 -0
  333. package/skills/python/python-pro/references/standard-library.md +378 -0
  334. package/skills/python/python-pro/references/testing.md +404 -0
  335. package/skills/python/python-pro/references/type-system.md +290 -0
  336. package/skills/quality/chaos-engineer/SKILL.md +182 -0
  337. package/skills/quality/chaos-engineer/references/chaos-tools.md +511 -0
  338. package/skills/quality/chaos-engineer/references/experiment-design.md +229 -0
  339. package/skills/quality/chaos-engineer/references/game-days.md +434 -0
  340. package/skills/quality/chaos-engineer/references/infrastructure-chaos.md +348 -0
  341. package/skills/quality/chaos-engineer/references/kubernetes-chaos.md +432 -0
  342. package/skills/quality/code-reviewer/SKILL.md +119 -0
  343. package/skills/quality/code-reviewer/references/common-issues.md +142 -0
  344. package/skills/quality/code-reviewer/references/feedback-examples.md +144 -0
  345. package/skills/quality/code-reviewer/references/receiving-feedback.md +238 -0
  346. package/skills/quality/code-reviewer/references/report-template.md +109 -0
  347. package/skills/quality/code-reviewer/references/review-checklist.md +88 -0
  348. package/skills/quality/code-reviewer/references/spec-compliance-review.md +258 -0
  349. package/skills/quality/playwright-expert/SKILL.md +169 -0
  350. package/skills/quality/playwright-expert/references/api-mocking.md +140 -0
  351. package/skills/quality/playwright-expert/references/configuration.md +155 -0
  352. package/skills/quality/playwright-expert/references/debugging-flaky.md +150 -0
  353. package/skills/quality/playwright-expert/references/page-object-model.md +152 -0
  354. package/skills/quality/playwright-expert/references/selectors-locators.md +119 -0
  355. package/skills/quality/secure-code-guardian/SKILL.md +191 -0
  356. package/skills/quality/secure-code-guardian/references/authentication.md +136 -0
  357. package/skills/quality/secure-code-guardian/references/input-validation.md +146 -0
  358. package/skills/quality/secure-code-guardian/references/owasp-prevention.md +135 -0
  359. package/skills/quality/secure-code-guardian/references/security-headers.md +133 -0
  360. package/skills/quality/secure-code-guardian/references/xss-csrf.md +157 -0
  361. package/skills/quality/security-reviewer/SKILL.md +103 -0
  362. package/skills/quality/security-reviewer/references/infrastructure-security.md +268 -0
  363. package/skills/quality/security-reviewer/references/penetration-testing.md +268 -0
  364. package/skills/quality/security-reviewer/references/report-template.md +170 -0
  365. package/skills/quality/security-reviewer/references/sast-tools.md +117 -0
  366. package/skills/quality/security-reviewer/references/secret-scanning.md +125 -0
  367. package/skills/quality/security-reviewer/references/vulnerability-patterns.md +152 -0
  368. package/skills/quality/tdd-guide/assets/sample_coverage_report.lcov +0 -0
  369. package/skills/quality/test-master/SKILL.md +94 -0
  370. package/skills/quality/test-master/references/automation-frameworks.md +294 -0
  371. package/skills/quality/test-master/references/e2e-testing.md +128 -0
  372. package/skills/quality/test-master/references/integration-testing.md +120 -0
  373. package/skills/quality/test-master/references/performance-testing.md +118 -0
  374. package/skills/quality/test-master/references/qa-methodology.md +247 -0
  375. package/skills/quality/test-master/references/security-testing.md +127 -0
  376. package/skills/quality/test-master/references/tdd-iron-laws.md +174 -0
  377. package/skills/quality/test-master/references/test-reports.md +104 -0
  378. package/skills/quality/test-master/references/testing-anti-patterns.md +231 -0
  379. package/skills/quality/test-master/references/unit-testing.md +113 -0
  380. package/skills/ruby/rails-expert/SKILL.md +154 -0
  381. package/skills/ruby/rails-expert/references/active-record.md +244 -0
  382. package/skills/ruby/rails-expert/references/api-development.md +401 -0
  383. package/skills/ruby/rails-expert/references/background-jobs.md +272 -0
  384. package/skills/ruby/rails-expert/references/hotwire-turbo.md +228 -0
  385. package/skills/ruby/rails-expert/references/rspec-testing.md +367 -0
  386. package/skills/swift/swift-expert/SKILL.md +163 -0
  387. package/skills/swift/swift-expert/references/async-concurrency.md +360 -0
  388. package/skills/swift/swift-expert/references/memory-performance.md +377 -0
  389. package/skills/swift/swift-expert/references/protocol-oriented.md +354 -0
  390. package/skills/swift/swift-expert/references/swiftui-patterns.md +291 -0
  391. package/skills/swift/swift-expert/references/testing-patterns.md +399 -0
  392. package/skills/workflow/brainstorming/SKILL.md +164 -0
  393. package/skills/workflow/brainstorming/scripts/helper.js +88 -0
  394. package/skills/workflow/brainstorming/scripts/start-server.sh +148 -0
  395. package/skills/workflow/brainstorming/scripts/stop-server.sh +56 -0
  396. package/skills/workflow/brainstorming/spec-document-reviewer-prompt.md +49 -0
  397. package/skills/workflow/brainstorming/visual-companion.md +287 -0
  398. package/skills/workflow/documentation/SKILL.md +45 -0
  399. package/skills/workflow/entropy-management/SKILL.md +115 -0
  400. package/skills/workflow/executing-plans/SKILL.md +70 -0
  401. package/skills/workflow/finishing-a-development-branch/SKILL.md +200 -0
  402. package/skills/workflow/receiving-code-review/SKILL.md +213 -0
  403. package/skills/workflow/requesting-code-review/SKILL.md +105 -0
  404. package/skills/workflow/requesting-code-review/code-reviewer.md +146 -0
  405. package/skills/workflow/requirement-engineering/SKILL.md +111 -0
  406. package/skills/workflow/systematic-debugging/CREATION-LOG.md +119 -0
  407. package/skills/workflow/systematic-debugging/SKILL.md +296 -0
  408. package/skills/workflow/systematic-debugging/condition-based-waiting-example.ts +158 -0
  409. package/skills/workflow/systematic-debugging/condition-based-waiting.md +115 -0
  410. package/skills/workflow/systematic-debugging/defense-in-depth.md +122 -0
  411. package/skills/workflow/systematic-debugging/find-polluter.sh +63 -0
  412. package/skills/workflow/systematic-debugging/root-cause-tracing.md +169 -0
  413. package/skills/workflow/systematic-debugging/test-academic.md +14 -0
  414. package/skills/workflow/systematic-debugging/test-pressure-1.md +58 -0
  415. package/skills/workflow/systematic-debugging/test-pressure-2.md +68 -0
  416. package/skills/workflow/systematic-debugging/test-pressure-3.md +69 -0
  417. package/skills/workflow/using-git-worktrees/SKILL.md +218 -0
  418. package/skills/workflow/verification-before-completion/SKILL.md +139 -0
  419. package/skills/workflow/writing-plans/SKILL.md +151 -0
  420. package/skills/workflow/writing-plans/plan-document-reviewer-prompt.md +49 -0
  421. package/skills/workflow/writing-skills/SKILL.md +655 -0
  422. package/skills/workflow/writing-skills/anthropic-best-practices.md +1150 -0
  423. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  424. package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -0
  425. package/skills/workflow/writing-skills/persuasion-principles.md +187 -0
  426. package/skills/workflow/writing-skills/render-graphs.js +168 -0
  427. package/skills/workflow/writing-skills/testing-skills-with-subagents.md +384 -0
  428. package/skills/angular-architect/SKILL.md +0 -152
  429. package/skills/angular-architect/references/components.md +0 -297
  430. package/skills/angular-architect/references/ngrx.md +0 -401
  431. package/skills/angular-architect/references/routing.md +0 -361
  432. package/skills/angular-architect/references/rxjs.md +0 -319
  433. package/skills/angular-architect/references/testing.md +0 -405
  434. package/skills/api-designer/SKILL.md +0 -217
  435. package/skills/api-designer/references/error-handling.md +0 -541
  436. package/skills/api-designer/references/openapi.md +0 -824
  437. package/skills/api-designer/references/pagination.md +0 -494
  438. package/skills/api-designer/references/rest-patterns.md +0 -335
  439. package/skills/api-designer/references/versioning.md +0 -391
  440. package/skills/architecture-designer/SKILL.md +0 -117
  441. package/skills/architecture-designer/references/adr-template.md +0 -116
  442. package/skills/architecture-designer/references/architecture-patterns.md +0 -111
  443. package/skills/architecture-designer/references/database-selection.md +0 -102
  444. package/skills/architecture-designer/references/nfr-checklist.md +0 -112
  445. package/skills/architecture-designer/references/system-design.md +0 -100
  446. package/skills/brainstorming/SKILL.md +0 -164
  447. package/skills/brainstorming/scripts/helper.js +0 -88
  448. package/skills/brainstorming/scripts/start-server.sh +0 -148
  449. package/skills/brainstorming/scripts/stop-server.sh +0 -56
  450. package/skills/brainstorming/spec-document-reviewer-prompt.md +0 -49
  451. package/skills/brainstorming/visual-companion.md +0 -287
  452. package/skills/chaos-engineer/SKILL.md +0 -182
  453. package/skills/chaos-engineer/references/chaos-tools.md +0 -511
  454. package/skills/chaos-engineer/references/experiment-design.md +0 -229
  455. package/skills/chaos-engineer/references/game-days.md +0 -434
  456. package/skills/chaos-engineer/references/infrastructure-chaos.md +0 -348
  457. package/skills/chaos-engineer/references/kubernetes-chaos.md +0 -432
  458. package/skills/cli-developer/SKILL.md +0 -113
  459. package/skills/cli-developer/references/design-patterns.md +0 -221
  460. package/skills/cli-developer/references/go-cli.md +0 -540
  461. package/skills/cli-developer/references/node-cli.md +0 -383
  462. package/skills/cli-developer/references/python-cli.md +0 -422
  463. package/skills/cli-developer/references/ux-patterns.md +0 -448
  464. package/skills/cloud-architect/SKILL.md +0 -216
  465. package/skills/cloud-architect/references/aws.md +0 -394
  466. package/skills/cloud-architect/references/azure.md +0 -562
  467. package/skills/cloud-architect/references/cost.md +0 -582
  468. package/skills/cloud-architect/references/gcp.md +0 -633
  469. package/skills/cloud-architect/references/multi-cloud.md +0 -483
  470. package/skills/code-documenter/SKILL.md +0 -147
  471. package/skills/code-documenter/references/api-docs-fastapi-django.md +0 -166
  472. package/skills/code-documenter/references/api-docs-nestjs-express.md +0 -220
  473. package/skills/code-documenter/references/coverage-reports.md +0 -125
  474. package/skills/code-documenter/references/documentation-systems.md +0 -333
  475. package/skills/code-documenter/references/interactive-api-docs.md +0 -531
  476. package/skills/code-documenter/references/python-docstrings.md +0 -121
  477. package/skills/code-documenter/references/typescript-jsdoc.md +0 -145
  478. package/skills/code-documenter/references/user-guides-tutorials.md +0 -530
  479. package/skills/code-reviewer/SKILL.md +0 -119
  480. package/skills/code-reviewer/references/common-issues.md +0 -142
  481. package/skills/code-reviewer/references/feedback-examples.md +0 -144
  482. package/skills/code-reviewer/references/receiving-feedback.md +0 -238
  483. package/skills/code-reviewer/references/report-template.md +0 -109
  484. package/skills/code-reviewer/references/review-checklist.md +0 -88
  485. package/skills/code-reviewer/references/spec-compliance-review.md +0 -258
  486. package/skills/cpp-pro/SKILL.md +0 -115
  487. package/skills/cpp-pro/references/build-tooling.md +0 -440
  488. package/skills/cpp-pro/references/concurrency.md +0 -437
  489. package/skills/cpp-pro/references/memory-performance.md +0 -397
  490. package/skills/cpp-pro/references/modern-cpp.md +0 -304
  491. package/skills/cpp-pro/references/templates.md +0 -357
  492. package/skills/csharp-developer/SKILL.md +0 -125
  493. package/skills/csharp-developer/references/aspnet-core.md +0 -394
  494. package/skills/csharp-developer/references/blazor.md +0 -553
  495. package/skills/csharp-developer/references/entity-framework.md +0 -409
  496. package/skills/csharp-developer/references/modern-csharp.md +0 -248
  497. package/skills/csharp-developer/references/performance.md +0 -498
  498. package/skills/database-optimizer/SKILL.md +0 -147
  499. package/skills/database-optimizer/references/index-strategies.md +0 -331
  500. package/skills/database-optimizer/references/monitoring-analysis.md +0 -501
  501. package/skills/database-optimizer/references/mysql-tuning.md +0 -452
  502. package/skills/database-optimizer/references/postgresql-tuning.md +0 -413
  503. package/skills/database-optimizer/references/query-optimization.md +0 -251
  504. package/skills/debugging-wizard/SKILL.md +0 -105
  505. package/skills/debugging-wizard/references/common-patterns.md +0 -132
  506. package/skills/debugging-wizard/references/debugging-tools.md +0 -140
  507. package/skills/debugging-wizard/references/quick-fixes.md +0 -177
  508. package/skills/debugging-wizard/references/strategies.md +0 -142
  509. package/skills/debugging-wizard/references/systematic-debugging.md +0 -367
  510. package/skills/devops-engineer/SKILL.md +0 -144
  511. package/skills/devops-engineer/references/deployment-strategies.md +0 -241
  512. package/skills/devops-engineer/references/docker-patterns.md +0 -113
  513. package/skills/devops-engineer/references/github-actions.md +0 -139
  514. package/skills/devops-engineer/references/incident-response.md +0 -331
  515. package/skills/devops-engineer/references/kubernetes.md +0 -154
  516. package/skills/devops-engineer/references/platform-engineering.md +0 -417
  517. package/skills/devops-engineer/references/release-automation.md +0 -527
  518. package/skills/devops-engineer/references/terraform-iac.md +0 -141
  519. package/skills/django-expert/SKILL.md +0 -162
  520. package/skills/django-expert/references/authentication.md +0 -145
  521. package/skills/django-expert/references/drf-serializers.md +0 -148
  522. package/skills/django-expert/references/models-orm.md +0 -151
  523. package/skills/django-expert/references/testing-django.md +0 -204
  524. package/skills/django-expert/references/viewsets-views.md +0 -153
  525. package/skills/documentation/SKILL.md +0 -45
  526. package/skills/dotnet-core-expert/SKILL.md +0 -138
  527. package/skills/dotnet-core-expert/references/authentication.md +0 -546
  528. package/skills/dotnet-core-expert/references/clean-architecture.md +0 -455
  529. package/skills/dotnet-core-expert/references/cloud-native.md +0 -548
  530. package/skills/dotnet-core-expert/references/entity-framework.md +0 -440
  531. package/skills/dotnet-core-expert/references/minimal-apis.md +0 -319
  532. package/skills/entropy-management/SKILL.md +0 -115
  533. package/skills/executing-plans/SKILL.md +0 -70
  534. package/skills/fastapi-expert/SKILL.md +0 -185
  535. package/skills/fastapi-expert/references/async-sqlalchemy.md +0 -146
  536. package/skills/fastapi-expert/references/authentication.md +0 -159
  537. package/skills/fastapi-expert/references/endpoints-routing.md +0 -142
  538. package/skills/fastapi-expert/references/migration-from-django.md +0 -997
  539. package/skills/fastapi-expert/references/pydantic-v2.md +0 -135
  540. package/skills/fastapi-expert/references/testing-async.md +0 -159
  541. package/skills/feature-forge/SKILL.md +0 -98
  542. package/skills/feature-forge/references/acceptance-criteria.md +0 -104
  543. package/skills/feature-forge/references/ears-syntax.md +0 -99
  544. package/skills/feature-forge/references/interview-questions.md +0 -150
  545. package/skills/feature-forge/references/pre-discovery-subagents.md +0 -54
  546. package/skills/feature-forge/references/specification-template.md +0 -103
  547. package/skills/fine-tuning-expert/SKILL.md +0 -162
  548. package/skills/fine-tuning-expert/references/dataset-preparation.md +0 -540
  549. package/skills/fine-tuning-expert/references/deployment-optimization.md +0 -673
  550. package/skills/fine-tuning-expert/references/evaluation-metrics.md +0 -597
  551. package/skills/fine-tuning-expert/references/hyperparameter-tuning.md +0 -565
  552. package/skills/fine-tuning-expert/references/lora-peft.md +0 -347
  553. package/skills/finishing-a-development-branch/SKILL.md +0 -200
  554. package/skills/flutter-expert/SKILL.md +0 -138
  555. package/skills/flutter-expert/references/bloc-state.md +0 -259
  556. package/skills/flutter-expert/references/gorouter-navigation.md +0 -119
  557. package/skills/flutter-expert/references/performance.md +0 -99
  558. package/skills/flutter-expert/references/project-structure.md +0 -118
  559. package/skills/flutter-expert/references/riverpod-state.md +0 -130
  560. package/skills/flutter-expert/references/widget-patterns.md +0 -123
  561. package/skills/fullstack-guardian/SKILL.md +0 -105
  562. package/skills/fullstack-guardian/references/api-design-standards.md +0 -307
  563. package/skills/fullstack-guardian/references/architecture-decisions.md +0 -350
  564. package/skills/fullstack-guardian/references/backend-patterns.md +0 -237
  565. package/skills/fullstack-guardian/references/common-patterns.md +0 -134
  566. package/skills/fullstack-guardian/references/deliverables-checklist.md +0 -354
  567. package/skills/fullstack-guardian/references/design-template.md +0 -91
  568. package/skills/fullstack-guardian/references/error-handling.md +0 -135
  569. package/skills/fullstack-guardian/references/frontend-patterns.md +0 -340
  570. package/skills/fullstack-guardian/references/integration-patterns.md +0 -333
  571. package/skills/fullstack-guardian/references/security-checklist.md +0 -106
  572. package/skills/golang-pro/SKILL.md +0 -122
  573. package/skills/golang-pro/references/concurrency.md +0 -329
  574. package/skills/golang-pro/references/generics.md +0 -442
  575. package/skills/golang-pro/references/interfaces.md +0 -432
  576. package/skills/golang-pro/references/project-structure.md +0 -477
  577. package/skills/golang-pro/references/testing.md +0 -451
  578. package/skills/graphql-architect/SKILL.md +0 -146
  579. package/skills/graphql-architect/references/federation.md +0 -418
  580. package/skills/graphql-architect/references/migration-from-rest.md +0 -1141
  581. package/skills/graphql-architect/references/resolvers.md +0 -425
  582. package/skills/graphql-architect/references/schema-design.md +0 -393
  583. package/skills/graphql-architect/references/security.md +0 -569
  584. package/skills/graphql-architect/references/subscriptions.md +0 -510
  585. package/skills/java-architect/SKILL.md +0 -132
  586. package/skills/java-architect/references/jpa-optimization.md +0 -393
  587. package/skills/java-architect/references/reactive-webflux.md +0 -356
  588. package/skills/java-architect/references/spring-boot-setup.md +0 -269
  589. package/skills/java-architect/references/spring-security.md +0 -445
  590. package/skills/java-architect/references/testing-patterns.md +0 -500
  591. package/skills/javascript-pro/SKILL.md +0 -132
  592. package/skills/javascript-pro/references/async-patterns.md +0 -334
  593. package/skills/javascript-pro/references/browser-apis.md +0 -398
  594. package/skills/javascript-pro/references/modern-syntax.md +0 -272
  595. package/skills/javascript-pro/references/modules.md +0 -357
  596. package/skills/javascript-pro/references/node-essentials.md +0 -471
  597. package/skills/kotlin-specialist/SKILL.md +0 -147
  598. package/skills/kotlin-specialist/references/android-compose.md +0 -419
  599. package/skills/kotlin-specialist/references/coroutines-flow.md +0 -276
  600. package/skills/kotlin-specialist/references/dsl-idioms.md +0 -421
  601. package/skills/kotlin-specialist/references/ktor-server.md +0 -426
  602. package/skills/kotlin-specialist/references/multiplatform-kmp.md +0 -380
  603. package/skills/kubernetes-specialist/SKILL.md +0 -241
  604. package/skills/kubernetes-specialist/references/configuration.md +0 -452
  605. package/skills/kubernetes-specialist/references/cost-optimization.md +0 -458
  606. package/skills/kubernetes-specialist/references/custom-operators.md +0 -563
  607. package/skills/kubernetes-specialist/references/gitops.md +0 -530
  608. package/skills/kubernetes-specialist/references/helm-charts.md +0 -912
  609. package/skills/kubernetes-specialist/references/multi-cluster.md +0 -507
  610. package/skills/kubernetes-specialist/references/networking.md +0 -447
  611. package/skills/kubernetes-specialist/references/service-mesh.md +0 -459
  612. package/skills/kubernetes-specialist/references/storage.md +0 -535
  613. package/skills/kubernetes-specialist/references/troubleshooting.md +0 -414
  614. package/skills/kubernetes-specialist/references/workloads.md +0 -377
  615. package/skills/laravel-specialist/SKILL.md +0 -262
  616. package/skills/laravel-specialist/references/eloquent.md +0 -351
  617. package/skills/laravel-specialist/references/livewire.md +0 -512
  618. package/skills/laravel-specialist/references/queues.md +0 -423
  619. package/skills/laravel-specialist/references/routing.md +0 -362
  620. package/skills/laravel-specialist/references/testing.md +0 -522
  621. package/skills/legacy-modernizer/SKILL.md +0 -137
  622. package/skills/legacy-modernizer/references/legacy-testing.md +0 -381
  623. package/skills/legacy-modernizer/references/migration-strategies.md +0 -423
  624. package/skills/legacy-modernizer/references/refactoring-patterns.md +0 -395
  625. package/skills/legacy-modernizer/references/strangler-fig-pattern.md +0 -281
  626. package/skills/legacy-modernizer/references/system-assessment.md +0 -487
  627. package/skills/mcp-developer/SKILL.md +0 -143
  628. package/skills/mcp-developer/references/protocol.md +0 -244
  629. package/skills/mcp-developer/references/python-sdk.md +0 -367
  630. package/skills/mcp-developer/references/resources.md +0 -554
  631. package/skills/mcp-developer/references/tools.md +0 -480
  632. package/skills/mcp-developer/references/typescript-sdk.md +0 -350
  633. package/skills/microservices-architect/SKILL.md +0 -164
  634. package/skills/microservices-architect/references/communication.md +0 -499
  635. package/skills/microservices-architect/references/data.md +0 -721
  636. package/skills/microservices-architect/references/decomposition.md +0 -344
  637. package/skills/microservices-architect/references/observability.md +0 -805
  638. package/skills/microservices-architect/references/patterns.md +0 -603
  639. package/skills/ml-pipeline/SKILL.md +0 -159
  640. package/skills/ml-pipeline/references/experiment-tracking.md +0 -833
  641. package/skills/ml-pipeline/references/feature-engineering.md +0 -631
  642. package/skills/ml-pipeline/references/model-validation.md +0 -978
  643. package/skills/ml-pipeline/references/pipeline-orchestration.md +0 -907
  644. package/skills/ml-pipeline/references/training-pipelines.md +0 -782
  645. package/skills/monitoring-expert/SKILL.md +0 -176
  646. package/skills/monitoring-expert/references/alerting-rules.md +0 -141
  647. package/skills/monitoring-expert/references/application-profiling.md +0 -331
  648. package/skills/monitoring-expert/references/capacity-planning.md +0 -344
  649. package/skills/monitoring-expert/references/dashboards.md +0 -126
  650. package/skills/monitoring-expert/references/opentelemetry.md +0 -123
  651. package/skills/monitoring-expert/references/performance-testing.md +0 -269
  652. package/skills/monitoring-expert/references/prometheus-metrics.md +0 -136
  653. package/skills/monitoring-expert/references/structured-logging.md +0 -142
  654. package/skills/nestjs-expert/SKILL.md +0 -206
  655. package/skills/nestjs-expert/references/authentication.md +0 -166
  656. package/skills/nestjs-expert/references/controllers-routing.md +0 -111
  657. package/skills/nestjs-expert/references/dtos-validation.md +0 -153
  658. package/skills/nestjs-expert/references/migration-from-express.md +0 -1237
  659. package/skills/nestjs-expert/references/services-di.md +0 -140
  660. package/skills/nestjs-expert/references/testing-patterns.md +0 -186
  661. package/skills/nextjs-developer/SKILL.md +0 -143
  662. package/skills/nextjs-developer/references/app-router.md +0 -311
  663. package/skills/nextjs-developer/references/data-fetching.md +0 -482
  664. package/skills/nextjs-developer/references/deployment.md +0 -545
  665. package/skills/nextjs-developer/references/server-actions.md +0 -462
  666. package/skills/nextjs-developer/references/server-components.md +0 -384
  667. package/skills/pandas-pro/SKILL.md +0 -178
  668. package/skills/pandas-pro/references/aggregation-groupby.md +0 -545
  669. package/skills/pandas-pro/references/data-cleaning.md +0 -500
  670. package/skills/pandas-pro/references/dataframe-operations.md +0 -420
  671. package/skills/pandas-pro/references/merging-joining.md +0 -596
  672. package/skills/pandas-pro/references/performance-optimization.md +0 -597
  673. package/skills/php-pro/SKILL.md +0 -206
  674. package/skills/php-pro/references/async-patterns.md +0 -412
  675. package/skills/php-pro/references/laravel-patterns.md +0 -377
  676. package/skills/php-pro/references/modern-php-features.md +0 -323
  677. package/skills/php-pro/references/symfony-patterns.md +0 -466
  678. package/skills/php-pro/references/testing-quality.md +0 -466
  679. package/skills/playwright-expert/SKILL.md +0 -169
  680. package/skills/playwright-expert/references/api-mocking.md +0 -140
  681. package/skills/playwright-expert/references/configuration.md +0 -155
  682. package/skills/playwright-expert/references/debugging-flaky.md +0 -150
  683. package/skills/playwright-expert/references/page-object-model.md +0 -152
  684. package/skills/playwright-expert/references/selectors-locators.md +0 -119
  685. package/skills/postgres-pro/SKILL.md +0 -152
  686. package/skills/postgres-pro/references/extensions.md +0 -404
  687. package/skills/postgres-pro/references/jsonb.md +0 -321
  688. package/skills/postgres-pro/references/maintenance.md +0 -481
  689. package/skills/postgres-pro/references/performance.md +0 -265
  690. package/skills/postgres-pro/references/replication.md +0 -446
  691. package/skills/python-pro/SKILL.md +0 -177
  692. package/skills/python-pro/references/async-patterns.md +0 -356
  693. package/skills/python-pro/references/packaging.md +0 -460
  694. package/skills/python-pro/references/standard-library.md +0 -378
  695. package/skills/python-pro/references/testing.md +0 -404
  696. package/skills/python-pro/references/type-system.md +0 -290
  697. package/skills/rag-architect/SKILL.md +0 -194
  698. package/skills/rag-architect/references/chunking-strategies.md +0 -878
  699. package/skills/rag-architect/references/embedding-models.md +0 -561
  700. package/skills/rag-architect/references/rag-evaluation.md +0 -833
  701. package/skills/rag-architect/references/retrieval-optimization.md +0 -795
  702. package/skills/rag-architect/references/vector-databases.md +0 -589
  703. package/skills/rails-expert/SKILL.md +0 -154
  704. package/skills/rails-expert/references/active-record.md +0 -244
  705. package/skills/rails-expert/references/api-development.md +0 -401
  706. package/skills/rails-expert/references/background-jobs.md +0 -272
  707. package/skills/rails-expert/references/hotwire-turbo.md +0 -228
  708. package/skills/rails-expert/references/rspec-testing.md +0 -367
  709. package/skills/react-expert/SKILL.md +0 -149
  710. package/skills/react-expert/references/hooks-patterns.md +0 -162
  711. package/skills/react-expert/references/migration-class-to-modern.md +0 -1119
  712. package/skills/react-expert/references/performance.md +0 -168
  713. package/skills/react-expert/references/react-19-features.md +0 -174
  714. package/skills/react-expert/references/server-components.md +0 -143
  715. package/skills/react-expert/references/state-management.md +0 -171
  716. package/skills/react-expert/references/testing-react.md +0 -174
  717. package/skills/react-native-expert/SKILL.md +0 -185
  718. package/skills/react-native-expert/references/expo-router.md +0 -187
  719. package/skills/react-native-expert/references/list-optimization.md +0 -204
  720. package/skills/react-native-expert/references/platform-handling.md +0 -188
  721. package/skills/react-native-expert/references/project-structure.md +0 -171
  722. package/skills/react-native-expert/references/storage-hooks.md +0 -173
  723. package/skills/receiving-code-review/SKILL.md +0 -213
  724. package/skills/requesting-code-review/SKILL.md +0 -105
  725. package/skills/requesting-code-review/code-reviewer.md +0 -146
  726. package/skills/requirement-engineering/SKILL.md +0 -111
  727. package/skills/rust-engineer/SKILL.md +0 -167
  728. package/skills/rust-engineer/references/async.md +0 -458
  729. package/skills/rust-engineer/references/error-handling.md +0 -334
  730. package/skills/rust-engineer/references/ownership.md +0 -278
  731. package/skills/rust-engineer/references/testing.md +0 -470
  732. package/skills/rust-engineer/references/traits.md +0 -413
  733. package/skills/secure-code-guardian/SKILL.md +0 -191
  734. package/skills/secure-code-guardian/references/authentication.md +0 -136
  735. package/skills/secure-code-guardian/references/input-validation.md +0 -146
  736. package/skills/secure-code-guardian/references/owasp-prevention.md +0 -135
  737. package/skills/secure-code-guardian/references/security-headers.md +0 -133
  738. package/skills/secure-code-guardian/references/xss-csrf.md +0 -157
  739. package/skills/security-reviewer/SKILL.md +0 -103
  740. package/skills/security-reviewer/references/infrastructure-security.md +0 -268
  741. package/skills/security-reviewer/references/penetration-testing.md +0 -268
  742. package/skills/security-reviewer/references/report-template.md +0 -170
  743. package/skills/security-reviewer/references/sast-tools.md +0 -117
  744. package/skills/security-reviewer/references/secret-scanning.md +0 -125
  745. package/skills/security-reviewer/references/vulnerability-patterns.md +0 -152
  746. package/skills/spark-engineer/SKILL.md +0 -148
  747. package/skills/spark-engineer/references/partitioning-caching.md +0 -543
  748. package/skills/spark-engineer/references/performance-tuning.md +0 -544
  749. package/skills/spark-engineer/references/rdd-operations.md +0 -599
  750. package/skills/spark-engineer/references/spark-sql-dataframes.md +0 -474
  751. package/skills/spark-engineer/references/streaming-patterns.md +0 -786
  752. package/skills/spring-boot-engineer/SKILL.md +0 -195
  753. package/skills/spring-boot-engineer/references/cloud.md +0 -498
  754. package/skills/spring-boot-engineer/references/data.md +0 -381
  755. package/skills/spring-boot-engineer/references/security.md +0 -459
  756. package/skills/spring-boot-engineer/references/testing.md +0 -545
  757. package/skills/spring-boot-engineer/references/web.md +0 -295
  758. package/skills/sql-pro/SKILL.md +0 -129
  759. package/skills/sql-pro/references/database-design.md +0 -402
  760. package/skills/sql-pro/references/dialect-differences.md +0 -419
  761. package/skills/sql-pro/references/optimization.md +0 -384
  762. package/skills/sql-pro/references/query-patterns.md +0 -285
  763. package/skills/sql-pro/references/window-functions.md +0 -328
  764. package/skills/sre-engineer/SKILL.md +0 -181
  765. package/skills/sre-engineer/references/automation-toil.md +0 -492
  766. package/skills/sre-engineer/references/error-budget-policy.md +0 -334
  767. package/skills/sre-engineer/references/incident-chaos.md +0 -576
  768. package/skills/sre-engineer/references/monitoring-alerting.md +0 -424
  769. package/skills/sre-engineer/references/slo-sli-management.md +0 -238
  770. package/skills/swift-expert/SKILL.md +0 -163
  771. package/skills/swift-expert/references/async-concurrency.md +0 -360
  772. package/skills/swift-expert/references/memory-performance.md +0 -377
  773. package/skills/swift-expert/references/protocol-oriented.md +0 -354
  774. package/skills/swift-expert/references/swiftui-patterns.md +0 -291
  775. package/skills/swift-expert/references/testing-patterns.md +0 -399
  776. package/skills/systematic-debugging/CREATION-LOG.md +0 -119
  777. package/skills/systematic-debugging/SKILL.md +0 -296
  778. package/skills/systematic-debugging/condition-based-waiting-example.ts +0 -158
  779. package/skills/systematic-debugging/condition-based-waiting.md +0 -115
  780. package/skills/systematic-debugging/defense-in-depth.md +0 -122
  781. package/skills/systematic-debugging/find-polluter.sh +0 -63
  782. package/skills/systematic-debugging/root-cause-tracing.md +0 -169
  783. package/skills/systematic-debugging/test-academic.md +0 -14
  784. package/skills/systematic-debugging/test-pressure-1.md +0 -58
  785. package/skills/systematic-debugging/test-pressure-2.md +0 -68
  786. package/skills/systematic-debugging/test-pressure-3.md +0 -69
  787. package/skills/tdd-guide/assets/sample_coverage_report.lcov +0 -56
  788. package/skills/terraform-engineer/SKILL.md +0 -143
  789. package/skills/terraform-engineer/references/best-practices.md +0 -583
  790. package/skills/terraform-engineer/references/module-patterns.md +0 -297
  791. package/skills/terraform-engineer/references/providers.md +0 -452
  792. package/skills/terraform-engineer/references/state-management.md +0 -371
  793. package/skills/terraform-engineer/references/testing.md +0 -486
  794. package/skills/test-master/SKILL.md +0 -94
  795. package/skills/test-master/references/automation-frameworks.md +0 -294
  796. package/skills/test-master/references/e2e-testing.md +0 -128
  797. package/skills/test-master/references/integration-testing.md +0 -120
  798. package/skills/test-master/references/performance-testing.md +0 -118
  799. package/skills/test-master/references/qa-methodology.md +0 -247
  800. package/skills/test-master/references/security-testing.md +0 -127
  801. package/skills/test-master/references/tdd-iron-laws.md +0 -174
  802. package/skills/test-master/references/test-reports.md +0 -104
  803. package/skills/test-master/references/testing-anti-patterns.md +0 -231
  804. package/skills/test-master/references/unit-testing.md +0 -113
  805. package/skills/typescript-pro/SKILL.md +0 -145
  806. package/skills/typescript-pro/references/advanced-types.md +0 -259
  807. package/skills/typescript-pro/references/configuration.md +0 -445
  808. package/skills/typescript-pro/references/patterns.md +0 -484
  809. package/skills/typescript-pro/references/type-guards.md +0 -352
  810. package/skills/typescript-pro/references/utility-types.md +0 -329
  811. package/skills/using-git-worktrees/SKILL.md +0 -218
  812. package/skills/verification-before-completion/SKILL.md +0 -139
  813. package/skills/vue-expert/SKILL.md +0 -98
  814. package/skills/vue-expert/references/build-tooling.md +0 -480
  815. package/skills/vue-expert/references/components.md +0 -448
  816. package/skills/vue-expert/references/composition-api.md +0 -299
  817. package/skills/vue-expert/references/mobile-hybrid.md +0 -636
  818. package/skills/vue-expert/references/nuxt.md +0 -669
  819. package/skills/vue-expert/references/state-management.md +0 -449
  820. package/skills/vue-expert/references/typescript.md +0 -584
  821. package/skills/vue-expert-js/SKILL.md +0 -167
  822. package/skills/vue-expert-js/references/component-architecture.md +0 -219
  823. package/skills/vue-expert-js/references/composables-patterns.md +0 -183
  824. package/skills/vue-expert-js/references/jsdoc-typing.md +0 -535
  825. package/skills/vue-expert-js/references/state-management.md +0 -249
  826. package/skills/vue-expert-js/references/testing-patterns.md +0 -237
  827. package/skills/websocket-engineer/SKILL.md +0 -168
  828. package/skills/websocket-engineer/references/alternatives.md +0 -391
  829. package/skills/websocket-engineer/references/patterns.md +0 -400
  830. package/skills/websocket-engineer/references/protocol.md +0 -195
  831. package/skills/websocket-engineer/references/scaling.md +0 -333
  832. package/skills/websocket-engineer/references/security.md +0 -474
  833. package/skills/writing-plans/SKILL.md +0 -151
  834. package/skills/writing-plans/plan-document-reviewer-prompt.md +0 -49
  835. package/skills/writing-skills/SKILL.md +0 -655
  836. package/skills/writing-skills/anthropic-best-practices.md +0 -1150
  837. package/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
  838. package/skills/writing-skills/graphviz-conventions.dot +0 -172
  839. package/skills/writing-skills/persuasion-principles.md +0 -187
  840. package/skills/writing-skills/render-graphs.js +0 -168
  841. package/skills/writing-skills/testing-skills-with-subagents.md +0 -384
  842. /package/skills/{design-commands → frontend/design-commands}/design.md +0 -0
  843. /package/skills/{design-commands → frontend/design-commands}/handoff.md +0 -0
  844. /package/skills/{design-commands → frontend/design-commands}/prototype.md +0 -0
  845. /package/skills/{design-commands → frontend/design-commands}/spec.md +0 -0
  846. /package/skills/{design-commands → frontend/design-commands}/style.md +0 -0
  847. /package/skills/{senior-frontend → frontend/senior-frontend}/SKILL.md +0 -0
  848. /package/skills/{senior-frontend → frontend/senior-frontend}/references/frontend_best_practices.md +0 -0
  849. /package/skills/{senior-frontend → frontend/senior-frontend}/references/nextjs_optimization_guide.md +0 -0
  850. /package/skills/{senior-frontend → frontend/senior-frontend}/references/react_patterns.md +0 -0
  851. /package/skills/{senior-frontend → frontend/senior-frontend}/scripts/bundle_analyzer.py +0 -0
  852. /package/skills/{senior-frontend → frontend/senior-frontend}/scripts/component_generator.py +0 -0
  853. /package/skills/{senior-frontend → frontend/senior-frontend}/scripts/frontend_scaffolder.py +0 -0
  854. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/SKILL.md +0 -0
  855. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/charts.csv +0 -0
  856. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/colors.csv +0 -0
  857. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/icons.csv +0 -0
  858. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/landing.csv +0 -0
  859. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/products.csv +0 -0
  860. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/react-performance.csv +0 -0
  861. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/astro.csv +0 -0
  862. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/flutter.csv +0 -0
  863. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/html-tailwind.csv +0 -0
  864. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/jetpack-compose.csv +0 -0
  865. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/nextjs.csv +0 -0
  866. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/nuxt-ui.csv +0 -0
  867. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/nuxtjs.csv +0 -0
  868. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/react-native.csv +0 -0
  869. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/react.csv +0 -0
  870. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/shadcn.csv +0 -0
  871. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/svelte.csv +0 -0
  872. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/swiftui.csv +0 -0
  873. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/stacks/vue.csv +0 -0
  874. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/styles.csv +0 -0
  875. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/typography.csv +0 -0
  876. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/ui-reasoning.csv +0 -0
  877. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/ux-guidelines.csv +0 -0
  878. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/data/web-interface.csv +0 -0
  879. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/scripts/core.py +0 -0
  880. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/scripts/design_system.py +0 -0
  881. /package/skills/{ui-ux-pro-max → frontend/ui-ux-pro-max}/scripts/search.py +0 -0
  882. /package/skills/{competitive-analysis → product/competitive-analysis}/SKILL.md +0 -0
  883. /package/skills/{meeting-notes → product/meeting-notes}/SKILL.md +0 -0
  884. /package/skills/{prd-template → product/prd-template}/SKILL.md +0 -0
  885. /package/skills/{stakeholder-update → product/stakeholder-update}/SKILL.md +0 -0
  886. /package/skills/{user-research-synthesis → product/user-research-synthesis}/SKILL.md +0 -0
  887. /package/skills/{senior-qa → quality/senior-qa}/README.md +0 -0
  888. /package/skills/{senior-qa → quality/senior-qa}/SKILL.md +0 -0
  889. /package/skills/{senior-qa → quality/senior-qa}/references/qa_best_practices.md +0 -0
  890. /package/skills/{senior-qa → quality/senior-qa}/references/test_automation_patterns.md +0 -0
  891. /package/skills/{senior-qa → quality/senior-qa}/references/testing_strategies.md +0 -0
  892. /package/skills/{senior-qa → quality/senior-qa}/scripts/coverage_analyzer.py +0 -0
  893. /package/skills/{senior-qa → quality/senior-qa}/scripts/e2e_test_scaffolder.py +0 -0
  894. /package/skills/{senior-qa → quality/senior-qa}/scripts/test_suite_generator.py +0 -0
  895. /package/skills/{tdd-guide → quality/tdd-guide}/HOW_TO_USE.md +0 -0
  896. /package/skills/{tdd-guide → quality/tdd-guide}/README.md +0 -0
  897. /package/skills/{tdd-guide → quality/tdd-guide}/SKILL.md +0 -0
  898. /package/skills/{tdd-guide → quality/tdd-guide}/assets/expected_output.json +0 -0
  899. /package/skills/{tdd-guide → quality/tdd-guide}/assets/sample_input_python.json +0 -0
  900. /package/skills/{tdd-guide → quality/tdd-guide}/assets/sample_input_typescript.json +0 -0
  901. /package/skills/{tdd-guide → quality/tdd-guide}/references/ci-integration.md +0 -0
  902. /package/skills/{tdd-guide → quality/tdd-guide}/references/framework-guide.md +0 -0
  903. /package/skills/{tdd-guide → quality/tdd-guide}/references/tdd-best-practices.md +0 -0
  904. /package/skills/{tdd-guide → quality/tdd-guide}/scripts/coverage_analyzer.py +0 -0
  905. /package/skills/{tdd-guide → quality/tdd-guide}/scripts/fixture_generator.py +0 -0
  906. /package/skills/{tdd-guide → quality/tdd-guide}/scripts/format_detector.py +0 -0
  907. /package/skills/{tdd-guide → quality/tdd-guide}/scripts/framework_adapter.py +0 -0
  908. /package/skills/{tdd-guide → quality/tdd-guide}/scripts/metrics_calculator.py +0 -0
  909. /package/skills/{tdd-guide → quality/tdd-guide}/scripts/output_formatter.py +0 -0
  910. /package/skills/{tdd-guide → quality/tdd-guide}/scripts/tdd_workflow.py +0 -0
  911. /package/skills/{tdd-guide → quality/tdd-guide}/scripts/test_generator.py +0 -0
  912. /package/skills/{brainstorming → workflow/brainstorming}/scripts/frame-template.html +0 -0
  913. /package/skills/{brainstorming → workflow/brainstorming}/scripts/server.cjs +0 -0
@@ -1,997 +0,0 @@
1
- # Django to FastAPI Migration Guide
2
-
3
- ---
4
-
5
- ## When to Use This Guide
6
-
7
- **Migrate to FastAPI when:**
8
- - Need async/await for I/O-bound operations
9
- - Require WebSocket or Server-Sent Events
10
- - Want automatic OpenAPI/Swagger documentation
11
- - Need better performance for API-heavy workloads
12
- - Desire modern Python type hints and editor support
13
- - Building microservices from Django monolith
14
- - Require lower resource consumption
15
-
16
- **DO NOT migrate when:**
17
- - Heavy use of Django admin interface
18
- - Extensive Django ORM model inheritance
19
- - Complex form handling and validation
20
- - Server-side template rendering required
21
- - Team lacks async Python experience
22
- - Django ecosystem plugins are critical
23
- - Migration cost exceeds business value
24
-
25
- ---
26
-
27
- ## Concept Mapping: Django/DRF → FastAPI
28
-
29
- | Django/DRF Concept | FastAPI Equivalent | Notes |
30
- |-------------------|-------------------|-------|
31
- | `models.Model` | Pydantic `BaseModel` + SQLAlchemy | Separate schema from ORM |
32
- | `serializers.Serializer` | Pydantic `BaseModel` | Type-safe validation |
33
- | `ModelSerializer` | Multiple Pydantic models | Create/Read/Update schemas |
34
- | `ViewSet` | `APIRouter` + path operations | More explicit routing |
35
- | `GenericAPIView` | Dependency injection | Function-based approach |
36
- | `@api_view` decorator | `@router.get/post` | Built-in HTTP methods |
37
- | `urls.py` | `APIRouter` + `app.include_router` | Nested routers |
38
- | `settings.py` | `pydantic-settings` | Environment-based config |
39
- | `middleware` | Middleware + dependencies | More granular control |
40
- | `permissions` | Dependencies | Composable auth |
41
- | `authentication` | OAuth2 + JWT dependencies | Standards-based |
42
- | `pagination` | Query parameters + dependencies | Manual implementation |
43
- | `filters` | Query parameters | Type-safe filtering |
44
- | `Django ORM` | SQLAlchemy 2.0+ | Async support |
45
- | `select_related` | `selectinload` | Eager loading |
46
- | `prefetch_related` | `joinedload` | Join strategies |
47
- | `pytest-django` | `pytest + httpx` | Async test client |
48
- | `admin.py` | External (SQLAdmin, etc.) | Not built-in |
49
-
50
- ---
51
-
52
- ## Serializer → Pydantic V2 Migration
53
-
54
- ### Django REST Framework Serializer
55
-
56
- ```python
57
- # Django DRF
58
- from rest_framework import serializers
59
- from .models import User, Post
60
-
61
- class UserSerializer(serializers.ModelSerializer):
62
- post_count = serializers.SerializerMethodField()
63
-
64
- class Meta:
65
- model = User
66
- fields = ['id', 'username', 'email', 'created_at', 'post_count']
67
- read_only_fields = ['id', 'created_at']
68
- extra_kwargs = {
69
- 'email': {'write_only': True}
70
- }
71
-
72
- def get_post_count(self, obj):
73
- return obj.posts.count()
74
-
75
- def validate_username(self, value):
76
- if len(value) < 3:
77
- raise serializers.ValidationError("Username too short")
78
- return value
79
-
80
- class PostSerializer(serializers.ModelSerializer):
81
- author = UserSerializer(read_only=True)
82
- tags = serializers.ListField(child=serializers.CharField())
83
-
84
- class Meta:
85
- model = Post
86
- fields = ['id', 'title', 'content', 'author', 'tags', 'published']
87
-
88
- def create(self, validated_data):
89
- tags = validated_data.pop('tags', [])
90
- post = Post.objects.create(**validated_data)
91
- post.tags.set(tags)
92
- return post
93
- ```
94
-
95
- ### FastAPI Pydantic V2 Schemas
96
-
97
- ```python
98
- # FastAPI with Pydantic V2
99
- from pydantic import BaseModel, EmailStr, Field, field_validator, computed_field
100
- from datetime import datetime
101
- from typing import Annotated
102
-
103
- # Base schemas
104
- class UserBase(BaseModel):
105
- username: Annotated[str, Field(min_length=3, max_length=50)]
106
- email: EmailStr
107
-
108
- # Create schema (input)
109
- class UserCreate(UserBase):
110
- password: Annotated[str, Field(min_length=8)]
111
-
112
- @field_validator('username')
113
- @classmethod
114
- def validate_username(cls, v: str) -> str:
115
- if len(v) < 3:
116
- raise ValueError("Username too short")
117
- return v
118
-
119
- # Update schema (partial)
120
- class UserUpdate(BaseModel):
121
- username: Annotated[str | None, Field(min_length=3, max_length=50)] = None
122
- email: EmailStr | None = None
123
-
124
- # Read schema (output) - analogous to read_only_fields
125
- class UserRead(UserBase):
126
- id: int
127
- created_at: datetime
128
-
129
- model_config = {
130
- "from_attributes": True # Pydantic V2: replaces orm_mode
131
- }
132
-
133
- # Read schema with relations - analogous to SerializerMethodField
134
- class UserReadWithStats(UserRead):
135
- post_count: int
136
-
137
- @computed_field # Pydantic V2 computed fields
138
- @property
139
- def display_name(self) -> str:
140
- return f"@{self.username}"
141
-
142
- # Nested schemas
143
- class PostBase(BaseModel):
144
- title: Annotated[str, Field(max_length=200)]
145
- content: str
146
- tags: list[str] = []
147
- published: bool = False
148
-
149
- class PostCreate(PostBase):
150
- pass
151
-
152
- class PostRead(PostBase):
153
- id: int
154
- author: UserRead # Nested serialization
155
- created_at: datetime
156
-
157
- model_config = {"from_attributes": True}
158
-
159
- # Embedding vs side-loading
160
- class PostReadMinimal(BaseModel):
161
- """Minimal post representation (just ID)"""
162
- id: int
163
- title: str
164
- author_id: int # Side-loaded reference
165
-
166
- model_config = {"from_attributes": True}
167
- ```
168
-
169
- ---
170
-
171
- ## ViewSet → APIRouter Migration
172
-
173
- ### Django REST Framework ViewSet
174
-
175
- ```python
176
- # Django DRF ViewSet
177
- from rest_framework import viewsets, status
178
- from rest_framework.decorators import action
179
- from rest_framework.response import Response
180
- from rest_framework.permissions import IsAuthenticated
181
- from django.shortcuts import get_object_or_404
182
-
183
- class PostViewSet(viewsets.ModelViewSet):
184
- queryset = Post.objects.all()
185
- serializer_class = PostSerializer
186
- permission_classes = [IsAuthenticated]
187
-
188
- def get_queryset(self):
189
- queryset = super().get_queryset()
190
- if self.request.user.is_authenticated:
191
- return queryset.filter(author=self.request.user)
192
- return queryset.none()
193
-
194
- def perform_create(self, serializer):
195
- serializer.save(author=self.request.user)
196
-
197
- @action(detail=True, methods=['post'])
198
- def publish(self, request, pk=None):
199
- post = self.get_object()
200
- post.published = True
201
- post.save()
202
- return Response({'status': 'published'})
203
-
204
- @action(detail=False, methods=['get'])
205
- def recent(self, request):
206
- recent_posts = self.get_queryset().order_by('-created_at')[:10]
207
- serializer = self.get_serializer(recent_posts, many=True)
208
- return Response(serializer.data)
209
- ```
210
-
211
- ### FastAPI APIRouter with Dependencies
212
-
213
- ```python
214
- # FastAPI APIRouter
215
- from fastapi import APIRouter, Depends, HTTPException, status, Query
216
- from sqlalchemy.ext.asyncio import AsyncSession
217
- from sqlalchemy import select
218
- from typing import Annotated
219
-
220
- from .database import get_db
221
- from .auth import get_current_user
222
- from .models import Post as PostModel, User as UserModel
223
- from .schemas import PostRead, PostCreate, PostUpdate, UserRead
224
-
225
- router = APIRouter(prefix="/posts", tags=["posts"])
226
-
227
- # Dependency for database session
228
- DbSession = Annotated[AsyncSession, Depends(get_db)]
229
- CurrentUser = Annotated[UserModel, Depends(get_current_user)]
230
-
231
- # List posts (GET /posts)
232
- @router.get("/", response_model=list[PostRead])
233
- async def list_posts(
234
- db: DbSession,
235
- current_user: CurrentUser,
236
- skip: int = Query(0, ge=0),
237
- limit: int = Query(100, le=100),
238
- ):
239
- """Analogous to ViewSet.list()"""
240
- result = await db.execute(
241
- select(PostModel)
242
- .where(PostModel.author_id == current_user.id)
243
- .offset(skip)
244
- .limit(limit)
245
- )
246
- posts = result.scalars().all()
247
- return posts
248
-
249
- # Create post (POST /posts)
250
- @router.post("/", response_model=PostRead, status_code=status.HTTP_201_CREATED)
251
- async def create_post(
252
- post_data: PostCreate,
253
- db: DbSession,
254
- current_user: CurrentUser,
255
- ):
256
- """Analogous to ViewSet.create()"""
257
- post = PostModel(**post_data.model_dump(), author_id=current_user.id)
258
- db.add(post)
259
- await db.commit()
260
- await db.refresh(post)
261
- return post
262
-
263
- # Retrieve single post (GET /posts/{post_id})
264
- @router.get("/{post_id}", response_model=PostRead)
265
- async def get_post(
266
- post_id: int,
267
- db: DbSession,
268
- current_user: CurrentUser,
269
- ):
270
- """Analogous to ViewSet.retrieve()"""
271
- result = await db.execute(
272
- select(PostModel).where(
273
- PostModel.id == post_id,
274
- PostModel.author_id == current_user.id
275
- )
276
- )
277
- post = result.scalar_one_or_none()
278
- if not post:
279
- raise HTTPException(status_code=404, detail="Post not found")
280
- return post
281
-
282
- # Update post (PUT /posts/{post_id})
283
- @router.put("/{post_id}", response_model=PostRead)
284
- async def update_post(
285
- post_id: int,
286
- post_data: PostUpdate,
287
- db: DbSession,
288
- current_user: CurrentUser,
289
- ):
290
- """Analogous to ViewSet.update()"""
291
- result = await db.execute(
292
- select(PostModel).where(
293
- PostModel.id == post_id,
294
- PostModel.author_id == current_user.id
295
- )
296
- )
297
- post = result.scalar_one_or_none()
298
- if not post:
299
- raise HTTPException(status_code=404, detail="Post not found")
300
-
301
- # Update only provided fields
302
- for field, value in post_data.model_dump(exclude_unset=True).items():
303
- setattr(post, field, value)
304
-
305
- await db.commit()
306
- await db.refresh(post)
307
- return post
308
-
309
- # Delete post (DELETE /posts/{post_id})
310
- @router.delete("/{post_id}", status_code=status.HTTP_204_NO_CONTENT)
311
- async def delete_post(
312
- post_id: int,
313
- db: DbSession,
314
- current_user: CurrentUser,
315
- ):
316
- """Analogous to ViewSet.destroy()"""
317
- result = await db.execute(
318
- select(PostModel).where(
319
- PostModel.id == post_id,
320
- PostModel.author_id == current_user.id
321
- )
322
- )
323
- post = result.scalar_one_or_none()
324
- if not post:
325
- raise HTTPException(status_code=404, detail="Post not found")
326
-
327
- await db.delete(post)
328
- await db.commit()
329
-
330
- # Custom action: Publish (POST /posts/{post_id}/publish)
331
- @router.post("/{post_id}/publish", response_model=dict)
332
- async def publish_post(
333
- post_id: int,
334
- db: DbSession,
335
- current_user: CurrentUser,
336
- ):
337
- """Analogous to @action(detail=True)"""
338
- result = await db.execute(
339
- select(PostModel).where(
340
- PostModel.id == post_id,
341
- PostModel.author_id == current_user.id
342
- )
343
- )
344
- post = result.scalar_one_or_none()
345
- if not post:
346
- raise HTTPException(status_code=404, detail="Post not found")
347
-
348
- post.published = True
349
- await db.commit()
350
- return {"status": "published"}
351
-
352
- # Custom collection action: Recent posts (GET /posts/recent)
353
- @router.get("/actions/recent", response_model=list[PostRead])
354
- async def recent_posts(
355
- db: DbSession,
356
- current_user: CurrentUser,
357
- limit: int = Query(10, le=50),
358
- ):
359
- """Analogous to @action(detail=False)"""
360
- result = await db.execute(
361
- select(PostModel)
362
- .where(PostModel.author_id == current_user.id)
363
- .order_by(PostModel.created_at.desc())
364
- .limit(limit)
365
- )
366
- posts = result.scalars().all()
367
- return posts
368
- ```
369
-
370
- ---
371
-
372
- ## Django ORM → Async SQLAlchemy
373
-
374
- ### Django ORM Models
375
-
376
- ```python
377
- # Django models
378
- from django.db import models
379
-
380
- class User(models.Model):
381
- username = models.CharField(max_length=50, unique=True)
382
- email = models.EmailField(unique=True)
383
- created_at = models.DateTimeField(auto_now_add=True)
384
-
385
- class Meta:
386
- db_table = 'users'
387
- indexes = [
388
- models.Index(fields=['username']),
389
- ]
390
-
391
- class Post(models.Model):
392
- title = models.CharField(max_length=200)
393
- content = models.TextField()
394
- author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts')
395
- created_at = models.DateTimeField(auto_now_add=True)
396
- published = models.BooleanField(default=False)
397
-
398
- class Meta:
399
- db_table = 'posts'
400
- ordering = ['-created_at']
401
- ```
402
-
403
- ### SQLAlchemy 2.0 Async Models
404
-
405
- ```python
406
- # SQLAlchemy 2.0 models
407
- from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
408
- from sqlalchemy import String, Text, Boolean, ForeignKey, Index
409
- from datetime import datetime
410
- from typing import List
411
-
412
- class Base(DeclarativeBase):
413
- pass
414
-
415
- class User(Base):
416
- __tablename__ = 'users'
417
-
418
- # Primary key
419
- id: Mapped[int] = mapped_column(primary_key=True)
420
-
421
- # Columns with type hints
422
- username: Mapped[str] = mapped_column(String(50), unique=True, index=True)
423
- email: Mapped[str] = mapped_column(String(255), unique=True)
424
- created_at: Mapped[datetime] = mapped_column(default=datetime.utcnow)
425
-
426
- # Relationships (analogous to related_name)
427
- posts: Mapped[List["Post"]] = relationship(back_populates="author")
428
-
429
- __table_args__ = (
430
- Index('ix_users_username', 'username'),
431
- )
432
-
433
- class Post(Base):
434
- __tablename__ = 'posts'
435
-
436
- id: Mapped[int] = mapped_column(primary_key=True)
437
- title: Mapped[str] = mapped_column(String(200))
438
- content: Mapped[str] = mapped_column(Text)
439
- author_id: Mapped[int] = mapped_column(ForeignKey('users.id', ondelete='CASCADE'))
440
- created_at: Mapped[datetime] = mapped_column(default=datetime.utcnow)
441
- published: Mapped[bool] = mapped_column(Boolean, default=False)
442
-
443
- # Relationship
444
- author: Mapped["User"] = relationship(back_populates="posts")
445
-
446
- __table_args__ = (
447
- Index('ix_posts_created_at', 'created_at'),
448
- )
449
- ```
450
-
451
- ### Query Patterns: Django ORM vs SQLAlchemy
452
-
453
- ```python
454
- # Django ORM queries
455
- from django.db.models import Count, Q
456
-
457
- # Simple filter
458
- posts = Post.objects.filter(published=True)
459
-
460
- # Select related (JOIN)
461
- posts = Post.objects.select_related('author').filter(published=True)
462
-
463
- # Prefetch related (separate query)
464
- users = User.objects.prefetch_related('posts').all()
465
-
466
- # Complex filtering
467
- posts = Post.objects.filter(
468
- Q(published=True) | Q(author__username='admin')
469
- ).order_by('-created_at')[:10]
470
-
471
- # Aggregation
472
- user_stats = User.objects.annotate(
473
- post_count=Count('posts')
474
- ).filter(post_count__gte=5)
475
- ```
476
-
477
- ```python
478
- # SQLAlchemy 2.0 async queries
479
- from sqlalchemy import select, func, or_
480
- from sqlalchemy.orm import selectinload, joinedload
481
-
482
- # Simple filter
483
- async def get_published_posts(db: AsyncSession):
484
- result = await db.execute(
485
- select(Post).where(Post.published == True)
486
- )
487
- return result.scalars().all()
488
-
489
- # Eager loading with JOIN (selectinload = separate query)
490
- async def get_posts_with_authors(db: AsyncSession):
491
- result = await db.execute(
492
- select(Post)
493
- .options(selectinload(Post.author))
494
- .where(Post.published == True)
495
- )
496
- return result.scalars().all()
497
-
498
- # Prefetch related (joinedload = single query with JOIN)
499
- async def get_users_with_posts(db: AsyncSession):
500
- result = await db.execute(
501
- select(User).options(joinedload(User.posts))
502
- )
503
- return result.unique().scalars().all()
504
-
505
- # Complex filtering
506
- async def get_complex_posts(db: AsyncSession):
507
- result = await db.execute(
508
- select(Post)
509
- .join(Post.author)
510
- .where(
511
- or_(
512
- Post.published == True,
513
- User.username == 'admin'
514
- )
515
- )
516
- .order_by(Post.created_at.desc())
517
- .limit(10)
518
- )
519
- return result.scalars().all()
520
-
521
- # Aggregation
522
- async def get_user_stats(db: AsyncSession):
523
- result = await db.execute(
524
- select(User, func.count(Post.id).label('post_count'))
525
- .join(Post)
526
- .group_by(User.id)
527
- .having(func.count(Post.id) >= 5)
528
- )
529
- return result.all()
530
- ```
531
-
532
- ---
533
-
534
- ## Authentication: SimpleJWT → FastAPI JWT
535
-
536
- ### Django SimpleJWT
537
-
538
- ```python
539
- # Django settings.py
540
- REST_FRAMEWORK = {
541
- 'DEFAULT_AUTHENTICATION_CLASSES': [
542
- 'rest_framework_simplejwt.authentication.JWTAuthentication',
543
- ],
544
- }
545
-
546
- # Views
547
- from rest_framework_simplejwt.views import TokenObtainPairView
548
-
549
- # Usage in ViewSet
550
- from rest_framework.permissions import IsAuthenticated
551
-
552
- class ProtectedViewSet(viewsets.ModelViewSet):
553
- permission_classes = [IsAuthenticated]
554
-
555
- def get_queryset(self):
556
- return Post.objects.filter(author=self.request.user)
557
- ```
558
-
559
- ### FastAPI JWT Authentication
560
-
561
- ```python
562
- # auth.py - FastAPI JWT implementation
563
- from fastapi import Depends, HTTPException, status
564
- from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
565
- from jose import JWTError, jwt
566
- from passlib.context import CryptContext
567
- from datetime import datetime, timedelta
568
- from pydantic import BaseModel
569
- from typing import Annotated
570
-
571
- # Configuration
572
- SECRET_KEY = "your-secret-key" # Use environment variable
573
- ALGORITHM = "HS256"
574
- ACCESS_TOKEN_EXPIRE_MINUTES = 30
575
-
576
- # Password hashing
577
- pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
578
-
579
- # OAuth2 scheme
580
- oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/token")
581
-
582
- # Schemas
583
- class Token(BaseModel):
584
- access_token: str
585
- token_type: str
586
-
587
- class TokenData(BaseModel):
588
- username: str | None = None
589
-
590
- # Helper functions
591
- def verify_password(plain_password: str, hashed_password: str) -> bool:
592
- return pwd_context.verify(plain_password, hashed_password)
593
-
594
- def get_password_hash(password: str) -> str:
595
- return pwd_context.hash(password)
596
-
597
- def create_access_token(data: dict, expires_delta: timedelta | None = None):
598
- to_encode = data.copy()
599
- if expires_delta:
600
- expire = datetime.utcnow() + expires_delta
601
- else:
602
- expire = datetime.utcnow() + timedelta(minutes=15)
603
- to_encode.update({"exp": expire})
604
- encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
605
- return encoded_jwt
606
-
607
- # Dependency: Get current user from token
608
- async def get_current_user(
609
- token: Annotated[str, Depends(oauth2_scheme)],
610
- db: Annotated[AsyncSession, Depends(get_db)]
611
- ) -> UserModel:
612
- credentials_exception = HTTPException(
613
- status_code=status.HTTP_401_UNAUTHORIZED,
614
- detail="Could not validate credentials",
615
- headers={"WWW-Authenticate": "Bearer"},
616
- )
617
- try:
618
- payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
619
- username: str = payload.get("sub")
620
- if username is None:
621
- raise credentials_exception
622
- token_data = TokenData(username=username)
623
- except JWTError:
624
- raise credentials_exception
625
-
626
- result = await db.execute(
627
- select(UserModel).where(UserModel.username == token_data.username)
628
- )
629
- user = result.scalar_one_or_none()
630
- if user is None:
631
- raise credentials_exception
632
- return user
633
-
634
- # Login endpoint
635
- auth_router = APIRouter(prefix="/auth", tags=["auth"])
636
-
637
- @auth_router.post("/token", response_model=Token)
638
- async def login(
639
- form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
640
- db: Annotated[AsyncSession, Depends(get_db)]
641
- ):
642
- # Authenticate user
643
- result = await db.execute(
644
- select(UserModel).where(UserModel.username == form_data.username)
645
- )
646
- user = result.scalar_one_or_none()
647
-
648
- if not user or not verify_password(form_data.password, user.hashed_password):
649
- raise HTTPException(
650
- status_code=status.HTTP_401_UNAUTHORIZED,
651
- detail="Incorrect username or password",
652
- headers={"WWW-Authenticate": "Bearer"},
653
- )
654
-
655
- # Create access token
656
- access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
657
- access_token = create_access_token(
658
- data={"sub": user.username}, expires_delta=access_token_expires
659
- )
660
- return {"access_token": access_token, "token_type": "bearer"}
661
-
662
- # Protected endpoint usage
663
- @router.get("/protected")
664
- async def protected_route(current_user: Annotated[UserModel, Depends(get_current_user)]):
665
- return {"message": f"Hello {current_user.username}"}
666
- ```
667
-
668
- ---
669
-
670
- ## Testing Migration
671
-
672
- ### Django/DRF Tests
673
-
674
- ```python
675
- # Django pytest
676
- import pytest
677
- from rest_framework.test import APIClient
678
- from django.contrib.auth.models import User
679
-
680
- @pytest.fixture
681
- def api_client():
682
- return APIClient()
683
-
684
- @pytest.fixture
685
- def user(db):
686
- return User.objects.create_user(username='test', password='test123')
687
-
688
- @pytest.mark.django_db
689
- def test_create_post(api_client, user):
690
- api_client.force_authenticate(user=user)
691
- response = api_client.post('/api/posts/', {
692
- 'title': 'Test Post',
693
- 'content': 'Test content'
694
- })
695
- assert response.status_code == 201
696
- assert response.data['title'] == 'Test Post'
697
- ```
698
-
699
- ### FastAPI Tests
700
-
701
- ```python
702
- # FastAPI pytest with httpx
703
- import pytest
704
- from httpx import AsyncClient, ASGITransport
705
- from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
706
- from app.main import app
707
- from app.database import get_db, Base
708
- from app.models import User
709
-
710
- # Test database setup
711
- TEST_DATABASE_URL = "sqlite+aiosqlite:///:memory:"
712
-
713
- @pytest.fixture
714
- async def db_engine():
715
- engine = create_async_engine(TEST_DATABASE_URL, echo=False)
716
- async with engine.begin() as conn:
717
- await conn.run_sync(Base.metadata.create_all)
718
- yield engine
719
- await engine.dispose()
720
-
721
- @pytest.fixture
722
- async def db_session(db_engine):
723
- async_session = async_sessionmaker(
724
- db_engine, class_=AsyncSession, expire_on_commit=False
725
- )
726
- async with async_session() as session:
727
- yield session
728
-
729
- @pytest.fixture
730
- async def client(db_session):
731
- async def override_get_db():
732
- yield db_session
733
-
734
- app.dependency_overrides[get_db] = override_get_db
735
-
736
- async with AsyncClient(
737
- transport=ASGITransport(app=app),
738
- base_url="http://test"
739
- ) as ac:
740
- yield ac
741
-
742
- app.dependency_overrides.clear()
743
-
744
- @pytest.fixture
745
- async def auth_headers(client, db_session):
746
- # Create test user
747
- user = User(username="test", email="test@example.com")
748
- user.hashed_password = get_password_hash("test123")
749
- db_session.add(user)
750
- await db_session.commit()
751
-
752
- # Get token
753
- response = await client.post("/auth/token", data={
754
- "username": "test",
755
- "password": "test123"
756
- })
757
- token = response.json()["access_token"]
758
- return {"Authorization": f"Bearer {token}"}
759
-
760
- @pytest.mark.asyncio
761
- async def test_create_post(client, auth_headers):
762
- response = await client.post(
763
- "/posts/",
764
- json={"title": "Test Post", "content": "Test content"},
765
- headers=auth_headers
766
- )
767
- assert response.status_code == 201
768
- data = response.json()
769
- assert data["title"] == "Test Post"
770
-
771
- @pytest.mark.asyncio
772
- async def test_list_posts(client, auth_headers, db_session):
773
- # Create test data
774
- user = await db_session.execute(select(User).where(User.username == "test"))
775
- user = user.scalar_one()
776
-
777
- post = Post(title="Test", content="Content", author_id=user.id)
778
- db_session.add(post)
779
- await db_session.commit()
780
-
781
- # Test endpoint
782
- response = await client.get("/posts/", headers=auth_headers)
783
- assert response.status_code == 200
784
- assert len(response.json()) == 1
785
- ```
786
-
787
- ---
788
-
789
- ## Incremental Migration Strategy
790
-
791
- ### Phase 1: Parallel API (Strangler Pattern)
792
-
793
- Run Django and FastAPI side-by-side, migrating endpoints incrementally.
794
-
795
- ```python
796
- # Nginx routing config
797
- location /api/v2/ {
798
- proxy_pass http://fastapi:8000;
799
- }
800
-
801
- location /api/ {
802
- proxy_pass http://django:8001;
803
- }
804
- ```
805
-
806
- **Approach:**
807
- 1. Stand up FastAPI with shared database (read-only initially)
808
- 2. Migrate GET endpoints first (lowest risk)
809
- 3. Add write endpoints with dual-write to both systems
810
- 4. Validate data consistency
811
- 5. Switch traffic gradually (feature flags)
812
-
813
- ### Phase 2: Shared Database Migration
814
-
815
- ```python
816
- # FastAPI with existing Django database
817
- from sqlalchemy import MetaData
818
-
819
- # Reflect existing Django tables
820
- metadata = MetaData()
821
- metadata.reflect(bind=engine, only=['users', 'posts'])
822
-
823
- # Or define models matching Django schema
824
- class User(Base):
825
- __tablename__ = 'auth_user' # Django's user table
826
- # Map to Django's column names
827
- ```
828
-
829
- ### Phase 3: Database Schema Modernization
830
-
831
- After traffic migration, modernize schema:
832
- - Remove Django-specific fields (`content_type`, `permissions`)
833
- - Simplify table names (remove app prefixes)
834
- - Add database-level constraints
835
- - Optimize indexes for async queries
836
-
837
- ### Phase 4: Complete Cutover
838
-
839
- ```python
840
- # Decommission Django
841
- # 1. Archive Django admin usage
842
- # 2. Export management commands to FastAPI CLI
843
- # 3. Migrate background tasks to Celery/Dramatiq
844
- # 4. Remove Django dependency
845
- ```
846
-
847
- ---
848
-
849
- ## Common Pitfalls
850
-
851
- ### 1. Async/Await Mistakes
852
-
853
- **WRONG:**
854
- ```python
855
- # Blocking call in async function
856
- @router.get("/users")
857
- async def get_users(db: AsyncSession):
858
- users = db.execute(select(User)).scalars().all() # Missing await
859
- return users
860
- ```
861
-
862
- **CORRECT:**
863
- ```python
864
- @router.get("/users")
865
- async def get_users(db: AsyncSession):
866
- result = await db.execute(select(User)) # Await async operation
867
- users = result.scalars().all()
868
- return users
869
- ```
870
-
871
- ### 2. Missing `from_attributes` (orm_mode)
872
-
873
- **WRONG:**
874
- ```python
875
- class UserRead(BaseModel):
876
- id: int
877
- username: str
878
- # Missing config - won't work with SQLAlchemy models
879
- ```
880
-
881
- **CORRECT:**
882
- ```python
883
- class UserRead(BaseModel):
884
- id: int
885
- username: str
886
-
887
- model_config = {"from_attributes": True} # Pydantic V2
888
- ```
889
-
890
- ### 3. Session Management
891
-
892
- **WRONG:**
893
- ```python
894
- # Reusing session across requests
895
- db_session = async_sessionmaker(engine)()
896
-
897
- @router.get("/users")
898
- async def get_users():
899
- return await db_session.execute(select(User)) # Session leak
900
- ```
901
-
902
- **CORRECT:**
903
- ```python
904
- # Dependency injection per request
905
- async def get_db():
906
- async with async_sessionmaker(engine)() as session:
907
- yield session
908
- await session.commit()
909
-
910
- @router.get("/users")
911
- async def get_users(db: Annotated[AsyncSession, Depends(get_db)]):
912
- result = await db.execute(select(User))
913
- return result.scalars().all()
914
- ```
915
-
916
- ### 4. Relationship Loading
917
-
918
- **WRONG:**
919
- ```python
920
- # Lazy loading in async (causes errors)
921
- user = await db.get(User, user_id)
922
- posts = user.posts # Error: lazy loading not supported in async
923
- ```
924
-
925
- **CORRECT:**
926
- ```python
927
- # Eager loading with selectinload
928
- result = await db.execute(
929
- select(User).options(selectinload(User.posts)).where(User.id == user_id)
930
- )
931
- user = result.scalar_one()
932
- posts = user.posts # Already loaded
933
- ```
934
-
935
- ### 5. Transaction Handling
936
-
937
- **WRONG:**
938
- ```python
939
- # Auto-commit not configured
940
- @router.post("/users")
941
- async def create_user(user: UserCreate, db: AsyncSession):
942
- db_user = User(**user.dict())
943
- db.add(db_user)
944
- # Missing commit - changes lost
945
- return db_user
946
- ```
947
-
948
- **CORRECT:**
949
- ```python
950
- @router.post("/users")
951
- async def create_user(user: UserCreate, db: AsyncSession):
952
- db_user = User(**user.model_dump())
953
- db.add(db_user)
954
- await db.commit() # Explicit commit
955
- await db.refresh(db_user) # Refresh to get DB-generated fields
956
- return db_user
957
- ```
958
-
959
- ---
960
-
961
- ## Cross-Reference
962
-
963
- For comprehensive migration strategies and modernization patterns:
964
- - **Legacy Modernizer**: `/skills/legacy-modernizer/references/migration-strategies.md`
965
- - Strangler pattern implementation
966
- - Feature flag strategies
967
- - Rollback procedures
968
- - Data migration pipelines
969
-
970
- ---
971
-
972
- ## Migration Checklist
973
-
974
- **Pre-Migration:**
975
- - [ ] Async readiness assessment (I/O bound workload?)
976
- - [ ] Team async Python experience validated
977
- - [ ] Database compatibility verified (async drivers available)
978
- - [ ] Admin interface replacement identified
979
- - [ ] Migration timeline approved (6-12 months realistic)
980
-
981
- **During Migration:**
982
- - [ ] Parallel deployment configured
983
- - [ ] Monitoring and alerting set up
984
- - [ ] Load testing completed
985
- - [ ] Data consistency validation automated
986
- - [ ] Rollback procedure tested
987
-
988
- **Post-Migration:**
989
- - [ ] Django dependencies removed
990
- - [ ] Documentation updated
991
- - [ ] Team training completed
992
- - [ ] Performance gains measured
993
- - [ ] Cost savings validated
994
-
995
- ---
996
-
997
- **Key Takeaway:** Migrate incrementally. Start with read-heavy endpoints, validate thoroughly, then gradually move write operations. Always maintain rollback capability.