@event4u/agent-config 1.9.1

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 (446) hide show
  1. package/.agent-src/README.md +64 -0
  2. package/.agent-src/commands/agent-handoff.md +64 -0
  3. package/.agent-src/commands/agent-status.md +83 -0
  4. package/.agent-src/commands/agents-audit.md +243 -0
  5. package/.agent-src/commands/agents-cleanup.md +169 -0
  6. package/.agent-src/commands/agents-prepare.md +137 -0
  7. package/.agent-src/commands/analyze-reference-repo.md +191 -0
  8. package/.agent-src/commands/bug-fix.md +181 -0
  9. package/.agent-src/commands/bug-investigate.md +175 -0
  10. package/.agent-src/commands/commit.md +121 -0
  11. package/.agent-src/commands/compress.md +177 -0
  12. package/.agent-src/commands/config-agent-settings.md +126 -0
  13. package/.agent-src/commands/context-create.md +167 -0
  14. package/.agent-src/commands/context-refactor.md +170 -0
  15. package/.agent-src/commands/copilot-agents-init.md +150 -0
  16. package/.agent-src/commands/copilot-agents-optimize.md +251 -0
  17. package/.agent-src/commands/create-pr-description.md +112 -0
  18. package/.agent-src/commands/create-pr.md +76 -0
  19. package/.agent-src/commands/do-and-judge.md +114 -0
  20. package/.agent-src/commands/do-in-steps.md +84 -0
  21. package/.agent-src/commands/e2e-heal.md +98 -0
  22. package/.agent-src/commands/e2e-plan.md +85 -0
  23. package/.agent-src/commands/estimate-ticket.md +80 -0
  24. package/.agent-src/commands/feature-dev.md +111 -0
  25. package/.agent-src/commands/feature-explore.md +180 -0
  26. package/.agent-src/commands/feature-plan.md +288 -0
  27. package/.agent-src/commands/feature-refactor.md +181 -0
  28. package/.agent-src/commands/feature-roadmap.md +184 -0
  29. package/.agent-src/commands/fix-ci.md +48 -0
  30. package/.agent-src/commands/fix-portability.md +97 -0
  31. package/.agent-src/commands/fix-pr-bot-comments.md +146 -0
  32. package/.agent-src/commands/fix-pr-comments.md +58 -0
  33. package/.agent-src/commands/fix-pr-developer-comments.md +152 -0
  34. package/.agent-src/commands/fix-references.md +94 -0
  35. package/.agent-src/commands/fix-seeder.md +146 -0
  36. package/.agent-src/commands/implement-ticket.md +133 -0
  37. package/.agent-src/commands/jira-ticket.md +71 -0
  38. package/.agent-src/commands/judge.md +86 -0
  39. package/.agent-src/commands/memory-add.md +130 -0
  40. package/.agent-src/commands/memory-full.md +97 -0
  41. package/.agent-src/commands/memory-promote.md +144 -0
  42. package/.agent-src/commands/mode.md +121 -0
  43. package/.agent-src/commands/module-create.md +132 -0
  44. package/.agent-src/commands/module-explore.md +157 -0
  45. package/.agent-src/commands/optimize-agents.md +139 -0
  46. package/.agent-src/commands/optimize-augmentignore.md +262 -0
  47. package/.agent-src/commands/optimize-rtk-filters.md +120 -0
  48. package/.agent-src/commands/optimize-skills.md +121 -0
  49. package/.agent-src/commands/override-create.md +97 -0
  50. package/.agent-src/commands/override-manage.md +96 -0
  51. package/.agent-src/commands/package-reset.md +154 -0
  52. package/.agent-src/commands/package-test.md +154 -0
  53. package/.agent-src/commands/prepare-for-review.md +91 -0
  54. package/.agent-src/commands/project-analyze.md +300 -0
  55. package/.agent-src/commands/project-health.md +95 -0
  56. package/.agent-src/commands/propose-memory.md +108 -0
  57. package/.agent-src/commands/quality-fix.md +106 -0
  58. package/.agent-src/commands/refine-ticket.md +81 -0
  59. package/.agent-src/commands/review-changes.md +130 -0
  60. package/.agent-src/commands/review-routing.md +111 -0
  61. package/.agent-src/commands/roadmap-create.md +110 -0
  62. package/.agent-src/commands/roadmap-execute.md +68 -0
  63. package/.agent-src/commands/rule-compliance-audit.md +139 -0
  64. package/.agent-src/commands/tests-create.md +73 -0
  65. package/.agent-src/commands/tests-execute.md +58 -0
  66. package/.agent-src/commands/threat-model.md +115 -0
  67. package/.agent-src/commands/update-form-request-messages.md +189 -0
  68. package/.agent-src/commands/upstream-contribute.md +171 -0
  69. package/.agent-src/contexts/augment-infrastructure.md +181 -0
  70. package/.agent-src/contexts/documentation-hierarchy.md +142 -0
  71. package/.agent-src/contexts/model-recommendations.md +142 -0
  72. package/.agent-src/contexts/override-system.md +187 -0
  73. package/.agent-src/contexts/skills-and-commands.md +154 -0
  74. package/.agent-src/contexts/subagent-configuration.md +62 -0
  75. package/.agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +110 -0
  76. package/.agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
  77. package/.agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
  78. package/.agent-src/guidelines/agent-infra/engineering-memory-data-format.md +117 -0
  79. package/.agent-src/guidelines/agent-infra/layered-settings.md +158 -0
  80. package/.agent-src/guidelines/agent-infra/memory-access.md +121 -0
  81. package/.agent-src/guidelines/agent-infra/naming.md +69 -0
  82. package/.agent-src/guidelines/agent-infra/output-patterns.md +117 -0
  83. package/.agent-src/guidelines/agent-infra/review-routing-data-format.md +144 -0
  84. package/.agent-src/guidelines/agent-infra/role-contracts.md +211 -0
  85. package/.agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
  86. package/.agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
  87. package/.agent-src/guidelines/agent-infra/self-improvement-pipeline.md +135 -0
  88. package/.agent-src/guidelines/agent-infra/size-and-scope.md +189 -0
  89. package/.agent-src/guidelines/agent-infra/tool-integration.md +73 -0
  90. package/.agent-src/guidelines/docs/readme-size-and-splitting.md +153 -0
  91. package/.agent-src/guidelines/e2e/playwright.md +363 -0
  92. package/.agent-src/guidelines/php/api-design.md +115 -0
  93. package/.agent-src/guidelines/php/artisan-commands.md +81 -0
  94. package/.agent-src/guidelines/php/blade-ui.md +78 -0
  95. package/.agent-src/guidelines/php/controllers.md +90 -0
  96. package/.agent-src/guidelines/php/database.md +111 -0
  97. package/.agent-src/guidelines/php/eloquent.md +208 -0
  98. package/.agent-src/guidelines/php/flux.md +80 -0
  99. package/.agent-src/guidelines/php/general.md +191 -0
  100. package/.agent-src/guidelines/php/git.md +96 -0
  101. package/.agent-src/guidelines/php/jobs.md +111 -0
  102. package/.agent-src/guidelines/php/livewire.md +71 -0
  103. package/.agent-src/guidelines/php/logging.md +79 -0
  104. package/.agent-src/guidelines/php/naming.md +89 -0
  105. package/.agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
  106. package/.agent-src/guidelines/php/patterns/dtos.md +199 -0
  107. package/.agent-src/guidelines/php/patterns/events.md +67 -0
  108. package/.agent-src/guidelines/php/patterns/factory.md +53 -0
  109. package/.agent-src/guidelines/php/patterns/pipelines.md +66 -0
  110. package/.agent-src/guidelines/php/patterns/policies.md +66 -0
  111. package/.agent-src/guidelines/php/patterns/repositories.md +122 -0
  112. package/.agent-src/guidelines/php/patterns/service-layer.md +64 -0
  113. package/.agent-src/guidelines/php/patterns/strategy.md +69 -0
  114. package/.agent-src/guidelines/php/patterns.md +28 -0
  115. package/.agent-src/guidelines/php/performance.md +92 -0
  116. package/.agent-src/guidelines/php/resources.md +100 -0
  117. package/.agent-src/guidelines/php/security.md +110 -0
  118. package/.agent-src/guidelines/php/sql.md +97 -0
  119. package/.agent-src/guidelines/php/validations.md +119 -0
  120. package/.agent-src/guidelines/php/websocket.md +100 -0
  121. package/.agent-src/personas/README.md +104 -0
  122. package/.agent-src/personas/ai-agent.md +77 -0
  123. package/.agent-src/personas/critical-challenger.md +73 -0
  124. package/.agent-src/personas/developer.md +73 -0
  125. package/.agent-src/personas/product-owner.md +78 -0
  126. package/.agent-src/personas/qa.md +67 -0
  127. package/.agent-src/personas/senior-engineer.md +77 -0
  128. package/.agent-src/personas/stakeholder.md +78 -0
  129. package/.agent-src/rules/agent-docs.md +61 -0
  130. package/.agent-src/rules/analysis-skill-routing.md +48 -0
  131. package/.agent-src/rules/architecture.md +62 -0
  132. package/.agent-src/rules/artifact-drafting-protocol.md +73 -0
  133. package/.agent-src/rules/ask-when-uncertain.md +52 -0
  134. package/.agent-src/rules/augment-portability.md +38 -0
  135. package/.agent-src/rules/augment-source-of-truth.md +128 -0
  136. package/.agent-src/rules/capture-learnings.md +89 -0
  137. package/.agent-src/rules/cli-output-handling.md +94 -0
  138. package/.agent-src/rules/commit-conventions.md +64 -0
  139. package/.agent-src/rules/context-hygiene.md +90 -0
  140. package/.agent-src/rules/docker-commands.md +55 -0
  141. package/.agent-src/rules/docs-sync.md +79 -0
  142. package/.agent-src/rules/downstream-changes.md +70 -0
  143. package/.agent-src/rules/e2e-testing.md +53 -0
  144. package/.agent-src/rules/guidelines.md +90 -0
  145. package/.agent-src/rules/improve-before-implement.md +94 -0
  146. package/.agent-src/rules/language-and-tone.md +104 -0
  147. package/.agent-src/rules/laravel-translations.md +48 -0
  148. package/.agent-src/rules/markdown-safe-codeblocks.md +18 -0
  149. package/.agent-src/rules/minimal-safe-diff.md +87 -0
  150. package/.agent-src/rules/missing-tool-handling.md +62 -0
  151. package/.agent-src/rules/model-recommendation.md +70 -0
  152. package/.agent-src/rules/package-ci-checks.md +80 -0
  153. package/.agent-src/rules/php-coding.md +63 -0
  154. package/.agent-src/rules/preservation-guard.md +29 -0
  155. package/.agent-src/rules/review-routing-awareness.md +125 -0
  156. package/.agent-src/rules/reviewer-awareness.md +92 -0
  157. package/.agent-src/rules/roadmap-progress-sync.md +56 -0
  158. package/.agent-src/rules/role-mode-adherence.md +54 -0
  159. package/.agent-src/rules/rule-type-governance.md +46 -0
  160. package/.agent-src/rules/runtime-safety.md +42 -0
  161. package/.agent-src/rules/scope-control.md +40 -0
  162. package/.agent-src/rules/security-sensitive-stop.md +77 -0
  163. package/.agent-src/rules/size-enforcement.md +29 -0
  164. package/.agent-src/rules/skill-improvement-trigger.md +58 -0
  165. package/.agent-src/rules/skill-quality.md +110 -0
  166. package/.agent-src/rules/slash-commands.md +30 -0
  167. package/.agent-src/rules/think-before-action.md +91 -0
  168. package/.agent-src/rules/token-efficiency.md +99 -0
  169. package/.agent-src/rules/tool-safety.md +36 -0
  170. package/.agent-src/rules/upstream-proposal.md +76 -0
  171. package/.agent-src/rules/user-interaction.md +79 -0
  172. package/.agent-src/rules/verify-before-complete.md +120 -0
  173. package/.agent-src/scripts/scan-seeder-violations.php +145 -0
  174. package/.agent-src/scripts/update_roadmap_progress.py +244 -0
  175. package/.agent-src/skills/adversarial-review/SKILL.md +149 -0
  176. package/.agent-src/skills/agent-docs-writing/SKILL.md +234 -0
  177. package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +197 -0
  178. package/.agent-src/skills/analysis-skill-router/SKILL.md +134 -0
  179. package/.agent-src/skills/api-design/SKILL.md +104 -0
  180. package/.agent-src/skills/api-endpoint/SKILL.md +185 -0
  181. package/.agent-src/skills/api-testing/SKILL.md +206 -0
  182. package/.agent-src/skills/artisan-commands/SKILL.md +78 -0
  183. package/.agent-src/skills/authz-review/SKILL.md +171 -0
  184. package/.agent-src/skills/aws-infrastructure/SKILL.md +152 -0
  185. package/.agent-src/skills/blade-ui/SKILL.md +75 -0
  186. package/.agent-src/skills/blast-radius-analyzer/SKILL.md +185 -0
  187. package/.agent-src/skills/bug-analyzer/SKILL.md +256 -0
  188. package/.agent-src/skills/check-refs/SKILL.md +72 -0
  189. package/.agent-src/skills/code-refactoring/SKILL.md +200 -0
  190. package/.agent-src/skills/code-review/SKILL.md +214 -0
  191. package/.agent-src/skills/command-routing/SKILL.md +96 -0
  192. package/.agent-src/skills/command-writing/SKILL.md +143 -0
  193. package/.agent-src/skills/composer-packages/SKILL.md +172 -0
  194. package/.agent-src/skills/context-authoring/SKILL.md +157 -0
  195. package/.agent-src/skills/context-document/SKILL.md +153 -0
  196. package/.agent-src/skills/conventional-commits-writing/SKILL.md +70 -0
  197. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +220 -0
  198. package/.agent-src/skills/copilot-config/SKILL.md +203 -0
  199. package/.agent-src/skills/dashboard-design/SKILL.md +116 -0
  200. package/.agent-src/skills/data-flow-mapper/SKILL.md +160 -0
  201. package/.agent-src/skills/database/SKILL.md +91 -0
  202. package/.agent-src/skills/dependency-upgrade/SKILL.md +204 -0
  203. package/.agent-src/skills/description-assist/SKILL.md +169 -0
  204. package/.agent-src/skills/design-review/SKILL.md +228 -0
  205. package/.agent-src/skills/devcontainer/SKILL.md +121 -0
  206. package/.agent-src/skills/developer-like-execution/SKILL.md +276 -0
  207. package/.agent-src/skills/docker/SKILL.md +245 -0
  208. package/.agent-src/skills/dto-creator/SKILL.md +117 -0
  209. package/.agent-src/skills/eloquent/SKILL.md +92 -0
  210. package/.agent-src/skills/eloquent/evals/last-run.json +99 -0
  211. package/.agent-src/skills/eloquent/evals/triggers.json +16 -0
  212. package/.agent-src/skills/estimate-ticket/SKILL.md +186 -0
  213. package/.agent-src/skills/estimate-ticket/evals/output-schema.yml +20 -0
  214. package/.agent-src/skills/estimate-ticket/evals/triggers.json +18 -0
  215. package/.agent-src/skills/fe-design/SKILL.md +223 -0
  216. package/.agent-src/skills/feature-planning/SKILL.md +226 -0
  217. package/.agent-src/skills/file-editor/SKILL.md +129 -0
  218. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +200 -0
  219. package/.agent-src/skills/flux/SKILL.md +64 -0
  220. package/.agent-src/skills/git-workflow/SKILL.md +102 -0
  221. package/.agent-src/skills/github-ci/SKILL.md +122 -0
  222. package/.agent-src/skills/grafana/SKILL.md +168 -0
  223. package/.agent-src/skills/guideline-writing/SKILL.md +147 -0
  224. package/.agent-src/skills/jira-integration/SKILL.md +182 -0
  225. package/.agent-src/skills/jobs-events/SKILL.md +87 -0
  226. package/.agent-src/skills/judge-bug-hunter/SKILL.md +157 -0
  227. package/.agent-src/skills/judge-code-quality/SKILL.md +158 -0
  228. package/.agent-src/skills/judge-security-auditor/SKILL.md +167 -0
  229. package/.agent-src/skills/judge-test-coverage/SKILL.md +154 -0
  230. package/.agent-src/skills/laravel/SKILL.md +195 -0
  231. package/.agent-src/skills/laravel-horizon/SKILL.md +169 -0
  232. package/.agent-src/skills/laravel-mail/SKILL.md +193 -0
  233. package/.agent-src/skills/laravel-middleware/SKILL.md +185 -0
  234. package/.agent-src/skills/laravel-notifications/SKILL.md +168 -0
  235. package/.agent-src/skills/laravel-pennant/SKILL.md +188 -0
  236. package/.agent-src/skills/laravel-pulse/SKILL.md +160 -0
  237. package/.agent-src/skills/laravel-reverb/SKILL.md +205 -0
  238. package/.agent-src/skills/laravel-scheduling/SKILL.md +167 -0
  239. package/.agent-src/skills/laravel-validation/SKILL.md +71 -0
  240. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +249 -0
  241. package/.agent-src/skills/lint-skills/SKILL.md +72 -0
  242. package/.agent-src/skills/livewire/SKILL.md +79 -0
  243. package/.agent-src/skills/logging-monitoring/SKILL.md +100 -0
  244. package/.agent-src/skills/mcp/SKILL.md +193 -0
  245. package/.agent-src/skills/merge-conflicts/SKILL.md +158 -0
  246. package/.agent-src/skills/migration-creator/SKILL.md +160 -0
  247. package/.agent-src/skills/module-management/SKILL.md +154 -0
  248. package/.agent-src/skills/multi-tenancy/SKILL.md +129 -0
  249. package/.agent-src/skills/openapi/SKILL.md +154 -0
  250. package/.agent-src/skills/override-management/SKILL.md +186 -0
  251. package/.agent-src/skills/performance/SKILL.md +69 -0
  252. package/.agent-src/skills/performance-analysis/SKILL.md +118 -0
  253. package/.agent-src/skills/pest-testing/SKILL.md +321 -0
  254. package/.agent-src/skills/php-coder/SKILL.md +78 -0
  255. package/.agent-src/skills/php-coder/evals/triggers.json +16 -0
  256. package/.agent-src/skills/php-debugging/SKILL.md +184 -0
  257. package/.agent-src/skills/php-service/SKILL.md +96 -0
  258. package/.agent-src/skills/playwright-testing/SKILL.md +244 -0
  259. package/.agent-src/skills/project-analysis-core/SKILL.md +138 -0
  260. package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +130 -0
  261. package/.agent-src/skills/project-analysis-laravel/SKILL.md +119 -0
  262. package/.agent-src/skills/project-analysis-nextjs/SKILL.md +123 -0
  263. package/.agent-src/skills/project-analysis-node-express/SKILL.md +111 -0
  264. package/.agent-src/skills/project-analysis-react/SKILL.md +119 -0
  265. package/.agent-src/skills/project-analysis-symfony/SKILL.md +111 -0
  266. package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +108 -0
  267. package/.agent-src/skills/project-analyzer/SKILL.md +341 -0
  268. package/.agent-src/skills/project-docs/SKILL.md +137 -0
  269. package/.agent-src/skills/quality-tools/SKILL.md +411 -0
  270. package/.agent-src/skills/readme-reviewer/SKILL.md +187 -0
  271. package/.agent-src/skills/readme-writing/SKILL.md +142 -0
  272. package/.agent-src/skills/readme-writing-package/SKILL.md +185 -0
  273. package/.agent-src/skills/receiving-code-review/SKILL.md +190 -0
  274. package/.agent-src/skills/refine-ticket/SKILL.md +310 -0
  275. package/.agent-src/skills/refine-ticket/detection-map.yml +124 -0
  276. package/.agent-src/skills/refine-ticket/evals/output-schema.yml +16 -0
  277. package/.agent-src/skills/refine-ticket/evals/triggers.json +16 -0
  278. package/.agent-src/skills/requesting-code-review/SKILL.md +199 -0
  279. package/.agent-src/skills/review-routing/SKILL.md +195 -0
  280. package/.agent-src/skills/roadmap-management/SKILL.md +303 -0
  281. package/.agent-src/skills/rtk-output-filtering/SKILL.md +184 -0
  282. package/.agent-src/skills/rule-writing/SKILL.md +148 -0
  283. package/.agent-src/skills/security/SKILL.md +79 -0
  284. package/.agent-src/skills/security-audit/SKILL.md +123 -0
  285. package/.agent-src/skills/sentry-integration/SKILL.md +170 -0
  286. package/.agent-src/skills/sequential-thinking/SKILL.md +158 -0
  287. package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +155 -0
  288. package/.agent-src/skills/skill-management/SKILL.md +121 -0
  289. package/.agent-src/skills/skill-reviewer/SKILL.md +218 -0
  290. package/.agent-src/skills/skill-writing/SKILL.md +291 -0
  291. package/.agent-src/skills/skill-writing/evals/triggers.json +16 -0
  292. package/.agent-src/skills/sql-writing/SKILL.md +74 -0
  293. package/.agent-src/skills/subagent-orchestration/SKILL.md +190 -0
  294. package/.agent-src/skills/systematic-debugging/SKILL.md +244 -0
  295. package/.agent-src/skills/technical-specification/SKILL.md +185 -0
  296. package/.agent-src/skills/terraform/SKILL.md +137 -0
  297. package/.agent-src/skills/terragrunt/SKILL.md +217 -0
  298. package/.agent-src/skills/test-driven-development/SKILL.md +252 -0
  299. package/.agent-src/skills/test-performance/SKILL.md +172 -0
  300. package/.agent-src/skills/threat-modeling/SKILL.md +189 -0
  301. package/.agent-src/skills/traefik/SKILL.md +319 -0
  302. package/.agent-src/skills/universal-project-analysis/SKILL.md +179 -0
  303. package/.agent-src/skills/upstream-contribute/SKILL.md +255 -0
  304. package/.agent-src/skills/using-git-worktrees/SKILL.md +148 -0
  305. package/.agent-src/skills/validate-feature-fit/SKILL.md +113 -0
  306. package/.agent-src/skills/verify-before-complete/SKILL.md +188 -0
  307. package/.agent-src/skills/websocket/SKILL.md +75 -0
  308. package/.agent-src/templates/AGENTS.md +146 -0
  309. package/.agent-src/templates/agent-settings.md +256 -0
  310. package/.agent-src/templates/agents/.gitattributes.fragment +16 -0
  311. package/.agent-src/templates/agents/agent-project-settings.example.yml +138 -0
  312. package/.agent-src/templates/agents/memory/architecture-decisions.example.yml +95 -0
  313. package/.agent-src/templates/agents/memory/domain-invariants.example.yml +80 -0
  314. package/.agent-src/templates/agents/memory/historical-patterns.example.yml +82 -0
  315. package/.agent-src/templates/agents/memory/incident-learnings.example.yml +113 -0
  316. package/.agent-src/templates/agents/memory/ownership.example.yml +75 -0
  317. package/.agent-src/templates/agents/memory/product-rules.example.yml +87 -0
  318. package/.agent-src/templates/agents/proposal.example.md +143 -0
  319. package/.agent-src/templates/command.md +84 -0
  320. package/.agent-src/templates/contexts/auth-model.md +59 -0
  321. package/.agent-src/templates/contexts/data-sensitivity.md +60 -0
  322. package/.agent-src/templates/contexts/deployment-order.md +72 -0
  323. package/.agent-src/templates/contexts/observability.md +64 -0
  324. package/.agent-src/templates/contexts/tenant-boundaries.md +68 -0
  325. package/.agent-src/templates/contexts.md +116 -0
  326. package/.agent-src/templates/copilot-instructions.md +115 -0
  327. package/.agent-src/templates/features.md +125 -0
  328. package/.agent-src/templates/github-workflows/memory-hygiene.yml +133 -0
  329. package/.agent-src/templates/github-workflows/pr-risk-review.yml +123 -0
  330. package/.agent-src/templates/github-workflows/proposal-drift.yml +118 -0
  331. package/.agent-src/templates/overrides/command.md +24 -0
  332. package/.agent-src/templates/overrides/guideline.md +21 -0
  333. package/.agent-src/templates/overrides/rule.md +19 -0
  334. package/.agent-src/templates/overrides/skill.md +24 -0
  335. package/.agent-src/templates/overrides/template.md +21 -0
  336. package/.agent-src/templates/persona.md +99 -0
  337. package/.agent-src/templates/roadmaps.md +109 -0
  338. package/.agent-src/templates/scripts/README.md +195 -0
  339. package/.agent-src/templates/scripts/check_memory.py +283 -0
  340. package/.agent-src/templates/scripts/check_memory_proposal.py +180 -0
  341. package/.agent-src/templates/scripts/historical-bug-patterns.example.yml +84 -0
  342. package/.agent-src/templates/scripts/implement_ticket/__init__.py +57 -0
  343. package/.agent-src/templates/scripts/implement_ticket/__main__.py +9 -0
  344. package/.agent-src/templates/scripts/implement_ticket/cli.py +171 -0
  345. package/.agent-src/templates/scripts/implement_ticket/delivery_state.py +130 -0
  346. package/.agent-src/templates/scripts/implement_ticket/dispatcher.py +134 -0
  347. package/.agent-src/templates/scripts/implement_ticket/persona_policy.py +85 -0
  348. package/.agent-src/templates/scripts/implement_ticket/steps/__init__.py +49 -0
  349. package/.agent-src/templates/scripts/implement_ticket/steps/analyze.py +98 -0
  350. package/.agent-src/templates/scripts/implement_ticket/steps/implement.py +145 -0
  351. package/.agent-src/templates/scripts/implement_ticket/steps/memory.py +136 -0
  352. package/.agent-src/templates/scripts/implement_ticket/steps/plan.py +175 -0
  353. package/.agent-src/templates/scripts/implement_ticket/steps/refine.py +140 -0
  354. package/.agent-src/templates/scripts/implement_ticket/steps/report.py +195 -0
  355. package/.agent-src/templates/scripts/implement_ticket/steps/test.py +180 -0
  356. package/.agent-src/templates/scripts/implement_ticket/steps/verify.py +170 -0
  357. package/.agent-src/templates/scripts/memory_hash.py +75 -0
  358. package/.agent-src/templates/scripts/memory_lookup.py +216 -0
  359. package/.agent-src/templates/scripts/memory_report.py +184 -0
  360. package/.agent-src/templates/scripts/memory_signal.py +167 -0
  361. package/.agent-src/templates/scripts/memory_status.py +156 -0
  362. package/.agent-src/templates/scripts/ownership-map.example.yml +87 -0
  363. package/.agent-src/templates/scripts/pr-risk-config.example.yml +76 -0
  364. package/.agent-src/templates/scripts/pr_review_routing.py +340 -0
  365. package/.agent-src/templates/scripts/pr_risk_review.py +211 -0
  366. package/.agent-src/templates/skill.md +136 -0
  367. package/.augment-plugin/marketplace.json +32 -0
  368. package/.augment-plugin/plugin.json +21 -0
  369. package/.claude-plugin/marketplace.json +119 -0
  370. package/AGENTS.md +121 -0
  371. package/CHANGELOG.md +279 -0
  372. package/CONTRIBUTING.md +176 -0
  373. package/LICENSE +21 -0
  374. package/README.md +357 -0
  375. package/bin/install.php +38 -0
  376. package/composer.json +29 -0
  377. package/config/agent-settings.template.yml +96 -0
  378. package/config/profiles/balanced.ini +10 -0
  379. package/config/profiles/full.ini +10 -0
  380. package/config/profiles/minimal.ini +10 -0
  381. package/docs/architecture.md +144 -0
  382. package/docs/customization.md +88 -0
  383. package/docs/development.md +171 -0
  384. package/docs/getting-started.md +130 -0
  385. package/docs/github-topics.md +84 -0
  386. package/docs/installation.md +376 -0
  387. package/docs/mcp.md +133 -0
  388. package/docs/quality.md +98 -0
  389. package/docs/skills-catalog.md +136 -0
  390. package/docs/troubleshooting.md +167 -0
  391. package/llms.txt +130 -0
  392. package/package.json +31 -0
  393. package/scripts/audit_skill_descriptions.py +168 -0
  394. package/scripts/check_compression.py +221 -0
  395. package/scripts/check_memory.py +341 -0
  396. package/scripts/check_memory_proposal.py +180 -0
  397. package/scripts/check_portability.py +320 -0
  398. package/scripts/check_proposal.py +269 -0
  399. package/scripts/check_references.py +400 -0
  400. package/scripts/ci_summary.py +131 -0
  401. package/scripts/compress.py +671 -0
  402. package/scripts/compress.sh +18 -0
  403. package/scripts/first-run.sh +109 -0
  404. package/scripts/generate_catalog.py +116 -0
  405. package/scripts/install +151 -0
  406. package/scripts/install-hooks.sh +29 -0
  407. package/scripts/install.py +487 -0
  408. package/scripts/install.sh +637 -0
  409. package/scripts/install_anthropic_key.sh +101 -0
  410. package/scripts/inventory_frontmatter.py +164 -0
  411. package/scripts/lint_marketplace.py +142 -0
  412. package/scripts/lint_regression.py +232 -0
  413. package/scripts/mcp_render.py +159 -0
  414. package/scripts/measure_patterns.py +376 -0
  415. package/scripts/memory_hash.py +75 -0
  416. package/scripts/memory_lookup.py +441 -0
  417. package/scripts/memory_report.py +336 -0
  418. package/scripts/memory_signal.py +210 -0
  419. package/scripts/memory_status.py +195 -0
  420. package/scripts/postinstall.sh +60 -0
  421. package/scripts/readme_linter.py +580 -0
  422. package/scripts/refine_ticket_detect.py +623 -0
  423. package/scripts/requirements-evals.txt +7 -0
  424. package/scripts/runtime_dispatcher.py +265 -0
  425. package/scripts/runtime_handler.py +148 -0
  426. package/scripts/runtime_registry.py +166 -0
  427. package/scripts/schemas/command.schema.json +32 -0
  428. package/scripts/schemas/persona.schema.json +42 -0
  429. package/scripts/schemas/rule.schema.json +28 -0
  430. package/scripts/schemas/skill.schema.json +73 -0
  431. package/scripts/setup.sh +230 -0
  432. package/scripts/setup_eval_venv.sh +58 -0
  433. package/scripts/skill_linter.py +2175 -0
  434. package/scripts/skill_trigger_eval.py +651 -0
  435. package/scripts/tool_registry.py +146 -0
  436. package/scripts/tools/__init__.py +1 -0
  437. package/scripts/tools/adapter_errors.py +63 -0
  438. package/scripts/tools/base_adapter.py +91 -0
  439. package/scripts/tools/github_adapter.py +128 -0
  440. package/scripts/tools/jira_adapter.py +115 -0
  441. package/scripts/update_counts.py +147 -0
  442. package/scripts/validate_frontmatter.py +424 -0
  443. package/templates/consumer-settings/README.md +46 -0
  444. package/templates/consumer-settings/augment-settings.json +12 -0
  445. package/templates/consumer-settings/claude-settings.json +9 -0
  446. package/templates/consumer-settings/copilot-settings.json +14 -0
