claudecode-omc 5.11.0 → 5.13.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 (448) hide show
  1. package/.local/skills/prompt-pilot/SKILL.md +258 -0
  2. package/bundled/manifest.json +3 -3
  3. package/bundled/upstream/anthropic-skills/.omc-source/bundle.json +2 -2
  4. package/bundled/upstream/anthropic-skills/.omc-source/provenance.json +394 -390
  5. package/bundled/upstream/anthropic-skills/skills/claude-api/SKILL.md +60 -29
  6. package/bundled/upstream/anthropic-skills/skills/claude-api/csharp/claude-api.md +46 -1
  7. package/bundled/upstream/anthropic-skills/skills/claude-api/curl/examples.md +2 -2
  8. package/bundled/upstream/anthropic-skills/skills/claude-api/curl/managed-agents.md +3 -1
  9. package/bundled/upstream/anthropic-skills/skills/claude-api/go/claude-api.md +23 -4
  10. package/bundled/upstream/anthropic-skills/skills/claude-api/java/claude-api.md +32 -3
  11. package/bundled/upstream/anthropic-skills/skills/claude-api/php/claude-api.md +27 -0
  12. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/README.md +123 -7
  13. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/batches.md +13 -0
  14. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/files-api.md +7 -2
  15. package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/streaming.md +18 -1
  16. package/bundled/upstream/anthropic-skills/skills/claude-api/python/managed-agents/README.md +9 -7
  17. package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/claude-api.md +27 -0
  18. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/agent-design.md +1 -1
  19. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/anthropic-cli.md +246 -0
  20. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/claude-platform-on-aws.md +59 -0
  21. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/error-codes.md +24 -4
  22. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/live-sources.md +8 -0
  23. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-api-reference.md +48 -4
  24. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-client-patterns.md +3 -1
  25. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-core.md +15 -1
  26. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-environments.md +10 -6
  27. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-events.md +25 -0
  28. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-onboarding.md +48 -18
  29. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-overview.md +8 -5
  30. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-scheduled-deployments.md +144 -0
  31. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +2 -1
  32. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-tools.md +46 -9
  33. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/model-migration.md +259 -3
  34. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/models.md +17 -9
  35. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/prompt-caching.md +55 -3
  36. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/token-counting.md +56 -0
  37. package/bundled/upstream/anthropic-skills/skills/claude-api/shared/tool-use-concepts.md +22 -2
  38. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/README.md +45 -6
  39. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/streaming.md +1 -1
  40. package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/managed-agents/README.md +10 -12
  41. package/bundled/upstream/anthropic-skills/skills/frontend-design/SKILL.md +39 -26
  42. package/bundled/upstream/ecc/.omc-source/bundle.json +2 -2
  43. package/bundled/upstream/ecc/.omc-source/manifests/.claude-plugin/marketplace.json +2 -2
  44. package/bundled/upstream/ecc/.omc-source/provenance.json +602 -550
  45. package/bundled/upstream/ecc/agents/agent-evaluator.md +206 -0
  46. package/bundled/upstream/ecc/agents/performance-optimizer.md +9 -9
  47. package/bundled/upstream/ecc/agents/php-reviewer.md +109 -0
  48. package/bundled/upstream/ecc/agents/spec-miner.md +217 -0
  49. package/bundled/upstream/ecc/agents/vue-reviewer.md +206 -0
  50. package/bundled/upstream/ecc/commands/cost-report.md +58 -84
  51. package/bundled/upstream/ecc/commands/epic-claim.md +26 -0
  52. package/bundled/upstream/ecc/commands/epic-decompose.md +23 -0
  53. package/bundled/upstream/ecc/commands/epic-publish.md +23 -0
  54. package/bundled/upstream/ecc/commands/epic-review.md +23 -0
  55. package/bundled/upstream/ecc/commands/epic-sync.md +23 -0
  56. package/bundled/upstream/ecc/commands/epic-unblock.md +22 -0
  57. package/bundled/upstream/ecc/commands/epic-validate.md +22 -0
  58. package/bundled/upstream/ecc/commands/instinct-status.md +8 -8
  59. package/bundled/upstream/ecc/commands/multi-backend.md +2 -0
  60. package/bundled/upstream/ecc/commands/multi-execute.md +2 -0
  61. package/bundled/upstream/ecc/commands/multi-frontend.md +2 -0
  62. package/bundled/upstream/ecc/commands/multi-plan.md +2 -0
  63. package/bundled/upstream/ecc/commands/multi-workflow.md +2 -0
  64. package/bundled/upstream/ecc/commands/orch-add-feature.md +36 -0
  65. package/bundled/upstream/ecc/commands/orch-build-mvp.md +36 -0
  66. package/bundled/upstream/ecc/commands/orch-change-feature.md +38 -0
  67. package/bundled/upstream/ecc/commands/orch-fix-defect.md +38 -0
  68. package/bundled/upstream/ecc/commands/orch-refine-code.md +39 -0
  69. package/bundled/upstream/ecc/commands/quality-gate.md +34 -16
  70. package/bundled/upstream/ecc/commands/vue-review.md +174 -0
  71. package/bundled/upstream/ecc/skills/accessibility/SKILL.md +2 -1
  72. package/bundled/upstream/ecc/skills/agent-architecture-audit/SKILL.md +2 -1
  73. package/bundled/upstream/ecc/skills/agent-eval/SKILL.md +2 -1
  74. package/bundled/upstream/ecc/skills/agent-harness-construction/SKILL.md +2 -1
  75. package/bundled/upstream/ecc/skills/agent-introspection-debugging/SKILL.md +2 -1
  76. package/bundled/upstream/ecc/skills/agent-payment-x402/SKILL.md +2 -1
  77. package/bundled/upstream/ecc/skills/agent-self-evaluation/SKILL.md +182 -0
  78. package/bundled/upstream/ecc/skills/agent-self-evaluation/examples/high-score-example.md +87 -0
  79. package/bundled/upstream/ecc/skills/agent-self-evaluation/examples/low-score-example.md +86 -0
  80. package/bundled/upstream/ecc/skills/agent-self-evaluation/references/evaluation-criteria.md +71 -0
  81. package/bundled/upstream/ecc/skills/agent-self-evaluation/references/hook-integration.md +64 -0
  82. package/bundled/upstream/ecc/skills/agent-self-evaluation/scripts/evaluate.py +408 -0
  83. package/bundled/upstream/ecc/skills/agent-self-evaluation/templates/evaluation-report.md +86 -0
  84. package/bundled/upstream/ecc/skills/agent-sort/SKILL.md +2 -1
  85. package/bundled/upstream/ecc/skills/agentic-engineering/SKILL.md +2 -1
  86. package/bundled/upstream/ecc/skills/agentic-os/SKILL.md +2 -1
  87. package/bundled/upstream/ecc/skills/ai-first-engineering/SKILL.md +2 -1
  88. package/bundled/upstream/ecc/skills/ai-regression-testing/SKILL.md +2 -1
  89. package/bundled/upstream/ecc/skills/android-clean-architecture/SKILL.md +2 -1
  90. package/bundled/upstream/ecc/skills/angular-developer/SKILL.md +2 -1
  91. package/bundled/upstream/ecc/skills/api-connector-builder/SKILL.md +2 -1
  92. package/bundled/upstream/ecc/skills/api-design/SKILL.md +2 -1
  93. package/bundled/upstream/ecc/skills/architecture-decision-records/SKILL.md +2 -1
  94. package/bundled/upstream/ecc/skills/article-writing/SKILL.md +2 -1
  95. package/bundled/upstream/ecc/skills/automation-audit-ops/SKILL.md +2 -1
  96. package/bundled/upstream/ecc/skills/autonomous-agent-harness/SKILL.md +2 -1
  97. package/bundled/upstream/ecc/skills/autonomous-loops/SKILL.md +2 -1
  98. package/bundled/upstream/ecc/skills/backend-patterns/SKILL.md +2 -1
  99. package/bundled/upstream/ecc/skills/benchmark/SKILL.md +2 -1
  100. package/bundled/upstream/ecc/skills/benchmark-methodology/SKILL.md +190 -0
  101. package/bundled/upstream/ecc/skills/benchmark-optimization-loop/SKILL.md +2 -1
  102. package/bundled/upstream/ecc/skills/blender-motion-state-inspection/SKILL.md +2 -1
  103. package/bundled/upstream/ecc/skills/blueprint/SKILL.md +2 -1
  104. package/bundled/upstream/ecc/skills/brand-discovery/SKILL.md +145 -0
  105. package/bundled/upstream/ecc/skills/brand-discovery/references/10_purpose-why.md +40 -0
  106. package/bundled/upstream/ecc/skills/brand-discovery/references/20_positioning.md +44 -0
  107. package/bundled/upstream/ecc/skills/brand-discovery/references/30_audience-niche.md +52 -0
  108. package/bundled/upstream/ecc/skills/brand-discovery/references/40_personality-archetype.md +57 -0
  109. package/bundled/upstream/ecc/skills/brand-discovery/references/50_voice-tone.md +59 -0
  110. package/bundled/upstream/ecc/skills/brand-discovery/references/60_narrative-story.md +50 -0
  111. package/bundled/upstream/ecc/skills/brand-discovery/references/70_founder-tension.md +49 -0
  112. package/bundled/upstream/ecc/skills/brand-discovery/references/90_SYNTHESIS.md +133 -0
  113. package/bundled/upstream/ecc/skills/brand-voice/SKILL.md +2 -1
  114. package/bundled/upstream/ecc/skills/browser-qa/SKILL.md +22 -4
  115. package/bundled/upstream/ecc/skills/bun-runtime/SKILL.md +2 -1
  116. package/bundled/upstream/ecc/skills/canary-watch/SKILL.md +2 -1
  117. package/bundled/upstream/ecc/skills/carrier-relationship-management/SKILL.md +1 -1
  118. package/bundled/upstream/ecc/skills/cisco-ios-patterns/SKILL.md +2 -1
  119. package/bundled/upstream/ecc/skills/ck/SKILL.md +2 -1
  120. package/bundled/upstream/ecc/skills/claude-devfleet/SKILL.md +11 -2
  121. package/bundled/upstream/ecc/skills/click-path-audit/SKILL.md +2 -1
  122. package/bundled/upstream/ecc/skills/clickhouse-io/SKILL.md +2 -1
  123. package/bundled/upstream/ecc/skills/code-tour/SKILL.md +2 -1
  124. package/bundled/upstream/ecc/skills/codebase-onboarding/SKILL.md +2 -1
  125. package/bundled/upstream/ecc/skills/codehealth-mcp/SKILL.md +167 -0
  126. package/bundled/upstream/ecc/skills/coding-standards/SKILL.md +4 -2
  127. package/bundled/upstream/ecc/skills/competitive-platform-analysis/SKILL.md +214 -0
  128. package/bundled/upstream/ecc/skills/competitive-report-structure/SKILL.md +162 -0
  129. package/bundled/upstream/ecc/skills/compose-multiplatform-patterns/SKILL.md +2 -1
  130. package/bundled/upstream/ecc/skills/config-gc/SKILL.md +120 -0
  131. package/bundled/upstream/ecc/skills/configure-ecc/SKILL.md +2 -1
  132. package/bundled/upstream/ecc/skills/connections-optimizer/SKILL.md +2 -1
  133. package/bundled/upstream/ecc/skills/content-engine/SKILL.md +2 -1
  134. package/bundled/upstream/ecc/skills/content-hash-cache-pattern/SKILL.md +2 -1
  135. package/bundled/upstream/ecc/skills/context-budget/SKILL.md +2 -1
  136. package/bundled/upstream/ecc/skills/continuous-agent-loop/SKILL.md +2 -1
  137. package/bundled/upstream/ecc/skills/continuous-learning/SKILL.md +2 -1
  138. package/bundled/upstream/ecc/skills/continuous-learning-v2/SKILL.md +2 -1
  139. package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +14 -1
  140. package/bundled/upstream/ecc/skills/continuous-learning-v2/hooks/observe.sh +31 -7
  141. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +90 -2
  142. package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +27 -0
  143. package/bundled/upstream/ecc/skills/cost-aware-llm-pipeline/SKILL.md +2 -1
  144. package/bundled/upstream/ecc/skills/cost-tracking/SKILL.md +58 -108
  145. package/bundled/upstream/ecc/skills/council/SKILL.md +2 -1
  146. package/bundled/upstream/ecc/skills/cpp-coding-standards/SKILL.md +2 -1
  147. package/bundled/upstream/ecc/skills/cpp-testing/SKILL.md +2 -1
  148. package/bundled/upstream/ecc/skills/crosspost/SKILL.md +2 -1
  149. package/bundled/upstream/ecc/skills/csharp-testing/SKILL.md +2 -1
  150. package/bundled/upstream/ecc/skills/customer-billing-ops/SKILL.md +2 -1
  151. package/bundled/upstream/ecc/skills/customs-trade-compliance/SKILL.md +1 -1
  152. package/bundled/upstream/ecc/skills/dart-flutter-patterns/SKILL.md +2 -1
  153. package/bundled/upstream/ecc/skills/dashboard-builder/SKILL.md +2 -1
  154. package/bundled/upstream/ecc/skills/data-scraper-agent/SKILL.md +2 -1
  155. package/bundled/upstream/ecc/skills/data-throughput-accelerator/SKILL.md +2 -1
  156. package/bundled/upstream/ecc/skills/database-migrations/SKILL.md +2 -1
  157. package/bundled/upstream/ecc/skills/deep-research/SKILL.md +2 -1
  158. package/bundled/upstream/ecc/skills/defi-amm-security/SKILL.md +2 -1
  159. package/bundled/upstream/ecc/skills/deployment-patterns/SKILL.md +2 -1
  160. package/bundled/upstream/ecc/skills/design-system/SKILL.md +2 -1
  161. package/bundled/upstream/ecc/skills/django-celery/SKILL.md +3 -2
  162. package/bundled/upstream/ecc/skills/django-patterns/SKILL.md +2 -1
  163. package/bundled/upstream/ecc/skills/django-security/SKILL.md +2 -1
  164. package/bundled/upstream/ecc/skills/django-tdd/SKILL.md +2 -1
  165. package/bundled/upstream/ecc/skills/django-verification/SKILL.md +2 -1
  166. package/bundled/upstream/ecc/skills/dmux-workflows/SKILL.md +2 -1
  167. package/bundled/upstream/ecc/skills/docker-patterns/SKILL.md +2 -1
  168. package/bundled/upstream/ecc/skills/documentation-lookup/SKILL.md +2 -1
  169. package/bundled/upstream/ecc/skills/dotnet-patterns/SKILL.md +2 -1
  170. package/bundled/upstream/ecc/skills/dynamic-workflow-mode/SKILL.md +2 -1
  171. package/bundled/upstream/ecc/skills/e2e-testing/SKILL.md +2 -1
  172. package/bundled/upstream/ecc/skills/ecc-guide/SKILL.md +2 -1
  173. package/bundled/upstream/ecc/skills/ecc-tools-cost-audit/SKILL.md +2 -1
  174. package/bundled/upstream/ecc/skills/email-ops/SKILL.md +2 -1
  175. package/bundled/upstream/ecc/skills/energy-procurement/SKILL.md +1 -1
  176. package/bundled/upstream/ecc/skills/enterprise-agent-ops/SKILL.md +2 -1
  177. package/bundled/upstream/ecc/skills/error-handling/SKILL.md +2 -1
  178. package/bundled/upstream/ecc/skills/eval-harness/SKILL.md +2 -1
  179. package/bundled/upstream/ecc/skills/evm-token-decimals/SKILL.md +2 -1
  180. package/bundled/upstream/ecc/skills/exa-search/SKILL.md +2 -1
  181. package/bundled/upstream/ecc/skills/fal-ai-media/SKILL.md +2 -1
  182. package/bundled/upstream/ecc/skills/fastapi-patterns/SKILL.md +375 -188
  183. package/bundled/upstream/ecc/skills/finance-billing-ops/SKILL.md +2 -1
  184. package/bundled/upstream/ecc/skills/flox-environments/SKILL.md +3 -2
  185. package/bundled/upstream/ecc/skills/flutter-dart-code-review/SKILL.md +2 -1
  186. package/bundled/upstream/ecc/skills/frontend-a11y/SKILL.md +3 -3
  187. package/bundled/upstream/ecc/skills/frontend-design-direction/SKILL.md +2 -1
  188. package/bundled/upstream/ecc/skills/frontend-patterns/SKILL.md +23 -8
  189. package/bundled/upstream/ecc/skills/frontend-slides/SKILL.md +2 -1
  190. package/bundled/upstream/ecc/skills/frontend-slides/scripts/export-pdf.sh +1 -1
  191. package/bundled/upstream/ecc/skills/fsharp-testing/SKILL.md +2 -1
  192. package/bundled/upstream/ecc/skills/gan-style-harness/SKILL.md +2 -1
  193. package/bundled/upstream/ecc/skills/gateguard/SKILL.md +9 -1
  194. package/bundled/upstream/ecc/skills/generating-python-installer/SKILL.md +820 -0
  195. package/bundled/upstream/ecc/skills/git-workflow/SKILL.md +2 -1
  196. package/bundled/upstream/ecc/skills/github-ops/SKILL.md +2 -1
  197. package/bundled/upstream/ecc/skills/golang-patterns/SKILL.md +2 -1
  198. package/bundled/upstream/ecc/skills/golang-testing/SKILL.md +2 -1
  199. package/bundled/upstream/ecc/skills/google-workspace-ops/SKILL.md +2 -1
  200. package/bundled/upstream/ecc/skills/healthcare-cdss-patterns/SKILL.md +2 -1
  201. package/bundled/upstream/ecc/skills/healthcare-emr-patterns/SKILL.md +2 -1
  202. package/bundled/upstream/ecc/skills/healthcare-eval-harness/SKILL.md +2 -1
  203. package/bundled/upstream/ecc/skills/healthcare-phi-compliance/SKILL.md +2 -1
  204. package/bundled/upstream/ecc/skills/hermes-imports/SKILL.md +2 -1
  205. package/bundled/upstream/ecc/skills/hexagonal-architecture/SKILL.md +2 -1
  206. package/bundled/upstream/ecc/skills/hipaa-compliance/SKILL.md +2 -1
  207. package/bundled/upstream/ecc/skills/homelab-network-readiness/SKILL.md +2 -1
  208. package/bundled/upstream/ecc/skills/homelab-network-setup/SKILL.md +2 -1
  209. package/bundled/upstream/ecc/skills/homelab-pihole-dns/SKILL.md +10 -9
  210. package/bundled/upstream/ecc/skills/homelab-vlan-segmentation/SKILL.md +2 -1
  211. package/bundled/upstream/ecc/skills/homelab-wireguard-vpn/SKILL.md +4 -3
  212. package/bundled/upstream/ecc/skills/inherit-legacy-style/SKILL.md +157 -0
  213. package/bundled/upstream/ecc/skills/intent-driven-development/SKILL.md +360 -0
  214. package/bundled/upstream/ecc/skills/inventory-demand-planning/SKILL.md +1 -1
  215. package/bundled/upstream/ecc/skills/investor-materials/SKILL.md +2 -1
  216. package/bundled/upstream/ecc/skills/investor-outreach/SKILL.md +2 -1
  217. package/bundled/upstream/ecc/skills/ios-icon-gen/SKILL.md +2 -1
  218. package/bundled/upstream/ecc/skills/iterative-retrieval/SKILL.md +2 -1
  219. package/bundled/upstream/ecc/skills/ito-basket-compare/SKILL.md +2 -1
  220. package/bundled/upstream/ecc/skills/ito-data-atlas-agent/SKILL.md +2 -1
  221. package/bundled/upstream/ecc/skills/ito-market-intelligence/SKILL.md +2 -1
  222. package/bundled/upstream/ecc/skills/ito-trade-planner/SKILL.md +2 -1
  223. package/bundled/upstream/ecc/skills/java-coding-standards/SKILL.md +2 -1
  224. package/bundled/upstream/ecc/skills/jira-integration/SKILL.md +17 -7
  225. package/bundled/upstream/ecc/skills/jpa-patterns/SKILL.md +2 -1
  226. package/bundled/upstream/ecc/skills/knowledge-ops/SKILL.md +2 -1
  227. package/bundled/upstream/ecc/skills/kotlin-coroutines-flows/SKILL.md +2 -1
  228. package/bundled/upstream/ecc/skills/kotlin-exposed-patterns/SKILL.md +2 -1
  229. package/bundled/upstream/ecc/skills/kotlin-ktor-patterns/SKILL.md +2 -1
  230. package/bundled/upstream/ecc/skills/kotlin-patterns/SKILL.md +2 -1
  231. package/bundled/upstream/ecc/skills/kotlin-testing/SKILL.md +2 -1
  232. package/bundled/upstream/ecc/skills/kubernetes-patterns/SKILL.md +756 -0
  233. package/bundled/upstream/ecc/skills/laravel-patterns/SKILL.md +2 -1
  234. package/bundled/upstream/ecc/skills/laravel-plugin-discovery/SKILL.md +2 -1
  235. package/bundled/upstream/ecc/skills/laravel-security/SKILL.md +826 -163
  236. package/bundled/upstream/ecc/skills/laravel-tdd/SKILL.md +541 -149
  237. package/bundled/upstream/ecc/skills/laravel-verification/SKILL.md +2 -1
  238. package/bundled/upstream/ecc/skills/latency-critical-systems/SKILL.md +2 -1
  239. package/bundled/upstream/ecc/skills/lead-intelligence/SKILL.md +2 -1
  240. package/bundled/upstream/ecc/skills/llm-trading-agent-security/SKILL.md +2 -1
  241. package/bundled/upstream/ecc/skills/logistics-exception-management/SKILL.md +1 -1
  242. package/bundled/upstream/ecc/skills/make-interfaces-feel-better/SKILL.md +2 -1
  243. package/bundled/upstream/ecc/skills/manim-video/SKILL.md +2 -1
  244. package/bundled/upstream/ecc/skills/market-research/SKILL.md +2 -1
  245. package/bundled/upstream/ecc/skills/marketing-campaign/SKILL.md +2 -1
  246. package/bundled/upstream/ecc/skills/mcp-server-patterns/SKILL.md +2 -1
  247. package/bundled/upstream/ecc/skills/messages-ops/SKILL.md +2 -1
  248. package/bundled/upstream/ecc/skills/ml-adoption-playbook/SKILL.md +57 -0
  249. package/bundled/upstream/ecc/skills/mle-workflow/SKILL.md +2 -1
  250. package/bundled/upstream/ecc/skills/motion-patterns/SKILL.md +1 -2
  251. package/bundled/upstream/ecc/skills/motion-ui/SKILL.md +2 -1
  252. package/bundled/upstream/ecc/skills/mysql-patterns/SKILL.md +2 -1
  253. package/bundled/upstream/ecc/skills/nanoclaw-repl/SKILL.md +2 -1
  254. package/bundled/upstream/ecc/skills/nestjs-patterns/SKILL.md +2 -1
  255. package/bundled/upstream/ecc/skills/netmiko-ssh-automation/SKILL.md +2 -1
  256. package/bundled/upstream/ecc/skills/network-bgp-diagnostics/SKILL.md +2 -1
  257. package/bundled/upstream/ecc/skills/network-config-validation/SKILL.md +2 -1
  258. package/bundled/upstream/ecc/skills/network-interface-health/SKILL.md +2 -1
  259. package/bundled/upstream/ecc/skills/nextjs-turbopack/SKILL.md +2 -1
  260. package/bundled/upstream/ecc/skills/nodejs-keccak256/SKILL.md +2 -1
  261. package/bundled/upstream/ecc/skills/nutrient-document-processing/SKILL.md +2 -1
  262. package/bundled/upstream/ecc/skills/nuxt4-patterns/SKILL.md +2 -1
  263. package/bundled/upstream/ecc/skills/openclaw-persona-forge/SKILL.md +2 -1
  264. package/bundled/upstream/ecc/skills/opensource-pipeline/SKILL.md +2 -1
  265. package/bundled/upstream/ecc/skills/orch-add-feature/SKILL.md +45 -0
  266. package/bundled/upstream/ecc/skills/orch-build-mvp/SKILL.md +49 -0
  267. package/bundled/upstream/ecc/skills/orch-change-feature/SKILL.md +43 -0
  268. package/bundled/upstream/ecc/skills/orch-fix-defect/SKILL.md +43 -0
  269. package/bundled/upstream/ecc/skills/orch-pipeline/SKILL.md +121 -0
  270. package/bundled/upstream/ecc/skills/orch-refine-code/SKILL.md +44 -0
  271. package/bundled/upstream/ecc/skills/parallel-execution-optimizer/SKILL.md +2 -1
  272. package/bundled/upstream/ecc/skills/perl-patterns/SKILL.md +2 -1
  273. package/bundled/upstream/ecc/skills/perl-security/SKILL.md +2 -1
  274. package/bundled/upstream/ecc/skills/perl-testing/SKILL.md +2 -1
  275. package/bundled/upstream/ecc/skills/plan-orchestrate/SKILL.md +2 -1
  276. package/bundled/upstream/ecc/skills/plankton-code-quality/SKILL.md +2 -1
  277. package/bundled/upstream/ecc/skills/postgres-patterns/SKILL.md +2 -1
  278. package/bundled/upstream/ecc/skills/prediction-market-oracle-research/SKILL.md +2 -1
  279. package/bundled/upstream/ecc/skills/prediction-market-risk-review/SKILL.md +2 -1
  280. package/bundled/upstream/ecc/skills/prisma-patterns/SKILL.md +2 -1
  281. package/bundled/upstream/ecc/skills/product-capability/SKILL.md +2 -1
  282. package/bundled/upstream/ecc/skills/product-lens/SKILL.md +2 -1
  283. package/bundled/upstream/ecc/skills/production-audit/SKILL.md +2 -1
  284. package/bundled/upstream/ecc/skills/production-scheduling/SKILL.md +1 -1
  285. package/bundled/upstream/ecc/skills/project-flow-ops/SKILL.md +2 -1
  286. package/bundled/upstream/ecc/skills/prompt-optimizer/SKILL.md +1 -1
  287. package/bundled/upstream/ecc/skills/python-patterns/SKILL.md +4 -3
  288. package/bundled/upstream/ecc/skills/python-testing/SKILL.md +2 -1
  289. package/bundled/upstream/ecc/skills/pytorch-patterns/SKILL.md +2 -1
  290. package/bundled/upstream/ecc/skills/quality-nonconformance/SKILL.md +1 -1
  291. package/bundled/upstream/ecc/skills/quarkus-patterns/SKILL.md +51 -50
  292. package/bundled/upstream/ecc/skills/quarkus-security/SKILL.md +25 -24
  293. package/bundled/upstream/ecc/skills/quarkus-tdd/SKILL.md +73 -72
  294. package/bundled/upstream/ecc/skills/quarkus-verification/SKILL.md +8 -7
  295. package/bundled/upstream/ecc/skills/ralphinho-rfc-pipeline/SKILL.md +2 -1
  296. package/bundled/upstream/ecc/skills/react-patterns/SKILL.md +2 -1
  297. package/bundled/upstream/ecc/skills/react-performance/SKILL.md +2 -1
  298. package/bundled/upstream/ecc/skills/react-testing/SKILL.md +2 -1
  299. package/bundled/upstream/ecc/skills/recsys-pipeline-architect/SKILL.md +2 -1
  300. package/bundled/upstream/ecc/skills/recursive-decision-ledger/SKILL.md +2 -1
  301. package/bundled/upstream/ecc/skills/redis-patterns/SKILL.md +2 -1
  302. package/bundled/upstream/ecc/skills/regex-vs-llm-structured-text/SKILL.md +2 -1
  303. package/bundled/upstream/ecc/skills/repo-scan/SKILL.md +64 -63
  304. package/bundled/upstream/ecc/skills/research-ops/SKILL.md +2 -1
  305. package/bundled/upstream/ecc/skills/returns-reverse-logistics/SKILL.md +1 -1
  306. package/bundled/upstream/ecc/skills/rules-distill/SKILL.md +2 -1
  307. package/bundled/upstream/ecc/skills/rust-patterns/SKILL.md +2 -1
  308. package/bundled/upstream/ecc/skills/rust-testing/SKILL.md +2 -1
  309. package/bundled/upstream/ecc/skills/safety-guard/SKILL.md +2 -1
  310. package/bundled/upstream/ecc/skills/santa-method/SKILL.md +2 -1
  311. package/bundled/upstream/ecc/skills/scientific-db-pubmed-database/SKILL.md +2 -1
  312. package/bundled/upstream/ecc/skills/scientific-db-uspto-database/SKILL.md +2 -1
  313. package/bundled/upstream/ecc/skills/scientific-pkg-gget/SKILL.md +2 -1
  314. package/bundled/upstream/ecc/skills/scientific-thinking-literature-review/SKILL.md +2 -1
  315. package/bundled/upstream/ecc/skills/scientific-thinking-scholar-evaluation/SKILL.md +2 -1
  316. package/bundled/upstream/ecc/skills/search-first/SKILL.md +2 -1
  317. package/bundled/upstream/ecc/skills/security-bounty-hunter/SKILL.md +2 -1
  318. package/bundled/upstream/ecc/skills/security-review/SKILL.md +2 -1
  319. package/bundled/upstream/ecc/skills/security-scan/SKILL.md +2 -1
  320. package/bundled/upstream/ecc/skills/seo/SKILL.md +2 -1
  321. package/bundled/upstream/ecc/skills/skill-comply/SKILL.md +2 -1
  322. package/bundled/upstream/ecc/skills/skill-comply/scripts/runner.py +8 -0
  323. package/bundled/upstream/ecc/skills/skill-scout/SKILL.md +2 -1
  324. package/bundled/upstream/ecc/skills/skill-stocktake/SKILL.md +2 -1
  325. package/bundled/upstream/ecc/skills/social-graph-ranker/SKILL.md +2 -1
  326. package/bundled/upstream/ecc/skills/social-publisher/SKILL.md +17 -2
  327. package/bundled/upstream/ecc/skills/springboot-patterns/SKILL.md +2 -1
  328. package/bundled/upstream/ecc/skills/springboot-security/SKILL.md +2 -1
  329. package/bundled/upstream/ecc/skills/springboot-tdd/SKILL.md +2 -1
  330. package/bundled/upstream/ecc/skills/springboot-verification/SKILL.md +2 -1
  331. package/bundled/upstream/ecc/skills/strategic-compact/SKILL.md +10 -5
  332. package/bundled/upstream/ecc/skills/swift-actor-persistence/SKILL.md +2 -1
  333. package/bundled/upstream/ecc/skills/swift-protocol-di-testing/SKILL.md +2 -1
  334. package/bundled/upstream/ecc/skills/taste/SKILL.md +264 -0
  335. package/bundled/upstream/ecc/skills/taste/references/genre-taxonomy.md +87 -0
  336. package/bundled/upstream/ecc/skills/tdd-workflow/SKILL.md +64 -1
  337. package/bundled/upstream/ecc/skills/team-agent-orchestration/SKILL.md +2 -1
  338. package/bundled/upstream/ecc/skills/team-builder/SKILL.md +2 -1
  339. package/bundled/upstream/ecc/skills/terminal-ops/SKILL.md +2 -1
  340. package/bundled/upstream/ecc/skills/tinystruct-patterns/SKILL.md +77 -1
  341. package/bundled/upstream/ecc/skills/token-budget-advisor/SKILL.md +2 -1
  342. package/bundled/upstream/ecc/skills/ui-demo/SKILL.md +2 -1
  343. package/bundled/upstream/ecc/skills/ui-to-vue/SKILL.md +2 -1
  344. package/bundled/upstream/ecc/skills/uncloud/SKILL.md +2 -1
  345. package/bundled/upstream/ecc/skills/unified-notifications-ops/SKILL.md +2 -1
  346. package/bundled/upstream/ecc/skills/verification-loop/SKILL.md +2 -1
  347. package/bundled/upstream/ecc/skills/video-editing/SKILL.md +2 -1
  348. package/bundled/upstream/ecc/skills/videodb/SKILL.md +2 -1
  349. package/bundled/upstream/ecc/skills/vite-patterns/SKILL.md +2 -1
  350. package/bundled/upstream/ecc/skills/vue-patterns/SKILL.md +471 -0
  351. package/bundled/upstream/ecc/skills/windows-desktop-e2e/SKILL.md +9 -8
  352. package/bundled/upstream/ecc/skills/workspace-surface-audit/SKILL.md +2 -1
  353. package/bundled/upstream/ecc/skills/x-api/SKILL.md +2 -1
  354. package/bundled/upstream/impeccable/.omc-source/bundle.json +2 -2
  355. package/bundled/upstream/impeccable/.omc-source/provenance.json +30 -25
  356. package/bundled/upstream/impeccable/skills/impeccable/SKILL.md +2 -2
  357. package/bundled/upstream/impeccable/skills/impeccable/reference/hooks.md +10 -8
  358. package/bundled/upstream/impeccable/skills/impeccable/reference/live.md +1 -1
  359. package/bundled/upstream/impeccable/skills/impeccable/scripts/context.mjs +707 -26
  360. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/browser/injected/index.mjs +202 -0
  361. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/cli/main.mjs +57 -11
  362. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/design-system.mjs +750 -0
  363. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +231 -0
  364. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/detect-antipatterns.mjs +7 -0
  365. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +29 -4
  366. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +20 -4
  367. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +2 -0
  368. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +27 -1
  369. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/registry/antipatterns.mjs +29 -0
  370. package/bundled/upstream/impeccable/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
  371. package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-admin.mjs +135 -48
  372. package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-before-edit.mjs +5 -2
  373. package/bundled/upstream/impeccable/skills/impeccable/scripts/hook-lib.mjs +375 -29
  374. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/design-parser.mjs +8 -1
  375. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/impeccable-config.mjs +638 -0
  376. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/impeccable-paths.mjs +37 -35
  377. package/bundled/upstream/impeccable/skills/impeccable/scripts/lib/target-args.mjs +42 -0
  378. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-browser.js +159 -72
  379. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-poll.mjs +16 -11
  380. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-server.mjs +9 -8
  381. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-target.mjs +30 -0
  382. package/bundled/upstream/impeccable/skills/impeccable/scripts/live-wrap.mjs +1 -1
  383. package/bundled/upstream/impeccable/skills/impeccable/scripts/live.mjs +72 -21
  384. package/bundled/upstream/oh-my-claudecode/.omc-source/bundle.json +2 -2
  385. package/bundled/upstream/oh-my-claudecode/.omc-source/provenance.json +103 -103
  386. package/bundled/upstream/oh-my-claudecode/agents/analyst.md +6 -0
  387. package/bundled/upstream/oh-my-claudecode/agents/architect.md +6 -0
  388. package/bundled/upstream/oh-my-claudecode/agents/code-reviewer.md +6 -0
  389. package/bundled/upstream/oh-my-claudecode/agents/critic.md +6 -0
  390. package/bundled/upstream/oh-my-claudecode/agents/debugger.md +6 -0
  391. package/bundled/upstream/oh-my-claudecode/agents/security-reviewer.md +6 -0
  392. package/bundled/upstream/oh-my-claudecode/agents/tracer.md +6 -0
  393. package/bundled/upstream/oh-my-claudecode/agents/verifier.md +7 -0
  394. package/bundled/upstream/oh-my-claudecode/hooks/hooks.json +9 -2
  395. package/bundled/upstream/oh-my-claudecode/skills/ask/SKILL.md +15 -4
  396. package/bundled/upstream/oh-my-claudecode/skills/autopilot/SKILL.md +30 -1
  397. package/bundled/upstream/oh-my-claudecode/skills/cancel/SKILL.md +29 -35
  398. package/bundled/upstream/oh-my-claudecode/skills/ccg/SKILL.md +20 -9
  399. package/bundled/upstream/oh-my-claudecode/skills/configure-notifications/SKILL.md +2 -2
  400. package/bundled/upstream/oh-my-claudecode/skills/omc-reference/SKILL.md +6 -4
  401. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/02-configure.md +1 -1
  402. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/03-integrations.md +2 -1
  403. package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/04-welcome.md +2 -2
  404. package/bundled/upstream/oh-my-claudecode/skills/omc-teams/SKILL.md +29 -18
  405. package/bundled/upstream/oh-my-claudecode/skills/team/SKILL.md +127 -165
  406. package/bundled/upstream/superpowers/.omc-source/bundle.json +2 -2
  407. package/bundled/upstream/superpowers/.omc-source/provenance.json +59 -52
  408. package/bundled/upstream/superpowers/hooks/hooks-codex.json +16 -0
  409. package/bundled/upstream/superpowers/hooks/session-start +4 -12
  410. package/bundled/upstream/superpowers/hooks/session-start-codex +26 -0
  411. package/bundled/upstream/superpowers/skills/brainstorming/SKILL.md +5 -10
  412. package/bundled/upstream/superpowers/skills/brainstorming/scripts/frame-template.html +25 -26
  413. package/bundled/upstream/superpowers/skills/brainstorming/scripts/helper.js +101 -22
  414. package/bundled/upstream/superpowers/skills/brainstorming/scripts/server.cjs +399 -30
  415. package/bundled/upstream/superpowers/skills/brainstorming/scripts/start-server.sh +70 -9
  416. package/bundled/upstream/superpowers/skills/brainstorming/scripts/stop-server.sh +66 -2
  417. package/bundled/upstream/superpowers/skills/brainstorming/spec-document-reviewer-prompt.md +1 -1
  418. package/bundled/upstream/superpowers/skills/brainstorming/visual-companion.md +33 -22
  419. package/bundled/upstream/superpowers/skills/dispatching-parallel-agents/SKILL.md +9 -6
  420. package/bundled/upstream/superpowers/skills/executing-plans/SKILL.md +2 -2
  421. package/bundled/upstream/superpowers/skills/finishing-a-development-branch/SKILL.md +2 -12
  422. package/bundled/upstream/superpowers/skills/receiving-code-review/SKILL.md +2 -2
  423. package/bundled/upstream/superpowers/skills/requesting-code-review/SKILL.md +2 -2
  424. package/bundled/upstream/superpowers/skills/requesting-code-review/code-reviewer.md +15 -11
  425. package/bundled/upstream/superpowers/skills/subagent-driven-development/SKILL.md +206 -67
  426. package/bundled/upstream/superpowers/skills/subagent-driven-development/implementer-prompt.md +30 -4
  427. package/bundled/upstream/superpowers/skills/subagent-driven-development/scripts/review-package +44 -0
  428. package/bundled/upstream/superpowers/skills/subagent-driven-development/scripts/sdd-workspace +22 -0
  429. package/bundled/upstream/superpowers/skills/subagent-driven-development/scripts/task-brief +40 -0
  430. package/bundled/upstream/superpowers/skills/subagent-driven-development/task-reviewer-prompt.md +188 -0
  431. package/bundled/upstream/superpowers/skills/systematic-debugging/SKILL.md +1 -1
  432. package/bundled/upstream/superpowers/skills/test-driven-development/SKILL.md +1 -1
  433. package/bundled/upstream/superpowers/skills/using-git-worktrees/SKILL.md +9 -22
  434. package/bundled/upstream/superpowers/skills/using-superpowers/SKILL.md +19 -15
  435. package/bundled/upstream/superpowers/skills/using-superpowers/references/antigravity-tools.md +96 -0
  436. package/bundled/upstream/superpowers/skills/using-superpowers/references/claude-code-tools.md +50 -0
  437. package/bundled/upstream/superpowers/skills/using-superpowers/references/codex-tools.md +25 -12
  438. package/bundled/upstream/superpowers/skills/using-superpowers/references/copilot-tools.md +27 -20
  439. package/bundled/upstream/superpowers/skills/using-superpowers/references/gemini-tools.md +44 -32
  440. package/bundled/upstream/superpowers/skills/using-superpowers/references/pi-tools.md +28 -0
  441. package/bundled/upstream/superpowers/skills/writing-plans/SKILL.md +22 -0
  442. package/bundled/upstream/superpowers/skills/writing-plans/plan-document-reviewer-prompt.md +1 -1
  443. package/bundled/upstream/superpowers/skills/writing-skills/SKILL.md +52 -18
  444. package/bundled/upstream/superpowers/skills/writing-skills/anthropic-best-practices.md +88 -88
  445. package/bundled/upstream/superpowers/skills/writing-skills/persuasion-principles.md +3 -3
  446. package/package.json +1 -1
  447. package/bundled/upstream/superpowers/skills/subagent-driven-development/code-quality-reviewer-prompt.md +0 -25
  448. package/bundled/upstream/superpowers/skills/subagent-driven-development/spec-reviewer-prompt.md +0 -61
