claudecode-omc 5.9.1 → 5.12.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 (523) hide show
  1. package/.local/settings/settings.json +8 -0
  2. package/.omc-curation/governance.json +3 -0
  3. package/.omc-curation/sources.lock.json +5 -0
  4. package/README.md +10 -1
  5. package/bundled/manifest.json +4 -3
  6. package/bundled/upstream/anthropic-skills/.omc-source/bundle.json +2 -2
  7. package/bundled/upstream/anthropic-skills/.omc-source/provenance.json +394 -390
  8. package/bundled/upstream/anthropic-skills/skills/claude-api/SKILL.md +60 -29
  9. package/bundled/upstream/anthropic-skills/skills/claude-api/csharp/claude-api.md +46 -1
  10. package/bundled/upstream/anthropic-skills/skills/claude-api/curl/examples.md +2 -2
  11. package/bundled/upstream/anthropic-skills/skills/claude-api/curl/managed-agents.md +3 -1
  12. package/bundled/upstream/anthropic-skills/skills/claude-api/go/claude-api.md +23 -4
  13. package/bundled/upstream/anthropic-skills/skills/claude-api/java/claude-api.md +32 -3
  14. package/bundled/upstream/anthropic-skills/skills/claude-api/php/claude-api.md +27 -0
  15. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/README.md +123 -7
  16. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/batches.md +13 -0
  17. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/files-api.md +7 -2
  18. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/streaming.md +18 -1
  19. package/bundled/upstream/anthropic-skills/skills/claude-api/python/managed-agents/README.md +9 -7
  20. package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/claude-api.md +27 -0
  21. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/agent-design.md +1 -1
  22. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/anthropic-cli.md +246 -0
  23. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/claude-platform-on-aws.md +59 -0
  24. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/error-codes.md +24 -4
  25. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/live-sources.md +8 -0
  26. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-api-reference.md +48 -4
  27. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-client-patterns.md +3 -1
  28. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-core.md +15 -1
  29. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-environments.md +10 -6
  30. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-events.md +25 -0
  31. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-onboarding.md +48 -18
  32. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-overview.md +8 -5
  33. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-scheduled-deployments.md +144 -0
  34. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +2 -1
  35. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-tools.md +46 -9
  36. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/model-migration.md +259 -3
  37. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/models.md +17 -9
  38. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/prompt-caching.md +55 -3
  39. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/token-counting.md +56 -0
  40. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/tool-use-concepts.md +22 -2
  41. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/README.md +45 -6
  42. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/streaming.md +1 -1
  43. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/managed-agents/README.md +10 -12
  44. package/bundled/upstream/anthropic-skills/skills/frontend-design/SKILL.md +39 -26
  45. package/bundled/upstream/ecc/.omc-source/bundle.json +2 -2
  46. package/bundled/upstream/ecc/.omc-source/manifests/.claude-plugin/marketplace.json +2 -2
  47. package/bundled/upstream/ecc/.omc-source/provenance.json +602 -550
  48. package/bundled/upstream/ecc/agents/agent-evaluator.md +206 -0
  49. package/bundled/upstream/ecc/agents/performance-optimizer.md +9 -9
  50. package/bundled/upstream/ecc/agents/php-reviewer.md +109 -0
  51. package/bundled/upstream/ecc/agents/spec-miner.md +217 -0
  52. package/bundled/upstream/ecc/agents/vue-reviewer.md +206 -0
  53. package/bundled/upstream/ecc/commands/cost-report.md +58 -84
  54. package/bundled/upstream/ecc/commands/epic-claim.md +26 -0
  55. package/bundled/upstream/ecc/commands/epic-decompose.md +23 -0
  56. package/bundled/upstream/ecc/commands/epic-publish.md +23 -0
  57. package/bundled/upstream/ecc/commands/epic-review.md +23 -0
  58. package/bundled/upstream/ecc/commands/epic-sync.md +23 -0
  59. package/bundled/upstream/ecc/commands/epic-unblock.md +22 -0
  60. package/bundled/upstream/ecc/commands/epic-validate.md +22 -0
  61. package/bundled/upstream/ecc/commands/instinct-status.md +8 -8
  62. package/bundled/upstream/ecc/commands/multi-backend.md +2 -0
  63. package/bundled/upstream/ecc/commands/multi-execute.md +2 -0
  64. package/bundled/upstream/ecc/commands/multi-frontend.md +2 -0
  65. package/bundled/upstream/ecc/commands/multi-plan.md +2 -0
  66. package/bundled/upstream/ecc/commands/multi-workflow.md +2 -0
  67. package/bundled/upstream/ecc/commands/orch-add-feature.md +36 -0
  68. package/bundled/upstream/ecc/commands/orch-build-mvp.md +36 -0
  69. package/bundled/upstream/ecc/commands/orch-change-feature.md +38 -0
  70. package/bundled/upstream/ecc/commands/orch-fix-defect.md +38 -0
  71. package/bundled/upstream/ecc/commands/orch-refine-code.md +39 -0
  72. package/bundled/upstream/ecc/commands/quality-gate.md +34 -16
  73. package/bundled/upstream/ecc/commands/vue-review.md +174 -0
  74. package/bundled/upstream/ecc/skills/accessibility/SKILL.md +2 -1
  75. package/bundled/upstream/ecc/skills/agent-architecture-audit/SKILL.md +2 -1
  76. package/bundled/upstream/ecc/skills/agent-eval/SKILL.md +2 -1
  77. package/bundled/upstream/ecc/skills/agent-harness-construction/SKILL.md +2 -1
  78. package/bundled/upstream/ecc/skills/agent-introspection-debugging/SKILL.md +2 -1
  79. package/bundled/upstream/ecc/skills/agent-payment-x402/SKILL.md +2 -1
  80. package/bundled/upstream/ecc/skills/agent-self-evaluation/SKILL.md +182 -0
  81. package/bundled/upstream/ecc/skills/agent-self-evaluation/examples/high-score-example.md +87 -0
  82. package/bundled/upstream/ecc/skills/agent-self-evaluation/examples/low-score-example.md +86 -0
  83. package/bundled/upstream/ecc/skills/agent-self-evaluation/references/evaluation-criteria.md +71 -0
  84. package/bundled/upstream/ecc/skills/agent-self-evaluation/references/hook-integration.md +64 -0
  85. package/bundled/upstream/ecc/skills/agent-self-evaluation/scripts/evaluate.py +408 -0
  86. package/bundled/upstream/ecc/skills/agent-self-evaluation/templates/evaluation-report.md +86 -0
  87. package/bundled/upstream/ecc/skills/agent-sort/SKILL.md +2 -1
  88. package/bundled/upstream/ecc/skills/agentic-engineering/SKILL.md +2 -1
  89. package/bundled/upstream/ecc/skills/agentic-os/SKILL.md +2 -1
  90. package/bundled/upstream/ecc/skills/ai-first-engineering/SKILL.md +2 -1
  91. package/bundled/upstream/ecc/skills/ai-regression-testing/SKILL.md +2 -1
  92. package/bundled/upstream/ecc/skills/android-clean-architecture/SKILL.md +2 -1
  93. package/bundled/upstream/ecc/skills/angular-developer/SKILL.md +2 -1
  94. package/bundled/upstream/ecc/skills/api-connector-builder/SKILL.md +2 -1
  95. package/bundled/upstream/ecc/skills/api-design/SKILL.md +2 -1
  96. package/bundled/upstream/ecc/skills/architecture-decision-records/SKILL.md +2 -1
  97. package/bundled/upstream/ecc/skills/article-writing/SKILL.md +2 -1
  98. package/bundled/upstream/ecc/skills/automation-audit-ops/SKILL.md +2 -1
  99. package/bundled/upstream/ecc/skills/autonomous-agent-harness/SKILL.md +2 -1
  100. package/bundled/upstream/ecc/skills/autonomous-loops/SKILL.md +2 -1
  101. package/bundled/upstream/ecc/skills/backend-patterns/SKILL.md +2 -1
  102. package/bundled/upstream/ecc/skills/benchmark/SKILL.md +2 -1
  103. package/bundled/upstream/ecc/skills/benchmark-methodology/SKILL.md +190 -0
  104. package/bundled/upstream/ecc/skills/benchmark-optimization-loop/SKILL.md +2 -1
  105. package/bundled/upstream/ecc/skills/blender-motion-state-inspection/SKILL.md +2 -1
  106. package/bundled/upstream/ecc/skills/blueprint/SKILL.md +2 -1
  107. package/bundled/upstream/ecc/skills/brand-discovery/SKILL.md +145 -0
  108. package/bundled/upstream/ecc/skills/brand-discovery/references/10_purpose-why.md +40 -0
  109. package/bundled/upstream/ecc/skills/brand-discovery/references/20_positioning.md +44 -0
  110. package/bundled/upstream/ecc/skills/brand-discovery/references/30_audience-niche.md +52 -0
  111. package/bundled/upstream/ecc/skills/brand-discovery/references/40_personality-archetype.md +57 -0
  112. package/bundled/upstream/ecc/skills/brand-discovery/references/50_voice-tone.md +59 -0
  113. package/bundled/upstream/ecc/skills/brand-discovery/references/60_narrative-story.md +50 -0
  114. package/bundled/upstream/ecc/skills/brand-discovery/references/70_founder-tension.md +49 -0
  115. package/bundled/upstream/ecc/skills/brand-discovery/references/90_SYNTHESIS.md +133 -0
  116. package/bundled/upstream/ecc/skills/brand-voice/SKILL.md +2 -1
  117. package/bundled/upstream/ecc/skills/browser-qa/SKILL.md +22 -4
  118. package/bundled/upstream/ecc/skills/bun-runtime/SKILL.md +2 -1
  119. package/bundled/upstream/ecc/skills/canary-watch/SKILL.md +2 -1
  120. package/bundled/upstream/ecc/skills/carrier-relationship-management/SKILL.md +1 -1
  121. package/bundled/upstream/ecc/skills/cisco-ios-patterns/SKILL.md +2 -1
  122. package/bundled/upstream/ecc/skills/ck/SKILL.md +2 -1
  123. package/bundled/upstream/ecc/skills/claude-devfleet/SKILL.md +11 -2
  124. package/bundled/upstream/ecc/skills/click-path-audit/SKILL.md +2 -1
  125. package/bundled/upstream/ecc/skills/clickhouse-io/SKILL.md +2 -1
  126. package/bundled/upstream/ecc/skills/code-tour/SKILL.md +2 -1
  127. package/bundled/upstream/ecc/skills/codebase-onboarding/SKILL.md +2 -1
  128. package/bundled/upstream/ecc/skills/codehealth-mcp/SKILL.md +167 -0
  129. package/bundled/upstream/ecc/skills/coding-standards/SKILL.md +4 -2
  130. package/bundled/upstream/ecc/skills/competitive-platform-analysis/SKILL.md +214 -0
  131. package/bundled/upstream/ecc/skills/competitive-report-structure/SKILL.md +162 -0
  132. package/bundled/upstream/ecc/skills/compose-multiplatform-patterns/SKILL.md +2 -1
  133. package/bundled/upstream/ecc/skills/config-gc/SKILL.md +120 -0
  134. package/bundled/upstream/ecc/skills/configure-ecc/SKILL.md +2 -1
  135. package/bundled/upstream/ecc/skills/connections-optimizer/SKILL.md +2 -1
  136. package/bundled/upstream/ecc/skills/content-engine/SKILL.md +2 -1
  137. package/bundled/upstream/ecc/skills/content-hash-cache-pattern/SKILL.md +2 -1
  138. package/bundled/upstream/ecc/skills/context-budget/SKILL.md +2 -1
  139. package/bundled/upstream/ecc/skills/continuous-agent-loop/SKILL.md +2 -1
  140. package/bundled/upstream/ecc/skills/continuous-learning/SKILL.md +2 -1
  141. package/bundled/upstream/ecc/skills/continuous-learning-v2/SKILL.md +2 -1
  142. package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +14 -1
  143. package/bundled/upstream/ecc/skills/continuous-learning-v2/hooks/observe.sh +31 -7
  144. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +90 -2
  145. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +27 -0
  146. package/bundled/upstream/ecc/skills/cost-aware-llm-pipeline/SKILL.md +2 -1
  147. package/bundled/upstream/ecc/skills/cost-tracking/SKILL.md +58 -108
  148. package/bundled/upstream/ecc/skills/council/SKILL.md +2 -1
  149. package/bundled/upstream/ecc/skills/cpp-coding-standards/SKILL.md +2 -1
  150. package/bundled/upstream/ecc/skills/cpp-testing/SKILL.md +2 -1
  151. package/bundled/upstream/ecc/skills/crosspost/SKILL.md +2 -1
  152. package/bundled/upstream/ecc/skills/csharp-testing/SKILL.md +2 -1
  153. package/bundled/upstream/ecc/skills/customer-billing-ops/SKILL.md +2 -1
  154. package/bundled/upstream/ecc/skills/customs-trade-compliance/SKILL.md +1 -1
  155. package/bundled/upstream/ecc/skills/dart-flutter-patterns/SKILL.md +2 -1
  156. package/bundled/upstream/ecc/skills/dashboard-builder/SKILL.md +2 -1
  157. package/bundled/upstream/ecc/skills/data-scraper-agent/SKILL.md +2 -1
  158. package/bundled/upstream/ecc/skills/data-throughput-accelerator/SKILL.md +2 -1
  159. package/bundled/upstream/ecc/skills/database-migrations/SKILL.md +2 -1
  160. package/bundled/upstream/ecc/skills/deep-research/SKILL.md +2 -1
  161. package/bundled/upstream/ecc/skills/defi-amm-security/SKILL.md +2 -1
  162. package/bundled/upstream/ecc/skills/deployment-patterns/SKILL.md +2 -1
  163. package/bundled/upstream/ecc/skills/design-system/SKILL.md +2 -1
  164. package/bundled/upstream/ecc/skills/django-celery/SKILL.md +3 -2
  165. package/bundled/upstream/ecc/skills/django-patterns/SKILL.md +2 -1
  166. package/bundled/upstream/ecc/skills/django-security/SKILL.md +2 -1
  167. package/bundled/upstream/ecc/skills/django-tdd/SKILL.md +2 -1
  168. package/bundled/upstream/ecc/skills/django-verification/SKILL.md +2 -1
  169. package/bundled/upstream/ecc/skills/dmux-workflows/SKILL.md +2 -1
  170. package/bundled/upstream/ecc/skills/docker-patterns/SKILL.md +2 -1
  171. package/bundled/upstream/ecc/skills/documentation-lookup/SKILL.md +2 -1
  172. package/bundled/upstream/ecc/skills/dotnet-patterns/SKILL.md +2 -1
  173. package/bundled/upstream/ecc/skills/dynamic-workflow-mode/SKILL.md +2 -1
  174. package/bundled/upstream/ecc/skills/e2e-testing/SKILL.md +2 -1
  175. package/bundled/upstream/ecc/skills/ecc-guide/SKILL.md +2 -1
  176. package/bundled/upstream/ecc/skills/ecc-tools-cost-audit/SKILL.md +2 -1
  177. package/bundled/upstream/ecc/skills/email-ops/SKILL.md +2 -1
  178. package/bundled/upstream/ecc/skills/energy-procurement/SKILL.md +1 -1
  179. package/bundled/upstream/ecc/skills/enterprise-agent-ops/SKILL.md +2 -1
  180. package/bundled/upstream/ecc/skills/error-handling/SKILL.md +2 -1
  181. package/bundled/upstream/ecc/skills/eval-harness/SKILL.md +2 -1
  182. package/bundled/upstream/ecc/skills/evm-token-decimals/SKILL.md +2 -1
  183. package/bundled/upstream/ecc/skills/exa-search/SKILL.md +2 -1
  184. package/bundled/upstream/ecc/skills/fal-ai-media/SKILL.md +2 -1
  185. package/bundled/upstream/ecc/skills/fastapi-patterns/SKILL.md +375 -188
  186. package/bundled/upstream/ecc/skills/finance-billing-ops/SKILL.md +2 -1
  187. package/bundled/upstream/ecc/skills/flox-environments/SKILL.md +3 -2
  188. package/bundled/upstream/ecc/skills/flutter-dart-code-review/SKILL.md +2 -1
  189. package/bundled/upstream/ecc/skills/frontend-a11y/SKILL.md +3 -3
  190. package/bundled/upstream/ecc/skills/frontend-design-direction/SKILL.md +2 -1
  191. package/bundled/upstream/ecc/skills/frontend-patterns/SKILL.md +23 -8
  192. package/bundled/upstream/ecc/skills/frontend-slides/SKILL.md +2 -1
  193. package/bundled/upstream/ecc/skills/frontend-slides/scripts/export-pdf.sh +1 -1
  194. package/bundled/upstream/ecc/skills/fsharp-testing/SKILL.md +2 -1
  195. package/bundled/upstream/ecc/skills/gan-style-harness/SKILL.md +2 -1
  196. package/bundled/upstream/ecc/skills/gateguard/SKILL.md +9 -1
  197. package/bundled/upstream/ecc/skills/generating-python-installer/SKILL.md +820 -0
  198. package/bundled/upstream/ecc/skills/git-workflow/SKILL.md +2 -1
  199. package/bundled/upstream/ecc/skills/github-ops/SKILL.md +2 -1
  200. package/bundled/upstream/ecc/skills/golang-patterns/SKILL.md +2 -1
  201. package/bundled/upstream/ecc/skills/golang-testing/SKILL.md +2 -1
  202. package/bundled/upstream/ecc/skills/google-workspace-ops/SKILL.md +2 -1
  203. package/bundled/upstream/ecc/skills/healthcare-cdss-patterns/SKILL.md +2 -1
  204. package/bundled/upstream/ecc/skills/healthcare-emr-patterns/SKILL.md +2 -1
  205. package/bundled/upstream/ecc/skills/healthcare-eval-harness/SKILL.md +2 -1
  206. package/bundled/upstream/ecc/skills/healthcare-phi-compliance/SKILL.md +2 -1
  207. package/bundled/upstream/ecc/skills/hermes-imports/SKILL.md +2 -1
  208. package/bundled/upstream/ecc/skills/hexagonal-architecture/SKILL.md +2 -1
  209. package/bundled/upstream/ecc/skills/hipaa-compliance/SKILL.md +2 -1
  210. package/bundled/upstream/ecc/skills/homelab-network-readiness/SKILL.md +2 -1
  211. package/bundled/upstream/ecc/skills/homelab-network-setup/SKILL.md +2 -1
  212. package/bundled/upstream/ecc/skills/homelab-pihole-dns/SKILL.md +10 -9
  213. package/bundled/upstream/ecc/skills/homelab-vlan-segmentation/SKILL.md +2 -1
  214. package/bundled/upstream/ecc/skills/homelab-wireguard-vpn/SKILL.md +4 -3
  215. package/bundled/upstream/ecc/skills/inherit-legacy-style/SKILL.md +157 -0
  216. package/bundled/upstream/ecc/skills/intent-driven-development/SKILL.md +360 -0
  217. package/bundled/upstream/ecc/skills/inventory-demand-planning/SKILL.md +1 -1
  218. package/bundled/upstream/ecc/skills/investor-materials/SKILL.md +2 -1
  219. package/bundled/upstream/ecc/skills/investor-outreach/SKILL.md +2 -1
  220. package/bundled/upstream/ecc/skills/ios-icon-gen/SKILL.md +2 -1
  221. package/bundled/upstream/ecc/skills/iterative-retrieval/SKILL.md +2 -1
  222. package/bundled/upstream/ecc/skills/ito-basket-compare/SKILL.md +2 -1
  223. package/bundled/upstream/ecc/skills/ito-data-atlas-agent/SKILL.md +2 -1
  224. package/bundled/upstream/ecc/skills/ito-market-intelligence/SKILL.md +2 -1
  225. package/bundled/upstream/ecc/skills/ito-trade-planner/SKILL.md +2 -1
  226. package/bundled/upstream/ecc/skills/java-coding-standards/SKILL.md +2 -1
  227. package/bundled/upstream/ecc/skills/jira-integration/SKILL.md +17 -7
  228. package/bundled/upstream/ecc/skills/jpa-patterns/SKILL.md +2 -1
  229. package/bundled/upstream/ecc/skills/knowledge-ops/SKILL.md +2 -1
  230. package/bundled/upstream/ecc/skills/kotlin-coroutines-flows/SKILL.md +2 -1
  231. package/bundled/upstream/ecc/skills/kotlin-exposed-patterns/SKILL.md +2 -1
  232. package/bundled/upstream/ecc/skills/kotlin-ktor-patterns/SKILL.md +2 -1
  233. package/bundled/upstream/ecc/skills/kotlin-patterns/SKILL.md +2 -1
  234. package/bundled/upstream/ecc/skills/kotlin-testing/SKILL.md +2 -1
  235. package/bundled/upstream/ecc/skills/kubernetes-patterns/SKILL.md +756 -0
  236. package/bundled/upstream/ecc/skills/laravel-patterns/SKILL.md +2 -1
  237. package/bundled/upstream/ecc/skills/laravel-plugin-discovery/SKILL.md +2 -1
  238. package/bundled/upstream/ecc/skills/laravel-security/SKILL.md +826 -163
  239. package/bundled/upstream/ecc/skills/laravel-tdd/SKILL.md +541 -149
  240. package/bundled/upstream/ecc/skills/laravel-verification/SKILL.md +2 -1
  241. package/bundled/upstream/ecc/skills/latency-critical-systems/SKILL.md +2 -1
  242. package/bundled/upstream/ecc/skills/lead-intelligence/SKILL.md +2 -1
  243. package/bundled/upstream/ecc/skills/llm-trading-agent-security/SKILL.md +2 -1
  244. package/bundled/upstream/ecc/skills/logistics-exception-management/SKILL.md +1 -1
  245. package/bundled/upstream/ecc/skills/make-interfaces-feel-better/SKILL.md +2 -1
  246. package/bundled/upstream/ecc/skills/manim-video/SKILL.md +2 -1
  247. package/bundled/upstream/ecc/skills/market-research/SKILL.md +2 -1
  248. package/bundled/upstream/ecc/skills/marketing-campaign/SKILL.md +2 -1
  249. package/bundled/upstream/ecc/skills/mcp-server-patterns/SKILL.md +2 -1
  250. package/bundled/upstream/ecc/skills/messages-ops/SKILL.md +2 -1
  251. package/bundled/upstream/ecc/skills/ml-adoption-playbook/SKILL.md +57 -0
  252. package/bundled/upstream/ecc/skills/mle-workflow/SKILL.md +2 -1
  253. package/bundled/upstream/ecc/skills/motion-patterns/SKILL.md +1 -2
  254. package/bundled/upstream/ecc/skills/motion-ui/SKILL.md +2 -1
  255. package/bundled/upstream/ecc/skills/mysql-patterns/SKILL.md +2 -1
  256. package/bundled/upstream/ecc/skills/nanoclaw-repl/SKILL.md +2 -1
  257. package/bundled/upstream/ecc/skills/nestjs-patterns/SKILL.md +2 -1
  258. package/bundled/upstream/ecc/skills/netmiko-ssh-automation/SKILL.md +2 -1
  259. package/bundled/upstream/ecc/skills/network-bgp-diagnostics/SKILL.md +2 -1
  260. package/bundled/upstream/ecc/skills/network-config-validation/SKILL.md +2 -1
  261. package/bundled/upstream/ecc/skills/network-interface-health/SKILL.md +2 -1
  262. package/bundled/upstream/ecc/skills/nextjs-turbopack/SKILL.md +2 -1
  263. package/bundled/upstream/ecc/skills/nodejs-keccak256/SKILL.md +2 -1
  264. package/bundled/upstream/ecc/skills/nutrient-document-processing/SKILL.md +2 -1
  265. package/bundled/upstream/ecc/skills/nuxt4-patterns/SKILL.md +2 -1
  266. package/bundled/upstream/ecc/skills/openclaw-persona-forge/SKILL.md +2 -1
  267. package/bundled/upstream/ecc/skills/opensource-pipeline/SKILL.md +2 -1
  268. package/bundled/upstream/ecc/skills/orch-add-feature/SKILL.md +45 -0
  269. package/bundled/upstream/ecc/skills/orch-build-mvp/SKILL.md +49 -0
  270. package/bundled/upstream/ecc/skills/orch-change-feature/SKILL.md +43 -0
  271. package/bundled/upstream/ecc/skills/orch-fix-defect/SKILL.md +43 -0
  272. package/bundled/upstream/ecc/skills/orch-pipeline/SKILL.md +121 -0
  273. package/bundled/upstream/ecc/skills/orch-refine-code/SKILL.md +44 -0
  274. package/bundled/upstream/ecc/skills/parallel-execution-optimizer/SKILL.md +2 -1
  275. package/bundled/upstream/ecc/skills/perl-patterns/SKILL.md +2 -1
  276. package/bundled/upstream/ecc/skills/perl-security/SKILL.md +2 -1
  277. package/bundled/upstream/ecc/skills/perl-testing/SKILL.md +2 -1
  278. package/bundled/upstream/ecc/skills/plan-orchestrate/SKILL.md +2 -1
  279. package/bundled/upstream/ecc/skills/plankton-code-quality/SKILL.md +2 -1
  280. package/bundled/upstream/ecc/skills/postgres-patterns/SKILL.md +2 -1
  281. package/bundled/upstream/ecc/skills/prediction-market-oracle-research/SKILL.md +2 -1
  282. package/bundled/upstream/ecc/skills/prediction-market-risk-review/SKILL.md +2 -1
  283. package/bundled/upstream/ecc/skills/prisma-patterns/SKILL.md +2 -1
  284. package/bundled/upstream/ecc/skills/product-capability/SKILL.md +2 -1
  285. package/bundled/upstream/ecc/skills/product-lens/SKILL.md +2 -1
  286. package/bundled/upstream/ecc/skills/production-audit/SKILL.md +2 -1
  287. package/bundled/upstream/ecc/skills/production-scheduling/SKILL.md +1 -1
  288. package/bundled/upstream/ecc/skills/project-flow-ops/SKILL.md +2 -1
  289. package/bundled/upstream/ecc/skills/prompt-optimizer/SKILL.md +1 -1
  290. package/bundled/upstream/ecc/skills/python-patterns/SKILL.md +4 -3
  291. package/bundled/upstream/ecc/skills/python-testing/SKILL.md +2 -1
  292. package/bundled/upstream/ecc/skills/pytorch-patterns/SKILL.md +2 -1
  293. package/bundled/upstream/ecc/skills/quality-nonconformance/SKILL.md +1 -1
  294. package/bundled/upstream/ecc/skills/quarkus-patterns/SKILL.md +51 -50
  295. package/bundled/upstream/ecc/skills/quarkus-security/SKILL.md +25 -24
  296. package/bundled/upstream/ecc/skills/quarkus-tdd/SKILL.md +73 -72
  297. package/bundled/upstream/ecc/skills/quarkus-verification/SKILL.md +8 -7
  298. package/bundled/upstream/ecc/skills/ralphinho-rfc-pipeline/SKILL.md +2 -1
  299. package/bundled/upstream/ecc/skills/react-patterns/SKILL.md +2 -1
  300. package/bundled/upstream/ecc/skills/react-performance/SKILL.md +2 -1
  301. package/bundled/upstream/ecc/skills/react-testing/SKILL.md +2 -1
  302. package/bundled/upstream/ecc/skills/recsys-pipeline-architect/SKILL.md +2 -1
  303. package/bundled/upstream/ecc/skills/recursive-decision-ledger/SKILL.md +2 -1
  304. package/bundled/upstream/ecc/skills/redis-patterns/SKILL.md +2 -1
  305. package/bundled/upstream/ecc/skills/regex-vs-llm-structured-text/SKILL.md +2 -1
  306. package/bundled/upstream/ecc/skills/repo-scan/SKILL.md +64 -63
  307. package/bundled/upstream/ecc/skills/research-ops/SKILL.md +2 -1
  308. package/bundled/upstream/ecc/skills/returns-reverse-logistics/SKILL.md +1 -1
  309. package/bundled/upstream/ecc/skills/rules-distill/SKILL.md +2 -1
  310. package/bundled/upstream/ecc/skills/rust-patterns/SKILL.md +2 -1
  311. package/bundled/upstream/ecc/skills/rust-testing/SKILL.md +2 -1
  312. package/bundled/upstream/ecc/skills/safety-guard/SKILL.md +2 -1
  313. package/bundled/upstream/ecc/skills/santa-method/SKILL.md +2 -1
  314. package/bundled/upstream/ecc/skills/scientific-db-pubmed-database/SKILL.md +2 -1
  315. package/bundled/upstream/ecc/skills/scientific-db-uspto-database/SKILL.md +2 -1
  316. package/bundled/upstream/ecc/skills/scientific-pkg-gget/SKILL.md +2 -1
  317. package/bundled/upstream/ecc/skills/scientific-thinking-literature-review/SKILL.md +2 -1
  318. package/bundled/upstream/ecc/skills/scientific-thinking-scholar-evaluation/SKILL.md +2 -1
  319. package/bundled/upstream/ecc/skills/search-first/SKILL.md +2 -1
  320. package/bundled/upstream/ecc/skills/security-bounty-hunter/SKILL.md +2 -1
  321. package/bundled/upstream/ecc/skills/security-review/SKILL.md +2 -1
  322. package/bundled/upstream/ecc/skills/security-scan/SKILL.md +2 -1
  323. package/bundled/upstream/ecc/skills/seo/SKILL.md +2 -1
  324. package/bundled/upstream/ecc/skills/skill-comply/SKILL.md +2 -1
  325. package/bundled/upstream/ecc/skills/skill-comply/scripts/runner.py +8 -0
  326. package/bundled/upstream/ecc/skills/skill-scout/SKILL.md +2 -1
  327. package/bundled/upstream/ecc/skills/skill-stocktake/SKILL.md +2 -1
  328. package/bundled/upstream/ecc/skills/social-graph-ranker/SKILL.md +2 -1
  329. package/bundled/upstream/ecc/skills/social-publisher/SKILL.md +17 -2
  330. package/bundled/upstream/ecc/skills/springboot-patterns/SKILL.md +2 -1
  331. package/bundled/upstream/ecc/skills/springboot-security/SKILL.md +2 -1
  332. package/bundled/upstream/ecc/skills/springboot-tdd/SKILL.md +2 -1
  333. package/bundled/upstream/ecc/skills/springboot-verification/SKILL.md +2 -1
  334. package/bundled/upstream/ecc/skills/strategic-compact/SKILL.md +10 -5
  335. package/bundled/upstream/ecc/skills/swift-actor-persistence/SKILL.md +2 -1
  336. package/bundled/upstream/ecc/skills/swift-protocol-di-testing/SKILL.md +2 -1
  337. package/bundled/upstream/ecc/skills/taste/SKILL.md +264 -0
  338. package/bundled/upstream/ecc/skills/taste/references/genre-taxonomy.md +87 -0
  339. package/bundled/upstream/ecc/skills/tdd-workflow/SKILL.md +64 -1
  340. package/bundled/upstream/ecc/skills/team-agent-orchestration/SKILL.md +2 -1
  341. package/bundled/upstream/ecc/skills/team-builder/SKILL.md +2 -1
  342. package/bundled/upstream/ecc/skills/terminal-ops/SKILL.md +2 -1
  343. package/bundled/upstream/ecc/skills/tinystruct-patterns/SKILL.md +77 -1
  344. package/bundled/upstream/ecc/skills/token-budget-advisor/SKILL.md +2 -1
  345. package/bundled/upstream/ecc/skills/ui-demo/SKILL.md +2 -1
  346. package/bundled/upstream/ecc/skills/ui-to-vue/SKILL.md +2 -1
  347. package/bundled/upstream/ecc/skills/uncloud/SKILL.md +2 -1
  348. package/bundled/upstream/ecc/skills/unified-notifications-ops/SKILL.md +2 -1
  349. package/bundled/upstream/ecc/skills/verification-loop/SKILL.md +2 -1
  350. package/bundled/upstream/ecc/skills/video-editing/SKILL.md +2 -1
  351. package/bundled/upstream/ecc/skills/videodb/SKILL.md +2 -1
  352. package/bundled/upstream/ecc/skills/vite-patterns/SKILL.md +2 -1
  353. package/bundled/upstream/ecc/skills/vue-patterns/SKILL.md +471 -0
  354. package/bundled/upstream/ecc/skills/windows-desktop-e2e/SKILL.md +9 -8
  355. package/bundled/upstream/ecc/skills/workspace-surface-audit/SKILL.md +2 -1
  356. package/bundled/upstream/ecc/skills/x-api/SKILL.md +2 -1
  357. package/bundled/upstream/impeccable/.omc-source/bundle.json +20 -0
  358. package/bundled/upstream/impeccable/.omc-source/provenance.json +110 -0
  359. package/bundled/upstream/impeccable/agents/impeccable-manual-edit-applier.md +97 -0
  360. package/bundled/upstream/impeccable/skills/impeccable/SKILL.md +168 -0
  361. package/bundled/upstream/impeccable/skills/impeccable/reference/adapt.md +311 -0
  362. package/bundled/upstream/impeccable/skills/impeccable/reference/animate.md +201 -0
  363. package/bundled/upstream/impeccable/skills/impeccable/reference/audit.md +133 -0
  364. package/bundled/upstream/impeccable/skills/impeccable/reference/bolder.md +113 -0
  365. package/bundled/upstream/impeccable/skills/impeccable/reference/brand.md +108 -0
  366. package/bundled/upstream/impeccable/skills/impeccable/reference/clarify.md +288 -0
  367. package/bundled/upstream/impeccable/skills/impeccable/reference/codex.md +105 -0
  368. package/bundled/upstream/impeccable/skills/impeccable/reference/colorize.md +257 -0
  369. package/bundled/upstream/impeccable/skills/impeccable/reference/craft.md +123 -0
  370. package/bundled/upstream/impeccable/skills/impeccable/reference/critique.md +767 -0
  371. package/bundled/upstream/impeccable/skills/impeccable/reference/delight.md +302 -0
  372. package/bundled/upstream/impeccable/skills/impeccable/reference/distill.md +111 -0
  373. package/bundled/upstream/impeccable/skills/impeccable/reference/document.md +429 -0
  374. package/bundled/upstream/impeccable/skills/impeccable/reference/extract.md +69 -0
  375. package/bundled/upstream/impeccable/skills/impeccable/reference/harden.md +347 -0
  376. package/bundled/upstream/impeccable/skills/impeccable/reference/hooks.md +90 -0
  377. package/bundled/upstream/impeccable/skills/impeccable/reference/init.md +172 -0
  378. package/bundled/upstream/impeccable/skills/impeccable/reference/interaction-design.md +189 -0
  379. package/bundled/upstream/impeccable/skills/impeccable/reference/layout.md +161 -0
  380. package/bundled/upstream/impeccable/skills/impeccable/reference/live.md +718 -0
  381. package/bundled/upstream/impeccable/skills/impeccable/reference/onboard.md +234 -0
  382. package/bundled/upstream/impeccable/skills/impeccable/reference/optimize.md +258 -0
  383. package/bundled/upstream/impeccable/skills/impeccable/reference/overdrive.md +130 -0
  384. package/bundled/upstream/impeccable/skills/impeccable/reference/polish.md +241 -0
  385. package/bundled/upstream/impeccable/skills/impeccable/reference/product.md +60 -0
  386. package/bundled/upstream/impeccable/skills/impeccable/reference/quieter.md +99 -0
  387. package/bundled/upstream/impeccable/skills/impeccable/reference/shape.md +165 -0
  388. package/bundled/upstream/impeccable/skills/impeccable/reference/typeset.md +279 -0
  389. package/bundled/upstream/impeccable/skills/impeccable/scripts/command-metadata.json +94 -0
  390. package/bundled/upstream/impeccable/skills/impeccable/scripts/context-signals.mjs +225 -0
  391. package/bundled/upstream/impeccable/skills/impeccable/scripts/context.mjs +961 -0
  392. package/bundled/upstream/impeccable/skills/impeccable/scripts/critique-storage.mjs +242 -0
  393. package/bundled/upstream/impeccable/skills/impeccable/scripts/detect-csp.mjs +198 -0
  394. package/bundled/upstream/impeccable/skills/impeccable/scripts/detect.mjs +21 -0
  395. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/browser/injected/index.mjs +1937 -0
  396. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/cli/main.mjs +290 -0
  397. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/design-system.mjs +750 -0
  398. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +5138 -0
  399. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/detect-antipatterns.mjs +50 -0
  400. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +277 -0
  401. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +568 -0
  402. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1015 -0
  403. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +234 -0
  404. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
  405. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/findings.mjs +12 -0
  406. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
  407. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
  408. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/registry/antipatterns.mjs +448 -0
  409. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/rules/checks.mjs +2671 -0
  410. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
  411. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
  412. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
  413. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
  414. package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-admin.mjs +661 -0
  415. package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-before-edit.mjs +476 -0
  416. package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-lib.mjs +1632 -0
  417. package/bundled/upstream/impeccable/skills/impeccable/scripts/hook.mjs +61 -0
  418. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/design-parser.mjs +842 -0
  419. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/impeccable-config.mjs +638 -0
  420. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/impeccable-paths.mjs +128 -0
  421. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
  422. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/target-args.mjs +42 -0
  423. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/browser-script-parts.mjs +49 -0
  424. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/completion.mjs +19 -0
  425. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/event-validation.mjs +137 -0
  426. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
  427. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
  428. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
  429. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
  430. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/session-store.mjs +289 -0
  431. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/svelte-component.mjs +826 -0
  432. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/sveltekit-adapter.mjs +274 -0
  433. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/ui-core.mjs +180 -0
  434. package/bundled/upstream/impeccable/skills/impeccable/scripts/live/vocabulary.mjs +36 -0
  435. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-accept.mjs +812 -0
  436. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser-dom.js +146 -0
  437. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser-session.js +123 -0
  438. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser.js +11173 -0
  439. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
  440. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-complete.mjs +75 -0
  441. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
  442. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
  443. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-inject.mjs +583 -0
  444. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-insert.mjs +272 -0
  445. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
  446. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-poll.mjs +384 -0
  447. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-resume.mjs +94 -0
  448. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-server.mjs +1135 -0
  449. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-status.mjs +61 -0
  450. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-target.mjs +30 -0
  451. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-wrap.mjs +894 -0
  452. package/bundled/upstream/impeccable/skills/impeccable/scripts/live.mjs +297 -0
  453. package/bundled/upstream/impeccable/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
  454. package/bundled/upstream/impeccable/skills/impeccable/scripts/palette.mjs +633 -0
  455. package/bundled/upstream/impeccable/skills/impeccable/scripts/pin.mjs +214 -0
  456. package/bundled/upstream/oh-my-claudecode/.omc-source/bundle.json +2 -2
  457. package/bundled/upstream/oh-my-claudecode/.omc-source/provenance.json +103 -103
  458. package/bundled/upstream/oh-my-claudecode/agents/analyst.md +6 -0
  459. package/bundled/upstream/oh-my-claudecode/agents/architect.md +6 -0
  460. package/bundled/upstream/oh-my-claudecode/agents/code-reviewer.md +6 -0
  461. package/bundled/upstream/oh-my-claudecode/agents/critic.md +6 -0
  462. package/bundled/upstream/oh-my-claudecode/agents/debugger.md +6 -0
  463. package/bundled/upstream/oh-my-claudecode/agents/security-reviewer.md +6 -0
  464. package/bundled/upstream/oh-my-claudecode/agents/tracer.md +6 -0
  465. package/bundled/upstream/oh-my-claudecode/agents/verifier.md +7 -0
  466. package/bundled/upstream/oh-my-claudecode/hooks/hooks.json +9 -2
  467. package/bundled/upstream/oh-my-claudecode/skills/ask/SKILL.md +15 -4
  468. package/bundled/upstream/oh-my-claudecode/skills/autopilot/SKILL.md +30 -1
  469. package/bundled/upstream/oh-my-claudecode/skills/cancel/SKILL.md +29 -35
  470. package/bundled/upstream/oh-my-claudecode/skills/ccg/SKILL.md +20 -9
  471. package/bundled/upstream/oh-my-claudecode/skills/configure-notifications/SKILL.md +2 -2
  472. package/bundled/upstream/oh-my-claudecode/skills/omc-reference/SKILL.md +6 -4
  473. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/02-configure.md +1 -1
  474. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/03-integrations.md +2 -1
  475. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/04-welcome.md +2 -2
  476. package/bundled/upstream/oh-my-claudecode/skills/omc-teams/SKILL.md +29 -18
  477. package/bundled/upstream/oh-my-claudecode/skills/team/SKILL.md +127 -165
  478. package/bundled/upstream/superpowers/.omc-source/bundle.json +2 -2
  479. package/bundled/upstream/superpowers/.omc-source/provenance.json +59 -52
  480. package/bundled/upstream/superpowers/hooks/hooks-codex.json +16 -0
  481. package/bundled/upstream/superpowers/hooks/session-start +4 -12
  482. package/bundled/upstream/superpowers/hooks/session-start-codex +26 -0
  483. package/bundled/upstream/superpowers/skills/brainstorming/SKILL.md +5 -10
  484. package/bundled/upstream/superpowers/skills/brainstorming/scripts/frame-template.html +25 -26
  485. package/bundled/upstream/superpowers/skills/brainstorming/scripts/helper.js +101 -22
  486. package/bundled/upstream/superpowers/skills/brainstorming/scripts/server.cjs +399 -30
  487. package/bundled/upstream/superpowers/skills/brainstorming/scripts/start-server.sh +70 -9
  488. package/bundled/upstream/superpowers/skills/brainstorming/scripts/stop-server.sh +66 -2
  489. package/bundled/upstream/superpowers/skills/brainstorming/spec-document-reviewer-prompt.md +1 -1
  490. package/bundled/upstream/superpowers/skills/brainstorming/visual-companion.md +33 -22
  491. package/bundled/upstream/superpowers/skills/dispatching-parallel-agents/SKILL.md +9 -6
  492. package/bundled/upstream/superpowers/skills/executing-plans/SKILL.md +2 -2
  493. package/bundled/upstream/superpowers/skills/finishing-a-development-branch/SKILL.md +2 -12
  494. package/bundled/upstream/superpowers/skills/receiving-code-review/SKILL.md +2 -2
  495. package/bundled/upstream/superpowers/skills/requesting-code-review/SKILL.md +2 -2
  496. package/bundled/upstream/superpowers/skills/requesting-code-review/code-reviewer.md +15 -11
  497. package/bundled/upstream/superpowers/skills/subagent-driven-development/SKILL.md +206 -67
  498. package/bundled/upstream/superpowers/skills/subagent-driven-development/implementer-prompt.md +30 -4
  499. package/bundled/upstream/superpowers/skills/subagent-driven-development/scripts/review-package +44 -0
  500. package/bundled/upstream/superpowers/skills/subagent-driven-development/scripts/sdd-workspace +22 -0
  501. package/bundled/upstream/superpowers/skills/subagent-driven-development/scripts/task-brief +40 -0
  502. package/bundled/upstream/superpowers/skills/subagent-driven-development/task-reviewer-prompt.md +188 -0
  503. package/bundled/upstream/superpowers/skills/systematic-debugging/SKILL.md +1 -1
  504. package/bundled/upstream/superpowers/skills/test-driven-development/SKILL.md +1 -1
  505. package/bundled/upstream/superpowers/skills/using-git-worktrees/SKILL.md +9 -22
  506. package/bundled/upstream/superpowers/skills/using-superpowers/SKILL.md +19 -15
  507. package/bundled/upstream/superpowers/skills/using-superpowers/references/antigravity-tools.md +96 -0
  508. package/bundled/upstream/superpowers/skills/using-superpowers/references/claude-code-tools.md +50 -0
  509. package/bundled/upstream/superpowers/skills/using-superpowers/references/codex-tools.md +25 -12
  510. package/bundled/upstream/superpowers/skills/using-superpowers/references/copilot-tools.md +27 -20
  511. package/bundled/upstream/superpowers/skills/using-superpowers/references/gemini-tools.md +44 -32
  512. package/bundled/upstream/superpowers/skills/using-superpowers/references/pi-tools.md +28 -0
  513. package/bundled/upstream/superpowers/skills/writing-plans/SKILL.md +22 -0
  514. package/bundled/upstream/superpowers/skills/writing-plans/plan-document-reviewer-prompt.md +1 -1
  515. package/bundled/upstream/superpowers/skills/writing-skills/SKILL.md +52 -18
  516. package/bundled/upstream/superpowers/skills/writing-skills/anthropic-best-practices.md +88 -88
  517. package/bundled/upstream/superpowers/skills/writing-skills/persuasion-principles.md +3 -3
  518. package/package.json +1 -1
  519. package/src/cli/source.js +6 -0
  520. package/src/config/sources.js +15 -0
  521. package/src/merge/content-patch.js +4 -0
  522. package/bundled/upstream/superpowers/skills/subagent-driven-development/code-quality-reviewer-prompt.md +0 -25
  523. package/bundled/upstream/superpowers/skills/subagent-driven-development/spec-reviewer-prompt.md +0 -61
