@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,217 @@
1
+ ---
2
+ name: terragrunt
3
+ description: "Use when working with Terragrunt — DRY multi-env configs, module dependencies, remote state orchestration — even when the user just says 'deploy this to staging and prod' without naming Terragrunt."
4
+ source: package
5
+ ---
6
+
7
+ # terragrunt
8
+
9
+ ## When to use
10
+
11
+ Use this skill when working with Terragrunt configurations (`.hcl` files), managing environment-specific settings, or orchestrating multi-module deployments.
12
+
13
+ ## Procedure: Write Terragrunt config
14
+
15
+ 1. Read the `root.hcl` in the target environment (`environments/pro/root.hcl` or `environments/sta/root.hcl`).
16
+ 2. Check existing `terragrunt.hcl` files in sibling directories for patterns.
17
+ 3. Read the target module's `variables.tf` to understand required inputs.
18
+
19
+ ## Project structure
20
+
21
+ ```
22
+ environments/
23
+ ├── pro/
24
+ │ ├── root.hcl # Root config (backend, providers)
25
+ │ ├── core/
26
+ │ │ ├── terragrunt.hcl # Core module config
27
+ │ │ └── {service}.yaml # Module-specific variables
28
+ │ ├── {service}/
29
+ │ │ ├── terragrunt.hcl # Service module config
30
+ │ │ └── {service}.yaml # Service-specific variables
31
+ │ └── ...
32
+ └── sta/
33
+ ├── root.hcl
34
+ └── ...
35
+ ```
36
+
37
+ ## Root configuration (`root.hcl`)
38
+
39
+ The root HCL defines shared settings for all modules in an environment:
40
+
41
+ ### Environment variables
42
+
43
+ ```hcl
44
+ locals {
45
+ env_files = merge(
46
+ yamldecode(file(".env.yaml")), # Base env vars
47
+ try(yamldecode(file(".env.local.yaml")), {}) # Local overrides
48
+ )
49
+ env = { for k, v in local.env_files : k => get_env(k, v) }
50
+ }
51
+ ```
52
+
53
+ - `.env.yaml` — committed, shared environment config
54
+ - `.env.local.yaml` — gitignored, local overrides (AWS profiles, etc.)
55
+ - Real environment variables take precedence over file values.
56
+
57
+ ### Remote state
58
+
59
+ ```hcl
60
+ remote_state {
61
+ backend = "s3"
62
+ config = {
63
+ bucket = "${local.env.aws_account_name}-terraform-remote-state"
64
+ key = "${path_relative_to_include()}/terraform.tfstate"
65
+ dynamodb_table = "${local.env.aws_account_name}-terraform-remote-state"
66
+ profile = local.env.aws_profile
67
+ region = local.env.aws_region
68
+ encrypt = true
69
+ }
70
+ }
71
+ ```
72
+
73
+ ### Provider generation
74
+
75
+ Providers are auto-generated by Terragrunt (not manually written):
76
+
77
+ ```hcl
78
+ generate "provider" {
79
+ path = "provider-aws.tf"
80
+ if_exists = "overwrite_terragrunt"
81
+ contents = <<EOF
82
+ provider "aws" {
83
+ allowed_account_ids = ["${local.env.aws_account_id}"]
84
+ profile = "${local.env.aws_profile}"
85
+ region = "${local.env.aws_region}"
86
+ }
87
+ EOF
88
+ }
89
+ ```
90
+
91
+ ### Terraform binary
92
+
93
+ ```hcl
94
+ terraform_binary = "terraform" # Explicitly NOT OpenTofu
95
+ ```
96
+
97
+ ## Module configuration (`terragrunt.hcl`)
98
+
99
+ Each module directory contains a `terragrunt.hcl` that:
100
+
101
+ 1. **Loads module-specific variables** from a YAML file
102
+ 2. **Includes the root config** for backend and providers
103
+ 3. **Points to the Terraform module source**
104
+ 4. **Declares dependencies** on other modules
105
+ 5. **Passes inputs** by merging dependency outputs with local variables
106
+
107
+ ### Example pattern
108
+
109
+ ```hcl
110
+ locals {
111
+ project = yamldecode(file("{service}.yaml"))
112
+ }
113
+
114
+ include {
115
+ path = find_in_parent_folders("root.hcl")
116
+ expose = true
117
+ }
118
+
119
+ terraform {
120
+ source = "../../..//modules/{service}"
121
+ }
122
+
123
+ dependency "core" {
124
+ config_path = "../core"
125
+ }
126
+
127
+ inputs = merge(
128
+ dependency.core.outputs,
129
+ local.project
130
+ )
131
+ ```
132
+
133
+ ## Conventions
134
+
135
+ ### Variable files
136
+
137
+ - Use **YAML files** (not HCL) for module-specific variables.
138
+ - Name them after the module (e.g., `my-service.yaml`).
139
+ - Keep them in the same directory as `terragrunt.hcl`.
140
+
141
+ ### Dependencies
142
+
143
+ - Use `dependency` blocks to reference other modules.
144
+ - Core module outputs (VPC, DNS zones, etc.) are passed via `dependency.core.outputs`.
145
+ - Merge dependency outputs with local variables in `inputs`.
146
+
147
+ ### Additional providers
148
+
149
+ Some modules need extra providers (e.g., New Relic). Generate them in the module's `terragrunt.hcl`:
150
+
151
+ ```hcl
152
+ generate "provider_newrelic" {
153
+ path = "provider-newrelic.tf"
154
+ if_exists = "overwrite_terragrunt"
155
+ contents = <<EOF
156
+ provider "newrelic" {
157
+ account_id = "${include.locals.env.newrelic_account_id}"
158
+ api_key = "${get_env("TF_VAR_newrelic_api_key", include.locals.env.newrelic_api_key)}"
159
+ }
160
+ EOF
161
+ }
162
+ ```
163
+
164
+ ## Development tools
165
+
166
+ The project uses **devbox** for tool management:
167
+
168
+ ```json
169
+ {
170
+ "packages": ["terragrunt", "awscli2", "terraform@latest"]
171
+ }
172
+ ```
173
+
174
+ ### Taskfile commands
175
+
176
+ ```bash
177
+ task versions # Show awscli, Terraform, Terragrunt versions
178
+ task check:awscli # Verify AWS CLI is configured
179
+ task cache:clear # Clear .terraform and .terragrunt-cache dirs
180
+ ```
181
+
182
+ ### Quick commands (devbox scripts)
183
+
184
+ ```bash
185
+ devbox run i # terragrunt init
186
+ devbox run p # terragrunt plan
187
+ devbox run a # terragrunt apply
188
+ devbox run d # terragrunt destroy
189
+ ```
190
+
191
+
192
+ ## Output format
193
+
194
+ 1. Terragrunt HCL files with DRY environment configuration
195
+ 2. Dependency graph and remote state references
196
+
197
+ ## Auto-trigger keywords
198
+
199
+ - Terragrunt
200
+ - multi-environment
201
+ - DRY config
202
+ - remote state
203
+
204
+ ## Gotcha
205
+
206
+ - Terragrunt `dependency` blocks create implicit ordering — circular dependencies cause cryptic errors.
207
+ - Don't duplicate Terraform variables in terragrunt.hcl — use `inputs` to pass them through.
208
+ - The model tends to hardcode values that should come from `include` blocks — use DRY patterns.
209
+
210
+ ## Do NOT
211
+
212
+ - Do NOT switch to OpenTofu — the project explicitly uses `terraform_binary = "terraform"`.
213
+ - Do NOT hardcode AWS credentials — use AWS profiles from `.env.yaml`.
214
+ - Do NOT commit `.env.local.yaml` — it contains local AWS profile overrides.
215
+ - Do NOT modify `root.hcl` without understanding the impact on all modules.
216
+ - Do NOT remove `dependency` blocks — they ensure correct apply order.
217
+ - Do NOT use `terraform` commands directly — always use `terragrunt` as the wrapper.
@@ -0,0 +1,252 @@
1
+ ---
2
+ name: test-driven-development
3
+ description: "Use when implementing a feature, fixing a bug, or refactoring — write a failing test first, then the code — even if the user just says 'add this function' or 'fix this bug'."
4
+ source: package
5
+ ---
6
+
7
+ # test-driven-development
8
+
9
+ ## When to use
10
+
11
+ * Adding a new function, method, or behavior
12
+ * Fixing a bug (bug needs a regression test before the fix)
13
+ * Refactoring a unit whose current behavior is unclear
14
+ * Any task where expected behavior can be expressed as an assertion
15
+
16
+ Do NOT use when:
17
+
18
+ * Throwaway prototype or spike code explicitly marked as exploration
19
+ * Boilerplate generation (migrations, config, scaffolding)
20
+ * Pure documentation (`.md`, `AGENTS.md`, README)
21
+ * Working inside this `agent-config` package on skill/rule markdown
22
+
23
+ ## Goal
24
+
25
+ * Drive implementation from a verified-failing test, not the agent's
26
+ belief that code "should work".
27
+ * Catch edge cases **before** production bugs.
28
+ * Leave every change with a regression test running in CI.
29
+
30
+ ## The core discipline
31
+
32
+ ```
33
+ 1. Write ONE failing test that describes the desired behavior.
34
+ 2. Run it. WATCH it fail for the right reason.
35
+ 3. Write the MINIMUM production code to make it pass.
36
+ 4. Run it again. Watch it pass.
37
+ 5. Clean up (rename, deduplicate) while keeping the test green.
38
+ ```
39
+
40
+ If step 2 is skipped, the test is not trusted — a test that has never
41
+ failed proves nothing.
42
+
43
+ ## Procedure
44
+
45
+ ### 1. Identify the behavior to test
46
+
47
+ State in one sentence: *"When X happens, the system should do Y."*
48
+
49
+ Cannot state in one sentence? Scope too big — split into multiple tests,
50
+ one sentence each.
51
+
52
+ ### 2. Write the failing test first
53
+
54
+ Smallest test expressing step-1 sentence.
55
+
56
+ * One assertion per behavior (multiple assertions OK only when describing
57
+ the same single behavior).
58
+ * Real code paths, not mocks — mock only at I/O boundaries (HTTP, DB, time).
59
+ * Descriptive name: `it_rejects_empty_email`, not `test_email_1`.
60
+
61
+ ### 3. Run the test and watch it fail
62
+
63
+ Execute the single test (targeted, not full suite):
64
+
65
+ ```bash
66
+ # PHP/Pest
67
+ ./vendor/bin/pest --filter=it_rejects_empty_email
68
+
69
+ # JS/Vitest
70
+ npx vitest run --testNamePattern "rejects empty email"
71
+ ```
72
+
73
+ Required observations **before proceeding**:
74
+
75
+ * Test **fails** (not errors).
76
+ * Failure message matches expectation (missing behavior, not typo).
77
+ * Passes immediately → it does not test what you think. Fix the test,
78
+ do not start writing production code.
79
+
80
+ ### 4. Write minimum code to pass
81
+
82
+ **Just enough** production code to make the test green. No extra
83
+ features, no unrelated refactoring, no "while I'm here" cleanups.
84
+
85
+ Urge to add a parameter, edge case, or helper not covered by current
86
+ test → stop. Belongs in the next RED step, not this GREEN step.
87
+
88
+ ### 5. Run again and watch it pass
89
+
90
+ Re-run the same targeted command. Required:
91
+
92
+ * New test passes.
93
+ * No previously green tests turned red.
94
+ * Output clean (no new warnings, deprecations, or noise).
95
+
96
+ ### 6. Refactor (only if green)
97
+
98
+ With all tests green, you may:
99
+
100
+ * Rename variables, methods, files
101
+ * Extract duplication into helpers
102
+ * Tighten types
103
+
104
+ Do **not** add new behavior during refactor — needs its own failing test
105
+ first. Re-run tests after refactor to confirm still-green.
106
+
107
+ ### 7. Repeat for the next behavior
108
+
109
+ Back to step 1 with the next single-sentence behavior.
110
+
111
+ ## Output format
112
+
113
+ 1. Failing test (file + test name) with captured failure output
114
+ 2. Minimum-code diff that makes it pass
115
+ 3. Captured green-run output
116
+ 4. Refactor diff (optional)
117
+
118
+ ## Anti-rationalizations table
119
+
120
+ The urge to skip TDD is strongest when TDD matters most. Name the
121
+ rationalization and reject it:
122
+
123
+ | Thought | Reality |
124
+ |---|---|
125
+ | "Too simple to need a test" | Simple code still breaks. A test costs less than one debug cycle. |
126
+ | "I'll add the test after the code works" | A test written after code passes on first run — never failed. Proves nothing. |
127
+ | "I already ran it manually" | Manual runs not repeatable. Next edit breaks it silently. |
128
+ | "Deleting code I just wrote is wasteful" | Sunk cost. Cheap path: delete, write test, reimplement minimally. |
129
+ | "I'll keep the code as reference while I write the test" | You will adapt it. That is test-after-the-fact with extra steps. Delete it. |
130
+ | "I just need to explore the API first" | Spike on a throwaway branch. Then delete and restart with TDD. |
131
+ | "The test is too hard to write" | Signals a design problem in the code, not the test. Listen. |
132
+ | "This bug is urgent, no time for a test" | The test **is** the fastest path to a verified fix. Guessing takes longer. |
133
+
134
+
135
+ ## Examples
136
+
137
+ ### PHP / Pest
138
+
139
+ ```php
140
+ // tests/Unit/EmailValidatorTest.php — RED
141
+ it('rejects empty email', function () {
142
+ $result = (new EmailValidator())->validate('');
143
+ expect($result->isValid())->toBeFalse();
144
+ expect($result->error())->toBe('Email required');
145
+ });
146
+ ```
147
+
148
+ Run: `./vendor/bin/pest --filter='rejects empty email'` → fails
149
+ (EmailValidator does not exist yet, or returns isValid()=true).
150
+
151
+ ```php
152
+ // app/Validators/EmailValidator.php — GREEN (minimum)
153
+ final class EmailValidator
154
+ {
155
+ public function validate(string $email): EmailResult
156
+ {
157
+ if (trim($email) === '') {
158
+ return EmailResult::invalid('Email required');
159
+ }
160
+ return EmailResult::valid();
161
+ }
162
+ }
163
+ ```
164
+
165
+ Run filter again → passes. No additional rules (format, MX, length)
166
+ until a next failing test drives them.
167
+
168
+ ### JS / Vitest
169
+
170
+ ```ts
171
+ // src/retry.test.ts — RED
172
+ import { retry } from './retry';
173
+
174
+ it('retries a failing operation up to 3 times', async () => {
175
+ let attempts = 0;
176
+ const op = async () => {
177
+ attempts += 1;
178
+ if (attempts < 3) throw new Error('transient');
179
+ return 'ok';
180
+ };
181
+ await expect(retry(op)).resolves.toBe('ok');
182
+ expect(attempts).toBe(3);
183
+ });
184
+ ```
185
+
186
+ Run: `npx vitest run --testNamePattern "retries a failing"` → fails
187
+ (`retry` undefined).
188
+
189
+ ```ts
190
+ // src/retry.ts — GREEN (minimum)
191
+ export async function retry<T>(op: () => Promise<T>): Promise<T> {
192
+ let lastError: unknown;
193
+ for (let i = 0; i < 3; i += 1) {
194
+ try { return await op(); } catch (e) { lastError = e; }
195
+ }
196
+ throw lastError;
197
+ }
198
+ ```
199
+
200
+ Run again → passes. Configurable attempt count, backoff, jitter all
201
+ wait for their own failing tests.
202
+
203
+ ## Gotchas
204
+
205
+ * Running the full suite instead of a filtered test hides the RED→GREEN
206
+ signal in noise. Always target first.
207
+ * A test that passes on the very first run is not TDD — written against
208
+ existing code.
209
+ * `expect()` with three or four assertions on unrelated fields describes
210
+ multiple behaviors. Split them.
211
+ * Snapshot tests invert the discipline — they generate the expected
212
+ value from the code. Only use where human-readable output is the
213
+ contract (CLI, SQL strings).
214
+ * Mocking the thing under test (instead of its I/O) tests the mock.
215
+
216
+ ## Do NOT
217
+
218
+ * Do NOT write or modify production code before the failing test exists
219
+ and has been observed to fail
220
+ * Do NOT accept a test that never failed as evidence the code works
221
+ * Do NOT bundle refactors into the GREEN step
222
+ * Do NOT silence a flaky test — diagnose or delete it
223
+ * Do NOT skip the targeted RED-run because "I know it fails"
224
+
225
+ ## Anti-patterns
226
+
227
+ * `it('works')` — no behavior described
228
+ * One test covering "and/and/and" — split per behavior
229
+ * Test reaching into private state instead of observable behavior
230
+ * Test duplicating the production code's algorithm (tautology)
231
+
232
+ ## When to hand over to another skill
233
+
234
+ * Quality tools, PHPStan, ECS, Rector → [`quality-tools`](../quality-tools/SKILL.md)
235
+ * Full Pest conventions, Laravel testing helpers → [`pest-testing`](../pest-testing/SKILL.md)
236
+ * Running tests inside Docker → [`tests-execute`](../tests-execute/SKILL.md)
237
+ * Investigating why a test fails for non-obvious reasons →
238
+ [`systematic-debugging`](../systematic-debugging/SKILL.md)
239
+
240
+ ## Validation checklist
241
+
242
+ Before marking TDD work complete:
243
+
244
+ * [ ] Every new behavior has a test
245
+ * [ ] Each test was observed to fail first, with a matching failure message
246
+ * [ ] Minimum code was written to turn each RED into GREEN
247
+ * [ ] All targeted tests pass
248
+ * [ ] No adjacent test turned red
249
+ * [ ] Output clean (no new warnings or deprecations)
250
+
251
+ See also [`developer-like-execution`](../developer-like-execution/SKILL.md)
252
+ for the broader think → analyze → verify loop this skill plugs into.
@@ -0,0 +1,172 @@
1
+ ---
2
+ name: test-performance
3
+ description: "Use when optimizing test suite performance — database setup, seeder optimization, parallel testing, CI pipeline efficiency, or RefreshDatabase alternatives."
4
+ source: package
5
+ ---
6
+
7
+ # test-performance
8
+
9
+ ## When to use
10
+
11
+ Use this skill when:
12
+
13
+ - Tests are running too slowly (locally or in CI)
14
+ - Database setup/teardown is a bottleneck
15
+ - Parallel testing needs optimization
16
+ - Seeders need performance analysis
17
+ - CI pipeline test jobs need to be faster
18
+ - Investigating flaky tests caused by database state
19
+
20
+ ## Procedure: Analyze test performance
21
+
22
+ ### 1. Measure baseline
23
+
24
+ Before optimizing, always measure:
25
+
26
+ ```bash
27
+ # Count tests per suite
28
+ find tests/ app/Modules/*/Tests/ -name "*.php" | xargs grep -l "it(" | wc -l
29
+
30
+ # Count by suite type
31
+ grep -rh "it(" tests/Unit/ app/Modules/*/Tests/Unit/ --include="*.php" | wc -l
32
+ grep -rh "it(" tests/Component/ app/Modules/*/Tests/Component/ --include="*.php" | wc -l
33
+ grep -rh "it(" tests/Integration/ app/Modules/*/Tests/Integration/ --include="*.php" | wc -l
34
+
35
+ # Count migrations
36
+ ls database/migrations/*.php | wc -l
37
+
38
+ # Count seeders
39
+ find database/seeders database/seeder-data -name "*.php" -path "*/data/*" | wc -l
40
+ ```
41
+
42
+ ### 2. Identify bottlenecks
43
+
44
+ The typical test lifecycle is:
45
+
46
+ ```
47
+ Process Start → Migrate → Seed → [Test → Rollback] × N → Process End
48
+ ↑ expensive (once per worker)
49
+ ```
50
+
51
+ Check these areas in order of typical impact:
52
+
53
+ | Area | What to check | Typical impact |
54
+ |------|--------------|---------------|
55
+ | **Migration count** | How many CREATE TABLE statements? | High if >20 |
56
+ | **Schema dump** | Is `database/schema/` used? | High if missing |
57
+ | **Seeder INSERT method** | Individual `save()` vs bulk insert? | Medium |
58
+ | **Truncation** | Per-seeder truncate vs centralized? | Low (but causes correctness issues) |
59
+ | **Connection discovery** | Dynamic `getPdo()` probing? | Low |
60
+ | **Parallel worker setup** | Does each worker re-migrate? | High |
61
+
62
+ ### 3. Optimization strategies (ordered by ROI)
63
+
64
+ #### A. Schema Dump (highest ROI)
65
+
66
+ Laravel's `schema:dump` consolidates all migrations into one SQL file.
67
+ Instead of running N individual CREATE TABLE migrations, it loads one SQL dump.
68
+
69
+ ```bash
70
+ php artisan schema:dump --database=api_database
71
+ # Generates database/schema/api_database-schema.sql
72
+ ```
73
+
74
+ **Savings:** 58 migrations → 1 SQL load = ~10-25s per worker.
75
+
76
+ #### B. Template DB Cloning (high ROI for parallel tests)
77
+
78
+ Instead of each parallel worker running migrate+seed independently:
79
+ 1. Prepare ONE template database (migrate + seed)
80
+ 2. Clone template for each worker via mysqldump
81
+
82
+ ```bash
83
+ # Prepare template
84
+ php artisan migrate:fresh --database=template_db
85
+ php artisan db:seed --database=template_db
86
+
87
+ # Clone per worker
88
+ mysqldump template_db | mysql worker_db_test_1
89
+ ```
90
+
91
+ **Savings:** Eliminate per-worker migrate+seed entirely.
92
+
93
+ #### C. Skip Migrate+Seed Flag (high ROI for local dev)
94
+
95
+ Add a config flag to skip database setup when DB is already prepared:
96
+
97
+ ```php
98
+ // config/testing.php
99
+ 'skip_migrate_seed' => EnvHelper::boolean('TESTING_SKIP_MIGRATE_SEED', false),
100
+ ```
101
+
102
+ Developer workflow: `make migrate-testing` once, then `make test-quick` repeatedly.
103
+
104
+ #### D. Bulk Inserts in Seeders (medium ROI)
105
+
106
+ Replace individual `$model->save()` with bulk insert:
107
+
108
+ ```php
109
+ // Before: N INSERT statements
110
+ foreach ($data as $row) {
111
+ $model = new MyModel($row);
112
+ $model->save();
113
+ }
114
+
115
+ // After: 1 INSERT statement
116
+ MyModel::insert($data);
117
+ $models = MyModel::whereIn('id', $ids)->get();
118
+ ```
119
+
120
+ #### E. Centralize Truncation (correctness fix)
121
+
122
+ Per-seeder truncation is redundant after `migrate:fresh` and causes:
123
+ - Non-deterministic ordering (lazy init triggers truncate)
124
+ - Ghost data bugs (locally passes, CI fails)
125
+
126
+ Make truncation configurable, default off:
127
+
128
+ ```php
129
+ // config/testing.php
130
+ 'seed_truncate' => EnvHelper::boolean('DB_SEED_TRUNCATE', false),
131
+ ```
132
+
133
+ #### F. Static Connection Discovery (cleanup)
134
+
135
+ Replace dynamic `getPdo()` probing with explicit config:
136
+
137
+ ```php
138
+ // config/testing.php
139
+ 'connections_to_transact' => ['api_database', 'customer_database'],
140
+ ```
141
+
142
+ ### 4. CI-specific optimizations
143
+
144
+ - **MariaDB tmpfs:** Mount data dir on RAM disk for zero I/O latency
145
+ - **Shared DB prep:** One CI job prepares DB, test jobs clone from it
146
+ - **Cache test DBs:** Skip re-migration if migration files haven't changed
147
+ - **Separate suites:** Run no-DB tests (Unit) on cheaper runners
148
+
149
+ ## Related project docs
150
+
151
+ - `agents/roadmaps/test-performance-refactor.md` — active roadmap for this project
152
+ - `agents/docs/seeders.md` — seeder conventions (if exists)
153
+
154
+ ## Output format
155
+
156
+ 1. Optimized test configuration or seeder with timing comparison
157
+ 2. Parallelization or caching improvements applied
158
+
159
+ ## Gotcha
160
+
161
+ - Don't use RefreshDatabase when DatabaseTransactions suffices — full refresh is 10x slower.
162
+ - The model forgets that parallel tests share the database — use unique identifiers in test data.
163
+ - Seeder optimization has the highest ROI — a 2s seeder running 100 times = 200s wasted.
164
+ - Don't add indexes to test databases just for test performance — the real fix is better test design.
165
+
166
+
167
+ ## Do NOT
168
+
169
+ - Do NOT use RefreshDatabase when DatabaseTransactions works — 10x slower.
170
+ - Do NOT run full test suite on every code change — use `--filter`.
171
+ - Do NOT add test-only indexes — fix test design instead.
172
+ - Do NOT disable parallel testing to "fix" flaky tests — fix the root cause.