@@ -1,283 +1,675 @@
1
1
  ---
2
2
  name: laravel-tdd
3
- description: Test-driven development for Laravel with PHPUnit and Pest, factories, database testing, fakes, and coverage targets.
4
- origin: ECC
3
+ description: Laravel testing strategies with PHPUnit, Pest, model factories, HTTP tests, Sanctum authentication testing, mocking, and coverage.
4
+ metadata:
5
+ origin: ECC
5
6
  ---
6
7
 
7
- # Laravel TDD Workflow
8
+ # Laravel Testing with TDD
8
9
 
9
- Test-driven development for Laravel applications using PHPUnit and Pest with 80%+ coverage (unit + feature).
10
+ Test-driven development for Laravel applications using PHPUnit, Pest, Laravel factories, and testing helpers.
10
11
 
11
- ## When to Use
12
+ ## When to Activate
12
13
 
13
- - New features or endpoints in Laravel
14
- - Bug fixes or refactors
15
- - Testing Eloquent models, policies, jobs, and notifications
16
- - Prefer Pest for new tests unless the project already standardizes on PHPUnit
14
+ - Writing new Laravel applications or features
15
+ - Implementing API endpoints with Sanctum or Passport authentication
16
+ - Testing Eloquent models, relationships, scopes, and accessors
17
+ - Setting up testing infrastructure for Laravel projects
18
+ - Writing feature tests for HTTP controllers and form requests
19
+ - Mocking external services (queues, mail, notifications, HTTP)
17
20
 