@@ -1,327 +1,514 @@
1
1
  ---
2
2
  name: fastapi-patterns
3
- description: FastAPI patterns for async APIs, dependency injection, Pydantic request and response models, OpenAPI docs, tests, security, and production readiness.
4
- origin: community
3
+ description: FastAPI best practices covering project structure, Pydantic v2 schemas, dependency injection, async handlers, authentication, authorization, transactional service layers, and testing with httpx and pytest.
4
+ metadata:
5
+ origin: ECC
5
6
  ---
6
7
 
7
8
  # FastAPI Patterns
8
9
 
9
- Production-oriented patterns for FastAPI services.
10
+ Modern, production-grade FastAPI development: project layout, Pydantic v2 schemas, dependency injection, async patterns, auth, transactional service methods, and testing.
10
11
 
11
- ## When to Use
12
-
13
- - Building or reviewing a FastAPI app.
14
- - Splitting routers, schemas, dependencies, and database access.
15
- - Writing async endpoints that call a database or external service.
16
- - Adding authentication, authorization, OpenAPI docs, tests, or deployment settings.
17
- - Checking a FastAPI PR for copy-pasteable examples and production risks.
18
-
19
- ## How It Works
20
-
21
- Treat the FastAPI app as a thin HTTP layer over explicit dependencies and service code:
22
-
23
- - `main.py` owns app construction, middleware, exception handlers, and router registration.
24
- - `schemas/` owns Pydantic request and response models.
25
- - `dependencies.py` owns database, auth, pagination, and request-scoped dependencies.
26
- - `services/` or `crud/` owns business and persistence operations.
27
- - `tests/` overrides dependencies instead of opening production resources.
28
-
29
- Prefer small routers and explicit `response_model` declarations. Keep raw ORM objects, secrets, and framework globals out of response schemas.
30
-
31
- ## Project Layout
12
+ ## Project Structure
32
13
 
