@baselane/packs 0.1.5 → 0.1.6

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 (445) hide show
  1. package/package.json +2 -2
  2. package/packs/full-harness/pack.json +3093 -0
  3. package/packs/full-harness/rendered/.claude/agents/a11y-architect.md +138 -0
  4. package/packs/full-harness/rendered/.claude/agents/agent-evaluator.md +206 -0
  5. package/packs/full-harness/rendered/.claude/agents/architect.md +209 -0
  6. package/packs/full-harness/rendered/.claude/agents/build-error-resolver.md +114 -0
  7. package/packs/full-harness/rendered/.claude/agents/chief-of-staff.md +149 -0
  8. package/packs/full-harness/rendered/.claude/agents/code-architect.md +71 -0
  9. package/packs/full-harness/rendered/.claude/agents/code-explorer.md +69 -0
  10. package/packs/full-harness/rendered/.claude/agents/code-reviewer.md +312 -0
  11. package/packs/full-harness/rendered/.claude/agents/code-simplifier.md +47 -0
  12. package/packs/full-harness/rendered/.claude/agents/comment-analyzer.md +45 -0
  13. package/packs/full-harness/rendered/.claude/agents/conversation-analyzer.md +52 -0
  14. package/packs/full-harness/rendered/.claude/agents/cpp-build-resolver.md +90 -0
  15. package/packs/full-harness/rendered/.claude/agents/cpp-reviewer.md +64 -0
  16. package/packs/full-harness/rendered/.claude/agents/csharp-reviewer.md +93 -0
  17. package/packs/full-harness/rendered/.claude/agents/dart-build-resolver.md +201 -0
  18. package/packs/full-harness/rendered/.claude/agents/database-reviewer.md +91 -0
  19. package/packs/full-harness/rendered/.claude/agents/django-build-resolver.md +243 -0
  20. package/packs/full-harness/rendered/.claude/agents/django-reviewer.md +149 -0
  21. package/packs/full-harness/rendered/.claude/agents/doc-updater.md +107 -0
  22. package/packs/full-harness/rendered/.claude/agents/docs-lookup.md +64 -0
  23. package/packs/full-harness/rendered/.claude/agents/e2e-runner.md +107 -0
  24. package/packs/full-harness/rendered/.claude/agents/fastapi-reviewer.md +68 -0
  25. package/packs/full-harness/rendered/.claude/agents/flutter-reviewer.md +241 -0
  26. package/packs/full-harness/rendered/.claude/agents/fsharp-reviewer.md +92 -0
  27. package/packs/full-harness/rendered/.claude/agents/gan-evaluator.md +206 -0
  28. package/packs/full-harness/rendered/.claude/agents/gan-generator.md +128 -0
  29. package/packs/full-harness/rendered/.claude/agents/gan-planner.md +96 -0
  30. package/packs/full-harness/rendered/.claude/agents/go-build-resolver.md +94 -0
  31. package/packs/full-harness/rendered/.claude/agents/go-reviewer.md +68 -0
  32. package/packs/full-harness/rendered/.claude/agents/harmonyos-app-resolver.md +173 -0
  33. package/packs/full-harness/rendered/.claude/agents/harness-optimizer.md +32 -0
  34. package/packs/full-harness/rendered/.claude/agents/healthcare-reviewer.md +83 -0
  35. package/packs/full-harness/rendered/.claude/agents/homelab-architect.md +94 -0
  36. package/packs/full-harness/rendered/.claude/agents/java-build-resolver.md +266 -0
  37. package/packs/full-harness/rendered/.claude/agents/java-reviewer.md +179 -0
  38. package/packs/full-harness/rendered/.claude/agents/kotlin-build-resolver.md +118 -0
  39. package/packs/full-harness/rendered/.claude/agents/kotlin-reviewer.md +157 -0
  40. package/packs/full-harness/rendered/.claude/agents/loop-operator.md +33 -0
  41. package/packs/full-harness/rendered/.claude/agents/marketing-agent.md +141 -0
  42. package/packs/full-harness/rendered/.claude/agents/mle-reviewer.md +153 -0
  43. package/packs/full-harness/rendered/.claude/agents/network-architect.md +92 -0
  44. package/packs/full-harness/rendered/.claude/agents/network-config-reviewer.md +94 -0
  45. package/packs/full-harness/rendered/.claude/agents/network-troubleshooter.md +116 -0
  46. package/packs/full-harness/rendered/.claude/agents/opensource-forker.md +198 -0
  47. package/packs/full-harness/rendered/.claude/agents/opensource-packager.md +249 -0
  48. package/packs/full-harness/rendered/.claude/agents/opensource-sanitizer.md +188 -0
  49. package/packs/full-harness/rendered/.claude/agents/performance-optimizer.md +446 -0
  50. package/packs/full-harness/rendered/.claude/agents/php-reviewer.md +92 -0
  51. package/packs/full-harness/rendered/.claude/agents/planner.md +210 -0
  52. package/packs/full-harness/rendered/.claude/agents/pr-test-analyzer.md +45 -0
  53. package/packs/full-harness/rendered/.claude/agents/python-reviewer.md +90 -0
  54. package/packs/full-harness/rendered/.claude/agents/pytorch-build-resolver.md +120 -0
  55. package/packs/full-harness/rendered/.claude/agents/react-build-resolver.md +206 -0
  56. package/packs/full-harness/rendered/.claude/agents/react-reviewer.md +156 -0
  57. package/packs/full-harness/rendered/.claude/agents/refactor-cleaner.md +85 -0
  58. package/packs/full-harness/rendered/.claude/agents/rust-build-resolver.md +148 -0
  59. package/packs/full-harness/rendered/.claude/agents/rust-reviewer.md +85 -0
  60. package/packs/full-harness/rendered/.claude/agents/security-reviewer.md +108 -0
  61. package/packs/full-harness/rendered/.claude/agents/seo-specialist.md +54 -0
  62. package/packs/full-harness/rendered/.claude/agents/silent-failure-hunter.md +50 -0
  63. package/packs/full-harness/rendered/.claude/agents/spec-miner.md +207 -0
  64. package/packs/full-harness/rendered/.claude/agents/swift-build-resolver.md +161 -0
  65. package/packs/full-harness/rendered/.claude/agents/swift-reviewer.md +98 -0
  66. package/packs/full-harness/rendered/.claude/agents/tdd-guide.md +89 -0
  67. package/packs/full-harness/rendered/.claude/agents/type-design-analyzer.md +41 -0
  68. package/packs/full-harness/rendered/.claude/agents/typescript-reviewer.md +96 -0
  69. package/packs/full-harness/rendered/.claude/agents/vue-reviewer.md +195 -0
  70. package/packs/full-harness/rendered/.claude/commands/aside.md +6 -0
  71. package/packs/full-harness/rendered/.claude/commands/auto-update.md +6 -0
  72. package/packs/full-harness/rendered/.claude/commands/build-fix.md +6 -0
  73. package/packs/full-harness/rendered/.claude/commands/checkpoint.md +6 -0
  74. package/packs/full-harness/rendered/.claude/commands/code-review.md +6 -0
  75. package/packs/full-harness/rendered/.claude/commands/cost-report.md +6 -0
  76. package/packs/full-harness/rendered/.claude/commands/cpp-build.md +6 -0
  77. package/packs/full-harness/rendered/.claude/commands/cpp-review.md +6 -0
  78. package/packs/full-harness/rendered/.claude/commands/cpp-test.md +6 -0
  79. package/packs/full-harness/rendered/.claude/commands/ecc-guide.md +6 -0
  80. package/packs/full-harness/rendered/.claude/commands/epic-claim.md +6 -0
  81. package/packs/full-harness/rendered/.claude/commands/epic-decompose.md +6 -0
  82. package/packs/full-harness/rendered/.claude/commands/epic-publish.md +6 -0
  83. package/packs/full-harness/rendered/.claude/commands/epic-review.md +6 -0
  84. package/packs/full-harness/rendered/.claude/commands/epic-sync.md +6 -0
  85. package/packs/full-harness/rendered/.claude/commands/epic-unblock.md +6 -0
  86. package/packs/full-harness/rendered/.claude/commands/epic-validate.md +6 -0
  87. package/packs/full-harness/rendered/.claude/commands/evolve.md +6 -0
  88. package/packs/full-harness/rendered/.claude/commands/fastapi-review.md +6 -0
  89. package/packs/full-harness/rendered/.claude/commands/feature-dev.md +6 -0
  90. package/packs/full-harness/rendered/.claude/commands/flutter-build.md +6 -0
  91. package/packs/full-harness/rendered/.claude/commands/flutter-review.md +6 -0
  92. package/packs/full-harness/rendered/.claude/commands/flutter-test.md +6 -0
  93. package/packs/full-harness/rendered/.claude/commands/gan-build.md +6 -0
  94. package/packs/full-harness/rendered/.claude/commands/gan-design.md +6 -0
  95. package/packs/full-harness/rendered/.claude/commands/go-build.md +6 -0
  96. package/packs/full-harness/rendered/.claude/commands/go-review.md +6 -0
  97. package/packs/full-harness/rendered/.claude/commands/go-test.md +6 -0
  98. package/packs/full-harness/rendered/.claude/commands/gradle-build.md +6 -0
  99. package/packs/full-harness/rendered/.claude/commands/harness-audit.md +6 -0
  100. package/packs/full-harness/rendered/.claude/commands/hookify-configure.md +6 -0
  101. package/packs/full-harness/rendered/.claude/commands/hookify-help.md +6 -0
  102. package/packs/full-harness/rendered/.claude/commands/hookify-list.md +6 -0
  103. package/packs/full-harness/rendered/.claude/commands/hookify.md +6 -0
  104. package/packs/full-harness/rendered/.claude/commands/instinct-export.md +6 -0
  105. package/packs/full-harness/rendered/.claude/commands/instinct-import.md +6 -0
  106. package/packs/full-harness/rendered/.claude/commands/instinct-status.md +6 -0
  107. package/packs/full-harness/rendered/.claude/commands/jira.md +6 -0
  108. package/packs/full-harness/rendered/.claude/commands/kotlin-build.md +6 -0
  109. package/packs/full-harness/rendered/.claude/commands/kotlin-review.md +6 -0
  110. package/packs/full-harness/rendered/.claude/commands/kotlin-test.md +6 -0
  111. package/packs/full-harness/rendered/.claude/commands/learn-eval.md +6 -0
  112. package/packs/full-harness/rendered/.claude/commands/learn.md +6 -0
  113. package/packs/full-harness/rendered/.claude/commands/loop-start.md +6 -0
  114. package/packs/full-harness/rendered/.claude/commands/loop-status.md +6 -0
  115. package/packs/full-harness/rendered/.claude/commands/marketing-campaign.md +6 -0
  116. package/packs/full-harness/rendered/.claude/commands/model-route.md +6 -0
  117. package/packs/full-harness/rendered/.claude/commands/multi-backend.md +6 -0
  118. package/packs/full-harness/rendered/.claude/commands/multi-execute.md +6 -0
  119. package/packs/full-harness/rendered/.claude/commands/multi-frontend.md +6 -0
  120. package/packs/full-harness/rendered/.claude/commands/multi-plan.md +6 -0
  121. package/packs/full-harness/rendered/.claude/commands/multi-workflow.md +6 -0
  122. package/packs/full-harness/rendered/.claude/commands/orch-add-feature.md +6 -0
  123. package/packs/full-harness/rendered/.claude/commands/orch-build-mvp.md +6 -0
  124. package/packs/full-harness/rendered/.claude/commands/orch-change-feature.md +6 -0
  125. package/packs/full-harness/rendered/.claude/commands/orch-fix-defect.md +6 -0
  126. package/packs/full-harness/rendered/.claude/commands/orch-refine-code.md +6 -0
  127. package/packs/full-harness/rendered/.claude/commands/orch-review.md +6 -0
  128. package/packs/full-harness/rendered/.claude/commands/plan-canvas.md +6 -0
  129. package/packs/full-harness/rendered/.claude/commands/plan-prd.md +6 -0
  130. package/packs/full-harness/rendered/.claude/commands/plan.md +6 -0
  131. package/packs/full-harness/rendered/.claude/commands/pm2.md +6 -0
  132. package/packs/full-harness/rendered/.claude/commands/pr.md +6 -0
  133. package/packs/full-harness/rendered/.claude/commands/project-init.md +6 -0
  134. package/packs/full-harness/rendered/.claude/commands/projects.md +6 -0
  135. package/packs/full-harness/rendered/.claude/commands/promote.md +6 -0
  136. package/packs/full-harness/rendered/.claude/commands/prp-commit.md +6 -0
  137. package/packs/full-harness/rendered/.claude/commands/prp-implement.md +6 -0
  138. package/packs/full-harness/rendered/.claude/commands/prp-plan.md +6 -0
  139. package/packs/full-harness/rendered/.claude/commands/prp-pr.md +6 -0
  140. package/packs/full-harness/rendered/.claude/commands/prp-prd.md +6 -0
  141. package/packs/full-harness/rendered/.claude/commands/prune.md +6 -0
  142. package/packs/full-harness/rendered/.claude/commands/python-review.md +6 -0
  143. package/packs/full-harness/rendered/.claude/commands/quality-gate.md +6 -0
  144. package/packs/full-harness/rendered/.claude/commands/react-build.md +6 -0
  145. package/packs/full-harness/rendered/.claude/commands/react-review.md +6 -0
  146. package/packs/full-harness/rendered/.claude/commands/react-test.md +6 -0
  147. package/packs/full-harness/rendered/.claude/commands/refactor-clean.md +6 -0
  148. package/packs/full-harness/rendered/.claude/commands/resume-session.md +6 -0
  149. package/packs/full-harness/rendered/.claude/commands/review-pr.md +6 -0
  150. package/packs/full-harness/rendered/.claude/commands/rust-build.md +6 -0
  151. package/packs/full-harness/rendered/.claude/commands/rust-review.md +6 -0
  152. package/packs/full-harness/rendered/.claude/commands/rust-test.md +6 -0
  153. package/packs/full-harness/rendered/.claude/commands/santa-loop.md +6 -0
  154. package/packs/full-harness/rendered/.claude/commands/save-session.md +6 -0
  155. package/packs/full-harness/rendered/.claude/commands/security-scan.md +6 -0
  156. package/packs/full-harness/rendered/.claude/commands/sessions.md +6 -0
  157. package/packs/full-harness/rendered/.claude/commands/setup-pm.md +6 -0
  158. package/packs/full-harness/rendered/.claude/commands/skill-create.md +6 -0
  159. package/packs/full-harness/rendered/.claude/commands/skill-health.md +6 -0
  160. package/packs/full-harness/rendered/.claude/commands/test-coverage.md +6 -0
  161. package/packs/full-harness/rendered/.claude/commands/update-codemaps.md +6 -0
  162. package/packs/full-harness/rendered/.claude/commands/update-docs.md +6 -0
  163. package/packs/full-harness/rendered/.claude/commands/vue-review.md +6 -0
  164. package/packs/full-harness/rendered/.claude/skills/accessibility/SKILL.md +144 -0
  165. package/packs/full-harness/rendered/.claude/skills/agent-architecture-audit/SKILL.md +254 -0
  166. package/packs/full-harness/rendered/.claude/skills/agent-eval/SKILL.md +143 -0
  167. package/packs/full-harness/rendered/.claude/skills/agent-harness-construction/SKILL.md +72 -0
  168. package/packs/full-harness/rendered/.claude/skills/agent-introspection-debugging/SKILL.md +152 -0
  169. package/packs/full-harness/rendered/.claude/skills/agent-payment-x402/SKILL.md +223 -0
  170. package/packs/full-harness/rendered/.claude/skills/agent-self-evaluation/SKILL.md +181 -0
  171. package/packs/full-harness/rendered/.claude/skills/agent-sort/SKILL.md +214 -0
  172. package/packs/full-harness/rendered/.claude/skills/agentic-engineering/SKILL.md +62 -0
  173. package/packs/full-harness/rendered/.claude/skills/agentic-os/SKILL.md +386 -0
  174. package/packs/full-harness/rendered/.claude/skills/ai-first-engineering/SKILL.md +50 -0
  175. package/packs/full-harness/rendered/.claude/skills/ai-regression-testing/SKILL.md +384 -0
  176. package/packs/full-harness/rendered/.claude/skills/android-clean-architecture/SKILL.md +338 -0
  177. package/packs/full-harness/rendered/.claude/skills/angular-developer/SKILL.md +153 -0
  178. package/packs/full-harness/rendered/.claude/skills/api-connector-builder/SKILL.md +118 -0
  179. package/packs/full-harness/rendered/.claude/skills/api-design/SKILL.md +522 -0
  180. package/packs/full-harness/rendered/.claude/skills/architecture-decision-records/SKILL.md +178 -0
  181. package/packs/full-harness/rendered/.claude/skills/article-writing/SKILL.md +78 -0
  182. package/packs/full-harness/rendered/.claude/skills/automation-audit-ops/SKILL.md +141 -0
  183. package/packs/full-harness/rendered/.claude/skills/autonomous-agent-harness/SKILL.md +272 -0
  184. package/packs/full-harness/rendered/.claude/skills/autonomous-loops/SKILL.md +609 -0
  185. package/packs/full-harness/rendered/.claude/skills/backend-patterns/SKILL.md +560 -0
  186. package/packs/full-harness/rendered/.claude/skills/benchmark/SKILL.md +92 -0
  187. package/packs/full-harness/rendered/.claude/skills/benchmark-methodology/SKILL.md +185 -0
  188. package/packs/full-harness/rendered/.claude/skills/benchmark-optimization-loop/SKILL.md +67 -0
  189. package/packs/full-harness/rendered/.claude/skills/blender-motion-state-inspection/SKILL.md +162 -0
  190. package/packs/full-harness/rendered/.claude/skills/blueprint/SKILL.md +95 -0
  191. package/packs/full-harness/rendered/.claude/skills/brand-discovery/SKILL.md +140 -0
  192. package/packs/full-harness/rendered/.claude/skills/brand-voice/SKILL.md +96 -0
  193. package/packs/full-harness/rendered/.claude/skills/browser-qa/SKILL.md +103 -0
  194. package/packs/full-harness/rendered/.claude/skills/bun-runtime/SKILL.md +83 -0
  195. package/packs/full-harness/rendered/.claude/skills/canary-watch/SKILL.md +106 -0
  196. package/packs/full-harness/rendered/.claude/skills/carrier-relationship-management/SKILL.md +198 -0
  197. package/packs/full-harness/rendered/.claude/skills/cisco-ios-patterns/SKILL.md +162 -0
  198. package/packs/full-harness/rendered/.claude/skills/ck/SKILL.md +143 -0
  199. package/packs/full-harness/rendered/.claude/skills/claude-devfleet/SKILL.md +110 -0
  200. package/packs/full-harness/rendered/.claude/skills/click-path-audit/SKILL.md +243 -0
  201. package/packs/full-harness/rendered/.claude/skills/clickhouse-io/SKILL.md +443 -0
  202. package/packs/full-harness/rendered/.claude/skills/code-tour/SKILL.md +252 -0
  203. package/packs/full-harness/rendered/.claude/skills/codebase-onboarding/SKILL.md +232 -0
  204. package/packs/full-harness/rendered/.claude/skills/codehealth-mcp/SKILL.md +165 -0
  205. package/packs/full-harness/rendered/.claude/skills/coding-standards/SKILL.md +549 -0
  206. package/packs/full-harness/rendered/.claude/skills/competitive-platform-analysis/SKILL.md +209 -0
  207. package/packs/full-harness/rendered/.claude/skills/competitive-report-structure/SKILL.md +157 -0
  208. package/packs/full-harness/rendered/.claude/skills/compose-multiplatform-patterns/SKILL.md +298 -0
  209. package/packs/full-harness/rendered/.claude/skills/config-gc/SKILL.md +118 -0
  210. package/packs/full-harness/rendered/.claude/skills/configure-ecc/SKILL.md +383 -0
  211. package/packs/full-harness/rendered/.claude/skills/connections-optimizer/SKILL.md +188 -0
  212. package/packs/full-harness/rendered/.claude/skills/content-engine/SKILL.md +130 -0
  213. package/packs/full-harness/rendered/.claude/skills/content-hash-cache-pattern/SKILL.md +160 -0
  214. package/packs/full-harness/rendered/.claude/skills/context-budget/SKILL.md +134 -0
  215. package/packs/full-harness/rendered/.claude/skills/continuous-agent-loop/SKILL.md +44 -0
  216. package/packs/full-harness/rendered/.claude/skills/continuous-learning/SKILL.md +130 -0
  217. package/packs/full-harness/rendered/.claude/skills/continuous-learning-v2/SKILL.md +358 -0
  218. package/packs/full-harness/rendered/.claude/skills/cost-aware-llm-pipeline/SKILL.md +182 -0
  219. package/packs/full-harness/rendered/.claude/skills/cost-tracking/SKILL.md +95 -0
  220. package/packs/full-harness/rendered/.claude/skills/council/SKILL.md +202 -0
  221. package/packs/full-harness/rendered/.claude/skills/cpp-coding-standards/SKILL.md +722 -0
  222. package/packs/full-harness/rendered/.claude/skills/cpp-testing/SKILL.md +323 -0
  223. package/packs/full-harness/rendered/.claude/skills/crosspost/SKILL.md +110 -0
  224. package/packs/full-harness/rendered/.claude/skills/csharp-testing/SKILL.md +320 -0
  225. package/packs/full-harness/rendered/.claude/skills/customer-billing-ops/SKILL.md +139 -0
  226. package/packs/full-harness/rendered/.claude/skills/customs-trade-compliance/SKILL.md +248 -0
  227. package/packs/full-harness/rendered/.claude/skills/dart-flutter-patterns/SKILL.md +562 -0
  228. package/packs/full-harness/rendered/.claude/skills/dashboard-builder/SKILL.md +106 -0
  229. package/packs/full-harness/rendered/.claude/skills/data-scraper-agent/SKILL.md +763 -0
  230. package/packs/full-harness/rendered/.claude/skills/data-throughput-accelerator/SKILL.md +70 -0
  231. package/packs/full-harness/rendered/.claude/skills/database-migrations/SKILL.md +428 -0
  232. package/packs/full-harness/rendered/.claude/skills/deep-research/SKILL.md +158 -0
  233. package/packs/full-harness/rendered/.claude/skills/defi-amm-security/SKILL.md +164 -0
  234. package/packs/full-harness/rendered/.claude/skills/delivery-gate/SKILL.md +123 -0
  235. package/packs/full-harness/rendered/.claude/skills/deployment-patterns/SKILL.md +426 -0
  236. package/packs/full-harness/rendered/.claude/skills/design-system/SKILL.md +81 -0
  237. package/packs/full-harness/rendered/.claude/skills/django-celery/SKILL.md +456 -0
  238. package/packs/full-harness/rendered/.claude/skills/django-patterns/SKILL.md +733 -0
  239. package/packs/full-harness/rendered/.claude/skills/django-security/SKILL.md +642 -0
  240. package/packs/full-harness/rendered/.claude/skills/django-tdd/SKILL.md +728 -0
  241. package/packs/full-harness/rendered/.claude/skills/django-verification/SKILL.md +468 -0
  242. package/packs/full-harness/rendered/.claude/skills/dmux-workflows/SKILL.md +190 -0
  243. package/packs/full-harness/rendered/.claude/skills/docker-patterns/SKILL.md +363 -0
  244. package/packs/full-harness/rendered/.claude/skills/documentation-lookup/SKILL.md +89 -0
  245. package/packs/full-harness/rendered/.claude/skills/dotnet-patterns/SKILL.md +320 -0
  246. package/packs/full-harness/rendered/.claude/skills/dynamic-workflow-mode/SKILL.md +122 -0
  247. package/packs/full-harness/rendered/.claude/skills/e2e-testing/SKILL.md +325 -0
  248. package/packs/full-harness/rendered/.claude/skills/ecc-guide/SKILL.md +188 -0
  249. package/packs/full-harness/rendered/.claude/skills/ecc-recipes/SKILL.md +145 -0
  250. package/packs/full-harness/rendered/.claude/skills/ecc-tools-cost-audit/SKILL.md +159 -0
  251. package/packs/full-harness/rendered/.claude/skills/email-ops/SKILL.md +120 -0
  252. package/packs/full-harness/rendered/.claude/skills/energy-procurement/SKILL.md +213 -0
  253. package/packs/full-harness/rendered/.claude/skills/enterprise-agent-ops/SKILL.md +49 -0
  254. package/packs/full-harness/rendered/.claude/skills/error-handling/SKILL.md +375 -0
  255. package/packs/full-harness/rendered/.claude/skills/eval-harness/SKILL.md +268 -0
  256. package/packs/full-harness/rendered/.claude/skills/evm-token-decimals/SKILL.md +128 -0
  257. package/packs/full-harness/rendered/.claude/skills/exa-search/SKILL.md +106 -0
  258. package/packs/full-harness/rendered/.claude/skills/fal-ai-media/SKILL.md +287 -0
  259. package/packs/full-harness/rendered/.claude/skills/fastapi-patterns/SKILL.md +512 -0
  260. package/packs/full-harness/rendered/.claude/skills/finance-billing-ops/SKILL.md +126 -0
  261. package/packs/full-harness/rendered/.claude/skills/flox-environments/SKILL.md +495 -0
  262. package/packs/full-harness/rendered/.claude/skills/flutter-dart-code-review/SKILL.md +434 -0
  263. package/packs/full-harness/rendered/.claude/skills/foundation-models-on-device/SKILL.md +243 -0
  264. package/packs/full-harness/rendered/.claude/skills/frontend-a11y/SKILL.md +441 -0
  265. package/packs/full-harness/rendered/.claude/skills/frontend-design-direction/SKILL.md +91 -0
  266. package/packs/full-harness/rendered/.claude/skills/frontend-patterns/SKILL.md +655 -0
  267. package/packs/full-harness/rendered/.claude/skills/frontend-slides/SKILL.md +183 -0
  268. package/packs/full-harness/rendered/.claude/skills/fsharp-testing/SKILL.md +279 -0
  269. package/packs/full-harness/rendered/.claude/skills/gan-style-harness/SKILL.md +276 -0
  270. package/packs/full-harness/rendered/.claude/skills/gateguard/SKILL.md +131 -0
  271. package/packs/full-harness/rendered/.claude/skills/generating-python-installer/SKILL.md +820 -0
  272. package/packs/full-harness/rendered/.claude/skills/gget/SKILL.md +165 -0
  273. package/packs/full-harness/rendered/.claude/skills/git-workflow/SKILL.md +714 -0
  274. package/packs/full-harness/rendered/.claude/skills/github-ops/SKILL.md +143 -0
  275. package/packs/full-harness/rendered/.claude/skills/golang-patterns/SKILL.md +674 -0
  276. package/packs/full-harness/rendered/.claude/skills/golang-testing/SKILL.md +719 -0
  277. package/packs/full-harness/rendered/.claude/skills/google-workspace-ops/SKILL.md +94 -0
  278. package/packs/full-harness/rendered/.claude/skills/growth-log/SKILL.md +125 -0
  279. package/packs/full-harness/rendered/.claude/skills/healthcare-cdss-patterns/SKILL.md +243 -0
  280. package/packs/full-harness/rendered/.claude/skills/healthcare-emr-patterns/SKILL.md +157 -0
  281. package/packs/full-harness/rendered/.claude/skills/healthcare-eval-harness/SKILL.md +205 -0
  282. package/packs/full-harness/rendered/.claude/skills/healthcare-phi-compliance/SKILL.md +143 -0
  283. package/packs/full-harness/rendered/.claude/skills/hermes-imports/SKILL.md +87 -0
  284. package/packs/full-harness/rendered/.claude/skills/hexagonal-architecture/SKILL.md +275 -0
  285. package/packs/full-harness/rendered/.claude/skills/hipaa-compliance/SKILL.md +76 -0
  286. package/packs/full-harness/rendered/.claude/skills/homelab-network-readiness/SKILL.md +168 -0
  287. package/packs/full-harness/rendered/.claude/skills/homelab-network-setup/SKILL.md +128 -0
  288. package/packs/full-harness/rendered/.claude/skills/homelab-pihole-dns/SKILL.md +273 -0
  289. package/packs/full-harness/rendered/.claude/skills/homelab-vlan-segmentation/SKILL.md +310 -0
  290. package/packs/full-harness/rendered/.claude/skills/homelab-wireguard-vpn/SKILL.md +304 -0
  291. package/packs/full-harness/rendered/.claude/skills/hookify-rules/SKILL.md +128 -0
  292. package/packs/full-harness/rendered/.claude/skills/inherit-legacy-style/SKILL.md +154 -0
  293. package/packs/full-harness/rendered/.claude/skills/intent-driven-development/SKILL.md +360 -0
  294. package/packs/full-harness/rendered/.claude/skills/inventory-demand-planning/SKILL.md +232 -0
  295. package/packs/full-harness/rendered/.claude/skills/investor-materials/SKILL.md +95 -0
  296. package/packs/full-harness/rendered/.claude/skills/investor-outreach/SKILL.md +90 -0
  297. package/packs/full-harness/rendered/.claude/skills/ios-icon-gen/SKILL.md +156 -0
  298. package/packs/full-harness/rendered/.claude/skills/iterative-retrieval/SKILL.md +210 -0
  299. package/packs/full-harness/rendered/.claude/skills/ito-basket-compare/SKILL.md +62 -0
  300. package/packs/full-harness/rendered/.claude/skills/ito-data-atlas-agent/SKILL.md +62 -0
  301. package/packs/full-harness/rendered/.claude/skills/ito-market-intelligence/SKILL.md +59 -0
  302. package/packs/full-harness/rendered/.claude/skills/ito-trade-planner/SKILL.md +66 -0
  303. package/packs/full-harness/rendered/.claude/skills/java-coding-standards/SKILL.md +382 -0
  304. package/packs/full-harness/rendered/.claude/skills/jira-integration/SKILL.md +301 -0
  305. package/packs/full-harness/rendered/.claude/skills/jpa-patterns/SKILL.md +150 -0
  306. package/packs/full-harness/rendered/.claude/skills/knowledge-ops/SKILL.md +153 -0
  307. package/packs/full-harness/rendered/.claude/skills/kotlin-coroutines-flows/SKILL.md +283 -0
  308. package/packs/full-harness/rendered/.claude/skills/kotlin-exposed-patterns/SKILL.md +718 -0
  309. package/packs/full-harness/rendered/.claude/skills/kotlin-ktor-patterns/SKILL.md +688 -0
  310. package/packs/full-harness/rendered/.claude/skills/kotlin-patterns/SKILL.md +710 -0
  311. package/packs/full-harness/rendered/.claude/skills/kotlin-testing/SKILL.md +823 -0
  312. package/packs/full-harness/rendered/.claude/skills/kubernetes-patterns/SKILL.md +754 -0
  313. package/packs/full-harness/rendered/.claude/skills/laravel-patterns/SKILL.md +414 -0
  314. package/packs/full-harness/rendered/.claude/skills/laravel-plugin-discovery/SKILL.md +228 -0
  315. package/packs/full-harness/rendered/.claude/skills/laravel-security/SKILL.md +946 -0
  316. package/packs/full-harness/rendered/.claude/skills/laravel-tdd/SKILL.md +673 -0
  317. package/packs/full-harness/rendered/.claude/skills/laravel-verification/SKILL.md +178 -0
  318. package/packs/full-harness/rendered/.claude/skills/latency-critical-systems/SKILL.md +71 -0
  319. package/packs/full-harness/rendered/.claude/skills/lead-intelligence/SKILL.md +320 -0
  320. package/packs/full-harness/rendered/.claude/skills/liquid-glass-design/SKILL.md +279 -0
  321. package/packs/full-harness/rendered/.claude/skills/literature-review/SKILL.md +191 -0
  322. package/packs/full-harness/rendered/.claude/skills/llm-trading-agent-security/SKILL.md +144 -0
  323. package/packs/full-harness/rendered/.claude/skills/logistics-exception-management/SKILL.md +208 -0
  324. package/packs/full-harness/rendered/.claude/skills/loop-design-check/SKILL.md +141 -0
  325. package/packs/full-harness/rendered/.claude/skills/mailtrap-email-integration/SKILL.md +76 -0
  326. package/packs/full-harness/rendered/.claude/skills/make-interfaces-feel-better/SKILL.md +150 -0
  327. package/packs/full-harness/rendered/.claude/skills/manim-video/SKILL.md +88 -0
  328. package/packs/full-harness/rendered/.claude/skills/market-research/SKILL.md +74 -0
  329. package/packs/full-harness/rendered/.claude/skills/marketing-campaign/SKILL.md +112 -0
  330. package/packs/full-harness/rendered/.claude/skills/mcp-server-patterns/SKILL.md +68 -0
  331. package/packs/full-harness/rendered/.claude/skills/messages-ops/SKILL.md +103 -0
  332. package/packs/full-harness/rendered/.claude/skills/ml-adoption-playbook/SKILL.md +56 -0
  333. package/packs/full-harness/rendered/.claude/skills/mle-workflow/SKILL.md +345 -0
  334. package/packs/full-harness/rendered/.claude/skills/motion-advanced/SKILL.md +592 -0
  335. package/packs/full-harness/rendered/.claude/skills/motion-foundations/SKILL.md +295 -0
  336. package/packs/full-harness/rendered/.claude/skills/motion-patterns/SKILL.md +430 -0
  337. package/packs/full-harness/rendered/.claude/skills/motion-ui/SKILL.md +574 -0
  338. package/packs/full-harness/rendered/.claude/skills/mysql-patterns/SKILL.md +411 -0
  339. package/packs/full-harness/rendered/.claude/skills/nanoclaw-repl/SKILL.md +32 -0
  340. package/packs/full-harness/rendered/.claude/skills/nestjs-patterns/SKILL.md +229 -0
  341. package/packs/full-harness/rendered/.claude/skills/netmiko-ssh-automation/SKILL.md +172 -0
  342. package/packs/full-harness/rendered/.claude/skills/network-bgp-diagnostics/SKILL.md +166 -0
  343. package/packs/full-harness/rendered/.claude/skills/network-config-validation/SKILL.md +209 -0
  344. package/packs/full-harness/rendered/.claude/skills/network-interface-health/SKILL.md +151 -0
  345. package/packs/full-harness/rendered/.claude/skills/nextjs-turbopack/SKILL.md +56 -0
  346. package/packs/full-harness/rendered/.claude/skills/nodejs-keccak256/SKILL.md +100 -0
  347. package/packs/full-harness/rendered/.claude/skills/nutrient-document-processing/SKILL.md +166 -0
  348. package/packs/full-harness/rendered/.claude/skills/nuxt4-patterns/SKILL.md +99 -0
  349. package/packs/full-harness/rendered/.claude/skills/openclaw-persona-forge/SKILL.md +287 -0
  350. package/packs/full-harness/rendered/.claude/skills/opensource-pipeline/SKILL.md +254 -0
  351. package/packs/full-harness/rendered/.claude/skills/orch-add-feature/SKILL.md +43 -0
  352. package/packs/full-harness/rendered/.claude/skills/orch-build-mvp/SKILL.md +47 -0
  353. package/packs/full-harness/rendered/.claude/skills/orch-change-feature/SKILL.md +41 -0
  354. package/packs/full-harness/rendered/.claude/skills/orch-fix-defect/SKILL.md +41 -0
  355. package/packs/full-harness/rendered/.claude/skills/orch-pipeline/SKILL.md +119 -0
  356. package/packs/full-harness/rendered/.claude/skills/orch-refine-code/SKILL.md +42 -0
  357. package/packs/full-harness/rendered/.claude/skills/parallel-execution-optimizer/SKILL.md +70 -0
  358. package/packs/full-harness/rendered/.claude/skills/perl-patterns/SKILL.md +503 -0
  359. package/packs/full-harness/rendered/.claude/skills/perl-security/SKILL.md +502 -0
  360. package/packs/full-harness/rendered/.claude/skills/perl-testing/SKILL.md +474 -0
  361. package/packs/full-harness/rendered/.claude/skills/plan-canvas/SKILL.md +150 -0
  362. package/packs/full-harness/rendered/.claude/skills/plan-orchestrate/SKILL.md +261 -0
  363. package/packs/full-harness/rendered/.claude/skills/plankton-code-quality/SKILL.md +235 -0
  364. package/packs/full-harness/rendered/.claude/skills/postgres-patterns/SKILL.md +146 -0
  365. package/packs/full-harness/rendered/.claude/skills/prediction-market-oracle-research/SKILL.md +62 -0
  366. package/packs/full-harness/rendered/.claude/skills/prediction-market-risk-review/SKILL.md +59 -0
  367. package/packs/full-harness/rendered/.claude/skills/prisma-patterns/SKILL.md +399 -0
  368. package/packs/full-harness/rendered/.claude/skills/product-capability/SKILL.md +140 -0
  369. package/packs/full-harness/rendered/.claude/skills/product-lens/SKILL.md +91 -0
  370. package/packs/full-harness/rendered/.claude/skills/production-audit/SKILL.md +205 -0
  371. package/packs/full-harness/rendered/.claude/skills/production-scheduling/SKILL.md +223 -0
  372. package/packs/full-harness/rendered/.claude/skills/project-flow-ops/SKILL.md +110 -0
  373. package/packs/full-harness/rendered/.claude/skills/prompt-optimizer/SKILL.md +383 -0
  374. package/packs/full-harness/rendered/.claude/skills/pubmed-database/SKILL.md +174 -0
  375. package/packs/full-harness/rendered/.claude/skills/python-patterns/SKILL.md +749 -0
  376. package/packs/full-harness/rendered/.claude/skills/python-testing/SKILL.md +815 -0
  377. package/packs/full-harness/rendered/.claude/skills/pytorch-patterns/SKILL.md +395 -0
  378. package/packs/full-harness/rendered/.claude/skills/quality-nonconformance/SKILL.md +245 -0
  379. package/packs/full-harness/rendered/.claude/skills/quarkus-patterns/SKILL.md +721 -0
  380. package/packs/full-harness/rendered/.claude/skills/quarkus-security/SKILL.md +466 -0
  381. package/packs/full-harness/rendered/.claude/skills/quarkus-tdd/SKILL.md +810 -0
  382. package/packs/full-harness/rendered/.claude/skills/quarkus-verification/SKILL.md +478 -0
  383. package/packs/full-harness/rendered/.claude/skills/ralphinho-rfc-pipeline/SKILL.md +66 -0
  384. package/packs/full-harness/rendered/.claude/skills/react-native-patterns/SKILL.md +325 -0
  385. package/packs/full-harness/rendered/.claude/skills/react-patterns/SKILL.md +340 -0
  386. package/packs/full-harness/rendered/.claude/skills/react-performance/SKILL.md +573 -0
  387. package/packs/full-harness/rendered/.claude/skills/react-testing/SKILL.md +422 -0
  388. package/packs/full-harness/rendered/.claude/skills/recsys-pipeline-architect/SKILL.md +113 -0
  389. package/packs/full-harness/rendered/.claude/skills/recursive-decision-ledger/SKILL.md +77 -0
  390. package/packs/full-harness/rendered/.claude/skills/redis-patterns/SKILL.md +402 -0
  391. package/packs/full-harness/rendered/.claude/skills/regex-vs-llm-structured-text/SKILL.md +219 -0
  392. package/packs/full-harness/rendered/.claude/skills/remotion-video-creation/SKILL.md +41 -0
  393. package/packs/full-harness/rendered/.claude/skills/repo-scan/SKILL.md +77 -0
  394. package/packs/full-harness/rendered/.claude/skills/research-ops/SKILL.md +111 -0
  395. package/packs/full-harness/rendered/.claude/skills/returns-reverse-logistics/SKILL.md +225 -0
  396. package/packs/full-harness/rendered/.claude/skills/rules-distill/SKILL.md +263 -0
  397. package/packs/full-harness/rendered/.claude/skills/rust-patterns/SKILL.md +498 -0
  398. package/packs/full-harness/rendered/.claude/skills/rust-testing/SKILL.md +499 -0
  399. package/packs/full-harness/rendered/.claude/skills/safety-guard/SKILL.md +74 -0
  400. package/packs/full-harness/rendered/.claude/skills/santa-method/SKILL.md +305 -0
  401. package/packs/full-harness/rendered/.claude/skills/scholar-evaluation/SKILL.md +159 -0
  402. package/packs/full-harness/rendered/.claude/skills/search-first/SKILL.md +181 -0
  403. package/packs/full-harness/rendered/.claude/skills/security-bounty-hunter/SKILL.md +97 -0
  404. package/packs/full-harness/rendered/.claude/skills/security-review/SKILL.md +502 -0
  405. package/packs/full-harness/rendered/.claude/skills/security-scan/SKILL.md +164 -0
  406. package/packs/full-harness/rendered/.claude/skills/seo/SKILL.md +153 -0
  407. package/packs/full-harness/rendered/.claude/skills/skill-comply/SKILL.md +56 -0
  408. package/packs/full-harness/rendered/.claude/skills/skill-scout/SKILL.md +139 -0
  409. package/packs/full-harness/rendered/.claude/skills/skill-stocktake/SKILL.md +193 -0
  410. package/packs/full-harness/rendered/.claude/skills/social-graph-ranker/SKILL.md +153 -0
  411. package/packs/full-harness/rendered/.claude/skills/social-publisher/SKILL.md +128 -0
  412. package/packs/full-harness/rendered/.claude/skills/springboot-patterns/SKILL.md +313 -0
  413. package/packs/full-harness/rendered/.claude/skills/springboot-security/SKILL.md +271 -0
  414. package/packs/full-harness/rendered/.claude/skills/springboot-tdd/SKILL.md +157 -0
  415. package/packs/full-harness/rendered/.claude/skills/springboot-verification/SKILL.md +230 -0
  416. package/packs/full-harness/rendered/.claude/skills/strategic-compact/SKILL.md +136 -0
  417. package/packs/full-harness/rendered/.claude/skills/swift-actor-persistence/SKILL.md +142 -0
  418. package/packs/full-harness/rendered/.claude/skills/swift-concurrency-6-2/SKILL.md +216 -0
  419. package/packs/full-harness/rendered/.claude/skills/swift-protocol-di-testing/SKILL.md +189 -0
  420. package/packs/full-harness/rendered/.claude/skills/swiftui-patterns/SKILL.md +259 -0
  421. package/packs/full-harness/rendered/.claude/skills/taste/SKILL.md +263 -0
  422. package/packs/full-harness/rendered/.claude/skills/tdd-workflow/SKILL.md +580 -0
  423. package/packs/full-harness/rendered/.claude/skills/team-agent-orchestration/SKILL.md +109 -0
  424. package/packs/full-harness/rendered/.claude/skills/team-builder/SKILL.md +167 -0
  425. package/packs/full-harness/rendered/.claude/skills/terminal-ops/SKILL.md +108 -0
  426. package/packs/full-harness/rendered/.claude/skills/tinystruct-patterns/SKILL.md +277 -0
  427. package/packs/full-harness/rendered/.claude/skills/token-budget-advisor/SKILL.md +120 -0
  428. package/packs/full-harness/rendered/.claude/skills/ui-demo/SKILL.md +464 -0
  429. package/packs/full-harness/rendered/.claude/skills/ui-to-vue/SKILL.md +133 -0
  430. package/packs/full-harness/rendered/.claude/skills/uncloud/SKILL.md +342 -0
  431. package/packs/full-harness/rendered/.claude/skills/unified-notifications-ops/SKILL.md +186 -0
  432. package/packs/full-harness/rendered/.claude/skills/uspto-database/SKILL.md +176 -0
  433. package/packs/full-harness/rendered/.claude/skills/verification-loop/SKILL.md +126 -0
  434. package/packs/full-harness/rendered/.claude/skills/video-editing/SKILL.md +309 -0
  435. package/packs/full-harness/rendered/.claude/skills/videodb/SKILL.md +371 -0
  436. package/packs/full-harness/rendered/.claude/skills/visa-doc-translate/SKILL.md +117 -0
  437. package/packs/full-harness/rendered/.claude/skills/vite-patterns/SKILL.md +448 -0
  438. package/packs/full-harness/rendered/.claude/skills/vue-patterns/SKILL.md +470 -0
  439. package/packs/full-harness/rendered/.claude/skills/windows-desktop-e2e/SKILL.md +886 -0
  440. package/packs/full-harness/rendered/.claude/skills/workspace-surface-audit/SKILL.md +124 -0
  441. package/packs/full-harness/rendered/.claude/skills/x-api/SKILL.md +233 -0
  442. package/packs/full-harness/rendered/.github/copilot-instructions.md +89529 -0
  443. package/packs/full-harness/rendered/AGENTS.md +9663 -0
  444. package/packs/full-harness/rendered/CLAUDE.md +444 -0
  445. package/packs/full-harness/rendered/GEMINI.md +71959 -0