18
- ## How It Works
21
+ ## TDD Workflow for Laravel
19
22
 
20
23
  ### Red-Green-Refactor Cycle
21
24
 
22
- 1) Write a failing test
23
- 2) Implement the minimal change to pass
24
- 3) Refactor while keeping tests green
25
+ ```php
26
+ // Step 1: RED Write a failing test
27
+ public function test_a_product_can_be_created(): void
28
+ {
29
+ $product = Product::factory()->create(['name' => 'Test Product']);
30
+ $this->assertDatabaseHas('products', ['name' => 'Test Product']);
31
+ }
25
32
 
26
- ### Test Layers
33
+ // Step 2: GREEN — Write the migration, model, and factory
34
+ // Step 3: REFACTOR — Improve while keeping tests green
35
+ ```
27
36
 
28
- - **Unit**: pure PHP classes, value objects, services
29
- - **Feature**: HTTP endpoints, auth, validation, policies
30
- - **Integration**: database + queue + external boundaries
37
+ ## Setup
38
+
39
+ ### PHPUnit Configuration
40
+
41
+ ```xml
42
+ <?xml version="1.0" encoding="UTF-8"?>
43
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44
+ xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
45
+ bootstrap="vendor/autoload.php"
46
+ colors="true">
47
+ <testsuites>
48
+ <testsuite name="Unit">
49
+ <directory suffix="Test.php">tests/Unit</directory>
50
+ </testsuite>
51
+ <testsuite name="Feature">
52
+ <directory suffix="Test.php">tests/Feature</directory>
53
+ </testsuite>
54
+ </testsuites>
55
+ <php>
56
+ <env name="APP_ENV" value="testing"/>
57
+ <env name="BCRYPT_ROUNDS" value="4"/>
58
+ <env name="CACHE_STORE" value="array"/>
59
+ <env name="DB_CONNECTION" value="sqlite"/>
60
+ <env name="DB_DATABASE" value=":memory:"/>
61
+ <env name="MAIL_MAILER" value="array"/>
62
+ <env name="QUEUE_CONNECTION" value="sync"/>
63
+ <env name="SESSION_DRIVER" value="array"/>
64
+ </php>
65
+ </phpunit>
66
+ ```
67
+
68
+ ### Base TestCase Setup
31
69
 