33
14
  ```text
34
- app/
35
- |-- main.py
36
- |-- config.py
37
- |-- dependencies.py
38
- |-- exceptions.py
39
- |-- api/
40
- | `-- routes/
41
- | |-- users.py
42
- | `-- health.py
43
- |-- core/
44
- | |-- security.py
45
- | `-- middleware.py
46
- |-- db/
47
- | |-- session.py
48
- | `-- crud.py
49
- |-- models/
50
- |-- schemas/
51
- `-- tests/
15
+ my_app/
16
+ |-- app/
17
+ | |-- main.py # App factory, lifespan, middleware
18
+ | |-- config.py # Settings via pydantic-settings
19
+ | |-- dependencies.py # Shared FastAPI dependencies
20
+ | |-- database.py # SQLAlchemy engine + session
21
+ | |-- routers/
22
+ | | `-- users.py
23
+ | |-- models/ # SQLAlchemy ORM models
24
+ | | `-- user.py
25
+ | |-- schemas/ # Pydantic request/response schemas
26
+ | | `-- user.py
27
+ | `-- services/ # Business logic layer
28
+ | `-- user_service.py
29
+ |-- tests/
30
+ | |-- conftest.py
31
+ | `-- test_users.py
32
+ |-- pyproject.toml
33
+ `-- .env
52
34
  ```