@@ -0,0 +1,28 @@
1
+ # Design Patterns
2
+
3
+ > Proven patterns for PHP / Laravel projects. Use them when they reduce complexity, not when they add it.
4
+
5
+ **Related Skills:** `php-service`, `dto-creator`, `jobs-events`, `security`, `eloquent`
6
+ **Related Rules:** `scope-control.md`, `architecture.md`
7
+
8
+ ## Overview
9
+
10
+ | Pattern | Skill | When to use |
11
+ |---|---|---|
12
+ | [Service Layer / Actions](patterns/service-layer.md) | `php-service` | Business logic that doesn't belong in controllers |
13
+ | [Dependency Injection](patterns/dependency-injection.md) | `php-service` | Decouple classes from concrete implementations |
14
+ | [Strategy](patterns/strategy.md) | `php-coder` | Multiple interchangeable algorithms at runtime |
15
+ | [Factory](patterns/factory.md) | `php-coder` | Complex object creation |
16
+ | [DTOs / Value Objects](patterns/dtos.md) | `dto-creator` | Structured data instead of untyped arrays |
17
+ | [Policies](patterns/policies.md) | `security` | Centralized authorization logic |
18
+ | [Events / Listeners](patterns/events.md) | `jobs-events` | Decoupled side effects (mails, logs, syncs) |
19
+ | [Pipeline / Middleware](patterns/pipelines.md) | `laravel` | Sequential processing steps / filter chains |
20
+ | [Repository](patterns/repositories.md) | `eloquent` | Complex or reusable database queries |
21
+
22
+ ## When NOT to Use Patterns
23
+
24
+ - Don't introduce a pattern for a 5-line function
25
+ - Don't create an interface if there will only ever be one implementation
26
+ - Don't use events for everything — direct calls are easier to follow
27
+ - Don't wrap simple Eloquent queries in repositories
28
+ - KISS and YAGNI always trump pattern purity
@@ -0,0 +1,92 @@
1
+ # Performance Guidelines
2
+
3
+ > Performance conventions — caching, Redis, eager loading, query optimization, response time targets.
4
+
5
+ **Related Skills:** `performance`, `database`
6
+ **Related Guidelines:** [database.md](database.md), [eloquent.md](eloquent.md)
7
+
8
+ ## Caching
9
+
10
+ ### Cache driver
11
+
12
+ Redis is the primary cache driver (also used for queues and sessions).
13
+ Config: `config/cache.php`, `config/database.php` (Redis connections).
14
+
15
+ ### Patterns
16
+
17
+ ```php
18
+ // TTL-based
19
+ $value = Cache::remember('key', now()->addMinutes(30), fn () => ExpensiveQuery::run());
20
+
21
+ // Forever (manual invalidation)
22
+ Cache::forever('key', $value);
23
+
24
+ // Invalidate
25
+ Cache::forget('key');
26
+ ```
27
+
28
+ ### Cache invalidation
29
+
30
+ - Invalidate when underlying data changes.
31
+ - Use event-driven invalidation — model events clear related caches.
32
+ - Use cache tags (when supported) for group invalidation.
33
+ - Prefer short TTLs over complex invalidation logic.
34
+
35
+ ### Multi-tenant caching
36
+
37
+ **Always include tenant/customer ID in cache keys:**
38
+
39
+ ```php
40
+ // ✅ Tenant-scoped
41
+ $key = "customer:{$customerId}:projects:count";
42
+
43
+ // ❌ Shared across tenants
44
+ $key = "projects:count";
45
+ ```
46
+
47
+ ## Eager Loading
48
+
49
+ - Always eager load relationships used in API Resources.
50
+ - Use `with()` at query level — not `$with` model property.
51
+ - Use `withCount()` for counting without loading.
52
+ - Use `load()` for lazy eager loading.
53
+
54
+ ## Query Patterns
55
+
56
+ ```php
57
+ $count = Project::query()->where('status', 'active')->count();
58
+ $exists = Project::query()->where('email', $email)->exists();
59
+ $ids = Project::query()->pluck('id');
60
+ $total = Order::query()->sum('amount');
61
+ ```
62
+
63
+ Use `DB::enableQueryLog()` during development to detect N+1 queries.
64
+
65
+ ## Background Jobs
66
+
67
+ Queue when: email/notification sending, external API calls, heavy calculations, import/export.
68
+
69
+ ## Redis Patterns
70
+
71
+ - Cache: standard key-value
72
+ - Queues: job backend via Horizon
73
+ - Rate limiting: `RateLimiter` facade
74
+ - Locks: `Cache::lock()` for distributed locking
75
+
76
+ ## Response Time Targets
77
+
78
+ | Endpoint type | Target |
79
+ |---|---|
80
+ | Simple CRUD | < 200ms |
81
+ | Complex queries | < 500ms |
82
+ | List endpoints | Always paginated |
83
+ | Background jobs | No strict limit (monitor via Horizon) |
84
+
85
+ ## Do NOT
86
+
87
+ - Cache without tenant isolation in multi-tenant contexts.
88
+ - Use `get()` or `all()` on large tables — paginate or chunk.
89
+ - Run heavy computation synchronously in API requests — queue it.
90
+ - Add indexes blindly — analyze query patterns first.
91
+ - Use `sleep()` or long-running loops in web requests.
92
+ - Assume cache is always available — handle misses gracefully.
@@ -0,0 +1,100 @@
1
+ # API Resource Guidelines
2
+
3
+ > Project-specific API Resource conventions. Base class, versioning (v1/v2), OpenAPI schemas.
4
+
5
+ **Related Skills:** `api-endpoint`, `api-design`, `openapi`
6
+ **Related Guidelines:** [controllers.md](controllers.md)
7
+
8
+ ## Core Rule
9
+
10
+ **Every controller MUST return an API Resource** — never return raw arrays, models, or `response()->json()`.
11
+
12
+ ## Base Class
13
+
14
+ Extend `App\Http\Resources\JsonResource` (not Laravel's base class directly).
15
+
16
+ ## Resource Structure
17
+
18
+ ```php
19
+ use App\Http\Resources\JsonResource;
20
+ use App\Models\ExternalCustomerDatabase\Link\Link;
21
+ use OpenApi\Attributes as OA;
22
+
23
+ #[OA\Schema(
24
+ schema: 'v2_Link',
25
+ properties: [
26
+ new IntegerProperty(property: 'id', example: 1),
27
+ new StringProperty(property: 'text', example: 'Example link'),
28
+ ]
29
+ )]
30
+ class LinkResource extends JsonResource
31
+ {
32
+ /** @var Link */
33
+ public $resource;
34
+
35
+ public static $wrap = 'data';
36
+
37
+ /** @return array<string, mixed> */
38
+ public function toArray($request): array
39
+ {
40
+ $link = $this->resource;
41
+
42
+ return [
43
+ 'id' => $link->getId(),
44
+ 'text' => $link->getText(),
45
+ ];
46
+ }
47
+ }
48
+ ```
49
+
50
+ ## Required Elements
51
+
52
+ | Element | Rule |
53
+ |---|---|
54
+ | `/** @var ModelClass */` on `$resource` | Always — types the resource for PHPStan and OpenAPI |
55
+ | `public static $wrap = 'data';` | Required for v2 resources. v1 resources use `$wrap = null` |
56
+ | `#[OA\Schema(...)]` | Required — OpenAPI documentation |
57
+ | `/** @return array<string, mixed> */` | PHPDoc on `toArray()` |
58
+
59
+ ## Controller Return Types
60
+
61
+ Controllers MUST type-hint the return value as the Resource class:
62
+
63
+ ```php
64
+ // Single resource
65
+ public function __invoke(ShowRequest $request, Project $project): ProjectResource
66
+ {
67
+ return ProjectResource::make($project);
68
+ }
69
+
70
+ // Collection
71
+ public function __invoke(ListRequest $request): ResourceCollection
72
+ {
73
+ return ProjectResource::collection($projects);
74
+ }
75
+ ```
76
+
77
+ ## Key Conventions
78
+
79
+ - **Type `$resource`** via `@var` PHPDoc — do NOT cast inline in `toArray()`
80
+ - **Use getter methods** on the model (`$link->getId()`), not direct attribute access (`$link->id`)
81
+ - **Use `Resource::make()`** in controllers, not `new Resource()`
82
+ - **Nested resources**: use `::make()` for single items, `::collection()` for lists
83
+ - **Conditional null**: `$model->getRelation() ? RelatedResource::make($model->getRelation()) : null`
84
+
85
+ ## Versioning
86
+
87
+ | Version | Property Names | `$wrap` |
88
+ |---|---|---|
89
+ | **v1** | Clean English (`number`, `status`, `title`) | `null` |
90
+ | **v2** | Legacy DB columns (`nr_lv`, `lv_status`, `bezeichnung`) | `'data'` |
91
+
92
+ ## Resource Variants
93
+
94
+ | Pattern | Example | Purpose |
95
+ |---|---|---|
96
+ | `{Entity}Resource` | `ProjectResource` | Full entity |
97
+ | `{Entity}MinimalResource` | `ProjectMinimalResource` | Lightweight for lists |
98
+ | `Simple{Entity}Resource` | `SimpleUserResource` | Embedded in other resources |
99
+ | `{Entity}StatisticsResource` | `ProjectStatisticsResource` | Aggregated data |
100
+
@@ -0,0 +1,110 @@
1
+ # Security Guidelines
2
+
3
+ > Security conventions — authentication, authorization, input validation, SQL injection, XSS, CSRF, headers.
4
+
5
+ **Related Skills:** `security`, `laravel-validation`
6
+ **Related Guidelines:** [validations.md](validations.md)
7
+
8
+ ## Authentication
9
+
10
+ - Check `tymon/jwt-auth` or `laravel/sanctum` in `composer.json`.
11
+ - Check `config/auth.php` for guards and providers.
12
+ - API: JWT tokens or API keys (depending on endpoint).
13
+ - Customer identification after auth — see `multi-tenancy` skill.
14
+
15
+ ## Authorization (Policies)
16
+
17
+ ```php
18
+ // In FormRequest
19
+ public function authorize(): bool
20
+ {
21
+ return $this->user()->can('view', $this->route('project'));
22
+ }
23
+
24
+ // In Controller
25
+ $this->authorize('update', $project);
26
+ ```
27
+
28
+ - Create policies in `app/Policies/`.
29
+ - Register in `AuthServiceProvider` (if not auto-discovery).
30
+ - Check `agents/gates.md` for custom gates.
31
+
32
+ ## Input Validation
33
+
34
+ - Always use FormRequest classes — never validate in controllers.
35
+ - Be specific: types, lengths, formats.
36
+ - Never trust client-side validation.
37
+
38
+ ```php
39
+ // ✅ Strict
40
+ 'email' => ['required', 'email:rfc,dns', 'max:255'],
41
+ 'amount' => ['required', 'decimal:0,2', 'min:0', 'max:999999.99'],
42
+ ```
43
+
44
+ ## SQL Injection Prevention
45
+
46
+ - Always use Eloquent or Query Builder (parameterized by default).
47
+ - Never concatenate user input into raw SQL.
48
+ - Use `DB::raw()` only for expressions, never with user input.
49
+
50
+ ## XSS Prevention
51
+
52
+ - API: use API Resource classes (no HTML rendering).
53
+ - Blade: `{{ }}` (escaped) — never `{!! !!}` with user input.
54
+ - Sanitize HTML input for rich text (`htmlpurifier`).
55
+
56
+ ## CSRF
57
+
58
+ - API routes excluded (token-based auth).
59
+ - Web routes have CSRF via `VerifyCsrfToken` middleware.
60
+
61
+ ## Rate Limiting
62
+
63
+ - Apply to auth endpoints (login, password reset).
64
+ - Use `throttle:` middleware on sensitive routes.
65
+ - Check `RouteServiceProvider` or `bootstrap/app.php` for definitions.
66
+
67
+ ## Sensitive Data
68
+
69
+ - Never log passwords, tokens, API keys.
70
+ - `encrypt()` / `decrypt()` for sensitive data at rest.
71
+ - Environment variables for secrets — never hardcode.
72
+
73
+ ## Security Headers
74
+
75
+ | Header | Value |
76
+ |---|---|
77
+ | `X-Content-Type-Options` | `nosniff` |
78
+ | `X-Frame-Options` | `DENY` or `SAMEORIGIN` |
79
+ | `Strict-Transport-Security` | `max-age=31536000; includeSubDomains` |
80
+ | `Content-Security-Policy` | Project-specific |
81
+ | `Referrer-Policy` | `strict-origin-when-cross-origin` |
82
+
83
+ Set in middleware — not in individual controllers. CORS: `config/cors.php`.
84
+
85
+ ## Session Security
86
+
87
+ - `httpOnly` and `secure` flags on cookies.
88
+ - `SameSite=Lax` or `Strict`.
89
+ - Regenerate session ID after login.
90
+
91
+ ## Mass Assignment
92
+
93
+ ```php
94
+ // ✅ Only validated data
95
+ $project = Project::create($request->validated());
96
+
97
+ // ❌ Dangerous
98
+ $project = Project::create($request->all());
99
+ ```
100
+
101
+ ## Do NOT
102
+
103
+ - Bypass FormRequest validation.
104
+ - Use `$request->all()` for mass assignment.
105
+ - Disable CSRF for web routes.
106
+ - Store plaintext passwords/secrets.
107
+ - Expose internal error details in production.
108
+ - Trust `X-Forwarded-For` without proxy config.
109
+ - Use `md5()`/`sha1()` for password hashing.
110
+ - Store tokens in localStorage — use httpOnly cookies.
@@ -0,0 +1,97 @@
1
+ # SQL Guidelines
2
+
3
+ > Raw SQL conventions — parameterization, MariaDB/MySQL syntax, common mistakes.
4
+
5
+ **Related Skills:** `sql-writing`, `database`
6
+ **Related Guidelines:** [database.md](database.md)
7
+
8
+ ## Iron Law
9
+
10
+ ```
11
+ NEVER build SQL strings with PHP variable interpolation or concatenation.
12
+ ALWAYS use parameterized queries or query builder.
13
+ ```
14
+
15
+ ## Parameterized Queries
16
+
17
+ ```php
18
+ // ✅ Correct
19
+ DB::select('SELECT * FROM users WHERE email = ?', [$email]);
20
+ DB::select('SELECT * FROM users WHERE email = :email', ['email' => $email]);
21
+
22
+ // ❌ DANGEROUS
23
+ DB::select("SELECT * FROM users WHERE email = '{$email}'");
24
+ ```
25
+
26
+ ## Raw Expressions in Eloquent
27
+
28
+ ```php
29
+ // ✅ DB::raw with static SQL
30
+ User::query()->select(DB::raw('COUNT(*) as count, status'))->groupBy('status')->get();
31
+
32
+ // ✅ selectRaw with bindings
33
+ Order::query()->selectRaw('SUM(total) as revenue')->whereRaw('created_at >= ?', [$start])->get();
34
+
35
+ // ❌ PHP variable in raw SQL
36
+ Order::query()->whereRaw("created_at >= '{$start}'")->get();
37
+ ```
38
+
39
+ ## Common Mistakes
40
+
41
+ ```php
42
+ // ❌ PHP array syntax in SQL
43
+ DB::statement("UPDATE users SET roles = ['admin'] WHERE id = 1");
44
+ // ✅ SQL JSON syntax
45
+ DB::statement("UPDATE users SET roles = JSON_ARRAY('admin') WHERE id = ?", [1]);
46
+
47
+ // ❌ PHP null
48
+ DB::statement("UPDATE users SET deleted_at = null WHERE id = 1");
49
+ // ✅ SQL NULL
50
+ DB::statement('UPDATE users SET deleted_at = NULL WHERE id = ?', [1]);
51
+
52
+ // ❌ PHP boolean
53
+ DB::statement("UPDATE users SET active = true WHERE id = 1");
54
+ // ✅ MariaDB uses 1/0
55
+ DB::statement('UPDATE users SET active = 1 WHERE id = ?', [1]);
56
+
57
+ // ❌ String concat for IN
58
+ $ids = implode(',', $userIds);
59
+ DB::select("SELECT * FROM users WHERE id IN ({$ids})");
60
+ // ✅ Query builder
61
+ DB::table('users')->whereIn('id', $userIds)->get();
62
+ ```
63
+
64
+ ## MariaDB/MySQL Syntax
65
+
66
+ ```sql
67
+ -- String quoting: single quotes for values, backticks for identifiers
68
+ SELECT `user`.`name` FROM `users` WHERE `name` = 'John';
69
+
70
+ -- JSON columns (MariaDB 10.2+)
71
+ SELECT JSON_VALUE(settings, '$.theme') FROM users;
72
+
73
+ -- UPSERT
74
+ INSERT INTO counters (key, value) VALUES ('visits', 1) ON DUPLICATE KEY UPDATE value = value + 1;
75
+
76
+ -- Date functions
77
+ SELECT * FROM orders WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY);
78
+ ```
79
+
80
+ ## When Raw SQL is Needed
81
+
82
+ | Use case | Raw SQL needed? |
83
+ |---|---|
84
+ | Standard CRUD, filtering, joins | No — query builder |
85
+ | Complex subqueries, window functions | Yes |
86
+ | Performance-critical index hints | Yes |
87
+ | Bulk operations (INSERT...SELECT) | Yes |
88
+ | Full-text search (MATCH...AGAINST) | Yes |
89
+
90
+ ## Do NOT
91
+
92
+ - Interpolate PHP variables into SQL — always parameterize.
93
+ - Use PHP syntax in raw SQL — use SQL equivalents.
94
+ - Use `float` for money — use `DECIMAL(10, 2)`.
95
+ - Forget backtick quoting for reserved words as column names.
96
+ - Use `OFFSET` for large table pagination — use cursor.
97
+ - Write raw SQL when query builder can express it clearly.
@@ -0,0 +1,119 @@
1
+ # Validation Guidelines
2
+
3
+ > Project-specific FormRequest conventions. Array syntax, route params, property mapping.
4
+
5
+ **Related Skills:** `laravel-validation`, `api-endpoint`
6
+ **Related Guidelines:** [controllers.md](controllers.md)
7
+
8
+ ## Core Rules
9
+
10
+ - Every controller has a matching FormRequest: `{Action}{Entity}Request`
11
+ - Every FormRequest **must** have an `authorize()` method (using Policies)
12
+ - Validation messages **should** use translations (`__('validation.xxx')`)
13
+
14
+ ## Rule Syntax
15
+
16
+ Always use **array syntax** for rules — never pipe-separated strings.
17
+
18
+ ```php
19
+ // ✅ Good
20
+ 'email' => ['required', 'email', 'max:60'],
21
+
22
+ // ❌ Bad
23
+ 'email' => 'required|email|max:60',
24
+ ```
25
+
26
+ Use Laravel's `Illuminate\Validation\Rules` classes when possible:
27
+
28
+ ```php
29
+ // ✅ Good
30
+ 'email' => [new Exists('connection.staff', 'email')],
31
+
32
+ // ❌ Bad
33
+ 'email' => ['exists:connection.staff,email'],
34
+ ```
35
+
36
+ ## Route Parameters
37
+
38
+ Validate route parameters via `prepareForValidation()`:
39
+
40
+ ```php
41
+ public function prepareForValidation(): void
42
+ {
43
+ /** @var Project $project */
44
+ $project = $this->route('project');
45
+
46
+ $this->merge([
47
+ 'latitude' => $project->getLatitude(),
48
+ 'longitude' => $project->getLongitude(),
49
+ ]);
50
+ }
51
+ ```
52
+
53
+ ## Property Mapping
54
+
55
+ When request keys differ from model properties, handle mapping in the FormRequest
56
+ (not in Controller or Service):
57
+
58
+ ```php
59
+ // ✅ Best — FormRequest as single source of truth
60
+ public function prepareForValidation(): void
61
+ {
62
+ $this->merge([
63
+ 'id' => $this->input('user_id'),
64
+ 'name' => $this->input('user_name'),
65
+ ]);
66
+ $this->offsetUnset('user_id');
67
+ $this->offsetUnset('user_name');
68
+ }
69
+ ```
70
+
71
+ ## Inline vs FormRequest
72
+
73
+ - Inline: only for small, truly local cases.
74
+ - FormRequest: when validation is reused, complex, involves authorization, nested structures, or custom messages.
75
+
76
+ ## Conditional Validation
77
+
78
+ - Use Laravel's conditional features intentionally.
79
+ - Keep conditions readable.
80
+ - Complex conditions → normalize first, then compose clearer rules.
81
+
82
+ ## Nested and Array Input
83
+
84
+ - Be explicit with nested keys and wildcard rules.
85
+ - Validate structure as well as leaf values.
86
+ - Don't accept loosely structured input when shape matters.
87
+
88
+ ## File Validation
89
+
90
+ - Validate presence, type, size explicitly.
91
+ - Don't trust client-provided metadata alone.
92
+ - Align with downstream processing expectations.
93
+
94
+ ## Custom Rules
95
+
96
+ - Create custom rule objects when logic is reused or domain-specific.
97
+ - Keep custom rules focused on validation only — no side effects.
98
+ - Custom Rule objects must return `$fail` callback, not throw exceptions.
99
+
100
+ ## Authorization Boundary
101
+
102
+ - Use `authorize()`, policies, or gates consistently.
103
+ - Keep authorization failure and validation failure conceptually separate.
104
+ - Don't mix role/business auth logic into validation rules.
105
+
106
+ ## API Validation
107
+
108
+ - Respect existing API error response structure.
109
+ - Keep validation consistent across endpoints.
110
+ - Don't introduce a new validation response shape in an established API.
111
+
112
+ ## Do NOT
113
+
114
+ - Validate in controllers — use FormRequests.
115
+ - Use `$request->all()` — use `$request->validated()`.
116
+ - Skip validation for API endpoints.
117
+ - Put business logic in validation classes.
118
+ - Create custom rules when built-in rules suffice.
119
+
@@ -0,0 +1,100 @@
1
+ # WebSocket Guidelines
2
+
3
+ > WebSocket conventions — Laravel Broadcasting, channel types, connection management, payloads.
4
+
5
+ **Related Skills:** `websocket`, `laravel-reverb`
6
+
7
+ ## Laravel Broadcasting Setup
8
+
9
+ ```php
10
+ // config/broadcasting.php
11
+ 'connections' => [
12
+ 'reverb' => [
13
+ 'driver' => 'reverb',
14
+ 'key' => env('REVERB_APP_KEY'),
15
+ 'secret' => env('REVERB_APP_SECRET'),
16
+ ],
17
+ ],
18
+ ```
19
+
20
+ ## Broadcasting Events
21
+
22
+ ```php
23
+ class OrderStatusUpdated implements ShouldBroadcast
24
+ {
25
+ use Dispatchable, InteractsWithSockets, SerializesModels;
26
+
27
+ public function __construct(public readonly Order $order) {}
28
+
29
+ public function broadcastOn(): array
30
+ {
31
+ return [new PrivateChannel('orders.' . $this->order->customer_id)];
32
+ }
33
+
34
+ public function broadcastAs(): string
35
+ {
36
+ return 'order.status.updated';
37
+ }
38
+
39
+ public function broadcastWith(): array
40
+ {
41
+ return [
42
+ 'order_id' => $this->order->id,
43
+ 'status' => $this->order->status,
44
+ ];
45
+ }
46
+ }
47
+ ```
48
+
49
+ ## Channel Types
50
+
51
+ | Type | Prefix | Auth | Use case |
52
+ |---|---|---|---|
53
+ | Public | none | No | Public notifications, live feeds |
54
+ | Private | `private-` | Yes | User-specific updates |
55
+ | Presence | `presence-` | Yes | Who's online, collaborative editing |
56
+
57
+ ## Channel Authorization
58
+
59
+ ```php
60
+ // routes/channels.php
61
+ Broadcast::channel('orders.{customerId}', function (User $user, int $customerId) {
62
+ return $user->customer_id === $customerId;
63
+ });
64
+ ```
65
+
66
+ ## Client (Laravel Echo)
67
+
68
+ ```ts
69
+ echo.private(`orders.${customerId}`)
70
+ .listen('.order.status.updated', (event) => {
71
+ console.log('Order updated:', event.order_id, event.status)
72
+ })
73
+ ```
74
+
75
+ ## Connection Management
76
+
77
+ ### Reconnection
78
+
79
+ Exponential backoff: `delay = min(1000 * 2^retryCount, 30000)`, max 10 retries.
80
+
81
+ ### Heartbeat
82
+
83
+ - Server ping every 30s, client responds with pong.
84
+ - No pong within 10s → close and reconnect.
85
+
86
+ ## Core Rules
87
+
88
+ - Always authorize private and presence channels.
89
+ - Keep payloads small — IDs and changed fields, not full objects.
90
+ - Implement reconnection with exponential backoff.
91
+ - Use heartbeats to detect dead connections.
92
+ - Handle offline gracefully — queue messages, sync on reconnect.
93
+ - Use `broadcastWith()` to control the payload.
94
+
95
+ ## Do NOT
96
+
97
+ - Send entire model objects — select only needed fields.
98
+ - Rely on WebSocket delivery — use acknowledgments.
99
+ - Skip channel authorization for user-specific data.
100
+ - Create too many channels — group related events.