@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,153 @@
1
+ # readme-size-and-splitting-guidelines
2
+
3
+ ## Purpose
4
+
5
+ Keep READMEs scannable as repositories grow. A README is an **entry
6
+ point**, not a reference manual. Once it stops working as entry point,
7
+ split — don't scroll.
8
+
9
+ Referenced by `readme-writing`, `readme-writing-package`, `readme-reviewer`.
10
+
11
+ ---
12
+
13
+ ## Size thresholds
14
+
15
+ | Lines | State | Action |
16
+ |---|---|---|
17
+ | **< 150** | Healthy | No splitting needed |
18
+ | **150–300** | Busy | Add a Table of Contents; review for padding |
19
+ | **300–500** | Overloaded | Split deep content to `/docs/` or `references/` |
20
+ | **> 500** | Broken | Hard split required; README has stopped being an entry point |
21
+
22
+ Lines, not bytes — tables, code blocks, and badges inflate bytes but stay
23
+ scannable. The real signal is: **can a new reader reach install/usage
24
+ within the first screen, then navigate intentionally from there?**
25
+
26
+ ---
27
+
28
+ ## When to split
29
+
30
+ Hard triggers — split immediately:
31
+
32
+ - **More than 5 install variants** (platforms, package managers, tools) →
33
+ move install matrix to a dedicated `docs/installation.md` or a table with
34
+ deep links
35
+ - **More than 3 framework adapters** → each adapter gets its own doc
36
+ - **Architecture or design rationale > 30 lines** → `docs/architecture.md`
37
+ - **API reference > 50 lines** → `docs/api.md` or auto-generated reference
38
+ - **Multiple audiences with different needs** → audience-specific docs
39
+ (`docs/consumers.md`, `docs/contributors.md`)
40
+
41
+ Soft triggers — review and probably split:
42
+
43
+ - A section needs its own Table of Contents
44
+ - Reader scrolls past three screens to reach "how do I use it"
45
+ - More than one code block per section explaining variations of the same
46
+ thing (indicates reference material, not onboarding)
47
+
48
+ ---
49
+
50
+ ## Splitting strategies
51
+
52
+ ### Strategy 1 — Reference-split architecture (recommended for skills, packages)
53
+
54
+ ```
55
+ README.md ← entry: what, why, install, minimal usage
56
+ docs/
57
+ installation.md ← full install matrix, post-install steps
58
+ usage.md ← extended examples, common patterns
59
+ architecture.md ← internal design, decisions
60
+ api.md ← full API reference
61
+ ```
62
+
63
+ README stays < 200 lines. Each `/docs/` file is a self-contained chapter.
64
+
65
+ ### Strategy 2 — Deep-link tables for multi-platform repos
66
+
67
+ Supporting many platforms or tool integrations: single table with deep
68
+ links beats inline blocks:
69
+
70
+ ```markdown
71
+ | Tool | Install | Docs |
72
+ |---------|------------------------|-------------------------|
73
+ | Cursor | `./install.sh cursor` | [docs/cursor.md](...) |
74
+ | Aider | `./install.sh aider` | [docs/aider.md](...) |
75
+ ```
76
+
77
+ Pattern: 1 row per platform, actual how-to in the linked doc.
78
+
79
+ ### Strategy 3 — Collapsible sections (`<details>`)
80
+
81
+ Content occasionally needed but crowding the scan path — long install
82
+ options, platform-specific quirks, troubleshooting trees:
83
+
84
+ ```markdown
85
+ <details>
86
+ <summary>Troubleshooting: Docker on Apple Silicon</summary>
87
+
88
+ Content here — full detail, not shown by default.
89
+
90
+ </details>
91
+ ```
92
+
93
+ Use sparingly. Collapsed content is still in the file; it defers visual
94
+ cost only. Not a substitute for true splitting when content > 30 lines.
95
+
96
+ ---
97
+
98
+ ## Table of Contents heuristic
99
+
100
+ Add a ToC when:
101
+
102
+ - README > 150 lines, OR
103
+ - More than 6 top-level (`##`) sections, OR
104
+ - Reader would need to scroll to find a known section
105
+
106
+ Place the ToC **after** the one-line summary and **before** the first
107
+ substantive section (usually install or quickstart). Don't add a ToC to
108
+ small READMEs — becomes visual noise.
109
+
110
+ ---
111
+
112
+ ## Multi-audience repos
113
+
114
+ A single README cannot serve "consumers of a package" and "contributors
115
+ to a package" equally. Choose one primary audience for the README,
116
+ deep-link the other:
117
+
118
+ - **Package repo** → consumers primary; contributors go to
119
+ `CONTRIBUTING.md` or `docs/development.md`
120
+ - **Application repo** → contributors/team primary; end users (if any)
121
+ go to `docs/user-guide.md`
122
+
123
+ README must declare its audience within the first screen. Readers in the
124
+ other audience must find their link within the first screen too.
125
+
126
+ ---
127
+
128
+ ## Anti-patterns — do not split this way
129
+
130
+ - **Splitting by accident** — moving content out "because the README is long"
131
+ without a navigation story. Readers get lost.
132
+ - **Splitting and duplicating** — same content in README and `/docs/`.
133
+ They drift apart. Pick one home.
134
+ - **Deep-link-only README** — README that is just a table of contents
135
+ linking out. Reader arriving cold must still learn what/why/how-install
136
+ without clicking.
137
+ - **Premature splitting** — `docs/` scaffolding for a 50-line README.
138
+ Overhead not worth it; come back at 150 lines.
139
+ - **Hiding critical content in `<details>`** — install, first example, and
140
+ requirements are **never** collapsed.
141
+
142
+ ---
143
+
144
+ ## Validation checklist
145
+
146
+ - [ ] First screen answers what / why / install
147
+ - [ ] Size below "overloaded" threshold, or splitting is in place
148
+ - [ ] ToC present if > 150 lines or > 6 top-level sections
149
+ - [ ] No duplication between README and `/docs/`
150
+ - [ ] `<details>` used only for secondary, bulky content
151
+ - [ ] Multi-platform install uses a table, not 10 sequential install blocks
152
+ - [ ] Each `/docs/` file is self-contained and linked from README
153
+ - [ ] Audience explicit; other audience has a visible deep-link
@@ -0,0 +1,363 @@
1
+ # Playwright E2E Guidelines
2
+
3
+ > Best practices for writing end-to-end tests with Playwright.
4
+ > Applies to all projects using Playwright (API, web, or hybrid).
5
+
6
+ **Related Skills:** `playwright-testing`, `pest-testing`
7
+ **Related Guidelines:** [php.md](../php/general.md)
8
+
9
+ ## Project Structure
10
+
11
+ ```
12
+ tests/
13
+ e2e/
14
+ fixtures/ # Custom fixtures (auth, data, etc.)
15
+ pages/ # Page Object Models
16
+ specs/ # Test files grouped by feature
17
+ auth/
18
+ login.spec.ts
19
+ logout.spec.ts
20
+ dashboard/
21
+ overview.spec.ts
22
+ helpers/ # Shared utilities (API helpers, test data)
23
+ playwright.config.ts # Root config
24
+ ```
25
+
26
+ - Group specs by **feature area**, not by page.
27
+ - One spec file per user workflow or feature.
28
+ - Keep Page Objects in `pages/`, fixtures in `fixtures/`.
29
+
30
+ ## Locator Strategy (Priority Order)
31
+
32
+ | Priority | Locator | Example | When |
33
+ |---|---|---|---|
34
+ | 1 | **Role** | `getByRole('button', { name: 'Save' })` | Default — most accessible and resilient |
35
+ | 2 | **Label** | `getByLabel('Email')` | Form inputs with labels |
36
+ | 3 | **Placeholder** | `getByPlaceholder('Search...')` | Inputs without visible labels |
37
+ | 4 | **Text** | `getByText('Welcome back')` | Static visible content |
38
+ | 5 | **Test ID** | `getByTestId('submit-btn')` | When no semantic locator works |
39
+ | 6 | **CSS/XPath** | `page.locator('.class')` | **Avoid** — brittle, breaks on UI changes |
40
+
41
+ ### Rules
42
+
43
+ - **Always prefer semantic locators** (`getByRole`, `getByLabel`) over CSS.
44
+ - Use `data-testid` as a stable fallback — add it to the component, not the test.
45
+ - Chain and filter locators to narrow scope: `page.getByRole('listitem').filter({ hasText: 'Product' })`.
46
+ - Never use auto-generated class names or dynamic IDs as selectors.
47
+
48
+ ## Assertions
49
+
50
+ ### Always use web-first assertions
51
+
52
+ ```ts
53
+ // ✅ Auto-retrying — waits until condition is met
54
+ await expect(page.getByText('Success')).toBeVisible()
55
+ await expect(page.getByRole('list')).toHaveCount(5)
56
+ await expect(page).toHaveURL('/dashboard')
57
+
58
+ // ❌ Non-retrying — flaky
59
+ const text = await page.textContent('.message')
60
+ expect(text).toBe('Success')
61
+ ```
62
+
63
+ ### Use soft assertions for non-critical checks
64
+
65
+ ```ts
66
+ await expect.soft(page.getByTestId('status')).toHaveText('Active')
67
+ await expect.soft(page.getByTestId('count')).toHaveText('42')
68
+ // Test continues even if soft assertions fail
69
+ ```
70
+
71
+ ## Waiting
72
+
73
+ ```ts
74
+ // ✅ Wait for specific conditions
75
+ await page.waitForResponse(resp => resp.url().includes('/api/users') && resp.status() === 200)
76
+ await expect(page.getByText('Loaded')).toBeVisible()
77
+
78
+ // ❌ Never use fixed timeouts
79
+ await page.waitForTimeout(3000)
80
+ ```
81
+
82
+ - **Never use `waitForTimeout()`** — use auto-retrying assertions or `waitForResponse`.
83
+ - Trust Playwright's auto-waiting for actions (click, fill, etc.).
84
+ - Use `networkidle` sparingly — prefer waiting for specific elements.
85
+
86
+ ## Page Object Model
87
+
88
+ ```ts
89
+ // pages/LoginPage.ts
90
+ import { type Page, type Locator } from '@playwright/test'
91
+
92
+ export class LoginPage {
93
+ private readonly emailInput: Locator
94
+ private readonly passwordInput: Locator
95
+ private readonly submitButton: Locator
96
+
97
+ constructor(private readonly page: Page) {
98
+ this.emailInput = page.getByLabel('Email')
99
+ this.passwordInput = page.getByLabel('Password')
100
+ this.submitButton = page.getByRole('button', { name: 'Sign in' })
101
+ }
102
+
103
+ async goto(): Promise<void> {
104
+ await this.page.goto('/login')
105
+ }
106
+
107
+ async login(email: string, password: string): Promise<void> {
108
+ await this.emailInput.fill(email)
109
+ await this.passwordInput.fill(password)
110
+ await this.submitButton.click()
111
+ }
112
+ }
113
+ ```
114
+
115
+ ### Rules
116
+
117
+ - One Page Object per page or major component.
118
+ - Locators are **defined in the constructor**, not inline in methods.
119
+ - Methods represent **user actions**, not DOM manipulations.
120
+
121
+ ## Test Data Management
122
+
123
+ ### API-based setup (preferred)
124
+
125
+ ```ts
126
+ test.beforeEach(async ({ request }) => {
127
+ // Create test data via API — faster than UI
128
+ await request.post('/api/test/seed', { data: { scenario: 'basic-customer' } })
129
+ })
130
+
131
+ test.afterEach(async ({ request }) => {
132
+ await request.post('/api/test/cleanup')
133
+ })
134
+ ```
135
+
136
+ ### Rules
137
+
138
+ - **Prefer API calls** over UI interactions for test data setup — faster and more reliable.
139
+ - Use seeded test accounts with known credentials.
140
+ - Never depend on data created by another test.
141
+ - For database-backed apps: use a dedicated test database or transactional rollback.
142
+
143
+ ## Configuration
144
+
145
+ ### `playwright.config.ts` essentials
146
+
147
+ ```ts
148
+ import { defineConfig, devices } from '@playwright/test'
149
+
150
+ export default defineConfig({
151
+ testDir: './tests/e2e/specs',
152
+ fullyParallel: true,
153
+ forbidOnly: !!process.env.CI,
154
+ retries: process.env.CI ? 2 : 0,
155
+ workers: process.env.CI ? 1 : undefined,
156
+ reporter: [
157
+ ['html', { open: 'never' }],
158
+ ...(process.env.CI ? [['github'] as const] : []),
159
+ ],
160
+ use: {
161
+ baseURL: process.env.BASE_URL || 'http://localhost:3000',
162
+ trace: 'on-first-retry',
163
+ screenshot: 'only-on-failure',
164
+ video: 'retain-on-failure',
165
+ },
166
+ projects: [
167
+ { name: 'chromium', use: { ...devices['Desktop Chrome'] } },
168
+ { name: 'firefox', use: { ...devices['Desktop Firefox'] } },
169
+ { name: 'webkit', use: { ...devices['Desktop Safari'] } },
170
+ { name: 'mobile-chrome', use: { ...devices['Pixel 5'] } },
171
+ { name: 'mobile-safari', use: { ...devices['iPhone 13'] } },
172
+ ],
173
+ webServer: {
174
+ command: 'npm run dev',
175
+ url: 'http://localhost:3000',
176
+ reuseExistingServer: !process.env.CI,
177
+ },
178
+ })
179
+ ```
180
+
181
+ ### Key settings
182
+
183
+ | Setting | Local | CI | Why |
184
+ |---|---|---|---|
185
+ | `workers` | Auto (CPU cores) | `1` | Stability over speed in CI |
186
+ | `retries` | `0` | `2` | Catch flakes in CI, fail fast locally |
187
+ | `trace` | `off` | `on-first-retry` | Traces are expensive, only collect on failure |
188
+ | `fullyParallel` | `true` | `true` | Tests must be isolated anyway |
189
+ | `forbidOnly` | `false` | `true` | Prevent `.only` from reaching CI |
190
+
191
+ ## CI Integration (GitHub Actions)
192
+
193
+ ```yaml
194
+ name: E2E Tests
195
+ on:
196
+ push:
197
+ branches: [main]
198
+ pull_request:
199
+ branches: [main]
200
+
201
+ jobs:
202
+ e2e:
203
+ runs-on: ubuntu-latest
204
+ steps:
205
+ - uses: actions/checkout@v4
206
+ - uses: actions/setup-node@v4
207
+ with:
208
+ node-version: 20
209
+ - run: npm ci
210
+ - run: npx playwright install chromium --with-deps
211
+ - run: npx playwright test
212
+ - uses: actions/upload-artifact@v4
213
+ if: ${{ !cancelled() }}
214
+ with:
215
+ name: playwright-report
216
+ path: playwright-report/
217
+ retention-days: 14
218
+ ```
219
+
220
+ ### Sharding for large suites
221
+
222
+ ```yaml
223
+ strategy:
224
+ matrix:
225
+ shard: [1, 2, 3, 4]
226
+ steps:
227
+ - run: npx playwright test --shard=${{ matrix.shard }}/4
228
+ ```
229
+
230
+ - **Only install browsers you need** — `npx playwright install chromium --with-deps` not `npx playwright install`.
231
+ - Use **Linux runners** in CI — cheapest and most stable.
232
+ - Upload `playwright-report/` as artifact for failure debugging.
233
+ - Use **sharding** when suite exceeds ~5 minutes.
234
+
235
+ ## Visual Regression
236
+
237
+ ```ts
238
+ test('dashboard layout', async ({ page }) => {
239
+ await page.goto('/dashboard')
240
+ await expect(page).toHaveScreenshot('dashboard.png', {
241
+ maxDiffPixelRatio: 0.01,
242
+ fullPage: true,
243
+ })
244
+ })
245
+ ```
246
+
247
+ - Store baselines in version control.
248
+ - Update with `npx playwright test --update-snapshots`.
249
+ - Pin OS + browser version in CI — visual diffs are platform-sensitive.
250
+ - Use `maxDiffPixelRatio` or `maxDiffPixels` for tolerance.
251
+
252
+ ## Avoiding Flaky Tests
253
+
254
+ | Problem | Solution |
255
+ |---|---|
256
+ | Element not ready | Use auto-retrying assertions (`toBeVisible`, `toHaveText`) |
257
+ | Animation interference | Disable transitions: `page.addStyleTag({ content: '*, *::before, *::after { transition: none !important; animation: none !important; }' })` |
258
+ | Network timing | Wait for specific responses, not arbitrary timeouts |
259
+ | Test isolation | Fresh browser context per test (default) |
260
+ | Shared state | Reset data via API before each test |
261
+ | Date/time dependent | Use Playwright's clock API: `page.clock.setFixedTime()` |
262
+ | Third-party resources | Mock with `page.route()` |
263
+
264
+ ## Debugging
265
+
266
+ ```bash
267
+ # Headed mode — watch the browser
268
+ npx playwright test --headed
269
+
270
+ # Debug mode — step through with inspector
271
+ npx playwright test --debug
272
+
273
+ # Specific test
274
+ npx playwright test -g "should login"
275
+
276
+ # View HTML report
277
+ npx playwright show-report
278
+
279
+ # Generate tests interactively
280
+ npx playwright codegen http://localhost:3000
281
+ ```
282
+
283
+ ## Handling Unfixable Tests
284
+
285
+ When a test fails and the failure is in the **application** (not the test), use `test.fixme()`:
286
+
287
+ ```ts
288
+ test.fixme('should display user avatar', async ({ page }) => {
289
+ // BUG: Avatar endpoint returns 404 since API v2 migration.
290
+ // Tracked in JIRA: GALA-1234
291
+ await page.goto('/profile')
292
+ await expect(page.getByRole('img', { name: 'Avatar' })).toBeVisible()
293
+ })
294
+ ```
295
+
296
+ ### Rules
297
+
298
+ - Use `test.fixme()` — **not** `test.skip()` — for tests that should work but don't due to app bugs.
299
+ - Use `test.skip()` only for **environment-specific** skips (e.g., `test.skip(process.env.CI, 'requires local GPU')`).
300
+ - Always add a **comment before the failing step** explaining the current behavior vs. expected.
301
+ - Link to an issue tracker ticket if available.
302
+
303
+ ## Healer Workflow (Debugging Failing Tests)
304
+
305
+ When tests fail, follow this systematic approach:
306
+
307
+ 1. **Run** — Execute the failing test(s) to see current errors
308
+ 2. **Debug** — Use `--debug` mode or trace viewer to inspect state at failure point
309
+ 3. **Investigate** — Check: selectors changed? Timing issue? Data dependency? App change?
310
+ 4. **Fix** — Update the test code (one fix at a time)
311
+ 5. **Verify** — Re-run the specific test to confirm the fix
312
+ 6. **Iterate** — Repeat until all tests pass
313
+
314
+ ### Common failure patterns
315
+
316
+ | Symptom | Likely Cause | Fix |
317
+ |---|---|---|
318
+ | Element not found | Selector changed | Update locator, prefer semantic |
319
+ | Timeout waiting for element | Slow load / missing element | Add `waitForResponse` or check if feature removed |
320
+ | Assertion mismatch | App behavior changed | Update expected value or test logic |
321
+ | Intermittent pass/fail | Race condition | Add proper waits, remove shared state |
322
+ | Works locally, fails in CI | Environment difference | Check `baseURL`, headless mode, viewport |
323
+
324
+ ### When to give up
325
+
326
+ If a test **consistently fails** despite correct test logic (confirmed by manual inspection):
327
+ - Mark with `test.fixme()` + detailed comment
328
+ - File a bug ticket for the underlying application issue
329
+ - Move on — don't spend more than 3 attempts fixing a single test
330
+
331
+ ## Agent-Driven Test Pipeline
332
+
333
+ For AI-assisted E2E workflows, follow this pipeline:
334
+
335
+ ### Phase 1: Plan
336
+ - Explore the application (navigate pages, identify flows)
337
+ - Document test scenarios in Markdown with numbered steps
338
+ - Include: happy path, edge cases, error handling, validation
339
+
340
+ ### Phase 2: Generate
341
+ - Convert Markdown plans into Playwright test files
342
+ - Follow all conventions from this guideline
343
+ - One test file per scenario group
344
+ - Add step comments before each action
345
+
346
+ ### Phase 3: Heal
347
+ - Run all generated tests
348
+ - Debug failures systematically (see Healer Workflow above)
349
+ - Fix or mark as `test.fixme()` if the app is broken
350
+ - Verify all fixes, iterate until green
351
+
352
+ ## Do NOT
353
+
354
+ - Do NOT use `page.waitForTimeout()` — always wait for a condition.
355
+ - Do NOT use CSS selectors when `getByRole`/`getByLabel`/`getByTestId` work.
356
+ - Do NOT put assertions in Page Objects — only in test files.
357
+ - Do NOT share state between tests — each test must be independent.
358
+ - Do NOT hardcode URLs — use `baseURL` from config.
359
+ - Do NOT test third-party dependencies — mock external services with `page.route()`.
360
+ - Do NOT commit `.only` — use `forbidOnly: !!process.env.CI` to prevent this.
361
+ - Do NOT use `networkidle` as default `waitUntil` — it's slow and unreliable.
362
+ - Do NOT skip writing `data-testid` when no semantic locator is available.
363
+ - Do NOT use deprecated APIs — check Playwright changelog for removed features.
@@ -0,0 +1,115 @@
1
+ # API Design Guidelines
2
+
3
+ > API conventions — response format, status codes, pagination, error handling, rate limiting, route naming.
4
+
5
+ **Related Skills:** `api-design`, `api-endpoint`, `api-testing`
6
+ **Related Guidelines:** [controllers.md](controllers.md), [resources.md](resources.md)
7
+
8
+ ## Response Format
9
+
10
+ - **Always use API Resource classes** — never return raw models or arrays.
11
+ - **Single item:** `{ "data": { ... } }`
12
+ - **Collection:** `{ "data": [ ... ], "meta": { ... }, "links": { ... } }`
13
+
14
+ ## HTTP Status Codes
15
+
16
+ | Code | When |
17
+ |---|---|
18
+ | `200` | Successful GET, PUT, PATCH |
19
+ | `201` | Successful POST (resource created) |
20
+ | `204` | Successful DELETE (no content) |
21
+ | `400` | Bad request (malformed input) |
22
+ | `401` | Unauthenticated |
23
+ | `403` | Unauthorized (forbidden) |
24
+ | `404` | Resource not found |
25
+ | `422` | Validation error |
26
+ | `429` | Rate limited |
27
+ | `500` | Server error |
28
+
29
+ ## Pagination
30
+
31
+ Use Laravel's built-in pagination for list endpoints:
32
+
33
+ ```php
34
+ $projects = Project::query()
35
+ ->filter($filters)
36
+ ->paginate(perPage: $request->integer('per_page', 15));
37
+ ```
38
+
39
+ | Parameter | Default | Description |
40
+ |---|---|---|
41
+ | `page` | 1 | Current page number |
42
+ | `per_page` | 15 | Items per page |
43
+
44
+ ## Filtering and Sorting
45
+
46
+ - Use the project's **filter pipeline** pattern (see `agents/docs/query-filter.md`).
47
+ - Filter classes are dedicated, testable units — not inline query logic.
48
+ - Sorting via `sort` query parameter.
49
+
50
+ ## Error Responses
51
+
52
+ ### Validation errors (422)
53
+
54
+ Laravel's default format:
55
+
56
+ ```json
57
+ {
58
+ "message": "The given data was invalid.",
59
+ "errors": {
60
+ "field": ["The field is required."]
61
+ }
62
+ }
63
+ ```
64
+
65
+ ### Application errors
66
+
67
+ ```json
68
+ {
69
+ "message": "Human-readable error description."
70
+ }
71
+ ```
72
+
73
+ Error format must match existing project convention — not RFC 7807 or other standards.
74
+
75
+ ## Rate Limiting
76
+
77
+ ```php
78
+ // bootstrap/app.php or RouteServiceProvider
79
+ RateLimiter::for('api', function (Request $request) {
80
+ return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
81
+ });
82
+
83
+ RateLimiter::for('auth', function (Request $request) {
84
+ return Limit::perMinute(5)->by($request->ip());
85
+ });
86
+ ```
87
+
88
+ Include in responses: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `Retry-After` (on 429).
89
+
90
+ ## Idempotency
91
+
92
+ For non-idempotent operations (POST), support idempotency keys:
93
+
94
+ ```
95
+ POST /api/v1/orders
96
+ Idempotency-Key: unique-client-generated-uuid
97
+ ```
98
+
99
+ ## Route Naming
100
+
101
+ - Dot notation: `v1.projects.index`, `v1.projects.show`
102
+ - Route prefixes in kebab-case: `/api/v1/client-software`
103
+ - Controllers in singular: `ProjectController`
104
+ - Implicit route model binding where possible
105
+ - Scope bindings for nested resources
106
+ - Max nesting depth: 2 levels (`/users/{id}/orders/{id}`)
107
+
108
+ ## Do NOT
109
+
110
+ - Return raw Eloquent models — always use API Resources.
111
+ - Put business logic in controllers — delegate to services.
112
+ - Create breaking changes in existing versions — create a new version.
113
+ - Use inconsistent response formats between endpoints.
114
+ - Expose internal IDs or database column names that should be hidden.
115
+ - Skip rate limiting on authentication endpoints.