53
35
 
54
- ## Application Factory
36
+ ---
55
37
 
56
- Use a factory so tests and workers can build the app with controlled settings.
38
+ ## App Factory and Lifespan
57
39
 
58
40
  ```python
41
+ # app/main.py
59
42
  from contextlib import asynccontextmanager
60
-
61
43
  from fastapi import FastAPI
62
44
  from fastapi.middleware.cors import CORSMiddleware
63
45
 
64
- from app.api.routes import health, users
65
46
  from app.config import settings
66
- from app.db.session import close_db, init_db
67
- from app.exceptions import register_exception_handlers
47
+ from app.database import engine, Base
48
+ from app.routers import users
68
49
 
69
50
 
70
51
  @asynccontextmanager
71
52
  async def lifespan(app: FastAPI):
72
- await init_db()
53
+ # Automatically create tables on startup for ease of use in dev/demo environments.
54
+ # For strict production applications, manage schemas via Alembic migrations instead.
55
+ async with engine.begin() as conn:
56
+ await conn.run_sync(Base.metadata.create_all)
73
57
  yield
74
- await close_db()
58
+ # Shutdown: close pooled resources.
59
+ await engine.dispose()
75
60
 
76
61
 
77
62
  def create_app() -> FastAPI:
78
63
  app = FastAPI(
79
- title=settings.api_title,
80
- version=settings.api_version,
64
+ title=settings.app_name,
65
+ version=settings.app_version,
81
66
  lifespan=lifespan,
82
67
  )
83
68
 
84
69
  app.add_middleware(
85
70
  CORSMiddleware,
86
- allow_origins=settings.cors_origins,
87
- allow_credentials=bool(settings.cors_origins),
88
- allow_methods=["GET", "POST", "PUT", "PATCH", "DELETE"],
89
- allow_headers=["Authorization", "Content-Type"],
71
+ allow_origins=settings.allowed_origins,
72
+ allow_credentials=settings.allow_credentials,
73
+ allow_methods=settings.allowed_methods,
74
+ allow_headers=settings.allowed_headers,
90
75
  )
91
76
 
92
- register_exception_handlers(app)
93
- app.include_router(health.router, prefix="/health", tags=["health"])
94
- app.include_router(users.router, prefix="/api/v1/users", tags=["users"])
77
+ app.include_router(users.router, prefix="/users", tags=["users"])
78
+
95
79
  return app
96
80
 
97
81
 
98
82
  app = create_app()
99
83
  ```