32
- Choose layers based on scope:
70
+ ```php
71
+ namespace Tests;
33
72
 
34
- - Use **Unit** tests for pure business logic and services.
35
- - Use **Feature** tests for HTTP, auth, validation, and response shape.
36
- - Use **Integration** tests when validating DB/queues/external services together.
73
+ use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
37
74
 
38
- ### Database Strategy
75
+ abstract class TestCase extends BaseTestCase
76
+ {
77
+ protected function setUp(): void
78
+ {
79
+ parent::setUp();
80
+ // Call $this->withoutExceptionHandling() only in tests that
81
+ // test non-HTTP exceptions; it suppresses assertStatus() etc.
82
+ }
83
+
84
+ // Helper: Authenticate and return user
85
+ protected function actingAsUser(): mixed
86
+ {
87
+ $user = \App\Models\User::factory()->create();
88
+ $this->actingAs($user);
89
+ return $user;
90
+ }
39
91
 
40
- - `RefreshDatabase` for most feature/integration tests (runs migrations once per test run, then wraps each test in a transaction when supported; in-memory databases may re-migrate per test)
41
- - `DatabaseTransactions` when the schema is already migrated and you only need per-test rollback
42
- - `DatabaseMigrations` when you need a full migrate/fresh for every test and can afford the cost
92
+ protected function actingAsAdmin(): mixed
93
+ {
94
+ $admin = \App\Models\User::factory()->admin()->create();
95
+ $this->actingAs($admin);
96
+ return $admin;
97
+ }
98
+ }
99
+ ```
43
100
 
