@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,199 @@
1
+ # DTOs & Value Objects
2
+
3
+ > Typed data instead of untyped arrays.
4
+
5
+ ## DTO (Data Transfer Object)
6
+
7
+ Structured, immutable data container for passing data between layers.
8
+
9
+ ### When to Use
10
+
11
+ ✅ Passing validated request data to a service/action
12
+ ✅ Returning structured data from a service
13
+ ✅ Replacing `array<string, mixed>` in method signatures
14
+
15
+ ### Prefer a DTO base class (if available)
16
+
17
+ If the project uses a DTO package with attribute-based mapping (e.g., `SimpleDto`, `spatie/data-transfer-object`),
18
+ new DTOs **should extend the project's base class**. Check `composer.json` for DTO-related packages.
19
+
20
+ #### Attribute-based DTO Example
21
+
22
+ ```php
23
+ use App\Models\Equipment;
24
+ use Vendor\DataHelpers\SimpleDto;
25
+ use Vendor\DataHelpers\SimpleDto\Attributes\ConvertEmptyToNull;
26
+ use Vendor\DataHelpers\SimpleDto\Attributes\DateTimeFormat;
27
+ use Vendor\DataHelpers\SimpleDto\Attributes\Decimal;
28
+ use Vendor\DataHelpers\SimpleDto\Attributes\HasModel;
29
+ use Vendor\DataHelpers\SimpleDto\Attributes\Length;
30
+ use Vendor\DataHelpers\SimpleDto\Attributes\Map;
31
+ use Vendor\DataHelpers\SimpleDto\Attributes\Unsigned;
32
+ use Carbon\Carbon;
33
+
34
+ #[ConvertEmptyToNull]
35
+ #[HasModel(Equipment::class)]
36
+ class EquipmentDto extends SimpleDto
37
+ {
38
+ public function __construct(
39
+ // Primary Key
40
+ #[Map('id_equipment')]
41
+ public ?int $id = null,
42
+
43
+ // Equipment identification
44
+ #[Map('equipment_nr'),
45
+ Length(50)]
46
+ public string $equipmentNumber = '',
47
+
48
+ #[Map('bezeichnung'),
49
+ Length(250)]
50
+ public string $title = '',
51
+
52
+ // External IDs (from client software)
53
+ #[Map('ext_uid'),
54
+ Length(250)]
55
+ public ?string $externalUid = null,
56
+
57
+ // Status
58
+ #[Map('is_active'),
59
+ Unsigned,
60
+ Length(1)]
61
+ public bool $isActive = true,
62
+
63
+ // Financial
64
+ #[Map('hourly_rate'),
65
+ Unsigned,
66
+ Decimal(10, 2)]
67
+ public float $hourlyRate = 0.0,
68
+
69
+ // Timestamps
70
+ #[Map('created_at'),
71
+ DateTimeFormat('Y-m-d H:i:s')]
72
+ public ?Carbon $createdAt = null,
73
+
74
+ #[Map('updated_at'),
75
+ DateTimeFormat('Y-m-d H:i:s')]
76
+ public ?Carbon $updatedAt = null,
77
+ ) {}
78
+ }
79
+ ```
80
+
81
+ #### Key attribute-based DTO features
82
+
83
+ - **`#[Map('db_column')]`** — Maps a readable property name to a database column or API field name
84
+ - **`#[Length(n)]`** — Validates max string length
85
+ - **`#[Decimal(precision, scale)]`** — Validates decimal format
86
+ - **`#[Unsigned]`** — Validates non-negative values
87
+ - **`#[DateTimeFormat('Y-m-d H:i:s')]`** — Casts to/from Carbon with the given format
88
+ - **`#[Email]`** — Validates email format
89
+ - **`#[ConvertEmptyToNull]`** — Class-level: converts empty strings to `null`
90
+ - **`#[HasModel(Model::class)]`** — Links the DTO to an Eloquent model for `fromModel()` / `toModel()`
91
+
92
+ #### Creating and using DTOs
93
+
94
+ ```php
95
+ // From array (e.g. API response, request data)
96
+ $dto = EquipmentDto::fromArray($data);
97
+
98
+ // From Eloquent model (requires #[HasModel] + DtoMappingTrait on the model)
99
+ $dto = EquipmentDto::fromModel($equipment);
100
+
101
+ // To array (uses #[Map] names as keys)
102
+ $array = $dto->toArray();
103
+
104
+ // To Eloquent model
105
+ $model = $dto->toModel(Equipment::class);
106
+
107
+ // Collections
108
+ $dtos = EquipmentDto::collection($arrayOfData);
109
+ ```
110
+
111
+ #### Attribute-based DTO rules
112
+
113
+ - Extend the project's DTO base class
114
+ - Use constructor property promotion with public properties
115
+ - Use `#[Map('column_name')]` to map properties to database/API field names
116
+ - Use validation attributes (`#[Length]`, `#[Decimal]`, `#[Email]`, etc.) for constraints
117
+ - Use `#[ConvertEmptyToNull]` at class level when empty strings should become `null`
118
+ - Use `#[HasModel(Model::class)]` when the DTO maps to an Eloquent model
119
+ - No business logic — just data and mapping
120
+ - Check if the base class requires mutable or immutable properties
121
+
122
+ ### Plain DTO (Fallback)
123
+
124
+ When no DTO package is available or attribute-based mapping is not suitable (e.g. for very simple
125
+ value transfer between methods), a plain readonly DTO is acceptable:
126
+
127
+ ```php
128
+ final readonly class CreateOrderDTO
129
+ {
130
+ public function __construct(
131
+ public int $customerId,
132
+ public string $description,
133
+ public int $totalInCents,
134
+ ) {}
135
+
136
+ public static function fromRequest(CreateOrderRequest $request): self
137
+ {
138
+ /** @var array{customer_id: int, description: string, total: int} $data */
139
+ $data = $request->validated();
140
+
141
+ return new self(
142
+ customerId: $data['customer_id'],
143
+ description: $data['description'],
144
+ totalInCents: $data['total'],
145
+ );
146
+ }
147
+ }
148
+ ```
149
+
150
+ #### Plain DTO Rules
151
+
152
+ - Always `final readonly class`
153
+ - Constructor property promotion
154
+ - Static factory method `fromRequest()`, `fromArray()`, etc.
155
+ - No business logic — just data
156
+
157
+ ## Value Object
158
+
159
+ Represents a domain concept with validation and equality semantics.
160
+
161
+ ### When to Use
162
+
163
+ ✅ Domain concepts: `Money`, `Email`, `DateRange`, `Coordinates`
164
+ ✅ Value needs validation on creation
165
+ ✅ Two instances with same values should be considered equal
166
+
167
+ ### Example
168
+
169
+ ```php
170
+ final readonly class Money
171
+ {
172
+ public function __construct(
173
+ public int $amountInCents,
174
+ public string $currency = 'EUR',
175
+ ) {
176
+ if ($this->amountInCents < 0) {
177
+ throw new InvalidArgumentException('Amount must not be negative');
178
+ }
179
+ }
180
+
181
+ public function add(self $other): self
182
+ {
183
+ if ($this->currency !== $other->currency) {
184
+ throw new InvalidArgumentException('Cannot add different currencies');
185
+ }
186
+
187
+ return new self(
188
+ amountInCents: Math::add($this->amountInCents, $other->amountInCents),
189
+ currency: $this->currency,
190
+ );
191
+ }
192
+ }
193
+ ```
194
+
195
+ ## When NOT to Use
196
+
197
+ ❌ Data only used in one place and structure is obvious — a simple array is fine
198
+ ❌ Wrapping a single primitive with no validation or behavior
199
+
@@ -0,0 +1,67 @@
1
+ # Event / Listener Pattern
2
+
3
+ > Decouple side effects from core logic.
4
+
5
+ ## Idea
6
+
7
+ A core process dispatches an **Event**, other parts of the system react via **Listeners**.
8
+ The core process doesn't know (or care) who listens.
9
+
10
+ ## Typical Use Cases
11
+
12
+ ✅ Notifications (email, push) after an action
13
+ ✅ Logging, audit trails
14
+ ✅ Syncing data to external systems
15
+ ✅ Cache invalidation
16
+ ✅ Triggering follow-up jobs
17
+
18
+ ## Example
19
+
20
+ ```php
21
+ // Event — immutable data container
22
+ final readonly class OrderPlaced
23
+ {
24
+ public function __construct(
25
+ public int $orderId,
26
+ public int $customerId,
27
+ ) {}
28
+ }
29
+
30
+ // Listener
31
+ final class SendOrderConfirmation
32
+ {
33
+ public function handle(OrderPlaced $event): void
34
+ {
35
+ // send email...
36
+ }
37
+ }
38
+ ```
39
+
40
+ ## Dispatching
41
+
42
+ ```php
43
+ // In a service or action
44
+ OrderPlaced::dispatch($order->getId(), $order->getCustomerId());
45
+
46
+ // Or via event helper
47
+ event(new OrderPlaced($order->getId(), $order->getCustomerId()));
48
+ ```
49
+
50
+ ## Laravel Discovery
51
+
52
+ Since Laravel 11, events and listeners are auto-discovered — no manual registration
53
+ needed. Configured in `bootstrap/app.php`.
54
+
55
+ ## Rules
56
+
57
+ - Events are `final readonly` — immutable data containers
58
+ - Pass **IDs**, not model instances (smaller payload, avoids serialization issues)
59
+ - One listener per side effect — don't cram multiple things into one listener
60
+ - Use queued listeners (`ShouldQueue`) for slow operations (emails, API calls)
61
+
62
+ ## When NOT to Use
63
+
64
+ ❌ Direct, synchronous flow where caller needs the result — just call the service directly
65
+ ❌ Only one "listener" that always runs — a direct method call is simpler and easier to follow
66
+ ❌ Everything — too many events make the application flow hard to trace
67
+
@@ -0,0 +1,53 @@
1
+ # Factory Pattern
2
+
3
+ > Encapsulate complex object creation.
4
+
5
+ ## Idea
6
+
7
+ When creating an object requires configuration, conditional logic, or multiple steps,
8
+ extract that logic into a Factory class.
9
+
10
+ ## Laravel Context
11
+
12
+ - **Model Factories** — Laravel ships with factories for test/seed data (`database/factories/`)
13
+ - **Custom Factories** — for domain objects, API clients, or composed objects
14
+
15
+ ## When to Use
16
+
17
+ ✅ Object creation involves multiple steps or configuration
18
+ ✅ Different implementations based on a type/config value
19
+ ✅ API client setup with auth, base URL, middleware
20
+
21
+ ## When NOT to Use
22
+
23
+ ❌ Simple `new MyClass()` or `MyClass::create()` — no factory needed
24
+ ❌ Laravel Model Factories already cover the use case (test data)
25
+
26
+ ## Example
27
+
28
+ ```php
29
+ final class ApiClientFactory
30
+ {
31
+ public function __construct(private ConfigRepository $config) {}
32
+
33
+ public function create(ClientSoftwareType $type): ApiClient
34
+ {
35
+ return match ($type) {
36
+ ClientSoftwareType::KS21 => new Ks21ApiClient(
37
+ baseUrl: $this->config->get('services.ks21.url'),
38
+ apiKey: $this->config->get('services.ks21.key'),
39
+ ),
40
+ ClientSoftwareType::PROBAUS => new ProBauSApiClient(
41
+ baseUrl: $this->config->get('services.probaus.url'),
42
+ ),
43
+ };
44
+ }
45
+ }
46
+ ```
47
+
48
+ ## Rules
49
+
50
+ - Factory methods should return typed interfaces, not concrete classes (when possible)
51
+ - Keep factory logic focused — don't add business logic here
52
+ - Name: `{Thing}Factory` or static `{Thing}::create()` for simple cases
53
+
@@ -0,0 +1,66 @@
1
+ # Pipeline / Middleware Pattern
2
+
3
+ > Sequential processing steps — already built into Laravel.
4
+
5
+ ## Idea
6
+
7
+ Pass data through a series of steps (pipes), where each step can transform,
8
+ validate, or filter the data. Each pipe has a single responsibility.
9
+
10
+ ## Laravel Built-in
11
+
12
+ - **HTTP Middleware** — request/response pipeline (authentication, CORS, logging)
13
+ - **Pipeline facade** — `Illuminate\Pipeline\Pipeline` for custom pipelines
14
+ - **Filter pipeline** — used in controllers for query filtering (see [controllers.md](../controllers.md))
15
+
16
+ ## Typical Use Cases
17
+
18
+ ✅ Request processing (middleware)
19
+ ✅ Import/export data transformation
20
+ ✅ Multi-step validation or enrichment
21
+ ✅ Query filter chains
22
+
23
+ ## Example: Custom Pipeline
24
+
25
+ ```php
26
+ $result = Pipeline::send($importData)
27
+ ->through([
28
+ ValidateHeaders::class,
29
+ NormalizeEncoding::class,
30
+ MapColumns::class,
31
+ FilterInvalidRows::class,
32
+ ])
33
+ ->thenReturn();
34
+ ```
35
+
36
+ Each pipe implements `handle()`:
37
+
38
+ ```php
39
+ final class NormalizeEncoding
40
+ {
41
+ public function handle(ImportData $data, Closure $next): mixed
42
+ {
43
+ $data->normalize();
44
+ return $next($data);
45
+ }
46
+ }
47
+ ```
48
+
49
+ ## Query Filter Pipeline
50
+
51
+ Already used in this project via `paginatedPipeline`:
52
+
53
+ ```php
54
+ $results = Model::query()
55
+ ->paginatedPipeline([
56
+ StringFilter::on('name')->isLike()->some(),
57
+ DateFilter::on('created_at')->all(),
58
+ OrderFilter::on(['id', 'name'])->default(['id' => 'asc']),
59
+ ]);
60
+ ```
61
+
62
+ ## When NOT to Use
63
+
64
+ ❌ Only 2 steps with trivial logic — sequential method calls are clearer
65
+ ❌ Steps have complex dependencies on each other — pipelines assume independence
66
+
@@ -0,0 +1,66 @@
1
+ # Policy Pattern
2
+
3
+ > Centralized authorization logic — built into Laravel.
4
+
5
+ ## Idea
6
+
7
+ Authorization rules belong in **Policy classes**, not scattered across controllers,
8
+ middleware, or model methods.
9
+
10
+ ## Laravel Mechanism
11
+
12
+ - One Policy per Model (or resource)
13
+ - Methods map to actions: `view`, `create`, `update`, `delete`, `restore`
14
+ - Called via `$this->authorize()` in controllers or `Gate::allows()` anywhere
15
+ - FormRequests call policies in `authorize()` method
16
+
17
+ ## Example
18
+
19
+ ```php
20
+ final class OrderPolicy
21
+ {
22
+ public function view(User $user, Order $order): bool
23
+ {
24
+ return $user->getId() === $order->getUserId();
25
+ }
26
+
27
+ public function update(User $user, Order $order): bool
28
+ {
29
+ return $user->getId() === $order->getUserId()
30
+ && $order->getStatus() !== OrderStatus::COMPLETED;
31
+ }
32
+
33
+ public function delete(User $user, Order $order): bool
34
+ {
35
+ return $user->isAdmin();
36
+ }
37
+ }
38
+ ```
39
+
40
+ ## In FormRequests
41
+
42
+ ```php
43
+ public function authorize(): bool
44
+ {
45
+ /** @var Order $order */
46
+ $order = $this->route('order');
47
+
48
+ /** @var User $user */
49
+ $user = $this->user();
50
+
51
+ return $user->can('update', $order);
52
+ }
53
+ ```
54
+
55
+ ## Rules
56
+
57
+ - One Policy per Model — `App\Policies\{Model}Policy`
58
+ - Keep policy methods simple — delegate complex checks to the model or a service
59
+ - Return `bool` — no exceptions in policies
60
+ - Laravel auto-discovers policies by convention (no manual registration needed)
61
+
62
+ ## When NOT to Use
63
+
64
+ ❌ Global rules (e.g., "must be authenticated") — use middleware instead
65
+ ❌ Business rules (e.g., "order must have items") — that's validation, not authorization
66
+
@@ -0,0 +1,122 @@
1
+ # Repository Pattern
2
+
3
+ > Only use when it solves a real problem. Eloquent already has many repository-like features built in.
4
+
5
+ ## Purpose
6
+
7
+ Repositories encapsulate **complex or reusable** database queries. They keep controllers and
8
+ services clean by hiding query details behind expressive method names.
9
+
10
+ ## Rule of Thumb
11
+
12
+ - **CRUD app** → usually no separate repository needed
13
+ - **Complex business app** → use selectively where it adds value
14
+ - **Never** create a repository automatically for every model
15
+
16
+ ## When to Use a Repository
17
+
18
+ ✅ **Multiple data sources** — DB + API + Cache behind one interface
19
+
20
+ ✅ **Complex queries** — joins, subqueries, raw expressions, aggregations:
21
+
22
+ ```php
23
+ // ✅ Good — complex query with joins, eager loading, raw ordering
24
+ class DatabasePlanningRepository
25
+ {
26
+ public function findByDateAndCrewIds(CarbonInterface $date, array $crewIds): Collection
27
+ {
28
+ return Appointment::with([
29
+ 'project' => ['manager', 'capacityPlanningItem'],
30
+ 'plannedUsers' => fn ($q) => $q->where('termin_date', $date->format('Y-m-d')),
31
+ ])
32
+ ->selectRaw("*, IF(termin_uhrzeit IS NULL OR termin_uhrzeit = '00:00:00', 1, 0) as sort_order")
33
+ ->whereDate('termin_date', $date)
34
+ ->whereIn('tree_group_id', $crewIds)
35
+ ->orderByRaw('termin_order, sort_order, termin_uhrzeit')
36
+ ->get();
37
+ }
38
+ }
39
+ ```
40
+
41
+ ✅ **Reusable queries** — same complex query needed in multiple services or controllers
42
+
43
+ ✅ **Domain-centric access** — the method name documents business intent:
44
+
45
+ ```php
46
+ $repository->findActiveEmployeesWithExpiredCertificates();
47
+ $repository->findOverdueAppointmentsByCustomer($customerId);
48
+ ```
49
+
50
+ ## When NOT to Use a Repository
51
+
52
+ ❌ **Thin CRUD wrappers** — wrapping `findById`, `create`, `update`, `delete` around
53
+ Eloquent adds a layer with zero value. Eloquent already provides all of this:
54
+
55
+ ```php
56
+ // ❌ Overengineering — don't do this
57
+ class UserRepository
58
+ {
59
+ public function findById(int $id): ?User { return User::find($id); }
60
+ public function create(array $data): User { return User::create($data); }
61
+ public function delete(int $id): void { User::destroy($id); }
62
+ }
63
+
64
+ // ✅ Just use the model directly
65
+ $user = User::find($id);
66
+ $user = User::where('email', $email)->first();
67
+ $activeUsers = User::where('is_active', true)->get();
68
+ ```
69
+
70
+ ❌ **Single-use queries** — if a query is only used in one place and is not complex,
71
+ keep it inline in the service or controller.
72
+
73
+ ## Better Alternatives for Simple Cases
74
+
75
+ Instead of a repository for every model, prefer:
76
+
77
+ - **Query Scopes** — reusable query fragments on the model itself
78
+ - **Services / Actions** — business logic with inline queries
79
+ - **Specialized query classes** — for one complex, reusable query
80
+
81
+ ## Structure
82
+
83
+ - Namespace: `App\Repositories\{Domain}\` or `App\Modules\{Module}\App\Repositories\`
84
+ - Use an **interface** (contract) when the repository is injected via DI and may need mocking:
85
+
86
+ ```php
87
+ // Contract
88
+ interface UserRepositoryContract
89
+ {
90
+ public function findByCredentials(string $username, string $password): User;
91
+ }
92
+
93
+ // Implementation
94
+ class DatabaseUserRepository implements UserRepositoryContract
95
+ {
96
+ public function findByCredentials(string $username, string $password): User
97
+ {
98
+ // complex query logic...
99
+ }
100
+ }
101
+ ```
102
+
103
+ - Bind interface → implementation in a ServiceProvider
104
+ - Do **NOT** mark repository classes `final` — they may need to be mocked in tests
105
+
106
+ ## Naming
107
+
108
+ | Pattern | Example |
109
+ |----------------------------|--------------------------------------|
110
+ | Contract (interface) | `UserRepositoryContract` |
111
+ | Implementation | `DatabaseUserRepository` |
112
+ | Module repository | `ClientSoftwareImportTemplateRepository` |
113
+
114
+ ## Rules
115
+
116
+ - Return **typed** results: `Collection<int, Model>`, `?Model`, `Model`
117
+ - Throw domain exceptions (e.g., `EntityNotFoundException`) instead of returning `null`
118
+ when the caller expects a result
119
+ - Use `@param` and `@return` DocBlocks for generic collection types
120
+ - Keep repositories focused — one repository per model/aggregate, not one giant "query bag"
121
+ - Prefer Eloquent/Query Builder over raw SQL
122
+
@@ -0,0 +1,64 @@
1
+ # Service Layer / Action Pattern
2
+
3
+ > The most valuable pattern in Laravel projects.
4
+
5
+ ## Idea
6
+
7
+ Controllers stay thin and delegate business logic to dedicated classes.
8
+ These classes have a single responsibility and an expressive name.
9
+
10
+ ## Naming
11
+
12
+ - **Action** — single operation: `CreateOrderAction`, `PublishArticle`
13
+ - **Service** — broader domain scope: `PaymentService`, `ImportService`
14
+
15
+ Use Actions for focused, one-off operations. Use Services when grouping related operations.
16
+
17
+ ## When to Use
18
+
19
+ ✅ Logic is more than "validate + save"
20
+ ✅ Logic is reused across controllers, commands, observers or jobs
21
+ ✅ Logic involves multiple models, external APIs, or side effects
22
+ ✅ You want to test business logic independently from HTTP layer
23
+
24
+ ## When NOT to Use
25
+
26
+ ❌ Simple CRUD — `$model->update($request->validated())` can stay in the controller
27
+ ❌ One-liner logic — don't create a class for a single Eloquent call
28
+
29
+ ## Example
30
+
31
+ ```php
32
+ final class CreateOrderAction
33
+ {
34
+ public function __construct(
35
+ private PaymentService $paymentService,
36
+ private NotificationService $notificationService,
37
+ ) {}
38
+
39
+ public function execute(CreateOrderDTO $data): Order
40
+ {
41
+ $order = Order::create($data->toArray());
42
+
43
+ $this->paymentService->charge($order);
44
+ $this->notificationService->sendOrderConfirmation($order);
45
+
46
+ return $order;
47
+ }
48
+ }
49
+ ```
50
+
51
+ ## In Controllers
52
+
53
+ Inject via constructor or method injection:
54
+
55
+ ```php
56
+ public function __invoke(
57
+ CreateOrderRequest $request,
58
+ CreateOrderAction $action,
59
+ ): OrderResource {
60
+ $order = $action->execute(CreateOrderDTO::fromRequest($request));
61
+ return OrderResource::make($order);
62
+ }
63
+ ```
64
+
@@ -0,0 +1,69 @@
1
+ # Strategy Pattern
2
+
3
+ > Choose the right algorithm at runtime — instead of if/else chains.
4
+
5
+ ## Idea
6
+
7
+ Define a family of interchangeable algorithms behind an interface.
8
+ Select the implementation based on context (config, user input, enum value).
9
+
10
+ ## Typical Use Cases
11
+
12
+ - Payment providers (Stripe, PayPal, Invoice)
13
+ - Export formats (CSV, PDF, Excel)
14
+ - Pricing / discount rules
15
+ - Notification channels (Email, SMS, Push)
16
+ - Import parsers (JSON, XML, CSV)
17
+
18
+ ## Example
19
+
20
+ ```php
21
+ interface DiscountStrategy
22
+ {
23
+ public function calculate(int $subtotalInCents): int;
24
+ }
25
+
26
+ final class PercentageDiscount implements DiscountStrategy
27
+ {
28
+ public function __construct(private int $percent) {}
29
+
30
+ public function calculate(int $subtotalInCents): int
31
+ {
32
+ return Math::divide(Math::multiply($subtotalInCents, $this->percent), 100);
33
+ }
34
+ }
35
+
36
+ final class FixedDiscount implements DiscountStrategy
37
+ {
38
+ public function __construct(private int $amountInCents) {}
39
+
40
+ public function calculate(int $subtotalInCents): int
41
+ {
42
+ return min($this->amountInCents, $subtotalInCents);
43
+ }
44
+ }
45
+ ```
46
+
47
+ ## Selection via Enum
48
+
49
+ ```php
50
+ enum DiscountType: string
51
+ {
52
+ case PERCENTAGE = 'percentage';
53
+ case FIXED = 'fixed';
54
+
55
+ public function strategy(int $value): DiscountStrategy
56
+ {
57
+ return match ($this) {
58
+ self::PERCENTAGE => new PercentageDiscount($value),
59
+ self::FIXED => new FixedDiscount($value),
60
+ };
61
+ }
62
+ }
63
+ ```
64
+
65
+ ## When NOT to Use
66
+
67
+ ❌ Only two cases with trivial logic — a simple `match` or ternary is enough
68
+ ❌ The "strategies" share no common interface or behavior
69
+