100
84
 
101
- Do not use `allow_origins=["*"]` with `allow_credentials=True`; browsers reject that combination and Starlette disallows it for credentialed requests.
85
+ ---
86
+
87
+ ## Configuration with pydantic-settings
102
88
 
103
- ## Pydantic Schemas
89
+ ```python
90
+ # app/config.py
91
+ from pydantic_settings import BaseSettings, SettingsConfigDict
104
92
 
105
- Keep request, update, and response models separate.
93
+
94
+ class Settings(BaseSettings):
95
+ model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8")
96
+
97
+ app_name: str = "My App"
98
+ app_version: str = "0.1.0"
99
+ debug: bool = False
100
+
101
+ database_url: str
102
+ secret_key: str
103
+ algorithm: str = "HS256"
104
+ access_token_expire_minutes: int = 30
105
+
106
+ # Pydantic-settings v2 safely evaluates mutable list literals directly
107
+ allowed_origins: list[str] = ["http://localhost:3000"]
108
+ allowed_methods: list[str] = ["GET", "POST", "PATCH", "DELETE", "OPTIONS"]
109
+ allowed_headers: list[str] = ["Authorization", "Content-Type"]
110
+ allow_credentials: bool = True
111
+
112
+
113
+ settings = Settings()
114
+ ```
115
+
116
+ ---
117
+
118
+ ## Pydantic Schemas (v2)
106
119
 