44
- Use `RefreshDatabase` as the default for tests that touch the database: for databases with transaction support, it runs migrations once per test run (via a static flag) and wraps each test in a transaction; for `:memory:` SQLite or connections without transactions, it migrates before each test. Use `DatabaseTransactions` when the schema is already migrated and you only need per-test rollbacks.
101
+ ## Model Factories
45
102
 
46
- ### Testing Framework Choice
103
+ ```php
104
+ // database/factories/UserFactory.php
105
+ class UserFactory extends Factory
106
+ {
107
+ protected static ?string $password = null;
47
108
 
48
- - Default to **Pest** for new tests when available.
49
- - Use **PHPUnit** only if the project already standardizes on it or requires PHPUnit-specific tooling.
109
+ public function definition(): array
110
+ {
111
+ return [
112
+ 'name' => fake()->name(),
113
+ 'email' => fake()->unique()->safeEmail(),
114
+ 'email_verified_at' => now(),
115
+ 'password' => static::$password ??= Hash::make('password'),
116
+ 'remember_token' => Str::random(10),
117
+ 'role' => 'user',
118
+ ];
119
+ }
50
120
 
51
- ## Examples
121
+ public function admin(): static
122
+ {
123
+ return $this->state(fn (array $attributes) => ['role' => 'admin']);
124
+ }
52
125
 
53
- ### PHPUnit Example
126
+ public function unverified(): static
127
+ {
128
+ return $this->state(fn (array $attributes) => ['email_verified_at' => null]);
129
+ }
130
+ }
131
+
132
+ // database/factories/ProductFactory.php
133
+ class ProductFactory extends Factory
134
+ {
135
+ public function definition(): array
136
+ {
137
+ return [
138
+ 'name' => fake()->unique()->words(3, true),
139
+ 'slug' => fn (array $attrs) => Str::slug($attrs['name']),
140
+ 'description' => fake()->paragraph(),
141
+ 'price' => fake()->numberBetween(100, 100000),
142
+ 'stock' => fake()->numberBetween(0, 100),
143
+ 'is_active' => true,
144
+ 'user_id' => UserFactory::new(),
145
+ ];
146
+ }
147
+
148
+ public function outOfStock(): static
149
+ {
150
+ return $this->state(fn (array $attributes) => ['stock' => 0]);
151
+ }
152
+ }
153
+ ```
154
+
155
+ ### Using Factories
54
156
 
