@ruaruababa/vibe-kit 1.0.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 (462) hide show
  1. package/CATALOG.md +317 -0
  2. package/README.md +121 -0
  3. package/aliases.json +65 -0
  4. package/bin/vibe.js +2 -0
  5. package/bundles.json +265 -0
  6. package/catalog.json +1560 -0
  7. package/dist/antigravity-skills/bin/cli.js +438 -0
  8. package/dist/antigravity-skills/lib/skill-utils.js +158 -0
  9. package/dist/antigravity-skills/scripts/build-catalog.js +305 -0
  10. package/dist/antigravity-skills/scripts/normalize-frontmatter.js +144 -0
  11. package/dist/antigravity-skills/scripts/validate-skills.js +230 -0
  12. package/dist/bin/vibe.js +2 -0
  13. package/dist/dist/src/cli/index.js +26 -0
  14. package/dist/lib/skill-utils.js +158 -0
  15. package/dist/scripts/build-catalog.js +50 -0
  16. package/dist/scripts/normalize-frontmatter.js +144 -0
  17. package/dist/scripts/validate-skills.js +56 -0
  18. package/dist/src/cli/index.js +146 -0
  19. package/dist/src/types/index.js +13 -0
  20. package/dist/src/utils/fs.js +1 -0
  21. package/package.json +43 -0
  22. package/skills/accessibility-compliance-accessibility-audit/SKILL.md +42 -0
  23. package/skills/accessibility-compliance-accessibility-audit/resources/implementation-playbook.md +502 -0
  24. package/skills/agent-orchestration-improve-agent/SKILL.md +349 -0
  25. package/skills/agent-orchestration-multi-agent-optimize/SKILL.md +239 -0
  26. package/skills/agent-orchestrator/SKILL.md +24 -0
  27. package/skills/ai-engineer/SKILL.md +171 -0
  28. package/skills/airflow-dag-patterns/SKILL.md +41 -0
  29. package/skills/airflow-dag-patterns/resources/implementation-playbook.md +509 -0
  30. package/skills/angular-migration/SKILL.md +428 -0
  31. package/skills/anti-reversing-techniques/SKILL.md +42 -0
  32. package/skills/anti-reversing-techniques/resources/implementation-playbook.md +539 -0
  33. package/skills/api-design-principles/SKILL.md +37 -0
  34. package/skills/api-design-principles/assets/api-design-checklist.md +155 -0
  35. package/skills/api-design-principles/assets/rest-api-template.py +182 -0
  36. package/skills/api-design-principles/references/graphql-schema-design.md +583 -0
  37. package/skills/api-design-principles/references/rest-best-practices.md +408 -0
  38. package/skills/api-design-principles/resources/implementation-playbook.md +513 -0
  39. package/skills/api-documenter/SKILL.md +184 -0
  40. package/skills/api-testing-observability-api-mock/SKILL.md +46 -0
  41. package/skills/api-testing-observability-api-mock/resources/implementation-playbook.md +1327 -0
  42. package/skills/application-performance-performance-optimization/SKILL.md +154 -0
  43. package/skills/architect-review/SKILL.md +174 -0
  44. package/skills/architecture-decision-records/SKILL.md +441 -0
  45. package/skills/architecture-patterns/SKILL.md +37 -0
  46. package/skills/architecture-patterns/resources/implementation-playbook.md +479 -0
  47. package/skills/arm-cortex-expert/SKILL.md +306 -0
  48. package/skills/async-python-patterns/SKILL.md +39 -0
  49. package/skills/async-python-patterns/resources/implementation-playbook.md +678 -0
  50. package/skills/attack-tree-construction/SKILL.md +38 -0
  51. package/skills/attack-tree-construction/resources/implementation-playbook.md +671 -0
  52. package/skills/auth-implementation-patterns/SKILL.md +39 -0
  53. package/skills/auth-implementation-patterns/resources/implementation-playbook.md +618 -0
  54. package/skills/backend-architect/SKILL.md +333 -0
  55. package/skills/backend-development-feature-development/SKILL.md +180 -0
  56. package/skills/backend-security-coder/SKILL.md +156 -0
  57. package/skills/backtesting-frameworks/SKILL.md +39 -0
  58. package/skills/backtesting-frameworks/resources/implementation-playbook.md +647 -0
  59. package/skills/bash-defensive-patterns/SKILL.md +43 -0
  60. package/skills/bash-defensive-patterns/resources/implementation-playbook.md +517 -0
  61. package/skills/bash-pro/SKILL.md +310 -0
  62. package/skills/bats-testing-patterns/SKILL.md +34 -0
  63. package/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -0
  64. package/skills/bazel-build-optimization/SKILL.md +397 -0
  65. package/skills/billing-automation/SKILL.md +42 -0
  66. package/skills/billing-automation/resources/implementation-playbook.md +544 -0
  67. package/skills/binary-analysis-patterns/SKILL.md +450 -0
  68. package/skills/blockchain-developer/SKILL.md +208 -0
  69. package/skills/business-analyst/SKILL.md +182 -0
  70. package/skills/c-pro/SKILL.md +56 -0
  71. package/skills/c4-architecture-c4-architecture/SKILL.md +389 -0
  72. package/skills/c4-code/SKILL.md +244 -0
  73. package/skills/c4-component/SKILL.md +153 -0
  74. package/skills/c4-container/SKILL.md +171 -0
  75. package/skills/c4-context/SKILL.md +150 -0
  76. package/skills/changelog-automation/SKILL.md +38 -0
  77. package/skills/changelog-automation/resources/implementation-playbook.md +538 -0
  78. package/skills/cicd-automation-workflow-automate/SKILL.md +51 -0
  79. package/skills/cicd-automation-workflow-automate/resources/implementation-playbook.md +1333 -0
  80. package/skills/clean-markdown/SKILL.md +23 -0
  81. package/skills/cloud-architect/SKILL.md +135 -0
  82. package/skills/code-documentation-code-explain/SKILL.md +46 -0
  83. package/skills/code-documentation-code-explain/resources/implementation-playbook.md +802 -0
  84. package/skills/code-documentation-doc-generate/SKILL.md +48 -0
  85. package/skills/code-documentation-doc-generate/resources/implementation-playbook.md +640 -0
  86. package/skills/code-refactoring-context-restore/SKILL.md +179 -0
  87. package/skills/code-refactoring-refactor-clean/SKILL.md +51 -0
  88. package/skills/code-refactoring-refactor-clean/resources/implementation-playbook.md +879 -0
  89. package/skills/code-refactoring-tech-debt/SKILL.md +386 -0
  90. package/skills/code-review-ai-ai-review/SKILL.md +450 -0
  91. package/skills/code-review-excellence/SKILL.md +40 -0
  92. package/skills/code-review-excellence/resources/implementation-playbook.md +515 -0
  93. package/skills/code-reviewer/SKILL.md +178 -0
  94. package/skills/codebase-cleanup-deps-audit/SKILL.md +51 -0
  95. package/skills/codebase-cleanup-deps-audit/resources/implementation-playbook.md +766 -0
  96. package/skills/codebase-cleanup-refactor-clean/SKILL.md +51 -0
  97. package/skills/codebase-cleanup-refactor-clean/resources/implementation-playbook.md +879 -0
  98. package/skills/codebase-cleanup-tech-debt/SKILL.md +386 -0
  99. package/skills/competitive-landscape/SKILL.md +34 -0
  100. package/skills/competitive-landscape/resources/implementation-playbook.md +494 -0
  101. package/skills/comprehensive-review-full-review/SKILL.md +146 -0
  102. package/skills/comprehensive-review-pr-enhance/SKILL.md +46 -0
  103. package/skills/comprehensive-review-pr-enhance/resources/implementation-playbook.md +691 -0
  104. package/skills/conductor-implement/SKILL.md +388 -0
  105. package/skills/conductor-manage/SKILL.md +39 -0
  106. package/skills/conductor-manage/resources/implementation-playbook.md +1120 -0
  107. package/skills/conductor-new-track/SKILL.md +433 -0
  108. package/skills/conductor-revert/SKILL.md +372 -0
  109. package/skills/conductor-setup/SKILL.md +426 -0
  110. package/skills/conductor-status/SKILL.md +338 -0
  111. package/skills/conductor-validator/SKILL.md +62 -0
  112. package/skills/content-marketer/SKILL.md +170 -0
  113. package/skills/context-driven-development/SKILL.md +400 -0
  114. package/skills/context-management-context-restore/SKILL.md +179 -0
  115. package/skills/context-management-context-save/SKILL.md +177 -0
  116. package/skills/context-manager/SKILL.md +185 -0
  117. package/skills/cost-optimization/SKILL.md +286 -0
  118. package/skills/cpp-pro/SKILL.md +59 -0
  119. package/skills/cqrs-implementation/SKILL.md +35 -0
  120. package/skills/cqrs-implementation/resources/implementation-playbook.md +540 -0
  121. package/skills/csharp-pro/SKILL.md +59 -0
  122. package/skills/customer-support/SKILL.md +170 -0
  123. package/skills/data-engineer/SKILL.md +224 -0
  124. package/skills/data-engineering-data-driven-feature/SKILL.md +182 -0
  125. package/skills/data-engineering-data-pipeline/SKILL.md +201 -0
  126. package/skills/data-quality-frameworks/SKILL.md +40 -0
  127. package/skills/data-quality-frameworks/resources/implementation-playbook.md +573 -0
  128. package/skills/data-scientist/SKILL.md +199 -0
  129. package/skills/data-storytelling/SKILL.md +465 -0
  130. package/skills/database-admin/SKILL.md +165 -0
  131. package/skills/database-architect/SKILL.md +268 -0
  132. package/skills/database-cloud-optimization-cost-optimize/SKILL.md +44 -0
  133. package/skills/database-cloud-optimization-cost-optimize/resources/implementation-playbook.md +1441 -0
  134. package/skills/database-migration/SKILL.md +436 -0
  135. package/skills/database-migrations-migration-observability/SKILL.md +420 -0
  136. package/skills/database-migrations-sql-migrations/SKILL.md +53 -0
  137. package/skills/database-migrations-sql-migrations/resources/implementation-playbook.md +499 -0
  138. package/skills/database-optimizer/SKILL.md +167 -0
  139. package/skills/dbt-transformation-patterns/SKILL.md +34 -0
  140. package/skills/dbt-transformation-patterns/resources/implementation-playbook.md +547 -0
  141. package/skills/debugger/SKILL.md +49 -0
  142. package/skills/debugging-strategies/SKILL.md +34 -0
  143. package/skills/debugging-strategies/resources/implementation-playbook.md +511 -0
  144. package/skills/debugging-toolkit-smart-debug/SKILL.md +197 -0
  145. package/skills/defi-protocol-templates/SKILL.md +466 -0
  146. package/skills/dependency-management-deps-audit/SKILL.md +44 -0
  147. package/skills/dependency-management-deps-audit/resources/implementation-playbook.md +766 -0
  148. package/skills/dependency-upgrade/SKILL.md +421 -0
  149. package/skills/deployment-engineer/SKILL.md +170 -0
  150. package/skills/deployment-pipeline-design/SKILL.md +371 -0
  151. package/skills/deployment-validation-config-validate/SKILL.md +496 -0
  152. package/skills/devops-troubleshooter/SKILL.md +161 -0
  153. package/skills/distributed-debugging-debug-trace/SKILL.md +44 -0
  154. package/skills/distributed-debugging-debug-trace/resources/implementation-playbook.md +1307 -0
  155. package/skills/distributed-tracing/SKILL.md +450 -0
  156. package/skills/django-pro/SKILL.md +180 -0
  157. package/skills/docs-architect/SKILL.md +98 -0
  158. package/skills/documentation-generation-doc-generate/SKILL.md +48 -0
  159. package/skills/documentation-generation-doc-generate/resources/implementation-playbook.md +640 -0
  160. package/skills/dotnet-architect/SKILL.md +197 -0
  161. package/skills/dotnet-backend-patterns/SKILL.md +37 -0
  162. package/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
  163. package/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
  164. package/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
  165. package/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
  166. package/skills/dotnet-backend-patterns/resources/implementation-playbook.md +799 -0
  167. package/skills/dummy-skill/SKILL.md +5 -0
  168. package/skills/dx-optimizer/SKILL.md +83 -0
  169. package/skills/e2e-testing-patterns/SKILL.md +41 -0
  170. package/skills/e2e-testing-patterns/resources/implementation-playbook.md +531 -0
  171. package/skills/elixir-pro/SKILL.md +59 -0
  172. package/skills/embedding-strategies/SKILL.md +491 -0
  173. package/skills/employment-contract-templates/SKILL.md +39 -0
  174. package/skills/employment-contract-templates/resources/implementation-playbook.md +493 -0
  175. package/skills/error-debugging-error-analysis/SKILL.md +47 -0
  176. package/skills/error-debugging-error-analysis/resources/implementation-playbook.md +1143 -0
  177. package/skills/error-debugging-error-trace/SKILL.md +43 -0
  178. package/skills/error-debugging-error-trace/resources/implementation-playbook.md +1361 -0
  179. package/skills/error-debugging-multi-agent-review/SKILL.md +216 -0
  180. package/skills/error-detective/SKILL.md +53 -0
  181. package/skills/error-diagnostics-error-analysis/SKILL.md +47 -0
  182. package/skills/error-diagnostics-error-analysis/resources/implementation-playbook.md +1143 -0
  183. package/skills/error-diagnostics-error-trace/SKILL.md +48 -0
  184. package/skills/error-diagnostics-error-trace/resources/implementation-playbook.md +1371 -0
  185. package/skills/error-diagnostics-smart-debug/SKILL.md +197 -0
  186. package/skills/error-handling-patterns/SKILL.md +35 -0
  187. package/skills/error-handling-patterns/resources/implementation-playbook.md +635 -0
  188. package/skills/event-sourcing-architect/SKILL.md +58 -0
  189. package/skills/event-store-design/SKILL.md +449 -0
  190. package/skills/fastapi-pro/SKILL.md +192 -0
  191. package/skills/fastapi-templates/SKILL.md +32 -0
  192. package/skills/fastapi-templates/resources/implementation-playbook.md +566 -0
  193. package/skills/final-test/SKILL.md +5 -0
  194. package/skills/firmware-analyst/SKILL.md +320 -0
  195. package/skills/flutter-expert/SKILL.md +200 -0
  196. package/skills/framework-migration-code-migrate/SKILL.md +48 -0
  197. package/skills/framework-migration-code-migrate/resources/implementation-playbook.md +1052 -0
  198. package/skills/framework-migration-deps-upgrade/SKILL.md +48 -0
  199. package/skills/framework-migration-deps-upgrade/resources/implementation-playbook.md +755 -0
  200. package/skills/framework-migration-legacy-modernize/SKILL.md +132 -0
  201. package/skills/frontend-developer/SKILL.md +171 -0
  202. package/skills/frontend-mobile-development-component-scaffold/SKILL.md +403 -0
  203. package/skills/frontend-mobile-security-xss-scan/SKILL.md +322 -0
  204. package/skills/frontend-security-coder/SKILL.md +170 -0
  205. package/skills/full-stack-orchestration-full-stack-feature/SKILL.md +135 -0
  206. package/skills/gdpr-data-handling/SKILL.md +33 -0
  207. package/skills/gdpr-data-handling/resources/implementation-playbook.md +615 -0
  208. package/skills/git-advanced-workflows/SKILL.md +412 -0
  209. package/skills/git-pr-workflows-git-workflow/SKILL.md +140 -0
  210. package/skills/git-pr-workflows-onboard/SKILL.md +416 -0
  211. package/skills/git-pr-workflows-pr-enhance/SKILL.md +48 -0
  212. package/skills/git-pr-workflows-pr-enhance/resources/implementation-playbook.md +701 -0
  213. package/skills/github-actions-templates/SKILL.md +345 -0
  214. package/skills/gitlab-ci-patterns/SKILL.md +283 -0
  215. package/skills/gitops-workflow/SKILL.md +303 -0
  216. package/skills/gitops-workflow/references/argocd-setup.md +134 -0
  217. package/skills/gitops-workflow/references/sync-policies.md +131 -0
  218. package/skills/go-concurrency-patterns/SKILL.md +33 -0
  219. package/skills/go-concurrency-patterns/resources/implementation-playbook.md +654 -0
  220. package/skills/godot-gdscript-patterns/SKILL.md +33 -0
  221. package/skills/godot-gdscript-patterns/resources/implementation-playbook.md +804 -0
  222. package/skills/golang-pro/SKILL.md +179 -0
  223. package/skills/grafana-dashboards/SKILL.md +381 -0
  224. package/skills/graphql-architect/SKILL.md +182 -0
  225. package/skills/haskell-pro/SKILL.md +56 -0
  226. package/skills/helm-chart-scaffolding/SKILL.md +34 -0
  227. package/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
  228. package/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
  229. package/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
  230. package/skills/helm-chart-scaffolding/resources/implementation-playbook.md +543 -0
  231. package/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  232. package/skills/hr-pro/SKILL.md +126 -0
  233. package/skills/hybrid-cloud-architect/SKILL.md +168 -0
  234. package/skills/hybrid-cloud-networking/SKILL.md +238 -0
  235. package/skills/hybrid-search-implementation/SKILL.md +32 -0
  236. package/skills/hybrid-search-implementation/resources/implementation-playbook.md +567 -0
  237. package/skills/incident-responder/SKILL.md +213 -0
  238. package/skills/incident-response-incident-response/SKILL.md +168 -0
  239. package/skills/incident-response-smart-fix/SKILL.md +29 -0
  240. package/skills/incident-response-smart-fix/resources/implementation-playbook.md +838 -0
  241. package/skills/incident-runbook-templates/SKILL.md +395 -0
  242. package/skills/ios-developer/SKILL.md +219 -0
  243. package/skills/istio-traffic-management/SKILL.md +337 -0
  244. package/skills/java-pro/SKILL.md +177 -0
  245. package/skills/javascript-pro/SKILL.md +57 -0
  246. package/skills/javascript-testing-patterns/SKILL.md +35 -0
  247. package/skills/javascript-testing-patterns/resources/implementation-playbook.md +1024 -0
  248. package/skills/javascript-typescript-typescript-scaffold/SKILL.md +361 -0
  249. package/skills/julia-pro/SKILL.md +209 -0
  250. package/skills/k8s-manifest-generator/SKILL.md +35 -0
  251. package/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
  252. package/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
  253. package/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
  254. package/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
  255. package/skills/k8s-manifest-generator/references/service-spec.md +724 -0
  256. package/skills/k8s-manifest-generator/resources/implementation-playbook.md +510 -0
  257. package/skills/k8s-security-policies/SKILL.md +346 -0
  258. package/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
  259. package/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
  260. package/skills/kpi-dashboard-design/SKILL.md +440 -0
  261. package/skills/kubernetes-architect/SKILL.md +170 -0
  262. package/skills/langchain-architecture/SKILL.md +350 -0
  263. package/skills/legacy-modernizer/SKILL.md +53 -0
  264. package/skills/legal-advisor/SKILL.md +70 -0
  265. package/skills/linkerd-patterns/SKILL.md +321 -0
  266. package/skills/llm-application-dev-ai-assistant/SKILL.md +35 -0
  267. package/skills/llm-application-dev-ai-assistant/resources/implementation-playbook.md +1236 -0
  268. package/skills/llm-application-dev-langchain-agent/SKILL.md +246 -0
  269. package/skills/llm-application-dev-prompt-optimize/SKILL.md +37 -0
  270. package/skills/llm-application-dev-prompt-optimize/resources/implementation-playbook.md +591 -0
  271. package/skills/llm-evaluation/SKILL.md +483 -0
  272. package/skills/machine-learning-ops-ml-pipeline/SKILL.md +314 -0
  273. package/skills/malware-analyst/SKILL.md +247 -0
  274. package/skills/market-sizing-analysis/SKILL.md +425 -0
  275. package/skills/market-sizing-analysis/examples/saas-market-sizing.md +349 -0
  276. package/skills/market-sizing-analysis/references/data-sources.md +360 -0
  277. package/skills/memory-forensics/SKILL.md +491 -0
  278. package/skills/memory-safety-patterns/SKILL.md +33 -0
  279. package/skills/memory-safety-patterns/resources/implementation-playbook.md +603 -0
  280. package/skills/mermaid-expert/SKILL.md +59 -0
  281. package/skills/microservices-patterns/SKILL.md +35 -0
  282. package/skills/microservices-patterns/resources/implementation-playbook.md +607 -0
  283. package/skills/minecraft-bukkit-pro/SKILL.md +126 -0
  284. package/skills/ml-engineer/SKILL.md +168 -0
  285. package/skills/ml-pipeline-workflow/SKILL.md +257 -0
  286. package/skills/mlops-engineer/SKILL.md +219 -0
  287. package/skills/mobile-developer/SKILL.md +205 -0
  288. package/skills/mobile-security-coder/SKILL.md +184 -0
  289. package/skills/modern-javascript-patterns/SKILL.md +35 -0
  290. package/skills/modern-javascript-patterns/resources/implementation-playbook.md +910 -0
  291. package/skills/monorepo-architect/SKILL.md +61 -0
  292. package/skills/monorepo-management/SKILL.md +35 -0
  293. package/skills/monorepo-management/resources/implementation-playbook.md +621 -0
  294. package/skills/mtls-configuration/SKILL.md +359 -0
  295. package/skills/multi-cloud-architecture/SKILL.md +189 -0
  296. package/skills/multi-platform-apps-multi-platform/SKILL.md +203 -0
  297. package/skills/network-engineer/SKILL.md +169 -0
  298. package/skills/nextjs-app-router-patterns/SKILL.md +33 -0
  299. package/skills/nextjs-app-router-patterns/resources/implementation-playbook.md +543 -0
  300. package/skills/nft-standards/SKILL.md +395 -0
  301. package/skills/node-expert/SKILL.md +23 -0
  302. package/skills/nodejs-backend-patterns/SKILL.md +35 -0
  303. package/skills/nodejs-backend-patterns/resources/implementation-playbook.md +1019 -0
  304. package/skills/nx-workspace-patterns/SKILL.md +464 -0
  305. package/skills/observability-engineer/SKILL.md +237 -0
  306. package/skills/observability-monitoring-monitor-setup/SKILL.md +48 -0
  307. package/skills/observability-monitoring-monitor-setup/resources/implementation-playbook.md +505 -0
  308. package/skills/observability-monitoring-slo-implement/SKILL.md +43 -0
  309. package/skills/observability-monitoring-slo-implement/resources/implementation-playbook.md +1077 -0
  310. package/skills/on-call-handoff-patterns/SKILL.md +453 -0
  311. package/skills/openapi-spec-generation/SKILL.md +33 -0
  312. package/skills/openapi-spec-generation/resources/implementation-playbook.md +1027 -0
  313. package/skills/payment-integration/SKILL.md +77 -0
  314. package/skills/paypal-integration/SKILL.md +479 -0
  315. package/skills/pci-compliance/SKILL.md +478 -0
  316. package/skills/performance-engineer/SKILL.md +180 -0
  317. package/skills/performance-testing-review-ai-review/SKILL.md +450 -0
  318. package/skills/performance-testing-review-multi-agent-review/SKILL.md +216 -0
  319. package/skills/php-pro/SKILL.md +63 -0
  320. package/skills/posix-shell-pro/SKILL.md +304 -0
  321. package/skills/postgresql/SKILL.md +230 -0
  322. package/skills/postmortem-writing/SKILL.md +386 -0
  323. package/skills/projection-patterns/SKILL.md +33 -0
  324. package/skills/projection-patterns/resources/implementation-playbook.md +501 -0
  325. package/skills/prometheus-configuration/SKILL.md +404 -0
  326. package/skills/prompt-engineer/SKILL.md +272 -0
  327. package/skills/prompt-engineering-patterns/SKILL.md +213 -0
  328. package/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
  329. package/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
  330. package/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
  331. package/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
  332. package/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
  333. package/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
  334. package/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
  335. package/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
  336. package/skills/protocol-reverse-engineering/SKILL.md +29 -0
  337. package/skills/protocol-reverse-engineering/resources/implementation-playbook.md +509 -0
  338. package/skills/python-development-python-scaffold/SKILL.md +331 -0
  339. package/skills/python-packaging/SKILL.md +36 -0
  340. package/skills/python-packaging/resources/implementation-playbook.md +869 -0
  341. package/skills/python-performance-optimization/SKILL.md +36 -0
  342. package/skills/python-performance-optimization/resources/implementation-playbook.md +868 -0
  343. package/skills/python-pro/SKILL.md +158 -0
  344. package/skills/python-testing-patterns/SKILL.md +37 -0
  345. package/skills/python-testing-patterns/resources/implementation-playbook.md +906 -0
  346. package/skills/quant-analyst/SKILL.md +53 -0
  347. package/skills/rag-implementation/SKILL.md +421 -0
  348. package/skills/react-modernization/SKILL.md +34 -0
  349. package/skills/react-modernization/resources/implementation-playbook.md +512 -0
  350. package/skills/react-native-architecture/SKILL.md +33 -0
  351. package/skills/react-native-architecture/resources/implementation-playbook.md +670 -0
  352. package/skills/react-state-management/SKILL.md +441 -0
  353. package/skills/reference-builder/SKILL.md +188 -0
  354. package/skills/reverse-engineer/SKILL.md +173 -0
  355. package/skills/risk-manager/SKILL.md +61 -0
  356. package/skills/risk-metrics-calculation/SKILL.md +33 -0
  357. package/skills/risk-metrics-calculation/resources/implementation-playbook.md +554 -0
  358. package/skills/ruby-pro/SKILL.md +56 -0
  359. package/skills/rust-async-patterns/SKILL.md +33 -0
  360. package/skills/rust-async-patterns/resources/implementation-playbook.md +516 -0
  361. package/skills/rust-pro/SKILL.md +178 -0
  362. package/skills/saga-orchestration/SKILL.md +496 -0
  363. package/skills/sales-automator/SKILL.md +55 -0
  364. package/skills/sast-configuration/SKILL.md +212 -0
  365. package/skills/scala-pro/SKILL.md +82 -0
  366. package/skills/screen-reader-testing/SKILL.md +33 -0
  367. package/skills/screen-reader-testing/resources/implementation-playbook.md +544 -0
  368. package/skills/search-specialist/SKILL.md +80 -0
  369. package/skills/secrets-management/SKILL.md +364 -0
  370. package/skills/security-auditor/SKILL.md +169 -0
  371. package/skills/security-compliance-compliance-check/SKILL.md +55 -0
  372. package/skills/security-compliance-compliance-check/resources/implementation-playbook.md +963 -0
  373. package/skills/security-requirement-extraction/SKILL.md +33 -0
  374. package/skills/security-requirement-extraction/resources/implementation-playbook.md +676 -0
  375. package/skills/security-scanning-security-dependencies/SKILL.md +43 -0
  376. package/skills/security-scanning-security-dependencies/resources/implementation-playbook.md +544 -0
  377. package/skills/security-scanning-security-hardening/SKILL.md +147 -0
  378. package/skills/security-scanning-security-sast/SKILL.md +495 -0
  379. package/skills/seo-authority-builder/SKILL.md +136 -0
  380. package/skills/seo-cannibalization-detector/SKILL.md +123 -0
  381. package/skills/seo-content-auditor/SKILL.md +83 -0
  382. package/skills/seo-content-planner/SKILL.md +108 -0
  383. package/skills/seo-content-refresher/SKILL.md +118 -0
  384. package/skills/seo-content-writer/SKILL.md +96 -0
  385. package/skills/seo-keyword-strategist/SKILL.md +95 -0
  386. package/skills/seo-meta-optimizer/SKILL.md +92 -0
  387. package/skills/seo-snippet-hunter/SKILL.md +114 -0
  388. package/skills/seo-structure-architect/SKILL.md +108 -0
  389. package/skills/service-mesh-expert/SKILL.md +58 -0
  390. package/skills/service-mesh-observability/SKILL.md +395 -0
  391. package/skills/shellcheck-configuration/SKILL.md +466 -0
  392. package/skills/similarity-search-patterns/SKILL.md +33 -0
  393. package/skills/similarity-search-patterns/resources/implementation-playbook.md +557 -0
  394. package/skills/slo-implementation/SKILL.md +341 -0
  395. package/skills/solidity-security/SKILL.md +34 -0
  396. package/skills/solidity-security/resources/implementation-playbook.md +524 -0
  397. package/skills/spark-optimization/SKILL.md +427 -0
  398. package/skills/sql-optimization-patterns/SKILL.md +35 -0
  399. package/skills/sql-optimization-patterns/resources/implementation-playbook.md +504 -0
  400. package/skills/sql-pro/SKILL.md +173 -0
  401. package/skills/startup-analyst/SKILL.md +328 -0
  402. package/skills/startup-business-analyst-business-case/SKILL.md +487 -0
  403. package/skills/startup-business-analyst-financial-projections/SKILL.md +353 -0
  404. package/skills/startup-business-analyst-market-opportunity/SKILL.md +240 -0
  405. package/skills/startup-financial-modeling/SKILL.md +467 -0
  406. package/skills/startup-metrics-framework/SKILL.md +34 -0
  407. package/skills/startup-metrics-framework/resources/implementation-playbook.md +500 -0
  408. package/skills/stride-analysis-patterns/SKILL.md +33 -0
  409. package/skills/stride-analysis-patterns/resources/implementation-playbook.md +655 -0
  410. package/skills/stripe-integration/SKILL.md +454 -0
  411. package/skills/systems-programming-rust-project/SKILL.md +440 -0
  412. package/skills/tailwind-design-system/SKILL.md +33 -0
  413. package/skills/tailwind-design-system/resources/implementation-playbook.md +665 -0
  414. package/skills/tdd-orchestrator/SKILL.md +205 -0
  415. package/skills/tdd-workflows-tdd-cycle/SKILL.md +221 -0
  416. package/skills/tdd-workflows-tdd-green/SKILL.md +73 -0
  417. package/skills/tdd-workflows-tdd-green/resources/implementation-playbook.md +870 -0
  418. package/skills/tdd-workflows-tdd-red/SKILL.md +164 -0
  419. package/skills/tdd-workflows-tdd-refactor/SKILL.md +187 -0
  420. package/skills/team-collaboration-issue/SKILL.md +37 -0
  421. package/skills/team-collaboration-issue/resources/implementation-playbook.md +640 -0
  422. package/skills/team-collaboration-standup-notes/SKILL.md +44 -0
  423. package/skills/team-collaboration-standup-notes/resources/implementation-playbook.md +768 -0
  424. package/skills/team-composition-analysis/SKILL.md +413 -0
  425. package/skills/temporal-python-pro/SKILL.md +370 -0
  426. package/skills/temporal-python-testing/SKILL.md +170 -0
  427. package/skills/temporal-python-testing/resources/integration-testing.md +455 -0
  428. package/skills/temporal-python-testing/resources/local-setup.md +553 -0
  429. package/skills/temporal-python-testing/resources/replay-testing.md +462 -0
  430. package/skills/temporal-python-testing/resources/unit-testing.md +328 -0
  431. package/skills/terraform-module-library/SKILL.md +261 -0
  432. package/skills/terraform-module-library/references/aws-modules.md +63 -0
  433. package/skills/terraform-specialist/SKILL.md +166 -0
  434. package/skills/test-automator/SKILL.md +224 -0
  435. package/skills/threat-mitigation-mapping/SKILL.md +33 -0
  436. package/skills/threat-mitigation-mapping/resources/implementation-playbook.md +744 -0
  437. package/skills/threat-modeling-expert/SKILL.md +60 -0
  438. package/skills/track-management/SKILL.md +38 -0
  439. package/skills/track-management/resources/implementation-playbook.md +591 -0
  440. package/skills/turborepo-caching/SKILL.md +419 -0
  441. package/skills/tutorial-engineer/SKILL.md +139 -0
  442. package/skills/typescript-advanced-types/SKILL.md +35 -0
  443. package/skills/typescript-advanced-types/resources/implementation-playbook.md +716 -0
  444. package/skills/typescript-pro/SKILL.md +55 -0
  445. package/skills/ui-minimal/SKILL.md +23 -0
  446. package/skills/ui-ux-designer/SKILL.md +209 -0
  447. package/skills/ui-visual-validator/SKILL.md +214 -0
  448. package/skills/unit-testing-test-generate/SKILL.md +319 -0
  449. package/skills/unity-developer/SKILL.md +230 -0
  450. package/skills/unity-ecs-patterns/SKILL.md +33 -0
  451. package/skills/unity-ecs-patterns/resources/implementation-playbook.md +625 -0
  452. package/skills/uv-package-manager/SKILL.md +37 -0
  453. package/skills/uv-package-manager/resources/implementation-playbook.md +830 -0
  454. package/skills/vector-database-engineer/SKILL.md +60 -0
  455. package/skills/vector-index-tuning/SKILL.md +42 -0
  456. package/skills/vector-index-tuning/resources/implementation-playbook.md +507 -0
  457. package/skills/wcag-audit-patterns/SKILL.md +41 -0
  458. package/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
  459. package/skills/web3-testing/SKILL.md +427 -0
  460. package/skills/workflow-orchestration-patterns/SKILL.md +333 -0
  461. package/skills/workflow-patterns/SKILL.md +38 -0
  462. package/skills/workflow-patterns/resources/implementation-playbook.md +621 -0