@@ -0,0 +1,673 @@
1
+ ---
2
+ name: laravel-tdd
3
+ description: Laravel testing strategies with PHPUnit, Pest, model factories, HTTP tests, Sanctum authentication testing, mocking, and coverage.
4
+ ---
5
+
6
+ # Laravel Testing with TDD
7
+
8
+ Test-driven development for Laravel applications using PHPUnit, Pest, Laravel factories, and testing helpers.
9
+
10
+ ## When to Activate
11
+
12
+ - Writing new Laravel applications or features
13
+ - Implementing API endpoints with Sanctum or Passport authentication
14
+ - Testing Eloquent models, relationships, scopes, and accessors
15
+ - Setting up testing infrastructure for Laravel projects
16
+ - Writing feature tests for HTTP controllers and form requests
17
+ - Mocking external services (queues, mail, notifications, HTTP)
18
+
19
+ ## TDD Workflow for Laravel
20
+
21
+ ### Red-Green-Refactor Cycle
22
+
23
+ ```php
24
+ // Step 1: RED — Write a failing test
25
+ public function test_a_product_can_be_created(): void
26
+ {
27
+ $product = Product::factory()->create(['name' => 'Test Product']);
28
+ $this->assertDatabaseHas('products', ['name' => 'Test Product']);
29
+ }
30
+
31
+ // Step 2: GREEN — Write the migration, model, and factory
32
+ // Step 3: REFACTOR — Improve while keeping tests green
33
+ ```
34
+
35
+ ## Setup
36
+
37
+ ### PHPUnit Configuration
38
+
39
+ ```xml
40
+ <?xml version="1.0" encoding="UTF-8"?>
41
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
42
+ xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
43
+ bootstrap="vendor/autoload.php"
44
+ colors="true">
45
+ <testsuites>
46
+ <testsuite name="Unit">
47
+ <directory suffix="Test.php">tests/Unit</directory>
48
+ </testsuite>
49
+ <testsuite name="Feature">
50
+ <directory suffix="Test.php">tests/Feature</directory>
51
+ </testsuite>
52
+ </testsuites>
53
+ <php>
54
+ <env name="APP_ENV" value="testing"/>
55
+ <env name="BCRYPT_ROUNDS" value="4"/>
56
+ <env name="CACHE_STORE" value="array"/>
57
+ <env name="DB_CONNECTION" value="sqlite"/>
58
+ <env name="DB_DATABASE" value=":memory:"/>
59
+ <env name="MAIL_MAILER" value="array"/>
60
+ <env name="QUEUE_CONNECTION" value="sync"/>
61
+ <env name="SESSION_DRIVER" value="array"/>
62
+ </php>
63
+ </phpunit>
64
+ ```
65
+
66
+ ### Base TestCase Setup
67
+
68
+ ```php
69
+ namespace Tests;
70
+
71
+ use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
72
+
73
+ abstract class TestCase extends BaseTestCase
74
+ {
75
+ protected function setUp(): void
76
+ {
77
+ parent::setUp();
78
+ // Call $this->withoutExceptionHandling() only in tests that
79
+ // test non-HTTP exceptions; it suppresses assertStatus() etc.
80
+ }
81
+
82
+ // Helper: Authenticate and return user
83
+ protected function actingAsUser(): mixed
84
+ {
85
+ $user = \App\Models\User::factory()->create();
86
+ $this->actingAs($user);
87
+ return $user;
88
+ }
89
+
90
+ protected function actingAsAdmin(): mixed
91
+ {
92
+ $admin = \App\Models\User::factory()->admin()->create();
93
+ $this->actingAs($admin);
94
+ return $admin;
95
+ }
96
+ }
97
+ ```
98
+
99
+ ## Model Factories
100
+
101
+ ```php
102
+ // database/factories/UserFactory.php
103
+ class UserFactory extends Factory
104
+ {
105
+ protected static ?string $password = null;
106
+
107
+ public function definition(): array
108
+ {
109
+ return [
110
+ 'name' => fake()->name(),
111
+ 'email' => fake()->unique()->safeEmail(),
112
+ 'email_verified_at' => now(),
113
+ 'password' => static::$password ??= Hash::make('password'),
114
+ 'remember_token' => Str::random(10),
115
+ 'role' => 'user',
116
+ ];
117
+ }
118
+
119
+ public function admin(): static
120
+ {
121
+ return $this->state(fn (array $attributes) => ['role' => 'admin']);
122
+ }
123
+
124
+ public function unverified(): static
125
+ {
126
+ return $this->state(fn (array $attributes) => ['email_verified_at' => null]);
127
+ }
128
+ }
129
+
130
+ // database/factories/ProductFactory.php
131
+ class ProductFactory extends Factory
132
+ {
133
+ public function definition(): array
134
+ {
135
+ return [
136
+ 'name' => fake()->unique()->words(3, true),
137
+ 'slug' => fn (array $attrs) => Str::slug($attrs['name']),
138
+ 'description' => fake()->paragraph(),
139
+ 'price' => fake()->numberBetween(100, 100000),
140
+ 'stock' => fake()->numberBetween(0, 100),
141
+ 'is_active' => true,
142
+ 'user_id' => UserFactory::new(),
143
+ ];
144
+ }
145
+
146
+ public function outOfStock(): static
147
+ {
148
+ return $this->state(fn (array $attributes) => ['stock' => 0]);
149
+ }
150
+ }
151
+ ```
152
+
153
+ ### Using Factories
154
+
155
+ ```php
156
+ $user = User::factory()->create();
157
+ $admin = User::factory()->admin()->create();
158
+ $product = Product::factory()->create(['user_id' => $user->id]);
159
+ $products = Product::factory()->count(10)->create();
160
+ $draft = Product::factory()->make(); // Not persisted
161
+
162
+ // With relationships
163
+ $user = User::factory()->has(Product::factory()->count(3))->create();
164
+
165
+ // Sequences
166
+ User::factory()->count(3)->sequence(
167
+ ['role' => 'admin'], ['role' => 'editor'], ['role' => 'user'],
168
+ )->create();
169
+ ```
170
+
171
+ ## Model Testing
172
+
173
+ ```php
174
+ namespace Tests\Unit\Models;
175
+
176
+ use App\Models\User;
177
+ use App\Models\Product;
178
+ use Illuminate\Foundation\Testing\RefreshDatabase;
179
+ use Tests\TestCase;
180
+
181
+ class UserTest extends TestCase
182
+ {
183
+ use RefreshDatabase;
184
+
185
+ public function test_it_hides_sensitive_attributes(): void
186
+ {
187
+ $user = User::factory()->create();
188
+ $this->assertArrayNotHasKey('password', $user->toArray());
189
+ }
190
+
191
+ public function test_admin_scope_returns_only_admins(): void
192
+ {
193
+ User::factory()->admin()->create();
194
+ User::factory()->count(3)->create();
195
+
196
+ $this->assertCount(1, User::admin()->get());
197
+ }
198
+ }
199
+
200
+ class ProductTest extends TestCase
201
+ {
202
+ use RefreshDatabase;
203
+
204
+ public function test_active_scope_filters_correctly(): void
205
+ {
206
+ Product::factory()->count(3)->create(['is_active' => true]);
207
+ Product::factory()->count(2)->create(['is_active' => false]);
208
+
209
+ $this->assertCount(3, Product::active()->get());
210
+ }
211
+
212
+ public function test_it_belongs_to_a_user(): void
213
+ {
214
+ $user = User::factory()->create();
215
+ $product = Product::factory()->create(['user_id' => $user->id]);
216
+
217
+ $this->assertTrue($product->user->is($user));
218
+ }
219
+ }
220
+ ```
221
+
222
+ ## Feature / HTTP Testing
223
+
224
+ ```php
225
+ namespace Tests\Feature\Http\Controllers;
226
+
227
+ use App\Models\Product;
228
+ use App\Models\User;
229
+ use Illuminate\Foundation\Testing\RefreshDatabase;
230
+ use Tests\TestCase;
231
+
232
+ class ProductControllerTest extends TestCase
233
+ {
234
+ use RefreshDatabase;
235
+
236
+ public function test_guests_are_redirected_to_login(): void
237
+ {
238
+ $this->get(route('products.create'))->assertRedirect(route('login'));
239
+ }
240
+
241
+ public function test_it_stores_a_new_product(): void
242
+ {
243
+ $user = User::factory()->create();
244
+ $this->actingAs($user);
245
+
246
+ $response = $this->post(route('products.store'), [
247
+ 'name' => 'New Product',
248
+ 'description' => 'Description',
249
+ 'price' => 2999,
250
+ 'stock' => 10,
251
+ ]);
252
+
253
+ $response->assertRedirect(route('products.index'));
254
+ $this->assertDatabaseHas('products', [
255
+ 'name' => 'New Product',
256
+ 'user_id' => $user->id,
257
+ ]);
258
+ }
259
+
260
+ public function test_it_validates_required_fields(): void
261
+ {
262
+ $this->actingAs(User::factory()->create());
263
+ $this->post(route('products.store'), [])
264
+ ->assertSessionHasErrors(['name', 'price']);
265
+ }
266
+
267
+ public function test_users_cannot_modify_others_products(): void
268
+ {
269
+ $owner = User::factory()->create();
270
+ $attacker = User::factory()->create();
271
+ $product = Product::factory()->create(['user_id' => $owner->id]);
272
+
273
+ $this->actingAs($attacker)
274
+ ->delete(route('products.destroy', $product))
275
+ ->assertForbidden();
276
+ }
277
+ }
278
+ ```
279
+
280
+ ## JSON API Testing
281
+
282
+ ```php
283
+ namespace Tests\Feature\Http\Controllers\Api;
284
+
285
+ use App\Models\Product;
286
+ use App\Models\User;
287
+ use Illuminate\Foundation\Testing\RefreshDatabase;
288
+ use Tests\TestCase;
289
+
290
+ class ProductApiTest extends TestCase
291
+ {
292
+ use RefreshDatabase;
293
+
294
+ public function test_unauthenticated_requests_are_rejected(): void
295
+ {
296
+ $this->getJson('/api/products')->assertUnauthorized();
297
+ }
298
+
299
+ public function test_it_lists_paginated_products(): void
300
+ {
301
+ $user = User::factory()->create();
302
+ Product::factory()->count(5)->create(['user_id' => $user->id]);
303
+
304
+ $response = $this->actingAs($user)->getJson('/api/products');
305
+
306
+ $response->assertOk();
307
+ $response->assertJsonCount(5, 'data');
308
+ $response->assertJsonStructure([
309
+ 'data' => [['id', 'name', 'price']],
310
+ 'meta' => ['current_page', 'last_page', 'total'],
311
+ ]);
312
+ }
313
+
314
+ public function test_it_creates_a_product(): void
315
+ {
316
+ $user = User::factory()->create();
317
+
318
+ $response = $this->actingAs($user)->postJson('/api/products', [
319
+ 'name' => 'API Product',
320
+ 'price' => 4999,
321
+ ]);
322
+
323
+ $response->assertCreated();
324
+ $response->assertJsonPath('data.name', 'API Product');
325
+ }
326
+
327
+ public function test_users_cannot_delete_others_products(): void
328
+ {
329
+ $owner = User::factory()->create();
330
+ $attacker = User::factory()->create();
331
+ $product = Product::factory()->create(['user_id' => $owner->id]);
332
+
333
+ $this->actingAs($attacker)
334
+ ->deleteJson("/api/products/{$product->id}")
335
+ ->assertForbidden();
336
+ }
337
+ }
338
+ ```
339
+
340
+ ## Sanctum API Auth Testing
341
+
342
+ ```php
343
+ namespace Tests\Feature\Http\Controllers\Api;
344
+
345
+ use App\Models\User;
346
+ use Illuminate\Foundation\Testing\RefreshDatabase;
347
+ use Illuminate\Support\Facades\Hash;
348
+ use Tests\TestCase;
349
+
350
+ class AuthControllerTest extends TestCase
351
+ {
352
+ use RefreshDatabase;
353
+
354
+ public function test_users_can_register(): void
355
+ {
356
+ $response = $this->postJson('/api/register', [
357
+ 'name' => 'Test User',
358
+ 'email' => 'test@example.com',
359
+ 'password' => 'Password123!',
360
+ 'password_confirmation' => 'Password123!',
361
+ ]);
362
+
363
+ $response->assertCreated();
364
+ $response->assertJsonStructure(['data' => ['user', 'token']]);
365
+ }
366
+
367
+ public function test_users_can_login(): void
368
+ {
369
+ User::factory()->create([
370
+ 'email' => 'test@example.com',
371
+ 'password' => Hash::make('Password123!'),
372
+ ]);
373
+
374
+ $response = $this->postJson('/api/login', [
375
+ 'email' => 'test@example.com',
376
+ 'password' => 'Password123!',
377
+ ]);
378
+
379
+ $response->assertOk();
380
+ $response->assertJsonStructure(['data' => ['token']]);
381
+ }
382
+
383
+ public function test_users_cannot_login_with_wrong_password(): void
384
+ {
385
+ User::factory()->create(['email' => 'test@example.com']);
386
+
387
+ $this->postJson('/api/login', [
388
+ 'email' => 'test@example.com',
389
+ 'password' => 'wrong',
390
+ ])->assertUnprocessable();
391
+ }
392
+
393
+ public function test_token_bearer_authenticates_requests(): void
394
+ {
395
+ $user = User::factory()->create();
396
+ $token = $user->createToken('test')->plainTextToken;
397
+
398
+ $this->withToken($token)
399
+ ->getJson('/api/user')
400
+ ->assertOk()
401
+ ->assertJsonPath('data.email', $user->email);
402
+ }
403
+ }
404
+ ```
405
+
406
+ ## Mocking and Fakes
407
+
408
+ ### HTTP Fake
409
+
410
+ ```php
411
+ use Illuminate\Support\Facades\Http;
412
+
413
+ public function test_it_handles_successful_payment(): void
414
+ {
415
+ Http::fake([
416
+ 'api.stripe.com/*' => Http::response(['id' => 'pi_123', 'status' => 'succeeded'], 200),
417
+ ]);
418
+
419
+ $result = (new PaymentService())->charge(2999);
420
+ $this->assertTrue($result->success);
421
+ }
422
+
423
+ public function test_it_handles_gateway_failure(): void
424
+ {
425
+ Http::fake([
426
+ 'api.stripe.com/*' => Http::response(['error' => 'card_declined'], 402),
427
+ ]);
428
+
429
+ $this->expectException(PaymentFailedException::class);
430
+ (new PaymentService())->charge(2999);
431
+ }
432
+
433
+ public function test_it_retries_on_timeout(): void
434
+ {
435
+ Http::fake([
436
+ 'api.stripe.com/*' => Http::sequence()
437
+ ->pushStatus(408)
438
+ ->pushStatus(200),
439
+ ]);
440
+
441
+ $this->assertTrue((new PaymentService())->charge(2999)->success);
442
+ }
443
+ ```
444
+
445
+ ### Mail Fake
446
+
447
+ ```php
448
+ Mail::fake();
449
+
450
+ $order->sendConfirmation();
451
+
452
+ Mail::assertSent(OrderConfirmation::class, function ($mail) use ($order) {
453
+ return $mail->hasTo($order->user->email);
454
+ });
455
+ ```
456
+
457
+ ### Notification Fake
458
+
459
+ ```php
460
+ Notification::fake();
461
+
462
+ $user->notify(new WelcomeUser());
463
+
464
+ Notification::assertSentTo($user, WelcomeUser::class);
465
+ ```
466
+
467
+ ### Queue Fake
468
+
469
+ ```php
470
+ Queue::fake();
471
+
472
+ ProcessImage::dispatch($product);
473
+
474
+ Queue::assertPushed(ProcessImage::class, function ($job) use ($product) {
475
+ return $job->product->id === $product->id;
476
+ });
477
+ ```
478
+
479
+ ### Storage Fake
480
+
481
+ ```php
482
+ Storage::fake('public');
483
+
484
+ $file = UploadedFile::fake()->image('photo.jpg', 200, 200);
485
+
486
+ $response = $this->actingAs($user)->post('/avatar', [
487
+ 'avatar' => $file,
488
+ ]);
489
+
490
+ $response->assertSessionHasNoErrors();
491
+ Storage::disk('public')->assertExists('avatars/' . $file->hashName());
492
+ ```
493
+
494
+ ### Event Fake
495
+
496
+ ```php
497
+ Event::fake();
498
+
499
+ $order->markAsShipped();
500
+
501
+ Event::assertDispatched(OrderShipped::class, function ($event) use ($order) {
502
+ return $event->order->id === $order->id;
503
+ });
504
+ ```
505
+
506
+ ## Artisan Command Tests
507
+
508
+ ```php
509
+ public function test_it_sends_newsletters(): void
510
+ {
511
+ Mail::fake();
512
+ User::factory()->count(5)->create(['subscribed' => true]);
513
+
514
+ $this->artisan('newsletter:send')
515
+ ->expectsOutput('Sending newsletter to 5 subscribers...')
516
+ ->assertExitCode(0);
517
+
518
+ Mail::assertSent(NewsletterMail::class, 5);
519
+ }
520
+
521
+ public function test_it_handles_no_subscribers(): void
522
+ {
523
+ $this->artisan('newsletter:send')
524
+ ->expectsOutput('No subscribers found.')
525
+ ->assertExitCode(0);
526
+ }
527
+ ```
528
+
529
+ ## Authorization Tests
530
+
531
+ ```php
532
+ public function test_users_can_update_own_posts(): void
533
+ {
534
+ $user = User::factory()->create();
535
+ $post = Post::factory()->create(['user_id' => $user->id]);
536
+
537
+ $this->actingAs($user)
538
+ ->put(route('posts.update', $post), ['title' => 'Updated'])
539
+ ->assertRedirect();
540
+ }
541
+
542
+ public function test_users_cannot_update_others_posts(): void
543
+ {
544
+ $post = Post::factory()->create();
545
+ $this->actingAs(User::factory()->create())
546
+ ->put(route('posts.update', $post), ['title' => 'Hacked'])
547
+ ->assertForbidden();
548
+ }
549
+
550
+ public function test_gate_before_grants_super_admin_full_access(): void
551
+ {
552
+ $super = User::factory()->create(['role' => 'super-admin']);
553
+ $post = Post::factory()->create();
554
+
555
+ $this->actingAs($super)
556
+ ->delete(route('posts.destroy', $post))
557
+ ->assertRedirect();
558
+
559
+ $this->assertSoftDeleted($post);
560
+ }
561
+ ```
562
+
563
+ ## Pest Feature Tests
564
+
565
+ ```php
566
+ <?php
567
+
568
+ use App\Models\Product;
569
+ use App\Models\User;
570
+
571
+ uses(\Illuminate\Foundation\Testing\RefreshDatabase::class);
572
+
573
+ beforeEach(function () {
574
+ $this->user = User::factory()->create();
575
+ $this->actingAs($this->user);
576
+ });
577
+
578
+ it('lists products', function () {
579
+ Product::factory()->count(3)->create(['user_id' => $this->user->id]);
580
+
581
+ $this->get(route('products.index'))
582
+ ->assertOk()
583
+ ->assertViewHas('products');
584
+ });
585
+
586
+ it('creates a product with valid data', function () {
587
+ $this->post(route('products.store'), [
588
+ 'name' => 'Test Product', 'price' => 1999,
589
+ ])->assertRedirect();
590
+
591
+ $this->assertDatabaseHas('products', ['name' => 'Test Product']);
592
+ });
593
+
594
+ it('fails validation without required fields', function () {
595
+ $this->post(route('products.store'), [])
596
+ ->assertSessionHasErrors(['name', 'price']);
597
+ });
598
+
599
+ it('authorizes updates', function () {
600
+ $other = User::factory()->create();
601
+ $product = Product::factory()->create(['user_id' => $other->id]);
602
+
603
+ $this->put(route('products.update', $product), ['name' => 'Hacked'])
604
+ ->assertForbidden();
605
+ });
606
+ ```
607
+
608
+ ## Coverage
609
+
610
+ ```bash
611
+ # PHPUnit (use clover output for CI threshold checks)
612
+ vendor/bin/phpunit --coverage-html coverage --coverage-clover clover.xml
613
+
614
+ # Pest (built-in threshold support)
615
+ vendor/bin/pest --coverage --min=80
616
+ ```
617
+
618
+ ### Coverage Goals
619
+
620
+ | Component | Target |
621
+ |-----------|--------|
622
+ | Models | 95%+ |
623
+ | Actions/Services | 90%+ |
624
+ | Form Requests | 90%+ |
625
+ | Controllers | 85%+ |
626
+ | Policies | 95%+ |
627
+ | Overall | 80%+ |
628
+
629
+ ## Testing Best Practices
630
+
631
+ ### DO
632
+
633
+ - Use factories over manual `create()` calls
634
+ - One logical assertion per test
635
+ - Descriptive names: `test_guests_cannot_create_products`
636
+ - Test edge cases and authorization boundaries
637
+ - Mock external services with `Http::fake()`, `Mail::fake()`
638
+ - Use `RefreshDatabase` for clean state
639
+
640
+ ### DON'T
641
+
642
+ - Don't test Laravel internals (trust the framework)
643
+ - Don't make tests dependent on each other
644
+ - Don't over-mock — mock only service boundaries
645
+ - Don't test private methods — test through the public interface
646
+ - Don't couple tests to HTML structure
647
+
648
+ ## Quick Reference
649
+
650
+ | Pattern | Usage |
651
+ |---------|-------|
652
+ | `RefreshDatabase` | Reset database between tests |
653
+ | `$this->actingAs($user)` | Authenticate as user |
654
+ | `$this->withToken($token)` | Bearer token auth for APIs |
655
+ | `Model::factory()->create()` | Create model with factory |
656
+ | `Model::factory()->count(5)->create()` | Create multiple records |
657
+ | `Http::fake([...])` | Mock HTTP calls |
658
+ | `Mail::fake()` | Trap sent mail |
659
+ | `Notification::fake()` | Trap sent notifications |
660
+ | `Queue::fake()` | Trap queued jobs |
661
+ | `Event::fake()` | Trap dispatched events |
662
+ | `Storage::fake('public')` | Trap file operations |
663
+ | `assertDatabaseHas` | Assert DB row exists |
664
+ | `assertSoftDeleted` | Assert soft-delete |
665
+ | `assertSessionHasErrors` | Assert validation errors |
666
+ | `assertForbidden` | Assert 403 status |
667
+
668
+ ## Related Skills
669
+
670
+ - `laravel-patterns` — Laravel architecture, Eloquent, routing, and API patterns
671
+ - `laravel-security` — Laravel authentication, authorization, and secure coding
672
+ - `tdd-workflow` — The repo-wide RED -> GREEN -> REFACTOR loop
673
+ - `backend-patterns` — General backend API and database patterns