55
157
  ```php
158
+ $user = User::factory()->create();
159
+ $admin = User::factory()->admin()->create();
160
+ $product = Product::factory()->create(['user_id' => $user->id]);
161
+ $products = Product::factory()->count(10)->create();
162
+ $draft = Product::factory()->make(); // Not persisted
163
+
164
+ // With relationships
165
+ $user = User::factory()->has(Product::factory()->count(3))->create();
166
+
167
+ // Sequences
168
+ User::factory()->count(3)->sequence(
169
+ ['role' => 'admin'], ['role' => 'editor'], ['role' => 'user'],
170
+ )->create();
171
+ ```
172
+
173
+ ## Model Testing
174
+
175
+ ```php
176
+ namespace Tests\Unit\Models;
177
+
56
178
  use App\Models\User;
179
+ use App\Models\Product;
57
180
  use Illuminate\Foundation\Testing\RefreshDatabase;
58
181
  use Tests\TestCase;
59
182
 
60
- final class ProjectControllerTest extends TestCase
183
+ class UserTest extends TestCase
61
184
  {
62
185
  use RefreshDatabase;
63
186
 
64
- public function test_owner_can_create_project(): void
187
+ public function test_it_hides_sensitive_attributes(): void
65
188
  {
66
189
  $user = User::factory()->create();
190
+ $this->assertArrayNotHasKey('password', $user->toArray());
191
+ }
67
192
 
68
- $response = $this->actingAs($user)->postJson('/api/projects', [
69
- 'name' => 'New Project',
70
- ]);
193
+ public function test_admin_scope_returns_only_admins(): void
194
+ {
195
+ User::factory()->admin()->create();
196
+ User::factory()->count(3)->create();
71
197
 
72
- $response->assertCreated();
73
- $this->assertDatabaseHas('projects', ['name' => 'New Project']);
198
+ $this->assertCount(1, User::admin()->get());
199
+ }
200
+ }
201
+
202
+ class ProductTest extends TestCase
203
+ {
204
+ use RefreshDatabase;
205
+
206
+ public function test_active_scope_filters_correctly(): void
207
+ {
208
+ Product::factory()->count(3)->create(['is_active' => true]);
209
+ Product::factory()->count(2)->create(['is_active' => false]);
210
+
211
+ $this->assertCount(3, Product::active()->get());
212
+ }
213
+
214
+ public function test_it_belongs_to_a_user(): void
215
+ {
216
+ $user = User::factory()->create();
217
+ $product = Product::factory()->create(['user_id' => $user->id]);
218
+
219
+ $this->assertTrue($product->user->is($user));
74
220
  }
75
221
  }
76
222
  ```
77
223
 
78
- ### Feature Test Example (HTTP Layer)
224
+ ## Feature / HTTP Testing
79
225
 
80
226
  ```php
81
- use App\Models\Project;
227
+ namespace Tests\Feature\Http\Controllers;
228
+
229
+ use App\Models\Product;
82
230
  use App\Models\User;
83
231
  use Illuminate\Foundation\Testing\RefreshDatabase;
84
232
  use Tests\TestCase;
85
233
 
86
- final class ProjectIndexTest extends TestCase
234
+ class ProductControllerTest extends TestCase
87
235
  {
88
236
  use RefreshDatabase;
89
237
 
90
- public function test_projects_index_returns_paginated_results(): void
238
+ public function test_guests_are_redirected_to_login(): void
239
+ {
240
+ $this->get(route('products.create'))->assertRedirect(route('login'));
241
+ }
242
+
243
+ public function test_it_stores_a_new_product(): void
91
244
  {
92
245
  $user = User::factory()->create();
93
- Project::factory()->count(3)->for($user)->create();
246
+ $this->actingAs($user);
94
247
 
95
- $response = $this->actingAs($user)->getJson('/api/projects');
248
+ $response = $this->post(route('products.store'), [
249
+ 'name' => 'New Product',
250
+ 'description' => 'Description',
251
+ 'price' => 2999,
252
+ 'stock' => 10,
253
+ ]);
96
254
 
97
- $response->assertOk();
98
- $response->assertJsonStructure(['success', 'data', 'error', 'meta']);
255
+ $response->assertRedirect(route('products.index'));
256
+ $this->assertDatabaseHas('products', [
257
+ 'name' => 'New Product',
258
+ 'user_id' => $user->id,
259
+ ]);
260
+ }
261
+
262
+ public function test_it_validates_required_fields(): void
263
+ {
264
+ $this->actingAs(User::factory()->create());
265
+ $this->post(route('products.store'), [])
266
+ ->assertSessionHasErrors(['name', 'price']);
267
+ }
268
+
269
+ public function test_users_cannot_modify_others_products(): void
270
+ {
271
+ $owner = User::factory()->create();
272
+ $attacker = User::factory()->create();
273
+ $product = Product::factory()->create(['user_id' => $owner->id]);
274
+
275
+ $this->actingAs($attacker)
276
+ ->delete(route('products.destroy', $product))
277
+ ->assertForbidden();
99
278
  }
100
279
  }
101
280
  ```
102
281
 
103
- ### Pest Example
282
+ ## JSON API Testing
104
283
 
