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