107
120
  ```python
121
+ # app/schemas/user.py
108
122
  from datetime import datetime
109
- from typing import Annotated
110
- from uuid import UUID
111
-
112
- from pydantic import BaseModel, ConfigDict, EmailStr, Field
123
+ from pydantic import BaseModel, EmailStr, Field, model_validator
113
124
 
114
125
 
115
126
  class UserBase(BaseModel):
116
127
  email: EmailStr
117
- full_name: Annotated[str, Field(min_length=1, max_length=100)]
128
+ username: str = Field(min_length=3, max_length=50)
118
129
 
119
130
 
120
131
  class UserCreate(UserBase):
121
- password: Annotated[str, Field(min_length=12, max_length=128)]
132
+ password: str = Field(min_length=8)
133
+ password_confirm: str
134
+
135
+ @model_validator(mode="after")
136
+ def passwords_match(self) -> "UserCreate":
137
+ if self.password != self.password_confirm:
138
+ raise ValueError("Passwords do not match")
139
+ return self
122
140
 
123
141
 
124
142
  class UserUpdate(BaseModel):
143
+ username: str | None = Field(default=None, min_length=3, max_length=50)
125
144
  email: EmailStr | None = None
126
- full_name: Annotated[str | None, Field(min_length=1, max_length=100)] = None
127
145
 
128
146
 
129
147
  class UserResponse(UserBase):
130
- model_config = ConfigDict(from_attributes=True)
131
-
132
- id: UUID
148
+ id: int
149
+ is_active: bool
133
150
  created_at: datetime
134
- updated_at: datetime
135
- ```
136
151
 
137
- Response models must never include password hashes, access tokens, refresh tokens, or internal authorization state.
152
+ model_config = {"from_attributes": True}
138
153
 
139
- ## Dependencies
140
154
 
141
- Use dependency injection for request-scoped resources.
155
+ class UserListResponse(BaseModel):
156
+ total: int
157
+ items: list[UserResponse]
158
+ ```
142
159
 
143
- ```python
144
- from collections.abc import AsyncIterator
145
- from uuid import UUID
160
+ ---
161
+
162
+ ## Dependency Injection
146
163
 