105
284
  ```php
285
+ namespace Tests\Feature\Http\Controllers\Api;
286
+
287
+ use App\Models\Product;
106
288
  use App\Models\User;
107
289
  use Illuminate\Foundation\Testing\RefreshDatabase;
290
+ use Tests\TestCase;
108
291
 
109
- use function Pest\Laravel\actingAs;
110
- use function Pest\Laravel\assertDatabaseHas;
292
+ class ProductApiTest extends TestCase
293
+ {
294
+ use RefreshDatabase;
111
295
 
112
- uses(RefreshDatabase::class);
296
+ public function test_unauthenticated_requests_are_rejected(): void
297
+ {
298
+ $this->getJson('/api/products')->assertUnauthorized();
299
+ }
113
300
 
114
- test('owner can create project', function () {
115
- $user = User::factory()->create();
301
+ public function test_it_lists_paginated_products(): void
302
+ {
303
+ $user = User::factory()->create();
304
+ Product::factory()->count(5)->create(['user_id' => $user->id]);
116
305
 
117
- $response = actingAs($user)->postJson('/api/projects', [
118
- 'name' => 'New Project',
119
- ]);
306
+ $response = $this->actingAs($user)->getJson('/api/products');
120
307
 
121
- $response->assertCreated();
122
- assertDatabaseHas('projects', ['name' => 'New Project']);
123
- });
308
+ $response->assertOk();
309
+ $response->assertJsonCount(5, 'data');
310
+ $response->assertJsonStructure([
311
+ 'data' => [['id', 'name', 'price']],
312
+ 'meta' => ['current_page', 'last_page', 'total'],
313
+ ]);
314
+ }
315
+
316
+ public function test_it_creates_a_product(): void
317
+ {
318
+ $user = User::factory()->create();
319
+
320
+ $response = $this->actingAs($user)->postJson('/api/products', [
321
+ 'name' => 'API Product',
322
+ 'price' => 4999,
323
+ ]);
324
+
325
+ $response->assertCreated();
326
+ $response->assertJsonPath('data.name', 'API Product');
327
+ }
328
+
329
+ public function test_users_cannot_delete_others_products(): void
330
+ {
331
+ $owner = User::factory()->create();
332
+ $attacker = User::factory()->create();
333
+ $product = Product::factory()->create(['user_id' => $owner->id]);
334
+
335
+ $this->actingAs($attacker)
336
+ ->deleteJson("/api/products/{$product->id}")
337
+ ->assertForbidden();
338
+ }
339
+ }
124
340
  ```
125
341
 
126
- ### Feature Test Pest Example (HTTP Layer)
342
+ ## Sanctum API Auth Testing
127
343
 
128
344
  ```php
129
- use App\Models\Project;
345
+ namespace Tests\Feature\Http\Controllers\Api;
346
+
130
347
  use App\Models\User;
131
348
  use Illuminate\Foundation\Testing\RefreshDatabase;
349
+ use Illuminate\Support\Facades\Hash;
350
+ use Tests\TestCase;
132
351
 
133
- use function Pest\Laravel\actingAs;
352
+ class AuthControllerTest extends TestCase
353
+ {
354
+ use RefreshDatabase;
134
355
 
135
- uses(RefreshDatabase::class);
356
+ public function test_users_can_register(): void
357
+ {
358
+ $response = $this->postJson('/api/register', [
359
+ 'name' => 'Test User',
360
+ 'email' => 'test@example.com',
361
+ 'password' => 'Password123!',
362
+ 'password_confirmation' => 'Password123!',
363
+ ]);
136
364
 
137
- test('projects index returns paginated results', function () {
138
- $user = User::factory()->create();
139
- Project::factory()->count(3)->for($user)->create();
365
+ $response->assertCreated();
366
+ $response->assertJsonStructure(['data' => ['user', 'token']]);
367
+ }
140
368
 
141
- $response = actingAs($user)->getJson('/api/projects');
369
+ public function test_users_can_login(): void
370
+ {
371
+ User::factory()->create([
372
+ 'email' => 'test@example.com',
373
+ 'password' => Hash::make('Password123!'),
374
+ ]);
142
375
 
143
- $response->assertOk();
144
- $response->assertJsonStructure(['success', 'data', 'error', 'meta']);
145
- });
146
- ```
376
+ $response = $this->postJson('/api/login', [
377
+ 'email' => 'test@example.com',
378
+ 'password' => 'Password123!',
379
+ ]);
380
+
381
+ $response->assertOk();
382
+ $response->assertJsonStructure(['data' => ['token']]);
383
+ }
147
384
 
148
- ### Factories and States
385
+ public function test_users_cannot_login_with_wrong_password(): void
386
+ {
387
+ User::factory()->create(['email' => 'test@example.com']);
149
388
 
150
- - Use factories for test data
151
- - Define states for edge cases (archived, admin, trial)
389
+ $this->postJson('/api/login', [
390
+ 'email' => 'test@example.com',
391
+ 'password' => 'wrong',
392
+ ])->assertUnprocessable();
393
+ }
152
394
 
153
- ```php
154
- $user = User::factory()->state(['role' => 'admin'])->create();
155
- ```
395
+ public function test_token_bearer_authenticates_requests(): void
396
+ {
397
+ $user = User::factory()->create();
398
+ $token = $user->createToken('test')->plainTextToken;
156
399
 
157
- ### Database Testing
400
+ $this->withToken($token)
401
+ ->getJson('/api/user')
402
+ ->assertOk()
403
+ ->assertJsonPath('data.email', $user->email);
404
+ }
405
+ }
406
+ ```
158
407
 
159
- - Use `RefreshDatabase` for clean state
160
- - Keep tests isolated and deterministic
161
- - Prefer `assertDatabaseHas` over manual queries
408
+ ## Mocking and Fakes
162
409
 
163
- ### Persistence Test Example
410
+ ### HTTP Fake
164
411
 
165
412
  ```php
166
- use App\Models\Project;
167
- use Illuminate\Foundation\Testing\RefreshDatabase;
168
- use Tests\TestCase;
413
+ use Illuminate\Support\Facades\Http;
169
414
 
170
- final class ProjectRepositoryTest extends TestCase
415
+ public function test_it_handles_successful_payment(): void
171
416
  {
172
- use RefreshDatabase;
417
+ Http::fake([
418
+ 'api.stripe.com/*' => Http::response(['id' => 'pi_123', 'status' => 'succeeded'], 200),
419
+ ]);
173
420
 
174
- public function test_project_can_be_retrieved_by_slug(): void
175
- {
176
- $project = Project::factory()->create(['slug' => 'alpha']);
421
+ $result = (new PaymentService())->charge(2999);
422
+ $this->assertTrue($result->success);
423
+ }
177
424
 
178
- $found = Project::query()->where('slug', 'alpha')->firstOrFail();
425
+ public function test_it_handles_gateway_failure(): void
426
+ {
427
+ Http::fake([
428
+ 'api.stripe.com/*' => Http::response(['error' => 'card_declined'], 402),
429
+ ]);
179
430
 
180
- $this->assertSame($project->id, $found->id);
181
- }
431
+ $this->expectException(PaymentFailedException::class);
432
+ (new PaymentService())->charge(2999);
433
+ }
434
+
435
+ public function test_it_retries_on_timeout(): void
436
+ {
437
+ Http::fake([
438
+ 'api.stripe.com/*' => Http::sequence()
439
+ ->pushStatus(408)
440
+ ->pushStatus(200),
441
+ ]);
442
+
443
+ $this->assertTrue((new PaymentService())->charge(2999)->success);
182
444
  }
183
445
  ```
184
446
 
185
- ### Fakes for Side Effects
447
+ ### Mail Fake
186
448
 
187
- - `Bus::fake()` for jobs
188
- - `Queue::fake()` for queued work
189
- - `Mail::fake()` and `Notification::fake()` for notifications
190
- - `Event::fake()` for domain events
449
+ ```php
450
+ Mail::fake();
451
+
452
+ $order->sendConfirmation();
453
+
454
+ Mail::assertSent(OrderConfirmation::class, function ($mail) use ($order) {
455
+ return $mail->hasTo($order->user->email);
456
+ });
457
+ ```
458
+
459
+ ### Notification Fake
191
460
 
192
461
  ```php
193
- use Illuminate\Support\Facades\Queue;
462
+ Notification::fake();
194
463
 
464
+ $user->notify(new WelcomeUser());
465
+
466
+ Notification::assertSentTo($user, WelcomeUser::class);
467
+ ```
468
+
469
+ ### Queue Fake
470
+
471
+ ```php
195
472
  Queue::fake();
196
473
 
197
- dispatch(new SendOrderConfirmation($order->id));
474
+ ProcessImage::dispatch($product);
198
475
 
199
- Queue::assertPushed(SendOrderConfirmation::class);
476
+ Queue::assertPushed(ProcessImage::class, function ($job) use ($product) {
477
+ return $job->product->id === $product->id;
478
+ });
200
479
  ```
201
480
 
481
+ ### Storage Fake
482
+
202
483
  ```php
203
- use Illuminate\Support\Facades\Notification;
484
+ Storage::fake('public');
204
485
 
205
- Notification::fake();
486
+ $file = UploadedFile::fake()->image('photo.jpg', 200, 200);
206
487
 
207
- $user->notify(new InvoiceReady($invoice));
488
+ $response = $this->actingAs($user)->post('/avatar', [
489
+ 'avatar' => $file,
490
+ ]);
208
491
 