@@ -0,0 +1,799 @@
1
+ # .NET Backend Development Patterns Implementation Playbook
2
+
3
+ This file contains detailed patterns, checklists, and code samples referenced by the skill.
4
+
5
+ ## Core Concepts
6
+
7
+ ### 1. Project Structure (Clean Architecture)
8
+
9
+ ```
10
+ src/
11
+ ├── Domain/ # Core business logic (no dependencies)
12
+ │ ├── Entities/
13
+ │ ├── Interfaces/
14
+ │ ├── Exceptions/
15
+ │ └── ValueObjects/
16
+ ├── Application/ # Use cases, DTOs, validation
17
+ │ ├── Services/
18
+ │ ├── DTOs/
19
+ │ ├── Validators/
20
+ │ └── Interfaces/
21
+ ├── Infrastructure/ # External implementations
22
+ │ ├── Data/ # EF Core, Dapper repositories
23
+ │ ├── Caching/ # Redis, Memory cache
24
+ │ ├── External/ # HTTP clients, third-party APIs
25
+ │ └── DependencyInjection/ # Service registration
26
+ └── Api/ # Entry point
27
+ ├── Controllers/ # Or MinimalAPI endpoints
28
+ ├── Middleware/
29
+ ├── Filters/
30
+ └── Program.cs
31
+ ```
32
+
33
+ ### 2. Dependency Injection Patterns
34
+
35
+ ```csharp
36
+ // Service registration by lifetime
37
+ public static class ServiceCollectionExtensions
38
+ {
39
+ public static IServiceCollection AddApplicationServices(
40
+ this IServiceCollection services,
41
+ IConfiguration configuration)
42
+ {
43
+ // Scoped: One instance per HTTP request
44
+ services.AddScoped<IProductService, ProductService>();
45
+ services.AddScoped<IOrderService, OrderService>();
46
+
47
+ // Singleton: One instance for app lifetime
48
+ services.AddSingleton<ICacheService, RedisCacheService>();
49
+ services.AddSingleton<IConnectionMultiplexer>(_ =>
50
+ ConnectionMultiplexer.Connect(configuration["Redis:Connection"]!));
51
+
52
+ // Transient: New instance every time
53
+ services.AddTransient<IValidator<CreateOrderRequest>, CreateOrderValidator>();
54
+
55
+ // Options pattern for configuration
56
+ services.Configure<CatalogOptions>(configuration.GetSection("Catalog"));
57
+ services.Configure<RedisOptions>(configuration.GetSection("Redis"));
58
+
59
+ // Factory pattern for conditional creation
60
+ services.AddScoped<IPriceCalculator>(sp =>
61
+ {
62
+ var options = sp.GetRequiredService<IOptions<PricingOptions>>().Value;
63
+ return options.UseNewEngine
64
+ ? sp.GetRequiredService<NewPriceCalculator>()
65
+ : sp.GetRequiredService<LegacyPriceCalculator>();
66
+ });
67
+
68
+ // Keyed services (.NET 8+)
69
+ services.AddKeyedScoped<IPaymentProcessor, StripeProcessor>("stripe");
70
+ services.AddKeyedScoped<IPaymentProcessor, PayPalProcessor>("paypal");
71
+
72
+ return services;
73
+ }
74
+ }
75
+
76
+ // Usage with keyed services
77
+ public class CheckoutService
78
+ {
79
+ public CheckoutService(
80
+ [FromKeyedServices("stripe")] IPaymentProcessor stripeProcessor)
81
+ {
82
+ _processor = stripeProcessor;
83
+ }
84
+ }
85
+ ```
86
+
87
+ ### 3. Async/Await Patterns
88
+
89
+ ```csharp
90
+ // ✅ CORRECT: Async all the way down
91
+ public async Task<Product> GetProductAsync(string id, CancellationToken ct = default)
92
+ {
93
+ return await _repository.GetByIdAsync(id, ct);
94
+ }
95
+
96
+ // ✅ CORRECT: Parallel execution with WhenAll
97
+ public async Task<(Stock, Price)> GetStockAndPriceAsync(
98
+ string productId,
99
+ CancellationToken ct = default)
100
+ {
101
+ var stockTask = _stockService.GetAsync(productId, ct);
102
+ var priceTask = _priceService.GetAsync(productId, ct);
103
+
104
+ await Task.WhenAll(stockTask, priceTask);
105
+
106
+ return (await stockTask, await priceTask);
107
+ }
108
+
109
+ // ✅ CORRECT: ConfigureAwait in libraries
110
+ public async Task<T> LibraryMethodAsync<T>(CancellationToken ct = default)
111
+ {
112
+ var result = await _httpClient.GetAsync(url, ct).ConfigureAwait(false);
113
+ return await result.Content.ReadFromJsonAsync<T>(ct).ConfigureAwait(false);
114
+ }
115
+
116
+ // ✅ CORRECT: ValueTask for hot paths with caching
117
+ public ValueTask<Product?> GetCachedProductAsync(string id)
118
+ {
119
+ if (_cache.TryGetValue(id, out Product? product))
120
+ return ValueTask.FromResult(product);
121
+
122
+ return new ValueTask<Product?>(GetFromDatabaseAsync(id));
123
+ }
124
+
125
+ // ❌ WRONG: Blocking on async (deadlock risk)
126
+ var result = GetProductAsync(id).Result; // NEVER do this
127
+ var result2 = GetProductAsync(id).GetAwaiter().GetResult(); // Also bad
128
+
129
+ // ❌ WRONG: async void (except event handlers)
130
+ public async void ProcessOrder() { } // Exceptions are lost
131
+
132
+ // ❌ WRONG: Unnecessary Task.Run for already async code
133
+ await Task.Run(async () => await GetDataAsync()); // Wastes thread
134
+ ```
135
+
136
+ ### 4. Configuration with IOptions
137
+
138
+ ```csharp
139
+ // Configuration classes
140
+ public class CatalogOptions
141
+ {
142
+ public const string SectionName = "Catalog";
143
+
144
+ public int DefaultPageSize { get; set; } = 50;
145
+ public int MaxPageSize { get; set; } = 200;
146
+ public TimeSpan CacheDuration { get; set; } = TimeSpan.FromMinutes(15);
147
+ public bool EnableEnrichment { get; set; } = true;
148
+ }
149
+
150
+ public class RedisOptions
151
+ {
152
+ public const string SectionName = "Redis";
153
+
154
+ public string Connection { get; set; } = "localhost:6379";
155
+ public string KeyPrefix { get; set; } = "mcp:";
156
+ public int Database { get; set; } = 0;
157
+ }
158
+
159
+ // appsettings.json
160
+ {
161
+ "Catalog": {
162
+ "DefaultPageSize": 50,
163
+ "MaxPageSize": 200,
164
+ "CacheDuration": "00:15:00",
165
+ "EnableEnrichment": true
166
+ },
167
+ "Redis": {
168
+ "Connection": "localhost:6379",
169
+ "KeyPrefix": "mcp:",
170
+ "Database": 0
171
+ }
172
+ }
173
+
174
+ // Registration
175
+ services.Configure<CatalogOptions>(configuration.GetSection(CatalogOptions.SectionName));
176
+ services.Configure<RedisOptions>(configuration.GetSection(RedisOptions.SectionName));
177
+
178
+ // Usage with IOptions (singleton, read once at startup)
179
+ public class CatalogService
180
+ {
181
+ private readonly CatalogOptions _options;
182
+
183
+ public CatalogService(IOptions<CatalogOptions> options)
184
+ {
185
+ _options = options.Value;
186
+ }
187
+ }
188
+
189
+ // Usage with IOptionsSnapshot (scoped, re-reads on each request)
190
+ public class DynamicService
191
+ {
192
+ private readonly CatalogOptions _options;
193
+
194
+ public DynamicService(IOptionsSnapshot<CatalogOptions> options)
195
+ {
196
+ _options = options.Value; // Fresh value per request
197
+ }
198
+ }
199
+
200
+ // Usage with IOptionsMonitor (singleton, notified on changes)
201
+ public class MonitoredService
202
+ {
203
+ private CatalogOptions _options;
204
+
205
+ public MonitoredService(IOptionsMonitor<CatalogOptions> monitor)
206
+ {
207
+ _options = monitor.CurrentValue;
208
+ monitor.OnChange(newOptions => _options = newOptions);
209
+ }
210
+ }
211
+ ```
212
+
213
+ ### 5. Result Pattern (Avoiding Exceptions for Flow Control)
214
+
215
+ ```csharp
216
+ // Generic Result type
217
+ public class Result<T>
218
+ {
219
+ public bool IsSuccess { get; }
220
+ public T? Value { get; }
221
+ public string? Error { get; }
222
+ public string? ErrorCode { get; }
223
+
224
+ private Result(bool isSuccess, T? value, string? error, string? errorCode)
225
+ {
226
+ IsSuccess = isSuccess;
227
+ Value = value;
228
+ Error = error;
229
+ ErrorCode = errorCode;
230
+ }
231
+
232
+ public static Result<T> Success(T value) => new(true, value, null, null);
233
+ public static Result<T> Failure(string error, string? code = null) => new(false, default, error, code);
234
+
235
+ public Result<TNew> Map<TNew>(Func<T, TNew> mapper) =>
236
+ IsSuccess ? Result<TNew>.Success(mapper(Value!)) : Result<TNew>.Failure(Error!, ErrorCode);
237
+
238
+ public async Task<Result<TNew>> MapAsync<TNew>(Func<T, Task<TNew>> mapper) =>
239
+ IsSuccess ? Result<TNew>.Success(await mapper(Value!)) : Result<TNew>.Failure(Error!, ErrorCode);
240
+ }
241
+
242
+ // Usage in service
243
+ public async Task<Result<Order>> CreateOrderAsync(CreateOrderRequest request, CancellationToken ct)
244
+ {
245
+ // Validation
246
+ var validation = await _validator.ValidateAsync(request, ct);
247
+ if (!validation.IsValid)
248
+ return Result<Order>.Failure(
249
+ validation.Errors.First().ErrorMessage,
250
+ "VALIDATION_ERROR");
251
+
252
+ // Business rule check
253
+ var stock = await _stockService.CheckAsync(request.ProductId, request.Quantity, ct);
254
+ if (!stock.IsAvailable)
255
+ return Result<Order>.Failure(
256
+ $"Insufficient stock: {stock.Available} available, {request.Quantity} requested",
257
+ "INSUFFICIENT_STOCK");
258
+
259
+ // Create order
260
+ var order = await _repository.CreateAsync(request.ToEntity(), ct);
261
+
262
+ return Result<Order>.Success(order);
263
+ }
264
+
265
+ // Usage in controller/endpoint
266
+ app.MapPost("/orders", async (
267
+ CreateOrderRequest request,
268
+ IOrderService orderService,
269
+ CancellationToken ct) =>
270
+ {
271
+ var result = await orderService.CreateOrderAsync(request, ct);
272
+
273
+ return result.IsSuccess
274
+ ? Results.Created($"/orders/{result.Value!.Id}", result.Value)
275
+ : Results.BadRequest(new { error = result.Error, code = result.ErrorCode });
276
+ });
277
+ ```
278
+
279
+ ## Data Access Patterns
280
+
281
+ ### Entity Framework Core
282
+
283
+ ```csharp
284
+ // DbContext configuration
285
+ public class AppDbContext : DbContext
286
+ {
287
+ public DbSet<Product> Products => Set<Product>();
288
+ public DbSet<Order> Orders => Set<Order>();
289
+
290
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
291
+ {
292
+ // Apply all configurations from assembly
293
+ modelBuilder.ApplyConfigurationsFromAssembly(typeof(AppDbContext).Assembly);
294
+
295
+ // Global query filters
296
+ modelBuilder.Entity<Product>().HasQueryFilter(p => !p.IsDeleted);
297
+ }
298
+ }
299
+
300
+ // Entity configuration
301
+ public class ProductConfiguration : IEntityTypeConfiguration<Product>
302
+ {
303
+ public void Configure(EntityTypeBuilder<Product> builder)
304
+ {
305
+ builder.ToTable("Products");
306
+
307
+ builder.HasKey(p => p.Id);
308
+ builder.Property(p => p.Id).HasMaxLength(40);
309
+ builder.Property(p => p.Name).HasMaxLength(200).IsRequired();
310
+ builder.Property(p => p.Price).HasPrecision(18, 2);
311
+
312
+ builder.HasIndex(p => p.Sku).IsUnique();
313
+ builder.HasIndex(p => new { p.CategoryId, p.Name });
314
+
315
+ builder.HasMany(p => p.OrderItems)
316
+ .WithOne(oi => oi.Product)
317
+ .HasForeignKey(oi => oi.ProductId);
318
+ }
319
+ }
320
+
321
+ // Repository with EF Core
322
+ public class ProductRepository : IProductRepository
323
+ {
324
+ private readonly AppDbContext _context;
325
+
326
+ public async Task<Product?> GetByIdAsync(string id, CancellationToken ct = default)
327
+ {
328
+ return await _context.Products
329
+ .AsNoTracking()
330
+ .FirstOrDefaultAsync(p => p.Id == id, ct);
331
+ }
332
+
333
+ public async Task<IReadOnlyList<Product>> SearchAsync(
334
+ ProductSearchCriteria criteria,
335
+ CancellationToken ct = default)
336
+ {
337
+ var query = _context.Products.AsNoTracking();
338
+
339
+ if (!string.IsNullOrWhiteSpace(criteria.SearchTerm))
340
+ query = query.Where(p => EF.Functions.Like(p.Name, $"%{criteria.SearchTerm}%"));
341
+
342
+ if (criteria.CategoryId.HasValue)
343
+ query = query.Where(p => p.CategoryId == criteria.CategoryId);
344
+
345
+ if (criteria.MinPrice.HasValue)
346
+ query = query.Where(p => p.Price >= criteria.MinPrice);
347
+
348
+ if (criteria.MaxPrice.HasValue)
349
+ query = query.Where(p => p.Price <= criteria.MaxPrice);
350
+
351
+ return await query
352
+ .OrderBy(p => p.Name)
353
+ .Skip((criteria.Page - 1) * criteria.PageSize)
354
+ .Take(criteria.PageSize)
355
+ .ToListAsync(ct);
356
+ }
357
+ }
358
+ ```
359
+
360
+ ### Dapper for Performance
361
+
362
+ ```csharp
363
+ public class DapperProductRepository : IProductRepository
364
+ {
365
+ private readonly IDbConnection _connection;
366
+
367
+ public async Task<Product?> GetByIdAsync(string id, CancellationToken ct = default)
368
+ {
369
+ const string sql = """
370
+ SELECT Id, Name, Sku, Price, CategoryId, Stock, CreatedAt
371
+ FROM Products
372
+ WHERE Id = @Id AND IsDeleted = 0
373
+ """;
374
+
375
+ return await _connection.QueryFirstOrDefaultAsync<Product>(
376
+ new CommandDefinition(sql, new { Id = id }, cancellationToken: ct));
377
+ }
378
+
379
+ public async Task<IReadOnlyList<Product>> SearchAsync(
380
+ ProductSearchCriteria criteria,
381
+ CancellationToken ct = default)
382
+ {
383
+ var sql = new StringBuilder("""
384
+ SELECT Id, Name, Sku, Price, CategoryId, Stock, CreatedAt
385
+ FROM Products
386
+ WHERE IsDeleted = 0
387
+ """);
388
+
389
+ var parameters = new DynamicParameters();
390
+
391
+ if (!string.IsNullOrWhiteSpace(criteria.SearchTerm))
392
+ {
393
+ sql.Append(" AND Name LIKE @SearchTerm");
394
+ parameters.Add("SearchTerm", $"%{criteria.SearchTerm}%");
395
+ }
396
+
397
+ if (criteria.CategoryId.HasValue)
398
+ {
399
+ sql.Append(" AND CategoryId = @CategoryId");
400
+ parameters.Add("CategoryId", criteria.CategoryId);
401
+ }
402
+
403
+ if (criteria.MinPrice.HasValue)
404
+ {
405
+ sql.Append(" AND Price >= @MinPrice");
406
+ parameters.Add("MinPrice", criteria.MinPrice);
407
+ }
408
+
409
+ if (criteria.MaxPrice.HasValue)
410
+ {
411
+ sql.Append(" AND Price <= @MaxPrice");
412
+ parameters.Add("MaxPrice", criteria.MaxPrice);
413
+ }
414
+
415
+ sql.Append(" ORDER BY Name OFFSET @Offset ROWS FETCH NEXT @PageSize ROWS ONLY");
416
+ parameters.Add("Offset", (criteria.Page - 1) * criteria.PageSize);
417
+ parameters.Add("PageSize", criteria.PageSize);
418
+
419
+ var results = await _connection.QueryAsync<Product>(
420
+ new CommandDefinition(sql.ToString(), parameters, cancellationToken: ct));
421
+
422
+ return results.ToList();
423
+ }
424
+
425
+ // Multi-mapping for related data
426
+ public async Task<Order?> GetOrderWithItemsAsync(int orderId, CancellationToken ct = default)
427
+ {
428
+ const string sql = """
429
+ SELECT o.*, oi.*, p.*
430
+ FROM Orders o
431
+ LEFT JOIN OrderItems oi ON o.Id = oi.OrderId
432
+ LEFT JOIN Products p ON oi.ProductId = p.Id
433
+ WHERE o.Id = @OrderId
434
+ """;
435
+
436
+ var orderDictionary = new Dictionary<int, Order>();
437
+
438
+ await _connection.QueryAsync<Order, OrderItem, Product, Order>(
439
+ new CommandDefinition(sql, new { OrderId = orderId }, cancellationToken: ct),
440
+ (order, item, product) =>
441
+ {
442
+ if (!orderDictionary.TryGetValue(order.Id, out var existingOrder))
443
+ {
444
+ existingOrder = order;
445
+ existingOrder.Items = new List<OrderItem>();
446
+ orderDictionary.Add(order.Id, existingOrder);
447
+ }
448
+
449
+ if (item != null)
450
+ {
451
+ item.Product = product;
452
+ existingOrder.Items.Add(item);
453
+ }
454
+
455
+ return existingOrder;
456
+ },
457
+ splitOn: "Id,Id");
458
+
459
+ return orderDictionary.Values.FirstOrDefault();
460
+ }
461
+ }
462
+ ```
463
+
464
+ ## Caching Patterns
465
+
466
+ ### Multi-Level Cache with Redis
467
+
468
+ ```csharp
469
+ public class CachedProductService : IProductService
470
+ {
471
+ private readonly IProductRepository _repository;
472
+ private readonly IMemoryCache _memoryCache;
473
+ private readonly IDistributedCache _distributedCache;
474
+ private readonly ILogger<CachedProductService> _logger;
475
+
476
+ private static readonly TimeSpan MemoryCacheDuration = TimeSpan.FromMinutes(1);
477
+ private static readonly TimeSpan DistributedCacheDuration = TimeSpan.FromMinutes(15);
478
+
479
+ public async Task<Product?> GetByIdAsync(string id, CancellationToken ct = default)
480
+ {
481
+ var cacheKey = $"product:{id}";
482
+
483
+ // L1: Memory cache (in-process, fastest)
484
+ if (_memoryCache.TryGetValue(cacheKey, out Product? cached))
485
+ {
486
+ _logger.LogDebug("L1 cache hit for {CacheKey}", cacheKey);
487
+ return cached;
488
+ }
489
+
490
+ // L2: Distributed cache (Redis)
491
+ var distributed = await _distributedCache.GetStringAsync(cacheKey, ct);
492
+ if (distributed != null)
493
+ {
494
+ _logger.LogDebug("L2 cache hit for {CacheKey}", cacheKey);
495
+ var product = JsonSerializer.Deserialize<Product>(distributed);
496
+
497
+ // Populate L1
498
+ _memoryCache.Set(cacheKey, product, MemoryCacheDuration);
499
+ return product;
500
+ }
501
+
502
+ // L3: Database
503
+ _logger.LogDebug("Cache miss for {CacheKey}, fetching from database", cacheKey);
504
+ var fromDb = await _repository.GetByIdAsync(id, ct);
505
+
506
+ if (fromDb != null)
507
+ {
508
+ var serialized = JsonSerializer.Serialize(fromDb);
509
+
510
+ // Populate both caches
511
+ await _distributedCache.SetStringAsync(
512
+ cacheKey,
513
+ serialized,
514
+ new DistributedCacheEntryOptions
515
+ {
516
+ AbsoluteExpirationRelativeToNow = DistributedCacheDuration
517
+ },
518
+ ct);
519
+
520
+ _memoryCache.Set(cacheKey, fromDb, MemoryCacheDuration);
521
+ }
522
+
523
+ return fromDb;
524
+ }
525
+
526
+ public async Task InvalidateAsync(string id, CancellationToken ct = default)
527
+ {
528
+ var cacheKey = $"product:{id}";
529
+
530
+ _memoryCache.Remove(cacheKey);
531
+ await _distributedCache.RemoveAsync(cacheKey, ct);
532
+
533
+ _logger.LogInformation("Invalidated cache for {CacheKey}", cacheKey);
534
+ }
535
+ }
536
+
537
+ // Stale-while-revalidate pattern
538
+ public class StaleWhileRevalidateCache<T>
539
+ {
540
+ private readonly IDistributedCache _cache;
541
+ private readonly TimeSpan _freshDuration;
542
+ private readonly TimeSpan _staleDuration;
543
+
544
+ public async Task<T?> GetOrCreateAsync(
545
+ string key,
546
+ Func<CancellationToken, Task<T>> factory,
547
+ CancellationToken ct = default)
548
+ {
549
+ var cached = await _cache.GetStringAsync(key, ct);
550
+
551
+ if (cached != null)
552
+ {
553
+ var entry = JsonSerializer.Deserialize<CacheEntry<T>>(cached)!;
554
+
555
+ if (entry.IsStale && !entry.IsExpired)
556
+ {
557
+ // Return stale data immediately, refresh in background
558
+ _ = Task.Run(async () =>
559
+ {
560
+ var fresh = await factory(CancellationToken.None);
561
+ await SetAsync(key, fresh, CancellationToken.None);
562
+ });
563
+ }
564
+
565
+ if (!entry.IsExpired)
566
+ return entry.Value;
567
+ }
568
+
569
+ // Cache miss or expired
570
+ var value = await factory(ct);
571
+ await SetAsync(key, value, ct);
572
+ return value;
573
+ }
574
+
575
+ private record CacheEntry<TValue>(TValue Value, DateTime CreatedAt)
576
+ {
577
+ public bool IsStale => DateTime.UtcNow - CreatedAt > _freshDuration;
578
+ public bool IsExpired => DateTime.UtcNow - CreatedAt > _staleDuration;
579
+ }
580
+ }
581
+ ```
582
+
583
+ ## Testing Patterns
584
+
585
+ ### Unit Tests with xUnit and Moq
586
+
587
+ ```csharp
588
+ public class OrderServiceTests
589
+ {
590
+ private readonly Mock<IOrderRepository> _mockRepository;
591
+ private readonly Mock<IStockService> _mockStockService;
592
+ private readonly Mock<IValidator<CreateOrderRequest>> _mockValidator;
593
+ private readonly OrderService _sut; // System Under Test
594
+
595
+ public OrderServiceTests()
596
+ {
597
+ _mockRepository = new Mock<IOrderRepository>();
598
+ _mockStockService = new Mock<IStockService>();
599
+ _mockValidator = new Mock<IValidator<CreateOrderRequest>>();
600
+
601
+ // Default: validation passes
602
+ _mockValidator
603
+ .Setup(v => v.ValidateAsync(It.IsAny<CreateOrderRequest>(), It.IsAny<CancellationToken>()))
604
+ .ReturnsAsync(new ValidationResult());
605
+
606
+ _sut = new OrderService(
607
+ _mockRepository.Object,
608
+ _mockStockService.Object,
609
+ _mockValidator.Object);
610
+ }
611
+
612
+ [Fact]
613
+ public async Task CreateOrderAsync_WithValidRequest_ReturnsSuccess()
614
+ {
615
+ // Arrange
616
+ var request = new CreateOrderRequest
617
+ {
618
+ ProductId = "PROD-001",
619
+ Quantity = 5,
620
+ CustomerOrderCode = "ORD-2024-001"
621
+ };
622
+
623
+ _mockStockService
624
+ .Setup(s => s.CheckAsync("PROD-001", 5, It.IsAny<CancellationToken>()))
625
+ .ReturnsAsync(new StockResult { IsAvailable = true, Available = 10 });
626
+
627
+ _mockRepository
628
+ .Setup(r => r.CreateAsync(It.IsAny<Order>(), It.IsAny<CancellationToken>()))
629
+ .ReturnsAsync(new Order { Id = 1, CustomerOrderCode = "ORD-2024-001" });
630
+
631
+ // Act
632
+ var result = await _sut.CreateOrderAsync(request);
633
+
634
+ // Assert
635
+ Assert.True(result.IsSuccess);
636
+ Assert.NotNull(result.Value);
637
+ Assert.Equal(1, result.Value.Id);
638
+
639
+ _mockRepository.Verify(
640
+ r => r.CreateAsync(It.Is<Order>(o => o.CustomerOrderCode == "ORD-2024-001"),
641
+ It.IsAny<CancellationToken>()),
642
+ Times.Once);
643
+ }
644
+
645
+ [Fact]
646
+ public async Task CreateOrderAsync_WithInsufficientStock_ReturnsFailure()
647
+ {
648
+ // Arrange
649
+ var request = new CreateOrderRequest { ProductId = "PROD-001", Quantity = 100 };
650
+
651
+ _mockStockService
652
+ .Setup(s => s.CheckAsync(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<CancellationToken>()))
653
+ .ReturnsAsync(new StockResult { IsAvailable = false, Available = 5 });
654
+
655
+ // Act
656
+ var result = await _sut.CreateOrderAsync(request);
657
+
658
+ // Assert
659
+ Assert.False(result.IsSuccess);
660
+ Assert.Equal("INSUFFICIENT_STOCK", result.ErrorCode);
661
+ Assert.Contains("5 available", result.Error);
662
+
663
+ _mockRepository.Verify(
664
+ r => r.CreateAsync(It.IsAny<Order>(), It.IsAny<CancellationToken>()),
665
+ Times.Never);
666
+ }
667
+
668
+ [Theory]
669
+ [InlineData(0)]
670
+ [InlineData(-1)]
671
+ [InlineData(-100)]
672
+ public async Task CreateOrderAsync_WithInvalidQuantity_ReturnsValidationError(int quantity)
673
+ {
674
+ // Arrange
675
+ var request = new CreateOrderRequest { ProductId = "PROD-001", Quantity = quantity };
676
+
677
+ _mockValidator
678
+ .Setup(v => v.ValidateAsync(request, It.IsAny<CancellationToken>()))
679
+ .ReturnsAsync(new ValidationResult(new[]
680
+ {
681
+ new ValidationFailure("Quantity", "Quantity must be greater than 0")
682
+ }));
683
+
684
+ // Act
685
+ var result = await _sut.CreateOrderAsync(request);
686
+
687
+ // Assert
688
+ Assert.False(result.IsSuccess);
689
+ Assert.Equal("VALIDATION_ERROR", result.ErrorCode);
690
+ }
691
+ }
692
+ ```
693
+
694
+ ### Integration Tests with WebApplicationFactory
695
+
696
+ ```csharp
697
+ public class ProductsApiTests : IClassFixture<WebApplicationFactory<Program>>
698
+ {
699
+ private readonly WebApplicationFactory<Program> _factory;
700
+ private readonly HttpClient _client;
701
+
702
+ public ProductsApiTests(WebApplicationFactory<Program> factory)
703
+ {
704
+ _factory = factory.WithWebHostBuilder(builder =>
705
+ {
706
+ builder.ConfigureServices(services =>
707
+ {
708
+ // Replace real database with in-memory
709
+ services.RemoveAll<DbContextOptions<AppDbContext>>();
710
+ services.AddDbContext<AppDbContext>(options =>
711
+ options.UseInMemoryDatabase("TestDb"));
712
+
713
+ // Replace Redis with memory cache
714
+ services.RemoveAll<IDistributedCache>();
715
+ services.AddDistributedMemoryCache();
716
+ });
717
+ });
718
+
719
+ _client = _factory.CreateClient();
720
+ }
721
+
722
+ [Fact]
723
+ public async Task GetProduct_WithValidId_ReturnsProduct()
724
+ {
725
+ // Arrange
726
+ using var scope = _factory.Services.CreateScope();
727
+ var context = scope.ServiceProvider.GetRequiredService<AppDbContext>();
728
+
729
+ context.Products.Add(new Product
730
+ {
731
+ Id = "TEST-001",
732
+ Name = "Test Product",
733
+ Price = 99.99m
734
+ });
735
+ await context.SaveChangesAsync();
736
+
737
+ // Act
738
+ var response = await _client.GetAsync("/api/products/TEST-001");
739
+
740
+ // Assert
741
+ response.EnsureSuccessStatusCode();
742
+ var product = await response.Content.ReadFromJsonAsync<Product>();
743
+ Assert.Equal("Test Product", product!.Name);
744
+ }
745
+
746
+ [Fact]
747
+ public async Task GetProduct_WithInvalidId_Returns404()
748
+ {
749
+ // Act
750
+ var response = await _client.GetAsync("/api/products/NONEXISTENT");
751
+
752
+ // Assert
753
+ Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
754
+ }
755
+ }
756
+ ```
757
+
758
+ ## Best Practices
759
+
760
+ ### DO
761
+ 1. **Use async/await** all the way through the call stack
762
+ 2. **Inject dependencies** through constructor injection
763
+ 3. **Use IOptions<T>** for typed configuration
764
+ 4. **Return Result types** instead of throwing exceptions for business logic
765
+ 5. **Use CancellationToken** in all async methods
766
+ 6. **Prefer Dapper** for read-heavy, performance-critical queries
767
+ 7. **Use EF Core** for complex domain models with change tracking
768
+ 8. **Cache aggressively** with proper invalidation strategies
769
+ 9. **Write unit tests** for business logic, integration tests for APIs
770
+ 10. **Use record types** for DTOs and immutable data
771
+
772
+ ### DON'T
773
+ 1. **Don't block on async** with `.Result` or `.Wait()`
774
+ 2. **Don't use async void** except for event handlers
775
+ 3. **Don't catch generic Exception** without re-throwing or logging
776
+ 4. **Don't hardcode** configuration values
777
+ 5. **Don't expose EF entities** directly in APIs (use DTOs)
778
+ 6. **Don't forget** `AsNoTracking()` for read-only queries
779
+ 7. **Don't ignore** CancellationToken parameters
780
+ 8. **Don't create** `new HttpClient()` manually (use IHttpClientFactory)
781
+ 9. **Don't mix** sync and async code unnecessarily
782
+ 10. **Don't skip** validation at API boundaries
783
+
784
+ ## Common Pitfalls
785
+
786
+ - **N+1 Queries**: Use `.Include()` or explicit joins
787
+ - **Memory Leaks**: Dispose IDisposable resources, use `using`
788
+ - **Deadlocks**: Don't mix sync and async, use ConfigureAwait(false) in libraries
789
+ - **Over-fetching**: Select only needed columns, use projections
790
+ - **Missing Indexes**: Check query plans, add indexes for common filters
791
+ - **Timeout Issues**: Configure appropriate timeouts for HTTP clients
792
+ - **Cache Stampede**: Use distributed locks for cache population
793
+
794
+ ## Resources
795
+
796
+ - **assets/service-template.cs**: Complete service implementation template
797
+ - **assets/repository-template.cs**: Repository pattern implementation
798
+ - **references/ef-core-best-practices.md**: EF Core optimization guide
799
+ - **references/dapper-patterns.md**: Advanced Dapper usage patterns