164
+ ```python
165
+ # app/dependencies.py
166
+ from typing import Annotated, AsyncGenerator
147
167
  from fastapi import Depends, HTTPException, status
148
168
  from fastapi.security import OAuth2PasswordBearer
169
+ from jose import JWTError, jwt
149
170
  from sqlalchemy.ext.asyncio import AsyncSession
150
171
 
151
- from app.core.security import decode_token
152
- from app.db.session import session_factory
172
+ from app.config import settings
173
+ from app.database import AsyncSessionLocal
153
174
  from app.models.user import User
154
175
 
155
-
156
- oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/v1/auth/login")
176
+ oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/users/token")
157
177
 
158
178
 
159
- async def get_db() -> AsyncIterator[AsyncSession]:
160
- async with session_factory() as session:
179
+ async def get_db() -> AsyncGenerator[AsyncSession, None]:
180
+ async with AsyncSessionLocal() as session:
161
181
  try:
162
182
  yield session
163
- await session.commit()
164
183
  except Exception:
165
184
  await session.rollback()
166
185
  raise
167
186
 
168
187
 
169
188
  async def get_current_user(
170
- token: str = Depends(oauth2_scheme),
171
- db: AsyncSession = Depends(get_db),
189
+ token: Annotated[str, Depends(oauth2_scheme)],
190
+ db: Annotated[AsyncSession, Depends(get_db)],
172
191
  ) -> User:
173
- payload = decode_token(token)
174
- user_id = UUID(payload["sub"])
192
+ credentials_exception = HTTPException(
193
+ status_code=status.HTTP_401_UNAUTHORIZED,
194
+ detail="Could not validate credentials",
195
+ headers={"WWW-Authenticate": "Bearer"},
196
+ )
197
+ try:
198
+ payload = jwt.decode(token, settings.secret_key, algorithms=[settings.algorithm])
199
+ subject = payload.get("sub")
200
+ if subject is None:
201
+ raise credentials_exception
202
+ user_id = int(subject)
203
+ except (JWTError, TypeError, ValueError):
204
+ raise credentials_exception
205
+
175
206
  user = await db.get(User, user_id)
176
207
  if user is None:
177
- raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token")
208
+ raise credentials_exception
178
209
  return user
179
- ```
180
210
 
181
- Avoid creating sessions, clients, or credentials inline inside route handlers.
182
211
 
183
- ## Async Endpoints
212
+ async def get_current_active_user(
213
+ current_user: Annotated[User, Depends(get_current_user)],
214
+ ) -> User:
215
+ if not current_user.is_active:
216
+ raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Inactive user")
217
+ return current_user
184
218
 
185
- Keep route handlers async when they perform I/O, and use async libraries inside them.
186
219
 
187
- ```python
188
- from fastapi import APIRouter, Depends, Query
189
- from sqlalchemy import select
190
- from sqlalchemy.ext.asyncio import AsyncSession
220
+ DbDep = Annotated[AsyncSession, Depends(get_db)]
221
+ CurrentUserDep = Annotated[User, Depends(get_current_user)]
222
+ ActiveUserDep = Annotated[User, Depends(get_current_active_user)]
223
+ ```
191
224
 
192
- from app.dependencies import get_current_user, get_db
193
- from app.models.user import User
194
- from app.schemas.user import UserResponse
225
+ ---
195
226
 
227
+ ## Router and Endpoint Design
196
228
 
197
- router = APIRouter()
229
+ ```python
230
+ # app/routers/users.py
231
+ from typing import Annotated
232
+ from fastapi import APIRouter, HTTPException, Query, status
233
+ from fastapi.security import OAuth2PasswordRequestForm
198
234
 
235
+ from app.dependencies import ActiveUserDep, DbDep
236
+ from app.schemas.user import UserCreate, UserResponse, UserUpdate, UserListResponse
237
+ from app.services.user_service import DuplicateUserError, UserService
199
238
 
200
- @router.get("/", response_model=list[UserResponse])
201
- async def list_users(
202
- limit: int = Query(default=50, ge=1, le=100),
203
- offset: int = Query(default=0, ge=0),
204
- db: AsyncSession = Depends(get_db),
205
- current_user: User = Depends(get_current_user),
206
- ):
207
- result = await db.execute(
208
- select(User).order_by(User.created_at.desc()).limit(limit).offset(offset)
209
- )
210
- return result.scalars().all()
211
- ```
239
+ router = APIRouter()
212
240
 
213
- Use `httpx.AsyncClient` for external HTTP calls from async handlers. Do not call `requests` in an async route.
214
241
 
215
- ## Error Handling
242
+ @router.post("/", response_model=UserResponse, status_code=status.HTTP_201_CREATED)
243
+ async def create_user(payload: UserCreate, db: DbDep) -> UserResponse:
244
+ service = UserService(db)
245
+ try:
246
+ return await service.create(payload)
247
+ except DuplicateUserError:
248
+ raise HTTPException(status_code=400, detail="Email already registered")
216
249
 
217
- Centralize domain exceptions and keep response shapes stable.
218
250
 
219
- ```python
220
- from fastapi import FastAPI, Request
221
- from fastapi.responses import JSONResponse
251
+ @router.get("/me", response_model=UserResponse)
252
+ async def get_me(current_user: ActiveUserDep) -> UserResponse:
253
+ return current_user
222
254
 
223
255
 
224
- class ApiError(Exception):
225
- def __init__(self, status_code: int, code: str, message: str):
226
- self.status_code = status_code
227
- self.code = code
228
- self.message = message
256
+ @router.get("/", response_model=UserListResponse)
257
+ async def list_users(
258
+ db: DbDep,
259
+ current_user: ActiveUserDep,
260
+ skip: Annotated[int, Query(ge=0)] = 0,
261
+ limit: Annotated[int, Query(ge=1, le=100)] = 20,
262
+ ) -> UserListResponse:
263
+ service = UserService(db)
264
+ users, total = await service.list(skip=skip, limit=limit)
265
+ return UserListResponse(total=total, items=users)
266
+
267
+
268
+ @router.patch("/{user_id}", response_model=UserResponse)
269
+ async def update_user(
270
+ user_id: int,
271
+ payload: UserUpdate,
272
+ db: DbDep,
273
+ current_user: ActiveUserDep,
274
+ ) -> UserResponse:
275
+ if current_user.id != user_id:
276
+ raise HTTPException(status_code=403, detail="Not authorized")
277
+ service = UserService(db)
278
+ try:
279
+ user = await service.update(user_id, payload)
280
+ except DuplicateUserError:
281
+ raise HTTPException(status_code=400, detail="Email already registered")
282
+ if user is None:
283
+ raise HTTPException(status_code=404, detail="User not found")
284
+ return user
229
285
 
230
286
 
231
- def register_exception_handlers(app: FastAPI) -> None:
232
- @app.exception_handler(ApiError)
233
- async def api_error_handler(request: Request, exc: ApiError):
234
- return JSONResponse(
235
- status_code=exc.status_code,
236
- content={"error": {"code": exc.code, "message": exc.message}},
287
+ @router.post("/token")
288
+ async def login(
289
+ form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
290
+ db: DbDep,
291
+ ) -> dict[str, str]:
292
+ service = UserService(db)
293
+ token = await service.authenticate(form_data.username, form_data.password)
294
+ if token is None:
295
+ raise HTTPException(
296
+ status_code=status.HTTP_401_UNAUTHORIZED,
297
+ detail="Incorrect username or password",
298
+ headers={"WWW-Authenticate": "Bearer"},
237
299
  )
300
+ return {"access_token": token, "token_type": "bearer"}
238
301
  ```
239
302
 
240
- ## OpenAPI Customization
303
+ ---
241
304
 
242
- Assign the custom OpenAPI callable to `app.openapi`; do not just call the function once.
305
+ ## Service Layer
243
306
 