209
- Notification::assertSentTo($user, InvoiceReady::class);
492
+ $response->assertSessionHasNoErrors();
493
+ Storage::disk('public')->assertExists('avatars/' . $file->hashName());
210
494
  ```
211
495
 
212
- ### Auth Testing (Sanctum)
496
+ ### Event Fake
213
497
 
214
498
  ```php
215
- use Laravel\Sanctum\Sanctum;
499
+ Event::fake();
216
500
 
217
- Sanctum::actingAs($user);
501
+ $order->markAsShipped();
218
502
 
219
- $response = $this->getJson('/api/projects');
220
- $response->assertOk();
503
+ Event::assertDispatched(OrderShipped::class, function ($event) use ($order) {
504
+ return $event->order->id === $order->id;
505
+ });
221
506
  ```
222
507
 
223
- ### HTTP and External Services
508
+ ## Artisan Command Tests
224
509
 
225
- - Use `Http::fake()` to isolate external APIs
226
- - Assert outbound payloads with `Http::assertSent()`
510
+ ```php
511
+ public function test_it_sends_newsletters(): void
512
+ {
513
+ Mail::fake();
514
+ User::factory()->count(5)->create(['subscribed' => true]);
227
515
 
228
- ### Coverage Targets
516
+ $this->artisan('newsletter:send')
517
+ ->expectsOutput('Sending newsletter to 5 subscribers...')
518
+ ->assertExitCode(0);
229
519
 
230
- - Enforce 80%+ coverage for unit + feature tests
231
- - Use `pcov` or `XDEBUG_MODE=coverage` in CI
520
+ Mail::assertSent(NewsletterMail::class, 5);
521
+ }
232
522
 
233
- ### Test Commands
523
+ public function test_it_handles_no_subscribers(): void
524
+ {
525
+ $this->artisan('newsletter:send')
526
+ ->expectsOutput('No subscribers found.')
527
+ ->assertExitCode(0);
528
+ }
529
+ ```
234
530
 
235
- - `php artisan test`
236
- - `vendor/bin/phpunit`
237
- - `vendor/bin/pest`
531
+ ## Authorization Tests
238
532
 
239
- ### Test Configuration
533
+ ```php
534
+ public function test_users_can_update_own_posts(): void
535
+ {
536
+ $user = User::factory()->create();
537
+ $post = Post::factory()->create(['user_id' => $user->id]);
240
538
 
241
- - Use `phpunit.xml` to set `DB_CONNECTION=sqlite` and `DB_DATABASE=:memory:` for fast tests
242
- - Keep separate env for tests to avoid touching dev/prod data
539
+ $this->actingAs($user)
540
+ ->put(route('posts.update', $post), ['title' => 'Updated'])
541
+ ->assertRedirect();
542
+ }
243
543
 
244
- ### Authorization Tests
544
+ public function test_users_cannot_update_others_posts(): void
545
+ {
546
+ $post = Post::factory()->create();
547
+ $this->actingAs(User::factory()->create())
548
+ ->put(route('posts.update', $post), ['title' => 'Hacked'])
549
+ ->assertForbidden();
550
+ }
245
551
 
246
- ```php
247
- use Illuminate\Support\Facades\Gate;
552
+ public function test_gate_before_grants_super_admin_full_access(): void
553
+ {
554
+ $super = User::factory()->create(['role' => 'super-admin']);
555
+ $post = Post::factory()->create();
248
556
 
249
- $this->assertTrue(Gate::forUser($user)->allows('update', $project));
250
- $this->assertFalse(Gate::forUser($otherUser)->allows('update', $project));
251
- ```
557
+ $this->actingAs($super)
558
+ ->delete(route('posts.destroy', $post))
559
+ ->assertRedirect();
252
560
 
253
- ### Inertia Feature Tests
561
+ $this->assertSoftDeleted($post);
562
+ }
563
+ ```
254
564
 
255
- When using Inertia.js, assert on the component name and props with the Inertia testing helpers.
565
+ ## Pest Feature Tests
256
566
 
257
567
  ```php
568
+ <?php
569
+
570
+ use App\Models\Product;
258
571
  use App\Models\User;
259
- use Inertia\Testing\AssertableInertia;
260
- use Illuminate\Foundation\Testing\RefreshDatabase;
261
- use Tests\TestCase;
262
572
 
263
- final class DashboardInertiaTest extends TestCase
264
- {
265
- use RefreshDatabase;
573
+ uses(\Illuminate\Foundation\Testing\RefreshDatabase::class);
266
574
 
267
- public function test_dashboard_inertia_props(): void
268
- {
269
- $user = User::factory()->create();
575
+ beforeEach(function () {
576
+ $this->user = User::factory()->create();
577
+ $this->actingAs($this->user);
578
+ });
270
579
 
271
- $response = $this->actingAs($user)->get('/dashboard');
580
+ it('lists products', function () {
581
+ Product::factory()->count(3)->create(['user_id' => $this->user->id]);
272
582
 
273
- $response->assertOk();
274
- $response->assertInertia(fn (AssertableInertia $page) => $page
275
- ->component('Dashboard')
276
- ->where('user.id', $user->id)
277
- ->has('projects')
278
- );
279
- }
280
- }
583
+ $this->get(route('products.index'))
584
+ ->assertOk()
585
+ ->assertViewHas('products');
586
+ });
587
+
588
+ it('creates a product with valid data', function () {
589
+ $this->post(route('products.store'), [
590
+ 'name' => 'Test Product', 'price' => 1999,
591
+ ])->assertRedirect();
592
+
593
+ $this->assertDatabaseHas('products', ['name' => 'Test Product']);
594
+ });
595
+
596
+ it('fails validation without required fields', function () {
597
+ $this->post(route('products.store'), [])
598
+ ->assertSessionHasErrors(['name', 'price']);
599
+ });
600
+
601
+ it('authorizes updates', function () {
602
+ $other = User::factory()->create();
603
+ $product = Product::factory()->create(['user_id' => $other->id]);
604
+
605
+ $this->put(route('products.update', $product), ['name' => 'Hacked'])
606
+ ->assertForbidden();
607
+ });
608
+ ```
609
+
610
+ ## Coverage
611
+
612
+ ```bash
613
+ # PHPUnit (use clover output for CI threshold checks)
614
+ vendor/bin/phpunit --coverage-html coverage --coverage-clover clover.xml
615
+
616
+ # Pest (built-in threshold support)
617
+ vendor/bin/pest --coverage --min=80
281
618
  ```
282
619
 
283
- Prefer `assertInertia` over raw JSON assertions to keep tests aligned with Inertia responses.
620
+ ### Coverage Goals
621
+
622
+ | Component | Target |
623
+ |-----------|--------|
624
+ | Models | 95%+ |
625
+ | Actions/Services | 90%+ |
626
+ | Form Requests | 90%+ |
627
+ | Controllers | 85%+ |
628
+ | Policies | 95%+ |
629
+ | Overall | 80%+ |
630
+
631
+ ## Testing Best Practices
632
+
633
+ ### DO
634
+
635
+ - Use factories over manual `create()` calls
636
+ - One logical assertion per test
637
+ - Descriptive names: `test_guests_cannot_create_products`
638
+ - Test edge cases and authorization boundaries
639
+ - Mock external services with `Http::fake()`, `Mail::fake()`
640
+ - Use `RefreshDatabase` for clean state
641
+
642
+ ### DON'T
643
+
644
+ - Don't test Laravel internals (trust the framework)
645
+ - Don't make tests dependent on each other
646
+ - Don't over-mock — mock only service boundaries
647
+ - Don't test private methods — test through the public interface
648
+ - Don't couple tests to HTML structure
649
+
650
+ ## Quick Reference
651
+
652
+ | Pattern | Usage |
653
+ |---------|-------|
654
+ | `RefreshDatabase` | Reset database between tests |
655
+ | `$this->actingAs($user)` | Authenticate as user |
656
+ | `$this->withToken($token)` | Bearer token auth for APIs |
657
+ | `Model::factory()->create()` | Create model with factory |
658
+ | `Model::factory()->count(5)->create()` | Create multiple records |
659
+ | `Http::fake([...])` | Mock HTTP calls |
660
+ | `Mail::fake()` | Trap sent mail |
661
+ | `Notification::fake()` | Trap sent notifications |
662
+ | `Queue::fake()` | Trap queued jobs |
663
+ | `Event::fake()` | Trap dispatched events |
664
+ | `Storage::fake('public')` | Trap file operations |
665
+ | `assertDatabaseHas` | Assert DB row exists |
666
+ | `assertSoftDeleted` | Assert soft-delete |
667
+ | `assertSessionHasErrors` | Assert validation errors |
668
+ | `assertForbidden` | Assert 403 status |
669
+
670
+ ## Related Skills
671
+
672
+ - `laravel-patterns` — Laravel architecture, Eloquent, routing, and API patterns
673
+ - `laravel-security` — Laravel authentication, authorization, and secure coding
674
+ - `tdd-workflow` — The repo-wide RED -> GREEN -> REFACTOR loop
675
+ - `backend-patterns` — General backend API and database patterns