244
307
  ```python
245
- from fastapi import FastAPI
246
- from fastapi.openapi.utils import get_openapi
308
+ # app/services/user_service.py
309
+ from datetime import datetime, timedelta, timezone
247
310
 
311
+ from jose import jwt
312
+ from passlib.context import CryptContext
313
+ from sqlalchemy import func, select
314
+ from sqlalchemy.exc import IntegrityError
315
+ from sqlalchemy.ext.asyncio import AsyncSession
248
316
 
249
- def install_openapi(app: FastAPI) -> None:
250
- def custom_openapi():
251
- if app.openapi_schema:
252
- return app.openapi_schema
253
- app.openapi_schema = get_openapi(
254
- title="Service API",
255
- version="1.0.0",
256
- routes=app.routes,
257
- )
258
- return app.openapi_schema
317
+ from app.config import settings
318
+ from app.models.user import User
319
+ from app.schemas.user import UserCreate, UserUpdate
320
+
321
+ pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
322
+
323
+
324
+ class DuplicateUserError(Exception):
325
+ """Raised when a unique user field conflicts with an existing row."""
259
326
 
260
- app.openapi = custom_openapi
327
+
328
+ class UserService:
329
+ def __init__(self, db: AsyncSession) -> None:
330
+ self.db = db
331
+
332
+ async def get_by_email(self, email: str) -> User | None:
333
+ result = await self.db.execute(select(User).where(User.email == email))
334
+ return result.scalar_one_or_none()
335
+
336
+ async def create(self, payload: UserCreate) -> User:
337
+ user = User(
338
+ email=payload.email,
339
+ username=payload.username,
340
+ hashed_password=pwd_context.hash(payload.password),
341
+ )
342
+ self.db.add(user)
343
+ try:
344
+ # Rely on atomic DB constraints rather than race-prone application-level prechecks
345
+ await self.db.commit()
346
+ except IntegrityError as exc:
347
+ await self.db.rollback()
348
+ raise DuplicateUserError from exc
349
+ await self.db.refresh(user)
350
+ return user
351
+
352
+ async def list(self, skip: int = 0, limit: int = 20) -> tuple[list[User], int]:
353
+ total_result = await self.db.execute(select(func.count(User.id)))
354
+ total = total_result.scalar_one()
355
+ # Enforce explicit deterministic ordering to ensure reliable pagination
356
+ result = await self.db.execute(
357
+ select(User).order_by(User.id).offset(skip).limit(limit)
358
+ )
359
+ return list(result.scalars()), total
360
+
361
+ async def update(self, user_id: int, payload: UserUpdate) -> User | None:
362
+ user = await self.db.get(User, user_id)
363
+ if user is None:
364
+ return None
365
+ for field, value in payload.model_dump(exclude_unset=True).items():
366
+ setattr(user, field, value)
367
+ try:
368
+ await self.db.commit()
369
+ except IntegrityError as exc:
370
+ await self.db.rollback()
371
+ raise DuplicateUserError from exc
372
+ await self.db.refresh(user)
373
+ return user
374
+
375
+ async def authenticate(self, email: str, password: str) -> str | None:
376
+ user = await self.get_by_email(email)
377
+ if user is None or not pwd_context.verify(password, user.hashed_password):
378
+ return None
379
+ expire = datetime.now(timezone.utc) + timedelta(
380
+ minutes=settings.access_token_expire_minutes
381
+ )
382
+ return jwt.encode(
383
+ {"sub": str(user.id), "exp": expire},
384
+ settings.secret_key,
385
+ algorithm=settings.algorithm,
386
+ )
261
387
  ```
262
388
 
263
- ## Testing
389
+ > **Note on Database Design:** Application-level unique handling requires an underlying unique database index (e.g., `unique=True` on your SQLAlchemy mapping attributes). Without underlying constraints, application layer error-catching cannot safely prevent concurrent race conditions.
390
+
391
+ ---
264
392
 
265
- Override the dependency used by `Depends`, not an internal helper that route handlers never reference.
393
+ ## Testing with httpx and pytest
266
394
 
267
395
  ```python
268
- import pytest
396
+ # tests/conftest.py
397
+ import pytest_asyncio
269
398
  from httpx import ASGITransport, AsyncClient
270
- from sqlalchemy.ext.asyncio import AsyncSession
399
+ from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine
271
400
 
401
+ from app.database import Base
272
402
  from app.dependencies import get_db
273
403
  from app.main import create_app
274
404
 
405
+ TEST_DATABASE_URL = "sqlite+aiosqlite:///:memory:"
406
+
407
+ engine = create_async_engine(TEST_DATABASE_URL)
408
+ TestingSessionLocal = async_sessionmaker(engine, expire_on_commit=False)
409
+
410
+
411
+ @pytest_asyncio.fixture(autouse=True)
412
+ async def setup_db():
413
+ async with engine.begin() as conn:
414
+ await conn.run_sync(Base.metadata.create_all)
415
+ yield
416
+ async with engine.begin() as conn:
417
+ await conn.run_sync(Base.metadata.drop_all)
418
+
419
+
420
+ @pytest_asyncio.fixture
421
+ async def db_session():
422
+ async with TestingSessionLocal() as session:
423
+ yield session
424
+ await session.rollback()
425
+
275
426
 
276
- @pytest.fixture
277
- async def client(test_session: AsyncSession):
427
+ @pytest_asyncio.fixture
428
+ async def client(db_session: AsyncSession):
278
429
  app = create_app()
279
430
 
280
431
  async def override_get_db():
281
- yield test_session
432
+ yield db_session
282
433
 
283
434
  app.dependency_overrides[get_db] = override_get_db
435
+
284
436
  async with AsyncClient(
285
- transport=ASGITransport(app=app),
286
- base_url="http://test",
287
- ) as test_client:
288
- yield test_client
289
- app.dependency_overrides.clear()
437
+ transport=ASGITransport(app=app), base_url="http://test"
438
+ ) as ac:
439
+ yield ac
440
+
441
+
442
+ @pytest_asyncio.fixture
443
+ async def registered_user(client: AsyncClient) -> dict:
444
+ resp = await client.post("/users/", json={
445
+ "email": "test@example.com",
446
+ "username": "testuser",
447
+ "password": "securepass1",
448
+ "password_confirm": "securepass1",
449
+ })
450
+ assert resp.status_code == 201
451
+ return resp.json()
452
+
453
+
454
+ @pytest_asyncio.fixture
455
+ async def auth_token(client: AsyncClient, registered_user: dict) -> str:
456
+ resp = await client.post("/users/token", data={
457
+ "username": "test@example.com",
458
+ "password": "securepass1",
459
+ })
460
+ assert resp.status_code == 200
461
+ return resp.json()["access_token"]
462
+
463
+
464
+ @pytest_asyncio.fixture
465
+ async def auth_client(client: AsyncClient, auth_token: str) -> AsyncClient:
466
+ client.headers.update({"Authorization": f"Bearer {auth_token}"})
467
+ return client
290
468
  ```
291
469
 
292
- ## Security Checklist
470
+ ---
293
471
 
294
- - Hash passwords with `argon2-cffi`, `bcrypt`, or a current passlib-compatible hasher.
295
- - Validate JWT issuer, audience, expiry, and signing algorithm.
296
- - Keep CORS origins environment-specific.
297
- - Put rate limits on auth and write-heavy endpoints.
298
- - Use Pydantic models for all request bodies.
299
- - Use ORM parameter binding or SQLAlchemy Core expressions; never build SQL with f-strings.
300
- - Redact tokens, authorization headers, cookies, and passwords from logs.
301
- - Run dependency audit tooling in CI.
472
+ ## Anti-Patterns
302
473
 
303
- ## Performance Checklist
474
+ ```python
475
+ # Bad: business logic inside route handlers.
476
+ @router.post("/users/")
477
+ async def create_user(payload: UserCreate, db: DbDep):
478
+ hashed = bcrypt.hash(payload.password)
479
+ user = User(email=payload.email, hashed_password=hashed)
480
+ db.add(user)
481
+ await db.commit()
482
+ return user
304
483
 
305
- - Configure database connection pooling explicitly.
306
- - Add pagination to list endpoints.
307
- - Watch for N+1 queries and use eager loading intentionally.
308
- - Use async HTTP/database clients in async paths.
309
- - Add compression only after checking payload size and CPU tradeoffs.
310
- - Cache stable expensive reads behind explicit invalidation.
484
+ # Good: thin route, transactional service handling.
485
+ @router.post("/users/", response_model=UserResponse, status_code=201)
486
+ async def create_user(payload: UserCreate, db: DbDep):
487
+ try:
488
+ return await UserService(db).create(payload)
489
+ except DuplicateUserError:
490
+ raise HTTPException(status_code=400, detail="Email already registered")
311
491
 
312
- ## Examples
313
492
 
314
- Use these examples as patterns, not as project-wide templates:
493
+ # Bad: sync DB calls in async routes block the event loop.
494
+ @router.get("/items/")
495
+ async def list_items(db: Session = Depends(get_db)):
496
+ return db.query(Item).all()
315
497
 
316
- - Application factory: configure middleware and routers once in `create_app`.
317
- - Schema split: `UserCreate`, `UserUpdate`, and `UserResponse` have different responsibilities.
318
- - Dependency override: tests override `get_db` directly.
319
- - OpenAPI customization: assign `app.openapi = custom_openapi`.
498
+ # Good: use async SQLAlchemy executions.
499
+ @router.get("/items/")
500
+ async def list_items(db: AsyncSession = Depends(get_db)):
501
+ result = await db.execute(select(Item))
502
+ return result.scalars().all()
503
+ ```
504
+
505
+ ---
320
506
 
321
- ## See Also
507
+ ## Best Practices
322
508
 
323
- - Agent: `fastapi-reviewer`
324
- - Command: `/fastapi-review`
325
- - Skill: `python-patterns`
326
- - Skill: `python-testing`
327
- - Skill: `api-design`
509
+ - Always declare a typed `response_model` to prevent accidental PII/data leaks and output clean OpenAPI schemas.
510
+ - Consolidate standard middleware dependency injections via type-aliasing: `DbDep = Annotated[AsyncSession, Depends(get_db)]`.
511
+ - Wrap database mutation boundaries gracefully within transactions inside your service layer, catching structural database errors directly.
512
+ - Parse JWT parameters defensively, expecting potential string/integer cast mismatches from modern payload variations.
513
+ - Enforce deterministic sorting (e.g., `.order_by(Model.id)`) on all offset/limit paginated endpoints to avoid data skips.
514
+ - Isolate authorization checks from core authentication dependencies to provide precise REST status signals (`401` vs `403`).